From 8d4674ca5a48a98c9d936e9f9fc733b14f27cda8 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Thu, 19 Oct 2017 15:59:36 -0400 Subject: [PATCH] Fix destructuring in pipeline operator (#6515) * Fix destructuring in pipeline operator Fixes #6514. * Run exec only on node 6 --- .../src/index.js | 4 ++-- .../destructure-arrow-param/actual.js | 7 +++++++ .../destructure-arrow-param/exec.js | 7 +++++++ .../destructure-arrow-param/expected.js | 14 ++++++++++++++ .../destructure-arrow-param/options.json | 3 +++ 5 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js create mode 100644 packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js create mode 100644 packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js create mode 100644 packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json diff --git a/packages/babel-plugin-transform-pipeline-operator/src/index.js b/packages/babel-plugin-transform-pipeline-operator/src/index.js index 93085d7d9d..26abdf0c29 100644 --- a/packages/babel-plugin-transform-pipeline-operator/src/index.js +++ b/packages/babel-plugin-transform-pipeline-operator/src/index.js @@ -18,9 +18,9 @@ export default function({ types: t }) { if (optimizeArrow) { const { params } = right; - if (params.length === 1) { + if (params.length === 1 && t.isIdentifier(params[0])) { param = params[0]; - } else if (params.length > 1) { + } else if (params.length > 0) { optimizeArrow = false; } } else if (t.isIdentifier(right, { name: "eval" })) { diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js new file mode 100644 index 0000000000..f851a666ba --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/actual.js @@ -0,0 +1,7 @@ +// Array destructing +const result = [0] |> ([x]) => x; +assert.equal(result, 0); + +// Object destructuring +const result2 = { y: 1, z: 2 } |> ({ y, z }) => y + z; +assert.equal(result, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js new file mode 100644 index 0000000000..9fb8a5cc53 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/exec.js @@ -0,0 +1,7 @@ +// Array destructing +const result = [0] |> ([x]) => x; +assert.equal(result, 0); + +// Object destructuring +const result2 = { y: 1, z: 2 } |> ({ y, z }) => y + z; +assert.equal(result2, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js new file mode 100644 index 0000000000..08f7b4a496 --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/expected.js @@ -0,0 +1,14 @@ +var _ref, _y$z; + +// Array destructing +const result = (_ref = [0], (([x]) => x)(_ref)); +assert.equal(result, 0); // Object destructuring + +const result2 = (_y$z = { + y: 1, + z: 2 +}, (({ + y, + z +}) => y + z)(_y$z)); +assert.equal(result, 3); diff --git a/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json new file mode 100644 index 0000000000..7d8c3c204c --- /dev/null +++ b/packages/babel-plugin-transform-pipeline-operator/test/fixtures/pipeline-operator/destructure-arrow-param/options.json @@ -0,0 +1,3 @@ +{ + "minNodeVersion": "6.0.0" +}