bazel-contrib / bazel-contrib/rules_python

[Continuing Discussion] `python_no_test_files` directive

Ouverte
#1,826 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
gazelle help wanted
Langage dominant
Starlark
Étoiles
688
Forks
721
Merge moyen
15 h 7 min
PR mergées (30 j)
76

Description

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.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par lire la discussion liée au sujet de la pull request #1819, puis examinez gazelle/python/generate.go au niveau des vérifications indiquées autour des lignes 108 et 179. L’issue nécessite qu’un comportement et un nom de directive soient arrêtés avant de pouvoir définir le périmètre de l’implémentation ; elle sera considérée comme terminée lorsque Gazelle gérera les packages sans targets py_test sans le contournement documenté.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
build-system, tooling
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.