39 lines
893 B
JavaScript
39 lines
893 B
JavaScript
const code = `
|
|
for (const {foo, ...bar} of { bar: [] }) {
|
|
() => foo;
|
|
const [qux] = bar;
|
|
try {} catch (e) {
|
|
let quux = qux;
|
|
}
|
|
}
|
|
`;
|
|
|
|
let programPath;
|
|
let forOfPath;
|
|
let functionPath;
|
|
|
|
transform(code, {
|
|
configFile: false,
|
|
plugins: [
|
|
__dirname + "/../../../../lib",
|
|
{
|
|
post({ path }) {
|
|
programPath = path;
|
|
path.traverse({
|
|
ForOfStatement(path) { forOfPath = path },
|
|
FunctionExpression(path) { functionPath = path }
|
|
});
|
|
}
|
|
}
|
|
]
|
|
});
|
|
|
|
expect(Object.keys(programPath.scope.bindings)).toEqual(["foo", "bar"]);
|
|
|
|
// for declarations should be transformed to for bindings
|
|
expect(forOfPath.scope.bindings).toEqual({});
|
|
// The body should be wrapped into closure
|
|
expect(forOfPath.get("body").scope.bindings).toEqual({});
|
|
|
|
expect(Object.keys(functionPath.scope.bindings)).toEqual(["foo", "bar", "qux", "quux"]);
|