From e41105b5fc74059bdd917a7cf2eaa5061df9b253 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Thu, 29 Oct 2026 10:05:15 -0700 Subject: [PATCH] fix(editor): suppress ambiguous Unicode highlights in Markdown (#36009) --- .../editor/MonacoEditor.system-theme.test.tsx | 31 +++++++++++++++++++ .../src/components/editor/MonacoEditor.tsx | 4 +++ 2 files changed, 35 insertions(+) diff --git a/src/renderer/src/components/editor/MonacoEditor.system-theme.test.tsx b/src/renderer/src/components/editor/MonacoEditor.system-theme.test.tsx index d3ac9e63e13..773f1865640 100644 --- a/src/renderer/src/components/editor/MonacoEditor.system-theme.test.tsx +++ b/src/renderer/src/components/editor/MonacoEditor.system-theme.test.tsx @@ -144,3 +144,34 @@ describe('MonacoEditor system theme', () => { expect(editorProps.current?.theme).toBe('vs') }) }) + +it('updates Unicode highlighting when the editor language changes', () => { + installMatchMedia(false) + const props = { + fileId: 'file', + filePath: '/repo/file.md', + viewStateKey: 'pane:file', + relativePath: 'file.md', + content: '中文说明:( example )\u200b', + onContentChange: vi.fn(), + onSave: vi.fn() + } + const view = render() + expect(editorProps.current?.options).toEqual( + expect.objectContaining({ + unicodeHighlight: { ambiguousCharacters: false, invisibleCharacters: true } + }) + ) + view.rerender() + expect(editorProps.current?.options).toEqual( + expect.objectContaining({ + unicodeHighlight: { ambiguousCharacters: true, invisibleCharacters: true } + }) + ) + view.rerender() + expect(editorProps.current?.options).toEqual( + expect.objectContaining({ + unicodeHighlight: { ambiguousCharacters: false, invisibleCharacters: true } + }) + ) +}) diff --git a/src/renderer/src/components/editor/MonacoEditor.tsx b/src/renderer/src/components/editor/MonacoEditor.tsx index 763f810beaf..729b8609284 100644 --- a/src/renderer/src/components/editor/MonacoEditor.tsx +++ b/src/renderer/src/components/editor/MonacoEditor.tsx @@ -306,6 +306,10 @@ export default function MonacoEditor({ lineNumbers: 'on', renderLineHighlight: 'line', automaticLayout: true, + unicodeHighlight: { + ambiguousCharacters: language !== 'markdown', + invisibleCharacters: true + }, tabSize: 2, readOnly, scrollbar: autoHeight