From 81c3c5b5c3b69f947bbf9e5b2dd196f501af7892 Mon Sep 17 00:00:00 2001 From: brother7 <7brother7@gmail.com> Date: Sun, 23 Aug 2026 18:36:48 +0800 Subject: [PATCH] fix(coding): preserve contextual unicode folding --- electron/coding-projects/project-files.ts | 4 +--- tests/unit/coding-project-files.test.ts | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/electron/coding-projects/project-files.ts b/electron/coding-projects/project-files.ts index f9c6af6..5296b78 100644 --- a/electron/coding-projects/project-files.ts +++ b/electron/coding-projects/project-files.ts @@ -154,7 +154,6 @@ function foldedTextWithOffsets(value: string): { starts: number[]; ends: number[]; } { - let text = ''; const starts: number[] = []; const ends: number[] = []; for (let index = 0; index < value.length;) { @@ -163,14 +162,13 @@ function foldedTextWithOffsets(value: string): { const character = String.fromCodePoint(codePoint); const end = index + character.length; const folded = character.toLowerCase(); - text += folded; for (let foldedIndex = 0; foldedIndex < folded.length; foldedIndex += 1) { starts.push(index); ends.push(end); } index = end; } - return { text, starts, ends }; + return { text: value.toLowerCase(), starts, ends }; } async function fallbackFileList(projectPath: string): Promise { diff --git a/tests/unit/coding-project-files.test.ts b/tests/unit/coding-project-files.test.ts index 55c8d76..1b5dcba 100644 --- a/tests/unit/coding-project-files.test.ts +++ b/tests/unit/coding-project-files.test.ts @@ -110,6 +110,7 @@ describe('PI-105 project file service', () => { await mkdir(path.join(root, 'node_modules', 'private-package'), { recursive: true }); await writeFile(path.join(root, 'docs', 'guide.md'), 'First line\nNeedle and needle again\n', 'utf8'); await writeFile(path.join(root, 'docs', 'unicode.md'), 'İx needle and NEEDLE\n', 'utf8'); + await writeFile(path.join(root, 'docs', 'greek.md'), 'ΟΣ\n', 'utf8'); await writeFile(path.join(root, 'node_modules', 'private-package', 'secret.txt'), 'needle\n', 'utf8'); const service = new CodingProjectFileService({ async run() { @@ -145,5 +146,9 @@ describe('PI-105 project file service', () => { { text: 'NEEDLE', start: 14, end: 20 }, ], })); + expect(await service.search(root, 'ος')).toContainEqual(expect.objectContaining({ + path: 'docs/greek.md', + submatches: [{ text: 'ΟΣ', start: 0, end: 2 }], + })); }); });