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); }
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); } } }
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) { }
public void OnMethodReturn(ApplicationResult eventArgs, IMemberResult method) { eventArgs.App.Console.Write(string.Format("OnPrint: {0}: {1}", method.Name, method.Value)); }
public void OnAfterMemberInvoke(ApplicationResult eventArgs, IMemberResult member) { eventArgs.App.Console.Write(string.Format("OnAfterMemberInvoke: {0}: {1}", member.Name, member.Value)); }
/// <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); }