mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-15 12:55:51 +00:00
新增 encoding.ts 核心模块实现三层编码检测(BOM → UTF-8 fatal → GBK 回退), 改造同步/异步读取路径和写入路径,使 FileReadTool/FileEditTool/FileWriteTool 能正确处理 GBK 编码文件。包含完整单元测试和 spec 文档。 Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
3.4 KiB
3.4 KiB
Acceptance Task: 多编码文件工具验收
前置条件:
- 所有 Task 0-4 已执行完毕
- 运行环境: 当前开发环境(Bun)
范围变更: 仅保留 GBK 编码支持,Shift_JIS/EUC-JP/EUC-KR/Big5/GB18030/ISO-8859-1 已移除。
端到端验证:
-
运行完整测试套件确保无回归
bun run precheck- 预期: typecheck + lint fix + test 全部零错误通过
- 失败排查: 检查各 Task 的测试步骤,特别是 Task 1 的编码检测测试和 Task 3 的 readFileInRange 测试
-
验证 GBK 文件读取正确性
- 创建 GBK 编码测试文件:
bun -e "const fs = require('fs'); const b = Buffer.from([0xC4, 0xE3, 0xBA, 0xC3, 0xCA, 0xC0, 0xBD, 0xE7, 0x0A]); fs.writeFileSync('/tmp/test-gbk.txt', b)" - 读取并验证:
bun -e "import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const r = readFileSyncWithMetadata('/tmp/test-gbk.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)" - 预期: encoding 为
gbk,content 为 "你好世界" - 失败排查: 检查 Task 1 的 detectEncoding 逻辑、Task 2 的 readFileSyncWithMetadata 集成
- 创建 GBK 编码测试文件:
-
验证 UTF-8 文件读取回归
bun -e "import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const fs = require('fs'); fs.writeFileSync('/tmp/test-utf8.txt', 'Hello 世界\n'); const r = readFileSyncWithMetadata('/tmp/test-utf8.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)"- 预期: encoding 为
utf-8,content 为 "Hello 世界" - 失败排查: 检查 Task 1 的 UTF-8 fatal 验证逻辑
-
验证 UTF-16LE 文件读取回归
bun -e "const fs = require('fs'); const b = Buffer.concat([Buffer.from([0xFF, 0xFE]), Buffer.from('Hello', 'utf16le')]); fs.writeFileSync('/tmp/test-utf16le.txt', b); import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const r = readFileSyncWithMetadata('/tmp/test-utf16le.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)"- 预期: encoding 为
utf-16le,content 为 "Hello" - 失败排查: 检查 Task 1 的 BOM 检测层、Task 2 的集成
-
验证 readFileInRange 异步路径的 GBK 支持
bun -e "import { readFileInRange } from './src/utils/readFileInRange.js'; const r = await readFileInRange('/tmp/test-gbk.txt', 0); console.log('content:', r.content); console.log('totalLines:', r.totalLines)"- 预期: content 为 "你好世界",totalLines 为 1
- 失败排查: 检查 Task 3 的 fast path 改造
-
验证 GBK 文件写入(UTF-8 回退)
bun -e "import { writeTextContent } from './src/utils/file.js'; writeTextContent('/tmp/test-gbk-write.txt', '测试写入', 'gbk', 'LF'); const fs = require('fs'); const content = fs.readFileSync('/tmp/test-gbk-write.txt', 'utf8'); console.log('written:', content)"- 预期: 文件成功写入,内容为 "测试写入"(UTF-8 回退或 GBK 编码均可接受)
- 失败排查: 检查 Task 4 的 writeTextContent 改造和 encodeString 函数
-
验证编码检测性能
bun -e "import { detectEncoding } from './src/utils/encoding.js'; const buf = Buffer.alloc(4096, 0x41); const start = performance.now(); for (let i = 0; i < 1000; i++) detectEncoding(buf); console.log('avg:', (performance.now() - start) / 1000, 'ms')"- 预期: 平均检测耗时 < 1ms
- 失败排查: 检查 Task 1 的检测逻辑是否有不必要的重复操作