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
|
require-buffer: error
|
||||||
buffer-constructor: error
|
buffer-constructor: error
|
||||||
no-let-in-for-declaration: 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