@@ -333,9 +333,21 @@ function registerNode(context, importEntry, ranks, imported, excludedImportTypes
333
333
}
334
334
}
335
335
336
- function isInVariableDeclarator ( node ) {
337
- return node &&
338
- ( node . type === 'VariableDeclarator' || isInVariableDeclarator ( node . parent ) )
336
+ function isModuleLevelRequire ( node ) {
337
+ let n = node
338
+ // Handle cases like `const baz = require('foo').bar.baz`
339
+ // and `const foo = require('foo')()`
340
+ while (
341
+ ( n . parent . type === 'MemberExpression' && n . parent . object === n ) ||
342
+ ( n . parent . type === 'CallExpression' && n . parent . callee === n )
343
+ ) {
344
+ n = n . parent
345
+ }
346
+ return (
347
+ n . parent . type === 'VariableDeclarator' &&
348
+ n . parent . parent . type === 'VariableDeclaration' &&
349
+ n . parent . parent . parent . type === 'Program'
350
+ )
339
351
}
340
352
341
353
const types = [ 'builtin' , 'external' , 'internal' , 'unknown' , 'parent' , 'sibling' , 'index' , 'object' ]
@@ -583,14 +595,6 @@ module.exports = {
583
595
}
584
596
}
585
597
let imported = [ ]
586
- let level = 0
587
-
588
- function incrementLevel ( ) {
589
- level ++
590
- }
591
- function decrementLevel ( ) {
592
- level --
593
- }
594
598
595
599
return {
596
600
ImportDeclaration : function handleImports ( node ) {
@@ -641,7 +645,7 @@ module.exports = {
641
645
)
642
646
} ,
643
647
CallExpression : function handleRequires ( node ) {
644
- if ( level !== 0 || ! isStaticRequire ( node ) || ! isInVariableDeclarator ( node . parent ) ) {
648
+ if ( ! isStaticRequire ( node ) || ! isModuleLevelRequire ( node ) ) {
645
649
return
646
650
}
647
651
const name = node . arguments [ 0 ] . value
@@ -671,16 +675,6 @@ module.exports = {
671
675
672
676
imported = [ ]
673
677
} ,
674
- FunctionDeclaration : incrementLevel ,
675
- FunctionExpression : incrementLevel ,
676
- ArrowFunctionExpression : incrementLevel ,
677
- BlockStatement : incrementLevel ,
678
- ObjectExpression : incrementLevel ,
679
- 'FunctionDeclaration:exit' : decrementLevel ,
680
- 'FunctionExpression:exit' : decrementLevel ,
681
- 'ArrowFunctionExpression:exit' : decrementLevel ,
682
- 'BlockStatement:exit' : decrementLevel ,
683
- 'ObjectExpression:exit' : decrementLevel ,
684
678
}
685
679
} ,
686
680
}
0 commit comments