示例#1
0
 public static CompletionItem CreateSymbolCompletionItem(
     string displayText,
     IReadOnlyList <ISymbol> symbols,
     CompletionItemRules rules,
     int contextPosition,
     string?sortText      = null,
     string?insertionText = null,
     string?filterText    = null,
     SupportedPlatformData?supportedPlatforms        = null,
     ImmutableDictionary <string, string>?properties = null,
     ImmutableArray <string> tags = default
     ) =>
 SymbolCompletionItem.CreateWithSymbolId(
     displayText,
     displayTextSuffix: null,
     symbols,
     rules,
     contextPosition,
     sortText,
     insertionText,
     filterText,
     displayTextPrefix: null,
     inlineDescription: null,
     glyph: null,
     supportedPlatforms,
     properties,
     tags
     );
 public XmlDocCommentCompletionItem(CompletionListProvider provider,
                                    TextSpan filterSpan,
                                    string displayText,
                                    CompletionItemRules rules)
     : this(provider, filterSpan, displayText, displayText, string.Empty, rules)
 {
 }
示例#3
0
        // Internal virtual for testing
        internal virtual IEnumerable <CompletionItem> GetCompletionItems(RazorSyntaxTree syntaxTree)
        {
            var directives      = syntaxTree.Options.Directives.Concat(DefaultDirectives);
            var completionItems = new List <CompletionItem>();

            foreach (var directive in directives)
            {
                var propertyDictionary = new Dictionary <string, string>(StringComparer.Ordinal);

                if (!string.IsNullOrEmpty(directive.Description))
                {
                    propertyDictionary[DescriptionKey] = directive.Description;
                }

                var completionItem = CompletionItem.Create(
                    directive.Directive,
                    // This groups all Razor directives together
                    sortText: "_RazorDirective_",
                    rules: CompletionItemRules.Create(formatOnCommit: false),
                    tags: ImmutableArray.Create(CompletionTags.Intrinsic),
                    properties: propertyDictionary.ToImmutableDictionary());
                completionItems.Add(completionItem);
            }

            return(completionItems);
        }
        public FileSystemCompletionHelper(
            CompletionProvider completionProvider,
            TextSpan textChangeSpan,
            ICurrentWorkingDirectoryDiscoveryService fileSystemDiscoveryService,
            Glyph folderGlyph,
            Glyph fileGlyph,
            ImmutableArray <string> searchPaths,
            IEnumerable <string> allowableExtensions,
            Func <string, bool> exclude   = null,
            CompletionItemRules itemRules = null)
        {
            Debug.Assert(searchPaths.All(path => PathUtilities.IsAbsolute(path)));

            _completionProvider         = completionProvider;
            _textChangeSpan             = textChangeSpan;
            _searchPaths                = searchPaths;
            _allowableExtensions        = allowableExtensions.Select(e => e.ToLowerInvariant()).ToSet();
            _fileSystemDiscoveryService = fileSystemDiscoveryService;
            _folderGlyph                = folderGlyph;
            _fileGlyph = fileGlyph;
            _exclude   = exclude;
            _itemRules = itemRules;

            _lazyGetDrives = new Lazy <string[]>(() =>
                                                 IOUtilities.PerformIO(Directory.GetLogicalDrives, SpecializedCollections.EmptyArray <string>()));
        }
示例#5
0
 public static CompletionItem Create(
     string displayText,
     TextSpan span,
     ISymbol symbol,
     int contextPosition = -1,
     int descriptionPosition = -1,
     string sortText = null,
     string insertionText = null,
     Glyph? glyph = null,
     string filterText = null,
     bool preselect = false,
     SupportedPlatformData supportedPlatforms = null,
     bool isArgumentName = false,
     ImmutableDictionary<string, string> properties = null,
     CompletionItemRules rules = null)
 {
     return Create(
         displayText: displayText,
         span: span,
         symbols: ImmutableArray.Create(symbol),
         contextPosition: contextPosition,
         descriptionPosition: descriptionPosition,
         sortText: sortText,
         insertionText: insertionText,
         glyph: glyph,
         filterText: filterText,
         preselect: preselect,
         supportedPlatforms: supportedPlatforms,
         isArgumentName: isArgumentName,
         properties: properties,
         rules: rules);
 }
        public static CompletionItem Create(
            string displayText,
            TextSpan span,
            Glyph? glyph,
            DeclarationModifiers modifiers,
            int line,
            ISymbol symbol,
            SyntaxToken token,
            int descriptionPosition,
            CompletionItemRules rules)
        {
            var props = ImmutableDictionary<string, string>.Empty
                .Add("Line", line.ToString())
                .Add("Modifiers", modifiers.ToString())
                .Add("TokenSpanEnd", token.Span.End.ToString());

            return SymbolCompletionItem.Create(
                displayText: displayText,
                span: span,
                symbol: symbol,
                glyph: glyph,
                descriptionPosition: descriptionPosition,
                properties: props,
                rules: rules);
        }
