Blame view
node_modules/eslint/lib/rules/func-style.js
2.24 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 74 75 76 77 78 79 80 81 82 83 84 |
/** * @fileoverview Rule to enforce a particular function style * @author Nicholas C. Zakas * @copyright 2013 Nicholas C. Zakas. All rights reserved. */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { var style = context.options[0], allowArrowFunctions = context.options[1] && context.options[1].allowArrowFunctions === true, enforceDeclarations = (style === "declaration"), stack = []; var nodesToCheck = { "Program": function() { stack = []; }, "FunctionDeclaration": function(node) { stack.push(false); if (!enforceDeclarations) { context.report(node, "Expected a function expression."); } }, "FunctionDeclaration:exit": function() { stack.pop(); }, "FunctionExpression": function(node) { stack.push(false); if (enforceDeclarations && node.parent.type === "VariableDeclarator") { context.report(node.parent, "Expected a function declaration."); } }, "FunctionExpression:exit": function() { stack.pop(); }, "ThisExpression": function() { if (stack.length > 0) { stack[stack.length - 1] = true; } } }; if (!allowArrowFunctions) { nodesToCheck.ArrowFunctionExpression = function() { stack.push(false); }; nodesToCheck["ArrowFunctionExpression:exit"] = function(node) { var hasThisExpr = stack.pop(); if (enforceDeclarations && !hasThisExpr && node.parent.type === "VariableDeclarator") { context.report(node.parent, "Expected a function declaration."); } }; } return nodesToCheck; }; module.exports.schema = [ { "enum": ["declaration", "expression"] }, { "type": "object", "properties": { "allowArrowFunctions": { "type": "boolean" } }, "additionalProperties": false } ]; |