codemetrics阈值设为6才真正有用:≥6需人工复查,≥11必须拆分;状态栏变红是认知超载提示,非报错;需配合eslint complexity规则设为8实现“6提示、8拦截”梯度管控。

CodeMetrics 的阈值设成 6 才真正有用
默认的 codemetrics.complexityThreshold: 10 几乎没用——它会让大量已超出人脑短期记忆负荷的函数继续“隐身”。真实项目中,圈复杂度 ≥6 就该人工复查,≥11 必须拆分。状态栏变红不是报错,而是认知负荷超载提示。
在 settings.json 中加这一行即可生效:
"codemetrics.complexityThreshold": 6
然后执行 Developer: Reload Window(Ctrl+Shift+P 或 Cmd+Shift+P 输入后回车)。
- 设成 3 或 4 会误伤合法状态机(比如带 5 个
else if的路由分发逻辑) - 设成 6 不是为了“更严格”,而是把“需要人工介入”的范围收得更准
- 这个值不适用于 class 内部未命名方法(如
{ render() { ... } }),它们需显式声明为function render()才能被识别
ESLint 的 complexity 规则必须同步设为 8
CodeMetrics 只提示,不拦截;它不能替代 ESLint 的强制守门作用。如果你要守住质量底线,complexity 规则必须启用并设为可阻断提交的级别。
在 .eslintrc.js 的 rules 中加入:
"complexity": ["error", {"max": 8}]
这样保存时就会报错,CI 流程也能卡住高复杂度代码的提交。
- 别设成和 CodeMetrics 一样的 6——ESLint 是拦截线,需留出一点缓冲空间
- 设成 8 是为了和 VSCode 插件形成梯度:6 提示、8 拦截
- 若项目含大量第三方脚本(如
vendor/),建议用overrides排除,避免误报
阈值生效的前提是文件类型被正确识别
CodeMetrics 不扫描 node_modules、dist、.git,也不支持跨文件聚合——但它连单个函数都分析不了,如果文件后缀没被识别为有效语言。
- 只对
.ts、.js、.py、.java后缀触发分析 -
.jsx文件若被files.associations映射成其他语言(如"javascript"),也会失效 - 类声明、空行、注释行、JSX 混写 HTML(如
<div>{x}</div>)会导致 AST 解析失败,显示N/A
别靠手动挪光标查函数
想快速定位全文件最复杂的函数?别一个个把光标停进去看状态栏。直接按 Ctrl+Shift+P(或 Cmd+Shift+P),输入并执行:
Code Metrics: Analyze current file
侧边栏会列出当前文件所有函数的圈复杂度(C 值),按降序排列;点击任意条目,光标自动跳转到对应函数开头。
注意:它不进 node_modules、dist、.git,也不支持跨文件聚合——这就是它的边界。
真正麻烦的从来不是“找不到复杂函数”,而是“找到之后没人动它”。阈值调得再准,没有后续重构动作,也只是在状态栏多亮几盏红灯而已。











