You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							59 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							59 lines
						
					
					
						
							2.0 KiB
						
					
					
				/** | 
						|
 * @author Toru Nagashima | 
						|
 * See LICENSE file in root directory for full license. | 
						|
 */ | 
						|
"use strict" | 
						|
 | 
						|
const path = require("path") | 
						|
const { CALL, ReferenceTracker, getStringIfConstant } = require("eslint-utils") | 
						|
const resolve = require("resolve") | 
						|
const getResolvePaths = require("./get-resolve-paths") | 
						|
const getTryExtensions = require("./get-try-extensions") | 
						|
const ImportTarget = require("./import-target") | 
						|
const stripImportPathParams = require("./strip-import-path-params") | 
						|
 | 
						|
/** | 
						|
 * Gets a list of `require()` targets. | 
						|
 * | 
						|
 * Core modules of Node.js (e.g. `fs`, `http`) are excluded. | 
						|
 * | 
						|
 * @param {RuleContext} context - The rule context. | 
						|
 * @param {Object} [options] - The flag to include core modules. | 
						|
 * @param {boolean} [options.includeCore] - The flag to include core modules. | 
						|
 * @param {function(ImportTarget[]):void} callback The callback function to get result. | 
						|
 * @returns {Object} The visitor. | 
						|
 */ | 
						|
module.exports = function visitRequire( | 
						|
    context, | 
						|
    { includeCore = false } = {}, | 
						|
    callback | 
						|
) { | 
						|
    const targets = [] | 
						|
    const basedir = path.dirname(path.resolve(context.getFilename())) | 
						|
    const paths = getResolvePaths(context) | 
						|
    const extensions = getTryExtensions(context) | 
						|
    const options = { basedir, paths, extensions } | 
						|
 | 
						|
    return { | 
						|
        "Program:exit"() { | 
						|
            const tracker = new ReferenceTracker(context.getScope()) | 
						|
            const references = tracker.iterateGlobalReferences({ | 
						|
                require: { | 
						|
                    [CALL]: true, | 
						|
                    resolve: { [CALL]: true }, | 
						|
                }, | 
						|
            }) | 
						|
 | 
						|
            for (const { node } of references) { | 
						|
                const targetNode = node.arguments[0] | 
						|
                const rawName = getStringIfConstant(targetNode) | 
						|
                const name = rawName && stripImportPathParams(rawName) | 
						|
                if (name && (includeCore || !resolve.isCore(name))) { | 
						|
                    targets.push(new ImportTarget(targetNode, name, options)) | 
						|
                } | 
						|
            } | 
						|
 | 
						|
            callback(targets) | 
						|
        }, | 
						|
    } | 
						|
}
 | 
						|
 |