diff --git a/extensions/markdown-language-features/src/languageFeatures/references.ts b/extensions/markdown-language-features/src/languageFeatures/references.ts index ed1497dcab0..4e937a843f1 100644 --- a/extensions/markdown-language-features/src/languageFeatures/references.ts +++ b/extensions/markdown-language-features/src/languageFeatures/references.ts @@ -135,7 +135,11 @@ export class MdReferencesProvider extends Disposable implements vscode.Reference references.push(new vscode.Location(link.target.fromResource, link.sourceRange)); } } else { // Triggered on a link without a fragment so we only require matching the file and ignore fragments - references.push(new vscode.Location(link.target.fromResource, link.sourceRange)); + + // But exclude cases where the file is referencing itself + if (link.target.fromResource.fsPath !== targetDoc.uri.fsPath) { + references.push(new vscode.Location(link.target.fromResource, link.sourceRange)); + } } } diff --git a/extensions/markdown-language-features/src/test/references.test.ts b/extensions/markdown-language-features/src/test/references.test.ts index 6c846fcc7fa..893273b37dc 100644 --- a/extensions/markdown-language-features/src/test/references.test.ts +++ b/extensions/markdown-language-features/src/test/references.test.ts @@ -244,12 +244,33 @@ suite('markdown: find all references', () => { ])); assertReferencesEqual(refs!, - { uri: docUri, line: 0 }, // Header definition + { uri: docUri, line: 0 }, { uri: docUri, line: 1 }, { uri: docUri, line: 2 }, ); }); + test('Should not include refs from other file to own header', async () => { + const docUri = workspacePath('doc.md'); + const otherUri = workspacePath('sub', 'other.md'); + + const doc = new InMemoryDocument(docUri, joinLines( + `[other](./sub/other)`, + )); + + const refs = await getReferences(doc, new vscode.Position(0, 15), new InMemoryWorkspaceMarkdownDocuments([ + doc, + new InMemoryDocument(otherUri, joinLines( + `# header`, // Definition should not be included since we triggered on a file link + `[text](#header)`, // Definition should not be included since we triggered on a file link + )), + ])); + + assertReferencesEqual(refs!, + { uri: docUri, line: 0 }, + ); + }); + suite('Reference links', () => { test('Should find reference links within file', async () => { const docUri = workspacePath('doc.md');