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>
This commit is contained in:
parent
284871862e
commit
a2bdcbab5f
@ -3,3 +3,4 @@ rules:
|
||||
require-buffer: error
|
||||
buffer-constructor: error
|
||||
no-let-in-for-declaration: error
|
||||
lowercase-name-for-primitive: error
|
||||
|
41
test/parallel/test-eslint-lowercase-name-for-primitive.js
Normal file
41
test/parallel/test-eslint-lowercase-name-for-primitive.js
Normal file
@ -0,0 +1,41 @@
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
|
||||
const RuleTester = require('../../tools/eslint').RuleTester;
|
||||
const rule = require('../../tools/eslint-rules/lowercase-name-for-primitive');
|
||||
|
||||
const valid = [
|
||||
'string',
|
||||
'number',
|
||||
'boolean',
|
||||
'null',
|
||||
'undefined'
|
||||
];
|
||||
|
||||
new RuleTester().run('lowercase-name-for-primitive', rule, {
|
||||
valid: [
|
||||
'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", ["string", "number"])',
|
||||
...valid.map((name) =>
|
||||
`new errors.TypeError("ERR_INVALID_ARG_TYPE", "name", "${name}")`
|
||||
)
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "Number")',
|
||||
errors: [{ message: 'primitive should use lowercase: Number' }]
|
||||
},
|
||||
{
|
||||
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a", "STRING")',
|
||||
errors: [{ message: 'primitive should use lowercase: STRING' }]
|
||||
},
|
||||
{
|
||||
code: 'new errors.TypeError("ERR_INVALID_ARG_TYPE", "a",' +
|
||||
'["String", "Number"])',
|
||||
errors: [
|
||||
{ message: 'primitive should use lowercase: String' },
|
||||
{ message: 'primitive should use lowercase: Number' }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
49
tools/eslint-rules/lowercase-name-for-primitive.js
Normal file
49
tools/eslint-rules/lowercase-name-for-primitive.js
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user