From 8b7086afdbfd42bf6e7b8c0bb586530bf7cf1396 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 31 Mar 2022 19:09:14 -0700 Subject: [PATCH] Fixing false positive ref link being detected --- .../src/languageFeatures/documentLinkProvider.ts | 2 +- .../src/languageFeatures/references.ts | 3 +-- .../src/test/references.test.ts | 10 ++++++++++ .../src/test/rename.test.ts | 11 +++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts b/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts index 4ce792844a8..4d474658591 100644 --- a/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts +++ b/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts @@ -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` diff --git a/extensions/markdown-language-features/src/languageFeatures/references.ts b/extensions/markdown-language-features/src/languageFeatures/references.ts index 87f06f8796f..c2d56f8e3fb 100644 --- a/extensions/markdown-language-features/src/languageFeatures/references.ts +++ b/extensions/markdown-language-features/src/languageFeatures/references.ts @@ -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 }); diff --git a/extensions/markdown-language-features/src/test/references.test.ts b/extensions/markdown-language-features/src/test/references.test.ts index 2454d1d6e3f..4b7f9532cec 100644 --- a/extensions/markdown-language-features/src/test/references.test.ts +++ b/extensions/markdown-language-features/src/test/references.test.ts @@ -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`, diff --git a/extensions/markdown-language-features/src/test/rename.test.ts b/extensions/markdown-language-features/src/test/rename.test.ts index bdde011ad75..e22453f3e02 100644 --- a/extensions/markdown-language-features/src/test/rename.test.ts +++ b/extensions/markdown-language-features/src/test/rename.test.ts @@ -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]))); + }); });