mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
gh-104683: Argument Clinic: Params now render their own docstrings (#107790)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
65ce3652fa
commit
1b3f5f24af
2 changed files with 21 additions and 18 deletions
|
@ -833,8 +833,8 @@ class ClinicParserTest(TestCase):
|
|||
|
||||
def checkDocstring(self, fn, expected):
|
||||
self.assertTrue(hasattr(fn, "docstring"))
|
||||
self.assertEqual(fn.docstring.strip(),
|
||||
dedent(expected).strip())
|
||||
self.assertEqual(dedent(expected).strip(),
|
||||
fn.docstring.strip())
|
||||
|
||||
def test_trivial(self):
|
||||
parser = DSLParser(_make_clinic())
|
||||
|
@ -997,8 +997,12 @@ class ClinicParserTest(TestCase):
|
|||
|
||||
path: str
|
||||
Path to be examined
|
||||
Ensure that multiple lines are indented correctly.
|
||||
|
||||
Perform a stat system call on the given path.
|
||||
|
||||
Ensure that multiple lines are indented correctly.
|
||||
Ensure that multiple lines are indented correctly.
|
||||
""")
|
||||
self.checkDocstring(function, """
|
||||
stat($module, /, path)
|
||||
|
@ -1008,6 +1012,10 @@ class ClinicParserTest(TestCase):
|
|||
|
||||
path
|
||||
Path to be examined
|
||||
Ensure that multiple lines are indented correctly.
|
||||
|
||||
Ensure that multiple lines are indented correctly.
|
||||
Ensure that multiple lines are indented correctly.
|
||||
""")
|
||||
|
||||
def test_docstring_trailing_whitespace(self):
|
||||
|
|
|
@ -2775,6 +2775,13 @@ class Parameter:
|
|||
else:
|
||||
return f'"argument {i}"'
|
||||
|
||||
def render_docstring(self) -> str:
|
||||
add, out = text_accumulator()
|
||||
add(f" {self.name}\n")
|
||||
for line in self.docstring.split("\n"):
|
||||
add(f" {line}\n")
|
||||
return out().rstrip()
|
||||
|
||||
|
||||
CConverterClassT = TypeVar("CConverterClassT", bound=type["CConverter"])
|
||||
|
||||
|
@ -5686,23 +5693,11 @@ class DSLParser:
|
|||
@staticmethod
|
||||
def format_docstring_parameters(params: list[Parameter]) -> str:
|
||||
"""Create substitution text for {parameters}"""
|
||||
text, add, output = _text_accumulator()
|
||||
spacer_line = False
|
||||
for param in params:
|
||||
docstring = param.docstring.strip()
|
||||
if not docstring:
|
||||
continue
|
||||
if spacer_line:
|
||||
add, output = text_accumulator()
|
||||
for p in params:
|
||||
if p.docstring:
|
||||
add(p.render_docstring())
|
||||
add('\n')
|
||||
else:
|
||||
spacer_line = True
|
||||
add(" ")
|
||||
add(param.name)
|
||||
add('\n')
|
||||
stripped = rstrip_lines(docstring)
|
||||
add(textwrap.indent(stripped, " "))
|
||||
if text:
|
||||
add('\n')
|
||||
return output()
|
||||
|
||||
def format_docstring(self) -> str:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue