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; }
public async Task LanguageServiceFindsReferencesOnFileWithReferencesFileC() { FindReferencesResult refsResult = await this.GetReferences( FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails); Assert.Equal(4, refsResult.FoundReferences.Count()); }
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); }
/// <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, } ))); }
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); }