diff options
author | Jon Moss <me@jonathanmoss.me> | 2017-08-25 18:15:43 -0700 |
---|---|---|
committer | Refael Ackermann <refack@gmail.com> | 2017-09-01 17:29:15 -0400 |
commit | b12d77977e5efe6542e2acc5143a2e697590e638 (patch) | |
tree | 9158f5554ac0d0b67ec0611d96731bae2d6a5b6c /tools/eslint-rules | |
parent | 324aa6488f26d221f5e8b2b1778539bb6d86f104 (diff) | |
download | android-node-v8-b12d77977e5efe6542e2acc5143a2e697590e638.tar.gz android-node-v8-b12d77977e5efe6542e2acc5143a2e697590e638.tar.bz2 android-node-v8-b12d77977e5efe6542e2acc5143a2e697590e638.zip |
errors,tools: alphabetize-errors lint rule
To make sure errors in lib/internal/errors.js (are defined via `E`)
will stay in alphabetical order going forward.
PR-URL: https://github.com/nodejs/node/pull/15083
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'tools/eslint-rules')
-rw-r--r-- | tools/eslint-rules/alphabetize-errors.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/eslint-rules/alphabetize-errors.js b/tools/eslint-rules/alphabetize-errors.js new file mode 100644 index 0000000000..f4651de9a7 --- /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; + } + } + }; + } +}; |