diff --git a/crates/oxc_formatter/src/utils/assignment_like.rs b/crates/oxc_formatter/src/utils/assignment_like.rs index 7fff0cbb1fc34..72c07eb58f3b2 100644 --- a/crates/oxc_formatter/src/utils/assignment_like.rs +++ b/crates/oxc_formatter/src/utils/assignment_like.rs @@ -392,7 +392,7 @@ impl<'a> AssignmentLike<'a, '_> { return AssignmentLikeLayout::BreakAfterOperator; } - if self.should_break_left_hand_side() { + if self.should_break_left_hand_side(left_may_break) { return AssignmentLikeLayout::BreakLeftHandSide; } @@ -518,7 +518,7 @@ impl<'a> AssignmentLike<'a, '_> { /// Particular function that checks if the left hand side of a [AssignmentLike] should /// be broken on multiple lines - fn should_break_left_hand_side(&self) -> bool { + fn should_break_left_hand_side(&self, left_may_break: bool) -> bool { if self.is_complex_destructuring() { return true; } @@ -534,9 +534,11 @@ impl<'a> AssignmentLike<'a, '_> { let type_annotation = declarator.id.type_annotation.as_ref(); type_annotation.is_some_and(|ann| is_complex_type_annotation(ann)) - || (self.get_right_expression().is_some_and(|expr| { - matches!(expr.as_ref(), Expression::ArrowFunctionExpression(_)) - }) && type_annotation.is_some_and(|ann| is_annotation_breakable(ann))) + || (left_may_break + && declarator + .init + .as_ref() + .is_some_and(|expr| matches!(expr, Expression::ArrowFunctionExpression(_)))) } /// Checks if the current assignment is eligible for [AssignmentLikeLayout::BreakAfterOperator] @@ -1009,15 +1011,6 @@ fn is_complex_type_arguments(type_arguments: &TSTypeParameterInstantiation) -> b false } -/// Checks if the annotation is breakable -fn is_annotation_breakable(annotation: &TSTypeAnnotation) -> bool { - matches!( - &annotation.type_annotation, - TSType::TSTypeReference(reference_type) - if reference_type.type_arguments.as_ref().is_some_and(|type_args| !type_args.params.is_empty()) - ) -} - /// [Prettier applies]: pub fn is_complex_type_annotation(annotation: &TSTypeAnnotation) -> bool { match &annotation.type_annotation { diff --git a/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts b/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts new file mode 100644 index 0000000000000..6d16bc7e57442 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts @@ -0,0 +1,10 @@ +{ + const onPanning: ComponenASDtProps< + typeof TransformWrapper + >["onPanning"] = () => { + } +} +const onPanning: ComponenASDtProps< + typeof TransformWrapper +>["onPanning"] = () => { +} diff --git a/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts.snap b/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts.snap new file mode 100644 index 0000000000000..a303037b43628 --- /dev/null +++ b/crates/oxc_formatter/tests/fixtures/ts/assignments/arrow-function.ts.snap @@ -0,0 +1,26 @@ +--- +source: crates/oxc_formatter/tests/fixtures/mod.rs +--- +==================== Input ==================== +{ + const onPanning: ComponenASDtProps< + typeof TransformWrapper + >["onPanning"] = () => { + } +} +const onPanning: ComponenASDtProps< + typeof TransformWrapper +>["onPanning"] = () => { +} + +==================== Output ==================== +{ + const onPanning: ComponenASDtProps< + typeof TransformWrapper + >["onPanning"] = () => {}; +} +const onPanning: ComponenASDtProps< + typeof TransformWrapper +>["onPanning"] = () => {}; + +===================== End =====================