示例#1
0
        /// <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);
            }
        }
示例#2
0
        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
            });
        }
示例#4
0
        public void KindShouldBeFileGivenViewDeclarationType()
        {
            CompletionItemKind expectedType    = CompletionItemKind.File;
            DeclarationType    declarationType = DeclarationType.View;

            ValidateDeclarationType(declarationType, expectedType);
        }
示例#5
0
        public void KindShouldBeFieldGivenColumnDeclarationType()
        {
            CompletionItemKind expectedType    = CompletionItemKind.Field;
            DeclarationType    declarationType = DeclarationType.Column;

            ValidateDeclarationType(declarationType, expectedType);
        }
示例#6
0
        public void KindShouldBeMethodGivenDatabaseDeclarationType()
        {
            CompletionItemKind expectedType    = CompletionItemKind.Method;
            DeclarationType    declarationType = DeclarationType.Database;

            ValidateDeclarationType(declarationType, expectedType);
        }
示例#7
0
        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
            });
        }
示例#8
0
        public void KindShouldBeUnitGivenUnknownDeclarationType()
        {
            CompletionItemKind expectedType    = CompletionItemKind.Unit;
            DeclarationType    declarationType = DeclarationType.XmlIndex;

            ValidateDeclarationType(declarationType, expectedType);
        }
示例#9
0
        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;
 }
示例#11
0
 private CompletionItem CreateItem(string v, CompletionItemKind kind)
 {
     return(new CompletionItem()
     {
         Label = v,
         Kind = kind,
     });
 }
示例#12
0
 private CompletionItem CreateCompletionItem(string label, CompletionItemKind kind, string detail = null)
 {
     return(new CompletionItem()
     {
         Label = label,
         Kind = kind,
         Detail = detail
     });
 }
示例#13
0
        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);
        }
示例#14
0
 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;
 }
示例#15
0
 /// <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);
            }
        }
示例#18
0
        /// <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);
        }
示例#19
0
        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;
 }
示例#21
0
 private CompletionItemBuilder(CompletionItemKind kind, string label)
 {
     this.kind  = kind;
     this.label = label;
 }
示例#22
0
 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
 };
示例#24
0
 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)
 {
 }
示例#26
0
 public CompletionItem(CompletionItemKind kind, string label, string insertText = null, string detail = null);
示例#27
0
        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()));
        }
示例#28
0
 public static CompletionItem Create(CompletionItemKind kind) => new CompletionItem
 {
     Kind = kind
 };
示例#29
0
        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);
        }