summaryrefslogtreecommitdiff
path: root/tools/eslint-rules
diff options
context:
space:
mode:
authorWeijia Wang <381152119@qq.com>2017-12-09 22:22:39 +0800
committerAnna Henningsen <anna@addaleax.net>2017-12-13 06:23:37 +0100
commita2bdcbab5fea61b67f0614a0573e5ac5c2ffe004 (patch)
tree934ddecf9eb136dae6e15adb909593bfdee97795 /tools/eslint-rules
parent284871862ed0fc08ed2946be9ee005c16877d05d (diff)
downloadnode-new-a2bdcbab5fea61b67f0614a0573e5ac5c2ffe004.tar.gz
tools: add lowercase-name-for-primitive eslint rule
Primitives should use lowercase in error message. Refs: https://github.com/nodejs/node/pull/16401 PR-URL: https://github.com/nodejs/node/pull/17568 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'tools/eslint-rules')
-rw-r--r--tools/eslint-rules/lowercase-name-for-primitive.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/eslint-rules/lowercase-name-for-primitive.js b/tools/eslint-rules/lowercase-name-for-primitive.js
new file mode 100644
index 0000000000..bdf10328f3
--- /dev/null
+++ b/tools/eslint-rules/lowercase-name-for-primitive.js
@@ -0,0 +1,49 @@
+/**
+ * @fileoverview Check that TypeError[ERR_INVALID_ARG_TYPE] uses
+ * lowercase for primitive types
+ * @author Weijia Wang <starkwang@126.com>
+ */
+'use strict';
+
+//------------------------------------------------------------------------------
+// Rule Definition
+//------------------------------------------------------------------------------
+
+const primitives = [
+ 'number', 'string', 'boolean', 'null', 'undefined'
+];
+
+module.exports = function(context) {
+ return {
+ NewExpression(node) {
+ if (
+ node.callee.property &&
+ node.callee.property.name === 'TypeError' &&
+ node.arguments[0].value === 'ERR_INVALID_ARG_TYPE'
+ ) {
+ checkNamesArgument(node.arguments[2]);
+ }
+
+ function checkNamesArgument(names) {
+ switch (names.type) {
+ case 'Literal':
+ checkName(names.value);
+ break;
+ case 'ArrayExpression':
+ names.elements.forEach((name) => {
+ checkName(name.value);
+ });
+ break;
+ }
+ }
+
+ function checkName(name) {
+ const lowercaseName = name.toLowerCase();
+ if (primitives.includes(lowercaseName) && !primitives.includes(name)) {
+ const msg = `primitive should use lowercase: ${name}`;
+ context.report(node, msg);
+ }
+ }
+ }
+ };
+};