bazel-contrib / bazel-contrib/rules_python

Optionally (?) regenerate `import` attributes

Aperta
#3,177 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
gazelle
Lingua principale
Starlark
Stelle
688
Fork
721
Merge medio
15h 7m
PR unite (30g)
76

Descrizione

# 🚀 feature request

### Relevant Rules

Gazelle

### Description

The `python_root` directive will tell Gazelle to include the `imports` attribute on generated targets. Eg:

```starlark
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:

1. Opt-in directive that tells Gazelle that it's OK to regenerate `imports`.
2. CLI arg for regenerating imports `bazel run //:gazelle -- --regen-imports` so that it can be run as a one-off
3. 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:

```shell
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.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start with the `python_root` directive, the `BUILD.bazel` examples, and the `bazel run //:gazelle` workflow described here. Compare the proposed regeneration approaches and how they interact with unmanaged targets and CI's dirty-tree check. Done means the chosen behavior updates stale `imports` without modifying targets that Gazelle does not manage.

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
Da chiarire
Idoneità per principianti
30/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.