Skip to content

Commit 6069217

Browse files
authoredMar 7, 2024··
fix(es/minifier): Do not drop used properties (#8703)
**Related issue:** - Closes #8692
1 parent c6464ad commit 6069217

File tree

7 files changed

+178
-0
lines changed

7 files changed

+178
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{
2+
"$schema": "http://json.schemastore.org/swcrc",
3+
"jsc": {
4+
"externalHelpers": false,
5+
"parser": {
6+
"syntax": "typescript",
7+
"tsx": false,
8+
"dynamicImport": true,
9+
"decorators": true
10+
},
11+
"keepClassNames": true,
12+
"target": "es2020",
13+
"minify": {
14+
"compress": {
15+
"arguments": false,
16+
"arrows": false,
17+
"booleans": false,
18+
"booleans_as_integers": false,
19+
"collapse_vars": false,
20+
"comparisons": false,
21+
"computed_props": false,
22+
"conditionals": false,
23+
"dead_code": false,
24+
"directives": false,
25+
"drop_console": false,
26+
"drop_debugger": false,
27+
"evaluate": false,
28+
"expression": false,
29+
"hoist_funs": false,
30+
"hoist_props": true,
31+
"hoist_vars": false,
32+
"if_return": false,
33+
"join_vars": false,
34+
"keep_classnames": false,
35+
"keep_fargs": false,
36+
"keep_fnames": false,
37+
"keep_infinity": false,
38+
"loops": false,
39+
"negate_iife": false,
40+
"properties": false,
41+
"reduce_funcs": false,
42+
"reduce_vars": false,
43+
"side_effects": false,
44+
"switches": false,
45+
"typeofs": false,
46+
"unsafe": false,
47+
"unsafe_arrows": false,
48+
"unsafe_comps": false,
49+
"unsafe_Function": false,
50+
"unsafe_math": false,
51+
"unsafe_symbols": false,
52+
"unsafe_methods": false,
53+
"unsafe_proto": false,
54+
"unsafe_regexp": false,
55+
"unsafe_undefined": false,
56+
"unused": false,
57+
"const_to_let": false,
58+
"pristine_globals": false
59+
},
60+
"mangle": false
61+
}
62+
}
63+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const props = {
2+
neededProp: 1,
3+
nestedProp: {
4+
getProps: () => props,
5+
getProp() {
6+
return this.getProps().neededProp;
7+
},
8+
},
9+
};
10+
console.log(props.nestedProp.getProp()); // should log: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const props = {
2+
neededProp: 1,
3+
nestedProp: {
4+
getProps: ()=>props,
5+
getProp () {
6+
return this.getProps().neededProp;
7+
}
8+
}
9+
};
10+
console.log(props.nestedProp.getProp());

‎crates/swc_ecma_minifier/src/compress/optimize/unused.rs

+28
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,34 @@ impl Visit for ThisPropertyVisitor {
956956
}
957957
}
958958

959+
fn visit_callee(&mut self, c: &Callee) {
960+
if self.should_abort {
961+
return;
962+
}
963+
964+
c.visit_children_with(self);
965+
966+
if self.should_abort {
967+
return;
968+
}
969+
970+
if let Callee::Expr(e) = c {
971+
match &**e {
972+
Expr::This(..) => {
973+
self.should_abort = true;
974+
}
975+
976+
Expr::Member(e) => {
977+
if e.obj.is_this() {
978+
self.should_abort = true;
979+
}
980+
}
981+
982+
_ => {}
983+
}
984+
}
985+
}
986+
959987
fn visit_member_expr(&mut self, e: &MemberExpr) {
960988
if self.should_abort {
961989
return;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"arguments": false,
3+
"arrows": false,
4+
"booleans": false,
5+
"booleans_as_integers": false,
6+
"collapse_vars": false,
7+
"comparisons": false,
8+
"computed_props": false,
9+
"conditionals": false,
10+
"dead_code": false,
11+
"directives": false,
12+
"drop_console": false,
13+
"drop_debugger": false,
14+
"evaluate": false,
15+
"expression": false,
16+
"hoist_funs": false,
17+
"hoist_props": true,
18+
"hoist_vars": false,
19+
"if_return": false,
20+
"join_vars": false,
21+
"keep_classnames": false,
22+
"keep_fargs": false,
23+
"keep_fnames": false,
24+
"keep_infinity": false,
25+
"loops": false,
26+
"negate_iife": false,
27+
"properties": false,
28+
"reduce_funcs": false,
29+
"reduce_vars": false,
30+
"side_effects": false,
31+
"switches": false,
32+
"typeofs": false,
33+
"unsafe": false,
34+
"unsafe_arrows": false,
35+
"unsafe_comps": false,
36+
"unsafe_Function": false,
37+
"unsafe_math": false,
38+
"unsafe_symbols": false,
39+
"unsafe_methods": false,
40+
"unsafe_proto": false,
41+
"unsafe_regexp": false,
42+
"unsafe_undefined": false,
43+
"unused": false,
44+
"const_to_let": false,
45+
"pristine_globals": false,
46+
"defaults": true
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const props = {
2+
neededProp: 1,
3+
nestedProp: {
4+
getProps: () => props,
5+
getProp() {
6+
return this.getProps().neededProp;
7+
},
8+
},
9+
};
10+
console.log(props.nestedProp.getProp()); // should log: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const props = {
2+
neededProp: 1,
3+
nestedProp: {
4+
getProps: ()=>props,
5+
getProp () {
6+
return this.getProps().neededProp;
7+
}
8+
}
9+
};
10+
console.log(props.nestedProp.getProp());

0 commit comments

Comments
 (0)
Please sign in to comment.