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) {
|
referencer.prototype.ComprehensionExpression = function(node) {
|
||||||
var left = node.left;
|
for (var i = 0; i < node.blocks.length; i++) {
|
||||||
if (left) {
|
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") {
|
if (left.type === "Identifier") {
|
||||||
createScopeVariable.call(this, node, left);
|
scope.__define(left, new Definition("ComprehensionElement", left, left));
|
||||||
} else if (left.type === "ArrayPattern") {
|
} else if (left.type === "ArrayPattern") {
|
||||||
for (var i = 0; i < left.elements.length; i++) {
|
for (var i = 0; i < left.elements.length; i++) {
|
||||||
if (left.elements[i]) {
|
var name = left.elements[i];
|
||||||
createScopeVariable.call(this, left.elements, 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) {
|
if (block.right) {
|
||||||
this.visit(node.right);
|
this.visit(block.right);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (node.filter) {
|
||||||
|
this.visit(block.filter);
|
||||||
|
}
|
||||||
|
this.visit(node.body);
|
||||||
|
this.close(node);
|
||||||
};
|
};
|
||||||
|
|
||||||
referencer.prototype.DeclareModule =
|
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([
|
verifyAndAssertMessages([
|
||||||
"let arr = [1, 2, 3];",
|
"let arr = [1, 2, 3];",
|
||||||
"let arr2 = [1, 2, 3];",
|
"let arr2 = [1, 2, 3];",
|
||||||
@ -1031,13 +1031,37 @@ describe("verify", function () {
|
|||||||
it("ArrayPattern", function () {
|
it("ArrayPattern", function () {
|
||||||
verifyAndAssertMessages([
|
verifyAndAssertMessages([
|
||||||
"let arr = [1, 2, 3];",
|
"let arr = [1, 2, 3];",
|
||||||
"let arr2 = [1, 2, 3];",
|
"[for ([,x] of arr) x]"
|
||||||
"[for ([,x] of arr) for ({[start.x]: x, [start.y]: y} of arr2) x]"
|
|
||||||
].join("\n"),
|
].join("\n"),
|
||||||
{ "no-unused-vars": 1, "no-undef": 1 },
|
{ "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 () {
|
describe("decorators #72", function () {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user