Skip to content

Latest commit

 

History

History
94 lines (71 loc) · 2.79 KB

README.md

File metadata and controls

94 lines (71 loc) · 2.79 KB

Guide for a Bazel Extension LSP in Chromium

Pre-requisites

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

Building the LSP binary

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.

Setting up the LUCI stdlib (optional)

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.

Using it

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.

Updating the patch(es)

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.