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
Note: These instructions are known to work on this commit in the bazel-lsp repo: 98382215c44745485ed9ab7c1d13472a5acc0350
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.