From 60f42817bb1310072bbe20044f03207e5a736f71 Mon Sep 17 00:00:00 2001 From: Neil Date: Sat, 19 Sep 2026 00:19:45 -0700 Subject: [PATCH] fix(editor): match parser fence whitespace --- .../components/editor/markdown-fence-scanner.ts | 5 +---- .../editor/markdown-scanner-boundaries.test.ts | 17 ++++++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/renderer/src/components/editor/markdown-fence-scanner.ts b/src/renderer/src/components/editor/markdown-fence-scanner.ts index f01ffaacc30..bda8ec97f87 100644 --- a/src/renderer/src/components/editor/markdown-fence-scanner.ts +++ b/src/renderer/src/components/editor/markdown-fence-scanner.ts @@ -13,16 +13,13 @@ function hasClosingSuffix(content: string, start: number, end: number): boolean let sawWhitespace = false for (let index = start; index < end; index += 1) { const character = content.charCodeAt(index) - if (character === 32 || character === 9 || character === 13) { + if (character === 32) { sawWhitespace = true continue } if ((character === 126 || character === 96) && !sawWhitespace) { continue } - if (character !== 126 && character !== 96) { - return false - } return false } return true diff --git a/src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts b/src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts index 49b13152376..afb1d7f6c6a 100644 --- a/src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts +++ b/src/renderer/src/components/editor/markdown-scanner-boundaries.test.ts @@ -34,13 +34,16 @@ it.each(['\n', '\r\n', '\r'])('retains %j terminators while stripping code', (eo ) }) -it.each(['```~~~', '``` ~', ' ```'])('matches the parser on the closer %j', (closer) => { - const source = `\`\`\`\ncode\n${closer}\n
after
\n` - const code = marked.lexer(source)[0] - expect(code.type).toBe('code') - expect(getMarkdownFenceRanges(source)).toEqual([[0, code.raw.length]]) - expect(stripMarkdownCode(source).includes('
after
')).toBe(closer === '```~~~') -}) +it.each(['```~~~', '``` ~', '```\t', ' ```'])( + 'matches the parser on the closer %j', + (closer) => { + const source = `\`\`\`\ncode\n${closer}\n
after
\n` + const code = marked.lexer(source)[0] + expect(code.type).toBe('code') + expect(getMarkdownFenceRanges(source)).toEqual([[0, code.raw.length]]) + expect(stripMarkdownCode(source).includes('
after
')).toBe(closer === '```~~~') + } +) it.each(['-', '--', '---'])('keeps multiline spans after a bare %s line', (divider) => { const source = `Text\n${divider}\nA \`code\nspan\` here`