64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
/**
|
|
* @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()
|
|
}
|