首页/新闻资讯/正文详情

ccusage 仓库中使用 ast-grep 进行结构化代码检索:从 `run --pattern` 到关系规则与 `--debug-query`

发布时间:2026/9/21 2:11:45 来源:云帆数科 栏目:资讯中心
ccusage 仓库中使用 ast-grep 进行结构化代码检索:从 `run --pattern` 到关系规则与 `--debug-query`
ccusage 仓库中使用 ast-grep 进行结构化代码检索从run --pattern到关系规则与--debug-query【免费下载链接】ccusagenpx ccusage项目地址: https://gitcode.com/gh_mirrors/cc/ccusage本篇指南以 ccusage 仓库内的.agents/skills/ast-grep/SKILL.md技能文档为主体讲解在 Rust 与 TypeScript 混合的大型代码库中如何用 ast-grep 做语法结构层面的代码搜索——例如查找带特定参数的宏调用、匹配某个 match 分支的形态、或定位挂在某个 item 上的属性。读完本文你将掌握 ast-grep 的完整工作流如何从run --pattern起步、何时改用内联关系规则、stopBy: end的陷阱以及用--debug-query排查解析失败的技巧。何时该用 ast-grep结构化搜索与rg的分工ccusage 仓库的根文档 AGENTS.md 对工具定位有一句话概括ast-grep负责 structural searches in Rust or TypeScriptRust 或 TypeScript 的结构化搜索。这正是 SKILL.md 给出的选择判据当一次搜索依赖语法结构时就该拿起 ast-grep——典型场景包括查找带特定参数的宏调用例如某个println!、format!或自定义宏的调用形态匹配某种 match 分支的形状比如「只有单一表达式、没有 guard 的分支」定位挂在某个 item 上的属性attribute如#[derive(...)]、#[cfg(...)]。反过来如果只是找一段普通文本ripgreprg更快也更合适而重复代码的检测不属于 ast-grep 的职责由similarity-rs负责——这一点在 reduce-similarities 技能文档 中明确写明TypeScript 侧的重复代码检测归属typescript与ast-grep两个技能Rust 侧的重复函数、impl 方法、并行 struct/enum 定义则走similarity-rs。三者的边界可以总结为场景首选工具纯文本、无语法依赖的搜索rg依赖语法结构宏参数、match 分支形态、属性ast-grep重复代码检测similarity-rsRust/typescriptast-grepTS环境准备从 Nix dev shell 获得 ast-grepccusage 的开发环境统一由 Nix dev shell 提供。打开 nix/dev-shell.nix 的buildInputs约第 27–69 行可以看到工具链中同时并列着similarity、ast-grep、ripgrep、fd、fzf、delta、just等开发工具——ast-grep就来自这里。因此按 SKILL.md 的说明使用时有两条路径如果 shell 已经通过direnv激活直接调用ast-grep或sg即可如果当前 shell 尚未激活 dev shell需要给一次性命令加前缀direnv exec . ast-grep --help仓库内没有sgconfig.yml关系规则走--inline-rulesast-grep通常支持通过项目级配置文件sgconfig.yml声明规则集rule set但 ccusage 仓库刻意不放置这份文件。按照 SKILL.md 的约定所有关系型relational规则一律通过以下两种方式之一传递scan --inline-rules——把规则以 YAML/JSON 形式内联写在命令行中一个用完即弃的临时--rule文件——适合规则较长、内联不便时用完即删不进入仓库。这样做的好处是仓库根目录保持干净规则的生命周期与一次检索任务绑定不会出现「项目规则集」与临时需求互相污染的情况。限定搜索范围rust、apps、docs、nixccusage 是一个多语言 monorepo生产 CLI 以 Rust 为主见 AGENTS.md 的 Repository Shape 一节apps/ccusage是 npm 发布面bin 启动器、schema 产物、打包与基准脚本另有docs文档站和nix构建配置。因此 SKILL.md 给出的经验是把搜索范围限定到rust、apps、docs或nix之一可以让大规模搜索保持快速# 只搜 Rust 侧 direnv exec . ast-grep run --pattern match $X { ... } rust # 只搜 TypeScript/npm 侧 direnv exec . ast-grep run --pattern console.$METHOD($ARGS) apps即使不做范围限定、直接在整个仓库根目录搜索ast-grep 也会自动跳过被 gitignore 忽略的目录树所以裸根搜索不会把node_modules、构建产物等卷进来。核心工作流先run --pattern不足再放宽SKILL.md 给出的起点非常明确先用run --pattern起步只有在匹配不足under-matches时才逐步放宽。这是与「一上来就写复杂关系规则」相反的做法——先用最直接的语法模式确认 AST 形态再决定是否需要关系约束。例如在 ccusage 的 rust/crates/ccusage-core/src/agent_report.rs 中就有大量按kind分支的match语句约第 51、69 行cost.rs 中也有按mode分支的 match约第 39 行。如果想找出「所有对kind变量做 match 的位置」可以先从最宽松的形态开始ast-grep run --pattern match $X { ... } rust/crates/ccusage-core/src确认能命中后再决定是否收紧为具体的变量名、分支数量或 guard 条件。如果宽松模式命中过多、精确模式又完全命中不了问题往往出在预期形态与实际 AST 不一致——这时就该进入调试环节。关系规则的陷阱务必给stopBy: end当单个 pattern 不足以表达查询时需要用关系规则relational rule描述「某个子节点相对于父节点/兄弟节点的位置关系」。这里有一个必须记住的坑SKILL.md 专门强调关系规则要给定stopBy: end否则它们会在该方向上的第一个节点处停下。也就是说如果你用follows、precedes、inside、has等关系字段时忘记指定stopBy匹配会在遇到沿途第一个节点时就终止导致结果集偏离预期。正确写法示例# scan --inline-rules 或 --rule 文件中的关系规则片段 rule: pattern: $BODY inside: kind: match_arm stopBy: endstopBy: end表示一直走到该方向的尽头才停止而不是停在第一个节点上。模式不匹配预期形态用--debug-query导出解析结果结构化搜索最常见的挫败感是pattern 看起来没问题但就是匹配不到。此时不要靠猜SKILL.md 给出的手段是用--debug-query把解析结果 dump 出来直接查看你的 pattern 被解析成了什么 AST 形态ast-grep run --pattern match $X { ... } --debug-query对照 dump 出的节点树就能定位到是 meta 变量$X的绑定范围不对、省略号...的位置不对还是对某个语法结构的形态理解有误。--debug-query本质上是「以解析器视角看问题」比反复肉眼对比源码更高效。在 ccusage 中的典型实战场景结合技能文档 frontmatter 的说明与仓库现状ast-grep 在 ccusage 中的典型任务包括查找 Rust 语法模式在rust/crates核心 crate与rust/adapters各 Agent 适配器中检索特定宏调用、match 分支形态或属性例如定位所有对kind/mode/status做 match 的分发逻辑可参考 agent_report.rs、cost.rs。查找 TypeScript 语法模式在apps/ccusage的src/cli.js及各类脚本中做结构化检索。验证迁移validating migrations在批量重构如 match 结构改造、宏替换、属性增删之后用 AST 级搜索确认「不存在遗漏的旧形态」比文本级rg更可靠。编写 AST 级搜索命令把可复用的检索命令沉淀进技能或文档供后续任务直接调用。无论哪种场景都遵循同一套纪律限定范围rust/apps/docs/nix、从run --pattern起步、关系规则带stopBy: end、不匹配就--debug-query。这套方法论来自 SKILL.md是仓库内 Agent 协作时的事实标准。【免费下载链接】ccusagenpx ccusage项目地址: https://gitcode.com/gh_mirrors/cc/ccusage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

