
什么是圈复杂度技能?
cyclomatic-complexity 是一项 Claude 技能,旨在减少现有代码中过多的分支。它尤其适用于由 AI 生成、功能运行正确但积累了深度嵌套条件、众多决策路径或难以由人类维护的函数的代码。
该技能会引导 Claude 执行结构化流程:按函数测量复杂度,找出最严重的热点,重构这些热点,验证行为,并通过重构前后的复杂度值总结结果。
该技能不会通过压缩表达式或巧妙的单行代码来优化分数,而是将决策逻辑移入清晰、命名明确的函数中。其目标不仅是降低复杂度指标,也包括提升可维护性。
主要功能
- 按函数测量:可使用 Radon、ESLint、gocyclo、Lizard 或手动计数来测量复杂度。
- 结合项目的阈值:该技能会遵循项目代码检查器中已经配置的复杂度限制。
- 优先处理热点:它会先重构最复杂的函数,而不是不加选择地修改代码。
- 采用成熟的重构模式:该技能使用守卫子句、提取函数、查找表和命名谓词。
- 不钻指标空子:复杂度会被重新组织到易于理解的单元中,而不是隐藏在密集的语法里。
- 清晰的报告:每次重构都会以重构前后的复杂度报告结束。
安装
在 Claude Code 中安装
添加项目的插件市场,然后安装该技能:
/plugin marketplace add saurabhkumar8112/cyclomatic-complexity-skill
/plugin install cyclomatic-complexity@cyclomatic-complexity-skill安装后,Claude Code 可以在相关的重构、清理和代码审查请求中激活该技能。
在 Claude.ai 中安装
- 打开仓库的 Releases 部分并下载
.skill文件。也可以将skills/cyclomatic-complexity文件夹创建为 ZIP 压缩包。 - 打开 Claude.ai,依次进入 Settings、Capabilities 和 Skills。
- 上传下载的技能文件或 ZIP 压缩包。
通过 Claude API 安装
对于基于 API 的工作流,请通过 Claude Skills API 上传技能。请按照 API 指南执行当前的上传和配置流程。
基本用法
当你的请求涉及重构、清理或代码审查时,该技能会自动触发。如需更多控制,可以明确指定该技能,并指出希望 Claude 检查的文件。
使用圈复杂度技能重构 parser.py
这个直接请求同时明确了预期的工作流程和目标文件。随后,Claude 可以测量复杂度,定位问题最严重的函数,并应用合适的重构模式。
请求聚焦的代码审查
你也可以将任务表述为聚焦复杂度的审查:
使用圈复杂度技能审查 parser.py。按函数测量复杂度,并优先重构最严重的热点。如果项目已经定义了代码检查器阈值,请将该配置保留在仓库中,以便技能遵循项目现有的标准。
理解重构流程
- 测量每个函数:该技能会使用合适的受支持分析器,例如 Radon、ESLint、gocyclo 或 Lizard,也可以进行手动计数。
- 检查项目阈值:如果已配置现有的代码检查器限制,则优先遵循这些限制。
- 排列热点优先级:复杂度最高的函数会优先处理。
- 应用易读的转换:Claude 会酌情引入守卫子句、提取函数、创建查找表,或为复杂的谓词命名。
- 验证行为:重构应保留现有行为,并使用可用的测试套件进行验证。
- 报告结果:最终响应会显示修改前后的复杂度。
阅读输出
完成的重构会包含类似以下内容的报告:
## 复杂度报告
| 函数 | 修改前 | 修改后 |
|----------|--------|-------|
| parseOrder | 14 | 4 |
已提取:validateHeader、resolveDiscount
行为已验证:现有测试套件通过在此示例中,parseOrder 的复杂度从 14 降至 4。报告还列出了提取出的函数 validateHeader 和 resolveDiscount,并记录现有测试已通过。
提取函数列表很重要,因为单纯的数字降低并不能证明代码更易于维护。清晰的名称可以展示职责转移到了哪里,并帮助审查者理解新的结构。
该技能使用的重构技术
守卫子句
守卫子句会尽早处理无效或异常条件。这可以减少嵌套,让主要执行路径更易于理解。
提取函数
当一个函数执行多个决策或承担多项职责时,该技能可以将逻辑一致的部分移入命名明确的函数中。这样可以将复杂度分散到能够表达自身意图的单元里。
查找表
将已知输入映射到已知结果的重复分支,可以用查找表替代。当这种方式有助于提升清晰度,而不只是缩短代码时,该技能会采用这种方法。
命名谓词
复杂条件可以放入名称能够解释业务规则的函数中。这样可以让决策点更易读,并避免难以理解的条件表达式。
高级技巧
从小范围目标开始
对于大型代码库,可以从一个文件或已知问题区域开始。像 refactor parser.py 这样明确的指令能为技能划定清晰边界,也让生成的报告更易于审阅。
确保提供代码检查器配置
如果项目有自己的复杂度阈值,请确保 Claude 执行任务时能够获取相关配置。该技能会遵循项目定义的限制,而不是强加无关的标准。
先处理最严重的问题点
优先处理复杂度最高的函数,可以将精力集中在对可维护性影响最大的地方。同时也能避免对已经简单的函数进行不必要的修改。
检查名称,而不仅是分数
除了最终数值,还要检查提取出的函数和谓词的名称。validateHeader 和 resolveDiscount 这样的名称能够说明职责;即使测量分数下降,含义模糊的辅助函数名称也会降低重构的价值。
使用测试进行安全检查
降低复杂度不应改变行为。保留现有测试套件,并确认最终报告记录了测试是否通过。更好的复杂度分数不应以牺牲正确性为代价。
避免鼓励指标投机的请求
应要求进行可读且易维护的修改,而不是追求尽可能低的分数。该技能明确避免将决策隐藏在巧妙的单行代码中,因此提示词也应强调清晰度和长期可维护性。
结论
圈复杂度技能为 Claude 提供了一套可重复的流程,用于改进分支繁多的代码。它会测量复杂度、遵循项目阈值、优先处理最严重的函数、应用可读的重构模式、验证行为,并以具体的前后对比报告收尾。该项目以 Apache 2.0 许可证发布。
