SuperAPI AI 工具集

footgun-scan

编程与开发

查看项目

更新于 10-17 16:17

技能介绍

用途

footgun-scan 用于扫描 Kotlin 或 Compose Multiplatform 的代码差异(diff),查找已知的“footgun”代码形态。它属于 maxrave-dev/kotlin-footguns 技能集,核心脚本为 scripts/scan.py。该工具匹配的是代码形态而非确定的 bug,每个命中都需要结合对应 trap 文件的判断条件来确认是否真正构成问题。

主要能力

scripts/scan.py 将 32 种模式与变更中新增的代码行进行匹配。每个模式都绑定到 kotlin-footguns 技能区中的一个 trap 文件。扫描结果分为两类:likely hit(疑似命中)和 look hit(需检查的命中)。疑似命中除非满足 trap 中列出的例外条件,否则默认视为问题;look hit 则是 trap 建议在信任代码前需要检查的位置。同一检测器在同一文件中的命中会被分组,可先对整组进行一次判断,再检查列出的各行是否存在例外。

使用方式

在用户的 git 仓库内运行,并将本技能的基础目录作为 <skill>:

  • python3 <skill>/scripts/scan.py:扫描工作区和索引中自 HEAD 以来新增的行(默认,适用于未提交的工作)。
  • python3 <skill>/scripts/scan.py --base origin/main:扫描当前分支自离开 main 以来新增的行(适用于分支或拉取请求)。
  • python3 <skill>/scripts/scan.py --all src/:扫描指定路径下的所有行(适用于审计,但噪声更多)。
  • 在 pre-commit 钩子或 CI 步骤中,可添加 --fail,使任何疑似命中时以退出码 1 失败。

根据请求选择扫描范围:未提交的工作使用默认模式;分支或拉取请求使用 --base 并指定目标分支;“审计代码库”使用 --all 并缩小到相关路径。

处理命中

对每个命中进行分诊:

  1. 阅读命中指向的 trap 文件(即 -> 路径)。
  2. 阅读命中周围的代码,根据 trap 自身的条件判断是否适用。疑似命中除非满足 trap 中列出的例外条件,否则视为错误;look hit 是 trap 建议在信任代码前检查的位置。
  3. 对每个确认的问题,报告 trap 提供的修复方法和其 Verifying 步骤。对已排除的命中,逐行列出原因,例如“column is NOT NULL”或“the fade goes to black”。

同一检测器在同一文件中的命中会被分组:先对整组进行一次分诊,然后检查列出的各行是否存在例外。

适用场景

  • 提交前检查代码变更。
  • 代码审查时检查分支或拉取请求的变更。
  • 对代码库进行审计。
  • 作为 pre-commit 钩子或 CI 步骤的一部分。

限制

该工具需要 python3 和 git 环境。如果无法运行扫描器,可以阅读 scripts/scan.py:其中的 DETECTORS 列表给出了每个模式、其消息和对应的 trap。然后使用 Grep 工具在变更文件中运行这些模式,并以相同方式进行分诊。