public references()

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;
	}