private CompletionItem ToCompletionItem(IMemberResult m)
        {
            var completion = m.Completion;

            if (string.IsNullOrEmpty(completion))
            {
                completion = m.Name;
            }
            if (string.IsNullOrEmpty(completion))
            {
                return(default(CompletionItem));
            }
            var doc = _textBuilder.GetDocumentation(m.Values, string.Empty);
            var res = new CompletionItem {
                label         = m.Name,
                insertText    = completion,
                documentation = string.IsNullOrWhiteSpace(doc) ? null : new MarkupContent {
                    kind  = _textBuilder.DisplayOptions.preferredFormat,
                    value = doc
                },
                // Place regular items first, advanced entries last
                sortText = char.IsLetter(completion, 0) ? "1" : "2",
                kind     = ToCompletionItemKind(m.MemberType),
                _kind    = m.MemberType.ToString().ToLowerInvariant()
            };

            return(res);
        }
        private DocumentSymbol ToDocumentSymbol(IMemberResult m, Dictionary <IMemberResult, List <IMemberResult> > childMap, int currentDepth)
        {
            var res = new DocumentSymbol {
                name          = m.Name,
                detail        = m.Name,
                kind          = ToSymbolKind(m.MemberType),
                deprecated    = false,
                _functionKind = GetFunctionKind(m)
            };

            if (childMap.TryGetValue(m, out var children) && currentDepth < _symbolHierarchyDepthLimit)
            {
                res.children = children
                               .Select(x => ToDocumentSymbol(x, childMap, currentDepth + 1))
                               .ToArray();
            }
            else
            {
                res.children = Array.Empty <DocumentSymbol>();
            }

            var loc = m.Locations.FirstOrDefault(l => !string.IsNullOrEmpty(l.FilePath));

            if (loc != null)
            {
                res.range = new SourceSpan(
                    new SourceLocation(loc.StartLine, loc.StartColumn),
                    new SourceLocation(loc.EndLine ?? loc.StartLine, loc.EndColumn ?? loc.StartColumn)
                    );
                res.selectionRange = res.range;
            }
            return(res);
        }
Esempio n. 3
0
        private static IMemberResult[] ModuleDictToMemberResult(Dictionary <string, List <ModuleLoadState> > d)
        {
            var result = new IMemberResult[d.Count];
            int pos    = 0;

            foreach (var kvp in d)
            {
                var lazyEnumerator = new LazyModuleEnumerator(kvp.Value);
                result[pos++] = new MemberResult(
                    kvp.Key,
                    lazyEnumerator.GetLazyModules,
                    lazyEnumerator.GetModuleType
                    );
            }
            return(result);
        }
 /// <summary>
 /// Fires when a method returns value
 /// </summary>
 /// <param name="appResult">Result base</param>
 /// <param name="method">Current method in execution</param>
 public virtual void OnMethodReturn(ApplicationResult appResult, IMemberResult method)
 {
     if (method.Value != null)
     {
         if (method.Value.GetType() != typeof(string) && typeof(IEnumerable).IsAssignableFrom(method.Value.GetType()))
         {
             foreach (var value in (IEnumerable)method.Value)
             {
                 appResult.App.Descriptor.ShowMethodReturn(appResult, method, value);
             }
         }
         else
         {
             appResult.App.Descriptor.ShowMethodReturn(appResult, method, method.Value);
         }
     }
 }
Esempio n. 5
0
        private IActionResult InvokeMemberInternal(ApplicationResult args, IMemberResult member)
        {
            if (!member.IsInvoked)
            {
                if (this.OnBeforeMemberInvoke != null)
                {
                    this.OnBeforeMemberInvoke(args, member);
                }

                if (!member.IsInvoked)
                {
                    member.Invoke();
                    if (this.OnAfterMemberInvoke != null)
                    {
                        this.OnAfterMemberInvoke(args, member);
                    }
                }
            }

            MethodInfo method = null;

            if (member is MethodResult)
            {
                method = ((MethodResult)member).MethodInfo;
            }
            else if (member is MethodMainResult)
            {
                method = ((MethodMainResult)member).MethodInfo;
            }

            if (method == null || method.ReturnType == typeof(void) || member.Value == null)
            {
                return(null);
            }

            var value = member.Value as IActionResult;

            return(value ?? new ActionResult(member.Value));
        }
        private SymbolInformation ToSymbolInformation(IMemberResult m)
        {
            var res = new SymbolInformation {
                name  = m.Name,
                kind  = ToSymbolKind(m.MemberType),
                _kind = m.MemberType.ToString().ToLowerInvariant()
            };

            var loc = m.Locations.FirstOrDefault(l => !string.IsNullOrEmpty(l.FilePath));

            if (loc != null)
            {
                res.location = new Location {
                    uri   = loc.DocumentUri,
                    range = new SourceSpan(
                        new SourceLocation(loc.StartLine, loc.StartColumn),
                        new SourceLocation(loc.EndLine ?? loc.StartLine, loc.EndColumn ?? loc.StartColumn)
                        )
                };
            }

            return(res);
        }
 private static string GetFunctionKind(IMemberResult m)
 {
     if (m.MemberType == PythonMemberType.Function)
     {
         var funcInfo = m.Values.OfType <IFunctionInfo>().FirstOrDefault();
         if (funcInfo != null)
         {
             if (funcInfo.IsProperty)
             {
                 return("property");
             }
             if (funcInfo.IsStatic)
             {
                 return("staticmethod");
             }
             if (funcInfo.IsClassMethod)
             {
                 return("classmethod");
             }
         }
         return("function");
     }
     return(m.MemberType == PythonMemberType.Class ? "class" : string.Empty);
 }
 /// <summary>
 /// Fires after invoking each Member (property or method) that was parsed.
 /// </summary>
 /// <param name="appResult">Result base</param>
 /// <param name="member">Current member in execution</param>
 public virtual void OnAfterMemberInvoke(ApplicationResult appResult, IMemberResult member)
 {
 }
Esempio n. 9
0
 public void OnMethodReturn(ApplicationResult eventArgs, IMemberResult method)
 {
     eventArgs.App.Console.Write(string.Format("OnPrint: {0}: {1}", method.Name, method.Value));
 }
Esempio n. 10
0
 public void OnAfterMemberInvoke(ApplicationResult eventArgs, IMemberResult member)
 {
     eventArgs.App.Console.Write(string.Format("OnAfterMemberInvoke: {0}: {1}", member.Name, member.Value));
 }
Esempio n. 11
0
 /// <summary>
 /// Display a value for a return method
 /// </summary>
 /// <param name="appResult">Return base</param>
 /// <param name="method">MethodResult reference</param>
 /// <param name="value">Value to display</param>
 public virtual void ShowMethodReturn(ApplicationResult appResult, IMemberResult method, object value)
 {
     appResult.App.Console.Write(method.Value);
 }