From 011079fb6bd6936cac3646594274414d1fee880a Mon Sep 17 00:00:00 2001 From: Boopathi Rajaa Date: Mon, 11 Dec 2017 00:00:54 +0100 Subject: [PATCH] fix(dce): don't remove toplevel classes Apply the same trick we use in mangler to detect toplevel classes --- .../__tests__/fixtures/toplevel-class/actual.js | 1 + .../__tests__/fixtures/toplevel-class/expected.js | 1 + .../src/index.js | 8 ++++++++ 3 files changed, 10 insertions(+) create mode 100644 packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/actual.js create mode 100644 packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/expected.js diff --git a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/actual.js b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/actual.js new file mode 100644 index 000000000..4e6a6de65 --- /dev/null +++ b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/actual.js @@ -0,0 +1 @@ +class Foo {} diff --git a/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/expected.js b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/expected.js new file mode 100644 index 000000000..f72abf33f --- /dev/null +++ b/packages/babel-plugin-minify-dead-code-elimination/__tests__/fixtures/toplevel-class/expected.js @@ -0,0 +1 @@ +class Foo {} \ No newline at end of file diff --git a/packages/babel-plugin-minify-dead-code-elimination/src/index.js b/packages/babel-plugin-minify-dead-code-elimination/src/index.js index 25fe626eb..037fccefa 100644 --- a/packages/babel-plugin-minify-dead-code-elimination/src/index.js +++ b/packages/babel-plugin-minify-dead-code-elimination/src/index.js @@ -208,6 +208,14 @@ module.exports = ({ types: t, traverse }) => { ) { // `bar(function foo() {})` foo is not referenced but it's used. continue; + } else if ( + // ClassDeclaration has binding in two scopes + // 1. The scope in which it is declared + // 2. The class's own scope + binding.path.isClassDeclaration() && + binding.path === scope.path + ) { + continue; } const mutations = [];