diff --git a/packages/babel-plugin-transform-regenerator/src/hoist.js b/packages/babel-plugin-transform-regenerator/src/hoist.js index 222b0c651d..cac505fdfe 100644 --- a/packages/babel-plugin-transform-regenerator/src/hoist.js +++ b/packages/babel-plugin-transform-regenerator/src/hoist.js @@ -26,7 +26,9 @@ exports.hoist = function(funPath) { let exprs = []; vdec.declarations.forEach(function(dec) { - vars[dec.id.name] = dec.id; + // Note: We duplicate 'dec.id' here to ensure that the variable declaration IDs don't + // have the same 'loc' value, since that can make sourcemaps and retainLines behave poorly. + vars[dec.id.name] = t.identifier(dec.id.name); if (dec.init) { exprs.push(t.assignmentExpression( diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/actual.js b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/actual.js new file mode 100644 index 0000000000..f791cb8763 --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/actual.js @@ -0,0 +1,7 @@ +var func = function * (){ + yield obj + .method() + .method2(); + + const actual = true; +}; diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/expected.js b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/expected.js new file mode 100644 index 0000000000..76c55e3f30 --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/expected.js @@ -0,0 +1,6 @@ +var func = regeneratorRuntime.mark(function _callee() {var actual;return regeneratorRuntime.wrap(function _callee$(_context) {while (1) switch (_context.prev = _context.next) {case 0:_context.next = 2;return ( + obj. + method(). + method2());case 2: + + actual = true;case 3:case "end":return _context.stop();}}, _callee, this);}); diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/options.json b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/options.json new file mode 100644 index 0000000000..21fd7445e2 --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/variable-renaming/retain-lines/options.json @@ -0,0 +1,6 @@ +{ + "plugins": [ + "transform-regenerator" + ], + "retainLines": true +}