private void StartSearch(INavigateToCallback callback, string searchValue, IImmutableSet <string> kinds)
        {
            this.StopSearch();

            if (string.IsNullOrWhiteSpace(searchValue))
            {
                callback.Done();
                return;
            }

            if (kinds == null || kinds.Count == 0)
            {
                kinds = KindsProvided;
            }

            var searchCurrentDocument = (callback.Options as INavigateToOptions2)?.SearchCurrentDocument ?? false;

            var roslynCallback = new NavigateToItemProviderCallback(_displayFactory, callback);
            var searcher       = new NavigateToSearcher(
                _workspace.CurrentSolution,
                _asyncListener,
                roslynCallback,
                searchValue,
                searchCurrentDocument,
                kinds,
                _cancellationTokenSource.Token);

            _ = searcher.SearchAsync();
        }
Example #2
0
        public override async Task <SymbolInformation[]?> HandleRequestAsync(
            WorkspaceSymbolParams request,
            RequestContext context,
            CancellationToken cancellationToken
            )
        {
            Contract.ThrowIfNull(context.Solution);

            var solution = context.Solution;

            using var progress = BufferedProgress.Create(request.PartialResultToken);
            var searcher = NavigateToSearcher.Create(
                solution,
                _asyncListener,
                new LSPNavigateToCallback(progress),
                request.Query,
                searchCurrentDocument: false,
                s_supportedKinds,
                _threadingContext.DisposalToken
                );

            await searcher.SearchAsync(cancellationToken).ConfigureAwait(false);

            return(progress.GetValues());
        }
Example #3
0
        public async Task <GraphBuilder> GetGraphAsync(Solution solution, IGraphContext context, CancellationToken cancellationToken)
        {
            var graphBuilder = await GraphBuilder.CreateForInputNodesAsync(solution, context.InputNodes, cancellationToken).ConfigureAwait(false);

            var callback = new ProgressionNavigateToSearchCallback(context, graphBuilder);
            var searcher = NavigateToSearcher.Create(
                solution,
                _asyncListener,
                callback,
                _searchPattern,
                NavigateToUtilities.GetKindsProvided(solution),
                _threadingContext.DisposalToken);

            await searcher.SearchAsync(searchCurrentDocument : false, cancellationToken).ConfigureAwait(false);

            return(graphBuilder);
        }