示例#7
0
 public static CompletionItem CreateCommonCompletionItem(
     string displayText,
     string displayTextSuffix,
     CompletionItemRules rules,
     PythiaGlyph?glyph,
     ImmutableArray <SymbolDisplayPart> description,
     string sortText,
     string filterText,
     bool showsWarningIcon = false,
     ImmutableDictionary <string, string>?properties = null,
     ImmutableArray <string> tags = default,
     string?inlineDescription     = null
     ) =>
 CommonCompletionItem.Create(
     displayText,
     displayTextSuffix,
     rules,
     (Glyph?)glyph,
     description,
     sortText,
     filterText,
     showsWarningIcon,
     properties,
     tags,
     inlineDescription
     );
        public FileSystemCompletionHelper(
            CompletionListProvider completionProvider,
            TextSpan textChangeSpan,
            ICurrentWorkingDirectoryDiscoveryService fileSystemDiscoveryService,
            Glyph folderGlyph,
            Glyph fileGlyph,
            ImmutableArray<string> searchPaths,
            IEnumerable<string> allowableExtensions,
            Func<string, bool> exclude = null,
            CompletionItemRules itemRules = null)
        {
            Debug.Assert(searchPaths.All(path => PathUtilities.IsAbsolute(path)));

            _completionProvider = completionProvider;
            _textChangeSpan = textChangeSpan;
            _searchPaths = searchPaths;
            _allowableExtensions = allowableExtensions.Select(e => e.ToLowerInvariant()).ToSet();
            _fileSystemDiscoveryService = fileSystemDiscoveryService;
            _folderGlyph = folderGlyph;
            _fileGlyph = fileGlyph;
            _exclude = exclude;
            _itemRules = itemRules;

            _lazyGetDrives = new Lazy<string[]>(() =>
                IOUtilities.PerformIO(Directory.GetLogicalDrives, SpecializedCollections.EmptyArray<string>()));
        }
        public static CompletionItem Create(
            string displayText,
            string displayTextSuffix,
            CompletionItemRules rules,
            FSharpGlyph?glyph = null,
            ImmutableArray <SymbolDisplayPart> description = default,
            string sortText       = null,
            string filterText     = null,
            bool showsWarningIcon = false,
            ImmutableDictionary <string, string> properties = null,
            ImmutableArray <string> tags = default,
            string inlineDescription     = null
            )
        {
            var roslynGlyph = glyph.HasValue
                ? FSharpGlyphHelpers.ConvertTo(glyph.Value)
                : (Glyph?)null;

            return(CommonCompletionItem.Create(
                       displayText,
                       displayTextSuffix,
                       rules,
                       roslynGlyph,
                       description,
                       sortText,
                       filterText,
                       showsWarningIcon,
                       properties,
                       tags,
                       inlineDescription
                       ));
        }
示例#10
0
        protected static FileSystemCompletionHelper GetFileSystemCompletionHelper(
            Document document,
            Microsoft.CodeAnalysis.Glyph itemGlyph,
            ImmutableArray <string> extensions,
            CompletionItemRules completionRules)
        {
            ImmutableArray <string> referenceSearchPaths;
            string?baseDirectory;

            if (document.Project.CompilationOptions?.MetadataReferenceResolver is RuntimeMetadataReferenceResolver resolver)
            {
                referenceSearchPaths = resolver.PathResolver.SearchPaths;
                baseDirectory        = resolver.PathResolver.BaseDirectory;
            }
            else
            {
                referenceSearchPaths = ImmutableArray <string> .Empty;
                baseDirectory        = null;
            }

            return(new FileSystemCompletionHelper(
                       Microsoft.CodeAnalysis.Glyph.OpenFolder,
                       itemGlyph,
                       referenceSearchPaths,
                       GetBaseDirectory(document, baseDirectory),
                       extensions,
                       completionRules));
        }
