diff --git a/libcst/nodes/tests/test_number.py b/libcst/nodes/tests/test_number.py index 67be699b..ca611c68 100644 --- a/libcst/nodes/tests/test_number.py +++ b/libcst/nodes/tests/test_number.py @@ -61,7 +61,34 @@ class NumberTest(CSTNodeTest): parse_expression, CodeRange.create((1, 0), (1, 3)), ), - # TODO: add test cases for "((5))" and "(+((5)))" + # multiple nested parenthesis + ( + cst.Number( + cst.Integer( + "5", + lpar=(cst.LeftParen(), cst.LeftParen()), + rpar=(cst.RightParen(), cst.RightParen()), + ) + ), + "((5))", + parse_expression, + CodeRange.create((1, 0), (1, 5)), + ), + ( + cst.Number( + lpar=(cst.LeftParen(),), + operator=cst.Plus(), + number=cst.Integer( + "5", + lpar=(cst.LeftParen(), cst.LeftParen()), + rpar=(cst.RightParen(), cst.RightParen()), + ), + rpar=(cst.RightParen(),), + ), + "(+((5)))", + parse_expression, + CodeRange.create((1, 1), (1, 7)), + ), ) ) def test_valid( diff --git a/libcst/parser/_conversions/expression.py b/libcst/parser/_conversions/expression.py index fde47282..19c1bba4 100644 --- a/libcst/parser/_conversions/expression.py +++ b/libcst/parser/_conversions/expression.py @@ -790,7 +790,8 @@ def convert_atom_parens(config: ParserConfig, children: Sequence[Any]) -> Any: return WithLeadingWhitespace( inner_atom.with_changes( number=inner_atom.number.with_changes( - lpar=(lpar, *inner_atom.lpar), rpar=(*inner_atom.rpar, rpar) + lpar=(lpar, *inner_atom.number.lpar), + rpar=(*inner_atom.number.rpar, rpar), ) ), lpar_tok.whitespace_before,