diff --git a/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts b/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts index e6fadaa05f2..56195d7a03c 100644 --- a/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts +++ b/extensions/markdown-language-features/src/languageFeatures/documentLinkProvider.ts @@ -47,6 +47,11 @@ function parseLink( return { kind: 'external', uri: externalSchemeUri }; } + if (/^[a-z\-][a-z\-]+:/i.test(cleanLink)) { + // Looks like a uri + return { kind: 'external', uri: vscode.Uri.parse(cleanLink) }; + } + // Assume it must be an relative or absolute file path // Use a fake scheme to avoid parse warnings const tempUri = vscode.Uri.parse(`vscode-resource:${link}`); diff --git a/extensions/markdown-language-features/src/test/diagnostic.test.ts b/extensions/markdown-language-features/src/test/diagnostic.test.ts index 5b631f334de..ce6357c65a6 100644 --- a/extensions/markdown-language-features/src/test/diagnostic.test.ts +++ b/extensions/markdown-language-features/src/test/diagnostic.test.ts @@ -158,4 +158,23 @@ suite('markdown: Diagnostics', () => { const diagnostics = await manager.getDiagnostics(doc1, noopToken); assert.deepStrictEqual(diagnostics.length, 0); }); + + test('Should not generate diagnostics for email autolink', async () => { + const doc1 = new InMemoryDocument(workspacePath('doc1.md'), joinLines( + `a c`, + )); + + const diagnostics = await getComputedDiagnostics(doc1, new InMemoryWorkspaceMarkdownDocuments([doc1])); + assert.deepStrictEqual(diagnostics.length, 0); + }); + + test('Should not generate diagnostics for html tag that looks like an autolink', async () => { + const doc1 = new InMemoryDocument(workspacePath('doc1.md'), joinLines( + `a b c`, + `a b c`, + )); + + const diagnostics = await getComputedDiagnostics(doc1, new InMemoryWorkspaceMarkdownDocuments([doc1])); + assert.deepStrictEqual(diagnostics.length, 0); + }); });