diff --git a/crates/rome_js_formatter/src/js/expressions/parenthesized_expression.rs b/crates/rome_js_formatter/src/js/expressions/parenthesized_expression.rs index 816567760b7..de7faf4405a 100644 --- a/crates/rome_js_formatter/src/js/expressions/parenthesized_expression.rs +++ b/crates/rome_js_formatter/src/js/expressions/parenthesized_expression.rs @@ -137,7 +137,7 @@ fn parenthesis_can_be_omitted(node: &JsParenthesizedExpression) -> SyntaxResult< if let Some(parent) = &parent { match parent.kind() { - // The formatting of the return or throw argument takes care of adding parens if necessary + // The formatting of the return or throw argument takes care of adding parentheses if necessary JsSyntaxKind::JS_RETURN_STATEMENT | JsSyntaxKind::JS_THROW_STATEMENT => { return Ok(true) } @@ -180,9 +180,8 @@ fn parenthesis_can_be_omitted(node: &JsParenthesizedExpression) -> SyntaxResult< return Ok(false); } - if let Some(parent) = &parent { - if JsAnyBinaryLikeExpression::can_cast(parent.kind()) { - let binary_like = JsAnyBinaryLikeExpression::unwrap_cast(parent.clone()); + if let Some(parent) = parent { + if let Some(binary_like) = JsAnyBinaryLikeExpression::cast(parent) { let operator = binary_like.operator()?; if !binary_argument_needs_parens( diff --git a/crates/rome_js_formatter/src/js/expressions/sequence_expression.rs b/crates/rome_js_formatter/src/js/expressions/sequence_expression.rs index 01b6cc29b88..b5ea618af78 100644 --- a/crates/rome_js_formatter/src/js/expressions/sequence_expression.rs +++ b/crates/rome_js_formatter/src/js/expressions/sequence_expression.rs @@ -19,6 +19,7 @@ impl FormatNodeRule for FormatJsSequenceExpression { let mut is_nested = false; let mut first_non_sequence_or_paren_parent = None; + // Skip 1 because ancestor starts with the current node but we're interested in the parent for parent in node.syntax().ancestors().skip(1) { if parent.kind() == JS_SEQUENCE_EXPRESSION { is_nested = true; diff --git a/crates/rome_js_formatter/src/js/statements/return_statement.rs b/crates/rome_js_formatter/src/js/statements/return_statement.rs index 8c823dfe5fa..322a3ad893a 100644 --- a/crates/rome_js_formatter/src/js/statements/return_statement.rs +++ b/crates/rome_js_formatter/src/js/statements/return_statement.rs @@ -78,6 +78,9 @@ impl Format for FormatReturnOrThrowArgument<'_> { } } +/// Tests if the passed in argument has any leading comments. This is the case if +/// * the argument's first token has a leading comment +/// * the argument is a parenthesized expression and the inner expression has a leading comment. fn has_argument_leading_comments(argument: &JsAnyExpression) -> SyntaxResult { if matches!(argument, JsAnyExpression::JsxTagExpression(_)) { // JSX formatting takes care of adding parens @@ -90,8 +93,7 @@ fn has_argument_leading_comments(argument: &JsAnyExpression) -> SyntaxResult { - inner.syntax().has_leading_comments() - || has_argument_leading_comments(&inner.expression()?)? + has_argument_leading_comments(&inner.expression()?)? } _ => false, };