diff --git a/packages/babel-plugin-transform-do-expressions/src/index.js b/packages/babel-plugin-transform-do-expressions/src/index.js index 2692b98bf409..bc44bfde0487 100644 --- a/packages/babel-plugin-transform-do-expressions/src/index.js +++ b/packages/babel-plugin-transform-do-expressions/src/index.js @@ -5,13 +5,15 @@ export default function () { inherits: syntaxDoExpressions, visitor: { - DoExpression(path) { - const body = path.node.body.body; - if (body.length) { - path.replaceWithMultiple(body); - } else { - path.replaceWith(path.scope.buildUndefinedNode()); - } + DoExpression: { + exit(path) { + const body = path.node.body.body; + if (body.length) { + path.replaceExpressionWithStatements(body); + } else { + path.replaceWith(path.scope.buildUndefinedNode()); + } + }, }, }, }; diff --git a/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope.js b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope.js new file mode 100644 index 000000000000..44cc8e4eb159 --- /dev/null +++ b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope.js @@ -0,0 +1,10 @@ +"use strict"; + +let a = 1; + +(do { + let a = 2; + assert.equal(a, 2); +}); +assert.equal(a, 1); + diff --git a/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/actual.js b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/actual.js new file mode 100644 index 000000000000..798f9491bfa0 --- /dev/null +++ b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/actual.js @@ -0,0 +1,7 @@ +let a = 1; + +(do { + let a = 2; + a; +}); + diff --git a/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/expected.js b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/expected.js new file mode 100644 index 000000000000..71892256a0cd --- /dev/null +++ b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/expected.js @@ -0,0 +1,5 @@ +var _a; + +var a = 1; + +_a = 2, _a; diff --git a/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/options.json b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/options.json new file mode 100644 index 000000000000..61aac27ff0e9 --- /dev/null +++ b/packages/babel-plugin-transform-do-expressions/test/fixtures/do-expressions/block-scope/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-block-scoping", "transform-do-expressions"] +}