bazel-contrib / bazel-contrib/rules_python

[Continuing Discussion] `python_no_test_files` directive

Abierto
#1,826 0 comentarios 0 reacciones 0 asignados Ver en GitHub
gazelle help wanted
Lenguaje dominante
Starlark
Estrellas
688
Forks
721
Merge medio
15 h 7 min
PR fusionados (30 d)
76

Descripción

This is a continuation of the discussion from https://github.com/bazelbuild/rules_python/pull/1819#discussion_r1542543260.

# 🚀 feature request

### Relevant Rules

+ gazelle

### Description

The summary of the discussion in https://github.com/bazelbuild/rules_python/pull/1819#discussion_r1542543260 so far is:

+ Having `python_test_file_pattern` accept no value is unintuitive and should raise an error. #1819 includes this.
+ Setting `python_test_file_pattern` back to "default" should be done manually, not through magic strings.
+ Eg: `# gazelle:python_test_file_pattern *_test.py,test_*.py`
+ There's still not a _nice_ way to tell gazelle that there are _no files in the bazel package_ that should be mapped to `py_test` targets _but should still be processed as py_library or py_binary_ (see example below).
+ Workaround: set `python_test_file_pattern` to a value that ends in something other than `.py`, such as `gazelle:python_test_file_pattern ignore_me.txt`. This will work because a prior check ([here](https://github.com/bazelbuild/rules_python/blob/5631f05024ec02e04d2b9c74a93b06f934cbfac6/gazelle/python/generate.go#L108) and [here](https://github.com/bazelbuild/rules_python/blob/5631f05024ec02e04d2b9c74a93b06f934cbfac6/gazelle/python/generate.go#L179)) asserts that the files being processed by gazelle end in `.py`.
+ All of the above led to the conclusion that there should be a `python_no_test_files` directive.

```
# example of project structure
project/
+ BUILD.bazel
+ MODULE.bazel
+ src/mypackage/ # guaranteed to have no py_test targets
+ BUILD.bazel
+ run_electrical_test.py # py_binary
+ electrical_test.py # py_library
+ tests/ # will have any py_* targets
+ BUILD.bazel
+ foo_test.py # py_test
+ bar_test.py # py_test
+ test_utils.py # py_library
+ run_all_test.py # py_binary
```

How does `python_no_test_files` behave? Does it:

1. cause gazelle to simply _ignore_ all files that match `python_test_file_pattern`? or
2. cause gazelle to map all files that match `python_test_file_pattern` to `py_library` or `py_binary` (if they have `if __name__ ...`)?

### Describe the solution you'd like

With behavior (1), there's still a feature gap for the example case above, and the workaround feels a bit hacky.

For behavior (2) we'd probably want to name the directive something else.

### Describe alternatives you've considered

Using `python_ignore_files` and then manually generating the py_library targets for files that match `python_test_file_pattern`. This is less than ideal when adding things to large projects.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Empieza leyendo la discusión enlazada sobre el pull request #1819 y, después, inspecciona gazelle/python/generate.go en las comprobaciones indicadas alrededor de las líneas 108 y 179. El issue necesita un comportamiento y un nombre de directiva decididos antes de poder delimitar la implementación; se considera terminado cuando Gazelle gestione los paquetes sin targets py_test sin la solución alternativa documentada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
build-system, tooling
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.