summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTeddy Katz <teddy.katz@gmail.com>2017-01-06 19:11:07 -0500
committerJames M Snell <jasnell@gmail.com>2017-01-09 09:20:38 -0800
commit5d31448844963d1683417e4f3a5cbb671e3067c2 (patch)
treef6c90bdf36dee851ad801c24a553489a3a20f2c0 /tools
parent775de9cc96d6fe01c049cd4a3d5ed2df922b88b6 (diff)
downloadandroid-node-v8-5d31448844963d1683417e4f3a5cbb671e3067c2.tar.gz
android-node-v8-5d31448844963d1683417e4f3a5cbb671e3067c2.tar.bz2
android-node-v8-5d31448844963d1683417e4f3a5cbb671e3067c2.zip
tools,test: enforce assert.ifError with lint rule
This adds an ESLint rule to enforce the use of `assert.ifError(err)` instead of `if (err) throw err;` in tests. PR-URL: https://github.com/nodejs/node/pull/10671 Ref: https://github.com/nodejs/node/pull/10543 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Michal Zasso <targos@protonmail.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/eslint-rules/prefer-assert-iferror.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/tools/eslint-rules/prefer-assert-iferror.js b/tools/eslint-rules/prefer-assert-iferror.js
new file mode 100644
index 0000000000..0da272d5f6
--- /dev/null
+++ b/tools/eslint-rules/prefer-assert-iferror.js
@@ -0,0 +1,42 @@
+/**
+ * @fileoverview Prohibit the `if (err) throw err;` pattern
+ * @author Teddy Katz
+ */
+
+'use strict';
+
+module.exports = {
+ create(context) {
+ const sourceCode = context.getSourceCode();
+
+ function hasSameTokens(nodeA, nodeB) {
+ const aTokens = sourceCode.getTokens(nodeA);
+ const bTokens = sourceCode.getTokens(nodeB);
+
+ return aTokens.length === bTokens.length &&
+ aTokens.every((token, index) => {
+ return token.type === bTokens[index].type &&
+ token.value === bTokens[index].value;
+ });
+ }
+
+ return {
+ IfStatement(node) {
+ const firstStatement = node.consequent.type === 'BlockStatement' ?
+ node.consequent.body[0] :
+ node.consequent;
+ if (
+ firstStatement &&
+ firstStatement.type === 'ThrowStatement' &&
+ hasSameTokens(node.test, firstStatement.argument)
+ ) {
+ context.report({
+ node: firstStatement,
+ message: 'Use assert.ifError({{argument}}) instead.',
+ data: {argument: sourceCode.getText(node.test)}
+ });
+ }
+ }
+ };
+ }
+};