in server/src/graphStore.ts [754:796]
public references(uri: string, position: lsp.Position, context: lsp.ReferenceContext): lsp.Location[] | undefined {
const ranges = this.findRange(this.toDatabase(uri), position);
if (ranges === undefined) {
return undefined;
}
const result: lsp.Location[] = [];
const monikers: Map<Id, Moniker> = new Map();
const dedupRanges = new Set<Id>();
const findReferences = (result: lsp.Location[], dedupRanges: Set<Id>, monikers: Map<Id, Moniker>, range: RangeResult): void => {
const [referenceResult, anchorId] = this.getResultForId(range.id, EdgeLabels.textDocument_references);
if (referenceResult === undefined) {
return undefined;
}
this.resolveReferenceResult(result, dedupRanges, monikers, referenceResult, context);
this.findMonikersForVertex(monikers, anchorId);
for (const moniker of monikers.values()) {
if (moniker.kind === MonikerKind.local) {
continue;
}
const matchingMonikers = this.findMatchingMonikers(moniker);
for (const matchingMoniker of matchingMonikers) {
const vertexId = this.findVertexIdForMoniker(matchingMoniker);
if (vertexId === undefined) {
continue;
}
const [referenceResult] = this.getResultForId(vertexId, EdgeLabels.textDocument_references);
if (referenceResult === undefined) {
continue;
}
this.resolveReferenceResult(result, dedupRanges, monikers, referenceResult, context);
}
}
};
for (const range of ranges) {
findReferences(result, dedupRanges, monikers, range);
}
return result;
}