tree 50860250c5fa59e2c80eca1eb9a8f16565246ee3
parent 9ff6ab7905f79079766c69ff8735542ebf9894bb
author Zhongpeng Lin <zplin@uber.com> 1721375369 -0700
committer GitHub <noreply@github.com> 1721375369 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJmmhqYCRC1aQ7uu5UhlAAAZ3kQADwE6RTs+3lwGRITBLuVrXQN
 rOp9ziveySeRY5nG+EfxIJUi3PeqvzOUUVHzEmLLawi7Tt/3/WPvMBuCZaoR++hP
 2c8pEWp+uvrvqhFoDm3R/YgEqzv3XnwqwGyrEFMifc5h1XeSm+y67QdhTfjJ2sFB
 YXiV1zq+S+3xQGTbc4fdcpmt8/q1OXVGx8ggelWfQ2D96q6xcHyZEAGCol/Wek8n
 uHnZEEX3B9rQ4Nk+nGRH/Gtc1W825GrjzNZV0gb5U+0Rnw24z7kkmfLST0hVZjSC
 F6Zc197pqHooba/mPgBn9o6SrUF1clGUXtBSUwNZJq1k+WtaORoivJbztdhyTSJO
 haYBz00HlQ3/Rg3Q9apnmyGOSvuSW1RitUMjF+J3IicxzPy8K+fJGwMkc2ZqXdoA
 8DPFHkk4KZSvO8rQoKgI7vyyDDT8DqeDA6CBWXu2RP6rv/QSZKXZcOsEmPotZtD+
 cx0oJ1OBLxASUU6e5/vdgNNC4I4h1IXZtWO4MDq4T7YQqi6FLO8IylExTPv43ZE2
 N+WeeZ+WSO6wgNTJTdEMguapmEmOGiRMZ3wYKR0e8O/RYT2laa+IJevLXsxPxPFS
 +G90MvRoZMY+LZAsd/kKK0mCyq7v+R7SQM28HrVCwTJc5QxBUS/l5YSXlQ8J1qv/
 poyQ4GSsFyLrZG3HBGZe
 =O0Fe
 -----END PGP SIGNATURE-----
 

feat!: Following generation mode when generating test targets (#2044)

When `python_generation_mode` is `project` or `file` , the generated
`py_test` targets are consistent with `py_library`. However, when
`python_generation_mode` is `package`, it becomes inconsistent: it
requires either `__test__` target or `__test__.py` file to generate
`py_test` in package mode, otherwise it will fall back to file mode.

This PR relaxes this requirement with a new directive
`gazelle:python_generation_mode_per_package_require_test_entry_point`.
Whent it's set to false, Gazelle and generates one `py_test` target per
package in package mode even without entry points.

This allows people to use `gazelle:map_kind` to map `py_test` to a macro
that sets a default test runner, such as
[rules_python_pytest](https://github.com/caseyduquettesc/rules_python_pytest)
or [pytest-bazel](https://pypi.org/project/pytest-bazel/), and generate
one test target per package. The behavior when
`gazelle:python_generation_mode` is "file" or "project" remains the
same.

This fixes #1972 for supporting pytest from Gazelle. With this approach,
people can define a thin macro like this to use py_pytest_main:

```
load("@aspect_rules_py//py:defs.bzl", "py_pytest_main")

def py_test(name, **kwargs):
    py_pytest_main(
        name = "__test__",
        deps = ["@pip_pytest//:pkg"],  # change this to the pytest target in your repo.
    )

    deps = kwargs.pop("deps", [])
    deps.append(":__test__")

    py_test(
        name = name,
        main = ":__test__.py",
        deps = deps,
        **kwargs,
)
```

BREAKING CHANGES:
Without `gazelle:map_kind` or `__test__` target or `__test__.py`, the
package mode will now generate `py_test` without `main` attribute, which
may not be runnable. However, this is already an issue with
"python_generation_mode:project" before this PR.

The default value of
`gazelle:python_generation_mode_per_package_require_test_entry_point` is
true to preserve the current behavior. We will flip that default value
in the future.

---------

Co-authored-by: aignas <240938+aignas@users.noreply.github.com>