summaryrefslogtreecommitdiff
path: root/tools/eslint-rules
diff options
context:
space:
mode:
authorJon Moss <me@jonathanmoss.me>2017-08-25 18:15:43 -0700
committerRefael Ackermann <refack@gmail.com>2017-09-01 17:29:15 -0400
commitb12d77977e5efe6542e2acc5143a2e697590e638 (patch)
tree9158f5554ac0d0b67ec0611d96731bae2d6a5b6c /tools/eslint-rules
parent324aa6488f26d221f5e8b2b1778539bb6d86f104 (diff)
downloadandroid-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.js36
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;
+ }
+ }
+ };
+ }
+};