We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`stevedore_namespace` documentation shows `str`'s doc string
**Describe the bug**

The `stevedore_namespace` BUILD file symbol has a doc-string, but it isn't shown in `pants help-all`. It instead shows what looks like the doc string for `str`.

https://github.com/pantsbuild/pants/blob/ec86d19cd954cd49a9562880a7c0dbc45632778c/src/python/pants/backend/python/framework/stevedore/target_types.py#L13-L30

To reproduce, enable the stevedore backend and look at `help` or `help-all`:

```shell
PANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help stevedore_namespace
```
```
`stevedore_namespace` BUILD file symbol
---------------------------------------

str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
```

```shell
PANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help-all | \
  jq .name_to_build_file_info.stevedore_namespace
```
```json
{
  "documentation": "str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.",
  "is_target": false,
  "name": "stevedore_namespace",
  "signature": null
}
```

**Pants version**
Seems to be visible in 2.16 through to the currently latest.

**OS**
both

**Additional info**

- Will appear in online docs too after https://github.com/pantsbuild/pantsbuild.org/pull/216
- Relevant issues:
  - https://github.com/pantsbuild/pants/discussions/18117
  - https://github.com/pantsbuild/pants/issues/14832

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/python/pants/backend/python/framework/stevedore/target_types.py`
Content:
```
1 # Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
2 # Licensed under the Apache License, Version 2.0 (see LICENSE).
3 
4 from __future__ import annotations
5 
6 from dataclasses import dataclass
7 
8 from pants.backend.python.target_types import PythonDistribution
9 from pants.engine.target import StringSequenceField, Targets
10 from pants.util.strutil import help_text
11 
12 
13 class StevedoreNamespace(str):
14     f"""Tag a namespace in entry_points as a stevedore namespace.
15 
16     This is required for the entry_point to be visible to dep inference
17     based on the `stevedore_namespaces` field.
18 
19     For example:
20         {PythonDistribution.alias}(
21             ...
22             entry_points={{
23                 stevedore_namespace("a.b.c"): {{
24                     "plugin_name": "some.entry:point",
25                 }},
26             }},
27         )
28     """
29 
30     alias = "stevedore_namespace"
31 
32 
33 # This is a lot like a SpecialCasedDependencies field, but it doesn't list targets directly.
34 class StevedoreNamespacesField(StringSequenceField):
35     alias = "stevedore_namespaces"
36     help = help_text(
37         f"""
38         List the stevedore namespaces required by this target.
39 
40         Code for all `entry_points` on `{PythonDistribution.alias}` targets with
41         these namespaces will be added as dependencies so that they are
42         available on PYTHONPATH during tests. Note that this is only a subset
43         of the `{PythonDistribution.alias}`s dependencies, so the `entry_points`
44         only need to be defined on one `{PythonDistribution.alias}` even if the
45         test only needs some of the `entry_points` namespaces on it.
46 
47         Plus, an `entry_points.txt` file will be generated in the sandbox so that
48         each of the `{PythonDistribution.alias}`s appear to be "installed". The
49         `entry_points.txt` file will only include the namespaces requested on this
50         field. Without this, stevedore would not be able to look up plugins in
51         the setuptools `entry_points` metadata.
52 
53         NOTE: Each `{PythonDistribution.alias}` must opt-in to being included in
54         this repo-wide inference by tagging the namespaces with
55         `{StevedoreNamespace.alias}("my.stevedore.extension")`.
56 
57         The stevedore namespace format (`my.stevedore.extension`) is similar
58         to a Python namespace.
59         """
60     )
61 
62 
63 class AllStevedoreExtensionTargets(Targets):
64     pass
65 
66 
67 @dataclass(frozen=True)
68 class StevedoreNamespacesProviderTargetsRequest:
69     stevedore_namespaces: StevedoreNamespacesField
70 
71 
72 class StevedoreExtensionTargets(Targets):
73     pass
74
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/python/pants/backend/python/framework/stevedore/target_types.py b/src/python/pants/backend/python/framework/stevedore/target_types.py
--- a/src/python/pants/backend/python/framework/stevedore/target_types.py
+++ b/src/python/pants/backend/python/framework/stevedore/target_types.py
@@ -11,20 +11,22 @@
 
 
 class StevedoreNamespace(str):
-    f"""Tag a namespace in entry_points as a stevedore namespace.
+    """Tag a namespace in entry_points as a stevedore namespace.
 
     This is required for the entry_point to be visible to dep inference
     based on the `stevedore_namespaces` field.
 
     For example:
