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.