UNPKG

3.15 kBJavaScriptView Raw
1/**
2 * @fileoverview Rule to flag when a function has too many parameters
3 * @author Ilya Volodin
4 */
5
6"use strict";
7
8//------------------------------------------------------------------------------
9// Requirements
10//------------------------------------------------------------------------------
11
12const lodash = require("lodash");
13
14const astUtils = require("./utils/ast-utils");
15
16//------------------------------------------------------------------------------
17// Rule Definition
18//------------------------------------------------------------------------------
19
20module.exports = {
21 meta: {
22 type: "suggestion",
23
24 docs: {
25 description: "enforce a maximum number of parameters in function definitions",
26 category: "Stylistic Issues",
27 recommended: false,
28 url: "https://eslint.org/docs/rules/max-params"
29 },
30
31 schema: [
32 {
33 oneOf: [
34 {
35 type: "integer",
36 minimum: 0
37 },
38 {
39 type: "object",
40 properties: {
41 maximum: {
42 type: "integer",
43 minimum: 0
44 },
45 max: {
46 type: "integer",
47 minimum: 0
48 }
49 },
50 additionalProperties: false
51 }
52 ]
53 }
54 ],
55 messages: {
56 exceed: "{{name}} has too many parameters ({{count}}). Maximum allowed is {{max}}."
57 }
58 },
59
60 create(context) {
61 const sourceCode = context.getSourceCode();
62 const option = context.options[0];
63 let numParams = 3;
64
65 if (
66 typeof option === "object" &&
67 (Object.prototype.hasOwnProperty.call(option, "maximum") || Object.prototype.hasOwnProperty.call(option, "max"))
68 ) {
69 numParams = option.maximum || option.max;
70 }
71 if (typeof option === "number") {
72 numParams = option;
73 }
74
75 /**
76 * Checks a function to see if it has too many parameters.
77 * @param {ASTNode} node The node to check.
78 * @returns {void}
79 * @private
80 */
81 function checkFunction(node) {
82 if (node.params.length > numParams) {
83 context.report({
84 loc: astUtils.getFunctionHeadLoc(node, sourceCode),
85 node,
86 messageId: "exceed",
87 data: {
88 name: lodash.upperFirst(astUtils.getFunctionNameWithKind(node)),
89 count: node.params.length,
90 max: numParams
91 }
92 });
93 }
94 }
95
96 return {
97 FunctionDeclaration: checkFunction,
98 ArrowFunctionExpression: checkFunction,
99 FunctionExpression: checkFunction
100 };
101
102 }
103};