rules_python icon indicating copy to clipboard operation
rules_python copied to clipboard

[Continuing Discussion] `python_no_test_files` directive

Open dougthor42 opened this issue 1 year ago • 0 comments

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 and here) 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.

dougthor42 avatar Mar 28 '24 16:03 dougthor42