public async Task FindClick()
        {
            ShowToastInfo("Searching for references");

            FindReferencesResult.Clear();

            if (SelectedSolutionItem is TypeViewModel type)
            {
                var project = (SelectedSolutionItem.Parent.Parent as ProjectViewModel)?.Project;

                await foreach (var reference in _solutionManager.FindReferenceInSolutions(project, type.TypeDetails.Symbol, _progress))
                {
                    FindReferencesResult.Add(reference);
                }
            }
            else if (SelectedSolutionItem is MemberViewModel member)
            {
                var project = (SelectedSolutionItem.Parent.Parent.Parent as ProjectViewModel)?.Project;

                await foreach (var reference in _solutionManager.FindReferenceInSolutions(project, member.Member.Symbol, _progress))
                {
                    FindReferencesResult.Add(reference);
                }
            }

            ShowToastInfo("Searching finish");
            ReportReady();
            IsFindAllReferencesVisible = true;
        }
Example #2
0
        public async Task LanguageServiceFindsReferencesOnFileWithReferencesFileC()
        {
            FindReferencesResult refsResult =
                await this.GetReferences(
                    FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails);

            Assert.Equal(4, refsResult.FoundReferences.Count());
        }
Example #3
0
        public async Task LanguageServiceFindsReferencesOnCommandWithAlias()
        {
            FindReferencesResult refsResult =
                await this.GetReferences(
                    FindsReferencesOnBuiltInCommandWithAlias.SourceDetails);

            Assert.Equal(6, refsResult.FoundReferences.Count());
            Assert.Equal("Get-ChildItem", refsResult.FoundReferences.Last().SymbolName);
            Assert.Equal("ls", refsResult.FoundReferences.ToArray()[1].SymbolName);
        }
Example #4
0
        /// <summary>
        /// Take a codelens and create a new codelens object with updated references.
        /// </summary>
        /// <param name="codeLens">The old code lens to get updated references for.</param>
        /// <param name="cancellationToken">The cancellation token for this request.</param>
        /// <returns>A new code lens object describing the same data as the old one but with updated references.</returns>
        public async Task <CodeLens> ResolveCodeLensAsync(
            CodeLens codeLens,
            CancellationToken cancellationToken)
        {
            ScriptFile[] references = _editorSession.Workspace.ExpandScriptReferences(
                codeLens.File);

            SymbolReference foundSymbol = _editorSession.LanguageService.FindFunctionDefinitionAtLocation(
                codeLens.File,
                codeLens.ScriptExtent.StartLineNumber,
                codeLens.ScriptExtent.StartColumnNumber);

            FindReferencesResult referencesResult = await _editorSession.LanguageService.FindReferencesOfSymbol(
                foundSymbol,
                references,
                _editorSession.Workspace);

            Location[] referenceLocations;
            if (referencesResult == null)
            {
                referenceLocations = s_emptyLocationArray;
            }
            else
            {
                var acc = new List <Location>();
                foreach (SymbolReference foundReference in referencesResult.FoundReferences)
                {
                    if (!NotReferenceDefinition(foundSymbol, foundReference))
                    {
                        continue;
                    }

                    acc.Add(new Location
                    {
                        Uri   = GetFileUri(foundReference.FilePath),
                        Range = foundReference.ScriptRegion.ToRange()
                    });
                }
                referenceLocations = acc.ToArray();
            }

            return(new CodeLens(
                       codeLens,
                       new ClientCommand(
                           "editor.action.showReferences",
                           GetReferenceCountHeader(referenceLocations.Length),
                           new object[]
            {
                codeLens.File.ClientFilePath,
                codeLens.ScriptExtent.ToRange().Start,
                referenceLocations,
            }
                           )));
        }
        public async Task LanguageServiceFindsReferencesOnCommandWithAlias()
        {
            FindReferencesResult refsResult =
                await this.GetReferences(
                    FindsReferencesOnBuiltInCommandWithAlias.SourceDetails);

            SymbolReference[] foundRefs = refsResult.FoundReferences.ToArray();
            Assert.Equal(4, foundRefs.Length);
            Assert.Equal("gci", foundRefs[1].SymbolName);
            Assert.Equal("Get-ChildItem", foundRefs[foundRefs.Length - 1].SymbolName);
        }
        public async Task <CodeLens> ResolveCodeLensAsync(
            CodeLens codeLens,
            CancellationToken cancellationToken)
        {
            ScriptFile[] references =
                editorSession.Workspace.ExpandScriptReferences(
                    codeLens.File);

            var foundSymbol =
                this.editorSession.LanguageService.FindFunctionDefinitionAtLocation(
                    codeLens.File,
                    codeLens.ScriptExtent.StartLineNumber,
                    codeLens.ScriptExtent.StartColumnNumber);

            FindReferencesResult referencesResult =
                await editorSession.LanguageService.FindReferencesOfSymbol(
                    foundSymbol,
                    references,
                    editorSession.Workspace);

            Location[] referenceLocations =
                referencesResult == null
                    ? new Location[0]
                    : referencesResult
                .FoundReferences
                .Where(r => NotReferenceDefinition(foundSymbol, r))
                .Select(
                    r => new Location
            {
                Uri   = GetFileUri(r.FilePath),
                Range = r.ScriptRegion.ToRange()
            })
                .ToArray();

            return
                (new CodeLens(
                     codeLens,
                     new ClientCommand(
                         "editor.action.showReferences",
                         referenceLocations.Length == 1
                            ? "1 reference"
                            : $"{referenceLocations.Length} references",
                         new object[]
            {
                codeLens.File.ClientFilePath,
                codeLens.ScriptExtent.ToRange().Start,
                referenceLocations,
            }
                         )));
        }
Example #7
0
        protected async Task HandleReferencesRequest(
            ReferencesParams referencesParams,
            EditorSession editorSession,
            RequestContext <Location[], object> requestContext)
        {
            ScriptFile scriptFile =
                editorSession.Workspace.GetFile(
                    referencesParams.Uri);

            SymbolReference foundSymbol =
                editorSession.LanguageService.FindSymbolAtLocation(
                    scriptFile,
                    referencesParams.Position.Line + 1,
                    referencesParams.Position.Character + 1);

            FindReferencesResult referencesResult =
                await editorSession.LanguageService.FindReferencesOfSymbol(
                    foundSymbol,
                    editorSession.Workspace.ExpandScriptReferences(scriptFile));

            Location[] referenceLocations = null;

            if (referencesResult != null)
            {
                referenceLocations =
                    referencesResult
                    .FoundReferences
                    .Select(r =>
                {
                    return(new Location
                    {
                        Uri = new Uri(r.FilePath).AbsoluteUri,
                        Range = GetRangeFromScriptRegion(r.ScriptRegion)
                    });
                })
                    .ToArray();
            }
            else
            {
                referenceLocations = new Location[0];
            }

            await requestContext.SendResult(referenceLocations);
        }