diff --git a/crates/rome_js_formatter/src/js/expressions/object_expression.rs b/crates/rome_js_formatter/src/js/expressions/object_expression.rs index b5dbef053a6..3913b1b4735 100644 --- a/crates/rome_js_formatter/src/js/expressions/object_expression.rs +++ b/crates/rome_js_formatter/src/js/expressions/object_expression.rs @@ -1,47 +1,13 @@ use crate::prelude::*; -use crate::utils::node_has_leading_newline; - +use crate::utils::JsObjectLike; use rome_formatter::write; use rome_js_syntax::JsObjectExpression; -use rome_js_syntax::JsObjectExpressionFields; #[derive(Debug, Clone, Default)] pub struct FormatJsObjectExpression; impl FormatNodeRule for FormatJsObjectExpression { fn fmt_fields(&self, node: &JsObjectExpression, f: &mut JsFormatter) -> FormatResult<()> { - let JsObjectExpressionFields { - l_curly_token, - members, - r_curly_token, - } = node.as_fields(); - - let has_newline = node_has_leading_newline(members.syntax()); - - if members.is_empty() { - write!( - f, - [ - format_delimited(&l_curly_token?, &members.format(), &r_curly_token?) - .soft_block_indent() - ] - ) - } else if has_newline { - write!( - f, - [ - format_delimited(&l_curly_token?, &members.format(), &r_curly_token?) - .block_indent() - ] - ) - } else { - write!( - f, - [ - format_delimited(&l_curly_token?, &members.format(), &r_curly_token?) - .soft_block_spaces() - ] - ) - } + write!(f, [JsObjectLike::from(node.clone())]) } } diff --git a/crates/rome_js_formatter/src/lib.rs b/crates/rome_js_formatter/src/lib.rs index 871893e7ed4..54c72068e49 100644 --- a/crates/rome_js_formatter/src/lib.rs +++ b/crates/rome_js_formatter/src/lib.rs @@ -457,10 +457,15 @@ mod test { // use this test check if your snippet prints as you wish, without using a snapshot fn quick_test() { let src = r#" +export type a = + // foo + | foo1 & foo2 + // bar + | bar1 & bar2 + // prettier-ignore + | qux1 & qux2; + -it(`does something really long and complicated so I have to write a very long name for the test`, function () { - console.log("hello!"); - }); "#; let syntax = SourceType::tsx(); diff --git a/crates/rome_js_formatter/src/ts/declarations/type_alias_declaration.rs b/crates/rome_js_formatter/src/ts/declarations/type_alias_declaration.rs index f81fbdab8b7..eb242b52210 100644 --- a/crates/rome_js_formatter/src/ts/declarations/type_alias_declaration.rs +++ b/crates/rome_js_formatter/src/ts/declarations/type_alias_declaration.rs @@ -1,37 +1,25 @@ use crate::prelude::*; -use crate::utils::FormatWithSemicolon; - +use crate::utils::{FormatWithSemicolon, JsAnyAssignmentLike}; use rome_formatter::{format_args, write}; -use rome_js_syntax::{TsTypeAliasDeclaration, TsTypeAliasDeclarationFields}; +use rome_js_syntax::TsTypeAliasDeclaration; #[derive(Debug, Clone, Default)] pub struct FormatTsTypeAliasDeclaration; impl FormatNodeRule for FormatTsTypeAliasDeclaration { fn fmt_fields(&self, node: &TsTypeAliasDeclaration, f: &mut JsFormatter) -> FormatResult<()> { - let TsTypeAliasDeclarationFields { - type_token, - binding_identifier, - type_parameters, - eq_token, - ty, - semicolon_token, - } = node.as_fields(); - + let type_token = node.type_token()?; + let semicolon = node.semicolon_token(); + let assignment_like = format_with(|f| write!(f, [JsAnyAssignmentLike::from(node.clone())])); write!( f, [FormatWithSemicolon::new( - &format_args!( + &format_args![ type_token.format(), space_token(), - binding_identifier.format(), - type_parameters.format(), - space_token(), - eq_token.format(), - space_token(), - ty.format(), - ), - semicolon_token.as_ref() + group_elements(&assignment_like) + ], + semicolon.as_ref() )] ) } diff --git a/crates/rome_js_formatter/src/ts/types/object_type.rs b/crates/rome_js_formatter/src/ts/types/object_type.rs index 89db2ac367b..f1c89491250 100644 --- a/crates/rome_js_formatter/src/ts/types/object_type.rs +++ b/crates/rome_js_formatter/src/ts/types/object_type.rs @@ -1,36 +1,13 @@ use crate::prelude::*; -use crate::utils::node_has_leading_newline; - +use crate::utils::JsObjectLike; use rome_formatter::write; -use rome_js_syntax::{TsObjectType, TsObjectTypeFields}; +use rome_js_syntax::TsObjectType; #[derive(Debug, Clone, Default)] pub struct FormatTsObjectType; impl FormatNodeRule for FormatTsObjectType { fn fmt_fields(&self, node: &TsObjectType, f: &mut JsFormatter) -> FormatResult<()> { - let TsObjectTypeFields { - l_curly_token, - members, - r_curly_token, - } = node.as_fields(); - - if node_has_leading_newline(members.syntax()) { - write!( - f, - [ - format_delimited(&l_curly_token?, &members.format(), &r_curly_token?) - .block_indent() - ] - ) - } else { - write!( - f, - [ - format_delimited(&l_curly_token?, &members.format(), &r_curly_token?,) - .soft_block_spaces() - ] - ) - } + write!(f, [JsObjectLike::from(node.clone())]) } } diff --git a/crates/rome_js_formatter/src/utils/assignment_like.rs b/crates/rome_js_formatter/src/utils/assignment_like.rs index 86fcd89c2b4..f15136b5a19 100644 --- a/crates/rome_js_formatter/src/utils/assignment_like.rs +++ b/crates/rome_js_formatter/src/utils/assignment_like.rs @@ -7,7 +7,8 @@ use rome_js_syntax::{ JsAnyObjectAssignmentPatternMember, JsAnyObjectBindingPatternMember, JsAnyObjectMemberName, JsAssignmentExpression, JsInitializerClause, JsObjectAssignmentPattern, JsObjectAssignmentPatternProperty, JsObjectBindingPattern, JsPropertyObjectMember, - JsSyntaxKind, JsVariableDeclarator, TsAnyVariableAnnotation, TsType, + JsSyntaxKind, JsVariableDeclarator, TsAnyVariableAnnotation, TsIdentifierBinding, TsType, + TsTypeAliasDeclaration, }; use rome_js_syntax::{JsAnyLiteralExpression, JsSyntaxNode}; use rome_rowan::{declare_node_union, AstNode, SyntaxResult}; @@ -17,15 +18,16 @@ declare_node_union! { JsPropertyObjectMember | JsAssignmentExpression | JsObjectAssignmentPatternProperty | - JsVariableDeclarator + JsVariableDeclarator | + TsTypeAliasDeclaration } declare_node_union! { - pub(crate) LeftAssignmentLike = JsAnyAssignmentPattern | JsAnyObjectMemberName | JsAnyBindingPattern + pub(crate) LeftAssignmentLike = JsAnyAssignmentPattern | JsAnyObjectMemberName | JsAnyBindingPattern | TsIdentifierBinding } declare_node_union! { - pub(crate) RightAssignmentLike = JsAnyExpression | JsAnyAssignmentPattern | JsInitializerClause + pub(crate) RightAssignmentLike = JsAnyExpression | JsAnyAssignmentPattern | JsInitializerClause | TsType } declare_node_union! { @@ -151,6 +153,7 @@ impl RightAssignmentLike { RightAssignmentLike::JsAnyExpression(expression) => Some(expression.clone()), RightAssignmentLike::JsInitializerClause(initializer) => initializer.expression().ok(), RightAssignmentLike::JsAnyAssignmentPattern(_) => None, + RightAssignmentLike::TsType(_) => None, } } } @@ -167,6 +170,9 @@ impl Format for RightAssignmentLike { RightAssignmentLike::JsInitializerClause(initializer) => { write!(f, [space_token(), initializer.format()]) } + RightAssignmentLike::TsType(ty) => { + write!(f, [space_token(), ty.format()]) + } } } } @@ -294,6 +300,9 @@ impl JsAnyAssignmentLike { // SAFETY: Calling `unwrap` here is safe because we check `should_only_left` variant at the beginning of the `layout` function Ok(variable_declarator.initializer().unwrap().into()) } + JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) => { + Ok(type_alias_declaration.ty()?.into()) + } } } @@ -309,6 +318,9 @@ impl JsAnyAssignmentLike { JsAnyAssignmentLike::JsVariableDeclarator(variable_declarator) => { Ok(variable_declarator.id()?.into()) } + JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) => { + Ok(type_alias_declaration.binding_identifier()?.into()) + } } } @@ -347,9 +359,20 @@ impl JsAnyAssignmentLike { JsAnyAssignmentLike::JsVariableDeclarator(variable_declarator) => { let id = variable_declarator.id()?; let variable_annotation = variable_declarator.variable_annotation(); + write!(f, [id.format(), variable_annotation.format()])?; Ok(false) } + JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) => { + let binding_identifier = type_alias_declaration.binding_identifier()?; + let type_parameters = type_alias_declaration.type_parameters(); + + write!(f, [binding_identifier.format()])?; + if let Some(type_parameters) = type_parameters { + write!(f, [type_parameters.format(),])?; + } + Ok(false) + } } } @@ -374,6 +397,10 @@ impl JsAnyAssignmentLike { } Ok(()) } + JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) => { + let eq_token = type_alias_declaration.eq_token()?; + write!(f, [space_token(), eq_token.format()]) + } } } @@ -403,6 +430,10 @@ impl JsAnyAssignmentLike { } Ok(()) } + JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) => { + let ty = type_alias_declaration.ty()?; + write!(f, [space_token(), ty.format()]) + } } } @@ -423,10 +454,8 @@ impl JsAnyAssignmentLike { return Ok(AssignmentLikeLayout::BreakLeftHandSide); } - if let Some(expression) = &right { - if should_break_after_operator(expression)? { - return Ok(AssignmentLikeLayout::BreakAfterOperator); - } + if self.should_break_after_operator()? { + return Ok(AssignmentLikeLayout::BreakAfterOperator); } if is_left_short { @@ -559,6 +588,35 @@ impl JsAnyAssignmentLike { Ok(false) } + fn is_complex_type_alias(&self) -> SyntaxResult { + let result = if let JsAnyAssignmentLike::TsTypeAliasDeclaration(type_alias_declaration) = + self + { + let type_parameters = type_alias_declaration.type_parameters(); + + if let Some(type_parameters) = type_parameters { + let items = type_parameters.items(); + if items.len() <= 1 { + return Ok(false); + }; + for type_parameter in type_parameters.items() { + let type_parameter = type_parameter?; + + if type_parameter.constraint().is_some() || type_parameter.default().is_some() { + return Ok(true); + } + } + return Ok(false); + } else { + false + } + } else { + false + }; + + Ok(result) + } + /// Particular function that checks if the left hand side of a [JsAnyAssignmentLike] should /// be broken on multiple lines fn should_break_left_hand_side(&self) -> SyntaxResult { @@ -573,7 +631,25 @@ impl JsAnyAssignmentLike { .and_then(|annotation| is_complex_type_annotation(annotation).ok()) .unwrap_or(false); - Ok(is_complex_destructuring || has_complex_type_annotation) + let is_complex_type_alias = self.is_complex_type_alias()?; + + Ok(is_complex_destructuring || has_complex_type_annotation || is_complex_type_alias) + } + + /// Checks if the the current assignment is eligible for [AssignmentLikeLayout::BreakAfterOperator] + /// + /// This function is small wrapper around [should_break_after_operator] because it has to work + /// for nodes that belong to TypeScript too. + fn should_break_after_operator(&self) -> SyntaxResult { + let right = self.right()?; + + let result = if let Some(expression) = right.as_expression() { + should_break_after_operator(&expression)? + } else { + has_new_line_before_comment(right.syntax()) + }; + + Ok(result) } } diff --git a/crates/rome_js_formatter/src/utils/mod.rs b/crates/rome_js_formatter/src/utils/mod.rs index dfe6b30144e..851b993aad3 100644 --- a/crates/rome_js_formatter/src/utils/mod.rs +++ b/crates/rome_js_formatter/src/utils/mod.rs @@ -9,6 +9,7 @@ pub(crate) mod format_class; pub mod jsx_utils; mod member_chain; mod object; +mod object_like; mod object_pattern_like; #[cfg(test)] mod quickcheck_utils; @@ -18,6 +19,7 @@ pub(crate) use assignment_like::{should_break_after_operator, JsAnyAssignmentLik pub(crate) use binary_like_expression::{format_binary_like_expression, JsAnyBinaryLikeExpression}; pub(crate) use format_conditional::{format_conditional, Conditional}; pub(crate) use member_chain::format_call_expression; +pub(crate) use object_like::JsObjectLike; pub(crate) use object_pattern_like::JsObjectPatternLike; use rome_formatter::{format_args, normalize_newlines, write, Buffer, VecBuffer}; use rome_js_syntax::suppression::{has_suppressions_category, SuppressionCategory}; diff --git a/crates/rome_js_formatter/src/utils/object_like.rs b/crates/rome_js_formatter/src/utils/object_like.rs new file mode 100644 index 00000000000..dd1a4ba0c9f --- /dev/null +++ b/crates/rome_js_formatter/src/utils/object_like.rs @@ -0,0 +1,81 @@ +use crate::prelude::*; +use crate::utils::node_has_leading_newline; +use crate::JsFormatContext; +use rome_formatter::write; +use rome_formatter::{Format, FormatResult}; +use rome_js_syntax::{JsObjectExpression, JsSyntaxToken, TsObjectType}; +use rome_rowan::{declare_node_union, AstNode, AstNodeList, AstSeparatedList, SyntaxResult}; + +declare_node_union! { + pub (crate) JsObjectLike = JsObjectExpression | TsObjectType +} +impl JsObjectLike { + fn l_curly_token(&self) -> SyntaxResult { + match self { + JsObjectLike::JsObjectExpression(oe) => oe.l_curly_token(), + JsObjectLike::TsObjectType(ot) => ot.l_curly_token(), + } + } + fn r_curly_token(&self) -> SyntaxResult { + match self { + JsObjectLike::JsObjectExpression(oe) => oe.r_curly_token(), + JsObjectLike::TsObjectType(ot) => ot.r_curly_token(), + } + } + + fn members_have_leading_newline(&self) -> bool { + match self { + JsObjectLike::JsObjectExpression(oe) => node_has_leading_newline(oe.members().syntax()), + JsObjectLike::TsObjectType(ot) => node_has_leading_newline(ot.members().syntax()), + } + } + + fn members_are_empty(&self) -> bool { + match self { + JsObjectLike::JsObjectExpression(oe) => oe.members().is_empty(), + JsObjectLike::TsObjectType(ot) => ot.members().is_empty(), + } + } + + fn write_members(&self, f: &mut JsFormatter) -> FormatResult<()> { + match self { + JsObjectLike::JsObjectExpression(oe) => { + write!(f, [oe.members().format()]) + } + JsObjectLike::TsObjectType(ot) => { + write!(f, [ot.members().format()]) + } + } + } +} + +impl Format for JsObjectLike { + fn fmt(&self, f: &mut JsFormatter) -> FormatResult<()> { + let members = format_with(|f| self.write_members(f)); + if self.members_are_empty() { + write!( + f, + [ + format_delimited(&self.l_curly_token()?, &members, &self.r_curly_token()?) + .soft_block_indent() + ] + ) + } else if self.members_have_leading_newline() { + write!( + f, + [ + format_delimited(&self.l_curly_token()?, &members, &self.r_curly_token()?) + .block_indent() + ] + ) + } else { + write!( + f, + [ + format_delimited(&self.l_curly_token()?, &members, &self.r_curly_token()?) + .soft_block_spaces() + ] + ) + } + } +} diff --git a/crates/rome_js_formatter/tests/specs/prettier/js/trailing-whitespace/trailing.js.snap b/crates/rome_js_formatter/tests/specs/prettier/js/trailing-whitespace/trailing.js.snap index 84d085c3188..7d008477159 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/js/trailing-whitespace/trailing.js.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/js/trailing-whitespace/trailing.js.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: trailing.js --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/assignment/issue-10846.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/assignment/issue-10846.ts.snap index 4af4db1af5d..9a647a814d8 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/assignment/issue-10846.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/assignment/issue-10846.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: issue-10846.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/cast/generic-cast.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/cast/generic-cast.ts.snap index 7c63a51261b..6dbf02c15b9 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/cast/generic-cast.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/cast/generic-cast.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: generic-cast.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/issues.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/issues.ts.snap index 4971b67f7b9..e8dfe3ef49f 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/issues.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/issues.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: issues.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/type_literals.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/type_literals.ts.snap index 59a4ca8cd14..0f7e97bb627 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/type_literals.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/type_literals.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: type_literals.ts --- # Input @@ -22,10 +23,11 @@ type Props3 = { # Output ```js -type Props1 = { +type Props1 = // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!! - isPlaying: boolean; -}; + { + isPlaying: boolean; + }; type Props2 = { // (DispatchProps & StateProps); WHY DON'T YOU WORK FLOW!!!!!!!!! diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/union.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/union.ts.snap index 08444d65a69..f2001e3eec9 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/union.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/comments/union.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: union.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures.ts.snap index a4e0214e97e..78f664e8bd3 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: unionTypeCallSignatures.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures3.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures3.ts.snap index 2d18e498614..5ac798a0bf1 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures3.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeCallSignatures3.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: unionTypeCallSignatures3.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeConstructSignatures.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeConstructSignatures.ts.snap index 7b61eee3817..00dad31b80f 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeConstructSignatures.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeConstructSignatures.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: unionTypeConstructSignatures.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeIndexSignature.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeIndexSignature.ts.snap index b5b2bb00b80..3a8f15b6369 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeIndexSignature.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/conformance/types/union/unionTypeIndexSignature.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: unionTypeIndexSignature.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/generic/ungrouped-parameters.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/generic/ungrouped-parameters.ts.snap index dc3a7632410..cfc85339f87 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/generic/ungrouped-parameters.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/generic/ungrouped-parameters.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: ungrouped-parameters.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/tuple/trailing-comma-for-empty-tuples.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/tuple/trailing-comma-for-empty-tuples.ts.snap index 73303f3466e..7441072c669 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/tuple/trailing-comma-for-empty-tuples.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/tuple/trailing-comma-for-empty-tuples.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: trailing-comma-for-empty-tuples.ts --- # Input @@ -11,15 +12,16 @@ type Foo = Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo extends [ # Output ```js -type Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong = []; +type Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong = + []; -type Foo = Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo extends [] ? Foo3 : Foo4; +type Foo = + Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo extends [] ? Foo3 : Foo4; ``` # Lines exceeding max width of 80 characters ``` - 1: type Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong = []; - 3: type Foo = Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo extends [] ? Foo3 : Foo4; + 5: Foooooooooooooooooooooooooooooooooooooooooooooooooooooooooo extends [] ? Foo3 : Foo4; ``` diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/inlining.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/inlining.ts.snap index 479040e1f87..07adf29add7 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/inlining.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/inlining.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: inlining.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/prettier-ignore.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/prettier-ignore.ts.snap index 140ed1fd4e9..6dc9d9e758e 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/prettier-ignore.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/prettier-ignore.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: prettier-ignore.ts --- # Input @@ -35,25 +36,25 @@ export type a = # Output ```js export type a = - // foo - | foo1 & foo2 - // bar - | bar1 & bar2 - // prettier-ignore - | qux1 & qux2; + // foo + | foo1 & foo2 + // bar + | bar1 & bar2 + // prettier-ignore + | qux1 & qux2; export type a = - // foo - | foo1 & foo2 - // bar - | bar1 & bar2 - // prettier-ignore - | qux1 & qux2 - // baz - | baz1 & baz2; + // foo + | foo1 & foo2 + // bar + | bar1 & bar2 + // prettier-ignore + | qux1 & qux2 + // baz + | baz1 & baz2; export type a = -// prettier-ignore + // prettier-ignore | foo1&foo2 // bar | bar1&bar2 diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/union-parens.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/union-parens.ts.snap index 3fca4ab8051..12bf85c6343 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/union-parens.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/union-parens.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: union-parens.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/with-type-params.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/with-type-params.ts.snap index a3437c88179..f066a9ef104 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/with-type-params.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/with-type-params.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: with-type-params.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/within-tuple.ts.snap b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/within-tuple.ts.snap index 58800cd0771..629930a5e55 100644 --- a/crates/rome_js_formatter/tests/specs/prettier/typescript/union/within-tuple.ts.snap +++ b/crates/rome_js_formatter/tests/specs/prettier/typescript/union/within-tuple.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/prettier_tests.rs +assertion_line: 182 expression: within-tuple.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/ts/type/template_type.ts.snap b/crates/rome_js_formatter/tests/specs/ts/type/template_type.ts.snap index 8f551257e74..fad09d0617e 100644 --- a/crates/rome_js_formatter/tests/specs/ts/type/template_type.ts.snap +++ b/crates/rome_js_formatter/tests/specs/ts/type/template_type.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/spec_test.rs +assertion_line: 256 expression: template_type.ts --- # Input diff --git a/crates/rome_js_formatter/tests/specs/ts/type/union_type.ts.snap b/crates/rome_js_formatter/tests/specs/ts/type/union_type.ts.snap index d729b71f0ef..ef5f6eb52a7 100644 --- a/crates/rome_js_formatter/tests/specs/ts/type/union_type.ts.snap +++ b/crates/rome_js_formatter/tests/specs/ts/type/union_type.ts.snap @@ -1,5 +1,6 @@ --- source: crates/rome_js_formatter/tests/spec_test.rs +assertion_line: 256 expression: union_type.ts --- # Input @@ -56,10 +57,10 @@ type LongUnion = | Z; type Comments = - // leading separator - | - // leading type - A - | B /* + // leading separator + | + // leading type + A + | B /* trailing type */;