Install the Bazel extension in VS Code.
Clone the bazel-lsp code to a directory of your choice:
export BAZEL_LSP=... git clone https://github.com/cameron-martin/bazel-lsp.git $BAZEL_LSP
The Chromium src path should be exported to the CHROMIUM_SRC
environment variable.
Important: In order for the LSP to recognize the Chromium repo's root dir, two files need to be created in the Chromium root dir:
export CHROMIUM_SRC=... touch $CHROMIUM_SRC/MODULE.bazel{,.lock}
A working bazel
command from the command line is required. You can test this by running (depot_tools
has a copy of bazel
, so it should already be on your $PATH
):
cd $CHROMIUM_SRC bazel info
cd $BAZEL_LSP git checkout -b my_branch git am $CHROMIUM_SRC/tools/vscode/bazel_lsp/*.patch bazel build //:bazel-lsp -c opt cp -f bazel-bin/bazel-lsp .
This produces a LSP binary at $BAZEL_LSP/bazel-lsp
. It is important to copy over the binary from the bazel-bin
since the bazel-bin
directory is a symlink to the local Bazel cache directory and binaries there may be cleaned up or deleted.
This step is optional but very much recommended. The easiest way is to re-use an existing infra
or infra_internal
directory. For example, you may already have the stdlib checked out at a path similar to infra/go/src/go.chromium.org/luci/lucicfg/starlark/stdlib
. Otherwise you can clone the luci-go
repo with git clone https://chromium.googlesource.com/infra/luci/luci-go
.
The rest of this guide assumes that the path to the stdlib directory is exported to the $LUCI_STDLIB
environment variable.
In your VS Code settings.json
file, add the following with the environment variables expanded to their full absolute paths (the stdlib path is optional):
"bazel.lsp.enabled": true, "bazel.lsp.command": "$BAZEL_LSP/bazel-lsp", "bazel.lsp.args": [ "--lucicfg-stdlib-path", "$LUCI_STDLIB", ],
That's it! Hopefully now you can use “Go to definition” in VS Code for infra/config/*.star
files.
It is likely that as the bazel-lsp project gets updated, there will be conflicts in the existing patch. You can update it with:
cd $BAZEL_LSP git checkout -b my_branch git am $CHROMIUM_SRC/tools/vscode/bazel_lsp/*.patch # Fix patch conflicts, commit new patch(es). rm $CHROMIUM_SRC/tools/vscode/bazel_lsp/*.patch git format-patch origin/HEAD..HEAD -o $CHROMIUM_SRC/tools/vscode/bazel_lsp # Upload a CL to update the patches in Chromium.