bazel-contrib / bazel-contrib/rules_python

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

Aberta
#2,147 0 comentários 0 reações 0 responsáveis Ver no GitHub
gazelle help wanted
Linguagem predominante
Starlark
Estrelas
690
Forks
722
Merge médio
15h 7min
PRs com merge (30d)
76

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece pelo arquivo BUILD raiz e pelos arquivos BUILD em bar/ e foo/ na reprodução mínima e, em seguida, execute o Gazelle para observar como a diretiva raiz `gazelle:ignore baz.py` é aplicada. Determine qual dos três comportamentos de escopo propostos deve ser suportado e verifique se targets para bar/baz.py e foo/baz.py são gerados, enquanto o comportamento pretendido do arquivo no nível raiz permanece correto.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
build-system, tooling
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.