/// <summary> /// Returns documentation for the callable (if kind is Function or Constructor) or type (if kind is Struct) in /// the compilation unit with the given qualified name. Returns null if no documentation is available or the /// completion item data is missing properties. /// </summary> private static string?TryGetDocumentation( CompilationUnit compilation, CompletionItemData data, CompletionItemKind kind, bool useMarkdown) { if (data.QualifiedName == null || data.SourceFile == null || !compilation.GlobalSymbols.NamespaceExists(data.QualifiedName.Namespace)) { return(null); } switch (kind) { case CompletionItemKind.Function: case CompletionItemKind.Constructor: var result = compilation.GlobalSymbols.TryGetCallable( data.QualifiedName, data.QualifiedName.Namespace, data.SourceFile); if (!(result is ResolutionResult <CallableDeclarationHeader> .Found callable)) { return(null); } var signature = callable.Item.PrintSignature(); var documentation = callable.Item.Documentation.PrintSummary(useMarkdown); return(signature.Trim() + "\n\n" + documentation.Trim()); case CompletionItemKind.Struct: var type = compilation.GlobalSymbols.TryGetType( data.QualifiedName, data.QualifiedName.Namespace, data.SourceFile) as ResolutionResult <TypeDeclarationHeader> .Found; return(type?.Item.Documentation.PrintSummary(useMarkdown).Trim()); default: return(null); } }
public void KindShouldBeModuleGivenSchemaDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.Module; DeclarationType declarationType = DeclarationType.Schema; ValidateDeclarationType(declarationType, expectedType); }
public CompletionItemEx CreateCompletionItem(string text, CompletionItemKind kind, IMember member, IPythonType self = null, string label = null) { var t = member?.GetPythonType(); var docFormat = _docSource.DocumentationFormat; if (Options.addBrackets && (kind == CompletionItemKind.Constructor || kind == CompletionItemKind.Function || kind == CompletionItemKind.Method)) { label = text; text += "($0)"; docFormat = InsertTextFormat.Snippet; } return(new CompletionItemEx { label = label ?? text, insertText = text, insertTextFormat = docFormat, // Place regular items first, advanced entries last sortText = char.IsLetter(text, 0) ? "1" : "2", kind = kind, documentation = !t.IsUnknown() ? _docSource.GetHover(label ?? text, member, self) : null, // Custom fields used by the LS extensions that may modify // the completion list. Not passed to the client. Member = member, PythonType = self }); }
public void KindShouldBeFileGivenViewDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.File; DeclarationType declarationType = DeclarationType.View; ValidateDeclarationType(declarationType, expectedType); }
public void KindShouldBeFieldGivenColumnDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.Field; DeclarationType declarationType = DeclarationType.Column; ValidateDeclarationType(declarationType, expectedType); }
public void KindShouldBeMethodGivenDatabaseDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.Method; DeclarationType declarationType = DeclarationType.Database; ValidateDeclarationType(declarationType, expectedType); }
private CompletionItem CreateCompletionItem(ISymbolInformation symbol, CompletionType desire) { CompletionItemKind kind = Enum.TryParse(symbol.Kind.ToString(), true, out kind) ? kind : CompletionItemKind.Reference; var insertCode = GetCompletionCodeFragment(symbol, desire); var details = ""; if (symbol.Params != null) { details += LoggingMessages.completion_params + ": " + string.Join(", ", symbol?.Params.Select(parameter => parameter.Name + ": " + parameter.Type)) + "\n "; } #if DEBUG details += $"Kind: { symbol.Kind } \n Parent: { symbol.Parent.Name }"; #endif return (new CompletionItem { Label = symbol.Name, Kind = kind, InsertText = insertCode, Detail = details }); }
public void KindShouldBeUnitGivenUnknownDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.Unit; DeclarationType declarationType = DeclarationType.XmlIndex; ValidateDeclarationType(declarationType, expectedType); }
public void KindShouldBeValueGivenTableValuedFunctionDeclarationType() { CompletionItemKind expectedType = CompletionItemKind.Value; DeclarationType declarationType = DeclarationType.TableValuedFunction; ValidateDeclarationType(declarationType, expectedType); }
public CompletionItem(string label, CompletionItemKind kind, string detail, MarkupContent documentation, JToken data) { Label = label; Kind = kind; Detail = detail; Documentation = documentation; Data = data; }
private CompletionItem CreateItem(string v, CompletionItemKind kind) { return(new CompletionItem() { Label = v, Kind = kind, }); }
private CompletionItem CreateCompletionItem(string label, CompletionItemKind kind, string detail = null) { return(new CompletionItem() { Label = label, Kind = kind, Detail = detail }); }
private void ValidateDeclarationType(DeclarationType declarationType, CompletionItemKind expectedType) { string declarationTitle = "name"; string tokenText = ""; SqlCompletionItem item = new SqlCompletionItem(declarationTitle, declarationType, tokenText); CompletionItem completionItem = item.CreateCompletionItem(0, 1, 2); Assert.Equal(completionItem.Kind, expectedType); }
public CompletionItem( CompletionItemKind kind, string label, string insertText = null, string detail = null) { Kind = kind; Label = label ?? throw new ArgumentNullException(nameof(label)); InsertText = insertText; Detail = detail; }
/// <summary> /// Creates a completion that inserts a snippet. The user may not necessarily know that a snippet is being inserted. /// </summary> public static CompletionItem CreateSnippetCompletion(CompletionItemKind kind, string label, string snippet, string detail, bool preselect = false, CompletionPriority priority = CompletionPriority.Medium, Container <string>?commitCharacters = null) => new CompletionItem { Kind = kind, Label = label, InsertTextFormat = InsertTextFormat.Snippet, InsertText = snippet, Detail = detail, Preselect = preselect, SortText = GetSortText(label, priority), CommitCharacters = commitCharacters };
/// <summary> /// Converts a list of Declaration objects to CompletionItem objects /// since VS Code expects CompletionItems but SQL Parser works with Declarations /// </summary> /// <param name="suggestions"></param> /// <param name="cursorRow"></param> /// <param name="cursorColumn"></param> /// <returns></returns> internal static CompletionItem[] ConvertDeclarationsToCompletionItems( IEnumerable <Declaration> suggestions, int row, int startColumn, int endColumn) { List <CompletionItem> completions = new List <CompletionItem>(); foreach (var autoCompleteItem in suggestions) { string insertText = GetCompletionItemInsertName(autoCompleteItem); CompletionItemKind kind = CompletionItemKind.Variable; switch (autoCompleteItem.Type) { case DeclarationType.Schema: kind = CompletionItemKind.Module; break; case DeclarationType.Column: kind = CompletionItemKind.Field; break; case DeclarationType.Table: case DeclarationType.View: kind = CompletionItemKind.File; break; case DeclarationType.Database: kind = CompletionItemKind.Method; break; case DeclarationType.ScalarValuedFunction: case DeclarationType.TableValuedFunction: case DeclarationType.BuiltInFunction: kind = CompletionItemKind.Value; break; default: kind = CompletionItemKind.Unit; break; } // convert the completion item candidates into CompletionItems completions.Add(CreateCompletionItem(autoCompleteItem.Title, autoCompleteItem.Title, insertText, kind, row, startColumn, endColumn)); } return(completions.ToArray()); }
/// <summary> /// Returns documentation for the callable (if kind is Function or Constructor) or type (if kind is Struct) in /// the compilation unit with the given qualified name. Returns null if no documentation is available or the /// completion item data is missing properties. /// </summary> /// <exception cref="ArgumentNullException">Thrown when any argument is null.</exception> private static string TryGetDocumentation( CompilationUnit compilation, CompletionItemData data, CompletionItemKind kind, bool useMarkdown) { if (compilation == null) { throw new ArgumentNullException(nameof(compilation)); } if (data == null) { throw new ArgumentNullException(nameof(data)); } if (data.QualifiedName == null || data.SourceFile == null || !compilation.GlobalSymbols.NamespaceExists(data.QualifiedName.Namespace)) { return(null); } switch (kind) { case CompletionItemKind.Function: case CompletionItemKind.Constructor: var callable = compilation.GlobalSymbols.TryGetCallable( data.QualifiedName, data.QualifiedName.Namespace, NonNullable <string> .New(data.SourceFile)); if (callable.IsNull) { return(null); } var signature = callable.Item.PrintSignature(); var documentation = callable.Item.Documentation.PrintSummary(useMarkdown); return(signature.Trim() + "\n\n" + documentation.Trim()); case CompletionItemKind.Struct: var type = compilation.GlobalSymbols.TryGetType( data.QualifiedName, data.QualifiedName.Namespace, NonNullable <string> .New(data.SourceFile)) .Item; return(type?.Documentation.PrintSummary(useMarkdown).Trim()); default: return(null); } }
/// <summary> /// Creates a completion item /// </summary> public static CompletionItem CreateCompletionItem( string label, string detail, string insertText, CompletionItemKind kind, int row, int startColumn, int endColumn) { CompletionItem item = new CompletionItem() { Label = label, Kind = kind, Detail = detail, InsertText = insertText, TextEdit = new TextEdit { NewText = insertText, Range = new Range { Start = new Position { Line = row, Character = startColumn }, End = new Position { Line = row, Character = endColumn } } } }; return(item); }
private CompletionItemKind CreateCompletionItemKind() { CompletionItemKind kind = CompletionItemKind.Variable; switch (DeclarationType) { case DeclarationType.Schema: kind = CompletionItemKind.Module; break; case DeclarationType.Column: kind = CompletionItemKind.Field; break; case DeclarationType.Table: case DeclarationType.View: kind = CompletionItemKind.File; break; case DeclarationType.Database: kind = CompletionItemKind.Method; break; case DeclarationType.ScalarValuedFunction: case DeclarationType.TableValuedFunction: case DeclarationType.BuiltInFunction: kind = CompletionItemKind.Value; break; default: kind = CompletionItemKind.Unit; break; } return(kind); }
public CompletionItem(string label, CompletionItemKind kind) { Label = label; Kind = kind; }
private CompletionItemBuilder(CompletionItemKind kind, string label) { this.kind = kind; this.label = label; }
public static CompletionItemBuilder Create(CompletionItemKind kind, string label) => new CompletionItemBuilder(kind, label);
public static CompletionItemEx CreateCompletionItem(string text, CompletionItemKind kind) => new CompletionItemEx { label = text, insertText = text, insertTextFormat = InsertTextFormat.PlainText, sortText = char.IsLetter(text, 0) ? "1" : "2", kind = kind };
public CompletionItem(string label, string insertText, CompletionItemKind kind) { InsertText = insertText; Label = label; Kind = kind; }
public CompletionItem(string label, CompletionItemKind kind, string detail, JToken data) : this(label, kind, detail, null, data) { }
public CompletionItem(CompletionItemKind kind, string label, string insertText = null, string detail = null);
private ImageElement GetCompletionImage(CompletionItemKind kind) { var moniker = KnownMonikers.Method; switch (kind) { case CompletionItemKind.Text: moniker = KnownMonikers.TextElement; break; case CompletionItemKind.Method: moniker = KnownMonikers.MethodPublic; break; case CompletionItemKind.Function: moniker = KnownMonikers.MethodPublic; break; case CompletionItemKind.Constructor: moniker = KnownMonikers.ClassPublic; break; case CompletionItemKind.Field: moniker = KnownMonikers.FieldPrivate; break; case CompletionItemKind.Variable: moniker = KnownMonikers.LocalVariable; break; case CompletionItemKind.Class: moniker = KnownMonikers.ClassPublic; break; case CompletionItemKind.Interface: moniker = KnownMonikers.InterfacePublic; break; case CompletionItemKind.Module: moniker = KnownMonikers.ModulePublic; break; case CompletionItemKind.Property: moniker = KnownMonikers.PropertyPublic; break; case CompletionItemKind.Unit: moniker = KnownMonikers.Numeric; break; case CompletionItemKind.Value: moniker = KnownMonikers.ValueType; break; case CompletionItemKind.Enum: moniker = KnownMonikers.EnumerationPublic; break; case CompletionItemKind.Keyword: moniker = KnownMonikers.IntellisenseKeyword; break; case CompletionItemKind.Snippet: moniker = KnownMonikers.Snippet; break; case CompletionItemKind.Color: moniker = KnownMonikers.ColorPalette; break; case CompletionItemKind.File: moniker = KnownMonikers.TextFile; break; case CompletionItemKind.Reference: moniker = KnownMonikers.Reference; break; case CompletionItemKind.Folder: moniker = KnownMonikers.FolderClosed; break; case CompletionItemKind.EnumMember: moniker = KnownMonikers.EnumerationItemPublic; break; case CompletionItemKind.Constant: moniker = KnownMonikers.ConstantPublic; break; case CompletionItemKind.Struct: moniker = KnownMonikers.StructurePublic; break; case CompletionItemKind.Event: moniker = KnownMonikers.EventPublic; break; case CompletionItemKind.Operator: moniker = KnownMonikers.Operator; break; case CompletionItemKind.TypeParameter: moniker = KnownMonikers.Type; break; default: break; } return(new ImageElement(moniker.ToImageId())); }
public static CompletionItem Create(CompletionItemKind kind) => new CompletionItem { Kind = kind };
public static int ToMonacoCompletionItemKind(ImmutableArray <string> completionTags) { const CompletionItemKind defaultKind = CompletionItemKind.Text; if (completionTags.Length == 0) { return((int)defaultKind); } if (completionTags.Contains(CompletionTags.Assembly) || completionTags.Contains(CompletionTags.Namespace) || completionTags.Contains(CompletionTags.Project) || completionTags.Contains(CompletionTags.Module)) { return((int)CompletionItemKind.Module); } if (completionTags.Contains(CompletionTags.Class) || completionTags.Contains(CompletionTags.Structure)) { return((int)CompletionItemKind.Class); } if (completionTags.Contains(CompletionTags.Constant) || completionTags.Contains(CompletionTags.Field) || completionTags.Contains(CompletionTags.Delegate) || completionTags.Contains(CompletionTags.Event) || completionTags.Contains(CompletionTags.Local)) { return((int)CompletionItemKind.Field); } if (completionTags.Contains(CompletionTags.Enum) || completionTags.Contains(CompletionTags.EnumMember)) { return((int)CompletionItemKind.Enum); } if (completionTags.Contains(CompletionTags.Method) || completionTags.Contains(CompletionTags.Operator)) { return((int)CompletionItemKind.Method); } if (completionTags.Contains(CompletionTags.ExtensionMethod)) { return((int)CompletionItemKind.Function); } if (completionTags.Contains(CompletionTags.Interface)) { return((int)CompletionItemKind.Interface); } if (completionTags.Contains(CompletionTags.Property)) { return((int)CompletionItemKind.Property); } if (completionTags.Contains(CompletionTags.Keyword)) { return((int)CompletionItemKind.Keyword); } if (completionTags.Contains(CompletionTags.Reference)) { return((int)CompletionItemKind.Reference); } if (completionTags.Contains(CompletionTags.Snippet)) { return((int)CompletionItemKind.Snippet); } return((int)defaultKind); }