示例#11
0
        public static CompletionItem Create(
            string displayText,
            TextSpan span,
            Glyph?glyph,
            DeclarationModifiers modifiers,
            int line,
            ISymbol symbol,
            SyntaxToken token,
            int descriptionPosition,
            CompletionItemRules rules)
        {
            var props = ImmutableDictionary <string, string> .Empty
                        .Add("Line", line.ToString())
                        .Add("Modifiers", modifiers.ToString())
                        .Add("TokenSpanEnd", token.Span.End.ToString());

            return(SymbolCompletionItem.Create(
                       displayText: displayText,
                       span: span,
                       symbol: symbol,
                       glyph: glyph,
                       descriptionPosition: descriptionPosition,
                       properties: props,
                       rules: rules));
        }
示例#12
0
 public static CompletionItem Create(
     string displayText,
     ISymbol symbol,
     int contextPosition = -1,
     string sortText = null,
     string insertionText = null,
     Glyph? glyph = null,
     string filterText = null,
     int? matchPriority = null,
     SupportedPlatformData supportedPlatforms = null,
     ImmutableDictionary<string, string> properties = null,
     CompletionItemRules rules = null)
 {
     return Create(
         displayText: displayText,
         symbols: ImmutableArray.Create(symbol),
         contextPosition: contextPosition,
         sortText: sortText,
         insertionText: insertionText,
         glyph: glyph,
         filterText: filterText,
         matchPriority: matchPriority.GetValueOrDefault(),
         supportedPlatforms: supportedPlatforms,
         properties: properties,
         rules: rules);
 }
示例#13
0
 public SymbolCompletionItem(
     CompletionListProvider completionProvider,
     string displayText,
     string insertionText,
     string filterText,
     TextSpan filterSpan,
     int position,
     List<ISymbol> symbols,
     string sortText,
     AbstractSyntaxContext context,
     Glyph glyph,
     bool preselect = false,
     SupportedPlatformData supportedPlatforms = null,
     CompletionItemRules rules = null)
 : base(completionProvider, displayText, filterSpan,
    descriptionFactory: null, glyph: glyph,
    sortText: sortText, filterText: filterText, preselect: preselect, showsWarningIcon: supportedPlatforms != null, rules: rules,
    filters: GetFilters(symbols))
 {
     this.InsertionText = insertionText;
     this.Position = position;
     this.Symbols = symbols;
     this.Context = context;
     _supportedPlatforms = supportedPlatforms;
 }
示例#14
0
 private static CompletionItem CreateWorker(
     string displayText,
     ISymbol symbol,
     Func <IReadOnlyList <ISymbol>, CompletionItem, CompletionItem> symbolEncoder,
     int contextPosition  = -1,
     string sortText      = null,
     string insertionText = null,
     Glyph?glyph          = null,
     string filterText    = null,
     int?matchPriority    = null,
     SupportedPlatformData supportedPlatforms        = null,
     ImmutableDictionary <string, string> properties = null,
     CompletionItemRules rules = null)
 {
     return(CreateWorker(
                displayText: displayText,
                symbols: ImmutableArray.Create(symbol),
                symbolEncoder: symbolEncoder,
                contextPosition: contextPosition,
                sortText: sortText,
                insertionText: insertionText,
                glyph: glyph,
                filterText: filterText,
                matchPriority: matchPriority.GetValueOrDefault(),
                supportedPlatforms: supportedPlatforms,
                properties: properties,
                rules: rules));
 }
示例#15
0
 // COMPAT OVERLOAD: This is used by IntelliCode.
 public static CompletionItem CreateWithSymbolId(
     string displayText,
     IReadOnlyList <ISymbol> symbols,
     CompletionItemRules rules,
     int contextPosition,
     string sortText      = null,
     string insertionText = null,
     string filterText    = null,
     SupportedPlatformData supportedPlatforms        = null,
     ImmutableDictionary <string, string> properties = null,
     ImmutableArray <string> tags = default)
 {
     return(CreateWithSymbolId(
                displayText,
                displayTextSuffix: null,
                symbols,
                rules,
                contextPosition,
                sortText,
                insertionText,
                filterText,
                supportedPlatforms,
                properties,
                tags));
 }
