Fixing false positive ref link being detected

This commit is contained in:
Matt Bierner 2022-03-31 19:09:14 -07:00
parent c39d09a4c0
commit 8b7086afdb
No known key found for this signature in database
GPG key ID: 099C331567E11888
4 changed files with 23 additions and 3 deletions

View file

@ -157,7 +157,7 @@ const linkPattern = /(\[((!\[[^\]]*?\]\(\s*)([^\s\(\)]+?)\s*\)\]|(?:\\\]|[^\]])*
/**
* Matches `[text][ref]`
*/
const referenceLinkPattern = /(?:(\[((?:\\\]|[^\]])+)\]\[\s*?)([^\s\]]*?)\]|\[\s*?([^\s\]]*?)\])(?!\:)/g;
const referenceLinkPattern = /(?:(\[((?:\\\]|[^\]])+)\]\[\s*?)([^\s\]]*?)\]|\[\s*?([^\s\]]*?)\])(?![\:\(])/g;
/**
* Matches `[text]: link`

View file

@ -106,12 +106,11 @@ export class MdReferencesProvider extends Disposable implements vscode.Reference
const references: MdReference[] = [];
const line = document.lineAt(header.line);
references.push({
kind: 'header',
isTriggerLocation: true,
isDefinition: true,
location: new vscode.Location(document.uri, new vscode.Range(header.line, 0, header.line, line.text.length)),
location: header.headerLocation,
headerTextLocation: header.headerTextLocation
});

View file

@ -71,6 +71,16 @@ suite('markdown: find all references', () => {
);
});
test('Should not return references when on link text', async () => {
const doc = new InMemoryDocument(workspacePath('doc.md'), joinLines(
`[ref](#abc)`,
`[ref]: http://example.com`,
));
const refs = await getReferences(doc, new vscode.Position(0, 1), new InMemoryWorkspaceMarkdownDocuments([doc]));
assert.deepStrictEqual(refs, []);
});
test('Should find references using normalized slug', async () => {
const doc = new InMemoryDocument(workspacePath('doc.md'), joinLines(
`# a B c`,

View file

@ -245,4 +245,15 @@ suite('markdown: rename', () => {
]
});
});
test('Rename should not be supported on link text', async () => {
const uri = workspacePath('doc.md');
const doc = new InMemoryDocument(uri, joinLines(
`# Header`,
`[text](#header)`,
));
await assert.rejects(getRenameRange(doc, new vscode.Position(1, 2), new InMemoryWorkspaceMarkdownDocuments([doc])));
});
});