ast-grep(sg)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),仅供参考

相关新闻

OpenClaw 跑 Agent 前,onboard 选模型供应商改走 TaoToken 通道行不行?

OpenClaw 跑 Agent 前,onboard 选模型供应商改走 TaoToken 通道行不行?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 15:53:59 阅读更多 →
jsoniter Fuzzy Mode 模糊类型转换全解析:Any 类型跨类型取值转换对照表与源码实现

jsoniter Fuzzy Mode 模糊类型转换全解析:Any 类型跨类型取值转换对照表与源码实现

容器运行时云原生CLI 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 点击查看 免费下载 jsoniter(github.com/json-iterator/go)是一个与 Go 标准库 e…

2026/9/21 15:53:59 阅读更多 →
中职中医康复专业现代化实训室建设方案

中职中医康复专业现代化实训室建设方案

1. 项目背景与核心需求中职中医康复专业作为培养基层康复技术人才的重要阵地,其实训室建设直接关系到学生的实操能力培养质量。传统实训室往往存在设备陈旧、功能单一、与临床脱节等问题,而现代康复医学的发展又对人才提出了更高要求。这个建设方案的核心…

2026/9/21 15:53:59 阅读更多 →

最新新闻

淘宝排名靠前技巧揭秘:3个源码级优化点,面试必问的底层逻辑

淘宝排名靠前技巧揭秘:3个源码级优化点,面试必问的底层逻辑

淘宝排名靠前技巧揭秘:3个源码级优化点,面试必问的底层逻辑 官方文档堆砌术语,读完还是不会用?这行混久了都知道,真正的硬核知识往往藏在底层实现里。今天不扯虚的,直接拆解淘宝搜索排名的核心逻辑。很多开发者在面试中被问倒,不是不懂业务,而是不懂…

2026/9/22 18:07:24 阅读更多 →
5分钟吃透Reveal源码,手写实现核心逻辑不踩坑

5分钟吃透Reveal源码,手写实现核心逻辑不踩坑

5分钟吃透Reveal源码,手写实现核心逻辑不踩坑 面试被问“Reveal.js 源码是怎么实现页面切换动画的”,你答得上来吗?别慌,很多后端转全栈的兄弟都栽在这。不是让你背代码,而是得懂那套 手写实现…

2026/9/22 18:07:24 阅读更多 →
3步手写实现quicksort,彻底告别排序崩溃焦虑

3步手写实现quicksort,彻底告别排序崩溃焦虑

3步手写实现quicksort,彻底告别排序崩溃焦虑 上周凌晨两点,线上接口突然超时,CPU飙到100%。翻日志一看,全是 java.lang.OutOfMemoryError 和递归栈溢出的 StackOverflowError…

2026/9/22 18:07:24 阅读更多 →
3招搞定爱在星光里性能瓶颈,图解原理告别StackTrace报错

3招搞定爱在星光里性能瓶颈,图解原理告别StackTrace报错

3招搞定爱在星光里性能瓶颈,图解原理告别StackTrace报错 凌晨两点,服务器报警响了,我抓起电脑一看,CPU飙到95%,日志里全是红色的StackTrace。这种报错一堆看不懂的情况,每个后端开发都经历过。别慌,今天咱们不聊虚的,直接…

2026/9/22 18:07:24 阅读更多 →
3CDAEMON乱码速查手册:从堆栈到源码的性能突围

3CDAEMON乱码速查手册:从堆栈到源码的性能突围

3CDAEMON乱码速查手册:从堆栈到源码的性能突围 面对满屏红色的 StackTrace,是不是感觉脑子瞬间宕机?尤其是当 3CDAEMON 相关的日志输出变成一堆 ? 或 �…

2026/9/22 18:07:24 阅读更多 →
CF人物模型底层逻辑拆解:版本升级API变更保姆级教程

CF人物模型底层逻辑拆解:版本升级API变更保姆级教程

CF人物模型底层逻辑拆解:版本升级API变更保姆级教程 版本升级后 API 全变了?别慌,CF人物系统的底层映射没变。 很多老哥在接手项目时,一跑代码就报错,参数对不上,对象引用丢失。 这篇保姆级教程,带你从内存堆栈角度,彻底搞懂 CF…

2026/9/22 18:06:23 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →