Bazel and Gopls

Joe Gregorio

So Bazel and the Go language server gopls don’t get along very well. The problem is that Bazel generates a bunch of bazel-\* directories that gopls then tries to process, which can cause gopls to produce a slew of invalid warnings, run slowly, and sometimes even crash. The solution I’ve found so far is to add the following to my .bazelrc file:

build --symlink_prefix=_bazel_
test  --symlink_prefix=_bazel_

# Also suppress the generation of the bazel-out symlink, which always appears,no
# matter what you set --symlink_prefix to.
build --experimental_no_product_name_out_symlink

This causes the created directories to begin with an underscore, which all Go tools should ignore.

This looks like the same solution CockroachDB came up with.

Of course, a better solution would be for Go to support an ignore file like every other tool, ala .dockerignore, .gitignore, .bazelignore, etc. That’s tracked in proposal: global ignore mechanism for Go tool ecosystem, but given the push back from the core Go developers every time this issue is raised is “just sprinkle empty go.mod files in those directories”, which is both impractical and just a tad arrogant, I’m not very hopeful.

comments powered by Disqus