summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2018-05-07 02:18:23 +0200
committerRuben Bridgewater <ruben@bridgewater.de>2018-05-18 15:27:29 +0200
commite0c71ca3eb645457a7e6e369bf8ad4c1a62902c2 (patch)
treeecdc0ba6eac67e764e6c36300535a39220dff659
parent7afb73715f161ea14924eceb6f03b502f32ac8fd (diff)
downloadandroid-node-v8-e0c71ca3eb645457a7e6e369bf8ad4c1a62902c2.tar.gz
android-node-v8-e0c71ca3eb645457a7e6e369bf8ad4c1a62902c2.tar.bz2
android-node-v8-e0c71ca3eb645457a7e6e369bf8ad4c1a62902c2.zip
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>
-rw-r--r--lib/.eslintrc.yaml2
-rw-r--r--test/parallel/test-eslint-require-buffer.js4
-rw-r--r--tools/eslint-rules/require-buffer.js35
-rw-r--r--tools/eslint-rules/require-globals.js50
4 files changed, 53 insertions, 38 deletions
diff --git a/lib/.eslintrc.yaml b/lib/.eslintrc.yaml
index 80cada0b8c..e7cab0ad93 100644
--- a/lib/.eslintrc.yaml
+++ b/lib/.eslintrc.yaml
@@ -20,7 +20,7 @@ rules:
- selector: "NewExpression[callee.name=/Error$/]:not([callee.name=/^(AssertionError|NghttpError)$/])"
message: "Use an error exported by the internal/errors module."
# Custom rules in tools/eslint-rules
- node-core/require-buffer: error
+ node-core/require-globals: error
node-core/buffer-constructor: error
node-core/no-let-in-for-declaration: error
node-core/lowercase-name-for-primitive: error
diff --git a/test/parallel/test-eslint-require-buffer.js b/test/parallel/test-eslint-require-buffer.js
index da17d44c7f..d928c43548 100644
--- a/test/parallel/test-eslint-require-buffer.js
+++ b/test/parallel/test-eslint-require-buffer.js
@@ -5,7 +5,7 @@ const common = require('../common');
common.skipIfEslintMissing();
const RuleTester = require('../../tools/node_modules/eslint').RuleTester;
-const rule = require('../../tools/eslint-rules/require-buffer');
+const rule = require('../../tools/eslint-rules/require-globals');
const ruleTester = new RuleTester({
parserOptions: { ecmaVersion: 6 },
env: { node: true }
@@ -18,7 +18,7 @@ const useStrict = '\'use strict\';\n\n';
const bufferModule = 'const { Buffer } = require(\'buffer\');\n';
const mockComment = '// Some Comment\n//\n// Another Comment\n\n';
const useBuffer = 'Buffer;';
-ruleTester.run('require-buffer', rule, {
+ruleTester.run('require-globals', rule, {
valid: [
'foo',
'const Buffer = require("Buffer"); Buffer;',
diff --git a/tools/eslint-rules/require-buffer.js b/tools/eslint-rules/require-buffer.js
deleted file mode 100644
index b12b9ce04e..0000000000
--- a/tools/eslint-rules/require-buffer.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-const BUFFER_REQUIRE = 'const { Buffer } = require(\'buffer\');';
-
-module.exports = function(context) {
-
- function flagIt(reference) {
- const msg = `Use ${BUFFER_REQUIRE} at the beginning of this file`;
-
- 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],
- `${BUFFER_REQUIRE}\n`);
- }
- });
- }
-
- return {
- 'Program:exit': function() {
- const globalScope = context.getScope();
- const variable = globalScope.set.get('Buffer');
- if (variable) {
- variable.references.forEach(flagIt);
- }
- }
- };
-};
diff --git a/tools/eslint-rules/require-globals.js b/tools/eslint-rules/require-globals.js
new file mode 100644
index 0000000000..bc49ff6c87
--- /dev/null
+++ b/tools/eslint-rules/require-globals.js
@@ -0,0 +1,50 @@
+'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));
+ }
+ }
+ };
+};