From 5043ec78bcded1dd6f3418cd42d029023dfbe62f Mon Sep 17 00:00:00 2001 From: Nikolay Emrikh Date: Thu, 16 Aug 2018 08:54:50 +0300 Subject: [PATCH] Fixes setter paratemer default value (#8479) * Fixes setter paratemer default value * Not changes doesn't mutate loose variable --- .../babel-plugin-transform-parameters/src/params.js | 6 +++--- .../test/fixtures/parameters/default-setter/exec.js | 9 +++++++++ .../test/fixtures/parameters/default-setter/input.js | 5 +++++ .../test/fixtures/parameters/default-setter/output.js | 10 ++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/exec.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/input.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/output.js diff --git a/packages/babel-plugin-transform-parameters/src/params.js b/packages/babel-plugin-transform-parameters/src/params.js index 391c87160e..000a8505a5 100644 --- a/packages/babel-plugin-transform-parameters/src/params.js +++ b/packages/babel-plugin-transform-parameters/src/params.js @@ -60,7 +60,8 @@ export default function convertFunctionParams(path, loose) { for (let i = 0; i < params.length; i++) { const param = params[i]; - if (param.isAssignmentPattern() && loose) { + const paramIsAssignmentPattern = param.isAssignmentPattern(); + if (paramIsAssignmentPattern && (loose || node.kind === "set")) { const left = param.get("left"); const right = param.get("right"); @@ -87,13 +88,12 @@ export default function convertFunctionParams(path, loose) { ); param.replaceWith(paramName); } - } else if (param.isAssignmentPattern()) { + } else if (paramIsAssignmentPattern) { if (firstOptionalIndex === null) firstOptionalIndex = i; const left = param.get("left"); const right = param.get("right"); - // if (!state.iife) { if (right.isIdentifier() && !isSafeBinding(scope, right.node)) { // the right hand side references a parameter diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/exec.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/exec.js new file mode 100644 index 0000000000..f11b28a623 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/exec.js @@ -0,0 +1,9 @@ +const defaultValue = 1; +const obj = { + set field(num = defaultValue) { + this.num = num; + } +}; +obj.field = void 0; + +expect(obj.num).toBe(defaultValue); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/input.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/input.js new file mode 100644 index 0000000000..d2fd1cdef5 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/input.js @@ -0,0 +1,5 @@ +const obj = { + set field(num = 1) { + this.num = num; + } +}; diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/output.js new file mode 100644 index 0000000000..d55125d953 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-setter/output.js @@ -0,0 +1,10 @@ +var obj = { + set field(num) { + if (num === void 0) { + num = 1; + } + + this.num = num; + } + +};