5
5
"use strict"
6
6
7
7
const path = require ( "path" )
8
- const { getStringIfConstant } = require ( "eslint-utils" )
8
+ const { CALL , ReferenceTracker , getStringIfConstant } = require ( "eslint-utils" )
9
9
const resolve = require ( "resolve" )
10
10
const getResolvePaths = require ( "./get-resolve-paths" )
11
11
const getTryExtensions = require ( "./get-try-extensions" )
12
12
const ImportTarget = require ( "./import-target" )
13
13
const stripImportPathParams = require ( "./strip-import-path-params" )
14
14
15
- /**
16
- * Checks whether or not a given node is a callee.
17
- *
18
- * @param {ASTNode } node - A node to check.
19
- * @returns {boolean } `true` if the node is a callee.
20
- */
21
- function isCallee ( node ) {
22
- return node . parent . type === "CallExpression" && node . parent . callee === node
23
- }
24
-
25
- /**
26
- * Gets references of "require".
27
- *
28
- * @param {escope.Scope } scope - The global scope.
29
- * @returns {escope.Reference[] } References of "require".
30
- */
31
- function getReferencesOfRequire ( scope ) {
32
- const variable = scope . set . get ( "require" )
33
- if ( ! variable ) {
34
- // Not found.
35
- return [ ]
36
- }
37
- return variable . references
38
- }
39
-
40
15
/**
41
16
* Gets a list of `require()` targets.
42
17
*
@@ -50,20 +25,18 @@ module.exports = function getRequireTargets(context, includeCore) {
50
25
const retv = [ ]
51
26
const basedir = path . dirname ( path . resolve ( context . getFilename ( ) ) )
52
27
const paths = getResolvePaths ( context )
53
- const references = getReferencesOfRequire ( context . getScope ( ) )
54
28
const extensions = getTryExtensions ( context )
55
29
const options = { basedir, paths, extensions }
56
-
57
- for ( const reference of references ) {
58
- const node = reference . identifier
59
-
60
- // Skips if it's not a call of `require`.
61
- if ( ! isCallee ( node ) ) {
62
- continue
63
- }
64
-
65
- // Gets the target module.
66
- const targetNode = node . parent . arguments [ 0 ]
30
+ const tracker = new ReferenceTracker ( context . getScope ( ) )
31
+ const references = tracker . iterateGlobalReferences ( {
32
+ require : {
33
+ [ CALL ] : true ,
34
+ resolve : { [ CALL ] : true } ,
35
+ } ,
36
+ } )
37
+
38
+ for ( const { node } of references ) {
39
+ const targetNode = node . arguments [ 0 ]
67
40
const rawName = getStringIfConstant ( targetNode )
68
41
const name = rawName && stripImportPathParams ( rawName )
69
42
if ( name && ( includeCore || ! resolve . isCore ( name ) ) ) {
0 commit comments