Generate fish shell completion at build time
Fish shell completion for bazel previously relied on parsing bazel help
text at run time, leading to latency of multiple seconds for first-time
completion. This change adds a script that instead parses bazel help
text and generates an appropriate fish completion script at build time,
greatly reducing completion latency for the user.
Fixes #12206
Fixes #12207
Fixes #12208
Fixes #12209
Fixes #12210
Closes #12249.
PiperOrigin-RevId: 337468387
diff --git a/scripts/BUILD b/scripts/BUILD
index 83e778c..c477439 100644
--- a/scripts/BUILD
+++ b/scripts/BUILD
@@ -40,10 +40,30 @@
name = "srcs",
srcs = glob(["**"]) + [
"//scripts/docs:srcs",
- "//scripts/fish:srcs",
"//scripts/packages:srcs",
"//scripts/release:srcs",
"//scripts/zsh_completion:srcs",
],
visibility = ["//:__pkg__"],
)
+
+py_binary(
+ name = "generate_fish_completion",
+ srcs = ["generate_fish_completion.py"],
+ deps = ["//third_party/py/abseil"],
+)
+
+genrule(
+ name = "fish_completion",
+ outs = ["bazel.fish"],
+ cmd = " ".join([
+ "$(location :generate_fish_completion)",
+ "--bazel=$(location //src:bazel)",
+ "--output=$@",
+ ]),
+ tools = [
+ ":generate_fish_completion",
+ "//src:bazel",
+ ],
+ visibility = ["//scripts/packages:__subpackages__"],
+)