DevTrendsDeveloper trends
Accent color

aeroxy /

ast-bro

v2.0 自荐: 一句话: AI 编程助手的"代码骨架"工具包,只需一个命令就能看清一个包的公共 API、两个文件间的依赖关系、整个仓库的循环引用、以及按语义找到相似代码段。现在还能用 metavariable 做结构化搜索和代码重写。15 个 MCP 工具,1 个二进制文件。支持 13 种语言。 v2.2.0 重大变更:ast-outline 更名为 ast-bro 项目已从 ast-outline 更名为 ast-bro。原因是功能…

DTLifestyle & entertainmentDTSoftware developmentDTAgent extensionDTVertical agentDTCLIDTMCP serviceDTLinuxDTmacOSDTWindowsDTClaude Code

Product images

About

v2.0 自荐: 一句话: AI 编程助手的"代码骨架"工具包,只需一个命令就能看清一个包的公共 API、两个文件间的依赖关系、整个仓库的循环引用、以及按语义找到相似代码段。现在还能用 metavariable 做结构化搜索和代码重写。15 个 MCP 工具,1 个二进制文件。支持 13 种语言。 v2.2.0 重大变更:ast-outline 更名为 ast-bro 项目已从 ast-outline 更名为 ast-bro。原因是功能早已超出"outline"的范畴,现在涵盖依赖图、调用图、语义搜索、结构化搜索/重写引擎。旧名字还跟一个 vscode 插件和一个 npm 包撞名。 升级很简单:跑一次 ast-bro 命令,缓存目录(.ast-outline/ → .ast-bro/)、ignore 文件(.ast-outline-ignore → .ast-bro-ignore)、mcp 配置条目、模型缓存都会自动迁移。旧的 ast-outline 二进制仍以代理形式保留,现有脚本不受影响。 新增 sb 短别名,少打几个字。 🚀 从 v2.0 到现在的变化 1. run 子命令(v2.2.0 新增)—— AST 感知的结构化搜索和代码重写 基于 ast-grep-core,支持 metavariable 模式匹配: bash 搜索所有函数调用 ast-bro run -p '$FUNC($$$)' -l rust 重写 foo -> bar(先看 diff) ast-bro run -p 'foo($A)' -r 'bar($A)' -l py 确认无误后写入磁盘 ast-bro run -p 'foo($A)' -r 'bar($A)' --write MCP 工具中同样可用,是第 15 个 MCP 工具。搜索上限 1000 条匹配,重写上限 50 个文件(dry-run + write 均受限制)。指定 --lang 时预编译模式,跨文件复用,性能更好。 2. 库提取与代理二进制 核心逻辑提取到 src/lib.rs(1355 行),从 src/main.rs(3 行)调用。这使得下游项目可以直接依赖 ast-bro 库,也为代理二进制铺路。 新增两个代理二进制: ast-outline — 向后兼容,自动转发到 ast-bro sb — 短别名,少打几个字 两者都先在自身目录查找 ast-bro(适配 ./target/release/),找不到再走 PATH。Windows 上自动处理 .exe 后缀。 3. Hook 重构 Claude Code 和 Gemini 的 PreToolUse hook 提取了共享 I/O 模块(src/hook/io.rs),消除了两个 shim 之间的重复代码。emit 函数现在正确处理序列化和写入错误,不再 unwrap 或静默忽略。 Hook 的文件类型判断从硬编码扩展名列表改为 SupportLang::frompath,自动与适配器注册表同步。 4. 安全性改进 原子写入 — run --write 使用 crash-safe 的原子替换:写临时文件、fsync、复制权限、rename 覆盖原文件。Unix 上还会 fsync 父目录,确保 rename 的目录条目在崩溃后存活。符号链接会被解析到真实文件,不会被普通文件替换。 文件大小上限 — CLI 和 MCP 的 run 都拒绝读取超过 5 MiB 的文件,防止 minified bundle 或数据文件撑爆内存。 MCP 安全上限 — 搜索上限 1000 条匹配,重写上限 50 个文件(dry-run + write 均受限制)。 模式校验 — 无效的 --lang 或 pattern 在 MCP 和 CLI 中都会立即报错,不会静默返回空结果。 5. 其他改进 CLI run 提示 — 当零文件被处理时(glob/--lang/路径配置错误),stderr 输出提示信息 ignore 迁移保护 — migratelegacyignorefile 在传入文件路径(而非目录)时跳过迁移尝试 搜索 schema — CLI 和 MCP 的 run JSON 输出都包含 schema: "ast-bro.run.v1" 字段 Hook 硬化 — emitpassthrough 和 emitsubstitute 不再 unwrap serdejson,序列化失败时返回非零退出码 📦 安装 bash Homebrew (macOS) brew install aeroxy/tap/ast-bro Cargo cargo install ast-bro npm npm install -g ast-bro pip pip install ast-bro Nix nix run aeroxy/ast-bro 🧠 典型使用场景 bash 1. 看包的真正公共 API(解析所有重导出链) ast-bro surface . --tree 2. 重构前看波及范围 ast-bro reverse-deps src/auth.rs 3. 查找循环引用 ast-bro cycles 4. 语义搜索(BM25 + 密集向量) ast-bro search "how does login work" 5. 只看结构不看函数体 ast-bro map src/game.rs 6. 结构化搜索和重写 ast-bro run -p 'console.log($$$)' -l ts 7. 配合 AI 编码工具 ast-bro install --all 🙏 致谢 基于 ast-grep(@HerringtonDarkholme)和 tree-sitter 语义模型:minishlab/potion-code-16M 欢迎 Star、Issue、PR。让 LLM 理解代码时更聪明,而不是更暴力。

Discovery history

  1. 阮一峰周刊·用户投稿

    May 23, 2026 – Jun 13, 2026 · 2 observations

Discuss this product