Skip to content

Commit df6e636

Browse files
committed
fix: Keep parentheses around tuples, except within subscripts
Issue mkdocstrings/python#88: mkdocstrings/python#88
1 parent 52a7348 commit df6e636

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

src/griffe/agents/nodes/_expressions.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -335,19 +335,38 @@ def _build_subscript(
335335
parent: Module | Class,
336336
*,
337337
parse_strings: bool = False,
338+
literal_strings: bool = False,
339+
in_subscript: bool = False,
338340
**kwargs: Any,
339341
) -> Expression:
340342
left = _build(node.value, parent, **kwargs)
341343
if parse_strings:
342-
literal_strings = left.full in {"typing.Literal", "typing_extensions.Literal"} # type: ignore[union-attr]
343-
subscript = _build(node.slice, parent, parse_strings=True, **{**kwargs, "literal_strings": literal_strings})
344+
if left.full in {"typing.Literal", "typing_extensions.Literal"}: # type: ignore[union-attr]
345+
literal_strings = True
346+
subscript = _build(
347+
node.slice,
348+
parent,
349+
parse_strings=True,
350+
literal_strings=literal_strings,
351+
in_subscript=True,
352+
**kwargs,
353+
)
344354
else:
345-
subscript = _build(node.slice, parent, **kwargs)
355+
subscript = _build(node.slice, parent, in_subscript=True, **kwargs)
346356
return Expression(left, "[", subscript, "]")
347357

348358

349-
def _build_tuple(node: ast.Tuple, parent: Module | Class, **kwargs: Any) -> Expression:
350-
return Expression(*_join([_build(el, parent, **kwargs) for el in node.elts], ", "))
359+
def _build_tuple(
360+
node: ast.Tuple,
361+
parent: Module | Class,
362+
*,
363+
in_subscript: bool = False,
364+
**kwargs: Any,
365+
) -> Expression:
366+
values = _join([_build(el, parent, **kwargs) for el in node.elts], ", ")
367+
if in_subscript:
368+
return Expression(*values)
369+
return Expression("(", *values, ")")
351370

352371

353372
def _build_uadd(node: ast.UAdd, parent: Module | Class, **kwargs: Any) -> str:

tests/test_nodes.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@
6464
"a if (a := b) else c",
6565
# starred
6666
"a(*b, **c)",
67+
# structs
68+
"(a, b, c)",
69+
"{a, b, c}",
70+
"{a: b, c: d}",
71+
"[a, b, c]",
6772
]
6873

6974

0 commit comments

Comments
 (0)