Skip to content

Commit

Permalink
fix(css/parser): Fix parsing of :global(> *) (#7082)
Browse files Browse the repository at this point in the history
  • Loading branch information
kdy1 committed Mar 16, 2023
1 parent b14e6b9 commit 60f74ea
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 2 deletions.
1 change: 1 addition & 0 deletions crates/swc_css_modules/tests/fixture.rs
Expand Up @@ -55,6 +55,7 @@ fn compile(input: PathBuf) {
&mut errors,
)
.unwrap();

let _result = swc_css_modules::imports::analyze_imports(&ss);

let transform_result = swc_css_modules::compile(&mut ss, TestConfig {});
Expand Down
3 changes: 3 additions & 0 deletions crates/swc_css_modules/tests/with-compat/vercel/010/input.css
@@ -0,0 +1,3 @@
.quickstart .buttons :global(> *) {
color: red
}
@@ -0,0 +1,3 @@
.__local__quickstart .__local__buttons > * {
color: red;
}
3 changes: 3 additions & 0 deletions crates/swc_css_parser/src/parser/mod.rs
Expand Up @@ -76,6 +76,8 @@ struct Ctx {
in_page_at_rule: bool,
in_container_at_rule: bool,
in_font_feature_values_at_rule: bool,

in_global_or_local_selector: bool,
}

impl Default for Ctx {
Expand All @@ -92,6 +94,7 @@ impl Default for Ctx {
in_page_at_rule: false,
in_container_at_rule: false,
in_font_feature_values_at_rule: false,
in_global_or_local_selector: false,
}
}
}
Expand Down
13 changes: 11 additions & 2 deletions crates/swc_css_parser/src/parser/selectors/mod.rs
Expand Up @@ -5,6 +5,7 @@ use swc_css_ast::*;
use super::{input::ParserInput, PResult, Parser};
use crate::{
error::{Error, ErrorKind},
parser::Ctx,
Parse,
};

Expand Down Expand Up @@ -456,7 +457,11 @@ where
}
}

if nesting_selector.is_none() && type_selector.is_none() && subclass_selectors.is_empty() {
if !self.ctx.in_global_or_local_selector
&& nesting_selector.is_none()
&& type_selector.is_none()
&& subclass_selectors.is_empty()
{
return Err(Error::new(start_span, ErrorKind::InvalidSelector));
}

Expand Down Expand Up @@ -862,7 +867,11 @@ where
js_word!("local") | js_word!("global") if self.config.css_modules => {
self.input.skip_ws();

let selector_list = self.parse()?;
let ctx = Ctx {
in_global_or_local_selector: true,
..self.ctx
};
let selector_list = self.with_ctx(ctx).parse_as::<ComplexSelector>()?;

self.input.skip_ws();

Expand Down

1 comment on commit 60f74ea

@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: 60f74ea Previous: 86295ba Ratio
es/full/bugs-1 289855 ns/iter (± 9176) 296417 ns/iter (± 5638) 0.98
es/full/minify/libraries/antd 1669706532 ns/iter (± 20882001) 1713571478 ns/iter (± 19488758) 0.97
es/full/minify/libraries/d3 300641129 ns/iter (± 6467764) 316847681 ns/iter (± 7325369) 0.95
es/full/minify/libraries/echarts 1258325385 ns/iter (± 15856575) 1311229778 ns/iter (± 15575991) 0.96
es/full/minify/libraries/jquery 90033360 ns/iter (± 756259) 93111350 ns/iter (± 570161) 0.97
es/full/minify/libraries/lodash 104952025 ns/iter (± 1067529) 108340640 ns/iter (± 852797) 0.97
es/full/minify/libraries/moment 52005451 ns/iter (± 594057) 53420456 ns/iter (± 180250) 0.97
es/full/minify/libraries/react 18755769 ns/iter (± 100761) 19364564 ns/iter (± 107930) 0.97
es/full/minify/libraries/terser 243701960 ns/iter (± 2645873) 262605706 ns/iter (± 2836053) 0.93
es/full/minify/libraries/three 425454674 ns/iter (± 2801532) 461661141 ns/iter (± 4355136) 0.92
es/full/minify/libraries/typescript 3027869778 ns/iter (± 13968458) 3144164833 ns/iter (± 15327376) 0.96
es/full/minify/libraries/victory 654768284 ns/iter (± 10722103) 705146169 ns/iter (± 11228710) 0.93
es/full/minify/libraries/vue 128960380 ns/iter (± 700771) 134198215 ns/iter (± 784588) 0.96
es/full/codegen/es3 26506 ns/iter (± 49) 26082 ns/iter (± 39) 1.02
es/full/codegen/es5 26530 ns/iter (± 61) 26131 ns/iter (± 39) 1.02
es/full/codegen/es2015 26507 ns/iter (± 51) 26181 ns/iter (± 52) 1.01
es/full/codegen/es2016 26486 ns/iter (± 57) 26114 ns/iter (± 66) 1.01
es/full/codegen/es2017 26558 ns/iter (± 67) 26108 ns/iter (± 48) 1.02
es/full/codegen/es2018 26539 ns/iter (± 44) 26141 ns/iter (± 50) 1.02
es/full/codegen/es2019 26524 ns/iter (± 61) 26180 ns/iter (± 81) 1.01
es/full/codegen/es2020 26519 ns/iter (± 47) 26133 ns/iter (± 50) 1.01
es/full/all/es3 178080857 ns/iter (± 3807737) 179369909 ns/iter (± 1932683) 0.99
es/full/all/es5 170960691 ns/iter (± 3330144) 170799497 ns/iter (± 2636398) 1.00
es/full/all/es2015 136350591 ns/iter (± 3397798) 132206480 ns/iter (± 1859328) 1.03
es/full/all/es2016 133928252 ns/iter (± 1850145) 131618113 ns/iter (± 1872543) 1.02
es/full/all/es2017 132481986 ns/iter (± 1661154) 129509212 ns/iter (± 1879237) 1.02
es/full/all/es2018 127455613 ns/iter (± 2550156) 124266637 ns/iter (± 1300882) 1.03
es/full/all/es2019 125448445 ns/iter (± 1632170) 123361543 ns/iter (± 1631032) 1.02
es/full/all/es2020 118046544 ns/iter (± 918958) 116879757 ns/iter (± 944770) 1.01
es/full/parser 538894 ns/iter (± 7991) 526107 ns/iter (± 7792) 1.02
es/full/base/fixer 22271 ns/iter (± 109) 22539 ns/iter (± 54) 0.99
es/full/base/resolver_and_hygiene 81942 ns/iter (± 73) 81359 ns/iter (± 115) 1.01
serialization of ast node 124 ns/iter (± 0) 124 ns/iter (± 0) 1
serialization of serde 126 ns/iter (± 0) 126 ns/iter (± 0) 1
css/minify/libraries/bootstrap 28407434 ns/iter (± 80813) 28255519 ns/iter (± 80898) 1.01
css/visitor/compare/clone 2098480 ns/iter (± 8161) 2103100 ns/iter (± 7338) 1.00
css/visitor/compare/visit_mut_span 2286790 ns/iter (± 8131) 2291168 ns/iter (± 10288) 1.00
css/visitor/compare/visit_mut_span_panic 2337234 ns/iter (± 7598) 2308415 ns/iter (± 5609) 1.01
css/visitor/compare/fold_span 3005405 ns/iter (± 25308) 3034638 ns/iter (± 13412) 0.99
css/visitor/compare/fold_span_panic 3230788 ns/iter (± 13315) 3161495 ns/iter (± 24191) 1.02
css/lexer/bootstrap_5_1_3 5135132 ns/iter (± 11530) 5186743 ns/iter (± 5223) 0.99
css/lexer/foundation_6_7_4 4340018 ns/iter (± 702) 4350605 ns/iter (± 1019) 1.00
css/lexer/tailwind_3_1_1 823466 ns/iter (± 621) 824098 ns/iter (± 241) 1.00
css/parser/bootstrap_5_1_3 21824068 ns/iter (± 136423) 22136546 ns/iter (± 154942) 0.99
css/parser/foundation_6_7_4 17319760 ns/iter (± 8683) 17608540 ns/iter (± 132009) 0.98
css/parser/tailwind_3_1_1 3334181 ns/iter (± 2470) 3327318 ns/iter (± 2367) 1.00
es/codegen/colors 332950 ns/iter (± 188494) 325675 ns/iter (± 183179) 1.02
es/codegen/large 1241818 ns/iter (± 638573) 2465159 ns/iter (± 1629702) 0.50
es/codegen/with-parser/colors 47982 ns/iter (± 462) 48352 ns/iter (± 289) 0.99
es/codegen/with-parser/large 519561 ns/iter (± 1180) 525482 ns/iter (± 1240) 0.99
es/minify/libraries/antd 1400824860 ns/iter (± 15494291) 1453177168 ns/iter (± 15883149) 0.96
es/minify/libraries/d3 253466545 ns/iter (± 4266073) 268700136 ns/iter (± 2306399) 0.94
es/minify/libraries/echarts 1053066975 ns/iter (± 10284855) 1137912196 ns/iter (± 15324618) 0.93
es/minify/libraries/jquery 77956797 ns/iter (± 698363) 80504347 ns/iter (± 557875) 0.97
es/minify/libraries/lodash 93155918 ns/iter (± 765082) 96537168 ns/iter (± 1117888) 0.96
es/minify/libraries/moment 45269846 ns/iter (± 421661) 46522933 ns/iter (± 411424) 0.97
es/minify/libraries/react 16740802 ns/iter (± 131681) 17203583 ns/iter (± 110076) 0.97
es/minify/libraries/terser 205993028 ns/iter (± 2302695) 221199832 ns/iter (± 2008440) 0.93
es/minify/libraries/three 356049355 ns/iter (± 3867245) 388628891 ns/iter (± 4308328) 0.92
es/minify/libraries/typescript 2603541506 ns/iter (± 22002335) 2697637501 ns/iter (± 15188166) 0.97
es/minify/libraries/victory 544543837 ns/iter (± 6642687) 621049381 ns/iter (± 14200337) 0.88
es/minify/libraries/vue 114103603 ns/iter (± 952929) 119419309 ns/iter (± 1250457) 0.96
es/visitor/compare/clone 2341848 ns/iter (± 12839) 2347074 ns/iter (± 12205) 1.00
es/visitor/compare/visit_mut_span 2696358 ns/iter (± 3058) 2714023 ns/iter (± 3060) 0.99
es/visitor/compare/visit_mut_span_panic 2762714 ns/iter (± 3847) 2751196 ns/iter (± 5105) 1.00
es/visitor/compare/fold_span 3822141 ns/iter (± 6923) 3818655 ns/iter (± 106095) 1.00
es/visitor/compare/fold_span_panic 3985384 ns/iter (± 7633) 4009940 ns/iter (± 12829) 0.99
es/lexer/colors 15979 ns/iter (± 82) 15713 ns/iter (± 20) 1.02
es/lexer/angular 7804604 ns/iter (± 24096) 7738989 ns/iter (± 5272) 1.01
es/lexer/backbone 1011218 ns/iter (± 4362) 1000479 ns/iter (± 648) 1.01
es/lexer/jquery 5637832 ns/iter (± 1415) 5614251 ns/iter (± 2722) 1.00
es/lexer/jquery mobile 8720031 ns/iter (± 7786) 8660815 ns/iter (± 7665) 1.01
es/lexer/mootools 4482043 ns/iter (± 5042) 4432220 ns/iter (± 2215) 1.01
es/lexer/underscore 847363 ns/iter (± 123) 840416 ns/iter (± 390) 1.01
es/lexer/three 26507554 ns/iter (± 24946) 26309872 ns/iter (± 11540) 1.01
es/lexer/yui 4789437 ns/iter (± 2076) 4756089 ns/iter (± 1385) 1.01
es/parser/colors 30143 ns/iter (± 36) 30223 ns/iter (± 93) 1.00
es/parser/angular 15344074 ns/iter (± 61172) 16143300 ns/iter (± 161683) 0.95
es/parser/backbone 2222683 ns/iter (± 14347) 2233714 ns/iter (± 8161) 1.00
es/parser/jquery 12100639 ns/iter (± 86931) 12344413 ns/iter (± 116495) 0.98
es/parser/jquery mobile 18910218 ns/iter (± 113846) 19718176 ns/iter (± 165912) 0.96
es/parser/mootools 9272769 ns/iter (± 26452) 9316117 ns/iter (± 24865) 1.00
es/parser/underscore 1892951 ns/iter (± 11680) 1897406 ns/iter (± 8502) 1.00
es/parser/three 55214014 ns/iter (± 496825) 58356966 ns/iter (± 272396) 0.95
es/parser/yui 9328287 ns/iter (± 40674) 9436261 ns/iter (± 93433) 0.99
es/preset-env/usage/builtin_type 136964 ns/iter (± 31578) 142038 ns/iter (± 34150) 0.96
es/preset-env/usage/property 21349 ns/iter (± 47) 20996 ns/iter (± 89) 1.02
es/resolver/typescript 113371732 ns/iter (± 2401181) 115002761 ns/iter (± 1270962) 0.99
es/fixer/typescript 84477914 ns/iter (± 896855) 86408813 ns/iter (± 1916159) 0.98
es/hygiene/typescript 180644610 ns/iter (± 1891117) 188017024 ns/iter (± 1855382) 0.96
es/resolver_with_hygiene/typescript 319307298 ns/iter (± 1835156) 338451464 ns/iter (± 1557216) 0.94
es/visitor/base-perf/module_clone 79714 ns/iter (± 978) 81224 ns/iter (± 811) 0.98
es/visitor/base-perf/fold_empty 88687 ns/iter (± 1087) 90590 ns/iter (± 1130) 0.98
es/visitor/base-perf/fold_noop_impl_all 90068 ns/iter (± 1770) 88806 ns/iter (± 1294) 1.01
es/visitor/base-perf/fold_noop_impl_vec 91483 ns/iter (± 1362) 89706 ns/iter (± 1735) 1.02
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 60 ns/iter (± 0) 53 ns/iter (± 0) 1.13
es/visitor/base-perf/boxing_boxed 103 ns/iter (± 0) 101 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 99 ns/iter (± 0) 97 ns/iter (± 0) 1.02
es/visitor/base-perf/visit_contains_this 3629 ns/iter (± 51) 3404 ns/iter (± 53) 1.07
es/base/parallel/resolver/typescript 5635332269 ns/iter (± 335201831) 5715801062 ns/iter (± 470780398) 0.99
es/base/parallel/hygiene/typescript 2136790151 ns/iter (± 19791514) 2147564723 ns/iter (± 20458666) 0.99
misc/visitors/time-complexity/time 5 96 ns/iter (± 0) 99 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 10 318 ns/iter (± 2) 343 ns/iter (± 3) 0.93
misc/visitors/time-complexity/time 15 665 ns/iter (± 8) 669 ns/iter (± 3) 0.99
misc/visitors/time-complexity/time 20 1251 ns/iter (± 0) 1305 ns/iter (± 1) 0.96
misc/visitors/time-complexity/time 40 6811 ns/iter (± 42) 6746 ns/iter (± 2) 1.01
misc/visitors/time-complexity/time 60 17270 ns/iter (± 44) 17268 ns/iter (± 4) 1.00
es/full-target/es2016 250201 ns/iter (± 445) 249904 ns/iter (± 402) 1.00
es/full-target/es2017 242538 ns/iter (± 389) 243042 ns/iter (± 549) 1.00
es/full-target/es2018 232052 ns/iter (± 414) 231543 ns/iter (± 874) 1.00
es2020_nullish_coalescing 91298 ns/iter (± 734) 90926 ns/iter (± 513) 1.00
es2020_optional_chaining 123512 ns/iter (± 419) 123029 ns/iter (± 296) 1.00
es2022_class_properties 146957 ns/iter (± 307) 147112 ns/iter (± 257) 1.00
es2018_object_rest_spread 95076 ns/iter (± 313) 94848 ns/iter (± 323) 1.00
es2019_optional_catch_binding 83834 ns/iter (± 203) 84038 ns/iter (± 195) 1.00
es2017_async_to_generator 84990 ns/iter (± 201) 84840 ns/iter (± 145) 1.00
es2016_exponentiation 89468 ns/iter (± 195) 89235 ns/iter (± 246) 1.00
es2015_arrow 93640 ns/iter (± 172) 93149 ns/iter (± 196) 1.01
es2015_block_scoped_fn 90937 ns/iter (± 229) 90909 ns/iter (± 235) 1.00
es2015_block_scoping 169019 ns/iter (± 252) 168446 ns/iter (± 386) 1.00

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

Please sign in to comment.