示例#16
0
 public static CompletionItem Create(
     string displayText,
     TextSpan span,
     ISymbol symbol,
     int contextPosition     = -1,
     int descriptionPosition = -1,
     string sortText         = null,
     string insertionText    = null,
     Glyph?glyph             = null,
     string filterText       = null,
     bool preselect          = false,
     SupportedPlatformData supportedPlatforms = null,
     bool isArgumentName = false,
     ImmutableDictionary <string, string> properties = null,
     CompletionItemRules rules = null)
 {
     return(Create(
                displayText: displayText,
                span: span,
                symbols: ImmutableArray.Create(symbol),
                contextPosition: contextPosition,
                descriptionPosition: descriptionPosition,
                sortText: sortText,
                insertionText: insertionText,
                glyph: glyph,
                filterText: filterText,
                preselect: preselect,
                supportedPlatforms: supportedPlatforms,
                isArgumentName: isArgumentName,
                properties: properties,
                rules: rules));
 }
        private static CompletionItemRules MakeRule(bool importDirective, bool preselect, bool tupleLiteral)
        {
            // '<' should not filter the completion list, even though it's in generic items like IList<>
            var generalBaseline = CompletionItemRules.Default.
                                  WithFilterCharacterRule(CharacterSetModificationRule.Create(CharacterSetModificationKind.Remove, '<')).
                                  WithCommitCharacterRule(CharacterSetModificationRule.Create(CharacterSetModificationKind.Add, '<'));

            var importDirectiveBaseline = CompletionItemRules.Create(commitCharacterRules:
                                                                     ImmutableArray.Create(CharacterSetModificationRule.Create(CharacterSetModificationKind.Replace, '.', ';')));

            var rule = importDirective ? importDirectiveBaseline : generalBaseline;

            if (preselect)
            {
                rule = rule.WithSelectionBehavior(CompletionItemSelectionBehavior.HardSelection);
            }

            if (tupleLiteral)
            {
                rule = rule
                       .WithCommitCharacterRule(CharacterSetModificationRule.Create(CharacterSetModificationKind.Remove, ':'));
            }

            return(rule);
        }
示例#18
0
        public static CompletionItem Create(
            string displayText,
            string displayTextSuffix,
            DeclarationModifiers modifiers,
            int line,
            ISymbol symbol,
            SyntaxToken token,
            int descriptionPosition,
            CompletionItemRules rules
            )
        {
            var props = ImmutableDictionary <string, string> .Empty
                        .Add("Line", line.ToString())
                        .Add("Modifiers", modifiers.ToString())
                        .Add("TokenSpanEnd", token.Span.End.ToString());

            return(SymbolCompletionItem.CreateWithSymbolId(
                       displayText: displayText,
                       displayTextSuffix: displayTextSuffix,
                       symbols: ImmutableArray.Create(symbol),
                       contextPosition: descriptionPosition,
                       properties: props,
                       rules: rules,
                       isComplexTextEdit: true
                       ));
        }
