@@ -33,7 +33,7 @@ pub fn parse_jest_fn_call<'a>(
33
33
parent_kind : Some ( KnownMemberExpressionParentKind :: Call ) ,
34
34
grandparent_kind : None ,
35
35
} ;
36
- let chain = get_node_chain ( & params) ;
36
+ let mut chain = get_node_chain ( & params) ;
37
37
let all_member_expr_except_last =
38
38
chain. iter ( ) . rev ( ) . skip ( 1 ) . all ( |member| {
39
39
matches ! ( member. parent_kind, Some ( KnownMemberExpressionParentKind :: Member ) )
@@ -57,16 +57,14 @@ pub fn parse_jest_fn_call<'a>(
57
57
58
58
let name = resolved. original . unwrap_or ( resolved. local ) ;
59
59
let kind = JestFnKind :: from ( name) ;
60
- let mut members = Vec :: new ( ) ;
61
- let mut iter = chain. into_iter ( ) ;
62
- let head = iter. next ( ) ?;
63
- let rest = iter;
64
60
65
61
// every member node must have a member expression as their parent
66
62
// in order to be part of the call chain we're parsing
67
- for member in rest {
68
- members. push ( member) ;
69
- }
63
+ let ( head, members) = {
64
+ let rest = chain. split_off ( 1 ) ;
65
+ let head = chain. into_iter ( ) . next ( ) . unwrap ( ) ;
66
+ ( head, rest)
67
+ } ;
70
68
71
69
if matches ! ( kind, JestFnKind :: Expect | JestFnKind :: ExpectTypeOf ) {
72
70
let options = ExpectFnCallOptions {
@@ -465,6 +463,14 @@ struct NodeChainParams<'a> {
465
463
/// Port from [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest/blob/a058f22f94774eeea7980ea2d1f24c6808bf3e2c/src/rules/utils/parseJestFnCall.ts#L36-L51)
466
464
fn get_node_chain < ' a > ( params : & NodeChainParams < ' a > ) -> Vec < KnownMemberExpressionProperty < ' a > > {
467
465
let mut chain = Vec :: new ( ) ;
466
+ recurse_extend_node_chain ( params, & mut chain) ;
467
+ chain
468
+ }
469
+
470
+ fn recurse_extend_node_chain < ' a > (
471
+ params : & NodeChainParams < ' a > ,
472
+ chain : & mut Vec < KnownMemberExpressionProperty < ' a > > ,
473
+ ) {
468
474
let NodeChainParams { expr, parent, parent_kind, grandparent_kind } = params;
469
475
470
476
match expr {
@@ -477,7 +483,7 @@ fn get_node_chain<'a>(params: &NodeChainParams<'a>) -> Vec<KnownMemberExpression
477
483
grandparent_kind : * parent_kind,
478
484
} ;
479
485
480
- chain . extend ( get_node_chain ( & params) ) ;
486
+ recurse_extend_node_chain ( & params, chain ) ;
481
487
if let Some ( ( span, element) ) = MemberExpressionElement :: from_member_expr ( member_expr) {
482
488
chain. push ( KnownMemberExpressionProperty {
483
489
element,
@@ -504,8 +510,7 @@ fn get_node_chain<'a>(params: &NodeChainParams<'a>) -> Vec<KnownMemberExpression
504
510
parent_kind : Some ( KnownMemberExpressionParentKind :: Call ) ,
505
511
grandparent_kind : * parent_kind,
506
512
} ;
507
- let sub_chain = get_node_chain ( & params) ;
508
- chain. extend ( sub_chain) ;
513
+ recurse_extend_node_chain ( & params, chain) ;
509
514
}
510
515
Expression :: TaggedTemplateExpression ( tagged_expr) => {
511
516
let params = NodeChainParams {
@@ -514,9 +519,7 @@ fn get_node_chain<'a>(params: &NodeChainParams<'a>) -> Vec<KnownMemberExpression
514
519
parent_kind : Some ( KnownMemberExpressionParentKind :: TaggedTemplate ) ,
515
520
grandparent_kind : * parent_kind,
516
521
} ;
517
-
518
- let sub_chain = get_node_chain ( & params) ;
519
- chain. extend ( sub_chain) ;
522
+ recurse_extend_node_chain ( & params, chain) ;
520
523
}
521
524
Expression :: StringLiteral ( string_literal) => {
522
525
chain. push ( KnownMemberExpressionProperty {
@@ -538,8 +541,6 @@ fn get_node_chain<'a>(params: &NodeChainParams<'a>) -> Vec<KnownMemberExpression
538
541
}
539
542
_ => { }
540
543
} ;
541
-
542
- chain
543
544
}
544
545
545
546
// sorted list for binary search.
0 commit comments