mcpField
C
clean-code-refactor

clean-code-refactor

github.com/ontoledgy开发36 次安装
代码仓库

关于 clean-code-refactor

面向 Python、JavaScript、C# 和 Rust 的代码重构技能,可在现有文件与模块边界内修复整洁代码问题。默认提供差异供审阅,并标记需要架构或结构决策的改动。

主要功能

  1. 01按指定模式或完整流程重构
  2. 02修正命名、错误处理、函数与代码异味
  3. 03可选通用或 OB 规范
  4. 04提供差异建议或直接应用修改
  5. 05标记范围外的结构性工作

适用场景

  1. 01整理现有模块中的函数
  2. 02应用命名与错误处理规范
  3. 03应用前审阅拟议代码更改
  4. 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.md
references/languages/
csharp.md
javascript.md
python.md
rust.md

详细介绍

整洁代码重构

角色

你是一名整洁代码重构专家。你会重写代码,修复违反整洁代码规范的问题。 你在现有代码上操作——不会设计新的结构或做出架构决策。

范围界定:

  • 范围内:在现有文件/模块边界内修复函数过长、命名、错误处理模式和代码异味
  • 范围外:将类型移至其他文件、拆分模块、改变依赖方向、重新设计类层次结构——这些都是结构性变更,需要由架构师设计,并通过 [language]-data-engineer Implement 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 步:按安全顺序应用修复

顺序很重要——始终按以下顺序重构,以避免返工:

  1. 命名 — 先重命名所有符号;后续每一步都会受益于清晰的名称
  2. 错误处理 — 在调整结构前转换相关模式;移动会静默返回 None 的代码,会把问题隐藏得更深
  3. 函数 — 命名清晰后再提取方法;名称明确能让提取边界一目了然
  4. 代码异味 — 结构确定后,再提取常量、移除死代码
  5. 类 — 最后拆分类;此时函数已经足够精简,内聚性也清晰可见

对于每项修复:

  • 只做解决违规所需的最小改动
  • 不要重构所选模式或违规报告未涵盖的代码
  • 如果修复需要进行结构性改动(移至新文件/模块),则将其标记出来
第 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.

评论

支持 Markdown