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