diff --git a/CHANGELOG.md b/CHANGELOG.md index 43e05b6dd0..b17f937dc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,11 @@ END_UNRELEASED_TEMPLATE {#v0-0-0-fixed} ### Fixed +* (gazelle) `py_library` and `py_test` targets with missing source files are now + removed by Gazelle, matching the existing behavior for `py_binary` targets. + Previously, deleting a `.py` file in per-file generation mode left orphaned + targets in BUILD files, causing build failures + ([#3375](https://github.com/bazel-contrib/rules_python/issues/3375)). * (bootstrap) Fixed a potential race condition with symlink creation during startup. * (gazelle) Fixed handling of auto-included `__init__.py` files when generating `py_binary` diff --git a/gazelle/MODULE.bazel b/gazelle/MODULE.bazel index cff6341a2b..d2721d15ae 100644 --- a/gazelle/MODULE.bazel +++ b/gazelle/MODULE.bazel @@ -8,6 +8,12 @@ bazel_dep(name = "bazel_skylib", version = "1.8.2") bazel_dep(name = "rules_python", version = "0.18.0") bazel_dep(name = "rules_go", version = "0.59.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "gazelle", version = "0.47.0", repo_name = "bazel_gazelle") + +git_override( + module_name = "gazelle", + commit = "73215247ebf853131af5615a3d460c43530272f1", + remote = "https://github.com/taowang487/bazel-gazelle.git", +) bazel_dep(name = "rules_cc", version = "0.0.16") local_path_override( diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.in b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.in new file mode 100644 index 0000000000..de50039c9b --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.in @@ -0,0 +1,27 @@ +load(":mylib.bzl", "my_py_library", "my_py_test") + +# gazelle:python_generation_mode file +# gazelle:alias_kind my_py_library py_library +# gazelle:alias_kind my_py_test py_test + +my_py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], +) + +my_py_library( + name = "deleted_lib", + srcs = ["deleted.py"], + visibility = ["//:__subpackages__"], +) + +my_py_test( + name = "bar_test", + srcs = ["bar_test.py"], +) + +my_py_test( + name = "deleted_test", + srcs = ["deleted_test.py"], +) diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.out b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.out new file mode 100644 index 0000000000..4aa2e6cb4a --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/BUILD.out @@ -0,0 +1,16 @@ +load(":mylib.bzl", "my_py_library", "my_py_test") + +# gazelle:python_generation_mode file +# gazelle:alias_kind my_py_library py_library +# gazelle:alias_kind my_py_test py_test + +my_py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], +) + +my_py_test( + name = "bar_test", + srcs = ["bar_test.py"], +) diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/WORKSPACE b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/WORKSPACE new file mode 100644 index 0000000000..faff6af87a --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/WORKSPACE @@ -0,0 +1 @@ +# This is a Bazel workspace for the Gazelle test data. diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/bar.py b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/bar.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/bar_test.py b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/bar_test.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gazelle/python/testdata/remove_invalid_per_file_alias_kind/test.yaml b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/test.yaml new file mode 100644 index 0000000000..ed97d539c0 --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_alias_kind/test.yaml @@ -0,0 +1 @@ +--- diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.in b/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.in new file mode 100644 index 0000000000..fc956023d8 --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.in @@ -0,0 +1,33 @@ +load("@rules_python//python:defs.bzl", "py_library") +load(":mylib.bzl", "my_py_binary", "my_py_test") + +# gazelle:python_generation_mode file +# gazelle:map_kind py_binary my_py_binary :mylib.bzl +# gazelle:map_kind py_test my_py_test :mylib.bzl + +py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], +) + +py_library( + name = "deleted_lib", + srcs = ["deleted.py"], + visibility = ["//:__subpackages__"], +) + +my_py_binary( + name = "deleted_bin", + srcs = ["deleted_bin.py"], +) + +my_py_test( + name = "bar_test", + srcs = ["bar_test.py"], +) + +my_py_test( + name = "deleted_test", + srcs = ["deleted_test.py"], +) diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.out b/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.out new file mode 100644 index 0000000000..9cd5928f6b --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_map_kind/BUILD.out @@ -0,0 +1,17 @@ +load("@rules_python//python:defs.bzl", "py_library") +load(":mylib.bzl", "my_py_test") + +# gazelle:python_generation_mode file +# gazelle:map_kind py_binary my_py_binary :mylib.bzl +# gazelle:map_kind py_test my_py_test :mylib.bzl + +py_library( + name = "bar", + srcs = ["bar.py"], + visibility = ["//:__subpackages__"], +) + +my_py_test( + name = "bar_test", + srcs = ["bar_test.py"], +) diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/WORKSPACE b/gazelle/python/testdata/remove_invalid_per_file_map_kind/WORKSPACE new file mode 100644 index 0000000000..faff6af87a --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_map_kind/WORKSPACE @@ -0,0 +1 @@ +# This is a Bazel workspace for the Gazelle test data. diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/bar.py b/gazelle/python/testdata/remove_invalid_per_file_map_kind/bar.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/bar_test.py b/gazelle/python/testdata/remove_invalid_per_file_map_kind/bar_test.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/gazelle/python/testdata/remove_invalid_per_file_map_kind/test.yaml b/gazelle/python/testdata/remove_invalid_per_file_map_kind/test.yaml new file mode 100644 index 0000000000..ed97d539c0 --- /dev/null +++ b/gazelle/python/testdata/remove_invalid_per_file_map_kind/test.yaml @@ -0,0 +1 @@ +---