node/tools/eslint-rules/require-globals.js
Ruben Bridgewater e0c71ca3eb
tools: stricter eslint rule for globals
PR-URL: https://github.com/nodejs/node/pull/20567
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
2018-05-18 15:27:29 +02:00

51 lines
1.6 KiB
JavaScript

'use strict';
// This rule makes sure that no Globals are going to be used in /lib.
// That could otherwise result in problems with the repl.
module.exports = function(context) {
function flagIt(msg, fix) {
return (reference) => {
context.report({
node: reference.identifier,
message: msg,
fix: (fixer) => {
const sourceCode = context.getSourceCode();
const useStrict = /'use strict';\n\n?/g;
const hasUseStrict = !!useStrict.exec(sourceCode.text);
const firstLOC = sourceCode.ast.range[0];
const rangeNeedle = hasUseStrict ? useStrict.lastIndex : firstLOC;
return fixer.insertTextBeforeRange([rangeNeedle], `${fix}\n`);
}
});
};
}
return {
'Program:exit': function() {
const globalScope = context.getScope();
let variable = globalScope.set.get('Buffer');
if (variable) {
const fix = "const { Buffer } = require('buffer');";
const msg = `Use ${fix} at the beginning of this file`;
variable.references.forEach(flagIt(msg, fix));
}
variable = globalScope.set.get('URL');
if (variable) {
const fix = "const { URL } = require('url');";
const msg = `Use ${fix} at the beginning of this file`;
variable.references.forEach(flagIt(msg, fix));
}
variable = globalScope.set.get('URLSearchParams');
if (variable) {
const fix = "const { URLSearchParams } = require('url');";
const msg = `Use ${fix} at the beginning of this file`;
variable.references.forEach(flagIt(msg, fix));
}
}
};
};