Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 14x 6x 6x 2x 4x 4x 2x 2x 8x 8x 10x 4x 6x 6x 6x 8x | import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { ServiceToken } from '@src/services/tokens';
import { IDocumentContextService } from '@src/services/document';
/**
* A provider that retrieves the locations of resource references in a document.
*/
export class ResourceReferenceProvider implements vscode.ReferenceProvider {
private get _contextService() {
return container.resolve<IDocumentContextService>(ServiceToken.DocumentContextService);
}
provideReferences(document: vscode.TextDocument, position: vscode.Position): vscode.ProviderResult<vscode.Location[]> {
const context = this._contextService.contexts[document.uri.toString()];
if (!context) {
return null;
}
const iri = context.getIriAtPosition(position);
if (iri) {
return this.provideReferencesForIri(iri);
} else {
return null;
}
}
/**
* Get the locations of references for a given resource.
* @param iri The IRI of the resource.
* @returns The locations of the references.
*/
provideReferencesForIri(iri: string): vscode.Location[] {
let result: vscode.Location[] = [];
for (const context of Object.values(this._contextService.contexts)) {
// Do not provide references for temporary, non-persisted git diff views or other in-memory documents.
if (context.isTemporary || !context.references[iri]) {
continue;
}
for (const range of context.references[iri]) {
const r = new vscode.Range(range.start.line, range.start.character, range.end.line, range.end.character);
result.push(new vscode.Location(context.uri, r));
}
}
return result;
}
} |