From 710dd9860b2cb11d3b7f1fc436f3010e997ae4fd Mon Sep 17 00:00:00 2001 From: arpankanwer Date: Thu, 10 Sep 2026 23:26:35 -0400 Subject: [PATCH 1/2] fix: keep diff markers out of markdown list prefixes Fixes #335469 --- .../src/preview/documentRenderer.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extensions/markdown-language-features/src/preview/documentRenderer.ts b/extensions/markdown-language-features/src/preview/documentRenderer.ts index e29e37ede74567..7cea58c96a4a2a 100644 --- a/extensions/markdown-language-features/src/preview/documentRenderer.ts +++ b/extensions/markdown-language-features/src/preview/documentRenderer.ts @@ -277,6 +277,12 @@ export class MdDocumentRenderer { } } +/** Length of the leading list marker (`- `, `1. `) that must stay intact for list parsing. */ +function getListMarkerPrefixLength(line: string): number { + const match = /^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/.exec(line); + return match ? match[0].length : 0; +} + /** * Injects empty marker `` elements into the markdown source text at inner change positions. */ @@ -301,13 +307,18 @@ function injectInnerChangeMarkers(text: string, innerChanges: readonly MarkdownP } let line = lines[lineNum]; + const listPrefixLength = getListMarkerPrefixLength(line); // Sort by startColumn descending so that insertions don't shift earlier positions changes.sort((a, b) => b.change.startColumn - a.change.startColumn); for (const { index, change } of changes) { - const start = Math.min(change.startColumn, line.length); + let start = Math.min(change.startColumn, line.length); const end = Math.min(change.endColumn, line.length); + // Keep the highlight out of the list marker so the line still parses as a list item. + if (start < listPrefixLength) { + start = listPrefixLength; + } if (start >= end) { continue; } From 0aa93ee7ebb75e512be9b08811fc1ba9adb25e8b Mon Sep 17 00:00:00 2001 From: arpankanwer Date: Thu, 10 Sep 2026 23:42:06 -0400 Subject: [PATCH 2/2] fix: cover blockquote and empty markers in diff list prefix --- .../markdown-language-features/src/preview/documentRenderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/markdown-language-features/src/preview/documentRenderer.ts b/extensions/markdown-language-features/src/preview/documentRenderer.ts index 7cea58c96a4a2a..57b0cc1046a08b 100644 --- a/extensions/markdown-language-features/src/preview/documentRenderer.ts +++ b/extensions/markdown-language-features/src/preview/documentRenderer.ts @@ -279,7 +279,7 @@ export class MdDocumentRenderer { /** Length of the leading list marker (`- `, `1. `) that must stay intact for list parsing. */ function getListMarkerPrefixLength(line: string): number { - const match = /^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/.exec(line); + const match = /^[ \t]*(?:>[ \t]*)*(?:[-*+]|\d+[.)])(?:[ \t]+|$)/.exec(line); return match ? match[0].length : 0; }