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>()));
        }
Exemple #2
0
        /// <summary>
        /// Creates a <see cref="CompletionContext"/> instance.
        /// </summary>
        public CompletionContext(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultSpan,
            CompletionTrigger trigger,
            OptionSet options,
            CancellationToken cancellationToken)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (options == null)
            {
                throw new ArgumentException(nameof(options));
            }

            this.Provider = provider;
            this.Document = document;
            this.Position = position;
            this.CompletionListSpan = defaultSpan;
            this.Trigger = trigger;
            this.Options = options;
            this.CancellationToken = cancellationToken;
            _items = new List<CompletionItem>();
        }
Exemple #3
0
 /// <summary>
 /// Creates a <see cref="CompletionContext"/> instance.
 /// </summary>
 internal CompletionContext(
     CompletionProvider provider,
     Document document,
     int position,
     TextSpan defaultSpan,
     CompletionTrigger trigger,
     in CompletionOptions options,
        /// <summary>
        /// Creates a <see cref="CompletionContext"/> instance.
        /// </summary>
        public CompletionContext(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultSpan,
            CompletionTrigger trigger,
            OptionSet options,
            CancellationToken cancellationToken)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (options == null)
            {
                throw new ArgumentException(nameof(options));
            }

            this.Provider          = provider;
            this.Document          = document;
            this.Position          = position;
            this.DefaultItemSpan   = defaultSpan;
            this.Trigger           = trigger;
            this.Options           = options;
            this.CancellationToken = cancellationToken;
            _items = new List <CompletionItem>();
        }
 public GlobalAssemblyCacheCompletionHelper(
     CompletionProvider completionProvider, 
     TextSpan textChangeSpan, 
     CompletionItemRules itemRules = null)
 {
     _completionProvider = completionProvider;
     _textChangeSpan = textChangeSpan;
     _itemRules = itemRules;
 }
Exemple #6
0
        internal static ImmutableHashSet <char> GetTriggerCharacters(CompletionProvider provider)
        {
            if (provider is LSPCompletionProvider lspProvider)
            {
                return(lspProvider.TriggerCharacters);
            }

            return(ImmutableHashSet <char> .Empty);
        }
 // Internal for testing purposes only.
 internal async Task <CompletionContext> GetContextAsync(
     CompletionProvider provider,
     Document document,
     int position,
     CompletionTrigger triggerInfo,
     OptionSet options,
     CancellationToken cancellationToken)
 {
     return(await GetContextAsync(
                provider, document, position, triggerInfo,
                options, defaultSpan : null, cancellationToken : cancellationToken).ConfigureAwait(false));
 }
        internal protected CompletionProvider GetProvider(CompletionItem item)
        {
            CompletionProvider provider = null;

            if (item.ProviderName != null)
            {
                lock (_gate)
                {
                    provider = _nameToProvider.GetOrAdd(item.ProviderName, _getProviderByName);
                }
            }

            return(provider);
        }
