diff --git a/crates/ruff_python_formatter/src/expression/expr_lambda.rs b/crates/ruff_python_formatter/src/expression/expr_lambda.rs index 14ec1393d8c7f4..e984d8bec8d0c4 100644 --- a/crates/ruff_python_formatter/src/expression/expr_lambda.rs +++ b/crates/ruff_python_formatter/src/expression/expr_lambda.rs @@ -10,7 +10,6 @@ use crate::expression::parentheses::{ use crate::expression::{CallChainLayout, has_own_parentheses}; use crate::other::parameters::ParametersParentheses; use crate::prelude::*; -use crate::preview::is_parenthesize_lambda_bodies_enabled; #[derive(Default)] pub struct FormatExprLambda { @@ -31,7 +30,6 @@ impl FormatNodeRule for FormatExprLambda { let comments = f.context().comments().clone(); let dangling = comments.dangling(item); - let preview = is_parenthesize_lambda_bodies_enabled(f.context()); write!(f, [token("lambda")])?; @@ -108,7 +106,7 @@ impl FormatNodeRule for FormatExprLambda { } // Try to keep the parameters on a single line, unless there are intervening comments. - if preview && !comments.contains_comments(parameters.into()) { + if !comments.contains_comments(parameters.into()) { let mut buffer = RemoveSoftLinesBuffer::new(f); write!( buffer, @@ -134,12 +132,6 @@ impl FormatNodeRule for FormatExprLambda { if dangling_header_comments.is_empty() { write!(f, [space()])?; - } else if !preview { - write!(f, [dangling_comments(dangling_header_comments)])?; - } - - if !preview { - return body.format().fmt(f); } let fmt_body = FormatBody { diff --git a/crates/ruff_python_formatter/src/preview.rs b/crates/ruff_python_formatter/src/preview.rs index 4675fbc075fe61..3cc6ce46eef09e 100644 --- a/crates/ruff_python_formatter/src/preview.rs +++ b/crates/ruff_python_formatter/src/preview.rs @@ -13,10 +13,3 @@ pub(crate) const fn is_hug_parens_with_braces_and_square_brackets_enabled( ) -> bool { context.is_preview() } - -/// Returns `true` if the -/// [`parenthesize_lambda_bodies`](https://github.com/astral-sh/ruff/pull/21385) preview style is -/// enabled. -pub(crate) const fn is_parenthesize_lambda_bodies_enabled(context: &PyFormatContext) -> bool { - context.is_preview() -} diff --git a/crates/ruff_python_formatter/src/statement/stmt_assign.rs b/crates/ruff_python_formatter/src/statement/stmt_assign.rs index 4a2ae5579b3155..a8ecf3fedb7b2d 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_assign.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_assign.rs @@ -20,7 +20,6 @@ use crate::expression::{ }; use crate::other::interpolated_string::InterpolatedStringLayout; use crate::prelude::*; -use crate::preview::is_parenthesize_lambda_bodies_enabled; use crate::statement::trailing_semicolon; use crate::string::StringLikeExtensions; use crate::string::implicit::{ @@ -1355,7 +1354,7 @@ fn is_attribute_with_parenthesized_value(target: &Expr, context: &PyFormatContex } } -/// Like [`maybe_parenthesize_expression`] but with special handling for lambdas in preview. +/// Like [`maybe_parenthesize_expression`] but with special handling for lambdas. fn maybe_parenthesize_value<'a>( expression: &'a Expr, parent: AnyNodeRef<'a>, @@ -1372,8 +1371,7 @@ impl Format> for MaybeParenthesizeValue<'_> { fn fmt(&self, f: &mut PyFormatter) -> FormatResult<()> { let MaybeParenthesizeValue { expression, parent } = self; - if is_parenthesize_lambda_bodies_enabled(f.context()) - && let Expr::Lambda(lambda) = expression + if let Expr::Lambda(lambda) = expression && !f.context().comments().has_leading(lambda) { parenthesize_if_expands(&lambda.format().with_options(ExprLambdaLayout::Assignment)) diff --git a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@cases__comments_in_blocks.py.snap b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@cases__comments_in_blocks.py.snap index 571cf3820041b0..c24b2779c0c85a 100644 --- a/crates/ruff_python_formatter/tests/snapshots/black_compatibility@cases__comments_in_blocks.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/black_compatibility@cases__comments_in_blocks.py.snap @@ -1,6 +1,5 @@ --- source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/black/cases/comments_in_blocks.py --- ## Input @@ -123,29 +122,43 @@ if ( ```diff --- Black +++ Ruff -@@ -5,9 +5,9 @@ +@@ -5,23 +5,25 @@ # - https://github.com/psf/black/issues/563 ( - lambda -+ lambda: - # a comment +- # a comment - : None -+ None ++ lambda: ( ++ # a comment ++ None ++ ) ) ( -@@ -17,9 +17,8 @@ +- lambda: +- # b comment +- None ++ lambda: ( ++ # b comment ++ None ++ ) ) ( - lambda -+ lambda: - # a comment +- # a comment - : - # b comment - None +- # b comment +- None ++ lambda: ( ++ # a comment ++ # b comment ++ None ++ ) ) + + [ ``` ## Ruff Output @@ -158,22 +171,25 @@ if ( # - https://github.com/psf/black/issues/563 ( - lambda: - # a comment - None + lambda: ( + # a comment + None + ) ) ( - lambda: - # b comment - None + lambda: ( + # b comment + None + ) ) ( - lambda: - # a comment - # b comment - None + lambda: ( + # a comment + # b comment + None + ) ) [ diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap index 86c65f585c47b2..0d9fd72e48dd77 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__lambda.py.snap @@ -851,35 +851,14 @@ lambda x: lambda y: lambda z: (x, y, z) # Trailing # Trailing # Leading -lambda x: lambda y: lambda z: ( - x, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - z, +lambda x: ( + lambda y: ( + lambda z: (x, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, z) + ) ) # Trailing # Trailing -a = ( - lambda: # Dangling +a = lambda: ( # Dangling 1 ) @@ -898,7 +877,9 @@ a = ( # lambda arguments don't have parentheses, so we never add a magic trailing comma ... def f( - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = lambda x: y, + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = lambda x: ( + y + ), ): pass @@ -926,22 +907,25 @@ lambda a, /, c: a # Dangling comments without parameters. ( - lambda: # 3 - None + lambda: ( # 3 + None + ) ) ( - lambda: - # 3 - None + lambda: ( + # 3 + None + ) ) ( - lambda: # 1 - # 2 - # 3 - # 4 - None # 5 + lambda: ( # 1 + # 2 + # 3 + # 4 + None + ) # 5 ) ( @@ -960,16 +944,18 @@ lambda a, /, c: a lambda # comment 1 # comment 2 - *x: - # comment 3 - x + *x: ( + # comment 3 + x + ) ) ( lambda # comment 1 # comment 2 - *x: # comment 3 - x + *x: ( # comment 3 + x + ) ) lambda *x: x @@ -985,30 +971,33 @@ lambda: ( # comment ) ( - lambda: # comment - x + lambda: ( # comment + x + ) ) ( - lambda: - # comment - x + lambda: ( + # comment + x + ) ) ( - lambda: # comment - x + lambda: ( # comment + x + ) ) ( - lambda: - # comment - x + lambda: ( + # comment + x + ) ) ( - lambda: # comment - ( # comment + lambda: ( # comment # comment x ) ) @@ -1016,11 +1005,12 @@ lambda: ( # comment ( lambda # 1 # 2 - x: # 3 - # 4 - # 5 - # 6 - x + x: ( # 3 + # 4 + # 5 + # 6 + x + ) ) ( @@ -1028,9 +1018,10 @@ lambda: ( # comment # 2 x, # 3 # 4 - y: # 5 - # 6 - x + y: ( # 5 + # 6 + x + ) ) ( @@ -1042,71 +1033,79 @@ lambda: ( # comment # Leading lambda x: ( - lambda y: lambda z: x - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + y - + z # Trailing + lambda y: ( + lambda z: ( + x + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + y + + z + ) + ) # Trailing ) # Trailing # Leading -lambda x: lambda y: lambda z: [ - x, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - y, - z, -] # Trailing +lambda x: ( + lambda y: ( + lambda z: [ + x, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + y, + z, + ] + ) +) # Trailing # Trailing -lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( - *args, **kwargs -), e=1, f=2, g=2: d +lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), e=1, f=2, g=2: ( + d +) # Regression tests for https://github.com/astral-sh/ruff/issues/8179 @@ -1115,9 +1114,9 @@ def a(): c, d, e, - f=lambda self, - *args, - **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), + f=lambda self, *args, **kwargs: ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + ), ) @@ -1126,15 +1125,9 @@ def a(): c, d, e, - f=lambda self, - araa, - kkkwargs, - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, - args, - kwargs, - e=1, - f=2, - g=2: d, + f=lambda self, araa, kkkwargs, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, args, kwargs, e=1, f=2, g=2: ( + d + ), g=10, ) @@ -1144,9 +1137,9 @@ def a(): c, d, e, - f=lambda self, - *args, - **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1, + f=lambda self, *args, **kwargs: ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + ), ) @@ -1162,9 +1155,9 @@ class C: class C: function_dict: Dict[Text, Callable[[CRFToken], Any]] = { - CRFEntityExtractorOptions.POS2: lambda crf_token: crf_token.pos_tag[:2] - if crf_token.pos_tag is not None - else None, + CRFEntityExtractorOptions.POS2: lambda crf_token: ( + crf_token.pos_tag[:2] if crf_token.pos_tag is not None else None + ), } @@ -1176,42 +1169,40 @@ name = re.sub( def foo(): if True: if True: - return ( - lambda x: np.exp(cs(np.log(x.to(u.MeV).value))) * u.MeV * u.cm**2 / u.g + return lambda x: ( + np.exp(cs(np.log(x.to(u.MeV).value))) * u.MeV * u.cm**2 / u.g ) class C: - _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype( - x, "M" - ) or isinstance(x, DatetimeTZDtype) + _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: ( + lib.is_np_dtype(x, "M") or isinstance(x, DatetimeTZDtype) + ) class C: def foo(): if True: transaction_count = self._query_txs_for_range( - get_count_fn=lambda from_ts, - to_ts, - _chain_id=chain_id: db_evmtx.count_transactions_in_range( - chain_id=_chain_id, - from_ts=from_ts, - to_ts=to_ts, + get_count_fn=lambda from_ts, to_ts, _chain_id=chain_id: ( + db_evmtx.count_transactions_in_range( + chain_id=_chain_id, + from_ts=from_ts, + to_ts=to_ts, + ) ), ) transaction_count = self._query_txs_for_range( - get_count_fn=lambda from_ts, - to_ts, - _chain_id=chain_id: db_evmtx.count_transactions_in_range[ - _chain_id, from_ts, to_ts - ], + get_count_fn=lambda from_ts, to_ts, _chain_id=chain_id: ( + db_evmtx.count_transactions_in_range[_chain_id, from_ts, to_ts] + ), ) def ddb(): - sql = ( - lambda var, table, n=N: f""" + sql = lambda var, table, n=N: ( + f""" CREATE TABLE {table} AS SELECT ROW_NUMBER() OVER () AS id, {var} FROM ( @@ -1225,18 +1216,19 @@ def ddb(): long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( # 1 # 2 - lambda x, y, z: # 3 - # 4 - x + y + z # 5 + lambda x, y, z: ( # 3 + # 4 + x + y + z + ) # 5 # 6 ) -long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( - lambda x, y, z: x + y + z +long_assignment_target.with_attribute.and_a_slice[with_an_index] = lambda x, y, z: ( + x + y + z ) -long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( - lambda x, y, z: x + y + z +long_assignment_target.with_attribute.and_a_slice[with_an_index] = lambda x, y, z: ( + x + y + z ) very_long_variable_name_x, very_long_variable_name_y = ( @@ -1244,8 +1236,8 @@ very_long_variable_name_x, very_long_variable_name_y = ( lambda b: b * another_very_long_expression_here, ) -very_long_variable_name_for_result += ( - lambda x: very_long_function_call_that_should_definitely_be_parenthesized_now( +very_long_variable_name_for_result += lambda x: ( + very_long_function_call_that_should_definitely_be_parenthesized_now( x, more_args, additional_parameters ) ) @@ -1281,12 +1273,12 @@ class C: [ # Not fluent param( - lambda left, right: (ibis.timestamp("2017-04-01")), + lambda left, right: ibis.timestamp("2017-04-01"), ), # These four are fluent and fit on one line inside the parenthesized # lambda body param( - lambda left, right: (ibis.timestamp("2017-04-01").cast(dt.date)), + lambda left, right: ibis.timestamp("2017-04-01").cast(dt.date), ), param( lambda left, right: ( @@ -1295,10 +1287,9 @@ class C: ), param(lambda left, right: ibis.timestamp("2017-04-01").cast(dt.date)), param( - lambda left, right: ibis - .timestamp("2017-04-01") - .cast(dt.date) - .between(left, right) + lambda left, right: ( + ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) + ) ), # This is too long on one line in the lambda body and gets wrapped # inside the body. @@ -1333,16 +1324,18 @@ lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz: [ ] # adds parentheses around the body -lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz: xxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyy + zzzzzzzzzzzzzzzzzzzz +lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz: ( + xxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyy + zzzzzzzzzzzzzzzzzzzz +) # removes parentheses around the body -lambda xxxxxxxxxxxxxxxxxxxx: (xxxxxxxxxxxxxxxxxxxx + 1) +lambda xxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxx + 1 mapper = lambda x: dict_with_default[ np.nan if isinstance(x, float) and np.isnan(x) else x ] -lambda x, y, z: (x + y + z) +lambda x, y, z: x + y + z lambda x, y, z: ( x + y + z @@ -1353,7 +1346,7 @@ lambda x, y, z: ( x + y + z # trailing eol body ) -lambda x, y, z: (x + y + z) # trailing lambda +lambda x, y, z: x + y + z # trailing lambda lambda x, y, z: ( # leading body @@ -1365,21 +1358,23 @@ lambda x, y, z: ( # leading eol body ) ( - lambda name: source_bucket # trailing eol comment - if name == source_bucket_name - else storage.Bucket(mock_service, destination_bucket_name) + lambda name: ( + source_bucket # trailing eol comment + if name == source_bucket_name + else storage.Bucket(mock_service, destination_bucket_name) + ) ) ( - lambda name: - # dangling header comment - source_bucket - if name == source_bucket_name - else storage.Bucket(mock_service, destination_bucket_name) + lambda name: ( + # dangling header comment + source_bucket + if name == source_bucket_name + else storage.Bucket(mock_service, destination_bucket_name) + ) ) -x = ( - lambda name: +x = lambda name: ( # dangling header comment source_bucket if name == source_bucket_name @@ -1387,8 +1382,7 @@ x = ( ) ( - lambda name: # dangling header comment - ( + lambda name: ( # dangling header comment source_bucket if name == source_bucket_name else storage.Bucket(mock_service, destination_bucket_name) @@ -1396,62 +1390,71 @@ x = ( ) ( - lambda from_ts, to_ts, _chain_id=chain_id: # dangling eol header comment - db_evmtx.count_transactions_in_range( - chain_id=_chain_id, - from_ts=from_ts, - to_ts=to_ts, + lambda from_ts, to_ts, _chain_id=chain_id: ( # dangling eol header comment + db_evmtx.count_transactions_in_range( + chain_id=_chain_id, + from_ts=from_ts, + to_ts=to_ts, + ) ) ) ( - lambda from_ts, to_ts, _chain_id=chain_id: - # dangling header comment before call - db_evmtx.count_transactions_in_range( - chain_id=_chain_id, - from_ts=from_ts, - to_ts=to_ts, + lambda from_ts, to_ts, _chain_id=chain_id: ( + # dangling header comment before call + db_evmtx.count_transactions_in_range( + chain_id=_chain_id, + from_ts=from_ts, + to_ts=to_ts, + ) ) ) ( - lambda left, right: - # comment - ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) + lambda left, right: ( + # comment + ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) + ) ) ( - lambda left, right: ibis - .timestamp("2017-04-01") # comment - .cast(dt.date) - .between(left, right) + lambda left, right: ( + ibis + .timestamp("2017-04-01") # comment + .cast(dt.date) + .between(left, right) + ) ) ( - lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy: - # comment - [xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz] + lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy: ( + # comment + [xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz] + ) ) ( - lambda x, y: - # comment - { - "key": x, - "another": y, - } + lambda x, y: ( + # comment + { + "key": x, + "another": y, + } + ) ) ( - lambda x, y: - # comment - (x, y, z) + lambda x, y: ( + # comment + (x, y, z) + ) ) ( - lambda x: - # comment - dict_with_default[np.nan if isinstance(x, float) and np.isnan(x) else x] + lambda x: ( + # comment + dict_with_default[np.nan if isinstance(x, float) and np.isnan(x) else x] + ) ) ( @@ -1464,27 +1467,31 @@ x = ( ( lambda # comment - *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) - + 1 + *args, **kwargs: ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + ) ) ( lambda # comment - *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) - + 1 + *args, **kwargs: ( + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + ) ) ( lambda # comment 1 # comment 2 - *args, **kwargs: # comment 3 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + *args, **kwargs: ( # comment 3 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + ) ) ( lambda # comment 1 - *args, **kwargs: # comment 3 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + *args, **kwargs: ( # comment 3 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 + ) ) ( @@ -1499,25 +1506,28 @@ x = ( ) ( - lambda *brgs, **kwargs: - # comment 1 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( # comment 2 - # comment 3 - *brgs, - **kwargs, - ) - + 1 # comment 4 + lambda *brgs, **kwargs: ( + # comment 1 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( # comment 2 + # comment 3 + *brgs, + **kwargs, + ) + + 1 + ) # comment 4 # comment 5 ) ( - lambda *crgs, **kwargs: # comment 1 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*crgs, **kwargs) + 1 + lambda *crgs, **kwargs: ( # comment 1 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*crgs, **kwargs) + 1 + ) ) ( - lambda *drgs, **kwargs: # comment 1 - (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*drgs, **kwargs) + 1) + lambda *drgs, **kwargs: ( # comment 1 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*drgs, **kwargs) + 1 + ) ) ( @@ -1525,9 +1535,9 @@ x = ( # comment 1 *ergs, # comment 2 - **kwargs: # comment 3 - # comment 4 - (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*ergs, **kwargs) + 1) + **kwargs: ( # comment 3 # comment 4 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*ergs, **kwargs) + 1 + ) ) ( @@ -1535,19 +1545,20 @@ x = ( # 2 left, # 3 # 4 - right: # 5 - # 6 - ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) + right: ( # 5 + # 6 + ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) + ) ) ( - lambda x: # outer comment 1 - ( - lambda y: # inner comment 1 - # inner comment 2 - lambda z: ( - # innermost comment - x + y + z + lambda x: ( # outer comment 1 + lambda y: ( # inner comment 1 + # inner comment 2 + lambda z: ( + # innermost comment + x + y + z + ) ) ) ) @@ -1565,49 +1576,52 @@ foo( foo( lambda from_ts, # but still wrap the body if it gets too long to_ts, - _chain_id=chain_id: db_evmtx.count_transactions_in_rangeeeeeeeeeeeeeeeeeeeeeeeeeeeee( - chain_id=_chain_id, - from_ts=from_ts, - to_ts=to_ts, + _chain_id=chain_id: ( + db_evmtx.count_transactions_in_rangeeeeeeeeeeeeeeeeeeeeeeeeeeeee( + chain_id=_chain_id, + from_ts=from_ts, + to_ts=to_ts, + ) ) ) -transform = ( - lambda left, right: ibis - .timestamp("2017-04-01") - .cast(dt.date) - .between(left, right) - .between(left, right) +transform = lambda left, right: ( + ibis.timestamp("2017-04-01").cast(dt.date).between(left, right).between(left, right) ) # trailing comment ( - lambda: # comment - 1 + lambda: ( # comment + 1 + ) ) ( - lambda: # comment - 1 + lambda: ( # comment + 1 + ) ) ( - lambda: - # comment - 1 + lambda: ( + # comment + 1 + ) ) ( - lambda: # comment 1 - # comment 2 - 1 + lambda: ( # comment 1 + # comment 2 + 1 + ) ) ( - lambda: # comment 1 - # comment 2 - # comment 3 - # comment 4 - 1 + lambda: ( # comment 1 + # comment 2 + # comment 3 + # comment 4 + 1 + ) ) ( @@ -1656,8 +1670,7 @@ transform = ( ) ( - lambda: # dangling-end-of-line - ( # leading-body-end-of-line + lambda: ( # dangling-end-of-line # leading-body-end-of-line x ) ) @@ -1665,930 +1678,8 @@ transform = ( lambda x: (x := 1) ( - lambda: # dangling header comment - (x := 1) + lambda: ( # dangling header comment + x := 1 + ) ) ``` - - -## Preview changes -```diff ---- Stable -+++ Preview -@@ -27,35 +27,14 @@ - # Trailing - - # Leading --lambda x: lambda y: lambda z: ( -- x, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- z, -+lambda x: ( -+ lambda y: ( -+ lambda z: (x, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, z) -+ ) - ) # Trailing - # Trailing - --a = ( -- lambda: # Dangling -+a = lambda: ( # Dangling - 1 - ) - -@@ -74,7 +53,9 @@ - - # lambda arguments don't have parentheses, so we never add a magic trailing comma ... - def f( -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = lambda x: y, -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = lambda x: ( -+ y -+ ), - ): - pass - -@@ -102,22 +83,25 @@ - - # Dangling comments without parameters. - ( -- lambda: # 3 -- None -+ lambda: ( # 3 -+ None -+ ) - ) - - ( -- lambda: -- # 3 -- None -+ lambda: ( -+ # 3 -+ None -+ ) - ) - - ( -- lambda: # 1 -- # 2 -- # 3 -- # 4 -- None # 5 -+ lambda: ( # 1 -+ # 2 -+ # 3 -+ # 4 -+ None -+ ) # 5 - ) - - ( -@@ -136,16 +120,18 @@ - lambda - # comment 1 - # comment 2 -- *x: -- # comment 3 -- x -+ *x: ( -+ # comment 3 -+ x -+ ) - ) - - ( - lambda # comment 1 - # comment 2 -- *x: # comment 3 -- x -+ *x: ( # comment 3 -+ x -+ ) - ) - - lambda *x: x -@@ -161,30 +147,33 @@ - ) - - ( -- lambda: # comment -- x -+ lambda: ( # comment -+ x -+ ) - ) - - ( -- lambda: -- # comment -- x -+ lambda: ( -+ # comment -+ x -+ ) - ) - - ( -- lambda: # comment -- x -+ lambda: ( # comment -+ x -+ ) - ) - - ( -- lambda: -- # comment -- x -+ lambda: ( -+ # comment -+ x -+ ) - ) - - ( -- lambda: # comment -- ( # comment -+ lambda: ( # comment # comment - x - ) - ) -@@ -192,11 +181,12 @@ - ( - lambda # 1 - # 2 -- x: # 3 -- # 4 -- # 5 -- # 6 -- x -+ x: ( # 3 -+ # 4 -+ # 5 -+ # 6 -+ x -+ ) - ) - - ( -@@ -204,9 +194,10 @@ - # 2 - x, # 3 - # 4 -- y: # 5 -- # 6 -- x -+ y: ( # 5 -+ # 6 -+ x -+ ) - ) - - ( -@@ -218,71 +209,79 @@ - - # Leading - lambda x: ( -- lambda y: lambda z: x -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + y -- + z # Trailing -+ lambda y: ( -+ lambda z: ( -+ x -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + y -+ + z -+ ) -+ ) # Trailing - ) # Trailing - - - # Leading --lambda x: lambda y: lambda z: [ -- x, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- y, -- z, --] # Trailing -+lambda x: ( -+ lambda y: ( -+ lambda z: [ -+ x, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ y, -+ z, -+ ] -+ ) -+) # Trailing - # Trailing - --lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( -- *args, **kwargs --), e=1, f=2, g=2: d -+lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), e=1, f=2, g=2: ( -+ d -+) - - - # Regression tests for https://github.com/astral-sh/ruff/issues/8179 -@@ -291,9 +290,9 @@ - c, - d, - e, -- f=lambda self, -- *args, -- **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), -+ f=lambda self, *args, **kwargs: ( -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) -+ ), - ) - - -@@ -302,15 +301,9 @@ - c, - d, - e, -- f=lambda self, -- araa, -- kkkwargs, -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, -- args, -- kwargs, -- e=1, -- f=2, -- g=2: d, -+ f=lambda self, araa, kkkwargs, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, args, kwargs, e=1, f=2, g=2: ( -+ d -+ ), - g=10, - ) - -@@ -320,9 +313,9 @@ - c, - d, - e, -- f=lambda self, -- *args, -- **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1, -+ f=lambda self, *args, **kwargs: ( -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ ), - ) - - -@@ -338,9 +331,9 @@ - - class C: - function_dict: Dict[Text, Callable[[CRFToken], Any]] = { -- CRFEntityExtractorOptions.POS2: lambda crf_token: crf_token.pos_tag[:2] -- if crf_token.pos_tag is not None -- else None, -+ CRFEntityExtractorOptions.POS2: lambda crf_token: ( -+ crf_token.pos_tag[:2] if crf_token.pos_tag is not None else None -+ ), - } - - -@@ -352,42 +345,40 @@ - def foo(): - if True: - if True: -- return ( -- lambda x: np.exp(cs(np.log(x.to(u.MeV).value))) * u.MeV * u.cm**2 / u.g -+ return lambda x: ( -+ np.exp(cs(np.log(x.to(u.MeV).value))) * u.MeV * u.cm**2 / u.g - ) - - - class C: -- _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype( -- x, "M" -- ) or isinstance(x, DatetimeTZDtype) -+ _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: ( -+ lib.is_np_dtype(x, "M") or isinstance(x, DatetimeTZDtype) -+ ) - - - class C: - def foo(): - if True: - transaction_count = self._query_txs_for_range( -- get_count_fn=lambda from_ts, -- to_ts, -- _chain_id=chain_id: db_evmtx.count_transactions_in_range( -- chain_id=_chain_id, -- from_ts=from_ts, -- to_ts=to_ts, -+ get_count_fn=lambda from_ts, to_ts, _chain_id=chain_id: ( -+ db_evmtx.count_transactions_in_range( -+ chain_id=_chain_id, -+ from_ts=from_ts, -+ to_ts=to_ts, -+ ) - ), - ) - - transaction_count = self._query_txs_for_range( -- get_count_fn=lambda from_ts, -- to_ts, -- _chain_id=chain_id: db_evmtx.count_transactions_in_range[ -- _chain_id, from_ts, to_ts -- ], -+ get_count_fn=lambda from_ts, to_ts, _chain_id=chain_id: ( -+ db_evmtx.count_transactions_in_range[_chain_id, from_ts, to_ts] -+ ), - ) - - - def ddb(): -- sql = ( -- lambda var, table, n=N: f""" -+ sql = lambda var, table, n=N: ( -+ f""" - CREATE TABLE {table} AS - SELECT ROW_NUMBER() OVER () AS id, {var} - FROM ( -@@ -401,18 +392,19 @@ - - long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( # 1 - # 2 -- lambda x, y, z: # 3 -- # 4 -- x + y + z # 5 -+ lambda x, y, z: ( # 3 -+ # 4 -+ x + y + z -+ ) # 5 - # 6 - ) - --long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( -- lambda x, y, z: x + y + z -+long_assignment_target.with_attribute.and_a_slice[with_an_index] = lambda x, y, z: ( -+ x + y + z - ) - --long_assignment_target.with_attribute.and_a_slice[with_an_index] = ( -- lambda x, y, z: x + y + z -+long_assignment_target.with_attribute.and_a_slice[with_an_index] = lambda x, y, z: ( -+ x + y + z - ) - - very_long_variable_name_x, very_long_variable_name_y = ( -@@ -420,8 +412,8 @@ - lambda b: b * another_very_long_expression_here, - ) - --very_long_variable_name_for_result += ( -- lambda x: very_long_function_call_that_should_definitely_be_parenthesized_now( -+very_long_variable_name_for_result += lambda x: ( -+ very_long_function_call_that_should_definitely_be_parenthesized_now( - x, more_args, additional_parameters - ) - ) -@@ -457,12 +449,12 @@ - [ - # Not fluent - param( -- lambda left, right: (ibis.timestamp("2017-04-01")), -+ lambda left, right: ibis.timestamp("2017-04-01"), - ), - # These four are fluent and fit on one line inside the parenthesized - # lambda body - param( -- lambda left, right: (ibis.timestamp("2017-04-01").cast(dt.date)), -+ lambda left, right: ibis.timestamp("2017-04-01").cast(dt.date), - ), - param( - lambda left, right: ( -@@ -471,10 +463,9 @@ - ), - param(lambda left, right: ibis.timestamp("2017-04-01").cast(dt.date)), - param( -- lambda left, right: ibis -- .timestamp("2017-04-01") -- .cast(dt.date) -- .between(left, right) -+ lambda left, right: ( -+ ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) -+ ) - ), - # This is too long on one line in the lambda body and gets wrapped - # inside the body. -@@ -509,16 +500,18 @@ - ] - - # adds parentheses around the body --lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz: xxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyy + zzzzzzzzzzzzzzzzzzzz -+lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz: ( -+ xxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyy + zzzzzzzzzzzzzzzzzzzz -+) - - # removes parentheses around the body --lambda xxxxxxxxxxxxxxxxxxxx: (xxxxxxxxxxxxxxxxxxxx + 1) -+lambda xxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxx + 1 - - mapper = lambda x: dict_with_default[ - np.nan if isinstance(x, float) and np.isnan(x) else x - ] - --lambda x, y, z: (x + y + z) -+lambda x, y, z: x + y + z - - lambda x, y, z: ( - x + y + z -@@ -529,7 +522,7 @@ - x + y + z # trailing eol body - ) - --lambda x, y, z: (x + y + z) # trailing lambda -+lambda x, y, z: x + y + z # trailing lambda - - lambda x, y, z: ( - # leading body -@@ -541,21 +534,23 @@ - ) - - ( -- lambda name: source_bucket # trailing eol comment -- if name == source_bucket_name -- else storage.Bucket(mock_service, destination_bucket_name) -+ lambda name: ( -+ source_bucket # trailing eol comment -+ if name == source_bucket_name -+ else storage.Bucket(mock_service, destination_bucket_name) -+ ) - ) - - ( -- lambda name: -- # dangling header comment -- source_bucket -- if name == source_bucket_name -- else storage.Bucket(mock_service, destination_bucket_name) -+ lambda name: ( -+ # dangling header comment -+ source_bucket -+ if name == source_bucket_name -+ else storage.Bucket(mock_service, destination_bucket_name) -+ ) - ) - --x = ( -- lambda name: -+x = lambda name: ( - # dangling header comment - source_bucket - if name == source_bucket_name -@@ -563,8 +558,7 @@ - ) - - ( -- lambda name: # dangling header comment -- ( -+ lambda name: ( # dangling header comment - source_bucket - if name == source_bucket_name - else storage.Bucket(mock_service, destination_bucket_name) -@@ -572,62 +566,71 @@ - ) - - ( -- lambda from_ts, to_ts, _chain_id=chain_id: # dangling eol header comment -- db_evmtx.count_transactions_in_range( -- chain_id=_chain_id, -- from_ts=from_ts, -- to_ts=to_ts, -+ lambda from_ts, to_ts, _chain_id=chain_id: ( # dangling eol header comment -+ db_evmtx.count_transactions_in_range( -+ chain_id=_chain_id, -+ from_ts=from_ts, -+ to_ts=to_ts, -+ ) - ) - ) - - ( -- lambda from_ts, to_ts, _chain_id=chain_id: -- # dangling header comment before call -- db_evmtx.count_transactions_in_range( -- chain_id=_chain_id, -- from_ts=from_ts, -- to_ts=to_ts, -+ lambda from_ts, to_ts, _chain_id=chain_id: ( -+ # dangling header comment before call -+ db_evmtx.count_transactions_in_range( -+ chain_id=_chain_id, -+ from_ts=from_ts, -+ to_ts=to_ts, -+ ) - ) - ) - - ( -- lambda left, right: -- # comment -- ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) -+ lambda left, right: ( -+ # comment -+ ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) -+ ) - ) - - ( -- lambda left, right: ibis -- .timestamp("2017-04-01") # comment -- .cast(dt.date) -- .between(left, right) -+ lambda left, right: ( -+ ibis -+ .timestamp("2017-04-01") # comment -+ .cast(dt.date) -+ .between(left, right) -+ ) - ) - - ( -- lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy: -- # comment -- [xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz] -+ lambda xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy: ( -+ # comment -+ [xxxxxxxxxxxxxxxxxxxx, yyyyyyyyyyyyyyyyyyyy, zzzzzzzzzzzzzzzzzzzz] -+ ) - ) - - ( -- lambda x, y: -- # comment -- { -- "key": x, -- "another": y, -- } -+ lambda x, y: ( -+ # comment -+ { -+ "key": x, -+ "another": y, -+ } -+ ) - ) - - ( -- lambda x, y: -- # comment -- (x, y, z) -+ lambda x, y: ( -+ # comment -+ (x, y, z) -+ ) - ) - - ( -- lambda x: -- # comment -- dict_with_default[np.nan if isinstance(x, float) and np.isnan(x) else x] -+ lambda x: ( -+ # comment -+ dict_with_default[np.nan if isinstance(x, float) and np.isnan(x) else x] -+ ) - ) - - ( -@@ -640,27 +643,31 @@ - ( - lambda - # comment -- *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) -- + 1 -+ *args, **kwargs: ( -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ ) - ) - - ( - lambda # comment -- *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) -- + 1 -+ *args, **kwargs: ( -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ ) - ) - - ( - lambda # comment 1 - # comment 2 -- *args, **kwargs: # comment 3 -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ *args, **kwargs: ( # comment 3 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ ) - ) - - ( - lambda # comment 1 -- *args, **kwargs: # comment 3 -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ *args, **kwargs: ( # comment 3 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs) + 1 -+ ) - ) - - ( -@@ -675,25 +682,28 @@ - ) - - ( -- lambda *brgs, **kwargs: -- # comment 1 -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( # comment 2 -- # comment 3 -- *brgs, -- **kwargs, -- ) -- + 1 # comment 4 -+ lambda *brgs, **kwargs: ( -+ # comment 1 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( # comment 2 -+ # comment 3 -+ *brgs, -+ **kwargs, -+ ) -+ + 1 -+ ) # comment 4 - # comment 5 - ) - - ( -- lambda *crgs, **kwargs: # comment 1 -- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*crgs, **kwargs) + 1 -+ lambda *crgs, **kwargs: ( # comment 1 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*crgs, **kwargs) + 1 -+ ) - ) - - ( -- lambda *drgs, **kwargs: # comment 1 -- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*drgs, **kwargs) + 1) -+ lambda *drgs, **kwargs: ( # comment 1 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*drgs, **kwargs) + 1 -+ ) - ) - - ( -@@ -701,9 +711,9 @@ - # comment 1 - *ergs, - # comment 2 -- **kwargs: # comment 3 -- # comment 4 -- (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*ergs, **kwargs) + 1) -+ **kwargs: ( # comment 3 # comment 4 -+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*ergs, **kwargs) + 1 -+ ) - ) - - ( -@@ -711,19 +721,20 @@ - # 2 - left, # 3 - # 4 -- right: # 5 -- # 6 -- ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) -+ right: ( # 5 -+ # 6 -+ ibis.timestamp("2017-04-01").cast(dt.date).between(left, right) -+ ) - ) - - ( -- lambda x: # outer comment 1 -- ( -- lambda y: # inner comment 1 -- # inner comment 2 -- lambda z: ( -- # innermost comment -- x + y + z -+ lambda x: ( # outer comment 1 -+ lambda y: ( # inner comment 1 -+ # inner comment 2 -+ lambda z: ( -+ # innermost comment -+ x + y + z -+ ) - ) - ) - ) -@@ -741,49 +752,52 @@ - foo( - lambda from_ts, # but still wrap the body if it gets too long - to_ts, -- _chain_id=chain_id: db_evmtx.count_transactions_in_rangeeeeeeeeeeeeeeeeeeeeeeeeeeeee( -- chain_id=_chain_id, -- from_ts=from_ts, -- to_ts=to_ts, -+ _chain_id=chain_id: ( -+ db_evmtx.count_transactions_in_rangeeeeeeeeeeeeeeeeeeeeeeeeeeeee( -+ chain_id=_chain_id, -+ from_ts=from_ts, -+ to_ts=to_ts, -+ ) - ) - ) - --transform = ( -- lambda left, right: ibis -- .timestamp("2017-04-01") -- .cast(dt.date) -- .between(left, right) -- .between(left, right) -+transform = lambda left, right: ( -+ ibis.timestamp("2017-04-01").cast(dt.date).between(left, right).between(left, right) - ) # trailing comment - - ( -- lambda: # comment -- 1 -+ lambda: ( # comment -+ 1 -+ ) - ) - - ( -- lambda: # comment -- 1 -+ lambda: ( # comment -+ 1 -+ ) - ) - - ( -- lambda: -- # comment -- 1 -+ lambda: ( -+ # comment -+ 1 -+ ) - ) - - ( -- lambda: # comment 1 -- # comment 2 -- 1 -+ lambda: ( # comment 1 -+ # comment 2 -+ 1 -+ ) - ) - - ( -- lambda: # comment 1 -- # comment 2 -- # comment 3 -- # comment 4 -- 1 -+ lambda: ( # comment 1 -+ # comment 2 -+ # comment 3 -+ # comment 4 -+ 1 -+ ) - ) - - ( -@@ -832,8 +846,7 @@ - ) - - ( -- lambda: # dangling-end-of-line -- ( # leading-body-end-of-line -+ lambda: ( # dangling-end-of-line # leading-body-end-of-line - x - ) - ) -@@ -841,6 +854,7 @@ - lambda x: (x := 1) - - ( -- lambda: # dangling header comment -- (x := 1) -+ lambda: ( # dangling header comment -+ x := 1 -+ ) - ) -``` diff --git a/crates/ruff_python_formatter/tests/snapshots/format@multiline_string_deviations.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@multiline_string_deviations.py.snap index 9504e52ae89435..2126c363b4aa81 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@multiline_string_deviations.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@multiline_string_deviations.py.snap @@ -1,6 +1,5 @@ --- source: crates/ruff_python_formatter/tests/fixtures.rs -input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/multiline_string_deviations.py --- ## Input ```python @@ -97,30 +96,9 @@ path.write_text( # this by changing `Lambda::needs_parentheses` to return `BestFit` but it causes # issues when the lambda has comments. # Let's keep this as a known deviation for now. -generated_readme = ( - lambda project_name: """ +generated_readme = lambda project_name: """ {} """.strip().format(project_name) -) -``` - - -## Preview changes -```diff ---- Stable -+++ Preview -@@ -44,10 +44,8 @@ - # this by changing `Lambda::needs_parentheses` to return `BestFit` but it causes - # issues when the lambda has comments. - # Let's keep this as a known deviation for now. --generated_readme = ( -- lambda project_name: """ -+generated_readme = lambda project_name: """ - {} - - - """.strip().format(project_name) --) ```