CLI 命令参考实战:sg run / scan / test / new / lsp 全解析)
人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载本指南是 OmO 项目中 vendored ast-grep 技能packages/shared-skills/skills/ast-grep/所附带的 CLI 速查参考文档的展开讲解完整覆盖sg run、sg scan、sg test、sg new、sg lsp、sg completions六组命令的用法、参数表与实战示例。读完本文你将能够绕过助手封装直接调用sg/ast-grep二进制完成结构化的代码搜索、批量重写与 YAML 规则扫描并理解--update-all与--json互斥陷阱、二进制解析链等在仓库源码中的底层实现。Linux 二进制命名提示在 Linux 上优先使用ast-grep全名而不是sg因为sg与util-linux提供的setgroups命令同名冲突。仓库中的 install.md 明确记录了这一点scripts/ast_grep_helper.py在 Linux 上检测到名为sg的可执行文件时会执行--version验证其是否为 ast-grep见 ast_grep_helper.py。sg run— 一次性搜索 / 重写sg run是默认子命令sg -p foo是sg run -p foo的简写形式。它把--pattern当作代码而不是正则字符串来解析并在目标语言的语法树AST上进行结构匹配。sg run [OPTIONS] --pattern PATTERN [PATHS...]参数总表Flag用途-p, --pattern PAST 模式pattern。在 shell 中务必使用单引号防止$VAR被展开。-r, --rewrite R替换模式。与-U配合使用才会真正写入文件。-l, --lang LANG目标语言。省略时根据文件扩展名推断。--selector KIND当模式存在歧义时只提取指定的 AST kind。--strictness Scst|smart默认|ast|relaxed|signature。--debug-query[F]打印解析后的模式。F 取值为pattern|ast|cst|sexp。--stdin从 stdin 读取代码而不是文件。必须显式设置--lang因为此时无法从扩展名推断。--globs G包含/排除 glob可重复前缀!表示排除。--follow跟随符号链接。--no-ignore T禁用某一类忽略规则hidden、dot、exclude、global、parent、vcs。-i, --interactive逐个确认匹配与重写。-U, --update-all不确认直接应用所有重写。与--json互斥静默。--json[S]输出 JSON。S 取pretty|stream|compactcompact 最适合管道处理。--color Wauto|always|ansi|never。--inspect G细节级别nothing|summary|entity。-A, -B, -C N匹配后 / 前 / 上下文行数。-j, --threads N线程数默认启发式0 自动。关于--strictness的具体含义patterns.md 有完整对照表cst要求包括逗号、括号等未命名节点全部一致smart默认忽略目标代码中模式未出现的未命名节点ast只看命名节点relaxed额外忽略注释signature只按节点种类匹配忽略文本与未命名节点适合表达匹配所有名为foo的函数无论参数如何。--update-all--json的陷阱这是脚本化使用中最容易踩的坑sg在设置--json时会静默忽略--update-all即返回 JSON 但不修改任何文件。要同时做到先预览再应用必须跑两遍# 第一遍预览 sg run -p foo() -r bar() --jsoncompact src/ # 第二遍应用 sg run -p foo() -r bar() --update-all src/仓库中的ast_grep_helper.py replace --apply子命令会自动完成这个两遍流程。查看源码 ast_grep_helper.pycmd_replace先以--jsoncompact跑 pass 1 收集匹配并展示 dry-run 预览DRY-RUN: would rewrite N match(es) across M file(s)只有传入--apply时才以--update-all跑 pass 2 真正写入文件APPLIED: rewrote N match(es) across M file(s)两遍之间没有任何--json标志混入。这与 SKILL.md 中Always run dry-run first when rewriting的硬性约定一致绝不对未先预览过的重写执行--update-all。实战示例# 基础搜索 sg run -p console.log($MSG) --lang ts src/ # 带上下文行搜索 sg run -p eval($CODE) --lang js -C 3 . # 重写JSON dry-run 预览 sg run -p console.log($MSG) -r logger.info($MSG) --jsoncompact --lang ts src/ # 重写直接应用 sg run -p console.log($MSG) -r logger.info($MSG) --update-all --lang ts src/ # 从 stdin 读入模式 echo console.log(x) | sg run -p console.log($MSG) --lang js --stdin # 限定具体文件集合 sg run -p foo() --lang ts --globs src/**/*.ts --globs !**/*.test.ts . # 调试返回 0 匹配的模式 sg run -p def $F($$$): --lang py --debug-queryast --stdin def foo(): pass注意最后一条def $F($$$):带尾随冒号在 Python 中无法作为完整的函数定义解析--debug-queryast会把解析器视角下的模式打印出来。关于模式必须是可解析的完整代码这一点patterns.md 给出了一张坏模式对照表function $NAME缺参数与函数体、class Foo:Python 类无主体、fn $NAMERust 缺签名等都需要补齐为function $NAME($$$) { $$$ }、class Foo($$$)、fn $NAME($$$) - $RET { $$$ }这样的完整形态。sg scan— YAML 规则扫描器sg scan在文件集合上运行一组 YAML 规则适用于项目级 lint 与 codemod。配置由sgconfig.yml描述ruleDirs、testConfigs、utilDirs等字段的完整说明见 sgconfig.mdsg会从当前目录向上查找最近的sgconfig.yml。sg scan [OPTIONS] [PATHS...]参数总表Flag用途-c, --config Csgconfig.yml的路径默认从 cwd 向上查找。-r, --rule F只运行单个规则文件。与--config互斥。--inline-rules Y直接传入 YAML 规则文本。多个规则用---分隔。--filter RE只运行id匹配该正则的规则。--include-metadata在 JSON 输出中包含规则的metadata字段。-U, --update-all自动应用fix:字段定义的修复。--report-style Srich|medium|short。--format Fgithub|sarif面向 CI 的输出格式。--error[ID]、--warning[ID]、--info[ID]、--hint[ID]、--off[ID]提升/降级规则的严重级别。-i, --interactive交互式逐个确认修复。--json[S]JSON 输出。实战示例# 运行 sgconfig.yml 中 ruleDirs 发现的所有规则 sg scan src/ # 运行单个规则文件无需 sgconfig.yml sg scan -r rules/no-console.yml src/ # 内联规则非常适合一次性任务和 CI sg scan --inline-rules id: no-todo language: TypeScript severity: warning rule: { pattern: TODO } src/ # 应用所有自动修复 sg scan -U src/ # CI 友好的 GitHub annotations sg scan --format github src/ # 面向安全扫描器的 SARIF sg scan --format sarif src/ sarif.json在仓库中sg scan是项目级 lint 的主力入口。助手脚本的 cmd_scan 直接透传-c、-r、--inline-rules、--report-style与-U参数即helper scan与裸sg scan的命令面一一对应。而 OmO 原生还注册了捆绑的 ast-grep MCP 服务器其中mcp__ast_grep_scan({ paths })就是sg scan的 MCP 等价物详见 SKILL.md 的 OmO native 一节。规则文件的 YAML 模式pattern、kind、regex、inside、has、all、any、not、matches、transform、fix请查阅 yaml-rules.md。sg test— 运行规则快照测试规则进入 CI 之前先用sg test验证它们的行为符合预期。测试机制是快照对比每个测试文件提供valid:/invalid:代码片段sg test运行规则、对比匹配位置与__snapshots__目录中的快照不一致即失败。sg test [OPTIONS]参数总表Flag用途-c, --config Csgconfig.yml路径。-t, --test-dir D测试目录。--snapshot-dir D快照目录默认__snapshots__。--skip-snapshot-tests只验证测试代码可解析不对比快照。-U, --update-all更新所有变更的快照。-f, --filter G按规则 id 的 glob 过滤测试用例。--include-off包含严重级别为off的规则。-i, --interactive逐个确认变更的快照。一个典型的测试目录布局test/ ├── no-console.yml # valid: 和 invalid: 代码片段 └── no-console-test.yml # 备选测试文件格式 __snapshots__/ └── no-console-snapshot.yml # 期望的匹配位置测试文件的写法字段说明见 sgconfig.md 的testConfigs一节id: no-console valid: - logger.info(hi) invalid: - console.log(hi)sg test首次运行配合-U生成快照此后任何改动都会在 diff 中暴露。助手脚本的cmd_testast_grep_helper.py透传-c、-t与-U因此helper test -U即可在 CI 中刷新快照。sg new— 项目脚手架sg new用于初始化 ast-grep 项目结构或生成新构件。sg new COMMAND [NAME] [OPTIONS]子命令创建内容projectsgconfig.yml、rules/、utils/、__snapshots__/目录树rule在第一个ruleDirs条目下创建新的 YAML 规则文件test在testConfigs[0].testDir下创建新的测试文件util在第一个utilDirs条目下创建新的工具规则# 在当前目录初始化新项目 sg new project --yes # 新建规则 sg new rule no-console --lang typescript # 新建测试 sg new test no-console --yes助手脚本的 cmd_new 把这组命令原样代理给sg newhelper new project/rule/test/util [NAME] [--lang LANG]。sg new project生成的sgconfig.yml骨架对应 sgconfig.md 中的最小布局ruleDirs必填testConfigs可选testDir/snapshotDirutilDirs可选其中utilDirs中的规则可以通过matches: id被项目内任意规则复用。sg lsp— 语言服务器sg lsp -c sgconfig.ymlsg lsp通过 stdin/stdout 说 LSP 协议。配置你的编辑器VS Code 扩展、Neovim 的nvim-lspconfig、Helix 的languages.toml启动该命令即可获得实时诊断。编辑器会在项目根目录自动检测sgconfig.yml——没有sgconfig.yml时 LSP 运行但不加载任何规则见 sgconfig.md 的 Editor integration 一节。sg completions— shell 补全sg completions bash ~/.bashrc sg completions zsh ${fpath[1]}/_sg sg completions fish ~/.config/fish/completions/sg.fish sg completions powershell $PROFILE实用一行命令# 统计每个文件中的匹配数 sg run -p console.log($_) --lang ts --jsoncompact . \ | jq -r .[].file | sort | uniq -c | sort -rn # 找出文件中所有唯一的 AST kind用于确定 kind 名称 sg run -p $_ --lang ts --debug-querycst src/foo.ts \ | grep -oE kind: [a-z_] | sort -u # 只在文件子集中重写 sg run -p foo() -r bar() --update-all --globs src/**/*.ts --globs !src/legacy/** . # 应用多条规则中 id 匹配特定模式的自动修复 sg scan --filter no- -U src/ # 在 pre-commit 中把 ast-grep 当作 linter 使用 sg scan --format github src/ || exit 1--jsoncompact的产物是匹配对象数组形如{ file, range: {start, end}, text, replacement?, lines, language, ... }输出契约详见 SKILL.md 的 Output discipline 一节配合jq可以完成统计、聚合、二次处理等一切管道化操作。助手脚本的parse_compact_jsonast_grep_helper.py甚至实现了对截断 JSON 输出的逐行抢救解析说明生产环境管道中这类输出并不罕见。在这份参考之上何时用 helper、何时用裸sgreferences/cli.md定位是helper 不够用时直接调sg的速查表。仓库实际给出的入口优先级是OmO 原生 MCP 工具mcp__ast_grep_search/mcp__ast_grep_rewrite/mcp__ast_grep_scan无需安装二进制、无需 PATH首次调用时自动激活见 SKILL.md是单次查询的最快路径scripts/ast_grep_helper.py单文件 Python 3 stdlib 封装749 行无第三方依赖在调用sg之前做离线模式校验validate子命令检测\w、.*、字符类、字面|等正则误用以及 Python 尾随冒号、JS/Go/Rust 缺函数体等语言特定错误并沿OMO_AST_GREP_SG_PATH→ OmO runtime 目录 → skill 内缓存 → PATH → Homebrew 的优先级解析二进制resolve_binary裸sg即本文的主体当 helper 的主观意见不够用时获得完全控制权。工具选择上可以参考 SKILL.md 的决策树结构形态函数形状、调用、类、import、控制流→ ast-grep文本形态正则、字符类、文件名、注释内容→rg/grep语义问题变量引用、是否会抛异常→ LSP / 类型系统工具。判断标准只有一句答案取决于语言的语法树还是仅仅取决于文件的字节参见references/yaml-rules.md — 规则模式pattern、kind、regex、inside、has、all、any、not、matches、transform、fixreferences/sgconfig.md — 项目配置ruleDirs、testConfigs、utilDirs、languageGlobs、customLanguages、languageInjectionsreferences/patterns.md — 元变量$VAR、$$$、$$$VAR、$_与模式解析规则references/pitfalls.md — 失败模式现场指南references/install.md — 各操作系统安装方式与手动回退SKILL.md — 面向 Agent 的完整技能说明与决策树scripts/ast_grep_helper.py — 封装脚本搜索 / 两遍重写 / 扫描 / 离线校验 / 二进制解析tests/smoke.sh 与 tests/smoke.ps1 — POSIX / PowerShell 自测脚本赞分享人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载相关推荐oh-my-openagent 中 ast-grepsg的安装完全指南一键脚本、多平台命令与故障排查oh my openagent 中 ast grepsg的安装完全指南一键脚本、多平台命令与故障排查 本文以 oh my openagent 仓库内 as人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排探索代码结构的革命ast-grep(sg)——你的代码搜索与重构利器探索代码结构的革命ast grep sg ——你的代码搜索与重构利器 THE 0TH POSITION OF THE ORIGINAL IMAGE ast g开发工具CLI静态分析Lint代码质量深入理解 sgconfig.yml为 ast-grepsg配置项目级规则扫描与测试深入理解 sgconfig.yml为 ast grepsg配置项目级规则扫描与测试 sgconfig.yml 是 ast grep sg 项目的总开人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排上一篇突破Android下载性能瓶颈FileDownloadRandomAccessFile实现原理与优化实践下一篇突破300ms壁垒EasyDarwin低延迟优化实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考