Exemple #9
0
 /// <summary>
 /// Creates a <see cref="CompletionContext"/> instance.
 /// </summary>
 public CompletionContext(
     CompletionProvider provider,
     Document document,
     int position,
     TextSpan defaultSpan,
     CompletionTrigger trigger,
     OptionSet options,
     CancellationToken cancellationToken)
     : this(provider ?? throw new ArgumentNullException(nameof(provider)),
            document ?? throw new ArgumentNullException(nameof(document)),
            position,
            defaultSpan,
            trigger,
            CompletionOptions.From(options ?? throw new ArgumentNullException(nameof(options)), document.Project.Language),
Exemple #10
0
        private static async Task <CompletionContext> GetProviderCompletionsAsync(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultFilterSpan,
            CompletionTrigger triggerInfo,
            OptionSet options,
            CancellationToken cancellationToken)
        {
            var context = new CompletionContext(provider, document, position, defaultFilterSpan, triggerInfo, options, cancellationToken);
            await provider.ProvideCompletionsAsync(context).ConfigureAwait(false);

            return(context);
        }
        internal protected CompletionProvider GetProvider(CompletionItem item)
        {
            CompletionProvider provider = null;

            if (item.Properties.TryGetValue("Provider", out var name))
            {
                lock (_gate)
                {
                    provider = _nameToProvider.GetOrAdd(name, _getProviderByName);
                }
            }

            return(provider);
        }
        internal protected CompletionProvider GetProvider(CompletionItem item)
        {
            string             name;
            CompletionProvider provider = null;

            if (item.Properties.TryGetValue("Provider", out name))
            {
                lock (_gate)
                {
                    _nameToProvider.TryGetValue(name, out provider);
                }
            }

            return(provider);
        }
 internal Task <CompletionContext> GetContextAsync(
     CompletionProvider provider,
     Document document,
     int position,
     CompletionTrigger triggerInfo,
     OptionSet options,
     CancellationToken cancellationToken)
 {
     return(_completionServiceWithProviders.GetContextAsync(
                provider,
                document,
                position,
                triggerInfo,
                options,
                defaultSpan: null,
                cancellationToken));
 }
Exemple #14
0
 /// <summary>
 /// Creates a <see cref="CompletionContext"/> instance.
 /// </summary>
 public CompletionContext(
     CompletionProvider provider,
     Document document,
     int position,
     TextSpan defaultSpan,
     CompletionTrigger trigger,
     OptionSet options,
     CancellationToken cancellationToken)
 {
     Provider           = provider ?? throw new ArgumentNullException(nameof(provider));
     Document           = document ?? throw new ArgumentNullException(nameof(document));
     Position           = position;
     CompletionListSpan = defaultSpan;
     Trigger            = trigger;
     Options            = options ?? throw new ArgumentNullException(nameof(options));
     CancellationToken  = cancellationToken;
     _items             = new List <CompletionItem>();
 }
Exemple #15
0
        /// <summary>
        /// Creates a <see cref="CompletionContext"/> instance.
        /// </summary>
        public CompletionContext(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultSpan,
            CompletionTrigger trigger,
            OptionSet?options,
            CancellationToken cancellationToken)
            : this(provider ?? throw new ArgumentNullException(nameof(provider)),
                   document ?? throw new ArgumentNullException(nameof(document)),
                   position,
                   defaultSpan,
                   trigger,
                   // Publicly available options do not affect this API.
                   CompletionOptions.Default,
                   cancellationToken)
        {
#pragma warning disable RS0030 // Do not used banned APIs
            Options = options ?? OptionValueSet.Empty;
#pragma warning restore
        }
        private async Task <CompletionContext> GetContextAsync(
            CompletionProvider provider,
            Document document,
            int position,
            CompletionTrigger triggerInfo,
            OptionSet options,
            TextSpan?defaultSpan,
            CancellationToken cancellationToken)
        {
            options = options ?? document.Project.Solution.Workspace.Options;

            if (defaultSpan == null)
            {
                var text = await document.GetTextAsync(cancellationToken).ConfigureAwait(false);

                defaultSpan = this.GetDefaultCompletionListSpan(text, position);
            }

            var context = new CompletionContext(provider, document, position, defaultSpan.Value, triggerInfo, options, cancellationToken);
            await provider.ProvideCompletionsAsync(context).ConfigureAwait(false);

            return(context);
        }
Exemple #17
0
        /// <summary>
        /// Creates a <see cref="CompletionContext"/> instance.
        /// </summary>
        public CompletionContext(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultSpan,
            CompletionTrigger trigger,
            OptionSet options,
            CancellationToken cancellationToken)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (options == null)
            {
                throw new ArgumentException(nameof(options));
            }

            this.Provider = provider;
            this.Document = document;
            this.Position = position;
#pragma warning disable CS0618 // Type or member is obsolete
            this.DefaultItemSpan = defaultSpan;
#pragma warning restore CS0618 // Type or member is obsolete
            this.CompletionListSpan = defaultSpan;
            this.Trigger            = trigger;
            this.Options            = options;
            this.CancellationToken  = cancellationToken;
            _items = new List <CompletionItem>();
        }
Exemple #18
0
        /// <summary>
        /// Creates a <see cref="CompletionContext"/> instance.
        /// </summary>
        public CompletionContext(
            CompletionProvider provider,
            Document document,
            int position,
            TextSpan defaultSpan,
            CompletionTrigger trigger,
            OptionSet options,
            CancellationToken cancellationToken)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }

            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (options == null)
            {
                throw new ArgumentException(nameof(options));
            }

            this.Provider = provider;
            this.Document = document;
            this.Position = position;
#pragma warning disable CS0618 // Type or member is obsolete
            this.DefaultItemSpan = defaultSpan;
#pragma warning restore CS0618 // Type or member is obsolete
            this.CompletionListSpan = defaultSpan;
            this.Trigger = trigger;
            this.Options = options;
            this.CancellationToken = cancellationToken;
            _items = new List<CompletionItem>();
        }
 private static async Task<CompletionContext> GetProviderCompletionsAsync(
     CompletionProvider provider,
     Document document,
     int position,
     TextSpan defaultFilterSpan,
     CompletionTrigger triggerInfo,
     OptionSet options,
     CancellationToken cancellationToken)
 {
     var context = new CompletionContext(provider, document, position, defaultFilterSpan, triggerInfo, options, cancellationToken);
     await provider.ProvideCompletionsAsync(context).ConfigureAwait(false);
     return context;
 }