Merge pull request babel/babel-eslint#140 from hzoo/i-138
create scope for each comprehension - fixes babel/babel-eslint#138
This commit is contained in:
parent
1502bf6a2d
commit
dee7261bbe
@ -300,22 +300,41 @@ function monkeypatch() {
|
||||
}
|
||||
};
|
||||
|
||||
referencer.prototype.ComprehensionBlock = function(node) {
|
||||
var left = node.left;
|
||||
if (left) {
|
||||
referencer.prototype.ComprehensionExpression = function(node) {
|
||||
for (var i = 0; i < node.blocks.length; i++) {
|
||||
var block = node.blocks[i];
|
||||
if (block.left) {
|
||||
var scope = new escope.Scope(this.scopeManager, "comprehensions", this.currentScope(), node, false);
|
||||
this.scopeManager.__nestScope(scope);
|
||||
|
||||
var left = block.left;
|
||||
if (left.type === "Identifier") {
|
||||
createScopeVariable.call(this, node, left);
|
||||
scope.__define(left, new Definition("ComprehensionElement", left, left));
|
||||
} else if (left.type === "ArrayPattern") {
|
||||
for (var i = 0; i < left.elements.length; i++) {
|
||||
if (left.elements[i]) {
|
||||
createScopeVariable.call(this, left.elements, left.elements[i]);
|
||||
var name = left.elements[i];
|
||||
if (name) {
|
||||
scope.__define(name, new Definition("ComprehensionElement", name, name));
|
||||
}
|
||||
}
|
||||
} else if (left.type === "ObjectPattern") {
|
||||
for (var i = 0; i < left.properties.length; i++) {
|
||||
var name = left.properties[i];
|
||||
if (name && name.key && name.key.type === 'Identifier') {
|
||||
scope.__define(name.key, new Definition("ComprehensionElement", name.key, name.key));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (node.right) {
|
||||
this.visit(node.right);
|
||||
if (block.right) {
|
||||
this.visit(block.right);
|
||||
}
|
||||
}
|
||||
if (node.filter) {
|
||||
this.visit(block.filter);
|
||||
}
|
||||
this.visit(node.body);
|
||||
this.close(node);
|
||||
};
|
||||
|
||||
referencer.prototype.DeclareModule =
|
||||
|
||||
@ -1017,7 +1017,7 @@ describe("verify", function () {
|
||||
);
|
||||
});
|
||||
|
||||
it("expression, if statement, multiple blocks", function () {
|
||||
it("generator, if statement, multiple blocks", function () {
|
||||
verifyAndAssertMessages([
|
||||
"let arr = [1, 2, 3];",
|
||||
"let arr2 = [1, 2, 3];",
|
||||
@ -1031,13 +1031,37 @@ describe("verify", function () {
|
||||
it("ArrayPattern", function () {
|
||||
verifyAndAssertMessages([
|
||||
"let arr = [1, 2, 3];",
|
||||
"let arr2 = [1, 2, 3];",
|
||||
"[for ([,x] of arr) for ({[start.x]: x, [start.y]: y} of arr2) x]"
|
||||
"[for ([,x] of arr) x]"
|
||||
].join("\n"),
|
||||
{ "no-unused-vars": 1, "no-undef": 1 },
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
it("ObjectPattern", function () {
|
||||
verifyAndAssertMessages([
|
||||
"let arr = [{x: 1, y: 2}, {x: 2, y: 3}];",
|
||||
"[for ({x, y} of arr) x + y]"
|
||||
].join("\n"),
|
||||
{ "no-unused-vars": 1, "no-undef": 1 },
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
it("multiple comprehensions #138", function () {
|
||||
verifyAndAssertMessages([
|
||||
"function test() {",
|
||||
"let items;",
|
||||
"return {",
|
||||
"a: [for (i of items) i],",
|
||||
"b: [for (i of items) i]",
|
||||
"};",
|
||||
"} test;"
|
||||
].join("\n"),
|
||||
{ "no-unused-vars": 1, "no-undef": 1, "no-redeclare": 1 },
|
||||
[]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("decorators #72", function () {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user