bazel-contrib / bazel-contrib/rules_python
[gazelle] `python_ignore_files` directive incorrectly (?) ignores files with the same name in subpackages
- 主要语言
- Starlark
- 星标
- 688
- 派生
- 721
- 平均合并
- 15 小时 7 分钟
- 30 天内合并 PR
- 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.
贡献指南
调研方向
先从最小复现中的根 BUILD 文件以及 bar/ 和 foo/ 下的 BUILD 文件开始,然后运行 Gazelle,观察根目录的 `gazelle:ignore baz.py` 指令是如何应用的。确定应支持所提出的三种作用域行为中的哪一种,并验证是否会为 bar/baz.py 和 foo/baz.py 生成 targets,同时确保预期的根级文件行为保持正确。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- build-system, tooling
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 45/100