示例#19
0
 public SymbolCompletionItem(
     CompletionListProvider completionProvider,
     string displayText,
     string insertionText,
     string filterText,
     TextSpan filterSpan,
     int position,
     List <ISymbol> symbols,
     string sortText,
     AbstractSyntaxContext context,
     Glyph glyph,
     bool preselect = false,
     SupportedPlatformData supportedPlatforms = null,
     CompletionItemRules rules = null)
     : base(completionProvider, displayText, filterSpan,
            descriptionFactory : null, glyph : glyph,
            sortText : sortText, filterText : filterText, preselect : preselect, showsWarningIcon : supportedPlatforms != null, rules : rules,
            filters : GetFilters(symbols))
 {
     this.InsertionText  = insertionText;
     this.Position       = position;
     this.Symbols        = symbols;
     this.Context        = context;
     _supportedPlatforms = supportedPlatforms;
 }
        private Task AddCompletionItems(CompletionContext context)
        {
            if (!_textBufferProvider.TryGetFromDocument(context.Document, out var textBuffer) ||
                _dependencies.Value.AsyncCompletionBroker.IsCompletionSupported(textBuffer.ContentType))
            {
                // Async completion is supported that code path will handle completion.
                return(Task.CompletedTask);
            }

            if (!_codeDocumentProvider.Value.TryGetFromDocument(context.Document, out var codeDocument))
            {
                // A Razor code document has not yet been associated with the document.
                return(Task.CompletedTask);
            }

            var syntaxTree = codeDocument.GetSyntaxTree();

            if (syntaxTree == null)
            {
                // No syntax tree has been computed for the current document.
                return(Task.CompletedTask);
            }

            if (!TryGetRazorSnapshotPoint(context, out var razorSnapshotPoint))
            {
                // Could not find associated Razor location.
                return(Task.CompletedTask);
            }

            var location             = new SourceSpan(razorSnapshotPoint.Position, 0);
            var razorCompletionItems = _dependencies.Value.CompletionFactsService.GetCompletionItems(syntaxTree, location);

            foreach (var razorCompletionItem in razorCompletionItems)
            {
                if (razorCompletionItem.Kind != RazorCompletionItemKind.Directive)
                {
                    // Don't support any other types of completion kinds other than directives.
                    continue;
                }

                var propertyDictionary = new Dictionary <string, string>(StringComparer.Ordinal);
                if (!string.IsNullOrEmpty(razorCompletionItem.Description))
                {
                    propertyDictionary[DescriptionKey] = razorCompletionItem.Description;
                }

                var completionItem = CompletionItem.Create(
                    razorCompletionItem.InsertText,
                    // This groups all Razor directives together
                    sortText: "_RazorDirective_",
                    rules: CompletionItemRules.Create(formatOnCommit: false),
                    tags: ImmutableArray.Create(WellKnownTags.Intrinsic),
                    properties: propertyDictionary.ToImmutableDictionary());

                context.AddItem(completionItem);
            }

            return(Task.CompletedTask);
        }
        const string InsertionTextKey = "InsertionText/914D9212-A782-45C9-970F-405B732E10B5";         // hopefully unique id

        public CompletionItem CreateCompletionItem(string insertionText, string descriptionText, string[] tags) =>
        CompletionItem.Create(descriptionText,
                              properties: ImmutableDictionary <string, string> .Empty.Add(InsertionTextKey, insertionText), // add custom insertion text property to be used in GetChangeAsync
                              tags: ImmutableArray.Create(tags),
                              rules: CompletionItemRules.Create(
                                  // allow usage of open paren while writing the identifier
                                  filterCharacterRules: ImmutableArray <CharacterSetModificationRule> .Empty.Add(CharacterSetModificationRule.Create(CharacterSetModificationKind.Add, '(')),
                                  commitCharacterRules: ImmutableArray <CharacterSetModificationRule> .Empty.Add(CharacterSetModificationRule.Create(CharacterSetModificationKind.Remove, '('))
                                  ));
 public GlobalAssemblyCacheCompletionHelper(
     CompletionProvider completionProvider,
     TextSpan textChangeSpan,
     CompletionItemRules itemRules = null)
 {
     _completionProvider = completionProvider;
     _textChangeSpan     = textChangeSpan;
     _itemRules          = itemRules;
 }
示例#23
0
        public CompletionService(CompletionContext context, SyntaxToken token, SemanticModel semanticModel, BaseMockingProvider provider)
        {
            _context       = context;
            _token         = token;
            _semanticModel = semanticModel;

            _preselectCompletions = CompletionItemRules.Default.WithMatchPriority(MatchPriority.Preselect).WithSelectionBehavior(CompletionItemSelectionBehavior.SoftSelection);
            _defaultCompletions   = CompletionItemRules.Default.WithSelectionBehavior(CompletionItemSelectionBehavior.SoftSelection);
            _provider             = provider;
        }
 public XmlDocCommentCompletionItem(CompletionListProvider provider,
                                    TextSpan filterSpan,
                                    string displayText,
                                    string beforeCaretText,
                                    string afterCaretText,
                                    CompletionItemRules rules)
     : base(provider, displayText, filterSpan, glyph: CodeAnalysis.Glyph.Keyword, rules: rules)
 {
     _beforeCaretText = beforeCaretText;
     _afterCaretText  = afterCaretText;
 }
