diff options
author | Weijia Wang <381152119@qq.com> | 2017-12-09 22:22:39 +0800 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2017-12-13 06:23:37 +0100 |
commit | a2bdcbab5fea61b67f0614a0573e5ac5c2ffe004 (patch) | |
tree | 934ddecf9eb136dae6e15adb909593bfdee97795 /tools/eslint-rules | |
parent | 284871862ed0fc08ed2946be9ee005c16877d05d (diff) | |
download | node-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.js | 49 |
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); + } + } + } + }; +}; |