Skip to content

Commit

Permalink
fix(es/typescript): Collect all bindings in strip (#4118)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Mar 22, 2022
1 parent 77722c4 commit 13b2f38
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 1 deletion.
19 changes: 19 additions & 0 deletions crates/swc/tests/fixture/issue-3686/1/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"decorators": true,
"tsx": false
},
"target": "es2022",
"loose": false,
"minify": {
"compress": false,
"mangle": false
}
},
"module": {
"type": "commonjs"
},
"minify": false
}
36 changes: 36 additions & 0 deletions crates/swc/tests/fixture/issue-3686/1/input/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const CD: ClassDecorator = () => { }
const PD: PropertyDecorator = () => { }

// Commenting out the decorators creates valid ouput.
@CD
export class ServiceError extends Error {
@PD
readonly code: ServiceError.Code = ServiceError.Code.badResponse
readonly name: string = "ServiceError.BadResponse"
}

export namespace ServiceError {
export const enum Code {
serviceNotFound = 404,
serviceNotCompatible = 426,
serviceGone = 410,
implementation = 500,
timedOut = 504,
badRequest = 400,
badResponse = 422,
}

export class ServiceNotFound extends ServiceError {
// Service was probably not registered, or using the wrong channel
readonly code = Code.serviceNotFound
readonly name = "ServiceError.ServiceNotFound"
}

export function toMessageBody(error: unknown): {
code: number
message?: string
stack?: string
} {
return { code: ServiceError.Code.implementation }
}
}
49 changes: 49 additions & 0 deletions crates/swc/tests/fixture/issue-3686/1/output/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ServiceError = void 0;
var swcHelpers = require("@swc/helpers");
var _class, _descriptor;
const CD = ()=>{};
const PD = ()=>{};
let ServiceError = _class = CD(((_class = class ServiceError extends Error {
name = "ServiceError.BadResponse";
constructor(...args){
super(...args);
swcHelpers.initializerDefineProperty(this, "code", _descriptor, this);
}
}) || _class, _descriptor = swcHelpers.applyDecoratedDescriptor(_class.prototype, "code", [
PD
], {
configurable: true,
enumerable: true,
writable: true,
initializer: function() {
return ServiceError.Code.badResponse;
}
}), _class)) || _class;
exports.ServiceError = ServiceError;
(function(ServiceError1) {
let Code;
(function(Code) {
Code[Code["serviceNotFound"] = 404] = "serviceNotFound";
Code[Code["serviceNotCompatible"] = 426] = "serviceNotCompatible";
Code[Code["serviceGone"] = 410] = "serviceGone";
Code[Code["implementation"] = 500] = "implementation";
Code[Code["timedOut"] = 504] = "timedOut";
Code[Code["badRequest"] = 400] = "badRequest";
Code[Code["badResponse"] = 422] = "badResponse";
})(Code = ServiceError1.Code || (ServiceError1.Code = {}));
class ServiceNotFound extends ServiceError {
code = 404;
name = "ServiceError.ServiceNotFound";
}
ServiceError1.ServiceNotFound = ServiceNotFound;
function toMessageBody(error) {
return {
code: ServiceError.Code.implementation
};
}
ServiceError1.toMessageBody = toMessageBody;
})(ServiceError || (exports.ServiceError = ServiceError = {}));
2 changes: 1 addition & 1 deletion crates/swc_ecma_minifier/tests/eval.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ impl VisitMut for PartialInliner {
span: s.span,
tail: true,
// TODO possible bug for quotes
raw: s.value.clone().into(),
raw: s.value.clone(),
cooked: Some(s.value),
};
tt.tpl = Tpl {
Expand Down
13 changes: 13 additions & 0 deletions crates/swc_ecma_transforms_typescript/src/strip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1489,6 +1489,8 @@ where
fn visit_assign_pat_prop(&mut self, n: &AssignPatProp) {
if !self.in_var_pat {
n.key.visit_with(self);
} else {
self.decl_names.insert(n.key.to_id());
}
n.value.visit_with(self);
}
Expand All @@ -1500,6 +1502,8 @@ where
fn visit_binding_ident(&mut self, n: &BindingIdent) {
if !self.in_var_pat {
n.visit_children_with(self)
} else {
self.decl_names.insert(n.to_id());
}
}

Expand All @@ -1521,12 +1525,14 @@ where
f.function.visit_with(self)
}
Decl::Var(ref var) => {
let old = self.in_var_pat;
for decl in &var.decls {
self.in_var_pat = true;
decl.name.visit_with(self);
self.in_var_pat = false;
decl.init.visit_with(self);
}
self.in_var_pat = old;
}
Decl::TsEnum(e) => {
e.members.visit_with(self);
Expand Down Expand Up @@ -1609,6 +1615,13 @@ where
self.non_top_level = old;
}

