From 9e5d0078245bf107c7d131e4d02573404e0f6cfc Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 14 May 2018 11:33:02 +0200 Subject: [PATCH 1/3] fix: minify infinity in expressions --- .../__tests__/fixtures/bindings/actual.js | 12 ++++++++++++ .../__tests__/fixtures/bindings/expected.js | 14 ++++++++++++++ .../__tests__/fixtures/expressions/actual.js | 10 ++++++++++ .../__tests__/fixtures/expressions/expected.js | 6 ++++++ packages/babel-plugin-minify-infinity/src/index.js | 8 ++++++-- 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/actual.js create mode 100644 packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/expected.js create mode 100644 packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/actual.js create mode 100644 packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js diff --git a/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/actual.js b/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/actual.js new file mode 100644 index 000000000..f9dbe9181 --- /dev/null +++ b/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/actual.js @@ -0,0 +1,12 @@ +function foo() { + let [Infinity] = some(); + return Infinity; +} + +function bar() { + let [...Infinity] = some(); +} + +function baz() { + let { inf = Infinity } = some(); +} diff --git a/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/expected.js b/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/expected.js new file mode 100644 index 000000000..11f54d2aa --- /dev/null +++ b/packages/babel-plugin-minify-infinity/__tests__/fixtures/bindings/expected.js @@ -0,0 +1,14 @@ +function foo() { + let [Infinity] = some(); + return Infinity; +} + +function bar() { + let [...Infinity] = some(); +} + +function baz() { + let { + inf = 1 / 0 + } = some(); +} \ No newline at end of file diff --git a/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/actual.js b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/actual.js new file mode 100644 index 000000000..09e479cc1 --- /dev/null +++ b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/actual.js @@ -0,0 +1,10 @@ +let x = [Infinity, Infinity]; + +let y = [ + { + a: Infinity + }, + { + a: Infinity + } +]; diff --git a/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js new file mode 100644 index 000000000..2c93c05bb --- /dev/null +++ b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js @@ -0,0 +1,6 @@ +let x = [1 / 0, 1 / 0]; +let y = [{ + a: Infinity +}, { + a: Infinity +}]; \ No newline at end of file diff --git a/packages/babel-plugin-minify-infinity/src/index.js b/packages/babel-plugin-minify-infinity/src/index.js index 2c04d31b7..d57eb9c17 100644 --- a/packages/babel-plugin-minify-infinity/src/index.js +++ b/packages/babel-plugin-minify-infinity/src/index.js @@ -28,8 +28,12 @@ module.exports = function({ types: t }) { return; } - if (path.isLVal() && !path.parentPath.isExpressionStatement()) { - return; + const bindingIds = path.parentPath.getBindingIdentifierPaths(); + + for (const id of Object.keys(bindingIds)) { + if (id === "Infinity" && bindingIds[id] === path) { + return; + } } path.replaceWith(INFINITY); From 14852f32ebeb5e49c5c041dd0ad0f7da42f17e60 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 14 May 2018 13:38:20 +0200 Subject: [PATCH 2/3] fix object expressions transformations --- .../__tests__/fixtures/expressions/expected.js | 4 ++-- packages/babel-plugin-minify-infinity/src/index.js | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js index 2c93c05bb..cd701eda6 100644 --- a/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js +++ b/packages/babel-plugin-minify-infinity/__tests__/fixtures/expressions/expected.js @@ -1,6 +1,6 @@ let x = [1 / 0, 1 / 0]; let y = [{ - a: Infinity + a: 1 / 0 }, { - a: Infinity + a: 1 / 0 }]; \ No newline at end of file diff --git a/packages/babel-plugin-minify-infinity/src/index.js b/packages/babel-plugin-minify-infinity/src/index.js index d57eb9c17..ea5d1d5ff 100644 --- a/packages/babel-plugin-minify-infinity/src/index.js +++ b/packages/babel-plugin-minify-infinity/src/index.js @@ -27,11 +27,16 @@ module.exports = function({ types: t }) { if (path.parentPath.isMemberExpression()) { return; } - const bindingIds = path.parentPath.getBindingIdentifierPaths(); for (const id of Object.keys(bindingIds)) { - if (id === "Infinity" && bindingIds[id] === path) { + if ( + id === "Infinity" && + bindingIds[id] === path && + // ObjectProperty is common for ObjectExpression and ObjectPattern and only + // one of them is a Binding, the other is simply a reference + !path.parentPath.parentPath.isObjectExpression() + ) { return; } } From 07ae6cecc95a7af153c5db084eedb940cc10abd0 Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 14 May 2018 14:01:06 +0200 Subject: [PATCH 3/3] address review comments --- .../babel-plugin-minify-infinity/src/index.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/babel-plugin-minify-infinity/src/index.js b/packages/babel-plugin-minify-infinity/src/index.js index ea5d1d5ff..435931049 100644 --- a/packages/babel-plugin-minify-infinity/src/index.js +++ b/packages/babel-plugin-minify-infinity/src/index.js @@ -27,18 +27,16 @@ module.exports = function({ types: t }) { if (path.parentPath.isMemberExpression()) { return; } + const bindingIds = path.parentPath.getBindingIdentifierPaths(); - for (const id of Object.keys(bindingIds)) { - if ( - id === "Infinity" && - bindingIds[id] === path && - // ObjectProperty is common for ObjectExpression and ObjectPattern and only - // one of them is a Binding, the other is simply a reference - !path.parentPath.parentPath.isObjectExpression() - ) { - return; - } + if ( + bindingIds["Infinity"] === path && + // ObjectProperty is common for ObjectExpression and ObjectPattern and only + // one of them is a Binding, the other is simply a reference + !path.parentPath.parentPath.isObjectExpression() + ) { + return; } path.replaceWith(INFINITY);