fix(gazelle): Do not build proto targets with default Gazelle (#3216)

Fixes #3209.

Revert the change to `//:gazelle_binary` so that it once again only
generates python code. We then create a new, private target
`//:_gazelle_binary_with_proto` that gets used by tests.

Update docs accordingly.

Longer term, I'd like to adjust the `test.yaml` file to include a
section:

```yaml
config:
  gazelle_binary: _gazelle_binary_with_proto
```

So that test cases that need to generate `(py_)proto_library` targets
can use the multi-lang Gazelle binary and that tests that do _not_ need
to generate proto targets can use the single-lang Gazelle binary.

However, there were some minor roadblocks in doing so and thus I'm doing
this quick-to-implement method instead.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82a66ed..3f9cdf9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -182,6 +182,8 @@
   dep is not added to the {obj}`py_test` target.
 * (gazelle) New directive `gazelle:python_generate_proto`; when `true`,
   Gazelle generates `py_proto_library` rules for `proto_library`. `false` by default.
+    * Note: Users must manually configure their Gazelle target to support the
+      proto language.
 * (gazelle) New directive `gazelle:python_proto_naming_convention`; controls
   naming of `py_proto_library` rules.
 
diff --git a/gazelle/docs/directives.md b/gazelle/docs/directives.md
index ecc30a9..a553226 100644
--- a/gazelle/docs/directives.md
+++ b/gazelle/docs/directives.md
@@ -636,6 +636,30 @@
 `MODULE.bazel`, and otherwise falling back to `@com_google_protobuf` for
 compatibility with `WORKSPACE`.
 
+:::{note}
+In order to use this, you must manually configure Gazelle to target multiple
+languages. Place this in your root `BUILD.bazel` file:
+
+```
+load("@bazel_gazelle//:def.bzl", "gazelle", "gazelle_binary")
+
+gazelle_binary(
+    name = "gazelle_multilang",
+    languages = [
+        "@bazel_gazelle//language/proto",
+        # The python gazelle plugin must be listed _after_ the proto language.
+        "@rules_python_gazelle_plugin//python",
+    ],
+)
+
+gazelle(
+    name = "gazelle",
+    gazelle = "//:gazelle_multilang",
+)
+```
+:::
+
+
 For example, in a package with `# gazelle:python_generate_proto true` and a
 `foo.proto`, if you have both the proto extension and the Python extension
 loaded into Gazelle, you'll get something like:
diff --git a/gazelle/python/BUILD.bazel b/gazelle/python/BUILD.bazel
index b6ca8ad..b988e49 100644
--- a/gazelle/python/BUILD.bazel
+++ b/gazelle/python/BUILD.bazel
@@ -70,6 +70,7 @@
     name = "python_test",
     srcs = ["python_test.go"],
     data = [
+        ":_gazelle_binary_with_proto",
         ":gazelle_binary",
     ],
     test_dirs = glob(
@@ -90,11 +91,18 @@
 
 gazelle_binary(
     name = "gazelle_binary",
+    languages = [":python"],
+    visibility = ["//visibility:public"],
+)
+
+# Only used by testing
+gazelle_binary(
+    name = "_gazelle_binary_with_proto",
     languages = [
         "@bazel_gazelle//language/proto",
         ":python",
     ],
-    visibility = ["//visibility:public"],
+    visibility = ["//visibility:private"],
 )
 
 filegroup(
diff --git a/gazelle/python/python_test.go b/gazelle/python/python_test.go
index dd8c241..e7b95cc 100644
--- a/gazelle/python/python_test.go
+++ b/gazelle/python/python_test.go
@@ -38,7 +38,7 @@
 const (
 	extensionDir      = "python" + string(os.PathSeparator)
 	testDataPath      = extensionDir + "testdata" + string(os.PathSeparator)
-	gazelleBinaryName = "gazelle_binary"
+	gazelleBinaryName = "_gazelle_binary_with_proto"
 )
 
 func TestGazelleBinary(t *testing.T) {