@@ -169,6 +169,7 @@ fn gen_node_with_inner_gen<'a>(node: Node<'a>, context: &mut Context<'a>, inner_
169
169
Node :: AwaitExpr ( node) => gen_await_expr ( node, context) ,
170
170
Node :: BinExpr ( node) => gen_binary_expr ( node, context) ,
171
171
Node :: CallExpr ( node) => gen_call_expr ( node, context) ,
172
+ Node :: Import ( _) => "import" . into ( ) ,
172
173
Node :: ClassExpr ( node) => gen_class_expr ( node, context) ,
173
174
Node :: CondExpr ( node) => gen_conditional_expr ( node, context) ,
174
175
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_
178
179
Node :: AssignProp ( node) => gen_assign_prop ( node, context) ,
179
180
Node :: MemberExpr ( node) => gen_member_expr ( node, context) ,
180
181
Node :: MetaPropExpr ( node) => gen_meta_prop_expr ( node, context) ,
182
+ Node :: SuperPropExpr ( node) => gen_super_prop_expr ( node, context) ,
181
183
Node :: NewExpr ( node) => gen_new_expr ( node, context) ,
182
184
Node :: ObjectLit ( node) => gen_object_lit ( node, context) ,
183
185
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
474
476
type_ann : & node. type_ann ,
475
477
is_static : node. is_static ( ) ,
476
478
decorators : & node. decorators ,
477
- computed : node. key . kind ( ) == NodeKind :: ComputedPropName ,
479
+ computed : matches ! ( node. key, PropName :: Computed ( _ ) ) ,
478
480
is_declare : node. declare ( ) ,
479
481
accessibility : node. accessibility ( ) ,
480
482
is_abstract : node. is_abstract ( ) ,
@@ -1925,9 +1927,9 @@ fn gen_call_expr<'a>(node: &'a CallExpr, context: &mut Context<'a>) -> PrintItem
1925
1927
items. extend ( gen_test_library_arguments ( & node. args , context) ) ;
1926
1928
return items;
1927
1929
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 {
1929
1931
match callee {
1930
- ExprOrSuper :: Expr ( expr) => match expr {
1932
+ Callee :: Expr ( expr) => match expr {
1931
1933
Expr :: Member ( member_expr) => {
1932
1934
let mut items = PrintItems :: new ( ) ;
1933
1935
items. extend ( gen_node ( member_expr. obj . into ( ) , context) ) ;
@@ -2241,7 +2243,7 @@ fn should_add_parens_around_expr(node: Node, context: &Context) -> bool {
2241
2243
}
2242
2244
Node :: ExprStmt ( _) => return true ,
2243
2245
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 ( ) ) {
2245
2247
return false ;
2246
2248
}
2247
2249
}
@@ -2315,6 +2317,11 @@ fn gen_meta_prop_expr<'a>(node: &'a MetaPropExpr, context: &mut Context<'a>) ->
2315
2317
gen_for_flattened_member_like_expr ( flattened_meta_prop_expr, context)
2316
2318
}
2317
2319
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
+
2318
2325
fn gen_new_expr < ' a > ( node : & ' a NewExpr , context : & mut Context < ' a > ) -> PrintItems {
2319
2326
let mut items = PrintItems :: new ( ) ;
2320
2327
items. push_str ( "new " ) ;
@@ -2433,7 +2440,13 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
2433
2440
let parent = node. parent ( ) ;
2434
2441
if matches ! (
2435
2442
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
2437
2450
) {
2438
2451
return true ;
2439
2452
}
@@ -2455,7 +2468,7 @@ fn should_skip_paren_expr(node: &ParenExpr, context: &Context) -> bool {
2455
2468
}
2456
2469
2457
2470
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 ( ) ) {
2459
2472
return true ;
2460
2473
}
2461
2474
}
@@ -2615,7 +2628,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
2615
2628
// handle this on a case by case basis for now
2616
2629
fn get_keep_on_one_line ( node : & Node ) -> bool {
2617
2630
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 ,
2619
2632
Node :: MemberExpr ( expr) => keep_member_expr_on_one_line ( expr) ,
2620
2633
Node :: CallExpr ( expr) => keep_call_expr_on_one_line ( expr) ,
2621
2634
_ => false ,
@@ -2633,7 +2646,7 @@ fn gen_template_literal<'a>(quasis: Vec<Node<'a>>, exprs: Vec<Node<'a>>, context
2633
2646
}
2634
2647
2635
2648
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 ( _ ) )
2637
2650
}
2638
2651
2639
2652
fn keep_call_expr_on_one_line ( expr : & CallExpr ) -> bool {
@@ -6464,10 +6477,8 @@ where
6464
6477
6465
6478
fn is_dynamic_import ( node : & Node ) -> bool {
6466
6479
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 ;
6471
6482
}
6472
6483
}
6473
6484
@@ -6571,10 +6582,7 @@ fn gen_close_paren_with_type<'a>(opts: GenCloseParenWithTypeOptions<'a>, context
6571
6582
// look good especially when the return type then becomes multi-line.
6572
6583
match type_node {
6573
6584
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 ( _) ) ,
6578
6586
_ => true ,
6579
6587
}
6580
6588
} else {
@@ -7096,35 +7104,21 @@ fn gen_for_member_like_expr_item<'a>(item: &MemberLikeExprItem<'a>, context: &mu
7096
7104
if !is_first {
7097
7105
if is_optional {
7098
7106
items. push_str ( "?." ) ;
7099
- } else {
7107
+ } else if node . kind ( ) != NodeKind :: ComputedPropName {
7100
7108
items. push_str ( "." ) ;
7101
7109
}
7102
7110
}
7103
7111
items. extend ( node_items) ;
7104
7112
items
7105
7113
} )
7106
7114
}
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
7109
7117
let mut items = PrintItems :: new ( ) ;
7110
-
7111
- if is_optional {
7112
- items. push_str ( "?." ) ;
7118
+ if !is_first {
7119
+ items. push_str ( "." ) ;
7113
7120
}
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 ) ) ;
7128
7122
items
7129
7123
}
7130
7124
MemberLikeExprItem :: CallExpr ( node) => {
@@ -7164,8 +7158,7 @@ fn gen_for_flattened_member_like_expr<'a>(node: FlattenedMemberLikeExpr<'a>, con
7164
7158
for ( i, item) in node. nodes . iter ( ) . enumerate ( ) . skip ( 1 ) {
7165
7159
let force_use_new_line =
7166
7160
!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 ( ) {
7169
7162
if force_use_new_line {
7170
7163
items. push_signal ( Signal :: NewLine ) ;
7171
7164
} else if !context. config . member_expression_line_per_expression {
@@ -7909,7 +7902,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
7909
7902
inner_span,
7910
7903
items : children. into_iter ( ) . map ( |( a, b) | ( a, Some ( b. into ( ) ) ) ) . collect ( ) ,
7911
7904
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 ) {
7913
7906
true
7914
7907
} else if let Node :: JSXText ( element) = previous {
7915
7908
element. text_fast ( context. program ) . ends_with ( ' ' )
@@ -7920,7 +7913,7 @@ fn gen_jsx_children<'a>(opts: GenJsxChildrenOptions<'a>, context: &mut Context<'
7920
7913
}
7921
7914
} ) ) ,
7922
7915
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 ) {
7924
7917
false // prefer collapsing
7925
7918
} else if let Node :: JSXText ( next) = next {
7926
7919
!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)
8512
8505
8513
8506
fn allow_inline_for_call_expr ( node : & CallExpr ) -> bool {
8514
8507
// 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 ) ;
8516
8509
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 ,
8525
8523
}
8526
8524
}
8527
8525
}
0 commit comments