rules_python
rules_python copied to clipboard
[Continuing Discussion] `python_no_test_files` directive
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_patternaccept no value is unintuitive and should raise an error. #1819 includes this. - Setting
python_test_file_patternback to "default" should be done manually, not through magic strings.- Eg:
# gazelle:python_test_file_pattern *_test.py,test_*.py
- Eg:
- 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_testtargets but should still be processed as py_library or py_binary (see example below). - All of the above led to the conclusion that there should be a
python_no_test_filesdirective.
# 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:
- cause gazelle to simply ignore all files that match
python_test_file_pattern? or - cause gazelle to map all files that match
python_test_file_patterntopy_libraryorpy_binary(if they haveif __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.