-        {PythonDistribution.alias}(
-            ...
-            entry_points={{
-                stevedore_namespace("a.b.c"): {{
-                    "plugin_name": "some.entry:point",
-                }},
-            }},
-        )
+    ```python
+    python_distribution(
+        ...
+        entry_points={
+            stevedore_namespace("a.b.c"): {
+                "plugin_name": "some.entry:point",
+            },
+        },
+    )
+    ```
     """
 
     alias = "stevedore_namespace"

{"golden_diff": "diff --git a/src/python/pants/backend/python/framework/stevedore/target_types.py b/src/python/pants/backend/python/framework/stevedore/target_types.py\n--- a/src/python/pants/backend/python/framework/stevedore/target_types.py\n+++ b/src/python/pants/backend/python/framework/stevedore/target_types.py\n@@ -11,20 +11,22 @@\n \n \n class StevedoreNamespace(str):\n-    f\"\"\"Tag a namespace in entry_points as a stevedore namespace.\n+    \"\"\"Tag a namespace in entry_points as a stevedore namespace.\n \n     This is required for the entry_point to be visible to dep inference\n     based on the `stevedore_namespaces` field.\n \n     For example:\n-        {PythonDistribution.alias}(\n-            ...\n-            entry_points={{\n-                stevedore_namespace(\"a.b.c\"): {{\n-                    \"plugin_name\": \"some.entry:point\",\n-                }},\n-            }},\n-        )\n+    ```python\n+    python_distribution(\n+        ...\n+        entry_points={\n+            stevedore_namespace(\"a.b.c\"): {\n+                \"plugin_name\": \"some.entry:point\",\n+            },\n+        },\n+    )\n+    ```\n     \"\"\"\n \n     alias = \"stevedore_namespace\"\n", "issue": "`stevedore_namespace` documentation shows `str`'s doc string\n**Describe the bug**\r\n\r\nThe `stevedore_namespace` BUILD file symbol has a doc-string, but it isn't shown in `pants help-all`. It instead shows what looks like the doc string for `str`.\r\n\r\nhttps://github.com/pantsbuild/pants/blob/ec86d19cd954cd49a9562880a7c0dbc45632778c/src/python/pants/backend/python/framework/stevedore/target_types.py#L13-L30\r\n\r\nTo reproduce, enable the stevedore backend and look at `help` or `help-all`:\r\n\r\n```shell\r\nPANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help stevedore_namespace\r\n```\r\n```\r\n`stevedore_namespace` BUILD file symbol\r\n---------------------------------------\r\n\r\nstr(object='') -> str\r\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\r\n\r\nCreate a new string object from the given object. If encoding or\r\nerrors is specified, then the object must expose a data buffer\r\nthat will be decoded using the given encoding and error handler.\r\nOtherwise, returns the result of object.__str__() (if defined)\r\nor repr(object).\r\nencoding defaults to sys.getdefaultencoding().\r\nerrors defaults to 'strict'.\r\n```\r\n\r\n```shell\r\nPANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help-all | \\\r\n  jq .name_to_build_file_info.stevedore_namespace\r\n```\r\n```json\r\n{\r\n  \"documentation\": \"str(object='') -> str\\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\\n\\nCreate a new string object from the given object. If encoding or\\nerrors is specified, then the object must expose a data buffer\\nthat will be decoded using the given encoding and error handler.\\nOtherwise, returns the result of object.__str__() (if defined)\\nor repr(object).\\nencoding defaults to sys.getdefaultencoding().\\nerrors defaults to 'strict'.\",\r\n  \"is_target\": false,\r\n  \"name\": \"stevedore_namespace\",\r\n  \"signature\": null\r\n}\r\n```\r\n\r\n**Pants version**\r\nSeems to be visible in 2.16 through to the currently latest.\r\n\r\n**OS**\r\nboth\r\n\r\n**Additional info**\r\n\r\n- Will appear in online docs too after https://github.com/pantsbuild/pantsbuild.org/pull/216\r\n- Relevant issues:\r\n  - https://github.com/pantsbuild/pants/discussions/18117\r\n  - https://github.com/pantsbuild/pants/issues/14832\n", "before_files": [{"content": "# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).\n# Licensed under the Apache License, Version 2.0 (see LICENSE).\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\nfrom pants.backend.python.target_types import PythonDistribution\nfrom pants.engine.target import StringSequenceField, Targets\nfrom pants.util.strutil import help_text\n\n\nclass StevedoreNamespace(str):\n    f\"\"\"Tag a namespace in entry_points as a stevedore namespace.\n\n    This is required for the entry_point to be visible to dep inference\n    based on the `stevedore_namespaces` field.\n\n    For example:\n        {PythonDistribution.alias}(\n            ...\n            entry_points={{\n                stevedore_namespace(\"a.b.c\"): {{\n                    \"plugin_name\": \"some.entry:point\",\n                }},\n            }},\n        )\n    \"\"\"\n\n    alias = \"stevedore_namespace\"\n\n\n# This is a lot like a SpecialCasedDependencies field, but it doesn't list targets directly.\nclass StevedoreNamespacesField(StringSequenceField):\n    alias = \"stevedore_namespaces\"\n    help = help_text(\n        f\"\"\"\n        List the stevedore namespaces required by this target.\n\n        Code for all `entry_points` on `{PythonDistribution.alias}` targets with\n        these namespaces will be added as dependencies so that they are\n        available on PYTHONPATH during tests. Note that this is only a subset\n        of the `{PythonDistribution.alias}`s dependencies, so the `entry_points`\n        only need to be defined on one `{PythonDistribution.alias}` even if the\n        test only needs some of the `entry_points` namespaces on it.\n\n        Plus, an `entry_points.txt` file will be generated in the sandbox so that\n        each of the `{PythonDistribution.alias}`s appear to be \"installed\". The\n        `entry_points.txt` file will only include the namespaces requested on this\n        field. Without this, stevedore would not be able to look up plugins in\n        the setuptools `entry_points` metadata.\n\n        NOTE: Each `{PythonDistribution.alias}` must opt-in to being included in\n        this repo-wide inference by tagging the namespaces with\n        `{StevedoreNamespace.alias}(\"my.stevedore.extension\")`.\n\n        The stevedore namespace format (`my.stevedore.extension`) is similar\n        to a Python namespace.\n        \"\"\"\n    )\n\n\nclass AllStevedoreExtensionTargets(Targets):\n    pass\n\n\n@dataclass(frozen=True)\nclass StevedoreNamespacesProviderTargetsRequest:\n    stevedore_namespaces: StevedoreNamespacesField\n\n\nclass StevedoreExtensionTargets(Targets):\n    pass\n", "path": "src/python/pants/backend/python/framework/stevedore/target_types.py"}], "after_files": [{"content": "# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).\n# Licensed under the Apache License, Version 2.0 (see LICENSE).\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\nfrom pants.backend.python.target_types import PythonDistribution\nfrom pants.engine.target import StringSequenceField, Targets\nfrom pants.util.strutil import help_text\n\n\nclass StevedoreNamespace(str):\n    \"\"\"Tag a namespace in entry_points as a stevedore namespace.\n\n    This is required for the entry_point to be visible to dep inference\n    based on the `stevedore_namespaces` field.\n\n    For example:\n    ```python\n    python_distribution(\n        ...\n        entry_points={\n            stevedore_namespace(\"a.b.c\"): {\n                \"plugin_name\": \"some.entry:point\",\n            },\n        },\n    )\n    ```\n    \"\"\"\n\n    alias = \"stevedore_namespace\"\n\n\n# This is a lot like a SpecialCasedDependencies field, but it doesn't list targets directly.\nclass StevedoreNamespacesField(StringSequenceField):\n    alias = \"stevedore_namespaces\"\n    help = help_text(\n        f\"\"\"\n        List the stevedore namespaces required by this target.\n\n        Code for all `entry_points` on `{PythonDistribution.alias}` targets with\n        these namespaces will be added as dependencies so that they are\n        available on PYTHONPATH during tests. Note that this is only a subset\n        of the `{PythonDistribution.alias}`s dependencies, so the `entry_points`\n        only need to be defined on one `{PythonDistribution.alias}` even if the\n        test only needs some of the `entry_points` namespaces on it.\n\n        Plus, an `entry_points.txt` file will be generated in the sandbox so that\n        each of the `{PythonDistribution.alias}`s appear to be \"installed\". The\n        `entry_points.txt` file will only include the namespaces requested on this\n        field. Without this, stevedore would not be able to look up plugins in\n        the setuptools `entry_points` metadata.\n\n        NOTE: Each `{PythonDistribution.alias}` must opt-in to being included in\n        this repo-wide inference by tagging the namespaces with\n        `{StevedoreNamespace.alias}(\"my.stevedore.extension\")`.\n\n        The stevedore namespace format (`my.stevedore.extension`) is similar\n        to a Python namespace.\n        \"\"\"\n    )\n\n\nclass AllStevedoreExtensionTargets(Targets):\n    pass\n\n\n@dataclass(frozen=True)\nclass StevedoreNamespacesProviderTargetsRequest:\n    stevedore_namespaces: StevedoreNamespacesField\n\n\nclass StevedoreExtensionTargets(Targets):\n    pass\n", "path": "src/python/pants/backend/python/framework/stevedore/target_types.py"}]}