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