diff --git a/lib/internal/errors.js b/lib/internal/errors.js index b8ce14b0033..906bd516529 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1,3 +1,5 @@ +/* eslint-enable alphabetize-errors */ + 'use strict'; // The whole point behind this internal module is to allow Node.js to no diff --git a/tools/eslint-rules/alphabetize-errors.js b/tools/eslint-rules/alphabetize-errors.js new file mode 100644 index 00000000000..f4651de9a75 --- /dev/null +++ b/tools/eslint-rules/alphabetize-errors.js @@ -0,0 +1,36 @@ +'use strict'; + +const message = 'Errors in lib/internal/errors.js must be alphabetized'; + +function errorForNode(node) { + return node.expression.arguments[0].value; +} + +function isAlphabetized(previousNode, node) { + return errorForNode(previousNode).localeCompare(errorForNode(node)) < 0; +} + +function isDefiningError(node) { + return node.expression && + node.expression.type === 'CallExpression' && + node.expression.callee && + node.expression.callee.name === 'E'; +} + +module.exports = { + create: function(context) { + var previousNode; + + return { + ExpressionStatement: function(node) { + if (isDefiningError(node)) { + if (previousNode && !isAlphabetized(previousNode, node)) { + context.report({ node: node, message: message }); + } + + previousNode = node; + } + } + }; + } +};