-
-
Notifications
You must be signed in to change notification settings - Fork 623
Description
🚀 feature request
Relevant Rules
Gazelle
Description
The python_root
directive will tell Gazelle to include the imports
attribute on generated targets. Eg:
py_library(
...
imports = ["../../.."],
...
)
However, when the BUILD.bazel
and python files are moved, these imports
are not updated when Gazelle processes that directory again, even if there were changes to the python files/imports/whatnot.
Describe the solution you'd like
Hmm... one of:
- Opt-in directive that tells Gazelle that it's OK to regenerate
imports
. - CLI arg for regenerating imports
bazel run //:gazelle -- --regen-imports
so that it can be run as a one-off - Always regenerate?
Describe alternatives you've considered
Right now I run:
bazel run //:buildozer 'remove imports' //...:*; bazel run //:gazelle
Which is fine I guess. We currently use bazel run //:gazelle
in CI to check that Gazelle won't make any modifications (CI fails if the git tree is dirty after running that command).
The problem with the above command and running it in CI is that we have targets that are intentionally not managed by Gazelle. Those get modified by the buildozer
command and then not fixed when running Gazelle.
I could probably update the buildozer
command to ignore those unmanaged targets, but it would be quite messy - the unmanaged targets are a clusterfrack. It would be chaining bazel query
to get the "exclude" syntax and then passing a list of managed targets to buildozer
. Something like:
MANAGED_TARGETS=$(bazel query '//... except //foo/bar:* except //baz:* except //abc:apple')
bazel run //:buildozer 'remove imports' ${MANAGED_TARGETS}
bazel run //:gazelle
And I'd have to update that query
when a new non-managed target/package is added.