bazel-contrib / bazel-contrib/rules_python

[gazelle] `python_ignore_files` directive incorrectly (?) ignores files with the same name in subpackages

Offen
#2,147 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
gazelle help wanted
Vorherrschende Sprache
Starlark
Sterne
688
Forks
721
Ø Merge
15 Std. 7 Min.
Gemergte PRs (30 T.)
76

Beschreibung

# 🐞 bug report

### Affected Rule

+ gazelle

### Is this a regression?

No, I think this is as-built.

### Description

If you set `# gazelle:python_ignore_files foo.py` in your root dir, **all** files named `foo.py` will be ignored.

I'm not sure if this is WAI or not, but either way it's unexpected/undocumented behavior.

Instead, the `python_ignore_files` should do **one** of the following:
1. only act on the current Bazel package
2. only act on non-wildcard paths relative to the Bazel package that the directive is defined in
3. only act on glob expansions relative to the Bazel package that the directive is defined in

(1) is the behavior that _I_[^1] expected based on the limited documentation.

(2) is pretty nice because then you could put all of your ignores in a toplevel BUILD file, but it could mean a lot of duplication if you always want to ignore all "foo.py" that exist

(3) is the most complex to implement but also the most flexible. And even being "most complex", I don't imagine it's all that complicated.

[^1]: I can't say what other people expected, haha

## 🔬 Minimal Reproduction

1. Make this directory structure:

```
.
├── bar
│   ├── baz.py
│   ├── BUILD
│   └── some_other.py
├── foo
│   ├── baz.py
│   └── BUILD
├── __init__.py
└── BUILD
```

2. Set these directives:

```starlark
# ./BUILD
# gazelle:ignore baz.py
```

3. Run Gazelle

### Expected Behavior

There is no `./baz.py` file, so targets are generated for `bar/baz.py`, `bar/some_other.py`, and `foo/baz.py` in their respective BUILD files.

### Actual Behavior

Only `bar/some_other.py` has a target generated.

## 🔥 Exception or Error

N/A

## 🌍 Your Environment

**Operating System:**

gLinux (Debian Bookworm-based)

**Output of `bazel version`:**

7.2.0

**Rules_python version:**

0.33.1

**Anything else relevant?**

Related to #2108.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der root-BUILD-Datei und den BUILD-Dateien unter bar/ und foo/ in der minimalen Reproduktion und führe dann Gazelle aus, um zu beobachten, wie die root-Direktive `gazelle:ignore baz.py` angewendet wird. Bestimme, welches der drei vorgeschlagenen Scoping-Verhalten unterstützt werden sollte, und überprüfe, dass Targets für bar/baz.py und foo/baz.py generiert werden, während das beabsichtigte Verhalten der Datei auf Root-Ebene korrekt bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
build-system, tooling
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.