使用 clangd 设置 LSP
背景
Emacs、Vim 或 VS Code 等编辑器通过LSP 支持代码导航、代码补全、内嵌编译器错误消息等功能。支持 LSP 的常见语言服务器是 clangd,它依赖于 compile_commands.json 的存在,这是一个 JSON 文件,其中记录了项目中每个文件的编译命令。
如何为 XLA 源代码生成 compile_commands.json?
使用 build_tools/lint/generate_compile_commands.py 脚本。以下从 XLA 代码库根目录进行的调用会就地生成一个 compile_commands.json 文件:bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
Google 内部的 XLA CI 会运行额外的检查,以验证所有目标是否在 BUILD 文件中正确列出所有依赖项,而这些检查在 OSS Bazel CI 中默认处于未启用状态。在向 XLA 团队发送 PR 之前运行以下命令将大大缩短合并 PR 所需的时间,否则您需要让一些 Google 员工在内部为您进行这些修复,或者需要再进行几轮 PR 审核才能根据 Google 员工的反馈修复这些问题。
分层检查
使用 --features=layering_check 进行构建可确保您不会在目标依赖项中未列出的情况下,通过传递依赖项意外包含某个头文件
从 BUILD 文件中移除了未使用的依赖项
安装 Buildozer 工具:
sudo curl -fsSL -o /usr/bin/buildozer https://github.com/bazelbuild/buildtools/releases/download/6.0.0/buildozer-linux-amd64
sudo chmod 755 /usr/bin/buildozer
安装 Bant 工具:
# To some writable directory that does not require root access
bazel build -c opt //bant && install -D --strip bazel-bin/bant/bant ~/bin/bant
# For a system directory that requires root-access
sudo install -D --strip bazel-bin/bant/bant /usr/local/bin/bant
使用 bant 生成 buildozer 命令以移除未使用的依赖项:
bant dwyu //xla/core/collectives:symmetric_memory
如果您觉得自己运气不错,可以直接执行这些命令:
. <(bant dwyu //xla/core/collectives:symmetric_memory)