跳转至

面向 Python 的结构化静态分析

pyscn

pyscn 像编译器一样阅读 Python 代码 —— 控制流图、语法树、导入图。这正是它能发现逐行 lint 工具无法发现的问题的原因:return 之后残留的死代码、以不同名字重复的逻辑,以及悄悄形成循环的模块依赖。

uvx pyscn@latest analyze .

开始使用 在 GitHub 上查看

Go 编写 · 无 Python 运行时依赖 · 100,000+ 行/秒 · 33 条规则

Control-flow graph for a function with unreachable code After the conditional, both branches return. A logging call written after the conditional is never reached, so pyscn flags it as unreachable-after-return. def process(x): if x is None: True return None False return compute(x) log("done") → flagged: unreachable-after-return

检测内容

  • 不可达代码


    基于 CFG 的可达性分析,可发现 return / raise / break / continue 之后的死代码,以及恒真分支之后的不可达代码。

  • 重复代码


    APTED 树编辑距离结合 LSH,支持四种克隆类型:完全相同、重命名、修改、语义相似。

  • 复杂度


    计算每个函数的圈复杂度,阈值可按项目自行调整。

  • 类设计


    CBO 耦合度和 LCOM4 内聚度度量,揭示职责过多或过少的类。

  • 循环导入


    基于 Tarjan 强连通分量算法,在运行时抛出 ImportError 之前发现循环依赖。

  • 模块结构


    对导入图进行 Leiden 聚类,揭示哪些模块真正应该在一起,哪些不该。

安装

uvx pyscn@latest analyze .

无需安装即可运行最新版本。

uv tool install pyscn
pipx install pyscn
pip install pyscn

详见安装指南

快速开始

pyscn analyze .                                  # 完整分析,生成 HTML 报告
pyscn check --select complexity,deadcode src/    # CI 质量门禁
pyscn init                                       # 生成 .pyscn.toml

详见快速开始规则目录

AI 代理集成

uvx add-skills ludo-technologies/pyscn

安装 Agent Skills,教 Claude Code、Cursor、Codex、Gemini CLI 及其他编码代理何时以及如何运行每种分析。详见 Agent Skills;如需结构化的工具调用,可改用 MCP 服务器