fn visit_expr(&mut self, n: &Expr) {
let old = self.in_var_pat;
self.in_var_pat = false;
n.visit_children_with(self);
self.in_var_pat = old;
}

fn visit_ts_entity_name(&mut self, _: &TsEntityName) {}

// these may contain expr
Expand Down

2 comments on commit 13b2f38

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 13b2f38 Previous: 634d732 Ratio
base_tr_fixer 23495 ns/iter (± 342) 24348 ns/iter (± 2855) 0.96
base_tr_resolver_and_hygiene 93210 ns/iter (± 9050) 109153 ns/iter (± 31611) 0.85
codegen_es2015 29162 ns/iter (± 183) 32698 ns/iter (± 3369) 0.89
codegen_es2016 29227 ns/iter (± 199) 32852 ns/iter (± 5160) 0.89
codegen_es2017 29251 ns/iter (± 151) 32802 ns/iter (± 2812) 0.89
codegen_es2018 29302 ns/iter (± 197) 30167 ns/iter (± 5077) 0.97
codegen_es2019 29314 ns/iter (± 153) 29821 ns/iter (± 3813) 0.98
codegen_es2020 29322 ns/iter (± 153) 31244 ns/iter (± 4803) 0.94
codegen_es3 29318 ns/iter (± 158) 31712 ns/iter (± 4003) 0.92
codegen_es5 29231 ns/iter (± 108) 33457 ns/iter (± 2273) 0.87
full_es2015 136307808 ns/iter (± 26791861) 153722520 ns/iter (± 12359693) 0.89
full_es2016 114576516 ns/iter (± 23733064) 148550262 ns/iter (± 23247087) 0.77
full_es2017 134988883 ns/iter (± 25508897) 149155771 ns/iter (± 13839297) 0.91
full_es2018 112095539 ns/iter (± 13842866) 147206268 ns/iter (± 20845953) 0.76
full_es2019 112655770 ns/iter (± 25301124) 147326095 ns/iter (± 17068798) 0.76
full_es2020 111997511 ns/iter (± 15701841) 140878203 ns/iter (± 12211253) 0.79
full_es3 182917521 ns/iter (± 21714592) 199883806 ns/iter (± 15124942) 0.92
full_es5 172943209 ns/iter (± 5488912) 185893066 ns/iter (± 14859935) 0.93
parser 1679742 ns/iter (± 27117) 592793 ns/iter (± 58040) 2.83
ser_ast_node 127 ns/iter (± 1) 162 ns/iter (± 15) 0.78
ser_serde 128 ns/iter (± 4) 155 ns/iter (± 13) 0.83
emit_colors 9948926 ns/iter (± 7037437) 11020158 ns/iter (± 7039366) 0.90
emit_large 73482700 ns/iter (± 97730389) 53222637 ns/iter (± 79054125) 1.38
base_clone 2569310 ns/iter (± 102755) 2595133 ns/iter (± 277844) 0.99
fold_span 4078010 ns/iter (± 55720) 4260726 ns/iter (± 460319) 0.96
fold_span_panic 4267159 ns/iter (± 51839) 4014529 ns/iter (± 337507) 1.06
visit_mut_span 2978879 ns/iter (± 22548) 2844217 ns/iter (± 278989) 1.05
visit_mut_span_panic 3022300 ns/iter (± 30326) 2941650 ns/iter (± 274343) 1.03
usage_builtin_type 15975937 ns/iter (± 9800459) 16765592 ns/iter (± 11641889) 0.95
usage_property 396707 ns/iter (± 1549) 442095 ns/iter (± 56315) 0.90
boxing_boxed 134 ns/iter (± 0) 177 ns/iter (± 4) 0.76
boxing_boxed_clone 70 ns/iter (± 0) 84 ns/iter (± 5) 0.83
boxing_unboxed 129 ns/iter (± 0) 145 ns/iter (± 5) 0.89
boxing_unboxed_clone 63 ns/iter (± 0) 66 ns/iter (± 8) 0.95
time_10 299 ns/iter (± 3) 380 ns/iter (± 50) 0.79
time_15 637 ns/iter (± 105) 739 ns/iter (± 80) 0.86
time_20 1213 ns/iter (± 7) 1432 ns/iter (± 212) 0.85
time_40 6388 ns/iter (± 41) 4458 ns/iter (± 643) 1.43
time_5 104 ns/iter (± 1) 119 ns/iter (± 14) 0.87
time_60 15245 ns/iter (± 31) 10300 ns/iter (± 1442) 1.48
total 0 ns/iter (± 0) 0 ns/iter (± 0) NaN

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 13b2f38 Previous: 634d732 Ratio
parser 1679742 ns/iter (± 27117) 592793 ns/iter (± 58040) 2.83

This comment was automatically generated by workflow using github-action-benchmark.

CC: @kdy1

Please sign in to comment.