/** * @author Toru Nagashima * See LICENSE file in root directory for full license. */ "use strict" const { ReferenceTracker } = require("eslint-utils") /** * Verifier for `prefer-global/*` rules. */ class Verifier { /** * Initialize this instance. * @param {RuleContext} context The rule context to report. * @param {{modules:object,globals:object}} trackMap The track map. */ constructor(context, trackMap) { this.context = context this.trackMap = trackMap this.verify = context.options[0] === "never" ? this.verifyToPreferModules : this.verifyToPreferGlobals } /** * Verify the code to suggest the use of globals. * @returns {void} */ verifyToPreferGlobals() { const { context, trackMap } = this const tracker = new ReferenceTracker(context.getScope(), { mode: "legacy", }) for (const { node } of [ ...tracker.iterateCjsReferences(trackMap.modules), ...tracker.iterateEsmReferences(trackMap.modules), ]) { context.report({ node, messageId: "preferGlobal" }) } } /** * Verify the code to suggest the use of modules. * @returns {void} */ verifyToPreferModules() { const { context, trackMap } = this const tracker = new ReferenceTracker(context.getScope()) for (const { node } of tracker.iterateGlobalReferences( trackMap.globals )) { context.report({ node, messageId: "preferModule" }) } } } module.exports = function checkForPreferGlobal(context, trackMap) { new Verifier(context, trackMap).verify() }