-
-
Notifications
You must be signed in to change notification settings - Fork 610
Description
🚀 feature request
Relevant Rules
gazelle
Description
Gazelle can skip files/directories via # gazelle:exclude file
and can ignore entire BUILD.bazel
files with # gazelle:ignore
. rules_python_gazelle_plugin
also adds a # gazelle:ignore import
annotation that can be added to .py
files.
Gazelle can also force deps to be kept around with the # keep
comment within a target.
However, there's not currently (that I'm aware of) any way to tell gazelle to ignore an entire target.
Ignoring an entire target can be useful when there are hand-written targets or ones that don't follow the rest of the directives (such as additional file-level targets when the generation mode is package). Having such a directive will also unblock the issues I raised on @yushan26's PR #3046, allowing them to expand the scope from just py_binary targets to all targets.
Describe the solution you'd like
New directive: # gazelle:ignore_target target
.
Or if we don't want do potentially shadow a future directive from bazel_gazelle, # gazelle:python_ignore_target target
. We could also bike shed about "ignore" vs "exclude".
If target
isn't found, the directive has no effect. Maybe it logs a warning, but that's it.
Should wildcards be allowed? For an MVP I don't think so. That adds complexity with, at least for my direct use case, little gain.
Describe alternatives you've considered
You may ask: "How is this different from a # keep
comment at the start of a target?"
# keep: this cannot be managed by Gazelle because <reason>
py_library(
...
)
The main difference is that the directive can be set in any parent BUILD.bazel file, thus allowing people to have a central location for all such directives:
# gazelle:python_ignore_target //foo/bar:baz
# gazelle:python_ignore_target //foo/bar:baz_test
# gazelle:python_ignore_target //a/b/c/d:e
Admittedly it's a pretty weak argument for having a new directive.
There may also be subtle differences with how gazelle collects targets and generates new ones (eg bazel-contrib/bazel-gazelle#1176) but I haven't fully investigated those yet.