bazel-contrib / bazel-contrib/rules_python
Feat: Gazelle directive `# gazelle:python_ignore_target target`
- Lingua principale
- Starlark
- Stelle
- 688
- Fork
- 721
- Merge medio
- 15h 7m
- PR unite (30g)
- 76
Descrizione
# 🚀 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?"
```starlark
# keep: this cannot be managed by Gazelle because
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:
```starlark
# 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 https://github.com/bazel-contrib/bazel-gazelle/issues/1176) but I haven't fully investigated those yet.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Start by reviewing the existing Gazelle directives described in the issue, including rules_python_gazelle_plugin's `# gazelle:ignore import` handling and Gazelle's target collection behavior. Read the context from issues #3046 and bazel-gazelle #1176 before deciding whether `ignore_target` or `python_ignore_target` fits. Done means the directive behavior, target lookup, missing-target handling, and wildcard scope are specified and covered by appropriate tests.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- build-system
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100