Blame view
node_modules/eslint/lib/rules/max-nested-callbacks.js
1.97 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 72 73 |
/** * @fileoverview Rule to enforce a maximum number of nested callbacks. * @author Ian Christian Myers * @copyright 2013 Ian Christian Myers. All rights reserved. */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { //-------------------------------------------------------------------------- // Constants //-------------------------------------------------------------------------- var THRESHOLD = context.options[0] || 10; //-------------------------------------------------------------------------- // Helpers //-------------------------------------------------------------------------- var callbackStack = []; /** * Checks a given function node for too many callbacks. * @param {ASTNode} node The node to check. * @returns {void} * @private */ function checkFunction(node) { var parent = node.parent; if (parent.type === "CallExpression") { callbackStack.push(node); } if (callbackStack.length > THRESHOLD) { var opts = {num: callbackStack.length, max: THRESHOLD}; context.report(node, "Too many nested callbacks ({{num}}). Maximum allowed is {{max}}.", opts); } } /** * Pops the call stack. * @returns {void} * @private */ function popStack() { callbackStack.pop(); } //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- return { "ArrowFunctionExpression": checkFunction, "ArrowFunctionExpression:exit": popStack, "FunctionExpression": checkFunction, "FunctionExpression:exit": popStack }; }; module.exports.schema = [ { "type": "integer" } ]; |