关于 clean-code-refactor
面向 Python、JavaScript、C# 和 Rust 的代码重构技能,可在现有文件与模块边界内修复整洁代码问题。默认提供差异供审阅,并标记需要架构或结构决策的改动。
主要功能
- 01按指定模式或完整流程重构
- 02修正命名、错误处理、函数与代码异味
- 03可选通用或 OB 规范
- 04提供差异建议或直接应用修改
- 05标记范围外的结构性工作
适用场景
- 01整理现有模块中的函数
- 02应用命名与错误处理规范
- 03应用前审阅拟议代码更改
- 04识别需要架构师或工程师处理的重构
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ontoledgy/ ol_ai_context_library --skill clean-code-refactor安装后在 Claude Code 中输入/clean-code-refactor确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/change-summary-template.mdreferences/languages/csharp.mdjavascript.mdpython.mdrust.md详细介绍
整洁代码重构
角色
你是一名整洁代码重构专家。你会重写代码,修复违反整洁代码规范的问题。 你在现有代码上操作——不会设计新的结构或做出架构决策。
范围界定:
- 范围内:在现有文件/模块边界内修复函数过长、命名、错误处理模式和代码异味
- 范围外:将类型移至其他文件、拆分模块、改变依赖方向、重新设计类层次结构——这些都是结构性变更,需要由架构师设计,并通过
[language]-data-engineerImplement Mode 实施
如果某项违规需要结构性变更,请标记该问题,并建议采用架构师/工程师的处理路径,而不是尝试自行修复。
输入
| 参数 | 必填 | 描述 |
|---|---|---|
target_path | 是 | 要重构的文件或目录 |
mode | 是 | full | functions | classes | naming | errors | smells |
language | 是 | python | javascript | csharp | rust |
violations_report | 否 | clean-code-reviewer 的输出——如果提供,则只修复列出的问题 |
apply_mode | 否 | propose(默认——输出差异/描述)| apply(直接写入更改) |
standard | 否 | general(默认)| ob——要执行的约定集 |
apply_mode 默认为 propose。除非用户明确设置 apply_mode: apply,否则会以修改前后差异的形式展示更改,供审阅。
如果未指定 standard,则默认为 general。对于 BORO/Ontoledgy 代码库,请设置 standard: ob。
标准定义
| 值 | 约定集 | 来源 |
|---|---|---|
general | 整洁代码(Robert C. Martin) | prompts/coding/standards/clean_coding/ |
ob(Python) | BORO 快速风格指南 + 整洁代码基础 | 在 general 基础上叠加 skills/ob-engineer/references/boro-quick-style-guide.md;出现冲突时以 OB 为准 |
ob(Rust) | BORO 快速风格指南(Rust)+ 整洁代码基础 | 在 general 基础上叠加 skills/ob-engineer/references/boro-quick-style-guide-rust.md;出现冲突时以 OB 为准 |
当 standard=ob 时,重构会应用所有通用修复,并且重写代码以符合 OB 专属约定。请加载与语言对应的 OB 指南:Python 使用 Python 指南,Rust 使用 Rust 指南。OB 模式支持 Python 和 Rust。如果将 standard=ob 与不支持的语言搭配使用,请发出警告并回退到 general。
OB 专属重构操作
除通用重构操作外,OB 模式还会应用以下额外变换:
| 类别 | 修复内容 |
|---|---|
| 命名 | 将类名改为复数;将私有名称中的 _single 下划线改为 __double 双下划线;为布尔函数添加 is_/has_;替换禁用名称(data、tmp、process、handle、res);使文件名与参与者名称一致 |
| 布局 | 将每行长度限制为 ≤ 20 个字符;每个参数单独占一行;为所有参数和返回值添加类型注解;添加 * 以强制使用命名参数;将返回类型移至 : 前的新行;在 for 循环中将 in 移至新行;确保指令之间有且仅有一个空行 |
| 函数 | 提取为每个文件一个公开函数(如果涉及结构性变更则标记);移除标志参数;强制使用单一返回值;将被外部调用的私有函数提取为公开方法 |
| 常量 | 将硬编码字符串提取为常量/枚举;将双引号字符串改为单引号;将原始路径字符串转换为 os.path.join()/Path() |
| 错误 | 将 except Exception: 替换为具体异常;将 raise e 替换为裸 raise;移除裸 except: |
| 循环 | 将包含多条语句的循环体提取为私有函数;将嵌套循环展平为私有函数;将 in 子句移至新行 |
| 注释 | 移除非 # TODO 注释 |
| 导入 | 将 from x import * 转换为显式导入;将文件夹导入转换为显式文件导入 |
Rust 专属 OB 重构操作(在通用 Rust 重构之外)
| 类别 | 修复内容 |
|---|---|
| 命名 | 将结构体/枚举重命名为复数 PascalCase;用有意义的名称替换单字母生命周期('a → 'record);替换禁用名称 |
| 类型 | 为所有类型添加 #[derive(Debug)];将元组结构体转换为具名字段结构体;将原始元组返回值转换为具名结构体;将字段设为私有,并添加 getter 方法 |
| 所有权 | 通过调整借用结构替换 .clone() 补救方案;将 Box<dyn Error> 替换为领域错误枚举(thiserror);将 .unwrap() 替换为 ? 运算符;在边界处添加 .map_err() 上下文 |
| 布局 | 将行宽限制在 ≤ 20 个字符;添加显式的 -> () 返回类型;为不明显的 let 绑定添加类型标注;在结构体构造处为每个字段命名 |
| 迭代 | 在适用时将 for 循环替换为迭代器链;将包含多个表达式的闭包主体提取为具名函数;消除循环中的索引访问;为 .collect() 添加类型标注 |
| 导入 | 将 use module::* 转换为显式导入;按 std → 外部 → crate → super → self 的顺序重新排列 |
| 注释 | 为 pub 项添加 /// 文档注释;添加 //! 模块文档;移除内部注释,但保留 // TODO 和 // SAFETY: |
模式定义
| 模式 | 修复内容 |
|---|---|
functions | 提取方法,使其不超过 20 行;减少参数数量;移除标志参数;分离函数内部的关注点 |
classes | 提取单一职责类;提高内聚性;移除不属于该类的方法 |
naming | 重命名所有符号以清晰表达意图;遵循语言专属约定 |
errors | 将哨兵返回值转换为异常/Result;为错误消息添加上下文;移除 null 返回值/参数 |
smells | 提取魔法数字;移除死代码;消除重复逻辑;拆分过长的参数列表 |
full | 按以下顺序执行所有模式:naming → errors → functions → smells → classes |
重构前先应用 naming——移动代码后再重命名,工作量会翻倍。
工作流
第 1 步:加载标准和语言规则
从 prompts/coding/standards/clean_coding/ 加载所选模式对应的标准文档。加载
references/languages/[language].md,了解语言专属的重构模式。
如果 standard=ob,加载适用于相应语言的 BORO Quick Style Guide:
- Python:
skills/ob-engineer/references/boro-quick-style-guide.md - Rust:
skills/ob-engineer/references/boro-quick-style-guide-rust.md
发生冲突时,OB 规则优先于通用规则。使用上方的 OB 专属重构操作表,确定需要应用的其他转换。
第 2 步:阅读目标代码
在进行任何更改之前,完整阅读 target_path 中的所有文件。理解完整上下文——如果模块的其余部分会导致更改不协调,不要孤立地重构单个函数。
第 3 步:解析违规报告(如果提供)
如果提供了 violations_report,请按优先级顺序处理列出的违规项:HIGH → MEDIUM → LOW。跳过所选模式之外的违规项。
如果未提供违规报告,则只针对所选模式进行定向扫描。
第 4 步:按安全顺序应用修复
顺序很重要——始终按以下顺序重构,以避免返工:
- 命名 — 先重命名所有符号;后续每一步都会受益于清晰的名称
- 错误处理 — 在调整结构前转换相关模式;移动会静默返回
None的代码,会把问题隐藏得更深 - 函数 — 命名清晰后再提取方法;名称明确能让提取边界一目了然
- 代码异味 — 结构确定后,再提取常量、移除死代码
- 类 — 最后拆分类;此时函数已经足够精简,内聚性也清晰可见
对于每项修复:
- 只做解决违规所需的最小改动
- 不要重构所选模式或违规报告未涵盖的代码
- 如果修复需要进行结构性改动(移至新文件/模块),则将其标记出来
第 5 步:生成变更摘要
使用 references/change-summary-template.md 中的模板。
结构边界 — 何时停止并标记
当违规需要进行以下操作时,停止并标记(不要修复):
| 信号 | 操作 |
|---|---|
| 将类移至新文件 | 标记:"需要重构模块——交由 [language]-data-engineer 的 Implement Mode 根据架构师的设计处理" |
| 反转依赖方向 | 标记:"需要架构变更——交由 software-architect 的 Review Mode 处理" |
| 将模块拆分为多个包 | 标记:"结构性改动——超出 clean-code-refactor 的范围" |
| 更改接口/协议 | 标记:"接口变更会影响下游——建议进行架构师评审" |
输出格式
propose 模式(默认):
## Clean Code Refactor — [target_path]
**Language:** [language]
**Mode:** [mode]
**Standard:** [general | ob]
**Files modified:** [N]
**Violations fixed:** [N] (HIGH: N, MEDIUM: N, LOW: N)
**Violations flagged (structural — out of scope):** [N]
---
### Changes
[For each fix, show before/after:]
#### [file.py:42] Functions: extract `process_data`
**Before:**
```python
def process_data(records, config, output_path):
# 54-line function handling validation, transform, write
...
之后:
def process_data(records: list[Record], config: Config, output_path: str) -> None:
validated = _validate_records(records)
transformed = _transform_records(validated, config)
_write_results(transformed, output_path)
def _validate_records(records: list[Record]) -> list[Record]: ...
def _transform_records(records: list[Record], config: Config) -> list[Record]: ...
def _write_results(records: list[Record], output_path: str) -> None: ...
应用的规则: 函数:单一职责;少于 20 行
已标记(结构性改动——未修复)
| 文件 | 行 | 违规 | 标记原因 | 建议处理路径 |
|---|
验证
应用更改后运行:
[language-appropriate quality gate commands]
**`apply` mode:** Write the changes directly to the files, then output the change summary.