跳转至

索引存在哪

索引存储位置和重载行为说明

1. 索引存储在哪里?

clangd 的后台索引存储在项目根目录下的:

Text Only
/home/ken/workspace/cix-compiler/.cache/clangd/index/

  • 这个位置由 .clangd 配置中的 Index: Background: Build 决定
  • .gitignore 已包含 .cache/(第 29 行),所以索引不会被提交到 git 仓库
  • 当前该目录为空(0 个文件),因为之前使用的是损坏的 clangd 21,从未成功索引过

2. 每次重载窗口都会重新索引吗?

不会完全重新索引。 具体行为如下:

场景 行为
首次重载(当前状态,索引为空) 会进行全量索引,较慢(5908 个文件,约需几分钟)
后续重载(已有索引) 加载已有索引,只对变化的文件增量索引,很快
修改某个文件后 只重新索引该文件及其依赖,其余复用缓存

重载窗口(Developer: Reload Window)会重启 clangd 进程,但索引文件会持久保留.cache/clangd/index/ 中,下次启动时直接加载。

3. 关于索引规模(重要)

你的 compile_commands.json 包含 5908 个文件: - 项目自身代码:121 个(2.0%) - 第三方库:5787 个(98.0%),其中 llvm-project 4481 个、iree 1051 个

这意味着首次全量索引会花较长时间(主要是索引 LLVM/MLIR/IREE 源码)。但保留第三方索引是必要的,因为编译器项目经常需要跳转到 LLVM/MLIR 的定义(如 mlir::ValuePatternRewriter 等)。

4. 建议操作

  1. 重载窗口Ctrl+Shift+PDeveloper: Reload Window
  2. 首次耐心等待:clangd 15 启动后会在后台索引,状态栏会显示进度。首次可能需要 5-10 分钟(取决于磁盘速度)。
  3. 验证索引完成:当 VSCode 状态栏的 clangd 图标不再显示 "indexing" 时,索引完成。
  4. 后续重载很快:之后每次重载窗口只需加载已有索引,几秒内即可使用跳转功能。

💡 如果你想确认索引是否在工作,可以在重载后查看 .cache/clangd/index/ 目录,应该会逐渐出现 .idx 索引文件。