用 FLOW Leverage 阶段 Backlink Competition Prompt 构建证据导向的外链竞争分析交付物
用 FLOW Leverage 阶段 Backlink Competition Prompt 构建证据导向的外链竞争分析交付物

用 FLOW Leverage 阶段 Backlink Competition Prompt 构建证据导向的外链竞争分析交付物 【免费下载链接】claude-seo Universal SEO skill for Claude Code. 25 sub-skills 18 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, backlinks, local SEO, maps int… · 2026/9/21 2:11:45

Cesium卫星轨迹可视化:从TLE到SGP4的完整实现与排错指南
Cesium卫星轨迹可视化:从TLE到SGP4的完整实现与排错指南

/* 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 2:11:45

RK3588上编译eglinfo:Mali GPU调试与Meson构建避坑指南
RK3588上编译eglinfo:Mali GPU调试与Meson构建避坑指南

/* 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 2:10:45

url_launcher_macos 深度解析:Flutter 官方 macOS URL 启动插件的实现原理与演进史
url_launcher_macos 深度解析:Flutter 官方 macOS URL 启动插件的实现原理与演进史

移动开发跨平台 【免费下载链接】plugins Plugins for Flutter maintained by the Flutter team 项目地址: https://gitcode.com/gh_mirrors/pl/plugins 点击查看 免费下载 导读 url_launcher_macos 是 Flutter 官方维护的 url_launcher 插件在 macOS 平台上的官方… · 2026/9/21 2:51:53

STM32 HardFault深度解析:寄存器快照与堆栈回溯实战指南
STM32 HardFault深度解析:寄存器快照与堆栈回溯实战指南

/* 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 2:51:53

file_selector_ios:Flutter 官方 iOS 文件选择器插件的架构、UTI 过滤与实战指南
file_selector_ios:Flutter 官方 iOS 文件选择器插件的架构、UTI 过滤与实战指南

移动开发跨平台 【免费下载链接】plugins Plugins for Flutter maintained by the Flutter team 项目地址: https://gitcode.com/gh_mirrors/pl/plugins 点击查看 免费下载 导读 本文围绕 Flutter 团队维护的联邦插件体系中的 iOS 端实现 file_selector_ios 展开&… · 2026/9/21 2:51:53

多模块Maven项目JaCoCo覆盖率聚合的5类典型坑与排查指南
多模块Maven项目JaCoCo覆盖率聚合的5类典型坑与排查指南

/* 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 2:51:53

用 gatsby-plugin-schema-snapshot 锁定 Gatsby GraphQL Schema:快照生成、类型重建与确定性构建指南
用 gatsby-plugin-schema-snapshot 锁定 Gatsby GraphQL Schema:快照生成、类型重建与确定性构建指南

前端静态站点Web框架 【免费下载链接】gatsby React-based framework with performance, scalability, and security built in. 项目地址: https://gitcode.com/gh_mirrors/ga/gatsby 点击查看 免费下载 gatsby-plugin-schema-snapshot 是 Gatsby 官方提供的 schem… · 2026/9/21 2:51:53

研发管理系统选型指南:跨部门协同流程梳理与POC验收清单
研发管理系统选型指南:跨部门协同流程梳理与POC验收清单

/* 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 2:50:53

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

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

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

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

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

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

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 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 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码