Skip to content

Commit 3ad8cf1

Browse files
starkwangMylesBorins
authored andcommitted
tools: add lowercase-name-for-primitive eslint rule
Primitives should use lowercase in error message. Refs: #16401 PR-URL: #17568 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 584e74d commit 3ad8cf1

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

lib/.eslintrc.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ rules:
33
require-buffer: error
44
buffer-constructor: error
55
no-let-in-for-declaration: error
6+
lowercase-name-for-primitive: error
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'use strict';
2+
3+
require('../common');
4+
5+
const RuleTester = require('../../tools/eslint').RuleTester;
6+
const rule = require('../../tools/eslint-rules/lowercase-name-for-primitive');
7+
8+
const valid = [
9+
'string',
10+
'number',
11+
'boolean',
12+
'null',
13+
'undefined'
14+
];
15+
16+
new RuleTester().run('lowercase-name-for-primitive', rule, {
17+
valid: [
18+
'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", ["string", "number"])',
19+
...valid.map((name) =>
20+
`new errors.TypeError("ERR_INVALID_ARG_TYPE", "name", "${name}")`
21+
)
22+
],
23+
invalid: [
24+
{
25+
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "Number")',
26+
errors: [{ message: 'primitive should use lowercase: Number' }]
27+
},
28+
{
29+
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "STRING")',
30+
errors: [{ message: 'primitive should use lowercase: STRING' }]
31+
},
32+
{
33+
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a",' +
34+
'["String", "Number"])',
35+
errors: [
36+
{ message: 'primitive should use lowercase: String' },
37+
{ message: 'primitive should use lowercase: Number' }
38+
]
39+
}
40+
]
41+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @fileoverview Check that TypeError[ERR_INVALID_ARG_TYPE] uses
3+
* lowercase for primitive types
4+
* @author Weijia Wang <[email protected]>
5+
*/
6+
'use strict';
7+
8+
//------------------------------------------------------------------------------
9+
// Rule Definition
10+
//------------------------------------------------------------------------------
11+
12+
const primitives = [
13+
'number', 'string', 'boolean', 'null', 'undefined'
14+
];
15+
16+
module.exports = function(context) {
17+
return {
18+
NewExpression(node) {
19+
if (
20+
node.callee.property &&
21+
node.callee.property.name === 'TypeError' &&
22+
node.arguments[0].value === 'ERR_INVALID_ARG_TYPE'
23+
) {
24+
checkNamesArgument(node.arguments[2]);
25+
}
26+
27+
function checkNamesArgument(names) {
28+
switch (names.type) {
29+
case 'Literal':
30+
checkName(names.value);
31+
break;
32+
case 'ArrayExpression':
33+
names.elements.forEach((name) => {
34+
checkName(name.value);
35+
});
36+
break;
37+
}
38+
}
39+
40+
function checkName(name) {
41+
const lowercaseName = name.toLowerCase();
42+
if (primitives.includes(lowercaseName) && !primitives.includes(name)) {
43+
const msg = `primitive should use lowercase: ${name}`;
44+
context.report(node, msg);
45+
}
46+
}
47+
}
48+
};
49+
};

0 commit comments

Comments
 (0)