Skip to content

Commit b12d779

Browse files
maclover7refack
authored andcommitted
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: #15083 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]>
1 parent 324aa64 commit b12d779

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

lib/internal/errors.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/* eslint-enable alphabetize-errors */
2+
13
'use strict';
24

35
// The whole point behind this internal module is to allow Node.js to no
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
'use strict';
2+
3+
const message = 'Errors in lib/internal/errors.js must be alphabetized';
4+
5+
function errorForNode(node) {
6+
return node.expression.arguments[0].value;
7+
}
8+
9+
function isAlphabetized(previousNode, node) {
10+
return errorForNode(previousNode).localeCompare(errorForNode(node)) < 0;
11+
}
12+
13+
function isDefiningError(node) {
14+
return node.expression &&
15+
node.expression.type === 'CallExpression' &&
16+
node.expression.callee &&
17+
node.expression.callee.name === 'E';
18+
}
19+
20+
module.exports = {
21+
create: function(context) {
22+
var previousNode;
23+
24+
return {
25+
ExpressionStatement: function(node) {
26+
if (isDefiningError(node)) {
27+
if (previousNode && !isAlphabetized(previousNode, node)) {
28+
context.report({ node: node, message: message });
29+
}
30+
31+
previousNode = node;
32+
}
33+
}
34+
};
35+
}
36+
};

0 commit comments

Comments
 (0)