From d131bc95b8781ea934cb8dab7938bb2b68797518 Mon Sep 17 00:00:00 2001 From: souradeep-das Date: Mon, 16 Jun 2025 22:40:47 +0200 Subject: [PATCH 1/3] fix: class attribute docstring renders --- src/docc/plugins/python/cst.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/docc/plugins/python/cst.py b/src/docc/plugins/python/cst.py index 6e7828a..a1477b6 100644 --- a/src/docc/plugins/python/cst.py +++ b/src/docc/plugins/python/cst.py @@ -560,8 +560,15 @@ def enter_class_def(self, node: CstNode, cst_node: cst.ClassDef) -> Visit: self.old_stack.append(class_context) self.old_stack.append(body_context) - for cst_statement in cst_node.body.body: - self.old_stack[-1].child_offset += 1 + for idx, cst_statement in enumerate(cst_node.body.body): + self.old_stack[-1].child_offset = idx + if ( + isinstance(cst_statement, cst.SimpleStatementLine) + and len(cst_statement.body) == 1 + and isinstance(cst_statement.body[0], cst.Expr) + and isinstance(cst_statement.body[0].value, cst.SimpleString) + ): + continue statement = body.find_child(cst_statement) statement.visit(self) @@ -676,7 +683,7 @@ def _assign_docstring(self) -> Optional[nodes.Docstring]: try: line_parent_context = self.old_stack[-2] - sibling_index = line_parent_context.child_offset + 1 + sibling_index = line_parent_context.child_offset + 2 sibling = line_parent_context.node.children[sibling_index] except IndexError: return None From c060f6f826373d46e319a32eb4f73cdf88626e9a Mon Sep 17 00:00:00 2001 From: souradeep-das Date: Tue, 17 Jun 2025 00:33:12 +0200 Subject: [PATCH 2/3] fix: docstrings for constants outside class --- src/docc/plugins/python/cst.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/docc/plugins/python/cst.py b/src/docc/plugins/python/cst.py index a1477b6..92f9bc6 100644 --- a/src/docc/plugins/python/cst.py +++ b/src/docc/plugins/python/cst.py @@ -683,7 +683,10 @@ def _assign_docstring(self) -> Optional[nodes.Docstring]: try: line_parent_context = self.old_stack[-2] - sibling_index = line_parent_context.child_offset + 2 + if isinstance(line_parent_context.node.cst_node, cst.Module): + sibling_index = line_parent_context.child_offset + 1 + else: + sibling_index = line_parent_context.child_offset + 2 sibling = line_parent_context.node.children[sibling_index] except IndexError: return None From 960a9b867b0fc225520b4ec4eefacb63a061a239 Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Tue, 17 Jun 2025 14:53:28 -0400 Subject: [PATCH 3/3] Typing/spelling fixes --- src/docc/plugins/python/cst.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/docc/plugins/python/cst.py b/src/docc/plugins/python/cst.py index 92f9bc6..925541c 100644 --- a/src/docc/plugins/python/cst.py +++ b/src/docc/plugins/python/cst.py @@ -560,15 +560,14 @@ def enter_class_def(self, node: CstNode, cst_node: cst.ClassDef) -> Visit: self.old_stack.append(class_context) self.old_stack.append(body_context) - for idx, cst_statement in enumerate(cst_node.body.body): - self.old_stack[-1].child_offset = idx - if ( - isinstance(cst_statement, cst.SimpleStatementLine) - and len(cst_statement.body) == 1 - and isinstance(cst_statement.body[0], cst.Expr) - and isinstance(cst_statement.body[0].value, cst.SimpleString) - ): - continue + for index, cst_statement in enumerate(cst_node.body.body): + self.old_stack[-1].child_offset = index + if isinstance(cst_statement, cst.SimpleStatementLine): + if len(cst_statement.body) == 1: + cst_first = cst_statement.body[0] + if isinstance(cst_first, cst.Expr): + if isinstance(cst_first.value, cst.SimpleString): + continue statement = body.find_child(cst_statement) statement.visit(self)