.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / eslint / lib / rules / no-dupe-args.js
1 /**
2  * @fileoverview Rule to flag duplicate arguments
3  * @author Jamund Ferguson
4  */
5
6 "use strict";
7
8 //------------------------------------------------------------------------------
9 // Rule Definition
10 //------------------------------------------------------------------------------
11
12 module.exports = {
13     meta: {
14         type: "problem",
15
16         docs: {
17             description: "disallow duplicate arguments in `function` definitions",
18             category: "Possible Errors",
19             recommended: true,
20             url: "https://eslint.org/docs/rules/no-dupe-args"
21         },
22
23         schema: [],
24
25         messages: {
26             unexpected: "Duplicate param '{{name}}'."
27         }
28     },
29
30     create(context) {
31
32         //--------------------------------------------------------------------------
33         // Helpers
34         //--------------------------------------------------------------------------
35
36         /**
37          * Checks whether or not a given definition is a parameter's.
38          * @param {eslint-scope.DefEntry} def A definition to check.
39          * @returns {boolean} `true` if the definition is a parameter's.
40          */
41         function isParameter(def) {
42             return def.type === "Parameter";
43         }
44
45         /**
46          * Determines if a given node has duplicate parameters.
47          * @param {ASTNode} node The node to check.
48          * @returns {void}
49          * @private
50          */
51         function checkParams(node) {
52             const variables = context.getDeclaredVariables(node);
53
54             for (let i = 0; i < variables.length; ++i) {
55                 const variable = variables[i];
56
57                 // Checks and reports duplications.
58                 const defs = variable.defs.filter(isParameter);
59
60                 if (defs.length >= 2) {
61                     context.report({
62                         node,
63                         messageId: "unexpected",
64                         data: { name: variable.name }
65                     });
66                 }
67             }
68         }
69
70         //--------------------------------------------------------------------------
71         // Public API
72         //--------------------------------------------------------------------------
73
74         return {
75             FunctionDeclaration: checkParams,
76             FunctionExpression: checkParams
77         };
78
79     }
80 };