export default function({ types: t }) {
return {
name: "transform-safari-block-shadowing",
visitor: {
VariableDeclarator(path) {
const kind = path.parent.kind;
if (kind !== "let" && kind !== "const") return;
const block = path.scope.block;
if (t.isFunction(block) || t.isProgram(block)) return;
const bindings = t.getOuterBindingIdentifiers(path.node.id);
for (const name of Object.keys(bindings)) {
let scope = path.scope;
if (!scope.hasOwnBinding(name)) continue;
while ((scope = scope.parent)) {
if (scope.hasOwnBinding(name)) {
path.scope.rename(name);
break;
}
if (t.isFunction(scope.block) || t.isProgram(scope.block)) {
break;
}
}
}
},
},
};
}