diff --git a/packages/babel-traverse/src/path/conversion.js b/packages/babel-traverse/src/path/conversion.js index f708e58dcb2a..ca8b1449427c 100644 --- a/packages/babel-traverse/src/path/conversion.js +++ b/packages/babel-traverse/src/path/conversion.js @@ -208,9 +208,12 @@ function hoistFunctionEnvironment( }, }); const superBinding = getSuperBinding(thisEnvFn); - allSuperCalls.forEach(superCall => - superCall.get("callee").replaceWith(t.identifier(superBinding)), - ); + allSuperCalls.forEach(superCall => { + const callee = t.identifier(superBinding); + callee.loc = superCall.node.callee.loc; + + superCall.get("callee").replaceWith(callee); + }); } // Convert all "this" references in the arrow to point at the alias. @@ -225,11 +228,12 @@ function hoistFunctionEnvironment( (inConstructor && hasSuperClass(thisEnvFn)) ) { thisPaths.forEach(thisChild => { - thisChild.replaceWith( - thisChild.isJSX() - ? t.jsxIdentifier(thisBinding) - : t.identifier(thisBinding), - ); + const thisRef = thisChild.isJSX() + ? t.jsxIdentifier(thisBinding) + : t.identifier(thisBinding); + + thisRef.loc = thisChild.node.loc; + thisChild.replaceWith(thisRef); }); if (specCompliant) thisBinding = null; @@ -243,7 +247,10 @@ function hoistFunctionEnvironment( ); argumentsPaths.forEach(argumentsChild => { - argumentsChild.replaceWith(t.identifier(argumentsBinding)); + const argsRef = t.identifier(argumentsBinding); + argsRef.loc = argumentsChild.node.loc; + + argumentsChild.replaceWith(argsRef); }); } @@ -253,8 +260,11 @@ function hoistFunctionEnvironment( t.metaProperty(t.identifier("new"), t.identifier("target")), ); - newTargetPaths.forEach(argumentsChild => { - argumentsChild.replaceWith(t.identifier(newTargetBinding)); + newTargetPaths.forEach(targetChild => { + const targetRef = t.identifier(newTargetBinding); + targetRef.loc = targetChild.node.loc; + + targetChild.replaceWith(targetRef); }); } diff --git a/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/input.js b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/input.js new file mode 100644 index 000000000000..94690c22185e --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/input.js @@ -0,0 +1,5 @@ +function fn() { + var inner = () => { + console.log(arguments); + }; +} diff --git a/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/options.json b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/options.json new file mode 100644 index 000000000000..ef5baa727e08 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-arrow-functions"] +} diff --git a/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/output.js b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/output.js new file mode 100644 index 000000000000..4817823f3504 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/output.js @@ -0,0 +1,7 @@ +function fn() { + var _arguments = arguments; + + var inner = function () { + console.log(_arguments); + }; +} diff --git a/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/source-mappings.json b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/source-mappings.json new file mode 100644 index 000000000000..8126503ee67b --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/arguments-source-maps/source-mappings.json @@ -0,0 +1,8 @@ +[{ + "generated": { + "line": 5, "column": 16 + }, + "original": { + "line": 3, "column": 16 + } +}] diff --git a/packages/babel-traverse/test/fixtures/conversion/this-source-maps/input.js b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/input.js new file mode 100644 index 000000000000..82a771edc598 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/input.js @@ -0,0 +1,5 @@ +function fn() { + var inner = () => { + console.log(this); + }; +} diff --git a/packages/babel-traverse/test/fixtures/conversion/this-source-maps/options.json b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/options.json new file mode 100644 index 000000000000..ef5baa727e08 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-arrow-functions"] +} diff --git a/packages/babel-traverse/test/fixtures/conversion/this-source-maps/output.js b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/output.js new file mode 100644 index 000000000000..327df642d041 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/output.js @@ -0,0 +1,7 @@ +function fn() { + var _this = this; + + var inner = function () { + console.log(_this); + }; +} diff --git a/packages/babel-traverse/test/fixtures/conversion/this-source-maps/source-mappings.json b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/source-mappings.json new file mode 100644 index 000000000000..8126503ee67b --- /dev/null +++ b/packages/babel-traverse/test/fixtures/conversion/this-source-maps/source-mappings.json @@ -0,0 +1,8 @@ +[{ + "generated": { + "line": 5, "column": 16 + }, + "original": { + "line": 3, "column": 16 + } +}]