Skip to content

[Continuing Discussion] python_no_test_files directive #1826

@dougthor42

Description

@dougthor42

This is a continuation of the discussion from #1819 (comment).

🚀 feature request

Relevant Rules

  • gazelle

Description

The summary of the discussion in #1819 (comment) so far is:

  • Having python_test_file_pattern accept no value is unintuitive and should raise an error. feat(gazelle): Add "python_test_file_pattern" directive #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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions