Skip to content

Commit 508267d

Browse files
authoredJan 29, 2023
fix(visit): Fix detection of Option<Vec<T>> (#6872)
1 parent b8fcf3b commit 508267d

File tree

1 file changed

+8
-4
lines changed
  • crates/swc_visit_macros/src

1 file changed

+8
-4
lines changed
 

‎crates/swc_visit_macros/src/lib.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ pub fn define(tts: proc_macro::TokenStream) -> proc_macro::TokenStream {
169169
}
170170

171171
fn make_field_enum_variant_from_named_field(type_name: &Ident, f: &Field) -> Variant {
172-
let fields = if let Some(..) = extract_generic("Vec", &f.ty) {
172+
let fields = if is_vec_or_opt_vec(&f.ty) {
173173
let mut v = Punctuated::new();
174174

175175
v.push(Field {
@@ -357,7 +357,7 @@ fn make_field_enum(item: &Item) -> Vec<Item> {
357357
f.ident.span(),
358358
);
359359

360-
if let Some(..) = extract_generic("Vec", &f.ty) {
360+
if is_vec_or_opt_vec(&f.ty) {
361361
arms.push(Arm {
362362
attrs: Default::default(),
363363
pat: Pat::TupleStruct(PatTupleStruct {
@@ -2186,7 +2186,7 @@ fn visit_expr(
21862186

21872187
let ast_path_expr: Expr = match mode {
21882188
Mode::Visit(..) => {
2189-
if let Some(..) = extract_generic("Vec", ty) {
2189+
if is_vec_or_opt_vec(ty) {
21902190
q!(
21912191
Vars {
21922192
VariantName: type_name,
@@ -2215,7 +2215,7 @@ fn visit_expr(
22152215
}
22162216
}
22172217
_ => {
2218-
if let Some(..) = extract_generic("Vec", ty) {
2218+
if is_vec_or_opt_vec(ty) {
22192219
q!(
22202220
Vars {
22212221
VariantName: type_name,
@@ -3211,6 +3211,10 @@ fn is_opt_vec(ty: &Type) -> bool {
32113211
}
32123212
}
32133213

3214+
fn is_vec_or_opt_vec(ty: &Type) -> bool {
3215+
is_opt_vec(ty) || extract_generic("Vec", ty).is_some()
3216+
}
3217+
32143218
fn method_name_as_str(mode: Mode, ty: &Type) -> String {
32153219
fn suffix(ty: &Type) -> String {
32163220
// Box<T> has same name as T

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jan 29, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 508267d Previous: c4db8e4 Ratio
es/full/bugs-1 305099 ns/iter (± 12596) 301820 ns/iter (± 15748) 1.01
es/full/minify/libraries/antd 1599871033 ns/iter (± 25373523) 1611872239 ns/iter (± 41318970) 0.99
es/full/minify/libraries/d3 300668855 ns/iter (± 6760814) 306449043 ns/iter (± 6417618) 0.98
es/full/minify/libraries/echarts 1238664859 ns/iter (± 11132063) 1269031000 ns/iter (± 15156228) 0.98
es/full/minify/libraries/jquery 90083138 ns/iter (± 772059) 91739512 ns/iter (± 1435857) 0.98
es/full/minify/libraries/lodash 105931238 ns/iter (± 985438) 108169293 ns/iter (± 994631) 0.98
es/full/minify/libraries/moment 52449792 ns/iter (± 287585) 53547460 ns/iter (± 570355) 0.98
es/full/minify/libraries/react 19029374 ns/iter (± 110119) 19336719 ns/iter (± 264144) 0.98
es/full/minify/libraries/terser 249670995 ns/iter (± 2756483) 249905264 ns/iter (± 4592383) 1.00
es/full/minify/libraries/three 441573823 ns/iter (± 5650630) 440422572 ns/iter (± 4164483) 1.00
es/full/minify/libraries/typescript 3000968894 ns/iter (± 37457127) 3075861195 ns/iter (± 22339092) 0.98
es/full/minify/libraries/victory 646076665 ns/iter (± 10078212) 666549206 ns/iter (± 11717490) 0.97
es/full/minify/libraries/vue 129205448 ns/iter (± 998032) 132373155 ns/iter (± 2511831) 0.98
es/full/codegen/es3 25802 ns/iter (± 116) 25992 ns/iter (± 59) 0.99
es/full/codegen/es5 25885 ns/iter (± 77) 26051 ns/iter (± 50) 0.99
es/full/codegen/es2015 25788 ns/iter (± 180) 25998 ns/iter (± 33) 0.99
es/full/codegen/es2016 25666 ns/iter (± 186) 26011 ns/iter (± 61) 0.99
es/full/codegen/es2017 25727 ns/iter (± 157) 25993 ns/iter (± 43) 0.99
es/full/codegen/es2018 25858 ns/iter (± 172) 25994 ns/iter (± 34) 0.99
es/full/codegen/es2019 25822 ns/iter (± 118) 26008 ns/iter (± 46) 0.99
es/full/codegen/es2020 25787 ns/iter (± 97) 26014 ns/iter (± 69) 0.99
es/full/all/es3 174826328 ns/iter (± 3696273) 175832561 ns/iter (± 2197057) 0.99
es/full/all/es5 164145992 ns/iter (± 4284640) 167628109 ns/iter (± 2707148) 0.98
es/full/all/es2015 124506943 ns/iter (± 1845949) 129030006 ns/iter (± 2685271) 0.96
es/full/all/es2016 123046512 ns/iter (± 1576376) 126203142 ns/iter (± 1800250) 0.97
es/full/all/es2017 121847425 ns/iter (± 1112185) 124903185 ns/iter (± 1900687) 0.98
es/full/all/es2018 119750205 ns/iter (± 795460) 123269641 ns/iter (± 2574496) 0.97
es/full/all/es2019 118608227 ns/iter (± 917214) 123524299 ns/iter (± 2529363) 0.96
es/full/all/es2020 114604142 ns/iter (± 768514) 116663164 ns/iter (± 1078424) 0.98
es/full/parser 544556 ns/iter (± 7066) 547757 ns/iter (± 8640) 0.99
es/full/base/fixer 21810 ns/iter (± 64) 21729 ns/iter (± 38) 1.00
es/full/base/resolver_and_hygiene 80068 ns/iter (± 176) 80136 ns/iter (± 70) 1.00
serialization of ast node 127 ns/iter (± 0) 126 ns/iter (± 0) 1.01
serialization of serde 129 ns/iter (± 0) 129 ns/iter (± 0) 1
css/minify/libraries/bootstrap 27780644 ns/iter (± 198705) 28049011 ns/iter (± 49142) 0.99
css/visitor/compare/clone 2073633 ns/iter (± 15390) 2059820 ns/iter (± 16576) 1.01
css/visitor/compare/visit_mut_span 2234671 ns/iter (± 9153) 2257473 ns/iter (± 7475) 0.99
css/visitor/compare/visit_mut_span_panic 2302017 ns/iter (± 7706) 2301248 ns/iter (± 8878) 1.00
css/visitor/compare/fold_span 2975609 ns/iter (± 22530) 3019876 ns/iter (± 19435) 0.99
css/visitor/compare/fold_span_panic 3115987 ns/iter (± 21699) 3217520 ns/iter (± 24062) 0.97
css/lexer/bootstrap_5_1_3 5155958 ns/iter (± 29796) 5215111 ns/iter (± 59232) 0.99
css/lexer/foundation_6_7_4 4306240 ns/iter (± 27794) 4393683 ns/iter (± 1101) 0.98
css/lexer/tailwind_3_1_1 819282 ns/iter (± 3986) 834389 ns/iter (± 263) 0.98
css/parser/bootstrap_5_1_3 21467938 ns/iter (± 139289) 21652132 ns/iter (± 33684) 0.99
css/parser/foundation_6_7_4 17179059 ns/iter (± 86939) 17331484 ns/iter (± 51791) 0.99
css/parser/tailwind_3_1_1 3297887 ns/iter (± 18372) 3312993 ns/iter (± 13198) 1.00
es/codegen/colors 324764 ns/iter (± 183514) 329401 ns/iter (± 184400) 0.99
es/codegen/large 1210172 ns/iter (± 627617) 1188917 ns/iter (± 615528) 1.02
es/codegen/with-parser/colors 47814 ns/iter (± 514) 47972 ns/iter (± 342) 1.00
es/codegen/with-parser/large 531783 ns/iter (± 3859) 536005 ns/iter (± 1435) 0.99
es/minify/libraries/antd 1390837566 ns/iter (± 15111080) 1420368446 ns/iter (± 9501654) 0.98
es/minify/libraries/d3 253806006 ns/iter (± 3640726) 258241457 ns/iter (± 4467393) 0.98
es/minify/libraries/echarts 1056700609 ns/iter (± 19310473) 1068298569 ns/iter (± 20074028) 0.99
es/minify/libraries/jquery 77781650 ns/iter (± 361968) 79756626 ns/iter (± 793832) 0.98
es/minify/libraries/lodash 94252677 ns/iter (± 1197117) 97127096 ns/iter (± 2198589) 0.97
es/minify/libraries/moment 45661134 ns/iter (± 189864) 46905379 ns/iter (± 924465) 0.97
es/minify/libraries/react 16911259 ns/iter (± 82622) 17133167 ns/iter (± 198262) 0.99
es/minify/libraries/terser 208278495 ns/iter (± 3559326) 212794290 ns/iter (± 2094322) 0.98
es/minify/libraries/three 360977177 ns/iter (± 9580610) 364540467 ns/iter (± 9972967) 0.99
es/minify/libraries/typescript 2579561998 ns/iter (± 10504253) 2623585197 ns/iter (± 34602244) 0.98
es/minify/libraries/victory 554873112 ns/iter (± 16523041) 557323125 ns/iter (± 13145662) 1.00
es/minify/libraries/vue 114873619 ns/iter (± 970054) 118552349 ns/iter (± 2781540) 0.97
es/visitor/compare/clone 2377833 ns/iter (± 24398) 2422567 ns/iter (± 26540) 0.98
es/visitor/compare/visit_mut_span 2731355 ns/iter (± 20017) 2764764 ns/iter (± 8174) 0.99
es/visitor/compare/visit_mut_span_panic 2840557 ns/iter (± 6220) 2835624 ns/iter (± 7058) 1.00
es/visitor/compare/fold_span 3898116 ns/iter (± 28068) 3939901 ns/iter (± 8303) 0.99
es/visitor/compare/fold_span_panic 4002116 ns/iter (± 22642) 4055809 ns/iter (± 10396) 0.99
es/lexer/colors 17323 ns/iter (± 47) 17412 ns/iter (± 10) 0.99
es/lexer/angular 8230584 ns/iter (± 48561) 8322838 ns/iter (± 7123) 0.99
es/lexer/backbone 1078330 ns/iter (± 5369) 1095310 ns/iter (± 516) 0.98
es/lexer/jquery 5963663 ns/iter (± 33029) 6041600 ns/iter (± 8856) 0.99
es/lexer/jquery mobile 9182732 ns/iter (± 36824) 9311849 ns/iter (± 3542) 0.99
es/lexer/mootools 4668430 ns/iter (± 26189) 4742753 ns/iter (± 8586) 0.98
es/lexer/underscore 901441 ns/iter (± 5410) 911987 ns/iter (± 403) 0.99
es/lexer/three 27995131 ns/iter (± 144456) 28238267 ns/iter (± 14228) 0.99
es/lexer/yui 5031285 ns/iter (± 21231) 5107605 ns/iter (± 2350) 0.99
es/parser/colors 30914 ns/iter (± 139) 31128 ns/iter (± 163) 0.99
es/parser/angular 15684180 ns/iter (± 101638) 15880015 ns/iter (± 138146) 0.99
es/parser/backbone 2332364 ns/iter (± 12742) 2336073 ns/iter (± 13132) 1.00
es/parser/jquery 12351770 ns/iter (± 77024) 12608432 ns/iter (± 102183) 0.98
es/parser/jquery mobile 19802058 ns/iter (± 288945) 20011752 ns/iter (± 173838) 0.99
es/parser/mootools 9443922 ns/iter (± 44933) 9595575 ns/iter (± 16102) 0.98
es/parser/underscore 1952056 ns/iter (± 18566) 1985724 ns/iter (± 9791) 0.98
es/parser/three 56966852 ns/iter (± 734106) 59314753 ns/iter (± 578265) 0.96
es/parser/yui 9605748 ns/iter (± 63090) 9671059 ns/iter (± 42865) 0.99
es/preset-env/usage/builtin_type 139935 ns/iter (± 32220) 140469 ns/iter (± 31625) 1.00
es/preset-env/usage/property 20940 ns/iter (± 53) 20948 ns/iter (± 94) 1.00
es/resolver/typescript 108698695 ns/iter (± 2544325) 109514812 ns/iter (± 1953435) 0.99
es/fixer/typescript 83168144 ns/iter (± 824845) 83564490 ns/iter (± 305166) 1.00
es/hygiene/typescript 175720648 ns/iter (± 2030475) 178249061 ns/iter (± 1439738) 0.99
es/resolver_with_hygiene/typescript 305953400 ns/iter (± 2935472) 310191757 ns/iter (± 3400136) 0.99
es/visitor/base-perf/module_clone 74550 ns/iter (± 1119) 74712 ns/iter (± 1108) 1.00
es/visitor/base-perf/fold_empty 84559 ns/iter (± 1154) 84923 ns/iter (± 1513) 1.00
es/visitor/base-perf/fold_noop_impl_all 85337 ns/iter (± 1594) 86223 ns/iter (± 1984) 0.99
es/visitor/base-perf/fold_noop_impl_vec 83867 ns/iter (± 1637) 85681 ns/iter (± 1728) 0.98
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 56 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 62 ns/iter (± 0) 0.94
es/visitor/base-perf/boxing_boxed 102 ns/iter (± 0) 104 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed 102 ns/iter (± 0) 103 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3487 ns/iter (± 72) 3525 ns/iter (± 67) 0.99
es/base/parallel/resolver/typescript 5236730015 ns/iter (± 411573409) 5358892896 ns/iter (± 364180794) 0.98
es/base/parallel/hygiene/typescript 2119699581 ns/iter (± 31768859) 2135308043 ns/iter (± 20173579) 0.99
misc/visitors/time-complexity/time 5 93 ns/iter (± 0) 93 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 306 ns/iter (± 1) 308 ns/iter (± 0) 0.99
misc/visitors/time-complexity/time 15 641 ns/iter (± 3) 663 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 20 1192 ns/iter (± 7) 1225 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 40 6197 ns/iter (± 25) 6286 ns/iter (± 10) 0.99
misc/visitors/time-complexity/time 60 15375 ns/iter (± 90) 15581 ns/iter (± 1) 0.99
es/full-target/es2016 187326 ns/iter (± 993) 188506 ns/iter (± 318) 0.99
es/full-target/es2017 181202 ns/iter (± 1099) 183337 ns/iter (± 187) 0.99
es/full-target/es2018 170066 ns/iter (± 1263) 172724 ns/iter (± 643) 0.98
es2020_nullish_coalescing 66083 ns/iter (± 684) 67114 ns/iter (± 140) 0.98
es2020_optional_chaining 95177 ns/iter (± 6875) 95792 ns/iter (± 8656) 0.99
es2022_class_properties 93205 ns/iter (± 317) 94138 ns/iter (± 117) 0.99
es2018_object_rest_spread 70474 ns/iter (± 435) 71417 ns/iter (± 88) 0.99
es2019_optional_catch_binding 60498 ns/iter (± 253) 61404 ns/iter (± 120) 0.99
es2017_async_to_generator 61061 ns/iter (± 504) 61680 ns/iter (± 51) 0.99
es2016_exponentiation 64262 ns/iter (± 273) 65277 ns/iter (± 78) 0.98
es2015_arrow 68930 ns/iter (± 375) 70307 ns/iter (± 248) 0.98
es2015_block_scoped_fn 65385 ns/iter (± 488) 66349 ns/iter (± 136) 0.99
es2015_block_scoping 158478 ns/iter (± 11241) 139092 ns/iter (± 5442) 1.14
es2015_classes 115606 ns/iter (± 866) 117446 ns/iter (± 389) 0.98
es2015_computed_props 60752 ns/iter (± 425) 61475 ns/iter (± 69) 0.99
es2015_destructuring 114182 ns/iter (± 585) 115819 ns/iter (± 297) 0.99
es2015_duplicate_keys 63732 ns/iter (± 395) 63977 ns/iter (± 113) 1.00
es2015_parameters 78759 ns/iter (± 582) 80118 ns/iter (± 315) 0.98
es2015_fn_name 66327 ns/iter (± 633) 66706 ns/iter (± 416) 0.99
es2015_for_of 64082 ns/iter (± 259) 64677 ns/iter (± 120) 0.99
es2015_instanceof 62475 ns/iter (± 439) 63159 ns/iter (± 109) 0.99
es2015_shorthand_property 60545 ns/iter (± 308) 61692 ns/iter (± 70) 0.98
es2015_spread 60657 ns/iter (± 316) 61447 ns/iter (± 72) 0.99
es2015_sticky_regex 61737 ns/iter (± 256) 62639 ns/iter (± 142) 0.99
es2015_typeof_symbol 61669 ns/iter (± 398) 62867 ns/iter (± 140) 0.98
es/transform/baseline/base 50555 ns/iter (± 468) 52271 ns/iter (± 88) 0.97
es/transform/baseline/common_reserved_word 60922 ns/iter (± 291) 63131 ns/iter (± 87) 0.97
es/transform/baseline/common_typescript 164229 ns/iter (± 990) 168980 ns/iter (± 330) 0.97
es/target/es3 164050 ns/iter (± 800) 170722 ns/iter (± 384) 0.96
es/target/es2015 595613 ns/iter (± 2498) 627658 ns/iter (± 1286) 0.95
es/target/es2016 62863 ns/iter (± 244) 65400 ns/iter (± 106) 0.96
es/target/es2017 59630 ns/iter (± 319) 61796 ns/iter (± 69) 0.96
es/target/es2018 78681 ns/iter (± 282) 81781 ns/iter (± 85) 0.96
es/target/es2020 127933 ns/iter (± 867) 133005 ns/iter (± 183) 0.96
babelify-only 671969 ns/iter (± 1304) 672804 ns/iter (± 1200) 1.00
parse_and_babelify_angular 42659002 ns/iter (± 1291699) 42636690 ns/iter (± 626830) 1.00
parse_and_babelify_backbone 5423554 ns/iter (± 26893) 5494447 ns/iter (± 55011) 0.99
parse_and_babelify_jquery 31345412 ns/iter (± 597108) 31472504 ns/iter (± 529645) 1.00
parse_and_babelify_jquery_mobile 53049116 ns/iter (± 671693) 53970528 ns/iter (± 773893) 0.98
parse_and_babelify_mootools 31706616 ns/iter (± 409614) 32684172 ns/iter (± 403975) 0.97
parse_and_babelify_underscore 4375478 ns/iter (± 14173) 4422403 ns/iter (± 39903) 0.99
parse_and_babelify_yui 31556980 ns/iter (± 300528) 32240530 ns/iter (± 472995) 0.98
html/minify/document/css_spec 41147479 ns/iter (± 470279) 41760680 ns/iter (± 204782) 0.99
html/minify/document/github 17543030 ns/iter (± 105685) 17521734 ns/iter (± 13975) 1.00
html/minify/document/stackoverflow 15581786 ns/iter (± 72901) 15724259 ns/iter (± 22886) 0.99
html/minify/document_fragment/css_spec 39671137 ns/iter (± 142848) 39871656 ns/iter (± 167934) 0.99
html/minify/document_fragment/github 16649055 ns/iter (± 111065) 16886068 ns/iter (± 42458) 0.99
html/minify/document_fragment/stackoverflow 15140566 ns/iter (± 93920) 15253013 ns/iter (± 20459) 0.99
html/document/visitor/compare/clone 340107 ns/iter (± 3345) 342655 ns/iter (± 2339) 0.99
html/document/visitor/compare/visit_mut_span 369099 ns/iter (± 2550) 370011 ns/iter (± 1737) 1.00
html/document/visitor/compare/visit_mut_span_panic 377626 ns/iter (± 2162) 384194 ns/iter (± 2100) 0.98
html/document/visitor/compare/fold_span 405072 ns/iter (± 2265) 407466 ns/iter (± 2198) 0.99
html/document/visitor/compare/fold_span_panic 459717 ns/iter (± 2508) 459815 ns/iter (± 1728) 1.00
html/document_fragment/visitor/compare/clone 337238 ns/iter (± 2455) 345976 ns/iter (± 1923) 0.97
html/document_fragment/visitor/compare/visit_mut_span 365909 ns/iter (± 2624) 372183 ns/iter (± 2236) 0.98
html/document_fragment/visitor/compare/visit_mut_span_panic 371481 ns/iter (± 2167) 371714 ns/iter (± 1501) 1.00
html/document_fragment/visitor/compare/fold_span 403201 ns/iter (± 3025) 405285 ns/iter (± 2028) 0.99
html/document_fragment/visitor/compare/fold_span_panic 459564 ns/iter (± 1844) 460107 ns/iter (± 2647) 1.00
html/lexer/css_2021_spec 15310701 ns/iter (± 89286) 15488857 ns/iter (± 14654) 0.99
html/lexer/github_com_17_05_2022 6026520 ns/iter (± 48747) 6022693 ns/iter (± 4850) 1.00
html/lexer/stackoverflow_com_17_05_2022 5566640 ns/iter (± 30541) 5621161 ns/iter (± 4711) 0.99
html/parser/parser_document/css_2021_spec 25224471 ns/iter (± 236944) 25280596 ns/iter (± 134199) 1.00
html/parser/parser_document/github_com_17_05_2022 8626700 ns/iter (± 25057) 8739137 ns/iter (± 10386) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7589491 ns/iter (± 38983) 7707045 ns/iter (± 3078) 0.98
html/parser/parser_document_fragment/css_2021_spec 25143910 ns/iter (± 226519) 25526475 ns/iter (± 411692) 0.99
html/parser/parser_document_fragment/github_com_17_05_2022 8649137 ns/iter (± 56496) 8742374 ns/iter (± 26506) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7698058 ns/iter (± 25948) 7715383 ns/iter (± 5001) 1.00

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

Please sign in to comment.