diff options
author | Teddy Katz <teddy.katz@gmail.com> | 2017-01-06 19:11:07 -0500 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-01-09 09:20:38 -0800 |
commit | 5d31448844963d1683417e4f3a5cbb671e3067c2 (patch) | |
tree | f6c90bdf36dee851ad801c24a553489a3a20f2c0 /tools | |
parent | 775de9cc96d6fe01c049cd4a3d5ed2df922b88b6 (diff) | |
download | android-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.js | 42 |
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)} + }); + } + } + }; + } +}; |