Skip to content

Commit

Permalink
fix(es/typescript): Handle DeclareCollect correctly (#8008)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #8007
  • Loading branch information
magic-akari committed Sep 26, 2023
1 parent 78e1259 commit 9d08b8a
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 1 deletion.
23 changes: 22 additions & 1 deletion crates/swc_ecma_transforms_typescript/src/strip_import_export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,21 @@ struct DeclareCollect {
id_value: AHashSet<Id>,
}

// Only scan the top level of the module
/// Only scan the top level of the module.
/// Any inner declaration is ignored.
impl Visit for DeclareCollect {
fn visit_binding_ident(&mut self, n: &BindingIdent) {
self.id_value.insert(n.to_id());
}

fn visit_assign_pat_prop(&mut self, n: &AssignPatProp) {
self.id_value.insert(n.key.to_id());
}

fn visit_var_declarator(&mut self, n: &VarDeclarator) {
n.name.visit_with(self);
}

fn visit_fn_decl(&mut self, n: &FnDecl) {
self.id_value.insert(n.ident.to_id());
}
Expand All @@ -134,6 +143,10 @@ impl Visit for DeclareCollect {
self.id_value.insert(n.ident.to_id());
}

fn visit_ts_enum_decl(&mut self, n: &TsEnumDecl) {
self.id_value.insert(n.id.to_id());
}

fn visit_export_default_decl(&mut self, n: &ExportDefaultDecl) {
match &n.decl {
DefaultDecl::Class(ClassExpr {
Expand Down Expand Up @@ -202,6 +215,14 @@ impl Visit for DeclareCollect {
});
}

fn visit_stmt(&mut self, n: &Stmt) {
if !n.is_decl() {
return;
}

n.visit_children_with(self);
}

fn visit_stmts(&mut self, _: &[Stmt]) {
// skip
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { useMemo } from "react";
import { type SerializedStyles, type Theme, css } from "@emotion/react";
import { type Breakpoint, theme } from "antd";

import { useMediaQuery } from "./hooks";

export { type Breakpoint } from "antd";

export const getMQ = (token: Theme["token"]) => ({
xsMin: `@media (min-width: ${token.screenXSMin}px)`,
xsMax: `@media (max-width: ${token.screenXSMax}px)`,
smMin: `@media (min-width: ${token.screenSMMin}px)`,
smMax: `@media (max-width: ${token.screenSMMax}px)`,
mdMin: `@media (min-width: ${token.screenMDMin}px)`,
mdMax: `@media (max-width: ${token.screenMDMax}px)`,
lgMin: `@media (min-width: ${token.screenLGMin}px)`,
lgMax: `@media (max-width: ${token.screenLGMax}px)`,
xlMin: `@media (min-width: ${token.screenXLMin}px)`,
xlMax: `@media (max-width: ${token.screenXLMax}px)`,
xxlMin: `@media (min-width: ${token.screenXXLMin}px)`,
});

export const useBreakpoint = (breakpoint: Breakpoint) => {
const { token } = theme.useToken();

const query = useMemo(() => {
const key =
breakpoint === "xs"
? "xsMax"
: (`${breakpoint}Min` satisfies `${Breakpoint}Min`);

return getMQ(token)[key].replace("@media ", "");
}, [breakpoint, token]);

return useMediaQuery(query);
};

export const createStyles = <
T extends Record<
string,
SerializedStyles | ((theme: Theme) => SerializedStyles)
>
>(
arg: T
) => arg;

/**
* Reusable styles
*/

export const centeredCss = css({
display: "grid",
placeContent: "center",
height: "100%",
});

export const fullVPHeightCss = css({
height: "100vh",
});

export const noMargin = css({
margin: "0 !important",
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { useMemo } from "react";
import { css } from "@emotion/react";
import { theme } from "antd";
import { useMediaQuery } from "./hooks";
export const getMQ = (token)=>({
xsMin: `@media (min-width: ${token.screenXSMin}px)`,
xsMax: `@media (max-width: ${token.screenXSMax}px)`,
smMin: `@media (min-width: ${token.screenSMMin}px)`,
smMax: `@media (max-width: ${token.screenSMMax}px)`,
mdMin: `@media (min-width: ${token.screenMDMin}px)`,
mdMax: `@media (max-width: ${token.screenMDMax}px)`,
lgMin: `@media (min-width: ${token.screenLGMin}px)`,
lgMax: `@media (max-width: ${token.screenLGMax}px)`,
xlMin: `@media (min-width: ${token.screenXLMin}px)`,
xlMax: `@media (max-width: ${token.screenXLMax}px)`,
xxlMin: `@media (min-width: ${token.screenXXLMin}px)`
});
export const useBreakpoint = (breakpoint)=>{
const { token } = theme.useToken();
const query = useMemo(()=>{
const key = breakpoint === "xs" ? "xsMax" : `${breakpoint}Min`;
return getMQ(token)[key].replace("@media ", "");
}, [
breakpoint,
token
]);
return useMediaQuery(query);
};
export const createStyles = (arg)=>arg;
/**
* Reusable styles
*/ export const centeredCss = css({
display: "grid",
placeContent: "center",
height: "100%"
});
export const fullVPHeightCss = css({
height: "100vh"
});
export const noMargin = css({
margin: "0 !important"
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { A } from 'mod';

const foo = <
T extends ((A: any) => void),
>(
arg: T,
) => arg;

console.log(A);
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { A } from 'mod';
const foo = (arg)=>arg;
console.log(A);

1 comment on commit 9d08b8a

@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: 9d08b8a Previous: f07bb48 Ratio
es/full/bugs-1 282449 ns/iter (± 7509) 292516 ns/iter (± 8947) 0.97
es/full/minify/libraries/antd 1338949179 ns/iter (± 11337959) 1318265702 ns/iter (± 14442138) 1.02
es/full/minify/libraries/d3 274325218 ns/iter (± 1449043) 277606393 ns/iter (± 4855569) 0.99
es/full/minify/libraries/echarts 1067093159 ns/iter (± 5771137) 1061077829 ns/iter (± 5313346) 1.01
es/full/minify/libraries/jquery 84570412 ns/iter (± 321458) 84059914 ns/iter (± 269367) 1.01
es/full/minify/libraries/lodash 97523506 ns/iter (± 459472) 97395858 ns/iter (± 395724) 1.00
es/full/minify/libraries/moment 49801994 ns/iter (± 128396) 49899127 ns/iter (± 135451) 1.00
es/full/minify/libraries/react 18004233 ns/iter (± 19739) 17960080 ns/iter (± 70795) 1.00
es/full/minify/libraries/terser 218761213 ns/iter (± 1632454) 218424976 ns/iter (± 1026938) 1.00
es/full/minify/libraries/three 386911532 ns/iter (± 1791843) 387127503 ns/iter (± 2620053) 1.00
es/full/minify/libraries/typescript 2680623810 ns/iter (± 13570212) 2655224390 ns/iter (± 8144988) 1.01
es/full/minify/libraries/victory 578395358 ns/iter (± 3717483) 570967433 ns/iter (± 3738279) 1.01
es/full/minify/libraries/vue 119620834 ns/iter (± 378850) 119676440 ns/iter (± 396872) 1.00
es/full/codegen/es3 34170 ns/iter (± 59) 33260 ns/iter (± 78) 1.03
es/full/codegen/es5 34114 ns/iter (± 84) 33288 ns/iter (± 72) 1.02
es/full/codegen/es2015 34166 ns/iter (± 61) 33195 ns/iter (± 94) 1.03
es/full/codegen/es2016 34187 ns/iter (± 94) 33244 ns/iter (± 79) 1.03
es/full/codegen/es2017 34108 ns/iter (± 83) 33237 ns/iter (± 66) 1.03
es/full/codegen/es2018 34107 ns/iter (± 91) 33238 ns/iter (± 58) 1.03
es/full/codegen/es2019 34169 ns/iter (± 77) 33274 ns/iter (± 102) 1.03
es/full/codegen/es2020 34139 ns/iter (± 66) 33260 ns/iter (± 58) 1.03
es/full/all/es3 165401072 ns/iter (± 805762) 163263887 ns/iter (± 1234734) 1.01
es/full/all/es5 156727272 ns/iter (± 1625244) 155869875 ns/iter (± 785701) 1.01
es/full/all/es2015 117187163 ns/iter (± 498504) 116157212 ns/iter (± 840627) 1.01
es/full/all/es2016 115777913 ns/iter (± 962597) 115178018 ns/iter (± 547436) 1.01
es/full/all/es2017 115561284 ns/iter (± 820293) 114443316 ns/iter (± 1049411) 1.01
es/full/all/es2018 112947588 ns/iter (± 684187) 111936151 ns/iter (± 516555) 1.01
es/full/all/es2019 112418713 ns/iter (± 409494) 111330746 ns/iter (± 507583) 1.01
es/full/all/es2020 108720212 ns/iter (± 486187) 107229039 ns/iter (± 650779) 1.01
es/full/parser 486609 ns/iter (± 4788) 487947 ns/iter (± 5621) 1.00
es/full/base/fixer 18262 ns/iter (± 261) 17960 ns/iter (± 151) 1.02
es/full/base/resolver_and_hygiene 80597 ns/iter (± 192) 80166 ns/iter (± 93) 1.01
serialization of serde 295 ns/iter (± 0) 298 ns/iter (± 1) 0.99
css/minify/libraries/bootstrap 28354421 ns/iter (± 50094) 30096864 ns/iter (± 113336) 0.94
css/visitor/compare/clone 1687526 ns/iter (± 6366) 1679478 ns/iter (± 9700) 1.00
css/visitor/compare/visit_mut_span 1820409 ns/iter (± 7569) 1786433 ns/iter (± 7688) 1.02
css/visitor/compare/visit_mut_span_panic 1852989 ns/iter (± 3880) 1890277 ns/iter (± 9097) 0.98
css/visitor/compare/fold_span 2590169 ns/iter (± 12813) 2579837 ns/iter (± 9813) 1.00
css/visitor/compare/fold_span_panic 2768502 ns/iter (± 9198) 2772726 ns/iter (± 12140) 1.00
css/lexer/bootstrap_5_1_3 4439251 ns/iter (± 2101) 4407631 ns/iter (± 2979) 1.01
css/lexer/foundation_6_7_4 3737910 ns/iter (± 1876) 3723074 ns/iter (± 1914) 1.00
css/lexer/tailwind_3_1_1 712373 ns/iter (± 240) 707373 ns/iter (± 430) 1.01
css/parser/bootstrap_5_1_3 19399738 ns/iter (± 47235) 19519084 ns/iter (± 45458) 0.99
css/parser/foundation_6_7_4 15457488 ns/iter (± 31873) 15534832 ns/iter (± 51951) 1.00
css/parser/tailwind_3_1_1 2962325 ns/iter (± 3102) 3018001 ns/iter (± 2460) 0.98
es/codegen/colors 737893 ns/iter (± 404449) 737456 ns/iter (± 402542) 1.00
es/codegen/large 3162508 ns/iter (± 1683085) 3183347 ns/iter (± 1702964) 0.99
es/codegen/with-parser/colors 45819 ns/iter (± 431) 44740 ns/iter (± 200) 1.02
es/codegen/with-parser/large 498623 ns/iter (± 676) 484526 ns/iter (± 750) 1.03
es/minify/libraries/antd 1164663731 ns/iter (± 15049044) 1143525841 ns/iter (± 10724832) 1.02
es/minify/libraries/d3 241214164 ns/iter (± 1400502) 239388362 ns/iter (± 733882) 1.01
es/minify/libraries/echarts 913849594 ns/iter (± 6630630) 903847670 ns/iter (± 9298348) 1.01
es/minify/libraries/jquery 73566178 ns/iter (± 275219) 73016786 ns/iter (± 139473) 1.01
es/minify/libraries/lodash 87027397 ns/iter (± 257211) 86744032 ns/iter (± 334705) 1.00
es/minify/libraries/moment 43596954 ns/iter (± 183201) 43481592 ns/iter (± 37089) 1.00
es/minify/libraries/react 16091286 ns/iter (± 33296) 16002536 ns/iter (± 55721) 1.01
es/minify/libraries/terser 186656268 ns/iter (± 3704782) 185892412 ns/iter (± 909617) 1.00
es/minify/libraries/three 324846004 ns/iter (± 1266950) 320452353 ns/iter (± 1641837) 1.01
es/minify/libraries/typescript 2255133371 ns/iter (± 9122288) 2249705147 ns/iter (± 8732012) 1.00
es/minify/libraries/victory 486064502 ns/iter (± 3401312) 473957821 ns/iter (± 3109563) 1.03
es/minify/libraries/vue 106218837 ns/iter (± 372250) 105569066 ns/iter (± 538857) 1.01
es/visitor/compare/clone 1951175 ns/iter (± 3341) 1940180 ns/iter (± 5581) 1.01
es/visitor/compare/visit_mut_span 2276275 ns/iter (± 3634) 2281329 ns/iter (± 2235) 1.00
es/visitor/compare/visit_mut_span_panic 2322532 ns/iter (± 4473) 2318659 ns/iter (± 3842) 1.00
es/visitor/compare/fold_span 3362902 ns/iter (± 3599) 3369344 ns/iter (± 7006) 1.00
es/visitor/compare/fold_span_panic 3507062 ns/iter (± 10963) 3513094 ns/iter (± 8841) 1.00
es/lexer/colors 13279 ns/iter (± 22) 13146 ns/iter (± 40) 1.01
es/lexer/angular 6164048 ns/iter (± 31176) 6023162 ns/iter (± 21460) 1.02
es/lexer/backbone 791150 ns/iter (± 3777) 777852 ns/iter (± 2227) 1.02
es/lexer/jquery 4537775 ns/iter (± 12227) 4429536 ns/iter (± 6707) 1.02
es/lexer/jquery mobile 6883083 ns/iter (± 2578) 6771955 ns/iter (± 23862) 1.02
es/lexer/mootools 3567489 ns/iter (± 1864) 3512909 ns/iter (± 3145) 1.02
es/lexer/underscore 661461 ns/iter (± 1150) 656614 ns/iter (± 697) 1.01
es/lexer/three 21528075 ns/iter (± 21773) 21232527 ns/iter (± 25959) 1.01
es/lexer/yui 3783982 ns/iter (± 3906) 3774634 ns/iter (± 2919) 1.00
es/parser/colors 27006 ns/iter (± 59) 27080 ns/iter (± 76) 1.00
es/parser/angular 13502372 ns/iter (± 51171) 13438968 ns/iter (± 53327) 1.00
es/parser/backbone 1975900 ns/iter (± 8863) 1972304 ns/iter (± 9622) 1.00
es/parser/jquery 10779860 ns/iter (± 41123) 10785445 ns/iter (± 50031) 1.00
es/parser/jquery mobile 16573142 ns/iter (± 57025) 16472557 ns/iter (± 66282) 1.01
es/parser/mootools 8304665 ns/iter (± 10927) 8280729 ns/iter (± 12496) 1.00
es/parser/underscore 1700918 ns/iter (± 7716) 1701016 ns/iter (± 10011) 1.00
es/parser/three 47246676 ns/iter (± 366210) 46803634 ns/iter (± 186067) 1.01
es/parser/yui 8247681 ns/iter (± 49236) 8220009 ns/iter (± 33711) 1.00
es/preset-env/usage/builtin_type 139155 ns/iter (± 32842) 137285 ns/iter (± 32728) 1.01
es/preset-env/usage/property 16968 ns/iter (± 53) 17011 ns/iter (± 187) 1.00
es/resolver/typescript 91396691 ns/iter (± 887608) 90583553 ns/iter (± 1150988) 1.01
es/fixer/typescript 63686358 ns/iter (± 365604) 63429788 ns/iter (± 1466184) 1.00
es/hygiene/typescript 131257016 ns/iter (± 695194) 129046787 ns/iter (± 277540) 1.02
es/resolver_with_hygiene/typescript 244732517 ns/iter (± 1822223) 242665614 ns/iter (± 913117) 1.01
es/visitor/base-perf/module_clone 59092 ns/iter (± 357) 59090 ns/iter (± 832) 1.00
es/visitor/base-perf/fold_empty 62667 ns/iter (± 240) 63652 ns/iter (± 184) 0.98
es/visitor/base-perf/fold_noop_impl_all 62809 ns/iter (± 131) 63689 ns/iter (± 315) 0.99
es/visitor/base-perf/fold_noop_impl_vec 63289 ns/iter (± 346) 63976 ns/iter (± 428) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 39 ns/iter (± 0) 40 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_boxed 109 ns/iter (± 0) 109 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 77 ns/iter (± 0) 78 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2535 ns/iter (± 16) 2515 ns/iter (± 5) 1.01
es/base/parallel/resolver/typescript 4714031925 ns/iter (± 291885416) 4459789901 ns/iter (± 293980576) 1.06
es/base/parallel/hygiene/typescript 1454922214 ns/iter (± 16601214) 1455628912 ns/iter (± 14833791) 1.00
misc/visitors/time-complexity/time 5 137 ns/iter (± 0) 121 ns/iter (± 7) 1.13
misc/visitors/time-complexity/time 10 305 ns/iter (± 33) 387 ns/iter (± 1) 0.79
misc/visitors/time-complexity/time 15 600 ns/iter (± 1) 735 ns/iter (± 3) 0.82
misc/visitors/time-complexity/time 20 1169 ns/iter (± 3) 996 ns/iter (± 67) 1.17
misc/visitors/time-complexity/time 40 3561 ns/iter (± 30) 3596 ns/iter (± 39) 0.99
misc/visitors/time-complexity/time 60 8833 ns/iter (± 4) 7226 ns/iter (± 8) 1.22

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

Please sign in to comment.