【免费下载链接】skylos
Open source local-first PR scanner that finds dead code, security bugs, secrets, quality regressions, and AI-code mistakes before merge. For first timers refer to https://duriantaco.github.io/skylos/repo-map/
Skylos 是一款开源的本地优先 PR 代码扫描器,能在合并前发现死代码、安全漏洞、泄露密钥、质量回归和 AI 代码错误。这篇源码阅读指南带你从零看懂 Skylos 代码扫描器的三大核心模块:analyzer(分析引擎)、visitors(AST 访问器)与 rules(规则引擎),即使是 Python 新手也能快速上手源码阅读。
🚀 第一步:获取 Skylos 源码仓库
打开终端,执行以下命令克隆仓库并浏览源码:
git clone https://gitcode.com/gh_mirrors/sk/skylos.git cd skylos建议配合官方仓库地图学习:[docs/repo-map/](https://link.gitcode.com/i/1d5e3a78d4ba50a45b9678091ba03407)下有可视化仓库地图,帮助你在开始阅读前先建立全局印象。
🏗️ 整体架构一眼看懂
Skylos 的扫描流程可以概括为一条清晰的数据流水线:
| 模块 | 路径 | 角色比喻 | 职责 |
|---|---|---|---|
| analyzer | skylos/analyzer.py | 大脑 | 调度扫描、发现文件、汇总结果 |
| visitors | skylos/visitors/ | 眼睛 | 遍历语法树,收集定义与引用 |
| rules | skylos/rules/ | 法官 | 执行检查规则,产出具体发现 |
三者分工明确:analyzer负责"扫描什么文件",visitors负责"看懂代码结构",rules负责"判定哪里有问题"。
🧠 analyzer 模块:扫描调度的大脑
analyzer 的核心是一个 6600 多行的主文件 skylos/analyzer.py,重点看三处入口:
Skylos主类(skylos/analyzer.py) 整个扫描器的状态容器,负责文件发现、模块名解析(_module方法把文件路径转成pkg.mod形式的模块名)、死代码判定等。Skylos.analyze()方法(skylos/analyzer.py) 一次完整扫描的总入口,按语言分派任务:Python 走 AST 分析,Go、TypeScript、PHP 等语言各有对应的处理分支。analyze()/proc_file()顶层函数(skylos/analyzer.py、skylos/analyzer.py) CLI 与外部 API 调用的门面。proc_file()把任务交给 skylos/analysis/file_worker.py 中的process_file()(skylos/analysis/file_worker.py),由它决定走 Python 解析器还是非 Python 扫描分支。
新手阅读建议:从analyze()的函数签名看起,每个enable_*参数对应一类检测能力(enable_secrets、enable_danger、enable_quality、enable_ai_defects),这就是你后面会遇到的规则分类。
👀 visitors 模块:遍历语法树的"眼睛"
visitors 模块基于 Python 标准库的ast.NodeVisitor实现,核心文件:
- 基类
Visitor:skylos/visitors/base.py,实现了visit_Import、visit_FunctionDef、visit_If等几十个 AST 节点处理器,把代码中的函数、类、变量收集为定义(Definition)(skylos/visitors/base.py),并把每次使用记录为引用(ref)。死代码检测的本质就是:定义没有被任何引用。 Definition数据类(skylos/visitors/base.py):保存一个符号的名字、位置、文件、模块名,是死代码与 API 幻觉检测的基础数据结构。- 场景增强访问器:skylos/visitors/test_aware.py(测试代码感知)、skylos/visitors/framework_aware.py(Django、Flask 等框架约定感知),避免把框架回调误判为死代码。
- 多语言支持:skylos/visitors/languages/ 下按语言分目录,覆盖 TypeScript、Go、Java、PHP(含 Drupal)、Rust、C++、Kotlin、Shell 等。
下面这张 VS Code 中的安全扫描结果截图,正是 visitors 遍历语法树后、规则引擎判定问题的最终呈现:
⚖️ rules 模块:产出发现结果的规则引擎
所有规则共享一个极简的抽象基类(skylos/rules/base.py),只有三个要素:rule_id(规则编号,如 SKY-D203)、name(规则名称)、visit_node()(在 AST 节点上执行检查)。规则由 skylos/core/linter.py 中的LinterVisitor驱动——它按 AST 节点类型把规则分桶,逐节点调用,是"眼睛"与"法官"之间的传令官。
规则按职责分目录组织:
| 规则目录 | 代表文件 | 检测什么 |
|---|---|---|
| skylos/rules/quality/ | complexity.py、clones.py | 圈复杂度、认知复杂度、代码克隆、God Class |
| skylos/rules/danger/ | calls.py、taint.py | 危险调用、SQL 注入、命令注入等安全漏洞 |
| skylos/rules/secrets.py | — | 硬编码密钥、凭证泄露 |
| skylos/rules/ai_defect/ | phantom_refs.py | AI 生成代码的"幻觉":不存在的 API、幽灵依赖 |
| skylos/rules/sca/ | vulnerability_scanner.py | 依赖漏洞(SARIF、OSV 元数据) |
所有规则的登记表在 skylos/rules/catalog.py,get_rule_catalog()函数返回完整规则清单——建议把它当作 rules 模块的目录页来读。
下图展示了扫描结果在 VS Code 安全面板中的最终形态:Security 与 Quality 两类发现被分类列出:
🔗 三大模块如何协同工作
一次完整扫描的协作链路:
- analyzer的
analyze()发现项目中的全部源文件(skylos/core/file_discovery.py); - 对每个文件调用
process_file(),visitors构建语法树,收集 defs/refs 并计算死代码; - rules中的
LinterVisitor遍历同一棵树,每个规则通过visit_node()输出发现(finding); - analyzer汇总所有发现,按置信度(HIGH / MEDIUM / LLM only)分级,交给报告层输出到终端、SARIF 或 CI 注释。
🗺️ 新手源码阅读路线
- 第 1 天:读 skylos/rules/base.py(不足 30 行)+ skylos/rules/quality/class_size.py,理解一条规则的完整写法;
- 第 2 天:读 skylos/visitors/base.py 的
visit_FunctionDef与visit_Import,理解定义与引用如何被收集; - 第 3 天:从 skylos/analyzer.py 的
analyze()顶层函数顺藤摸瓜,跑通一次完整扫描流程; - 配套资料:docs/ 下有 docs/ai-code-verification.md、docs/agent-verification.md 等专题文档,测试用例(test/ 目录 400+ 个)是理解每条规则预期行为的最佳教材。
总结
Skylos 源码的三大模块各司其职:analyzer是调度大脑,visitors是收集证据的眼睛,rules是产出结论的法官。理解了"发现文件 → 构建语法树 → 收集定义引用 → 规则判定 → 汇总报告"这条主线,再深入任何子模块(多语言、AI 缺陷检测、SARIF 报告)都会事半功倍。
【免费下载链接】skylos
Open source local-first PR scanner that finds dead code, security bugs, secrets, quality regressions, and AI-code mistakes before merge. For first timers refer to https://duriantaco.github.io/skylos/repo-map/
相关推荐
File Viewer社区贡献指南:如何参与开源项目开发
File Viewer社区贡献指南:如何参与开源项目开发 欢迎来到File Viewer开源社区!🚀 这是一个面向企业后台、内网和私有化系统的纯前端文件预览组
前端UI组件V2Fun终极指南:打造你的专属V2EX浏览体验
V2Fun终极指南:打造你的专属V2EX浏览体验 V2Fun是一款优秀的V2EX第三方客户端,原生App设计,支持夜间模式,让你在手机上获得完美的V2EX社区体
Image-Super-Resolution-via-Iterative-Refinement源码解读:核心模块深度剖析
Image Super Resolution via Iterative Refinement源码解读:核心模块深度剖析 Image Super Resolut
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考