From dd9dca9825effa9d8db2decaeae017947be65e03 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 16 May 2022 03:19:29 -0700 Subject: [PATCH] Fixing some html tags detected as autolinks for diagnostics (#149511) For markdown such as `b`, we currently detect `` as an uri (an autolink) and then try validating it as a file path This change doesn't fix `` being detected as a link (which is actually correct if there isn't closing html), but does fix the us trying to validate it by marking the uri as external --- .../languageFeatures/documentLinkProvider.ts | 5 +++++ .../src/test/diagnostic.test.ts | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+) 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); + }); });