好的,这是您要求的英文文章的中文翻译,已按照规范处理为 Markdown 格式。
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 配置,在支持的平台上安装平台原生的 hooks/skills,并将图感知指令注入到您的平台规则中。它会自动检测您是通过 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 服务器、hooks、skills 和 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 秒。之后,监视模式和受支持的 hooks 可以自动保持图的更新。
工作原理
您的仓库被解析为带有 Tree-sitter 的 AST,存储为节点(函数、类、导入)和边(调用、继承、测试覆盖)的图,然后在审查时进行查询,以计算出您的 AI 助手需要读取的最小文件集。
爆炸半径分析
当文件发生更改时,图会追踪所有可能受影响的调用者、依赖项和测试。这就是更改的“爆炸半径”。您的 AI 只读取这些文件,而不是扫描整个项目。
增量更新 < 2 秒
当启用 hooks 或监视模式时,文件保存和受支持的提交 hooks 会触发增量更新。图会对更改的文件进行 diff,通过 SHA-256 哈希检查找到它们的依赖项,并仅重新解析更改的部分。一个包含 2,900 个文件的项目在 2 秒内即可完成重新索引。
解决单体仓库问题
大型单体仓库是 Token 浪费最严重的地方。图可以过滤掉噪音——从审查上下文中排除 27,700+ 个文件,实际只读取约 15 个文件。
广泛的语言支持 + Jupyter Notebooks
解析器支持涵盖当前解析器表面的函数、类、导入、调用点、继承和测试检测,在可用时使用 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 SFCs, 通过 TypeScript 解析器解析的 Astro 文件, Jupyter/Databricks notebooks (.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 运行——并且它保持本地优先:知识图谱的构建和查询完全在本地进行。