From 7f60941367d07600051b540c02c0875911736dec Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 23 Jan 2017 17:36:00 +0100 Subject: [PATCH] Remove undef from seqExpr - (Fix #373) (#388) --- ...-plugin-transform-remove-undefined-test.js | 32 +++++++++++++++++++ .../src/index.js | 18 +++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/babel-plugin-transform-remove-undefined/__tests__/babel-plugin-transform-remove-undefined-test.js b/packages/babel-plugin-transform-remove-undefined/__tests__/babel-plugin-transform-remove-undefined-test.js index 6320a17cb..b5bde00f1 100644 --- a/packages/babel-plugin-transform-remove-undefined/__tests__/babel-plugin-transform-remove-undefined-test.js +++ b/packages/babel-plugin-transform-remove-undefined/__tests__/babel-plugin-transform-remove-undefined-test.js @@ -171,4 +171,36 @@ describe("transform-remove-undefined-plugin", () => { }`); expect(transform(source)).toBe(source); }); + + it("should remove from sequence expressions", () => { + const source = unpad(` + a = b, void 0, b = c, d.e.f(), void 0, hello.world(); + `); + const expected = unpad(` + a = b, b = c, d.e.f(), hello.world(); + `); + expect(transform(source)).toBe(expected); + }); + + it("should NOT remove last undefined from sequence expressions", () => { + const source = unpad(` + if (foo.bar(), void 0) { + foo.baz(); + } + function bar() { + return a.b(), void 0; + } + `); + expect(transform(source)).toBe(source); + }); + + it("should remove last undefined from sequence expressions if safe", () => { + const source = unpad(` + a = b, void 0, b = c, d.e.f(), void 0, hello.world(), void 0; + `); + const expected = unpad(` + a = b, b = c, d.e.f(), hello.world(); + `); + expect(transform(source)).toBe(expected); + }); }); diff --git a/packages/babel-plugin-transform-remove-undefined/src/index.js b/packages/babel-plugin-transform-remove-undefined/src/index.js index 571f65303..e6eb1942f 100644 --- a/packages/babel-plugin-transform-remove-undefined/src/index.js +++ b/packages/babel-plugin-transform-remove-undefined/src/index.js @@ -80,6 +80,24 @@ module.exports = function() { return { name: "transform-remove-undefined", visitor: { + SequenceExpression(path) { + const expressions = path.get("expressions"); + + for (let i = 0; i < expressions.length; i++) { + const expr = expressions[i]; + if (!isPureAndUndefined(expr)) continue; + + // last value + if (i === expressions.length - 1) { + if (path.parentPath.isExpressionStatement()) { + expr.remove(); + } + } else { + expr.remove(); + } + } + }, + ReturnStatement(path) { if (path.node.argument !== null) { if (isPureAndUndefined(path.get("argument"))) {