Skip to content

Commit 178b8a2

Browse files
committed
refactor visitor methods for parameters list-like nodes
1 parent a843d7c commit 178b8a2

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

sphinx/writers/html5.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,26 @@ def visit_desc_returns(self, node: Element) -> None:
148148
def depart_desc_returns(self, node: Element) -> None:
149149
self.body.append('</span></span>')
150150

151-
def visit_desc_parameterlist(self, node: Element) -> None:
152-
list_left_delim = node.list_left_delim # type: ignore[attr-defined]
153-
self.body.append(f'<span class="sig-paren">{list_left_delim}</span>')
151+
def _visit_sig_parameter_list(
152+
self,
153+
node: Element,
154+
parameter_group: type[Element],
155+
sig_open_paren: str,
156+
sig_close_paren: str,
157+
) -> None:
158+
"""Visit a signature parameters or type parameters list.
159+
160+
The *parameter_group* value is the type of a child node acting as a required parameter
161+
or as a set of contiguous optional parameters.
162+
"""
163+
self.body.append(f'<span class="sig-paren">{sig_open_paren}</span>')
154164
self.is_first_param = True
155165
self.optional_param_level = 0
156166
self.params_left_at_level = 0
157167
self.param_group_index = 0
158168
# Counts as what we call a parameter group either a required parameter, or a
159169
# set of contiguous optional ones.
160-
self.list_is_required_param = [isinstance(c, addnodes.desc_parameter)
161-
for c in node.children]
170+
self.list_is_required_param = [isinstance(c, parameter_group) for c in node.children]
162171
# How many required parameters are left.
163172
self.required_params_left = sum(self.list_is_required_param)
164173
self.param_separator = node.child_text_separator
@@ -167,12 +176,25 @@ def visit_desc_parameterlist(self, node: Element) -> None:
167176
self.body.append('\n\n')
168177
self.body.append(self.starttag(node, 'dl'))
169178
self.param_separator = self.param_separator.rstrip()
179+
self.context.append(sig_close_paren)
170180

171-
def depart_desc_parameterlist(self, node: Element) -> None:
181+
def _depart_sig_parameter_list(self, node: Element) -> None:
172182
if node.get('multi_line_parameter_list'):
173183
self.body.append('</dl>\n\n')
174-
list_right_delim = node.list_right_delim # type: ignore[attr-defined]
175-
self.body.append(f'<span class="sig-paren">{list_right_delim}</span>')
184+
sig_close_paren = self.context.pop()
185+
self.body.append(f'<span class="sig-paren">{sig_close_paren}</span>')
186+
187+
def visit_desc_parameterlist(self, node: Element) -> None:
188+
self._visit_sig_parameter_list(node, addnodes.desc_parameter, '(', ')')
189+
190+
def depart_desc_parameterlist(self, node: Element) -> None:
191+
self._depart_sig_parameter_list(node)
192+
193+
def visit_desc_tparameterlist(self, node: Element) -> None:
194+
self._visit_sig_parameter_list(node, addnodes.desc_tparameter, '[', ']')
195+
196+
def depart_desc_tparameterlist(self, node: Element) -> None:
197+
self._depart_sig_parameter_list(node)
176198

177199
# If required parameters are still to come, then put the comma after
178200
# the parameter. Otherwise, put the comma before. This ensures that
@@ -216,6 +238,12 @@ def depart_desc_parameter(self, node: Element) -> None:
216238
if is_required:
217239
self.param_group_index += 1
218240

241+
def visit_desc_tparameter(self, node: Element) -> None:
242+
self.visit_desc_parameter(node)
243+
244+
def depart_desc_tparameter(self, node: Element) -> None:
245+
self.depart_desc_parameter(node)
246+
219247
def visit_desc_optional(self, node: Element) -> None:
220248
self.params_left_at_level = sum([isinstance(c, addnodes.desc_parameter)
221249
for c in node.children])

0 commit comments

Comments
 (0)