Fix refs to own file being included in md ref results from other file

For #146277
This commit is contained in:
Matt Bierner 2022-03-30 15:22:02 -07:00
parent 982a353285
commit 6c7ba2de69
No known key found for this signature in database
GPG key ID: 099C331567E11888
2 changed files with 27 additions and 2 deletions

View file

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

View file

@ -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');