Blame view
node_modules/eslint/lib/rules/no-dupe-args.js
2.3 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 |
/** * @fileoverview Rule to flag duplicate arguments * @author Jamund Ferguson * @copyright 2015 Jamund Ferguson. All rights reserved. * @copyright 2015 Toru Nagashima. All rights reserved. * See LICENSE file in root directory for full license. */ "use strict"; //------------------------------------------------------------------------------ // Rule Definition //------------------------------------------------------------------------------ module.exports = function(context) { //-------------------------------------------------------------------------- // Helpers //-------------------------------------------------------------------------- /** * Checks whether or not a given definition is a parameter's. * @param {escope.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) { var variables = context.getDeclaredVariables(node); var keyMap = Object.create(null); for (var i = 0; i < variables.length; ++i) { var variable = variables[i]; // TODO(nagashima): Remove this duplication check after https://github.com/estools/escope/pull/79 var key = "$" + variable.name; // to avoid __proto__. if (!isParameter(variable.defs[0]) || keyMap[key]) { continue; } keyMap[key] = true; // Checks and reports duplications. var defs = variable.defs.filter(isParameter); if (defs.length >= 2) { context.report({ node: node, message: "Duplicate param '{{name}}'.", data: {name: variable.name} }); } } } //-------------------------------------------------------------------------- // Public API //-------------------------------------------------------------------------- return { "FunctionDeclaration": checkParams, "FunctionExpression": checkParams }; }; module.exports.schema = []; |