55"use strict"
66
77const path = require ( "path" )
8- const { getStringIfConstant } = require ( "eslint-utils" )
8+ const { CALL , ReferenceTracker , getStringIfConstant } = require ( "eslint-utils" )
99const resolve = require ( "resolve" )
1010const getResolvePaths = require ( "./get-resolve-paths" )
1111const getTryExtensions = require ( "./get-try-extensions" )
1212const ImportTarget = require ( "./import-target" )
1313const stripImportPathParams = require ( "./strip-import-path-params" )
1414
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-
4015/**
4116 * Gets a list of `require()` targets.
4217 *
@@ -50,20 +25,18 @@ module.exports = function getRequireTargets(context, includeCore) {
5025 const retv = [ ]
5126 const basedir = path . dirname ( path . resolve ( context . getFilename ( ) ) )
5227 const paths = getResolvePaths ( context )
53- const references = getReferencesOfRequire ( context . getScope ( ) )
5428 const extensions = getTryExtensions ( context )
5529 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 ]
6740 const rawName = getStringIfConstant ( targetNode )
6841 const name = rawName && stripImportPathParams ( rawName )
6942 if ( name && ( includeCore || ! resolve . isCore ( name ) ) ) {
0 commit comments