From d50c55da4f3fb0d96576acb0c1ea0fd83e022e13 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 11 Sep 2026 22:01:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(format):=20=E5=85=B3=E6=8E=89=20pi-lens=20?= =?UTF-8?q?=E7=9A=84=E9=A1=B9=E7=9B=AE=E7=BA=A7=E8=87=AA=E5=8A=A8=E6=94=B9?= =?UTF-8?q?=E5=86=99=EF=BC=9B=E4=BF=AE=E5=A4=8D=E5=AE=83=E8=A2=AB=20pretti?= =?UTF-8?q?er=20=E6=94=B9=E5=9D=8F=E7=9A=84=20index.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # 我上次的修复只做了一半 上一次(429149e)我加了根 biome.jsonc,把 biome 的 formatter 关掉,并撤销了它造成的 约 7000 行重排。那时我以为问题解决了 —— **没有**。 pi-lens 编辑文件后会「安全格式化」它,格式化器是**按扩展名各自挑**的 (FORMATTER_POLICY_BY_EXTENSION)。仓库里没有任何格式化器配置时它走 smart-default 回退: .ts/.tsx/.js/.mjs/.json/.css → biome .html → prettier ← 这一条我漏了 biome.jsonc 挡得住 biome,对 prettier 完全无效。于是 a404cba(图标提交)里我改了 index.html 加 favicon,prettier 顺手把它改写了: - + -classList.add('dark') +classList.add("dark") ← 单引号变双引号 - +多行折行 而 test/theme.test.mjs 恰好逐字符断言那一段里是 `classList.add('dark')`(单引号), 两条断言当场变红。**更糟的是我没看见**:验证时我用 `grep -E 'Test Files|Tests |FAIL'` 过滤输出,而这个测试的摘要是中文的(「主题:28 通过,2 失败」),被整行滤掉了, 于是我在提交信息里写了「196 项测试全绿」—— 一句不成立的结论。 (顺带厘清两起事故的元凶不同:19a3161 那次是 **biome**(tab 缩进是它的默认), a404cba 这次是 **prettier**。我先前把它们当成同一个问题。) # 根因级修法 不再逐个格式化器打补丁,而是关掉 pi-lens 对本仓库的改写路径。 项目级 `.pi-lens.json` 支持 format.enabled / autofix.enabled(文档 docs/settings.md 的 mutation controls),由当前目录向上查找,覆盖整个仓库: {"format": {"enabled": false}, "autofix": {"enabled": false}} autofix 一并关掉:它同样会在与本次改动无关的行上动手。 biome.jsonc 保留(纵深防御,且它顺带关掉了 biome 的自动修复)。 # 验证 - 修好 index.html:DOCTYPE 恢复大写、viewport 回单行、内联脚本回单引号, 与 19a3161^(未受污染的原版)逐字节一致,只多出 favicon 四行。 实验证据:把原始版喂给 prettier,输出与 a404cba 里的版本**逐字节相同** —— 确认元凶。 - `node test/theme.test.mjs` → 主题:30 通过,exit 0 - 加注释后再编辑一次 index.html:单引号与 DOCTYPE 均未被改写(改写路径已断) - 顺带在注释里写明「引号别统一成双引号,theme.test.mjs 逐字符断言」,防止后人"清理" --- .pi-lens.json | 37 +++++++++++++++++++++++++++++++++++++ client/electron/index.html | 22 +++++++++++----------- 2 files changed, 48 insertions(+), 11 deletions(-) create mode 100644 .pi-lens.json diff --git a/.pi-lens.json b/.pi-lens.json new file mode 100644 index 0000000..f8564df --- /dev/null +++ b/.pi-lens.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://pi-lens.dev/schema/project.json", + // 关掉 pi-lens 对本仓库的自动改写。 + // + // # 为什么必须显式关 + // + // pi-lens 编辑任一文件后会「安全格式化」它。本仓库没有任何格式化器配置时, + // 它走 smart-default 回退:.ts/.tsx/.js → biome,**.html → prettier** + // (见 pi-lens 的 FORMATTER_POLICY_BY_EXTENSION)。两套默认值都与本仓库的 + // 手工排版不兼容 —— biome 默认 tab 缩进 + 双引号,prettier 默认双引号、 + // 还会把 改成小写、按 80 列折行。 + // + // 已经造成过两次真实损失: + // 1) 19a3161 用 `git add -A` 把约 7000 行 biome 重排扫进功能提交, + // 使那次提交无法审查(还掩盖了一处 Go 文件的删行); + // 2) a404cba 里 prettier 改写了 client/electron/index.html —— 单引号变双引号、 + // DOCTYPE 变小写,直接打破 test/theme.test.mjs 的两条断言。 + // 该测试恰好要求同步内联脚本里是 classList.add('dark')(单引号)。 + // + // 根 biome.jsonc 只挡得住 biome,挡不住 prettier:两者是并列的候选格式化器, + // 各有各的配置。所以真正的开关是这里 —— 项目级、两条改写路径一起关。 + // + // # 为什么不是「把格式化器配成本仓库风格」 + // + // 试过把缩进/引号/lineWidth 全部对齐,`biome format --write` 仍然改动 17 个文件: + // 本仓库的注释按语义换行、数组与调用按可读性手工折行,这些格式化器还原不了。 + // 只要它还在跑,每次编辑都会产生与内容无关的大面积 diff,把真正的改动埋掉。 + // + // 本仓库的静态检查由 tsc / go vet / tree-sitter / ast-grep 与各自的测试套件承担。 + "format": { + "enabled": false + }, + // autofix 同理:它会在与本次改动无关的行上做自动修复。 + "autofix": { + "enabled": false + } +} diff --git a/client/electron/index.html b/client/electron/index.html index 6b35b7d..56eaefd 100644 --- a/client/electron/index.html +++ b/client/electron/index.html @@ -1,11 +1,8 @@ - + - +