示例#25
0
        private static CompletionItem CreateWorker(
            string displayText,
            string displayTextSuffix,
            IReadOnlyList <ISymbol> symbols,
            CompletionItemRules rules,
            int contextPosition,
            Func <IReadOnlyList <ISymbol>, CompletionItem, CompletionItem> symbolEncoder,
            string sortText      = null,
            string insertionText = null,
            string filterText    = null,
            SupportedPlatformData supportedPlatforms        = null,
            ImmutableDictionary <string, string> properties = null,
            ImmutableArray <string> tags = default,
            string displayTextPrefix     = null,
            string inlineDescription     = null,
            Glyph?glyph            = null,
            bool isComplexTextEdit = false
            )
        {
            var props = properties ?? ImmutableDictionary <string, string> .Empty;

            if (insertionText != null)
            {
                props = props.Add("InsertionText", insertionText);
            }

            props = props.Add("ContextPosition", contextPosition.ToString());

            var firstSymbol = symbols[0];
            var item        = CommonCompletionItem.Create(
                displayText: displayText,
                displayTextSuffix: displayTextSuffix,
                displayTextPrefix: displayTextPrefix,
                inlineDescription: inlineDescription,
                rules: rules,
                filterText: filterText
                ?? (
                    displayText.Length > 0 && displayText[0] == '@'
                            ? displayText
                            : firstSymbol.Name
                    ),
                sortText: sortText ?? firstSymbol.Name,
                glyph: glyph ?? firstSymbol.GetGlyph(),
                showsWarningIcon: supportedPlatforms != null,
                properties: props,
                tags: tags,
                isComplexTextEdit: isComplexTextEdit
                );

            item = WithSupportedPlatforms(item, supportedPlatforms);
            return(symbolEncoder(symbols, item));
        }
示例#26
0
        public static CompletionItem Create(
            string displayText,
            TextSpan span,
            IReadOnlyList <ISymbol> symbols,
            int contextPosition     = -1,
            int descriptionPosition = -1,
            string sortText         = null,
            string insertionText    = null,
            Glyph?glyph             = null,
            string filterText       = null,
            bool preselect          = false,
            SupportedPlatformData supportedPlatforms = null,
            bool isArgumentName = false,
            ImmutableDictionary <string, string> properties = null,
            ImmutableArray <string> tags = default(ImmutableArray <string>),
            CompletionItemRules rules    = null)
        {
            var props = properties ?? ImmutableDictionary <string, string> .Empty;

            props = props.Add("Symbols", EncodeSymbols(symbols));

            if (insertionText != null)
            {
                props = props.Add("InsertionText", insertionText);
            }

            if (contextPosition >= 0)
            {
                props = props.Add("ContextPosition", contextPosition.ToString());
            }

            if (descriptionPosition >= 0)
            {
                props = props.Add("DescriptionPosition", descriptionPosition.ToString());
            }

            var item = CommonCompletionItem.Create(
                displayText: displayText,
                span: span,
                filterText: filterText ?? (displayText.Length > 0 && displayText[0] == '@' ? displayText : symbols[0].Name),
                sortText: sortText ?? symbols[0].Name,
                glyph: glyph ?? symbols[0].GetGlyph(),
                preselect: preselect,
                isArgumentName: isArgumentName,
                showsWarningIcon: supportedPlatforms != null,
                properties: props,
                tags: tags,
                rules: rules);

            return(WithSupportedPlatforms(item, supportedPlatforms));
        }
示例#27
0
        public static CompletionItem Create(
            string displayText,
            TextSpan span,
            IReadOnlyList<ISymbol> symbols,
            int contextPosition = -1,
            int descriptionPosition = -1,
            string sortText = null,
            string insertionText = null,
            Glyph? glyph = null,
            string filterText = null,
            bool preselect = false,
            SupportedPlatformData supportedPlatforms = null,
            bool isArgumentName = false,
            ImmutableDictionary<string, string> properties = null,
            ImmutableArray<string> tags = default(ImmutableArray<string>),
            CompletionItemRules rules = null)
        {
            var props = properties ?? ImmutableDictionary<string, string>.Empty;

            props = props.Add("Symbols", EncodeSymbols(symbols));

            if (insertionText != null)
            {
                props = props.Add("InsertionText", insertionText);
            }

            if (contextPosition >= 0)
            {
                props = props.Add("ContextPosition", contextPosition.ToString());
            }

            if (descriptionPosition >= 0)
            {
                props = props.Add("DescriptionPosition", descriptionPosition.ToString());
            }

            var item = CommonCompletionItem.Create(
                displayText: displayText,
                span: span,
                filterText: filterText ?? (displayText.Length > 0 && displayText[0] == '@' ? displayText : symbols[0].Name),
                sortText: sortText ?? symbols[0].Name,
                glyph: glyph ?? symbols[0].GetGlyph(),
                preselect: preselect,
                isArgumentName: isArgumentName,
                showsWarningIcon: supportedPlatforms != null,
                properties: props,
                tags: tags,
                rules: rules);

            return WithSupportedPlatforms(item, supportedPlatforms);
        }
