用途
re0-style 用于解决同一会话中写出的代码与周边代码风格不一致的问题,例如引号风格不同、命名大小写不同、import 顺序不同、错误抛出方式与邻近代码不同。它的目标是在不改变行为的前提下,让范围内的代码读起来像它的邻居。所有约定都取自仓库本身:先来自项目配置的格式化工具和 linter,其次来自邻近文件对无工具可判定问题所遵循的模式。当仓库自身在某一约定上分裂为两套时,它向用户提问,而不是替用户选择。最终结果是仅含风格的 diff,以及按文件和规则列出的逐项变更报告。
主要能力
- 固定范围:以用户指定的改动(工作区 diff 或对指定基线的 diff)或文件列表为单位;对改动而言,单位是变更行,未触及的文件与未触及的行都在范围之外。
- 环境准备:按 manifest、任务运行器或 CI 工作流指定的命令先跑一次项目测试并记录结果,避免把既有失败归因于本次风格处理。
- 排除非仓库自身内容:通过本技能目录中的
node scripts/scope.mjs <files...> [--json]列出每个文件的 linguist-generated / linguist-vendored 属性、生成文件头、formatter/linter off 标记及其行号,以及从文件所在文件夹到仓库根适用的风格配置文件;退出码 0 表示无文件被标记,3 表示一个或多个被标记,2 表示用法错误或输入不可读。命中仅为线索,需人工判断后排除真正生成或 vendored 的文件,并保留 off 标记下的所有区域。 - 读取工具规则:从配置、manifest、脚本、锁文件、CI 工作流和 pre-commit 配置中确定仓库运行的格式化工具与 linter 及其选项;通过项目自身的解析方式(npm exec、bun run、./node_modules/.bin/、uv run、poetry run、锁定工具链)解析,打印即将运行的工具版本并与锁文件或 manifest 声明比较;版本不匹配或只能通过全局二进制/临时安装获取时,停止该工具修复并记入报告。
- 推断工具之外的约定:对范围内无工具可判定的问题抽样邻近文件(先同文件夹,再仓库中同类文件),统计每种模式;当几乎全部样本遵循某模式且例外看起来像漂移时视为约定;当另一模式占据整个文件夹或模块、或跨文件反复出现时,记录两套约定及各自数量与位置;无法判断时按两套处理并向用户提问;文件夹自身一致的约定优先于仓库其余部分。
- 应用工具修复:仅对范围内文件运行 formatter 与 linter 的安全修复模式;对改动事先用
git show <base>:<path>读取基线版本到临时副本检查格式状态,基线干净则格式化整个文件只触达改动,否则仅保留变更行内的编辑并把先前漂移记为遗留;用户要求为仓库缺失的 formatter/linter 做配置时,按生态与 manifest 指向配置,选项取自第 4 步观察到的代码行为,只对范围运行,范围外本会产生的变更仅报告不应用。 - 手工修复:在范围内修复剩余 lint 问题及与推断约定的偏差,保持行为不变;重命名局部或私有标识符时一并更新所有引用;跨越公共 API(其他模块或包导入的导出、CLI 标志、配置键、路由、序列化字段)的重命名在报告中提出并列出所有调用方,仅在用户确认后应用;只有逻辑改动才能满足的 lint 问题保留并报告。
- 呈现分歧:对两套约定并存之处保持代码不变,在报告中写入问题:两种模式、各自数量、各自位置、范围内等待答案的行;本次运行不因此停止,后续处理再应用答案。
- 验证与报告:确认经项目自身解析运行的 formatter/linter 报告被触及文件干净,或列出全部遗留问题及原因;确认测试结果与准备阶段一致;逐 hunk 核对 diff 都在范围内且对应报告中的变更;每处分歧带各模式计数,公共重命名未经确认只提出不应用;按文件与规则(工具规则 id,或带计数的约定)报告每项变更,并报告遗留项:作为问题呈现的分歧、只能靠逻辑改动解决的发现、提议的公共重命名、范围外漂移、工具版本不匹配及各项交接。
使用方式
以技能形式调用,需提供要处理的改动或文件列表。技能内部通过 node scripts/scope.mjs <files...> [--json] 扫描范围,通过项目自身解析方式运行 formatter、linter 和测试,最终输出风格 diff 与报告。
适用场景
在同一仓库中统一新写代码与既有代码风格;在提交前整理指定改动的风格;为仓库补充缺失的格式化/检查配置并只作用于指定范围。
限制
- 只做风格变更,不改变值、条件、调用、控制流或公共名称;加载时执行的 import 顺序保持不变。
- 不触碰生成文件、vendored 文件及 formatter/linter off 标记区域。
- 不在两套约定之间静默选择,分歧以带计数的问题提交用户。
- 只能通过逻辑改动解决的 lint 问题不修复,仅报告。
- 散文与注释的标点、文字冗余与死代码等交接给 dedash、dedot、debloat 等处理,不在本技能内执行。
- 公共 API 重命名需用户确认后才应用。