@@ -169,6 +169,7 @@ fn gen_node_with_inner_gen<'a>(node: Node<'a>, context: &mut Context<'a>, inner_
169169 Node :: AwaitExpr ( node) => gen_await_expr ( node, context) ,
170170 Node :: BinExpr ( node) => gen_binary_expr ( node, context) ,
171171 Node :: CallExpr ( node) => gen_call_expr ( node, context) ,
172+ Node :: Import ( _) => "import" . into ( ) ,
172173 Node :: ClassExpr ( node) => gen_class_expr ( node, context) ,
173174 Node :: CondExpr ( node) => gen_conditional_expr ( node, context) ,
174175 Node :: ExprOrSpread ( node) => gen_expr_or_spread ( node, context) ,
@@ -178,6 +179,7 @@ fn gen_node_with_inner_gen<'a>(node: Node<'a>, context: &mut Context<'a>, inner_
178179 Node :: AssignProp ( node) => gen_assign_prop ( node, context) ,
179180 Node :: MemberExpr ( node) => gen_member_expr ( node, context) ,
180181 Node :: MetaPropExpr ( node) => gen_meta_prop_expr ( node, context) ,
182+ Node :: SuperPropExpr ( node) => gen_super_prop_expr ( node, context) ,
181183 Node :: NewExpr ( node) => gen_new_expr ( node, context) ,
182184 Node :: ObjectLit ( node) => gen_object_lit ( node, context) ,
183185 Node :: OptChainExpr ( node) => gen_node ( node. expr . into ( ) , context) ,
@@ -474,7 +476,7 @@ fn gen_class_prop<'a>(node: &'a ClassProp, context: &mut Context<'a>) -> PrintIt
474476 type_ann : & node. type_ann ,
475477 is_static : node. is_static ( ) ,
476478 decorators : & node. decorators ,
477- computed : node. key . kind ( ) == NodeKind :: ComputedPropName ,
479+ computed : matches ! ( node. key, PropName :: Computed ( _ ) ) ,
478480 is_declare : node. declare ( ) ,
479481 accessibility : node. accessibility ( ) ,
480482 is_abstract : node. is_abstract ( ) ,
@@ -1925,9 +1927,9 @@ fn gen_call_expr<'a>(node: &'a CallExpr, context: &mut Context<'a>) -> PrintItem
19251927 items. extend ( gen_test_library_arguments ( & node. args , context) ) ;
19261928 return items;
19271929
1928- fn gen_test_library_callee < ' a > ( callee : & ' a ExprOrSuper , context : & mut Context < ' a > ) -> PrintItems {
1930+ fn gen_test_library_callee < ' a > ( callee : & ' a Callee , context : & mut Context < ' a > ) -> PrintItems {
19291931 match callee {
1930- ExprOrSuper :: Expr ( expr) => match expr {
1932+ Callee :: Expr ( expr) => match expr {
19311933 Expr :: Member ( member_expr) => {
19321934 let mut items = PrintItems :: new ( ) ;
19331935 items. extend ( gen_node ( member_expr. obj . into ( ) , context) ) ;
@@ -2241,7 +2243,7 @@ fn should_add_parens_around_expr(node: Node, context: &Context) -> bool {
22412243 }
22422244 Node :: ExprStmt ( _) => return true ,
22432245 Node :: MemberExpr ( expr) => {
2244- if expr. computed ( ) && expr. prop . span ( ) . contains ( original_node. span ( ) ) {
2246+ if matches ! ( expr. prop , MemberProp :: Computed ( _ ) ) && expr. prop . span ( ) . contains ( original_node. span ( ) ) {
22452247 return false ;
22462248 }
22472249 }
@@ -2315,6 +2317,11 @@ fn gen_meta_prop_expr<'a>(node: &'a MetaPropExpr, context: &mut Context<'a>) ->
23152317 gen_for_flattened_member_like_expr ( flattened_meta_prop_expr, context)
23162318}
23172319
2320+ fn gen_super_prop_expr < ' a > ( node : & ' a SuperPropExpr , context : & mut Context < ' a > ) -> PrintItems {
2321+ let flattened_member_expr = flatten_member_like_expr ( node. into ( ) , context. program ) ;
2322+ gen_for_flattened_member_like_expr ( flattened_member_expr, context)
2323+ }
2324+
23182325fn gen_new_expr < ' a > ( node : & ' a NewExpr , context : & mut Context < ' a > ) -> PrintItems {
23192326 let mut items = PrintItems :: new ( ) ;
23202327 items. push_str ( "new " ) ;
@@ -2433,7 +2440,13 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
24332440 let parent = node. parent ( ) ;
24342441 if matches ! (
24352442 parent. kind( ) ,
2436- NodeKind :: ParenExpr | NodeKind :: ExprStmt | NodeKind :: JSXElement | NodeKind :: JSXFragment | NodeKind :: JSXExprContainer | NodeKind :: UpdateExpr
2443+ NodeKind :: ParenExpr
2444+ | NodeKind :: ExprStmt
2445+ | NodeKind :: JSXElement
2446+ | NodeKind :: JSXFragment
2447+ | NodeKind :: JSXExprContainer
2448+ | NodeKind :: UpdateExpr
2449+ | NodeKind :: ComputedPropName
24372450 ) {
24382451 return true ;
24392452 }
@@ -2455,7 +2468,7 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
24552468 }
24562469
24572470 if let Node :: MemberExpr ( member_expr) = parent {
2458- if member_expr. computed ( ) && member_expr. prop . span ( ) . contains ( node. span ( ) ) {
2471+ if matches ! ( member_expr. prop , MemberProp :: Computed ( _ ) ) && member_expr. prop . span ( ) . contains ( node. span ( ) ) {
24592472 return true ;
24602473 }
24612474 }
@@ -2615,7 +2628,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
26152628 // handle this on a case by case basis for now
26162629 fn get_keep_on_one_line ( node : & Node ) -> bool {
26172630 match node {
2618- Node :: Ident ( _) | Node :: ThisExpr ( _) | Node :: Super ( _) | Node :: Str ( _) | Node :: PrivateName ( _) => true ,
2631+ Node :: Ident ( _) | Node :: ThisExpr ( _) | Node :: SuperPropExpr ( _ ) | Node :: MetaPropExpr ( _) | Node :: Str ( _) | Node :: PrivateName ( _) => true ,
26192632 Node :: MemberExpr ( expr) => keep_member_expr_on_one_line ( expr) ,
26202633 Node :: CallExpr ( expr) => keep_call_expr_on_one_line ( expr) ,
26212634 _ => false ,
@@ -2633,7 +2646,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
26332646 }
26342647
26352648 fn keep_member_expr_on_one_line ( expr : & MemberExpr ) -> bool {
2636- get_keep_on_one_line ( & expr. obj . into ( ) ) && get_keep_on_one_line ( & expr. prop . into ( ) ) && !expr. computed ( )
2649+ get_keep_on_one_line ( & expr. obj . into ( ) ) && get_keep_on_one_line ( & expr. prop . into ( ) ) && !matches ! ( expr. prop , MemberProp :: Computed ( _ ) )
26372650 }
26382651
26392652 fn keep_call_expr_on_one_line ( expr : & CallExpr ) -> bool {
@@ -6464,10 +6477,8 @@ where
64646477
64656478 fn is_dynamic_import ( node : & Node ) -> bool {
64666479 if let Node :: CallExpr ( call_expr) = & node {
6467- if let ExprOrSuper :: Expr ( Expr :: Ident ( ident) ) = & call_expr. callee {
6468- if ( ident. sym ( ) as & str ) == "import" {
6469- return true ;
6470- }
6480+ if let Callee :: Import ( _) = & call_expr. callee {
6481+ return true ;
64716482 }
64726483 }
64736484
@@ -6571,10 +6582,7 @@ fn gen_close_paren_with_type<'a>(opts: GenCloseParenWithTypeOptions<'a>, context
65716582 // look good especially when the return type then becomes multi-line.
65726583 match type_node {
65736584 Node :: TsUnionType ( _) | Node :: TsIntersectionType ( _) => false ,
6574- Node :: TsTypeAnn ( type_ann) => match type_ann. type_ann {
6575- TsType :: TsUnionOrIntersectionType ( _) => false ,
6576- _ => true ,
6577- } ,
6585+ Node :: TsTypeAnn ( type_ann) => !matches ! ( type_ann. type_ann, TsType :: TsUnionOrIntersectionType ( _) ) ,
65786586 _ => true ,
65796587 }
65806588 } else {
@@ -7096,35 +7104,21 @@ fn gen_for_member_like_expr_item<'a>(item: &MemberLikeExprItem<'a>, context: &mu
70967104 if !is_first {
70977105 if is_optional {
70987106 items. push_str ( "?." ) ;
7099- } else {
7107+ } else if node . kind ( ) != NodeKind :: ComputedPropName {
71007108 items. push_str ( "." ) ;
71017109 }
71027110 }
71037111 items. extend ( node_items) ;
71047112 items
71057113 } )
71067114 }
7107- MemberLikeExprItem :: Computed ( node ) => {
7108- let is_optional = item . is_optional ( ) ;
7115+ MemberLikeExprItem :: Token ( token ) => {
7116+ // don't bother with intertwined comments as its too much trouble
71097117 let mut items = PrintItems :: new ( ) ;
7110-
7111- if is_optional {
7112- items. push_str ( "?." ) ;
7118+ if !is_first {
7119+ items. push_str ( "." ) ;
71137120 }
7114- items. extend ( gen_computed_prop_like (
7115- |context| gen_node ( node. inner_node , context) ,
7116- GenComputedPropLikeOptions {
7117- inner_node_span : node. inner_node . span ( ) ,
7118- } ,
7119- context,
7120- ) ) ;
7121-
7122- if !is_last {
7123- // Manually generate the trailing comments of the close bracket token
7124- // because it doesn't go through the gen_node method
7125- items. extend ( gen_trailing_comments ( item, context) ) ;
7126- }
7127-
7121+ items. push_str ( token. text_fast ( context. program ) ) ;
71287122 items
71297123 }
71307124 MemberLikeExprItem :: CallExpr ( node) => {
@@ -7164,8 +7158,7 @@ fn gen_for_flattened_member_like_expr<'a>(node: FlattenedMemberLikeExpr<'a>, con
71647158 for ( i, item) in node. nodes . iter ( ) . enumerate ( ) . skip ( 1 ) {
71657159 let force_use_new_line =
71667160 !context. config . member_expression_prefer_single_line && node_helpers:: get_use_new_lines_for_nodes ( & node. nodes [ i - 1 ] , & node. nodes [ i] , context. program ) ;
7167- let is_optional = item. is_optional ( ) ;
7168- if is_optional || !item. is_computed ( ) {
7161+ if item. is_optional ( ) || !item. is_computed ( ) {
71697162 if force_use_new_line {
71707163 items. push_signal ( Signal :: NewLine ) ;
71717164 } else if !context. config . member_expression_line_per_expression {
@@ -7909,7 +7902,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
79097902 inner_span,
79107903 items : children. into_iter ( ) . map ( |( a, b) | ( a, Some ( b. into ( ) ) ) ) . collect ( ) ,
79117904 should_use_space : Some ( Box :: new ( |previous, next, context| {
7912- if has_jsx_space_between ( previous, next, & context. program ) {
7905+ if has_jsx_space_between ( previous, next, context. program ) {
79137906 true
79147907 } else if let Node :: JSXText ( element) = previous {
79157908 element. text_fast ( context. program ) . ends_with ( ' ' )
@@ -7920,7 +7913,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
79207913 }
79217914 } ) ) ,
79227915 should_use_new_line : Some ( Box :: new ( |previous, next, context| {
7923- if has_jsx_space_between ( previous, next, & context. program ) {
7916+ if has_jsx_space_between ( previous, next, context. program ) {
79247917 false // prefer collapsing
79257918 } else if let Node :: JSXText ( next) = next {
79267919 !utils:: has_no_new_lines_in_leading_whitespace ( next. text_fast ( context. program ) )
@@ -8512,16 +8505,21 @@ fn allows_inline_multi_line(node: &Node, context: &Context, has_siblings: bool)
85128505
85138506 fn allow_inline_for_call_expr ( node : & CallExpr ) -> bool {
85148507 // do not allow call exprs with nested call exprs in the member expr to be inline
8515- return allow_for_expr_or_super ( & node. callee ) ;
8508+ return allow_for_callee ( & node. callee ) ;
85168509
8517- fn allow_for_expr_or_super ( expr_or_super : & ExprOrSuper ) -> bool {
8518- match expr_or_super {
8519- ExprOrSuper :: Expr ( expr) => match expr {
8520- Expr :: Member ( member_expr) => allow_for_expr_or_super ( & member_expr. obj ) ,
8521- Expr :: Call ( _) => false ,
8522- _ => true ,
8523- } ,
8524- ExprOrSuper :: Super ( _) => true ,
8510+ fn allow_for_callee ( callee : & Callee ) -> bool {
8511+ match callee {
8512+ Callee :: Expr ( expr) => allow_for_expr ( expr) ,
8513+ Callee :: Import ( _) => false ,
8514+ Callee :: Super ( _) => true ,
8515+ }
8516+ }
8517+
8518+ fn allow_for_expr ( expr : & Expr ) -> bool {
8519+ match expr {
8520+ Expr :: Member ( member_expr) => allow_for_expr ( & member_expr. obj ) ,
8521+ Expr :: Call ( _) => false ,
8522+ _ => true ,
85258523 }
85268524 }
85278525 }
0 commit comments