Skip to content

Commit

Permalink
Chore: refactoring for prefer-global/*
Browse files Browse the repository at this point in the history
  • Loading branch information
mysticatea committed Jul 17, 2018
1 parent 4dd9baf commit 8f25248
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 87 deletions.
26 changes: 16 additions & 10 deletions lib/rules/prefer-global/buffer.js
Expand Up @@ -5,7 +5,18 @@
"use strict"

const { READ } = require("eslint-utils")
const defineHandlers = require("../../util/define-prefer-global-handlers")
const checkForPreferGlobal = require("../../util/check-prefer-global")

const trackMap = {
globals: {
Buffer: { [READ]: true },
},
modules: {
buffer: {
Buffer: { [READ]: true },
},
},
}

module.exports = {
meta: {
Expand All @@ -28,15 +39,10 @@ module.exports = {
},

create(context) {
return defineHandlers(context, {
globals: {
Buffer: { [READ]: true },
},
modules: {
buffer: {
Buffer: { [READ]: true },
},
return {
"Program:exit"() {
checkForPreferGlobal(context, trackMap)
},
})
}
},
}
22 changes: 14 additions & 8 deletions lib/rules/prefer-global/console.js
Expand Up @@ -5,7 +5,16 @@
"use strict"

const { READ } = require("eslint-utils")
const defineHandlers = require("../../util/define-prefer-global-handlers")
const checkForPreferGlobal = require("../../util/check-prefer-global")

const trackMap = {
globals: {
console: { [READ]: true },
},
modules: {
console: { [READ]: true },
},
}

module.exports = {
meta: {
Expand All @@ -27,13 +36,10 @@ module.exports = {
},

create(context) {
return defineHandlers(context, {
globals: {
console: { [READ]: true },
},
modules: {
console: { [READ]: true },
return {
"Program:exit"() {
checkForPreferGlobal(context, trackMap)
},
})
}
},
}
22 changes: 14 additions & 8 deletions lib/rules/prefer-global/process.js
Expand Up @@ -5,7 +5,16 @@
"use strict"

const { READ } = require("eslint-utils")
const defineHandlers = require("../../util/define-prefer-global-handlers")
const checkForPreferGlobal = require("../../util/check-prefer-global")

const trackMap = {
globals: {
process: { [READ]: true },
},
modules: {
process: { [READ]: true },
},
}

module.exports = {
meta: {
Expand All @@ -27,13 +36,10 @@ module.exports = {
},

create(context) {
return defineHandlers(context, {
globals: {
process: { [READ]: true },
},
modules: {
process: { [READ]: true },
return {
"Program:exit"() {
checkForPreferGlobal(context, trackMap)
},
})
}
},
}
26 changes: 16 additions & 10 deletions lib/rules/prefer-global/url-search-params.js
Expand Up @@ -5,7 +5,18 @@
"use strict"

const { READ } = require("eslint-utils")
const defineHandlers = require("../../util/define-prefer-global-handlers")
const checkForPreferGlobal = require("../../util/check-prefer-global")

const trackMap = {
globals: {
URLSearchParams: { [READ]: true },
},
modules: {
url: {
URLSearchParams: { [READ]: true },
},
},
}

module.exports = {
meta: {
Expand All @@ -28,15 +39,10 @@ module.exports = {
},

create(context) {
return defineHandlers(context, {
globals: {
URLSearchParams: { [READ]: true },
},
modules: {
url: {
URLSearchParams: { [READ]: true },
},
return {
"Program:exit"() {
checkForPreferGlobal(context, trackMap)
},
})
}
},
}
26 changes: 16 additions & 10 deletions lib/rules/prefer-global/url.js
Expand Up @@ -5,7 +5,18 @@
"use strict"

const { READ } = require("eslint-utils")
const defineHandlers = require("../../util/define-prefer-global-handlers")
const checkForPreferGlobal = require("../../util/check-prefer-global")

const trackMap = {
globals: {
URL: { [READ]: true },
},
modules: {
url: {
URL: { [READ]: true },
},
},
}

module.exports = {
meta: {
Expand All @@ -27,15 +38,10 @@ module.exports = {
},

create(context) {
return defineHandlers(context, {
globals: {
URL: { [READ]: true },
},
modules: {
url: {
URL: { [READ]: true },
},
return {
"Program:exit"() {
checkForPreferGlobal(context, trackMap)
},
})
}
},
}
63 changes: 63 additions & 0 deletions lib/util/check-prefer-global.js
@@ -0,0 +1,63 @@
/**
* @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()
}
41 changes: 0 additions & 41 deletions lib/util/define-prefer-global-handlers.js

This file was deleted.

0 comments on commit 8f25248

Please sign in to comment.