Blame view
node_modules/eslint/lib/rules/no-throw-literal.js
2.05 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 |
/** * @fileoverview Rule to restrict what can be thrown as an exception. * @author Dieter Oberkofler * @copyright 2015 Ian VanSchooten. All rights reserved. * @copyright 2015 Dieter Oberkofler. All rights reserved. */ "use strict"; //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ /** * Determine if a node has a possiblity to be an Error object * @param {ASTNode} node ASTNode to check * @returns {boolean} True if there is a chance it contains an Error obj */ function couldBeError(node) { switch (node.type) { case "Identifier": case "CallExpression": case "NewExpression": case "MemberExpression": case "TaggedTemplateExpression": case "YieldExpression": return true; // possibly an error object. case "AssignmentExpression": return couldBeError(node.right); case "SequenceExpression": var exprs = node.expressions; return exprs.length !== 0 && couldBeError(exprs[exprs.length - 1]); case "LogicalExpression": return couldBeError(node.left) || couldBeError(node.right); case "ConditionalExpression": return couldBeError(node.consequent) || couldBeError(node.alternate); default: return false; } } //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { return { "ThrowStatement": function(node) { if (!couldBeError(node.argument)) { context.report(node, "Expected an object to be thrown."); } else if (node.argument.type === "Identifier") { if (node.argument.name === "undefined") { context.report(node, "Do not throw undefined."); } } } }; }; module.exports.schema = []; |