必须装官方bazel extension、配准bazel.bazelpath路径、手动设build文件语言模式为bazel,三者缺一不可;否则仅显示plain text,补全与跳转失效。

装对扩展、配准 Bazel CLI 路径、确保语言模式识别为 BUILD,三者缺一不可。否则你看到的永远是灰扑扑的 Plain Text,补全和跳转根本不会触发。
安装 Bazel Extension for VS Code 且只装这一个
很多人搜“Bazel”装了多个名字相似的扩展,结果互相冲突或功能不全。必须只装官方维护的那个:
- 在扩展面板(
Cmd+Shift+X)搜索Bazel,认准发布者是Bazel Build Tools,名称为Bazel Extension for VS Code - 卸载所有其他带 “bazel” 字样的第三方扩展(如
bazel-tools、vscode-bazel等),它们不提供语言服务支持 - 安装后必须重启 VSCode —— 不是重载窗口,是彻底退出再打开
- 打开含
WORKSPACE的根目录后,状态栏右下角应显示Bazel标识;若没出现,说明工作区未被识别
手动确认 BUILD 文件语言模式为 bazel
VSCode 不会自动把 BUILD 或 WORKSPACE 文件识别为 Bazel 语言,哪怕扩展已装好。常见现象是右下角显示 Plain Text 或 Starlark,这时高亮和补全全部失效。
- 打开任意
BUILD文件,点击右下角语言标识(如显示Plain Text) - 输入
bazel并选择bazel(不是starlark,也不是python) - 为永久生效,在
.vscode/settings.json中添加:"files.associations": { "BUILD": "bazel", "WORKSPACE": "bazel", "BUILD.bazel": "bazel" } - 注意大小写:文件名必须是
BUILD(全大写),build或Build不会被识别
配置 bazel.bazelPath 并启用 Language Server
扩展本身不运行构建逻辑,它靠调用本地 bazel 二进制来解析目标、生成补全项、提供跳转。路径错或没启用 LSP,就只剩静态关键字高亮。
- 终端执行
which bazel,复制输出的完整路径(例如/opt/homebrew/bin/bazel) - 打开
Settings (JSON)(Cmd+Shift+P→Preferences: Open Workspace Settings (JSON)) - 添加字段:
"bazel.bazelPath": "/opt/homebrew/bin/bazel"
- 保存后重启 VSCode 窗口(不是整个应用),等待状态栏右下角出现
Bazel LS Ready - 如果一直卡在
Bazel LS Starting...,检查bazel version是否 ≥ 6.0(旧版本不兼容当前 LSP 协议)
补全不弹出?先看 editor.quickSuggestions.other 是否开启
即使 LSP 就绪,VSCode 默认也会禁用普通代码区域的补全建议——这不是插件问题,而是编辑器策略。
- 在
settings.json中确认有如下配置:"editor.quickSuggestions": { "other": true, "comments": false, "strings": false } -
"other": true是关键,它控制变量名、规则名(如cc_library)、属性名(如srcs)等是否触发补全 - 补全仍不出现?用
Cmd+Shift+P→Developer: Inspect Editor Tokens,把光标放在cc_binary上,确认 token scope 是support.type.bazel;如果是source.python,说明语言模式还是错的 - 真实限制:宏(
load()引入的函数)、自定义规则(my_rule)的补全依赖buildifier解析,若buildifier路径未配置或版本太低,这部分补全会缺失
最容易被忽略的是:Bazel 扩展的补全能力严重依赖 buildifier 的解析结果,而它默认不校验 Starlark 语法错误。写错缩进、漏掉逗号,LSP 可能静默失败,补全就突然消失——这时候别调设置,先 buildifier -mode=check BUILD 看报错。











