Skip to content

Commit e09c9ea

Browse files
Merge pull request #1620 from filipw/features/771
Support go to definition from metadata
2 parents 98dc005 + b42dc17 commit e09c9ea

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

src/features/definitionMetadataDocumentProvider.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { workspace, Uri, TextDocument, Disposable, TextDocumentContentProvider}
22
import { MetadataResponse } from '../omnisharp/protocol';
33

44
export default class DefinitionMetadataDocumentProvider implements TextDocumentContentProvider, Disposable {
5-
private _scheme = "omnisharp-metadata";
5+
readonly scheme = "omnisharp-metadata";
66
private _registration : Disposable;
77
private _documents: Map<string, MetadataResponse>;
88
private _documentClosedSubscription: Disposable;
@@ -31,15 +31,15 @@ export default class DefinitionMetadataDocumentProvider implements TextDocumentC
3131
}
3232

3333
public register() : void {
34-
this._registration = workspace.registerTextDocumentContentProvider(this._scheme, this);
34+
this._registration = workspace.registerTextDocumentContentProvider(this.scheme, this);
3535
}
3636

3737
public provideTextDocumentContent(uri : Uri) : string {
3838
return this._documents.get(uri.toString()).Source;
3939
}
4040

4141
private createUri(metadataResponse: MetadataResponse) : Uri {
42-
return Uri.parse(this._scheme + "://" +
42+
return Uri.parse(this.scheme + "://" +
4343
metadataResponse.SourceName.replace(/\\/g, "/")
4444
.replace(/(.*)\/(.*)/g, "$1/[metadata] $2"));
4545
}

src/omnisharp/extension.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ export function activate(context: vscode.ExtensionContext, reporter: TelemetryRe
4747
definitionMetadataDocumentProvider.register();
4848
localDisposables.push(definitionMetadataDocumentProvider);
4949

50-
localDisposables.push(vscode.languages.registerDefinitionProvider(documentSelector, new DefinitionProvider(server, definitionMetadataDocumentProvider)));
50+
const definitionProvider = new DefinitionProvider(server, definitionMetadataDocumentProvider);
51+
localDisposables.push(vscode.languages.registerDefinitionProvider(documentSelector, definitionProvider));
52+
localDisposables.push(vscode.languages.registerDefinitionProvider({ scheme: definitionMetadataDocumentProvider.scheme }, definitionProvider));
5153
localDisposables.push(vscode.languages.registerImplementationProvider(documentSelector, new ImplementationProvider(server)));
5254
localDisposables.push(vscode.languages.registerCodeLensProvider(documentSelector, new CodeLensProvider(server)));
5355
localDisposables.push(vscode.languages.registerDocumentHighlightProvider(documentSelector, new DocumentHighlightProvider(server)));

src/omnisharp/typeConvertion.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,14 @@ export function createRequest<T extends protocol.Request>(document: vscode.TextD
4444
Column = where.start.character + 1;
4545
}
4646

47+
// for metadata sources, we need to remove the [metadata] from the filename, and prepend the $metadata$ authority
48+
// this is expected by the Omnisharp server to support metadata-to-metadata navigation
49+
let fileName = document.uri.scheme === "omnisharp-metadata" ?
50+
`${document.uri.authority}${document.fileName.replace("[metadata] ", "")}` :
51+
document.fileName;
52+
4753
let request: protocol.Request = {
48-
FileName: document.fileName,
54+
FileName: fileName,
4955
Buffer: includeBuffer ? document.getText() : undefined,
5056
Line,
5157
Column

0 commit comments

Comments
 (0)