Revert "Remove unused variables with the Babel plugin"

This commit is contained in:
Jonas Jenwald 2026-05-26 21:00:25 +02:00 committed by GitHub
parent 6a1368ad81
commit 6d8d6f1349
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 25 additions and 82 deletions

View File

@ -47,31 +47,18 @@ function handlePreprocessorAction(ctx, actionName, args, path) {
}
function babelPluginPDFJSPreprocessor(babel, ctx) {
function removeUnusedFunctionsAndVariables(path) {
const { scope } = path;
function removeUnusedFunctions(path) {
let removed;
do {
removed = false;
scope.crawl();
for (const name in scope.bindings) {
const binding = scope.bindings[name];
path.scope.crawl();
for (const name in path.scope.bindings) {
const binding = path.scope.bindings[name];
if (!binding.referenced) {
const { path: bindingPath } = binding;
if (bindingPath.isFunctionDeclaration()) {
bindingPath.remove();
removed = true;
} else if (
bindingPath.isClassDeclaration() &&
!bindingPath.node.body.body.some(m => m.type === "StaticBlock")
) {
bindingPath.remove();
removed = true;
} else if (
bindingPath.isVariableDeclarator() &&
scope.isPure(bindingPath.node.init, false)
) {
bindingPath.remove();
removed = true;
}
}
}
@ -126,28 +113,24 @@ function babelPluginPDFJSPreprocessor(babel, ctx) {
LogicalExpression: {
exit(path) {
const { node } = path;
let leftIsTruthy = false;
switch (node.left.type) {
case "BooleanLiteral":
case "NumericLiteral":
case "StringLiteral":
case "NullLiteral":
leftIsTruthy = Boolean(node.left.value);
break;
default:
return;
if (!t.isBooleanLiteral(node.left)) {
return;
}
switch (node.operator) {
case "&&":
// true && expr => expr
// false && expr => false
path.replaceWith(leftIsTruthy ? node.right : node.left);
path.replaceWith(
node.left.value === true ? node.right : node.left
);
break;
case "||":
// true || expr => true
// false || expr => expr
path.replaceWith(leftIsTruthy ? node.left : node.right);
path.replaceWith(
node.left.value === true ? node.left : node.right
);
break;
}
},
@ -275,7 +258,7 @@ function babelPluginPDFJSPreprocessor(babel, ctx) {
body.pop();
}
removeUnusedFunctionsAndVariables(path);
removeUnusedFunctions(path);
},
},
ClassMethod: {
@ -301,7 +284,7 @@ function babelPluginPDFJSPreprocessor(babel, ctx) {
Program: {
exit(path) {
if (path.node.sourceType === "module") {
removeUnusedFunctionsAndVariables(path);
removeUnusedFunctions(path);
}
},
},

View File

@ -13,6 +13,3 @@ var l = true;
var m = false;
var n = false;
var o = true;
var p = null;
var q = 1;
use(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);

View File

@ -13,7 +13,3 @@ var l = 'test' !== 'test2';
var m = '1' === true;
var n = !true;
var o = !false;
var p = null && 1;
var q = null || 1;
use(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q);

View File

@ -18,8 +18,6 @@ class E extends A {
class F {
constructor() {
var a = 0;
use(a);
}
}
class G {}
use(B, C, D, E, F, G);

View File

@ -24,7 +24,6 @@ class F {
constructor() {
if (PDFJSDev.test('TRUE')) {
var a = 0;
use(a);
}
}
}
@ -33,9 +32,6 @@ class G {
constructor() {
if (PDFJSDev.test('FALSE')) {
var a = 0;
use(a);
}
}
}
use(B, C, D, E, F, G);

View File

@ -5,12 +5,12 @@ function f2() {
}
f2();
function f3() {
before();
var i = 0;
throw "test";
}
f3();
function f4() {
before();
var i = 0;
}
f4();
var obj = {
@ -23,4 +23,3 @@ class C {
}
var arrow1 = () => {};
var arrow2 = () => {};
use(obj, C, arrow1, arrow2);

View File

@ -1,43 +1,41 @@
function f1() {
return;
after();
var i = 0;
}
f1();
function f2() {
return 1;
after();
var i = 0;
}
f2();
function f3() {
before();
var i = 0;
throw "test";
after();
var j = 0;
}
f3();
function f4() {
before();
var i = 0;
if (true) {
return;
}
throw "test";
after();
var j = 0;
}
f4();
var obj = {
method1() { return; after(); },
method1() { return; var i = 0; },
method2() { return; },
};
class C {
method1() { return; after(); }
method1() { return; var i = 0; }
method2() { return; }
}
var arrow1 = () => { return; after(); };
var arrow1 = () => { return; var i = 0; };
var arrow2 = () => { return; };
use(obj, C, arrow1, arrow2);

View File

@ -16,4 +16,3 @@ var j = {
};
var k = false;
var l = true;
use(a, b, c, d, e, f, g, i, j, k, l);

View File

@ -9,5 +9,3 @@ var i = typeof PDFJSDev === 'undefined' ? PDFJSDev.eval('FALSE') : '0';
var j = typeof PDFJSDev !== 'undefined' ? PDFJSDev.eval('OBJ.obj') : '0';
var k = !PDFJSDev.test('TRUE');
var l = !PDFJSDev.test('FALSE');
use(a, b, c, d, e, f, g, i, j, k, l);

View File

@ -1,7 +0,0 @@
let c = 4;
let e = sideEffect();
let f = 5;
use(c);
{
use(f);
}

View File

@ -1,14 +0,0 @@
let a = 1;
let b = a, c = 4;
let d = null && sideEffect();
let e = null || sideEffect();
let f = 5;
let g = 6;
use(c);
if (PDFJSDev.test('TRUE')) {
use(f);
} else {
use(g);
}