mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
/**
|
|
* @fileoverview Rule to flag when the same variable is declared more then once.
|
|
* @author Ilya Volodin
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Rule Definition
|
|
//------------------------------------------------------------------------------
|
|
|
|
module.exports = function(context) {
|
|
|
|
/**
|
|
* Find variables in a given scope and flag redeclared ones.
|
|
* @param {Scope} scope An escope scope object.
|
|
* @returns {void}
|
|
* @private
|
|
*/
|
|
function findVariablesInScope(scope) {
|
|
scope.variables.forEach(function(variable) {
|
|
if (variable.identifiers && variable.identifiers.length > 1) {
|
|
variable.identifiers.sort(function(a, b) {
|
|
return a.range[1] - b.range[1];
|
|
});
|
|
|
|
for (var i = 1, l = variable.identifiers.length; i < l; i++) {
|
|
context.report(variable.identifiers[i], "{{a}} is already defined", {a: variable.name});
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
* Find variables in a given node's associated scope.
|
|
* @param {ASTNode} node The node to check.
|
|
* @returns {void}
|
|
* @private
|
|
*/
|
|
function findVariables(node) {
|
|
var scope = context.getScope();
|
|
|
|
findVariablesInScope(scope);
|
|
|
|
// globalReturn means one extra scope to check
|
|
if (node.type === "Program" && context.ecmaFeatures.globalReturn) {
|
|
findVariablesInScope(scope.childScopes[0]);
|
|
}
|
|
}
|
|
|
|
if (context.ecmaFeatures.blockBindings) {
|
|
return {
|
|
"Program": findVariables,
|
|
"BlockStatement": findVariables,
|
|
"SwitchStatement": findVariables
|
|
};
|
|
} else {
|
|
return {
|
|
"Program": findVariables,
|
|
"FunctionDeclaration": findVariables,
|
|
"FunctionExpression": findVariables,
|
|
"ArrowFunctionExpression": findVariables
|
|
};
|
|
}
|
|
};
|
|
|
|
module.exports.schema = [];
|
|
|