Skip to content

Commit e8c5c24

Browse files
authored
Support generated files in referenceProvider (#5339)
Note that FAR _in_ a source generated file is not currently supported. But now, when a symbol location for a generated file is returned by FAR, we will ensure that the generated info is cached for use when the user attempts to navigate to it.
1 parent c797f86 commit e8c5c24

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/features/referenceProvider.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,18 @@
66
import AbstractSupport from './abstractProvider';
77
import * as protocol from '../omnisharp/protocol';
88
import * as serverUtils from '../omnisharp/utils';
9-
import {createRequest, toLocation} from '../omnisharp/typeConversion';
9+
import {createRequest, toLocation, toLocationFromUri} from '../omnisharp/typeConversion';
1010
import {ReferenceProvider, Location, TextDocument, CancellationToken, Position} from 'vscode';
11+
import { OmniSharpServer } from '../omnisharp/server';
12+
import { LanguageMiddlewareFeature } from '../omnisharp/LanguageMiddlewareFeature';
13+
import SourceGeneratedDocumentProvider from './sourceGeneratedDocumentProvider';
1114

1215
export default class OmnisharpReferenceProvider extends AbstractSupport implements ReferenceProvider {
1316

17+
public constructor(server: OmniSharpServer, languageMiddlewareFeature: LanguageMiddlewareFeature, private generatedDocumentProvider: SourceGeneratedDocumentProvider) {
18+
super(server, languageMiddlewareFeature);
19+
}
20+
1421
public async provideReferences(document: TextDocument, position: Position, options: { includeDeclaration: boolean;}, token: CancellationToken): Promise<Location[]> {
1522

1623
let req = createRequest<protocol.FindUsagesRequest>(document, position);
@@ -20,8 +27,8 @@ export default class OmnisharpReferenceProvider extends AbstractSupport implemen
2027
try {
2128
let res = await serverUtils.findUsages(this._server, req, token);
2229
if (res && Array.isArray(res.QuickFixes)) {
23-
const references = res.QuickFixes.map(toLocation);
24-
30+
const references = res.QuickFixes.map(l => this.mapToLocationWithGeneratedInfoPopulation(l));
31+
2532
// Allow language middlewares to re-map its edits if necessary.
2633
const result = await this._languageMiddlewareFeature.remap("remapLocations", references, token);
2734
return result;
@@ -31,4 +38,13 @@ export default class OmnisharpReferenceProvider extends AbstractSupport implemen
3138
return [];
3239
}
3340
}
41+
42+
private mapToLocationWithGeneratedInfoPopulation(symbolLocation: protocol.SymbolLocation): Location {
43+
if (symbolLocation.GeneratedFileInfo) {
44+
const uri = this.generatedDocumentProvider.addSourceGeneratedFileWithoutInitialContent(symbolLocation.GeneratedFileInfo, symbolLocation.FileName);
45+
return toLocationFromUri(uri, symbolLocation);
46+
}
47+
48+
return toLocation(symbolLocation);
49+
}
3450
}

src/omnisharp/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export async function activate(context: vscode.ExtensionContext, packageJSON: an
9090
localDisposables.add(vscode.languages.registerCodeLensProvider(documentSelector, new CodeLensProvider(server, testManager, optionProvider, languageMiddlewareFeature)));
9191
localDisposables.add(vscode.languages.registerDocumentHighlightProvider(documentSelector, new DocumentHighlightProvider(server, languageMiddlewareFeature)));
9292
localDisposables.add(vscode.languages.registerDocumentSymbolProvider(documentSelector, new DocumentSymbolProvider(server, languageMiddlewareFeature)));
93-
localDisposables.add(vscode.languages.registerReferenceProvider(documentSelector, new ReferenceProvider(server, languageMiddlewareFeature)));
93+
localDisposables.add(vscode.languages.registerReferenceProvider(documentSelector, new ReferenceProvider(server, languageMiddlewareFeature, sourceGeneratedDocumentProvider)));
9494
localDisposables.add(vscode.languages.registerHoverProvider(documentSelector, new HoverProvider(server, languageMiddlewareFeature)));
9595
localDisposables.add(vscode.languages.registerRenameProvider(documentSelector, new RenameProvider(server, languageMiddlewareFeature)));
9696
if (options.useFormatting) {

src/omnisharp/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export async function getFixAll(server: OmniSharpServer, request: protocol.GetFi
4848
}
4949

5050
export async function findUsages(server: OmniSharpServer, request: protocol.FindUsagesRequest, token: vscode.CancellationToken) {
51-
return server.makeRequest<protocol.QuickFixResponse>(protocol.Requests.FindUsages, request, token);
51+
return server.makeRequest<protocol.FindSymbolsResponse>(protocol.Requests.FindUsages, request, token);
5252
}
5353

5454
export async function formatAfterKeystroke(server: OmniSharpServer, request: protocol.FormatAfterKeystrokeRequest, token: vscode.CancellationToken) {

0 commit comments

Comments
 (0)