跳转至

规则目录

pyscn 提供 7 个类别共 33 条规则。每条规则都有对应页面,说明其检测内容、问题原因、错误示例以及修正方法。

点击规则名称可打开对应页面。

不可达代码

永远无法执行的死代码。通过控制流图可达性分析检测。

规则 严重程度
unreachable-after-return Critical
unreachable-after-raise Critical
unreachable-after-break Critical
unreachable-after-continue Critical
unreachable-after-infinite-loop Warning
unreachable-branch Warning

重复代码

项目中复制粘贴或近似复制粘贴的代码片段。

规则 严重程度
duplicate-code-identical Warning
duplicate-code-renamed Warning
duplicate-code-modified Info (可选启用)
duplicate-code-semantic Warning

复杂度

分支过多、难以测试或可靠推理的函数。

规则 严重程度
high-cyclomatic-complexity 按阈值

类设计

依赖过多或承担过多无关职责的类。

规则 严重程度
high-class-coupling 按阈值
low-class-cohesion 按阈值

依赖注入

影响可测试性的构造函数和协作者模式。

规则 严重程度
too-many-constructor-parameters Warning
global-state-dependency Error
module-variable-dependency Warning
singleton-pattern-dependency Warning
concrete-type-hint-dependency Info
concrete-instantiation-dependency Warning
service-locator-pattern Warning

模块结构

导入图问题:循环依赖、过长导入链、层级违规。

规则 严重程度
circular-import 按循环大小
deep-import-chain Info
layer-violation 按架构规则
low-package-cohesion Warning
single-responsibility Warning / Error

模拟数据

意外发布到生产环境的占位数据。

规则 严重程度
mock-keyword-in-code Info / Warning
mock-domain-in-string Warning
mock-email-address Warning
placeholder-phone-number Warning
placeholder-uuid Warning
placeholder-comment Info
repetitive-string-literal Info
test-credential-in-code Warning

在命令行中选择规则

大多数用户通过 pyscn analyze 运行所有规则。在 CI 中,可按分析器类别过滤:

pyscn check --select deadcode          # 仅不可达代码规则
pyscn check --select clones            # 仅重复代码规则
pyscn check --select complexity        # 仅 high-cyclomatic-complexity
pyscn check --select deps              # circular-import + deep-import-chain + layer-violation
pyscn check --select di                # 所有依赖注入规则(可选启用)
pyscn check --select mockdata          # 所有模拟数据规则(可选启用)
pyscn check --select complexity,deadcode,deps   # 组合使用

详见 pyscn check 获取完整标志列表。

严重程度含义

严重程度 含义
Critical 几乎总是 bug。建议在合并前修复。
Error 高风险模式。通常应使 CI 失败。
Warning 值得审查。是 pyscn check 的默认失败阈值。
Info 仅供参考。仅在 min_severity = "info" 或等效设置时显示。
按阈值 严重程度取决于数值阈值(参见规则的选项部分)。