Blame view
node_modules/eslint/lib/rules/no-extra-boolean-cast.js
2.71 KB
c39994410
|
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
/** * @fileoverview Rule to flag unnecessary double negation in Boolean contexts * @author Brandon Mills */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { return { "UnaryExpression": function(node) { var ancestors = context.getAncestors(), parent = ancestors.pop(), grandparent = ancestors.pop(); // Exit early if it's guaranteed not to match if (node.operator !== "!" || parent.type !== "UnaryExpression" || parent.operator !== "!") { return; } // if (<bool>) ... if (grandparent.type === "IfStatement") { context.report(node, "Redundant double negation in an if statement condition."); // do ... while (<bool>) } else if (grandparent.type === "DoWhileStatement") { context.report(node, "Redundant double negation in a do while loop condition."); // while (<bool>) ... } else if (grandparent.type === "WhileStatement") { context.report(node, "Redundant double negation in a while loop condition."); // <bool> ? ... : ... } else if ((grandparent.type === "ConditionalExpression" && parent === grandparent.test)) { context.report(node, "Redundant double negation in a ternary condition."); // for (...; <bool>; ...) ... } else if ((grandparent.type === "ForStatement" && parent === grandparent.test)) { context.report(node, "Redundant double negation in a for loop condition."); // !<bool> } else if ((grandparent.type === "UnaryExpression" && grandparent.operator === "!")) { context.report(node, "Redundant multiple negation."); // Boolean(<bool>) } else if ((grandparent.type === "CallExpression" && grandparent.callee.type === "Identifier" && grandparent.callee.name === "Boolean")) { context.report(node, "Redundant double negation in call to Boolean()."); // new Boolean(<bool>) } else if ((grandparent.type === "NewExpression" && grandparent.callee.type === "Identifier" && grandparent.callee.name === "Boolean")) { context.report(node, "Redundant double negation in Boolean constructor call."); } } }; }; module.exports.schema = []; |