fix(gazelle) Register pyi_deps as ResolveAttrs (#3037)

Fix an issue in https://github.com/bazel-contrib/rules_python/pull/3014
where, when all type-checking dependencies are removed from a file, the
corresponding target's `pyi_deps` doesn't get cleaned up. I traced this
back to `ResolveAttrs`, though I'm not entirely sure of what other
behaviors this may trigger. (Currently, removing `deps` from
`ResolveAttrs` doesn't break any existing test case)

(No new changelog entry since this is a fix to an unreleased feature
that is already in the changelog)
diff --git a/gazelle/python/kinds.go b/gazelle/python/kinds.go
index 7a0639a..ff3f6ce 100644
--- a/gazelle/python/kinds.go
+++ b/gazelle/python/kinds.go
@@ -46,6 +46,7 @@
 		},
 		ResolveAttrs: map[string]bool{
 			"deps": true,
+			"pyi_deps": true,
 		},
 	},
 	pyLibraryKind: {
@@ -62,6 +63,7 @@
 		},
 		ResolveAttrs: map[string]bool{
 			"deps": true,
+			"pyi_deps": true,
 		},
 	},
 	pyTestKind: {
@@ -78,6 +80,7 @@
 		},
 		ResolveAttrs: map[string]bool{
 			"deps": true,
+			"pyi_deps": true,
 		},
 	},
 }
diff --git a/gazelle/python/testdata/clear_out_deps/BUILD.in b/gazelle/python/testdata/clear_out_deps/BUILD.in
new file mode 100644
index 0000000..99d122a
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/BUILD.in
@@ -0,0 +1 @@
+# gazelle:python_generate_pyi_deps true
diff --git a/gazelle/python/testdata/clear_out_deps/BUILD.out b/gazelle/python/testdata/clear_out_deps/BUILD.out
new file mode 100644
index 0000000..99d122a
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/BUILD.out
@@ -0,0 +1 @@
+# gazelle:python_generate_pyi_deps true
diff --git a/gazelle/python/testdata/clear_out_deps/README.md b/gazelle/python/testdata/clear_out_deps/README.md
new file mode 100644
index 0000000..53b62a4
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/README.md
@@ -0,0 +1,9 @@
+# Clearing deps / pyi_deps
+
+This test case asserts that an existing `py_library` specifying `deps` and
+`pyi_deps` have these attributes removed if the corresponding imports are
+removed.
+
+`a/BUILD.in` declares `deps`/`pyi_deps` on non-existing libraries, `b/BUILD.in` declares dependency on `//a`
+without a matching import, and `c/BUILD.in` declares both `deps` and `pyi_deps` as `["//a", "//b"]`, but
+it should have only `//a` as `deps` and only `//b` as `pyi_deps`.
diff --git a/gazelle/python/testdata/clear_out_deps/WORKSPACE b/gazelle/python/testdata/clear_out_deps/WORKSPACE
new file mode 100644
index 0000000..faff6af
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/WORKSPACE
@@ -0,0 +1 @@
+# This is a Bazel workspace for the Gazelle test data.
diff --git a/gazelle/python/testdata/clear_out_deps/a/BUILD.in b/gazelle/python/testdata/clear_out_deps/a/BUILD.in
new file mode 100644
index 0000000..832683b
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/a/BUILD.in
@@ -0,0 +1,9 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "a",
+    srcs = ["__init__.py"],
+    pyi_deps = ["//:nonexistent_pyi_dep"],
+    visibility = ["//:__subpackages__"],
+    deps = ["//nonexistent_dep"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/a/BUILD.out b/gazelle/python/testdata/clear_out_deps/a/BUILD.out
new file mode 100644
index 0000000..2668e97
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/a/BUILD.out
@@ -0,0 +1,7 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "a",
+    srcs = ["__init__.py"],
+    visibility = ["//:__subpackages__"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/a/__init__.py b/gazelle/python/testdata/clear_out_deps/a/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/a/__init__.py
diff --git a/gazelle/python/testdata/clear_out_deps/b/BUILD.in b/gazelle/python/testdata/clear_out_deps/b/BUILD.in
new file mode 100644
index 0000000..14cce87
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/b/BUILD.in
@@ -0,0 +1,9 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "b",
+    srcs = ["__init__.py"],
+    pyi_deps = ["//a"],
+    visibility = ["//:__subpackages__"],
+    deps = ["//a"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/b/BUILD.out b/gazelle/python/testdata/clear_out_deps/b/BUILD.out
new file mode 100644
index 0000000..7305850
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/b/BUILD.out
@@ -0,0 +1,7 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "b",
+    srcs = ["__init__.py"],
+    visibility = ["//:__subpackages__"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/b/__init__.py b/gazelle/python/testdata/clear_out_deps/b/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/b/__init__.py
diff --git a/gazelle/python/testdata/clear_out_deps/c/BUILD.in b/gazelle/python/testdata/clear_out_deps/c/BUILD.in
new file mode 100644
index 0000000..10ace67
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/c/BUILD.in
@@ -0,0 +1,9 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "c",
+    srcs = ["__init__.py"],
+    pyi_deps = ["//a", "//b"],
+    visibility = ["//:__subpackages__"],
+    deps = ["//a", "//b"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/c/BUILD.out b/gazelle/python/testdata/clear_out_deps/c/BUILD.out
new file mode 100644
index 0000000..d1aa97e
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/c/BUILD.out
@@ -0,0 +1,9 @@
+load("@rules_python//python:defs.bzl", "py_library")
+
+py_library(
+    name = "c",
+    srcs = ["__init__.py"],
+    pyi_deps = ["//b"],
+    visibility = ["//:__subpackages__"],
+    deps = ["//a"],
+)
diff --git a/gazelle/python/testdata/clear_out_deps/c/__init__.py b/gazelle/python/testdata/clear_out_deps/c/__init__.py
new file mode 100644
index 0000000..32d017f
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/c/__init__.py
@@ -0,0 +1,6 @@
+from typing import TYPE_CHECKING
+
+import a
+
+if TYPE_CHECKING:
+    import b
diff --git a/gazelle/python/testdata/clear_out_deps/test.yaml b/gazelle/python/testdata/clear_out_deps/test.yaml
new file mode 100644
index 0000000..88a0cbf
--- /dev/null
+++ b/gazelle/python/testdata/clear_out_deps/test.yaml
@@ -0,0 +1,2 @@
+
+---