SuperAPI AI 工具集

structural-search

编程与开发

查看项目

更新于 10-13 17:09

技能介绍

用途

Structural Search 用于按代码的抽象语法树(AST)结构进行搜索,能够发现正则表达式无法可靠匹配的语义模式。它适合以下场景:查找函数或方法的所有使用位置、定位特定代码模式(如 hooks、API 调用)、为大规模重构做准备、在正则匹配会产生误报时使用、检测反模式与安全问题、创建自定义 lint 规则。

主要能力

工具基于 ast-grep,命令形式为 sg -p 'pattern',用于进行 AST 感知的代码搜索。

模式语法包括三种:

  • $NAME 匹配具名标识符,示例 function $NAME() {}
  • $_ 匹配任意单个节点,示例 console.log($_)
  • $$$ 匹配零个或多个节点,示例 function $_($$$) {}

资料中列出十个常用模式示例:

  1. 查找 console.log 调用:sg -p 'console.log($_)'
  2. 查找 React hooks:sg -p 'const [$_, $_] = useState($_)';sg -p 'useEffect($_, [$$$])'
  3. 查找函数定义:sg -p 'function $NAME($$$) { $$$ }';sg -p 'def $NAME($$$): $$$' --lang python
  4. 查找导入:sg -p 'import $_ from "$_"';sg -p 'from $_ import $_' --lang python
  5. 查找异步模式:sg -p 'await $_';sg -p 'async function $NAME($$$) { $$$ }'
  6. 查找错误处理:sg -p 'try { $$$ } catch ($_) { $$$ }';sg -p 'if err != nil { $$$ }' --lang go
  7. 查找潜在问题:sg -p '$_ == $_'(使用 == 而非 ===)、sg -p 'eval($_)'(安全风险)、sg -p '$_.innerHTML = $_'(XSS 途径)
  8. 预览重构:sg -p 'console.log($_)' -r 'logger.info($_)'
  9. 应用重构:sg -p 'var $NAME = $_' -r 'const $NAME = $_' --rewrite
  10. 指定语言搜索:sg -p 'pattern' --lang typescript

使用方式

快速参考命令:

  • 查找模式:sg -p 'pattern'
  • 指定语言:sg -p 'pattern' --lang python
  • 替换(预览):sg -p 'old' -r 'new'
  • 替换(应用):sg -p 'old' -r 'new' --rewrite
  • 显示上下文:sg -p 'pattern' -A 3
  • JSON 输出:sg -p 'pattern' --json
  • 仅显示文件列表:sg -p 'pattern' -l
  • 统计匹配数量:sg -p 'pattern' --count
  • 运行 YAML 规则:sg scan

附加资源

如需完整模式,可加载以下文件:

  • ./references/js-ts-patterns.md:JavaScript/TypeScript 模式
  • ./references/python-patterns.md:Python 模式
  • ./references/go-rust-patterns.md:Go 和 Rust 模式
  • ./references/security-patterns.md:安全漏洞检测
  • ./references/advanced-usage.md:YAML 规则与工具集成
  • ./assets/rule-template.yaml:自定义规则的起始模板

适用场景与限制

适用于跨语言的语义代码搜索、重构准备、反模式与安全问题检测、自定义 lint 规则创建。关于安装方式、收费方式、支持语言的完整列表、平台兼容性等事实,资料中暂未提供。