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()
|
||
|
}
|