UNPKG

jsdoc-75lb

Version:

An API documentation generator for JavaScript.

74 lines (63 loc) 2.43 kB
/** * @fileoverview Rule to flag use constant conditions * @author Christian Schulz <http://rndm.de> * @copyright 2014 Christian Schulz. All rights reserved. */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { //-------------------------------------------------------------------------- // Helpers //-------------------------------------------------------------------------- /** * Checks if a node has a constant truthiness value. * @param {ASTNode} node The AST node to check. * @returns {Bool} true when node's truthiness is constant * @private */ function isConstant(node) { switch (node.type) { case "Literal": case "ArrowFunctionExpression": case "FunctionExpression": case "ObjectExpression": case "ArrayExpression": return true; case "UnaryExpression": return isConstant(node.argument); case "BinaryExpression": case "LogicalExpression": return isConstant(node.left) && isConstant(node.right); case "AssignmentExpression": return (node.operator === "=") && isConstant(node.right); case "SequenceExpression": return isConstant(node.expressions[node.expressions.length - 1]); // no default } return false; } /** * Reports when the given node contains a constant condition. * @param {ASTNode} node The AST node to check. * @returns {void} * @private */ function checkConstantCondition(node) { if (node.test && isConstant(node.test)) { context.report(node, "Unexpected constant condition."); } } //-------------------------------------------------------------------------- // Public //-------------------------------------------------------------------------- return { "ConditionalExpression": checkConstantCondition, "IfStatement": checkConstantCondition, "WhileStatement": checkConstantCondition, "DoWhileStatement": checkConstantCondition, "ForStatement": checkConstantCondition }; }; module.exports.schema = [];