From 1066a42fb2d1872abe12047cd5dc11fb929fa2c1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 30 Apr 2015 17:19:27 +0100 Subject: [PATCH] fix weird path context state by clearing the context before we visit it --- .../transformers/spec/function-name.js | 3 +-- src/babel/traversal/context.js | 2 ++ src/babel/traversal/index.js | 8 ++++---- src/babel/traversal/scope.js | 7 ++++++- .../spec.function-name/assignment/actual.js | 1 + .../spec.function-name/assignment/expected.js | 18 +++++------------- 6 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/babel/transformation/transformers/spec/function-name.js b/src/babel/transformation/transformers/spec/function-name.js index c04782ef0a..bf31ee407a 100644 --- a/src/babel/transformation/transformers/spec/function-name.js +++ b/src/babel/transformation/transformers/spec/function-name.js @@ -1,2 +1 @@ -export { bare as FunctionExpression } from "../../helpers/name-method"; -export { bare as ArrowFunctionExpression } from "../../helpers/name-method"; +export { bare as FunctionExpression, bare as ArrowFunctionExpression } from "../../helpers/name-method"; diff --git a/src/babel/traversal/context.js b/src/babel/traversal/context.js index 21aacf14d7..a63ea42784 100644 --- a/src/babel/traversal/context.js +++ b/src/babel/traversal/context.js @@ -34,6 +34,8 @@ export default class TraversalContext { if (visited.indexOf(path.node) >= 0) continue; visited.push(path.node); + path.setContext(this.parentPath, this, path.key); + if (path.visit()) { stop = true; break; diff --git a/src/babel/traversal/index.js b/src/babel/traversal/index.js index bd4552b97b..194d412cb9 100644 --- a/src/babel/traversal/index.js +++ b/src/babel/traversal/index.js @@ -14,10 +14,6 @@ export default function traverse(parent, opts, scope, state, parentPath) { } if (!opts) opts = {}; - if (!opts.enter) opts.enter = function () { }; - if (!opts.exit) opts.exit = function () { }; - if (!opts.shouldSkip) opts.shouldSkip = function () { return false; }; - traverse.verify(opts); // array of nodes @@ -41,6 +37,10 @@ traverse.verify = function (opts) { throw new Error(messages.get("traverseVerifyRootFunction")); } + if (!opts.enter) opts.enter = function () { }; + if (!opts.exit) opts.exit = function () { }; + if (!opts.shouldSkip) opts.shouldSkip = function () { return false; }; + for (var key in opts) { // it's all good if (key === "blacklist") continue; diff --git a/src/babel/traversal/scope.js b/src/babel/traversal/scope.js index af2755bed9..3f3c8a54a9 100644 --- a/src/babel/traversal/scope.js +++ b/src/babel/traversal/scope.js @@ -68,7 +68,12 @@ var blockVariableVisitor = { var renameVisitor = explode({ Identifier(node, parent, scope, state) { if (this.isReferenced() && node.name === state.oldName) { - node.name = state.newName; + if (this.parentPath.isProperty() && this.key === "key" && parent.shorthand) { + parent.shorthand = false; + parent.value = t.identifier(state.newName); + } else { + node.name = state.newName; + } } }, diff --git a/test/core/fixtures/transformation/spec.function-name/assignment/actual.js b/test/core/fixtures/transformation/spec.function-name/assignment/actual.js index 720d84e7de..ad3651eb21 100644 --- a/test/core/fixtures/transformation/spec.function-name/assignment/actual.js +++ b/test/core/fixtures/transformation/spec.function-name/assignment/actual.js @@ -4,5 +4,6 @@ var i = function () { var j = function () { ({ j } = 5); + ({ y: j } = 5); ; }; diff --git a/test/core/fixtures/transformation/spec.function-name/assignment/expected.js b/test/core/fixtures/transformation/spec.function-name/assignment/expected.js index 165873a40c..e4e6aed3b8 100644 --- a/test/core/fixtures/transformation/spec.function-name/assignment/expected.js +++ b/test/core/fixtures/transformation/spec.function-name/assignment/expected.js @@ -4,19 +4,11 @@ var _i = function i() { _i = 5; }; -var j = (function (_j) { - function j() { - return _j.apply(this, arguments); - } - - j.toString = function () { - return _j.toString(); - }; - - return j; -})(function () { +var _j = function j() { var _ = 5; - j = _.j; + _j = _.j; + var _2 = 5; + _j = _2.y; ; -}); +};