.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / max-params.js
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
12 const lodash = require("lodash");
13
14 const astUtils = require("./utils/ast-utils");
15
16 //------------------------------------------------------------------------------
17 // Rule Definition
18 //------------------------------------------------------------------------------
19
20 module.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 };