示例#28
0
 public FileSystemCompletionHelper(
     Glyph folderGlyph,
     Glyph fileGlyph,
     ImmutableArray <string> searchPaths,
     string baseDirectoryOpt,
     ImmutableArray <string> allowableExtensions,
     CompletionItemRules itemRules)
 {
     _searchPaths         = searchPaths;
     _baseDirectoryOpt    = baseDirectoryOpt !;
     _allowableExtensions = allowableExtensions;
     _folderGlyph         = folderGlyph;
     _fileGlyph           = fileGlyph;
     _itemRules           = itemRules;
 }
示例#29
0
 public static CompletionItem CreateWithSymbolId(
     string displayText,
     ISymbol symbol,
     int contextPosition,
     string sortText      = null,
     string insertionText = null,
     Glyph?glyph          = null,
     string filterText    = null,
     int?matchPriority    = null,
     SupportedPlatformData supportedPlatforms        = null,
     ImmutableDictionary <string, string> properties = null,
     CompletionItemRules rules = null)
 {
     return(CreateWorker(displayText, symbol, AddSymbolEncoding, contextPosition, sortText, insertionText, glyph,
                         filterText, matchPriority, supportedPlatforms, properties, rules));
 }
        public static CompletionItem Create(
            string displayText,
            string beforeCaretText,
            string afterCaretText,
            CompletionItemRules rules)
        {
            var props = ImmutableDictionary<string, string>.Empty
                .Add("BeforeCaretText", beforeCaretText)
                .Add("AfterCaretText", afterCaretText);

            return CommonCompletionItem.Create(
                displayText: displayText,
                glyph: Glyph.Keyword,
                properties: props,
                rules: rules);
        }
示例#31
0
        public static CompletionItem Create(
            string displayText,
            string beforeCaretText,
            string afterCaretText,
            CompletionItemRules rules)
        {
            var props = ImmutableDictionary <string, string> .Empty
                        .Add("BeforeCaretText", beforeCaretText)
                        .Add("AfterCaretText", afterCaretText);

            return(CommonCompletionItem.Create(
                       displayText: displayText,
                       glyph: Glyph.Keyword,
                       properties: props,
                       rules: rules));
        }
示例#32
0
 public SymbolCompletionItem(
     CompletionListProvider completionProvider,
     string displayText,
     string insertionText,
     string filterText,
     TextSpan filterSpan,
     int position,
     List <ISymbol> symbols,
     AbstractSyntaxContext context,
     bool preselect = false,
     SupportedPlatformData supportedPlatforms = null,
     CompletionItemRules rules = null)
     : this(completionProvider, displayText, insertionText, filterText, filterSpan, position,
            symbols, sortText : symbols[0].Name, context : context, glyph : symbols[0].GetGlyph(),
            preselect : preselect, supportedPlatforms : supportedPlatforms, rules : rules)
 {
 }
示例#33
0
 public static CompletionItem CreateWithNameAndKind(
     string displayText,
     IReadOnlyList <ISymbol> symbols,
     int contextPosition,
     string sortText      = null,
     string insertionText = null,
     Glyph?glyph          = null,
     string filterText    = null,
     int?matchPriority    = null,
     SupportedPlatformData supportedPlatforms        = null,
     ImmutableDictionary <string, string> properties = null,
     ImmutableArray <string> tags = default(ImmutableArray <string>),
     CompletionItemRules rules    = null)
 {
     return(CreateWorker(displayText, symbols, AddSymbolNameAndKind, contextPosition, sortText, insertionText, glyph,
                         filterText, matchPriority, supportedPlatforms, properties, tags, rules));
 }
