From d9dd32860a493cd202a06e9fdc49083af7cee026 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Mon, 17 Oct 2016 23:27:13 +0200 Subject: [PATCH] Fix replacing for-of if inside label (#4736) This replaces the label instead of the for-of itself as we already integrate the label in the replacement nodes. Fixes #3858 --- packages/babel-plugin-transform-es2015-for-of/src/index.js | 6 +++++- .../test/fixtures/regression/if-block-label-3858/actual.js | 5 +++++ .../fixtures/regression/if-block-label-3858/expected.js | 7 +++++++ .../test/fixtures/regression/if-label-3858/actual.js | 4 ++++ .../test/fixtures/regression/if-label-3858/expected.js | 7 +++++++ .../test/fixtures/regression/options.json | 3 +++ 6 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/actual.js create mode 100644 packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/expected.js create mode 100644 packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/actual.js create mode 100644 packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/expected.js create mode 100644 packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/options.json diff --git a/packages/babel-plugin-transform-es2015-for-of/src/index.js b/packages/babel-plugin-transform-es2015-for-of/src/index.js index bac099073e02..ca5ab6c09084 100644 --- a/packages/babel-plugin-transform-es2015-for-of/src/index.js +++ b/packages/babel-plugin-transform-es2015-for-of/src/index.js @@ -93,7 +93,11 @@ export default function ({ messages, template, types: t }) { visitor: { ForOfStatement(path, state) { if (path.get("right").isArrayExpression()) { - return path.replaceWithMultiple(_ForOfStatementArray.call(this, path, state)); + if (path.parentPath.isLabeledStatement()) { + return path.parentPath.replaceWithMultiple(_ForOfStatementArray(path)); + } else { + return path.replaceWithMultiple(_ForOfStatementArray(path)); + } } let callback = spec; diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/actual.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/actual.js new file mode 100644 index 000000000000..df89379c41f5 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/actual.js @@ -0,0 +1,5 @@ +if ( true ) { + loop: for (let ch of []) { + } +} + diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/expected.js new file mode 100644 index 000000000000..79a8edf0bce7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-block-label-3858/expected.js @@ -0,0 +1,7 @@ +if (true) { + var _arr = []; + + loop: for (var _i = 0; _i < _arr.length; _i++) { + let ch = _arr[_i]; + } +} diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/actual.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/actual.js new file mode 100644 index 000000000000..356ae3a45c08 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/actual.js @@ -0,0 +1,4 @@ +if ( true ) + loop: for (let ch of []) { + } + diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/expected.js b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/expected.js new file mode 100644 index 000000000000..79a8edf0bce7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/if-label-3858/expected.js @@ -0,0 +1,7 @@ +if (true) { + var _arr = []; + + loop: for (var _i = 0; _i < _arr.length; _i++) { + let ch = _arr[_i]; + } +} diff --git a/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/options.json b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/options.json new file mode 100644 index 000000000000..dd11655f5519 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-for-of/test/fixtures/regression/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-for-of"] +}