@@ -4,6 +4,7 @@ import { ReferenceTracker } from '@eslint-community/eslint-utils';
4
4
import { findVariable } from '../utils/ast-utils.js' ;
5
5
import type { RuleContext } from '../types.js' ;
6
6
import { isAbsoluteURL , isFragmentURL } from '../utils/url-utils.js' ;
7
+ import { ASTSearchHelper } from '../utils/ast-search-helper.js' ;
7
8
8
9
export default createRule ( 'no-navigation-without-resolve' , {
9
10
meta : {
@@ -218,28 +219,25 @@ function isResolveCall(
218
219
node : TSESTree . CallExpressionArgument ,
219
220
resolveReferences : Set < TSESTree . Identifier >
220
221
) : boolean {
221
- if (
222
- node . type === 'CallExpression' &&
223
- ( ( node . callee . type === 'Identifier' && resolveReferences . has ( node . callee ) ) ||
224
- ( node . callee . type === 'MemberExpression' &&
225
- node . callee . property . type === 'Identifier' &&
226
- resolveReferences . has ( node . callee . property ) ) )
227
- ) {
228
- return true ;
229
- }
230
- if ( node . type === 'Identifier' ) {
231
- const variable = findVariable ( context , node ) ;
232
- if (
233
- variable !== null &&
234
- variable . identifiers . length > 0 &&
235
- variable . identifiers [ 0 ] . parent . type === 'VariableDeclarator' &&
236
- variable . identifiers [ 0 ] . parent . init !== null &&
237
- isResolveCall ( context , variable . identifiers [ 0 ] . parent . init , resolveReferences )
238
- ) {
239
- return true ;
240
- }
241
- }
242
- return false ;
222
+ return (
223
+ ASTSearchHelper ( node , {
224
+ CallExpression : ( node ) =>
225
+ ( node . callee . type === 'Identifier' && resolveReferences . has ( node . callee ) ) ||
226
+ ( node . callee . type === 'MemberExpression' &&
227
+ node . callee . property . type === 'Identifier' &&
228
+ resolveReferences . has ( node . callee . property ) ) ,
229
+ Identifier : ( node , searchAnotherNode ) => {
230
+ const variable = findVariable ( context , node ) ;
231
+ return (
232
+ variable !== null &&
233
+ variable . identifiers . length > 0 &&
234
+ variable . identifiers [ 0 ] . parent . type === 'VariableDeclarator' &&
235
+ variable . identifiers [ 0 ] . parent . init !== null &&
236
+ searchAnotherNode ( variable . identifiers [ 0 ] . parent . init )
237
+ ) ;
238
+ }
239
+ } ) ?? false
240
+ ) ;
243
241
}
244
242
245
243
function expressionIsEmpty ( url : TSESTree . CallExpressionArgument ) : boolean {
0 commit comments