示例#34
0
 public SymbolCompletionItem(
     CompletionListProvider completionProvider,
     string displayText,
     string insertionText,
     string filterText,
     TextSpan filterSpan,
     int position,
     List<ISymbol> symbols,
     AbstractSyntaxContext context,
     bool preselect = false,
     SupportedPlatformData supportedPlatforms = null,
     CompletionItemRules rules = null)
 : this(completionProvider, displayText, insertionText, filterText, filterSpan, position,
       symbols, sortText: symbols[0].Name, context: context, glyph: symbols[0].GetGlyph(),
       preselect: preselect, supportedPlatforms: supportedPlatforms, rules: rules)
 {
 }
        protected FileSystemCompletionHelper GetFileSystemCompletionHelper(
            Document document,
            Glyph itemGlyph,
            ImmutableArray <string> extensions,
            CompletionItemRules completionRules)
        {
            var serviceOpt  = document.Project.Solution.Workspace.Services.GetService <IScriptEnvironmentService>();
            var searchPaths = serviceOpt?.MetadataReferenceSearchPaths ?? ImmutableArray <string> .Empty;

            return(new FileSystemCompletionHelper(
                       Glyph.OpenFolder,
                       itemGlyph,
                       searchPaths,
                       GetBaseDirectory(document, serviceOpt),
                       extensions,
                       completionRules));
        }
 public FSharpFileSystemCompletionHelper(
     FSharpGlyph folderGlyph,
     FSharpGlyph fileGlyph,
     ImmutableArray <string> searchPaths,
     string baseDirectoryOpt,
     ImmutableArray <string> allowableExtensions,
     CompletionItemRules itemRules)
 {
     _fileSystemCompletionHelper =
         new FileSystemCompletionHelper(
             FSharpGlyphHelpers.ConvertTo(folderGlyph),
             FSharpGlyphHelpers.ConvertTo(fileGlyph),
             searchPaths,
             baseDirectoryOpt,
             allowableExtensions,
             itemRules);
 }
        public FileSystemCompletionHelper(
            Glyph folderGlyph,
            Glyph fileGlyph,
            ImmutableArray <string> searchPaths,
            string baseDirectoryOpt,
            ImmutableArray <string> allowableExtensions,
            CompletionItemRules itemRules)
        {
            Debug.Assert(searchPaths.All(path => PathUtilities.IsAbsolute(path)));
            Debug.Assert(baseDirectoryOpt == null || PathUtilities.IsAbsolute(baseDirectoryOpt));

            _searchPaths         = searchPaths;
            _baseDirectoryOpt    = baseDirectoryOpt !;
            _allowableExtensions = allowableExtensions;
            _folderGlyph         = folderGlyph;
            _fileGlyph           = fileGlyph;
            _itemRules           = itemRules;
        }
        public FileSystemCompletionHelper(Microsoft.CodeAnalysis.Glyph folderGlyph,
                                          Microsoft.CodeAnalysis.Glyph fileGlyph,
                                          ImmutableArray <string> searchPaths,
                                          IEnumerable <string> allowableExtensions,
                                          Func <string, bool> exclude   = null,
                                          CompletionItemRules itemRules = null)
        {
            Debug.Assert(searchPaths.All(path => PathUtilities.IsAbsolute(path)));

            _searchPaths         = searchPaths;
            _allowableExtensions = allowableExtensions.Select(e => e.ToLowerInvariant()).ToSet();
            _folderGlyph         = folderGlyph;
            _fileGlyph           = fileGlyph;
            _exclude             = exclude;
            _itemRules           = itemRules;

            _lazyGetDrives = new Lazy <string[]>(() =>
                                                 IOUtilities.PerformIO(Directory.GetLogicalDrives, Array.Empty <string>()));
        }
示例#39
0
        public static CompletionItem Create(
            string displayText,
            IReadOnlyList<ISymbol> symbols,
            int contextPosition = -1,
            string sortText = null,
            string insertionText = null,
            Glyph? glyph = null,
            string filterText = null,
            int? matchPriority = null,
            SupportedPlatformData supportedPlatforms = null,
            ImmutableDictionary<string, string> properties = null,
            ImmutableArray<string> tags = default(ImmutableArray<string>),
            CompletionItemRules rules = null)
        {
            var props = properties ?? ImmutableDictionary<string, string>.Empty;

            props = props.Add("Symbols", EncodeSymbols(symbols));

            if (insertionText != null)
            {
                props = props.Add("InsertionText", insertionText);
            }

            if (contextPosition >= 0)
            {
                props = props.Add("ContextPosition", contextPosition.ToString());
            }

            var item = CommonCompletionItem.Create(
                displayText: displayText,
                filterText: filterText ?? (displayText.Length > 0 && displayText[0] == '@' ? displayText : symbols[0].Name),
                sortText: sortText ?? symbols[0].Name,
                glyph: glyph ?? symbols[0].GetGlyph(),
                matchPriority: matchPriority.GetValueOrDefault(),
                showsWarningIcon: supportedPlatforms != null,
                properties: props,
                tags: tags,
                rules: rules);

            return WithSupportedPlatforms(item, supportedPlatforms);
        }