Code Review Graph VS Code 扩展使用指南:在编辑器中可视化代码依赖图、爆炸半径与审查上下文
【免费下载链接】code-review-graphLocal-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.项目地址: https://gitcode.com/GitHub_Trending/co/code-review-graph
本篇技术指南围绕仓库中的 VS Code 扩展 code-review-graph-vscode/README.md 展开,完整讲解如何安装后端 CLI、构建代码图谱,以及如何利用扩展提供的树视图、交互式 D3 图、爆炸半径分析与代码审查辅助功能,直接在 VS Code 内完成依赖追踪与变更影响评估。读完本文,你将掌握从零搭建代码图环境、熟练使用全部 13 条命令、按需调优全部设置项,并理解其背后的 SQLite 图存储与 BFS 影响传播原理。
一、扩展是什么:本地优先的代码智能图谱前端
Code Review Graph 是一个面向 VS Code 的本地优先(local-first)扩展,它把 Python 后端code-review-graph解析出的持久化代码图谱(包含文件、类、函数、类型、测试等节点及其调用、导入、继承等关系),以可浏览、可查询、可可视化的形式呈现在编辑器里。其核心定位来自项目描述:让 AI 编码工具和人类开发者"只读取真正重要的代码",通过图结构精确回答"改了这段代码会影响谁""这个函数被谁调用""这个符号有没有测试覆盖"等问题。
在package.json(code-review-graph-vscode/package.json)中,扩展声明了三类 Activity Bar 视图:
| 视图 ID | 名称 | 职责 |
|---|---|---|
codeReviewGraph.codeGraph | Code Graph | 按 文件 → 符号 → 关系边 分层的代码图浏览器 |
codeReviewGraph.blastRadius | Blast Radius | 展示变更涉及的 changed / impacted 两类节点分组 |
codeReviewGraph.stats | Stats | 图数据库统计总览(文件数、节点数、边数、语言、更新时间、嵌入数) |
三个视图均由 code-review-graph-vscode/src/views/treeView.ts 中的CodeGraphTreeProvider、BlastRadiusTreeProvider、StatsTreeProvider三个TreeDataProvider驱动,数据全部来自本地 SQLite 图库,无需联网。
二、核心功能总览
原 README 列出的能力可归纳为以下 12 项,每一项都有对应源码支撑:
- Code Graph Explorer(代码图浏览器):树视图浏览文件、类、函数及其关系,展开符号节点可直接查看其出边(outgoing)与入边(incoming),并在图上过滤
CONTAINS噪音边(见CodeGraphTreeProvider.getSymbolChildren)。 - Blast Radius(爆炸半径):查看修改代码后会影响的文件与符号,深度由
blastRadiusDepth控制(1–10)。 - Review Changes(审查变更):自动检测 git 变更并计算其爆炸半径,生成包含测试覆盖缺口、宽爆炸半径、继承链影响等提示的审查指引(见
extension.ts中codeReviewGraph.reviewChanges命令实现)。 - Find Callers / Callees(查找调用者/被调者):沿
CALLS边双向追踪任意函数的调用关系。 - Find Tests(查找测试):通过
TESTED_BY边定位任一符号的测试(同时兼容正反两个方向)。 - Query Graph(图查询):以 8 种语义模式(
callers_of、callees_of、imports_of、importers_of、children_of、tests_for、inheritors_of、file_summary)查询图数据库。 - Find Large Functions(查找大函数):找出超过行数阈值的函数或类,阈值在命令弹窗中自定义,默认 50 行。
- Interactive Graph(交互式图):基于 D3.js 的力导向依赖关系可视化,支持搜索、边过滤、深度滑块与 SVG/PNG 导出。
- Live Search(实时搜索):对
name/qualified_name字段做 SQLLIKE模糊搜索,结果即时弹出并可直接跳转源码(见SqliteReader.searchNodes)。 - Compute Embeddings(计算嵌入):调用后端
embed命令为全部节点生成向量嵌入,供语义搜索使用。 - Watch Mode(监视模式):启动后端
watch守护进程,持续监听文件变化并更新图。 - Auto-Update(自动更新):保存文件后在后台重建图,默认启用,带 2000ms 防抖(见
setupAutoUpdate中的AUTO_UPDATE_DEBOUNCE_MS)。
三、架构:VS Code 前端 + Python 后端 CLI + SQLite 图库
扩展遵循清晰的"前端只读、后端写库"分层:
- 后端 CLI(Python):负责解析代码库、写入图数据库。扩展通过
CliWrapper(code-review-graph-vscode/src/backend/cli.ts)以子进程方式调用code-review-graph可执行文件,对应build、update、watch、embed四个子命令,单次 CLI 调用超时上限为 60 秒(CLI_TIMEOUT_MS)。 - SQLite 图库:后端产物为本地数据库
.code-review-graph/graph.db。扩展用better-sqlite3以只读模式打开(new Database(dbPath, { readonly: true }),见 code-review-graph-vscode/src/backend/sqlite.ts),所有写入均由 Python 侧完成;同时设置 WAL 日志模式与 5 秒忙等待超时,保证与后端并发读写安全。 - 多工作区支持:
getWorkspaceRoot()会优先选择含图数据库的工作区文件夹,找不到才回退到第一个文件夹;findGraphDb()依次探测.code-review-graph/graph.db与旧版.code-review-graph.db两个位置。
从源码结构看,扩展内部还包含一个FileSystemWatcher(watchGraphDb),监听**/.code-review-graph/graph.db的变化:数据库被外部重建、创建或删除时,自动重开SqliteReader并刷新树视图,实现"后端改库、前端即时感知"的联动。
节点与边的类型模型
SqliteReader(code-review-graph-vscode/src/backend/sqlite.ts)定义了完整的图数据模型:
- 节点类型(5 种):
File、Class、Function、Type、Test。每个节点携带qualified_name(全局限定名,如my_module.MyClass.my_method)、file_path、line_start/line_end、params、return_type、is_test等元数据。 - 边类型(7 种):
CALLS(调用)、IMPORTS_FROM(导入)、INHERITS(继承)、IMPLEMENTS(实现)、CONTAINS(包含)、TESTED_BY(被测试)、DEPENDS_ON(依赖)。
边同时记录source_qualified、target_qualified、所在file_path与行号,这正是"任意符号可溯源到具体代码行"的数据基础。
四、快速开始:三步建立你的代码图谱
第 1 步:安装扩展
从 VS Code Marketplace 安装Code Review Graph扩展。激活条件(activationEvents)包括:工作区存在.code-review-graph/graph.db、执行任何codeReviewGraph.*命令或打开对应视图,因此图库就绪后扩展会自动加载。
第 2 步:安装后端 CLI
扩展本身不解析代码,必须安装 Python 后端code-review-graph(要求 Python 3.10+):
# 推荐 uv pip install code-review-graph # 备选 pipx install code-review-graph pip install code-review-graph扩展的Installer(code-review-graph-vscode/src/onboarding/installer.ts)会在后端缺失时弹出提示,支持一键自动安装或打开终端展示手动安装命令;自动安装时按uv → pipx → pip3的优先级探测可用安装器(CliWrapper.detectPythonInstaller)。若系统中不存在 Python 3.10+,会引导下载安装 Python。
第 3 步:构建图
按Ctrl+Shift+P打开命令面板,执行Code Graph: Build Graph。扩展会在工作区根目录生成图数据库.code-review-graph/graph.db,并在文件保存时自动更新(autoUpdate默认开启)。构建成功后状态栏会显示节点总数(如$(database) 12,345 nodes),点击状态栏即可手动触发Code Graph: Update Graph(见 code-review-graph-vscode/src/views/statusBar.ts);若图库超过 1 小时未更新,状态栏会以$(warning) Code Graph: Outdated提醒你及时增量更新。
提示:
CliWrapper.buildGraph支持--full参数执行全量重建;默认的build会按需增量,update子命令则专门做增量更新(code-review-graph-vscode/src/backend/cli.ts)。
五、命令全览与源码级行为说明
扩展在package.json的contributes.commands中注册了 13 条命令,与 README 的命令表完全一致:
| Command | Description |
|---|---|
Code Graph: Build Graph | Parse the codebase and create the graph database |
Code Graph: Update Graph | Incrementally update the graph |
Code Graph: Show Blast Radius | Show the blast radius for a symbol |
Code Graph: Review Changes | Analyze git changes and show impacted files |
Code Graph: Find Callers | Find all callers of a function |
Code Graph: Find Callees | Find all functions called by a target |
Code Graph: Find Tests | Find tests for a symbol |
Code Graph: Find Large Functions | Find functions/classes exceeding a size threshold |
Code Graph: Query Graph | Run semantic queries (8 patterns: callers_of, callees_of, etc.) |
Code Graph: Search | Search the code graph |
Code Graph: Show Graph | Open the interactive graph visualization |
Code Graph: Compute Embeddings | Generate vector embeddings for semantic search |
Code Graph: Watch Mode | Run graph in watch mode for continuous updates |
结合 code-review-graph-vscode/src/extension.ts 中的registerCommands,各命令的实际行为如下:
- Build Graph:解析代码库并创建图库;成功后重开
SqliteReader并刷新所有树视图;失败时在通知中显示 CLI 的stderr。 - Update Graph:以进度通知包裹增量更新过程,失败时提示错误信息。
- Show Blast Radius:接受参数或手动输入限定名(如
my_module.MyClass.my_method),按blastRadiusDepth深度计算影响半径,随后聚焦到 Blast Radius 视图。 - Find Callers / Find Callees:分别以目标为入边/出边过滤
CALLS边,弹出showQuickPick列表(显示符号名、文件、行号),选中即可跳转源码。 - Find Tests:同时检索入边与出边的
TESTED_BY关系,兼容"测试指向被测函数"与"被测函数指向测试"两种存储方向。 - Find Large Functions:弹出阈值输入框(默认 50),调用
getNodesBySize(minLines)按line_end - line_start + 1倒序返回超过阈值的节点,最多 50 条。 - Query Graph:先让用户选择 8 种模式之一,再输入目标;内部将模式映射为"边类型 + 方向"(见下节),先精确匹配限定名,失败则降级为模糊搜索并在多结果时弹出选择器。
- Search:对
name/qualified_name做LIKE模糊搜索(searchNodes),结果含类型与filePath:lineStart,一键跳转。 - Show Graph:打开/聚焦 D3 交互式图面板(
GraphWebviewPanel.createOrShow)。 - Compute Embeddings:调用后端
embed;若输出包含 "not installed",会提示安装code-review-graph[embeddings]可选依赖。 - Watch Mode:调用后端
watch启动持续监听。 - Review Changes:见下文"审查工作流"专节。
Query Graph 的 8 种查询模式
命令的查询映射表定义在 code-review-graph-vscode/src/extension.ts(queryMap),完整对应关系如下:
| 模式 | 底层边类型 | 方向 | 语义 |
|---|---|---|---|
callers_of | CALLS | incoming | 谁调用了目标 |
callees_of | CALLS | outgoing | 目标调用了谁 |
imports_of | IMPORTS_FROM | outgoing | 文件导入了哪些模块 |
importers_of | IMPORTS_FROM | incoming | 谁从目标导入 |
children_of | CONTAINS | outgoing | 文件/类包含哪些节点 |
tests_for | TESTED_BY | incoming | 目标的测试 |
inheritors_of | INHERITS | incoming | 谁继承/实现了目标 |
file_summary | CONTAINS | outgoing | 文件内全部节点清单 |
注意:树视图为了保持简洁会隐藏CONTAINS边,但 Query Graph 的children_of/file_summary模式专门用于显式查询这类包含关系,二者互补。
六、设置项详解:10 项配置的参数、默认值与底层影响
扩展在package.json的contributes.configuration中声明了全部设置,与 README 的设置表一一对应:
| Setting | Default | Description |
|---|---|---|
codeReviewGraph.cliPath | "" | Path to the CLI binary. Leave empty to use the bundled version or one found onPATH. |
codeReviewGraph.autoUpdate | true | Auto-update the graph on file save. |
codeReviewGraph.blastRadiusDepth | 2 | Max traversal depth for blast radius (1–10). |
codeReviewGraph.graphTheme | "auto" | Graph color theme:auto,light, ordark. |
codeReviewGraph.graph.maxNodes | 500 | Max nodes in the graph visualization (10–5000). |
codeReviewGraph.graph.defaultEdges | All exceptCONTAINS | Edge types shown by default. |
codeReviewGraph.treeView.showFiles | true | Show file nodes in the tree view. |
codeReviewGraph.treeView.showClasses | true | Show class nodes in the tree view. |
codeReviewGraph.treeView.showFunctions | true | Show function nodes in the tree view. |
codeReviewGraph.treeView.showTypes | true | Show type nodes in the tree view. |
codeReviewGraph.treeView.showTests | true | Show test nodes in the tree view. |
针对每项配置,源码级补充说明如下:
cliPath:作用域为machine(机器级)。CliWrapper构造时读取该值,为空时回退到PATH中的code-review-graph可执行文件;配置了自定义路径(如虚拟环境、conda 环境或自编译二进制)时优先使用,适合后端不在默认 PATH 的场景。autoUpdate:setupAutoUpdate在保存文本后检查该开关,若开启则以2000ms 防抖(AUTO_UPDATE_DEBOUNCE_MS)调度一次cli.updateGraph,更新失败会被静默忽略,不会打断编辑;用户仍可随时手动Update Graph。blastRadiusDepth:声明minimum: 1、maximum: 10。该值同时作用于Show Blast Radius、Review Changes与 SCM 文件徽章三处的影响半径计算(getImpactRadius(..., depth))。graphTheme:枚举auto/light/dark。auto跟随 VS Code 当前主题;扩展还监听onDidChangeActiveColorTheme,主题切换时自动向图面板下发setTheme消息,无需重建面板(见 code-review-graph-vscode/src/views/graphWebview.ts)。graph.maxNodes:范围 10–5000。图面板加载数据时若节点数超过上限,会截断节点并同步过滤两端都在保留集合内的边,同时向页面下发truncated标记与截断警告。graph.defaultEdges:数组类型,可选项为全部 7 种边类型;默认值为["CALLS","IMPORTS_FROM","INHERITS","IMPLEMENTS","TESTED_BY","DEPENDS_ON"],即排除CONTAINS。这与图面板工具栏中的"Edges"边类型过滤器联动。treeView.*(5 项开关):控制 Code Graph 树视图中各类型节点的显隐,均默认开启,便于在大仓库中按需精简视图。
七、爆炸半径与图查询的工作原理
BFS 影响传播算法
爆炸半径由SqliteReader.getImpactRadius(changedFiles, maxDepth)(code-review-graph-vscode/src/backend/sqlite.ts)实现,其注释明确指出与 Python 侧GraphStore.get_impact_radius逻辑完全一致,共分三步:
- 种子收集:取出变更文件内的全部节点限定名作为种子集合;
- 双向 BFS:从种子出发,沿**出边(本节点影响谁)与入边(谁依赖本节点)**同时向外扩展,最多传播
maxDepth层,得到受影响节点集合(排除种子本身); - 结果聚合:解析受影响节点的完整信息、受影响文件列表,并利用
getEdgesAmong一次性取回所有涉及节点之间的边(采用参数化 IN 子句,对任意规模的节点集合都安全高效)。
由于传播同时覆盖正向与反向边,即使"被调用方"(反向依赖链)发生变更,也能准确找出所有上游调用方。
数据库 schema 兼容性保障
SqliteReader打开数据库时会执行checkSchemaCompatibility():校验nodes、edges表是否存在,并读取metadata表中的schema_version。当前扩展支持到schema v9(与 code_review_graph/migrations.py 中的LATEST_VERSION对齐);若库版本高于 9,会提示"数据库由更新版本创建,请升级扩展",并提供一键 Rebuild Graph。
八、审查工作流:Review Changes 与 SCM 徽章
Code Graph: Review Changes是扩展面向 Code Review 场景的核心命令,其完整流程(见extension.ts)为:
- 通过
git diff --name-only HEAD(未暂存)与git diff --cached --name-only(已暂存)收集变更文件,去重后转为绝对路径; - 以这些文件为种子计算爆炸半径(深度取
blastRadiusDepth); - 自动生成审查指引(
guidance),包括四类信号:- 测试覆盖缺口:变更函数若无
TESTED_BY边(正反两向都检查),列出前 5 个函数名并提示数量; - 宽爆炸半径:受影响文件数 > 10 时,建议拆分本次变更;
- 继承链受影响:变更涉及
INHERITS/IMPLEMENTS边时给出提示; - 跨文件影响统计:汇总受影响节点与文件数量;
- 测试覆盖缺口:变更函数若无
- 将统计与指引输出到 "Code Graph Review" 输出通道,并在图面板中仅渲染 changed + impacted 子图;
- 更新 SCM 文件装饰(徽章)。
配合 code-review-graph-vscode/src/features/scmDecorations.ts 中的ScmDecorationProvider,Explorer 与 SCM 视图中的文件会获得三类徽章:
| 徽章 | 颜色 | 含义 |
|---|---|---|
● | 警告色(橙色) | 文件处于当前变更的爆炸半径内(未被直接修改) |
✓ | 通过色(绿色) | 变更文件内所有函数均有测试覆盖 |
! | 错误色(红色) | 变更文件内存在无测试覆盖的函数 |
这样,审查者在浏览文件列表的瞬间即可识别"哪些文件被波及、哪些变更缺测试",无需逐个打开文件。
九、交互式图可视化:D3 力导向图
Code Graph: Show Graph打开基于D3.js(v7)的力导向依赖图(code-review-graph-vscode/src/views/graphWebview.ts,前端渲染逻辑见 code-review-graph-vscode/src/webview/graph.ts)。工具栏提供:
- 节点搜索:在图中实时过滤/高亮节点;
- 边类型过滤(Edges):以彩色胶囊开关 7 种边(Calls 绿 / Imports 橙 / Inherits 紫 / Implements 黄 / Tested 粉 / Contains 灰 / Depends 橙);
- 深度滑块:选中节点后可限制 0–10 层邻居范围;
- Fit / Export SVG / Export PNG:适配视图、将 SVG 复制到剪贴板、或将 PNG 另存为文件(
savePngToFile通过showSaveDialog落盘)。
图面板支持与树视图/编辑器的双向联动:点击图中节点即打开对应文件定位到行,同时触发codeReviewGraph.revealInTree高亮;从外部(如树视图点击)调用GraphWebviewPanel.highlightNode则会在图中以脉冲动画高亮节点。面板通过retainContextWhenHidden保留状态,并依据 VS Code 主题自动切换明暗配色。
十、要求、边界与使用前提
根据 README 的 Requirements 一节:
- VS Code 1.85+(
engines.vscode声明,@types/vscode同为 1.85.0); - Python 3.10+(后端 CLI 运行前提);
- 一个包含待分析源码的工作区(git 仓库更佳,Review Changes 依赖
git命令)。
需要注意的适用前提:图数据库由 Python 后端在build/update/watch时写入,因此首次使用前必须先完成"安装后端 + 构建图"两步;Review Changes依赖工作区内可用的git可执行文件;Compute Embeddings需要额外安装code-review-graph[embeddings]可选依赖。若遇到better-sqlite3原生模块 ABI 不匹配(多见于 WSL 或 Node 版本不一致),扩展会在控制台提示在扩展安装目录执行npm rebuild better-sqlite3(code-review-graph-vscode/src/backend/sqlite.ts)。
十一、从源码构建扩展
若需从当前仓库自行构建扩展(package.json的 scripts):
cd code-review-graph-vscode npm install npm run compile # esbuild 打包,产出 dist/extension.js npm run watch # 开发模式监听 npm run package # vsce package 生成 .vsix后端 CLI 的详细命令与用法可进一步阅读 docs/COMMANDS.md;图数据库的表结构说明见 docs/schema.md;仓库内还提供了针对 SQLite 读写逻辑的单元测试 code-review-graph-vscode/test/sqlite.test.ts,可作为扩展行为的补充参考。
结语
Code Review Graph for VS Code 把"代码图谱"从纯后端产物变成了编辑器中随手可用的日常工具:树视图负责结构化浏览,D3 图负责整体把握依赖拓扑,Blast Radius 与 Review Changes 负责在变更发生前预警影响面,SCM 徽章让测试覆盖缺口一目了然。结合本地 SQLite 存储与增量更新机制,它可以在不引入任何云端服务的前提下,为日常开发、代码评审与 AI 辅助编程提供一份始终新鲜的代码关系地图。
【免费下载链接】code-review-graphLocal-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.项目地址: https://gitcode.com/GitHub_Trending/co/code-review-graph
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考