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())
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)
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):
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"])
@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: