diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return.py index 96960b4c3c..4b9c1bbe25 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/return.py @@ -14,3 +14,35 @@ return ( len(node.parents) for node in self.node_map.values() ) ) + +# Regression tests for https://github.com/astral-sh/ruff/issues/8042 +def f(): + return ( + self.get_filename() + ".csv" + + "text/csv" + + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return ( + self.get_filename() + ".csv" + "text/csv", + output.getvalue().encode("utf-8----------------") + ) + +def f(): + return ( + self.get_filename() + ".csv", + "text/csv", + output.getvalue().encode("utf-8----------------") + ) + + +def f(): + return self.get_filename() + ".csv" + "text/csv" + output.getvalue().encode("utf-8----------------"), + +def f(): + return self.get_filename() + ".csv" + "text/csv", output.getvalue().encode("utf-8----------------") + +def f(): + return self.get_filename() + ".csv", "text/csv", output.getvalue().encode("utf-8----------------") diff --git a/crates/ruff_python_formatter/src/expression/expr_tuple.rs b/crates/ruff_python_formatter/src/expression/expr_tuple.rs index 65184d7ccb..39236c7127 100644 --- a/crates/ruff_python_formatter/src/expression/expr_tuple.rs +++ b/crates/ruff_python_formatter/src/expression/expr_tuple.rs @@ -172,10 +172,13 @@ impl FormatNodeRule for FormatExprTuple { .finish() } TupleParentheses::Preserve => group(&ExprSequence::new(item)).fmt(f), - TupleParentheses::NeverPreserve | TupleParentheses::OptionalParentheses => { + TupleParentheses::NeverPreserve => { optional_parentheses(&ExprSequence::new(item)).fmt(f) } - TupleParentheses::Default => { + TupleParentheses::OptionalParentheses if item.elts.len() == 2 => { + optional_parentheses(&ExprSequence::new(item)).fmt(f) + } + TupleParentheses::Default | TupleParentheses::OptionalParentheses => { parenthesize_if_expands(&ExprSequence::new(item)).fmt(f) } }, diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__return.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__return.py.snap index 15f9c6a59c..9937f29918 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__return.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__return.py.snap @@ -20,6 +20,38 @@ return ( len(node.parents) for node in self.node_map.values() ) ) + +# Regression tests for https://github.com/astral-sh/ruff/issues/8042 +def f(): + return ( + self.get_filename() + ".csv" + + "text/csv" + + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return ( + self.get_filename() + ".csv" + "text/csv", + output.getvalue().encode("utf-8----------------") + ) + +def f(): + return ( + self.get_filename() + ".csv", + "text/csv", + output.getvalue().encode("utf-8----------------") + ) + + +def f(): + return self.get_filename() + ".csv" + "text/csv" + output.getvalue().encode("utf-8----------------"), + +def f(): + return self.get_filename() + ".csv" + "text/csv", output.getvalue().encode("utf-8----------------") + +def f(): + return self.get_filename() + ".csv", "text/csv", output.getvalue().encode("utf-8----------------") ``` ## Output @@ -38,6 +70,54 @@ return ( len(self.nodeseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee), sum(len(node.parents) for node in self.node_map.values()), ) + + +# Regression tests for https://github.com/astral-sh/ruff/issues/8042 +def f(): + return ( + self.get_filename() + + ".csv" + + "text/csv" + + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return ( + self.get_filename() + ".csv" + "text/csv", + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return ( + self.get_filename() + ".csv", + "text/csv", + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return ( + self.get_filename() + + ".csv" + + "text/csv" + + output.getvalue().encode("utf-8----------------"), + ) + + +def f(): + return self.get_filename() + ".csv" + "text/csv", output.getvalue().encode( + "utf-8----------------" + ) + + +def f(): + return ( + self.get_filename() + ".csv", + "text/csv", + output.getvalue().encode("utf-8----------------"), + ) ```