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 = [];