Skip to content

Commit e946c43

Browse files
authoredFeb 19, 2023
fix(es/resolver): Use type context for export = if it's unresolved (#6963)
**Related issue:** - dudykr/stc#717.
1 parent b9398ce commit e946c43

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed
 

‎crates/swc_ecma_transforms_base/src/resolver/mod.rs

+19
Original file line numberDiff line numberDiff line change
@@ -1222,6 +1222,16 @@ impl<'a> VisitMut for Resolver<'a> {
12221222
});
12231223
}
12241224

1225+
fn visit_mut_ts_export_assignment(&mut self, node: &mut TsExportAssignment) {
1226+
node.expr.visit_mut_with(self);
1227+
1228+
if self.config.handle_types {
1229+
if let Some(i) = leftmost(&mut node.expr) {
1230+
self.try_resolving_as_type(i);
1231+
}
1232+
}
1233+
}
1234+
12251235
fn visit_mut_ts_expr_with_type_args(&mut self, n: &mut TsExprWithTypeArgs) {
12261236
if self.config.handle_types {
12271237
let old = self.in_type;
@@ -1453,6 +1463,15 @@ impl<'a> VisitMut for Resolver<'a> {
14531463
}
14541464
}
14551465

1466+
fn leftmost(expr: &mut Expr) -> Option<&mut Ident> {
1467+
match expr {
1468+
Expr::Ident(i) => Some(i),
1469+
Expr::Member(MemberExpr { obj, .. }) => leftmost(obj),
1470+
Expr::Paren(ParenExpr { expr, .. }) => leftmost(expr),
1471+
_ => None,
1472+
}
1473+
}
1474+
14561475
/// The folder which handles var / function hoisting.
14571476
struct Hoister<'a, 'b> {
14581477
resolver: &'a mut Resolver<'b>,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
interface Foo {
2+
(a: string): void;
3+
b: string;
4+
}
5+
interface Foo {
6+
(a: number): number;
7+
c: boolean;
8+
d: { x: number; y: number };
9+
}
10+
export = Foo;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
interface Foo__1 {
2+
(a: string) : void;
3+
b__0: string;
4+
}
5+
interface Foo__1 {
6+
(a: number) : number;
7+
c__0: boolean;
8+
d__0: {
9+
x__0: number;
10+
y__0: number;
11+
};
12+
}
13+
export = Foo__1

1 commit comments

Comments
 (1)

github-actions[bot] commented on Feb 19, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: e946c43 Previous: 9382bda Ratio
es/full/bugs-1 291105 ns/iter (± 21556) 280393 ns/iter (± 13426) 1.04
es/full/minify/libraries/antd 1647226943 ns/iter (± 27112889) 1639853169 ns/iter (± 24451020) 1.00
es/full/minify/libraries/d3 292931748 ns/iter (± 6676619) 294971373 ns/iter (± 8661132) 0.99
es/full/minify/libraries/echarts 1273886527 ns/iter (± 23791808) 1222470542 ns/iter (± 12481260) 1.04
es/full/minify/libraries/jquery 89016549 ns/iter (± 748099) 87647235 ns/iter (± 946898) 1.02
es/full/minify/libraries/lodash 105127733 ns/iter (± 921733) 104979648 ns/iter (± 877836) 1.00
es/full/minify/libraries/moment 52036264 ns/iter (± 554135) 52004448 ns/iter (± 839339) 1.00
es/full/minify/libraries/react 18940037 ns/iter (± 130692) 18988277 ns/iter (± 135591) 1.00
es/full/minify/libraries/terser 241753596 ns/iter (± 2095976) 240040994 ns/iter (± 3731933) 1.01
es/full/minify/libraries/three 427460789 ns/iter (± 4721122) 429308526 ns/iter (± 7302405) 1.00
es/full/minify/libraries/typescript 3161091276 ns/iter (± 30950470) 3091179067 ns/iter (± 25427680) 1.02
es/full/minify/libraries/victory 649963164 ns/iter (± 9158184) 627840067 ns/iter (± 9801201) 1.04
es/full/minify/libraries/vue 127747470 ns/iter (± 1663802) 127866355 ns/iter (± 6744870) 1.00
es/full/codegen/es3 25341 ns/iter (± 176) 29640 ns/iter (± 130) 0.85
es/full/codegen/es5 25725 ns/iter (± 143) 29452 ns/iter (± 315) 0.87
es/full/codegen/es2015 25199 ns/iter (± 265) 28904 ns/iter (± 313) 0.87
es/full/codegen/es2016 25254 ns/iter (± 213) 29346 ns/iter (± 443) 0.86
es/full/codegen/es2017 25432 ns/iter (± 193) 29201 ns/iter (± 430) 0.87
es/full/codegen/es2018 25347 ns/iter (± 226) 28752 ns/iter (± 373) 0.88
es/full/codegen/es2019 25471 ns/iter (± 169) 28932 ns/iter (± 434) 0.88
es/full/codegen/es2020 25364 ns/iter (± 249) 29137 ns/iter (± 249) 0.87
es/full/all/es3 174231549 ns/iter (± 3296003) 171590654 ns/iter (± 2209958) 1.02
es/full/all/es5 166655882 ns/iter (± 3924087) 163764363 ns/iter (± 4481263) 1.02
es/full/all/es2015 129930316 ns/iter (± 1230471) 123425918 ns/iter (± 1049583) 1.05
es/full/all/es2016 127046790 ns/iter (± 1475595) 122270771 ns/iter (± 1008394) 1.04
es/full/all/es2017 125301986 ns/iter (± 1219208) 120961143 ns/iter (± 873639) 1.04
es/full/all/es2018 120830828 ns/iter (± 1592860) 118469252 ns/iter (± 677215) 1.02
es/full/all/es2019 120808385 ns/iter (± 993653) 117419970 ns/iter (± 1154120) 1.03
es/full/all/es2020 115574799 ns/iter (± 821801) 113577981 ns/iter (± 1005390) 1.02
es/full/parser 540237 ns/iter (± 10840) 512711 ns/iter (± 6440) 1.05
es/full/base/fixer 21351 ns/iter (± 117) 21235 ns/iter (± 187) 1.01
es/full/base/resolver_and_hygiene 79840 ns/iter (± 729) 79289 ns/iter (± 291) 1.01
serialization of ast node 120 ns/iter (± 3) 118 ns/iter (± 1) 1.02
serialization of serde 125 ns/iter (± 1) 123 ns/iter (± 0) 1.02
css/minify/libraries/bootstrap 27173609 ns/iter (± 373929) 26685509 ns/iter (± 224943) 1.02
css/visitor/compare/clone 2020628 ns/iter (± 24079) 2025270 ns/iter (± 18966) 1.00
css/visitor/compare/visit_mut_span 2227123 ns/iter (± 23832) 2195767 ns/iter (± 17795) 1.01
css/visitor/compare/visit_mut_span_panic 2275935 ns/iter (± 21844) 2246400 ns/iter (± 14124) 1.01
css/visitor/compare/fold_span 2962693 ns/iter (± 23955) 2939148 ns/iter (± 36682) 1.01
css/visitor/compare/fold_span_panic 3094306 ns/iter (± 28868) 3055488 ns/iter (± 18692) 1.01
css/lexer/bootstrap_5_1_3 5165376 ns/iter (± 97092) 5106876 ns/iter (± 32913) 1.01
css/lexer/foundation_6_7_4 4337589 ns/iter (± 51910) 4242575 ns/iter (± 26447) 1.02
css/lexer/tailwind_3_1_1 814367 ns/iter (± 4723) 803234 ns/iter (± 5656) 1.01
css/parser/bootstrap_5_1_3 21431226 ns/iter (± 246591) 21008764 ns/iter (± 184063) 1.02
css/parser/foundation_6_7_4 16947307 ns/iter (± 113794) 16849078 ns/iter (± 123642) 1.01
css/parser/tailwind_3_1_1 3236498 ns/iter (± 20897) 3211308 ns/iter (± 18686) 1.01
es/codegen/colors 324457 ns/iter (± 185090) 339805 ns/iter (± 193363) 0.95
es/codegen/large 1202320 ns/iter (± 640990) 1181821 ns/iter (± 604273) 1.02
es/codegen/with-parser/colors 48348 ns/iter (± 656) 46771 ns/iter (± 329) 1.03
es/codegen/with-parser/large 518718 ns/iter (± 5476) 520552 ns/iter (± 4721) 1.00
es/minify/libraries/antd 1430287285 ns/iter (± 28308359) 1395847354 ns/iter (± 77958061) 1.02
es/minify/libraries/d3 240518722 ns/iter (± 1442396) 239215303 ns/iter (± 2418305) 1.01
es/minify/libraries/echarts 1042009016 ns/iter (± 16076834) 1023472168 ns/iter (± 13771574) 1.02
es/minify/libraries/jquery 76802261 ns/iter (± 415236) 75629308 ns/iter (± 583029) 1.02
es/minify/libraries/lodash 93409999 ns/iter (± 808194) 91735754 ns/iter (± 1056589) 1.02
es/minify/libraries/moment 45096772 ns/iter (± 331830) 44966538 ns/iter (± 384287) 1.00
es/minify/libraries/react 16877716 ns/iter (± 137671) 16791192 ns/iter (± 79499) 1.01
es/minify/libraries/terser 203958170 ns/iter (± 2531780) 204037117 ns/iter (± 2214088) 1.00
es/minify/libraries/three 351834244 ns/iter (± 6507787) 352526664 ns/iter (± 7303809) 1.00
es/minify/libraries/typescript 2707930895 ns/iter (± 18412444) 2623970447 ns/iter (± 14500562) 1.03
es/minify/libraries/victory 559413823 ns/iter (± 8513400) 539324024 ns/iter (± 9965231) 1.04
es/minify/libraries/vue 113037876 ns/iter (± 1014709) 112196651 ns/iter (± 1334701) 1.01
es/visitor/compare/clone 2351539 ns/iter (± 20620) 2352364 ns/iter (± 25960) 1.00
es/visitor/compare/visit_mut_span 2803724 ns/iter (± 41095) 2752071 ns/iter (± 17184) 1.02
es/visitor/compare/visit_mut_span_panic 2856157 ns/iter (± 21090) 2798927 ns/iter (± 30317) 1.02
es/visitor/compare/fold_span 3877084 ns/iter (± 26291) 3858466 ns/iter (± 36442) 1.00
es/visitor/compare/fold_span_panic 4114886 ns/iter (± 30664) 3983078 ns/iter (± 20624) 1.03
es/lexer/colors 16849 ns/iter (± 146) 16819 ns/iter (± 148) 1.00
es/lexer/angular 8100253 ns/iter (± 62172) 8018280 ns/iter (± 55331) 1.01
es/lexer/backbone 1061200 ns/iter (± 9471) 1042957 ns/iter (± 6110) 1.02
es/lexer/jquery 5862915 ns/iter (± 41299) 5767895 ns/iter (± 43855) 1.02
es/lexer/jquery mobile 9154852 ns/iter (± 61958) 8955751 ns/iter (± 81988) 1.02
es/lexer/mootools 4597643 ns/iter (± 27145) 4525223 ns/iter (± 31686) 1.02
es/lexer/underscore 884620 ns/iter (± 3783) 874003 ns/iter (± 5064) 1.01
es/lexer/three 27382346 ns/iter (± 182775) 27257796 ns/iter (± 299914) 1.00
es/lexer/yui 4966907 ns/iter (± 49483) 4919032 ns/iter (± 41732) 1.01
es/parser/colors 30127 ns/iter (± 199) 29527 ns/iter (± 305) 1.02
es/parser/angular 15170263 ns/iter (± 76268) 15160732 ns/iter (± 231378) 1.00
es/parser/backbone 2263628 ns/iter (± 23854) 2291605 ns/iter (± 17905) 0.99
es/parser/jquery 12190068 ns/iter (± 77894) 12275441 ns/iter (± 96801) 0.99
es/parser/jquery mobile 19280598 ns/iter (± 468547) 19295244 ns/iter (± 352291) 1.00
es/parser/mootools 9389903 ns/iter (± 77564) 9395646 ns/iter (± 102622) 1.00
es/parser/underscore 1955426 ns/iter (± 17737) 1925888 ns/iter (± 18660) 1.02
es/parser/three 55710768 ns/iter (± 915729) 53975889 ns/iter (± 1069979) 1.03
es/parser/yui 9532920 ns/iter (± 93030) 9323782 ns/iter (± 82583) 1.02
es/preset-env/usage/builtin_type 139734 ns/iter (± 31553) 135717 ns/iter (± 30196) 1.03
es/preset-env/usage/property 20677 ns/iter (± 122) 20811 ns/iter (± 66) 0.99
es/resolver/typescript 119430212 ns/iter (± 2054132) 117774211 ns/iter (± 5019077) 1.01
es/fixer/typescript 95432649 ns/iter (± 957736) 92058418 ns/iter (± 1695308) 1.04
es/hygiene/typescript 200089059 ns/iter (± 1131692) 194332573 ns/iter (± 1683096) 1.03
es/resolver_with_hygiene/typescript 333896643 ns/iter (± 1607281) 330876120 ns/iter (± 3049389) 1.01
es/visitor/base-perf/module_clone 74385 ns/iter (± 952) 74071 ns/iter (± 1134) 1.00
es/visitor/base-perf/fold_empty 84538 ns/iter (± 1854) 84270 ns/iter (± 1460) 1.00
es/visitor/base-perf/fold_noop_impl_all 85409 ns/iter (± 1861) 83922 ns/iter (± 1546) 1.02
es/visitor/base-perf/fold_noop_impl_vec 84221 ns/iter (± 1581) 83700 ns/iter (± 2098) 1.01
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 54 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 58 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 104 ns/iter (± 0) 100 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed 101 ns/iter (± 0) 105 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_contains_this 3348 ns/iter (± 41) 3383 ns/iter (± 67) 0.99
es/base/parallel/resolver/typescript 5384560790 ns/iter (± 520230875) 5406524445 ns/iter (± 560006636) 1.00
es/base/parallel/hygiene/typescript 2366456310 ns/iter (± 23699533) 2360685598 ns/iter (± 34141874) 1.00
misc/visitors/time-complexity/time 5 91 ns/iter (± 1) 92 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 10 295 ns/iter (± 3) 321 ns/iter (± 1) 0.92
misc/visitors/time-complexity/time 15 587 ns/iter (± 4) 634 ns/iter (± 7) 0.93
misc/visitors/time-complexity/time 20 1122 ns/iter (± 8) 1172 ns/iter (± 9) 0.96
misc/visitors/time-complexity/time 40 5984 ns/iter (± 39) 5968 ns/iter (± 28) 1.00
misc/visitors/time-complexity/time 60 15178 ns/iter (± 39) 15007 ns/iter (± 149) 1.01
es/full-target/es2016 188392 ns/iter (± 690) 184485 ns/iter (± 1841) 1.02
es/full-target/es2017 182022 ns/iter (± 919) 177072 ns/iter (± 1241) 1.03
es/full-target/es2018 168494 ns/iter (± 1217) 166296 ns/iter (± 1668) 1.01
es2020_nullish_coalescing 66659 ns/iter (± 609) 64308 ns/iter (± 527) 1.04
es2020_optional_chaining 95227 ns/iter (± 7257) 89894 ns/iter (± 5495) 1.06
es2022_class_properties 91814 ns/iter (± 646) 89340 ns/iter (± 1004) 1.03
es2018_object_rest_spread 71576 ns/iter (± 242) 68527 ns/iter (± 761) 1.04
es2019_optional_catch_binding 61042 ns/iter (± 489) 58756 ns/iter (± 511) 1.04
es2017_async_to_generator 61251 ns/iter (± 389) 58785 ns/iter (± 561) 1.04
es2016_exponentiation 63998 ns/iter (± 515) 61700 ns/iter (± 626) 1.04
es2015_arrow 69594 ns/iter (± 778) 66332 ns/iter (± 621) 1.05
es2015_block_scoped_fn 65914 ns/iter (± 812) 62754 ns/iter (± 443) 1.05
es2015_block_scoping 153339 ns/iter (± 10128) 147879 ns/iter (± 7729) 1.04
es2015_classes 116257 ns/iter (± 684) 109569 ns/iter (± 500) 1.06
es2015_computed_props 61151 ns/iter (± 279) 57519 ns/iter (± 343) 1.06
es2015_destructuring 114136 ns/iter (± 654) 109831 ns/iter (± 790) 1.04
es2015_duplicate_keys 62473 ns/iter (± 516) 61002 ns/iter (± 284) 1.02
es2015_parameters 78146 ns/iter (± 938) 75263 ns/iter (± 726) 1.04
es2015_fn_name 64635 ns/iter (± 534) 62546 ns/iter (± 572) 1.03
es2015_for_of 64177 ns/iter (± 582) 61049 ns/iter (± 381) 1.05
es2015_instanceof 61861 ns/iter (± 338) 59381 ns/iter (± 417) 1.04
es2015_shorthand_property 60092 ns/iter (± 264) 57976 ns/iter (± 623) 1.04
es2015_spread 59712 ns/iter (± 470) 57816 ns/iter (± 492) 1.03
es2015_sticky_regex 60959 ns/iter (± 280) 59073 ns/iter (± 458) 1.03
es2015_typeof_symbol 61066 ns/iter (± 470) 59242 ns/iter (± 441) 1.03
es/transform/baseline/base 50901 ns/iter (± 225) 48821 ns/iter (± 538) 1.04
es/transform/baseline/common_reserved_word 61234 ns/iter (± 430) 59676 ns/iter (± 560) 1.03
es/transform/baseline/common_typescript 164180 ns/iter (± 711) 160842 ns/iter (± 2582) 1.02
es/target/es3 168102 ns/iter (± 10503) 161548 ns/iter (± 2293) 1.04
es/target/es2015 618732 ns/iter (± 3861) 585859 ns/iter (± 4126) 1.06
es/target/es2016 63260 ns/iter (± 520) 61332 ns/iter (± 421) 1.03
es/target/es2017 60835 ns/iter (± 354) 58470 ns/iter (± 287) 1.04
es/target/es2018 80114 ns/iter (± 400) 76975 ns/iter (± 886) 1.04
es/target/es2020 131919 ns/iter (± 398) 126558 ns/iter (± 1386) 1.04
babelify-only 676136 ns/iter (± 6876) 663588 ns/iter (± 5206) 1.02
parse_and_babelify_angular 42045805 ns/iter (± 1694457) 42063209 ns/iter (± 791738) 1.00
parse_and_babelify_backbone 5287936 ns/iter (± 31227) 5351799 ns/iter (± 76313) 0.99
parse_and_babelify_jquery 31309612 ns/iter (± 346499) 31132142 ns/iter (± 535090) 1.01
parse_and_babelify_jquery_mobile 53527417 ns/iter (± 640389) 54327548 ns/iter (± 556619) 0.99
parse_and_babelify_mootools 32195103 ns/iter (± 495820) 31527032 ns/iter (± 617618) 1.02
parse_and_babelify_underscore 4307853 ns/iter (± 25232) 4318676 ns/iter (± 34487) 1.00
parse_and_babelify_yui 30735738 ns/iter (± 625993) 31531769 ns/iter (± 689618) 0.97
html/minify/document/css_spec 41210578 ns/iter (± 328703) 40741489 ns/iter (± 658754) 1.01
html/minify/document/github 16919875 ns/iter (± 73151) 17091511 ns/iter (± 202532) 0.99
html/minify/document/stackoverflow 15338756 ns/iter (± 93626) 15457041 ns/iter (± 147473) 0.99
html/minify/document_fragment/css_spec 38380861 ns/iter (± 353558) 38498294 ns/iter (± 690680) 1.00
html/minify/document_fragment/github 16099589 ns/iter (± 78189) 16650108 ns/iter (± 182068) 0.97
html/minify/document_fragment/stackoverflow 14892731 ns/iter (± 238605) 14857611 ns/iter (± 106769) 1.00
html/document/visitor/compare/clone 334188 ns/iter (± 2610) 332987 ns/iter (± 3114) 1.00
html/document/visitor/compare/visit_mut_span 360074 ns/iter (± 3354) 356775 ns/iter (± 2421) 1.01
html/document/visitor/compare/visit_mut_span_panic 373121 ns/iter (± 4044) 366668 ns/iter (± 4324) 1.02
html/document/visitor/compare/fold_span 396613 ns/iter (± 1342) 399964 ns/iter (± 1975) 0.99
html/document/visitor/compare/fold_span_panic 455125 ns/iter (± 3083) 453245 ns/iter (± 4015) 1.00
html/document_fragment/visitor/compare/clone 338402 ns/iter (± 2688) 328521 ns/iter (± 1976) 1.03
html/document_fragment/visitor/compare/visit_mut_span 358814 ns/iter (± 3328) 358779 ns/iter (± 3551) 1.00
html/document_fragment/visitor/compare/visit_mut_span_panic 370958 ns/iter (± 3371) 370368 ns/iter (± 2887) 1.00
html/document_fragment/visitor/compare/fold_span 393709 ns/iter (± 2026) 397209 ns/iter (± 2629) 0.99
html/document_fragment/visitor/compare/fold_span_panic 454311 ns/iter (± 4647) 446238 ns/iter (± 2698) 1.02
html/lexer/css_2021_spec 15124529 ns/iter (± 164619) 15054928 ns/iter (± 159294) 1.00
html/lexer/github_com_17_05_2022 5813876 ns/iter (± 46609) 5816731 ns/iter (± 55594) 1.00
html/lexer/stackoverflow_com_17_05_2022 5466689 ns/iter (± 23439) 5495560 ns/iter (± 58475) 0.99
html/parser/parser_document/css_2021_spec 24928413 ns/iter (± 218619) 24534355 ns/iter (± 293574) 1.02
html/parser/parser_document/github_com_17_05_2022 8533369 ns/iter (± 62229) 8440852 ns/iter (± 87715) 1.01
html/parser/parser_document/stackoverflow_com_17_05_2022 7488086 ns/iter (± 37591) 7430882 ns/iter (± 41832) 1.01
html/parser/parser_document_fragment/css_2021_spec 24845912 ns/iter (± 252019) 24557725 ns/iter (± 184392) 1.01
html/parser/parser_document_fragment/github_com_17_05_2022 8684101 ns/iter (± 50553) 8562729 ns/iter (± 91805) 1.01
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7501042 ns/iter (± 37896) 7460037 ns/iter (± 58555) 1.01

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

Please sign in to comment.