bazel-contrib / bazel-contrib/rules_python

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

オープン
#2,147 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
gazelle help wanted
主要言語
Starlark
スター
688
フォーク
721
平均マージ
15時間 7分
マージ済み PR(30日)
76

説明

# 🐞 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.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start with the root BUILD file and the BUILD files under bar/ and foo/ in the minimal reproduction, then run Gazelle to observe how the root `gazelle:ignore baz.py` directive is applied. Determine which of the three proposed scoping behaviors should be supported and verify that targets for bar/baz.py and foo/baz.py are generated while the intended root-level file behavior remains correct.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
build-system, tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。