Code Relations
Source Insight 式的上游引用图:先把整个工程解析成一份本地索引,
之后每一层展开都在毫秒级返回。不依赖 clangd 或任何语言服务,也不要求工程可编译。
它回答什么
从任意一个符号出发向上追溯:
- 这个函数被谁调用?
- 这个全局变量被谁写坏了?(读写分开标注,可一键只看写入)
- 这个宏在哪些地方展开?
- 改这个结构体会影响谁?
一个符号一个方框,同一符号中的多处引用在框内逐行列出并可分别点击;
点击某一行,编辑器跳过去并选中那一行。
安装
VS Code
从 Releases 下载
code-relations-<版本>.vsix,然后任选一种方式装上:
- 图形界面:扩展面板 → 右上角
... → 从 VSIX 安装… → 选中刚下载的文件
- 命令行:
code --install-extension code-relations-<版本>.vsix
装完按提示重载窗口即可。升级时下载新版本重复同样步骤,会自动覆盖旧版,索引不受影响。
VS Code 的扩展面板只搜索微软官方市场,本扩展未在其上架,因此搜不到,
需要按上面的方式手动安装。这不影响任何功能。
Cursor / Windsurf / VSCodium / Gitpod
扩展面板直接搜 Code Relations 安装即可(走 Open VSX),支持自动更新。
用法
- 侧栏打开 Code Relations,点标题栏的生成关系。首次全量扫描,之后只重扫改动过的文件。
- 把光标放到某个符号上(或函数体内任意一行),点刷新。视图只显示根框,不自动展开。
- 鼠标移到框的右边缘 20 px,出现提示符后点击,向右展开一级引用者。
- 点框内某一行跳到该处引用;点标题行跳到符号定义。
视图不跟随光标:跳到源码后根节点、已展开分支、缩放和过滤全部保持不变,直到你再次刷新。
界面约定
- 图从左向右生长,箭头恒指向被引用符号(画面朝左)。
- 连线只用水平/垂直线段,直角拐角,无曲线。
- 展开热区静止时完全不可见,悬停才出现淡底色与提示符。
- 实线 = 确定引用;虚线 + 行首
? = 同名候选,无法唯一确定。
画布操作
图区带原生滚动条(右侧与底部),行为与编辑器、终端一致:
| 操作 |
效果 |
| 滚轮 |
上下滚动 |
Shift + 滚轮 |
左右滚动 |
| 拖动滚动条 |
快速定位 |
| 触控板双指 |
任意方向滚动 |
Ctrl / Cmd + 滚轮 |
以指针为中心缩放(40%–250%) |
| 空白处拖动 |
平移 |
| 空白处双击 |
适应窗口 |
索引存在哪
默认在工程根的 .code-relations/relations.db:
你的工程/
├── .code-relations/
│ ├── .gitignore 内容为 *,自动生成,忽略自身
│ └── relations.db SQLite 索引库
└── src/ ...
放工程内是为了各工程天然隔离、删工程即删索引、位置一眼可知;目录自带
.gitignore,不需要你往仓库的忽略清单里加东西。Remote SSH / WSL 场景下
它随工程位于远端。
想集中存放(例如统一放到大容量磁盘)就设 codeRelations.index.storagePath,
此时按工作区哈希分子目录。
清理:命令面板执行 Code Relations: 清空关系索引,或直接删掉该目录。
能力边界
基于 tree-sitter 的语法分析,没有类型信息,因此:
- 成员访问
p->count 无法确定 p 的类型,同名成员只能按候选处理。
- 通过指针的间接写入(
*p = 1、memcpy(&x,…))无法完整捕获,所以"谁写了它"是可能漏的。
- 函数指针与未知宏发起的调用记为不可解析引用点,只在框上计数提示,不产生错误的边。
#ifdef 各分支都参与解析,不判断哪一支会被实际编译。
- 局部变量默认不索引(可配置开启)。
反馈
用起来有问题、结果不对、想要新功能,都欢迎提到
Issues。
报告解析结果不对时,请附上能复现的最小代码片段、符号名,以及
Code Relations: 显示诊断日志 输出的相关片段。
许可
本扩展为专有软件,Copyright (c) 2026 yuandixiang,保留所有权利。
免费授权你在自己的设备上安装使用(含商业性的内部开发),但不授权再分发、
修改、反向工程,或以本扩展为基础发布同类产品。完整条款见扩展安装目录下的
LICENSE 文件,在扩展市场页面也可从「License」一栏查看。
需要超出此范围的授权,请联系作者另行洽谈。
所含第三方组件的版权声明见扩展安装目录下的 THIRD-PARTY-NOTICES.txt。