← 返回日报
🌐 机器翻译 · DeepSeek · GitHub

tirth8205 code-review-graph


好的,这是您要求的英文文章的中文翻译,已按照规范保留原文结构、代码块和技术术语。


tirth8205 / code-review-graph

code-review-graph

停止浪费 Token。开始更智能地审查。 English | 简体中文 | 日本語 | 한국어 | हिन्दी

使用 · 命令 · 常见问题 · 故障排除 · GitHub Action · 复现基准测试 · 路线图

AI 编码工具在审查任务中可能会反复读取代码库中的大部分内容。code-review-graph 解决了这个问题。它使用 Tree-sitter 构建代码的结构化地图,增量跟踪变更,并通过 MCP 为您的 AI 助手提供精确的上下文,使其只读取关键内容。

快速开始

pip install code-review-graph
# 或者:pipx install code-review-graph
code-review-graph install # 自动检测并配置所有支持的平台
code-review-graph build   # 解析您的代码库

一个命令即可完成所有设置。install 会检测您拥有的 AI 编码工具,为每个工具编写正确的 MCP 配置,在支持的平台上安装原生钩子/技能,并将图感知指令注入到您的平台规则中。它会自动检测您是通过 uvx 还是 pip/pipx 安装的,并生成正确的配置。安装后请重启您的编辑器/工具。

要针对特定平台:

code-review-graph install --platform codex        # 仅配置 Codex
code-review-graph install --platform cursor       # 仅配置 Cursor
code-review-graph install --platform claude-code  # 仅配置 Claude Code
code-review-graph install --platform gemini-cli   # 仅配置 Gemini CLI
code-review-graph install --platform kiro         # 仅配置 Kiro
code-review-graph install --platform copilot      # 仅配置 GitHub Copilot (VS Code)
code-review-graph install --platform copilot-cli  # 仅配置 GitHub Copilot CLI
code-review-graph install --platform codebuddy    # 仅配置 CodeBuddy

代码要求:Python 3.10+。为获得最佳体验,请安装 uv(MCP 配置将优先使用 uvx,否则会直接回退到 code-review-graph 命令)。

要从 Git 或 SVN 项目中移除 CRG,请在其工作树中的任意位置使用对称的 uninstall 命令。目标路径会被规范化为工作树根目录,非仓库目录将被拒绝。它只会移除 CRG 拥有的文件和条目;不相关的 MCP 服务器、钩子、技能和 JSONC 注释将保持不变。共享配置更改使用原子替换,因此写入失败时原始文件保持不变。

code-review-graph uninstall --dry-run       # 预览所有操作;不执行任何写入
code-review-graph uninstall                 # 预览,请求确认,然后执行
code-review-graph uninstall --yes           # 直接执行,无需提示
code-review-graph uninstall --all-repos     # 同时清理所有已注册的仓库
code-review-graph uninstall --keep-data     # 移除集成但保留图数据库
code-review-graph uninstall --keep-user-configs --repo . # 仅清理此项目

然后打开您的项目,向您的 AI 助手提问:

为此项目构建代码审查图

对于一个包含 500 个文件的项目,初始构建大约需要 10 秒。之后,监视模式和受支持的钩子可以自动保持图更新。

工作原理

您的仓库被解析为带有 Tree-sitter 的 AST,存储为节点(函数、类、导入)和边(调用、继承、测试覆盖)的图,然后在审查时进行查询,以计算出您的 AI 助手需要读取的最小文件集。

爆炸半径分析

当文件发生变更时,图会追踪所有可能受影响的调用者、依赖项和测试。这就是变更的“爆炸半径”。您的 AI 只读取这些文件,而不是扫描整个项目。

增量更新 < 2 秒

当启用钩子或监视模式时,文件保存和受支持的提交钩子会触发增量更新。图会对变更的文件进行差异比较,通过 SHA-256 哈希检查找到它们的依赖项,并仅重新解析发生变更的部分。一个包含 2,900 个文件的项目在 2 秒内即可完成重新索引。

解决单体仓库问题

大型单体仓库是 Token 浪费最严重的地方。图可以穿透噪音——从审查上下文中排除 27,700+ 个文件,实际只读取约 15 个文件。

广泛的语言支持 + Jupyter 笔记本

解析器支持涵盖当前解析器表面的函数、类、导入、调用点、继承和测试检测,在可用时使用 Tree-sitter,必要时使用有针对性的回退方案。当前支持的语言包括:Python、JavaScript/TypeScript/TSX、Go、Rust、Java、C/C++、C#、VB.NET、Ruby、Kotlin、Swift、PHP、Scala、Solidity、Dart、R、Perl、Lua/Luau、Objective-C、Shell 脚本、Elixir、Zig、PowerShell、Julia、ReScript、GDScript、Nix、Verilog/SystemVerilog、SQL、Terraform/OpenTofu 结构(.tf;通用 .hcl 文件被识别为文件节点)、Ansible playbooks/roles/tasks、Vue/Svelte SFC、通过 TypeScript 解析器解析的 Astro 文件、Jupyter/Databricks 笔记本(.ipynb)以及 Perl XS 文件(.xs)。通用 YAML 不被视为源代码。PHP 项目额外获得仓库限定的 Composer PSR-4 解析、Blade 模板引用,以及当源代码包含显式框架导入、模型继承和接收者证据时的 Laravel Route/Eloquent 语义边。

添加您自己的语言(无需 Fork)

如果您的仓库使用了解析器尚未覆盖的语言,请将一个 languages.toml 文件放入 .code-review-graph/ 目录中,将文件扩展名映射到 tree_sitter_language_pack 中捆绑的任何语法,以及函数、类、导入和调用的 tree-sitter 节点类型:

[ languages . erlang ]
extensions = [ " .erl " ]
grammar = " erlang "
function_node_types = [ " function_clause " ]
class_node_types = [ " record_decl " ]
import_node_types = [ " import_attribute " ]
call_node_types = [ " call " ]

通用的 tree-sitter 遍历器会从这里开始处理提取——无需更改代码,且内置语言永远不会被覆盖。请参阅 docs/CUSTOM_LANGUAGES.md 了解模式参考、验证规则以及一个完整的端到端示例。

CI 中的风险评分 PR 审查 (GitHub Action)

相同的分析作为复合 GitHub Action 运行——并且它保持本地优先:知识图谱的构建和查询完全在本地完成。

📖 阅读原文 →