| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | /** * @fileoverview Rule to flag duplicate arguments * @author Jamund Ferguson */"use strict";//------------------------------------------------------------------------------// Rule Definition//------------------------------------------------------------------------------/** @type {import('../shared/types').Rule} */module.exports = {    meta: {        type: "problem",        docs: {            description: "Disallow duplicate arguments in `function` definitions",            recommended: true,            url: "https://eslint.org/docs/rules/no-dupe-args"        },        schema: [],        messages: {            unexpected: "Duplicate param '{{name}}'."        }    },    create(context) {        //--------------------------------------------------------------------------        // Helpers        //--------------------------------------------------------------------------        /**         * Checks whether or not a given definition is a parameter's.         * @param {eslint-scope.DefEntry} def A definition to check.         * @returns {boolean} `true` if the definition is a parameter's.         */        function isParameter(def) {            return def.type === "Parameter";        }        /**         * Determines if a given node has duplicate parameters.         * @param {ASTNode} node The node to check.         * @returns {void}         * @private         */        function checkParams(node) {            const variables = context.getDeclaredVariables(node);            for (let i = 0; i < variables.length; ++i) {                const variable = variables[i];                // Checks and reports duplications.                const defs = variable.defs.filter(isParameter);                if (defs.length >= 2) {                    context.report({                        node,                        messageId: "unexpected",                        data: { name: variable.name }                    });                }            }        }        //--------------------------------------------------------------------------        // Public API        //--------------------------------------------------------------------------        return {            FunctionDeclaration: checkParams,            FunctionExpression: checkParams        };    }};
 |