diff --git a/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts b/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts index 4ce792844a822..4d47465859149 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 87f06f8796fe6..c2d56f8e3fb66 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 2454d1d6e3ff2..4b7f9532cec00 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 bdde011ad7549..e22453f3e0264 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]))); + }); });