mirror of https://github.com/astral-sh/ruff
Summary -- This PR implements the black preview style from https://github.com/psf/black/pull/4720. As of Python 3.14, you're allowed to omit the parentheses around groups of exceptions, as long as there's no `as` binding: **3.13** ```pycon Python 3.13.4 (main, Jun 4 2025, 17:37:06) [Clang 20.1.4 ] on linux Type "help", "copyright", "credits" or "license" for more information. >>> try: ... ... except (Exception, BaseException): ... ... Ellipsis >>> try: ... ... except Exception, BaseException: ... ... File "<python-input-1>", line 2 except Exception, BaseException: ... ^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: multiple exception types must be parenthesized ``` **3.14** ```pycon Python 3.14.0rc2 (main, Sep 2 2025, 14:20:56) [Clang 20.1.4 ] on linux Type "help", "copyright", "credits" or "license" for more information. >>> try: ... ... except Exception, BaseException: ... ... Ellipsis >>> try: ... ... except (Exception, BaseException): ... ... Ellipsis >>> try: ... ... except Exception, BaseException as e: ... ... File "<python-input-2>", line 2 except Exception, BaseException as e: ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SyntaxError: multiple exception types must be parenthesized when using 'as' ``` I think this ended up being pretty straightforward, at least once Micha showed me where to start :) Test Plan -- New tests At first I thought we were deviating from black in how we handle comments within the exception type tuple, but I think this applies to how we format all tuples, not specifically with the new preview style. |
||
|---|---|---|
| .. | ||
| binary_like.rs | ||
| expr_attribute.rs | ||
| expr_await.rs | ||
| expr_bin_op.rs | ||
| expr_bool_op.rs | ||
| expr_boolean_literal.rs | ||
| expr_bytes_literal.rs | ||
| expr_call.rs | ||
| expr_compare.rs | ||
| expr_dict.rs | ||
| expr_dict_comp.rs | ||
| expr_ellipsis_literal.rs | ||
| expr_f_string.rs | ||
| expr_generator.rs | ||
| expr_if.rs | ||
| expr_ipy_escape_command.rs | ||
| expr_lambda.rs | ||
| expr_list.rs | ||
| expr_list_comp.rs | ||
| expr_name.rs | ||
| expr_named.rs | ||
| expr_none_literal.rs | ||
| expr_number_literal.rs | ||
| expr_set.rs | ||
| expr_set_comp.rs | ||
| expr_slice.rs | ||
| expr_starred.rs | ||
| expr_string_literal.rs | ||
| expr_subscript.rs | ||
| expr_t_string.rs | ||
| expr_tuple.rs | ||
| expr_unary_op.rs | ||
| expr_yield.rs | ||
| expr_yield_from.rs | ||
| mod.rs | ||
| operator.rs | ||
| parentheses.rs | ||