summaryrefslogtreecommitdiff
path: root/tools/eslint-rules/alphabetize-errors.js
blob: f4651de9a75326464caf8b8987b72cb4f273a597 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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;
        }
      }
    };
  }
};