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

tirth8205 code-review-graph


## tirth8205/code-review-graph



### code-review-graph 停止浪费令牌。开始更智能地审查。

**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 秒内即可完成重新索引。

#### 单体仓库问题,已解决

大型单体仓库是令牌浪费最严重的地方。图可以过滤掉噪音——从审查上下文中排除 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 语义边。

#### 添加你自己的语言(无需分叉)

如果你的仓库使用了解析器尚未覆盖的语言,可以将 `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 运行——并且它保持本地优先:知识图谱的构建和查询完全在本地进行。
📖 阅读原文 →