☰
Code Review Graph VS Code 扩展使用指南:在编辑器中可视化代码依赖图、爆炸半径与审查上下文
2026/10/16 11:05:22 网站建设 项目流程

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.codeGraphCode Graph按 文件 → 符号 → 关系边 分层的代码图浏览器
codeReviewGraph.blastRadiusBlast Radius展示变更涉及的 changed / impacted 两类节点分组
codeReviewGraph.statsStats图数据库统计总览(文件数、节点数、边数、语言、更新时间、嵌入数)

三个视图均由 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 图库

扩展遵循清晰的"前端只读、后端写库"分层:

  1. 后端 CLI(Python):负责解析代码库、写入图数据库。扩展通过CliWrapper(code-review-graph-vscode/src/backend/cli.ts)以子进程方式调用code-review-graph可执行文件,对应build、update、watch、embed四个子命令,单次 CLI 调用超时上限为 60 秒(CLI_TIMEOUT_MS)。
  2. SQLite 图库:后端产物为本地数据库.code-review-graph/graph.db。扩展用better-sqlite3以只读模式打开(new Database(dbPath, { readonly: true }),见 code-review-graph-vscode/src/backend/sqlite.ts),所有写入均由 Python 侧完成;同时设置 WAL 日志模式与 5 秒忙等待超时,保证与后端并发读写安全。
  3. 多工作区支持: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 的命令表完全一致:

CommandDescription
Code Graph: Build GraphParse the codebase and create the graph database
Code Graph: Update GraphIncrementally update the graph
Code Graph: Show Blast RadiusShow the blast radius for a symbol
Code Graph: Review ChangesAnalyze git changes and show impacted files
Code Graph: Find CallersFind all callers of a function
Code Graph: Find CalleesFind all functions called by a target
Code Graph: Find TestsFind tests for a symbol
Code Graph: Find Large FunctionsFind functions/classes exceeding a size threshold
Code Graph: Query GraphRun semantic queries (8 patterns: callers_of, callees_of, etc.)
Code Graph: SearchSearch the code graph
Code Graph: Show GraphOpen the interactive graph visualization
Code Graph: Compute EmbeddingsGenerate vector embeddings for semantic search
Code Graph: Watch ModeRun 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_ofCALLSincoming谁调用了目标
callees_ofCALLSoutgoing目标调用了谁
imports_ofIMPORTS_FROMoutgoing文件导入了哪些模块
importers_ofIMPORTS_FROMincoming谁从目标导入
children_ofCONTAINSoutgoing文件/类包含哪些节点
tests_forTESTED_BYincoming目标的测试
inheritors_ofINHERITSincoming谁继承/实现了目标
file_summaryCONTAINSoutgoing文件内全部节点清单

注意:树视图为了保持简洁会隐藏CONTAINS边,但 Query Graph 的children_of/file_summary模式专门用于显式查询这类包含关系,二者互补。

六、设置项详解:10 项配置的参数、默认值与底层影响

扩展在package.json的contributes.configuration中声明了全部设置,与 README 的设置表一一对应:

SettingDefaultDescription
codeReviewGraph.cliPath""Path to the CLI binary. Leave empty to use the bundled version or one found onPATH.
codeReviewGraph.autoUpdatetrueAuto-update the graph on file save.
codeReviewGraph.blastRadiusDepth2Max traversal depth for blast radius (1–10).
codeReviewGraph.graphTheme"auto"Graph color theme:auto,light, ordark.
codeReviewGraph.graph.maxNodes500Max nodes in the graph visualization (10–5000).
codeReviewGraph.graph.defaultEdgesAll exceptCONTAINSEdge types shown by default.
codeReviewGraph.treeView.showFilestrueShow file nodes in the tree view.
codeReviewGraph.treeView.showClassestrueShow class nodes in the tree view.
codeReviewGraph.treeView.showFunctionstrueShow function nodes in the tree view.
codeReviewGraph.treeView.showTypestrueShow type nodes in the tree view.
codeReviewGraph.treeView.showTeststrueShow 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逻辑完全一致,共分三步:

  1. 种子收集:取出变更文件内的全部节点限定名作为种子集合;
  2. 双向 BFS:从种子出发,沿**出边(本节点影响谁)与入边(谁依赖本节点)**同时向外扩展,最多传播maxDepth层,得到受影响节点集合(排除种子本身);
  3. 结果聚合:解析受影响节点的完整信息、受影响文件列表,并利用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)为:

  1. 通过git diff --name-only HEAD(未暂存)与git diff --cached --name-only(已暂存)收集变更文件,去重后转为绝对路径;
  2. 以这些文件为种子计算爆炸半径(深度取blastRadiusDepth);
  3. 自动生成审查指引(guidance),包括四类信号:
    • 测试覆盖缺口:变更函数若无TESTED_BY边(正反两向都检查),列出前 5 个函数名并提示数量;
    • 宽爆炸半径:受影响文件数 > 10 时,建议拆分本次变更;
    • 继承链受影响:变更涉及INHERITS/IMPLEMENTS边时给出提示;
    • 跨文件影响统计:汇总受影响节点与文件数量;
  4. 将统计与指引输出到 "Code Graph Review" 输出通道,并在图面板中仅渲染 changed + impacted 子图;
  5. 更新 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询