Skip to content

Commit

Permalink
refactor(css/parser): Skip whitespaces in correct places (#6382)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Nov 10, 2022
1 parent 10fc03a commit 56bc6b8
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
18 changes: 8 additions & 10 deletions crates/swc_css_parser/src/parser/at_rules/mod.rs
Expand Up @@ -976,8 +976,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<SupportsCondition> {
self.input.skip_ws();

let start_pos = self.input.cur_span().lo;
let mut last_pos;
let mut conditions = vec![];
Expand Down Expand Up @@ -1132,8 +1130,12 @@ where
let mut parse_condition = || {
expect!(self, "(");

self.input.skip_ws();

let condition = self.parse()?;

self.input.skip_ws();

expect!(self, ")");

Ok(SupportsInParens::SupportsCondition(condition))
Expand Down Expand Up @@ -1297,8 +1299,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<MediaQueryList> {
self.input.skip_ws();

let query = self.parse()?;
let mut queries = vec![query];

Expand Down Expand Up @@ -1438,8 +1438,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<MediaCondition> {
self.input.skip_ws();

let start_pos = self.input.cur_span().lo;
let mut last_pos;
let mut conditions = vec![];
Expand Down Expand Up @@ -1494,8 +1492,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<MediaConditionWithoutOr> {
self.input.skip_ws();

let start_pos = self.input.cur_span().lo;
let mut last_pos;
let mut conditions = vec![];
Expand Down Expand Up @@ -1640,8 +1636,12 @@ where
let mut parse_media_condition = || {
expect!(self, "(");

self.input.skip_ws();

let media_condition = self.parse()?;

self.input.skip_ws();

expect!(self, ")");

Ok(MediaInParens::MediaCondition(media_condition))
Expand Down Expand Up @@ -1923,8 +1923,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<PageSelector> {
self.input.skip_ws();

let span = self.input.cur_span();

let page_type = if is!(self, Ident) {
Expand Down
36 changes: 23 additions & 13 deletions crates/swc_css_parser/src/parser/selectors/mod.rs
Expand Up @@ -12,8 +12,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<SelectorList> {
self.input.skip_ws();

let child: ComplexSelector = self.parse()?;
let mut children = vec![child];

Expand Down Expand Up @@ -126,8 +124,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<CompoundSelectorList> {
self.input.skip_ws();

let child: CompoundSelector = self.parse()?;
let mut children = vec![child];

Expand Down Expand Up @@ -170,8 +166,6 @@ where
I: ParserInput,
{
fn parse(&mut self) -> PResult<RelativeSelectorList> {
self.input.skip_ws();

let child: RelativeSelector = self.parse()?;
let mut children = vec![child];

Expand Down Expand Up @@ -293,7 +287,7 @@ where
self.input.skip_ws();

// TODO should be refactor after grammar parsing
if is_one_of!(self, EOF, ",", "{", ")") {
if is_one_of!(self, EOF, ",", ")") {
break;
}

Expand Down Expand Up @@ -859,14 +853,22 @@ where

match &*names.0.to_ascii_lowercase() {
"local" | "global" if self.config.css_modules => {
self.input.skip_ws();

let selector_list = self.parse()?;

self.input.skip_ws();

children
.push(PseudoClassSelectorChildren::ComplexSelector(selector_list));
}
"-moz-any" | "-webkit-any" => {
self.input.skip_ws();

let compound_selector_list = self.parse()?;

self.input.skip_ws();

children.push(PseudoClassSelectorChildren::CompoundSelectorList(
compound_selector_list,
));
Expand All @@ -876,9 +878,9 @@ where

let ident = self.parse()?;

children.push(PseudoClassSelectorChildren::Ident(ident));

self.input.skip_ws();

children.push(PseudoClassSelectorChildren::Ident(ident));
}
"lang" => {
self.input.skip_ws();
Expand Down Expand Up @@ -928,15 +930,23 @@ where
}
}
"current" | "past" | "future" => {
self.input.skip_ws();

let compound_selector_list = self.parse()?;

self.input.skip_ws();

children.push(PseudoClassSelectorChildren::CompoundSelectorList(
compound_selector_list,
));
}
"not" | "matches" => {
self.input.skip_ws();

let selector_list = self.parse()?;

self.input.skip_ws();

children.push(PseudoClassSelectorChildren::SelectorList(selector_list));
}
"is" | "where" => {
Expand Down Expand Up @@ -974,22 +984,22 @@ where

let selector_list = self.parse()?;

self.input.skip_ws();

children
.push(PseudoClassSelectorChildren::SelectorList(selector_list));

self.input.skip_ws();
}
}
"host" | "host-context" => {
self.input.skip_ws();

let compound_selector = self.parse()?;

self.input.skip_ws();

children.push(PseudoClassSelectorChildren::CompoundSelector(
compound_selector,
));

self.input.skip_ws();
}
_ => {
return Err(Error::new(span, ErrorKind::Ignore));
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_css_parser/src/parser/values_and_units/mod.rs
Expand Up @@ -2912,7 +2912,7 @@ where
}

let name = Ident {
span: swc_common::Span::new(span.lo, span.hi - BytePos(1), Default::default()),
span: Span::new(span.lo, span.hi - BytePos(1), Default::default()),
value: function_name,
raw: Some(raw_function_name),
};
Expand Down

1 comment on commit 56bc6b8

@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: 56bc6b8 Previous: 434a765 Ratio
es/full/bugs-1 339604 ns/iter (± 16170) 346319 ns/iter (± 28732) 0.98
es/full/minify/libraries/antd 1847726848 ns/iter (± 33506580) 1880489280 ns/iter (± 42210239) 0.98
es/full/minify/libraries/d3 403013520 ns/iter (± 11894131) 405404030 ns/iter (± 19336039) 0.99
es/full/minify/libraries/echarts 1589588769 ns/iter (± 19827934) 1573215373 ns/iter (± 33719678) 1.01
es/full/minify/libraries/jquery 104512993 ns/iter (± 2689574) 103004016 ns/iter (± 2740469) 1.01
es/full/minify/libraries/lodash 121063417 ns/iter (± 3582786) 122969588 ns/iter (± 8193156) 0.98
es/full/minify/libraries/moment 60809416 ns/iter (± 2173186) 65260973 ns/iter (± 5471231) 0.93
es/full/minify/libraries/react 20359757 ns/iter (± 573397) 20246720 ns/iter (± 581772) 1.01
es/full/minify/libraries/terser 322970445 ns/iter (± 12428067) 329597953 ns/iter (± 15603044) 0.98
es/full/minify/libraries/three 571516513 ns/iter (± 15390451) 585089007 ns/iter (± 20362181) 0.98
es/full/minify/libraries/typescript 3422833647 ns/iter (± 42640539) 3685663654 ns/iter (± 200958289) 0.93
es/full/minify/libraries/victory 852205860 ns/iter (± 15830745) 904368012 ns/iter (± 33479132) 0.94
es/full/minify/libraries/vue 171873400 ns/iter (± 4943533) 181828186 ns/iter (± 5515986) 0.95
es/full/codegen/es3 34736 ns/iter (± 1240) 35453 ns/iter (± 2627) 0.98
es/full/codegen/es5 33801 ns/iter (± 1095) 34719 ns/iter (± 1675) 0.97
es/full/codegen/es2015 33818 ns/iter (± 3364) 34577 ns/iter (± 1760) 0.98
es/full/codegen/es2016 34384 ns/iter (± 1081) 35014 ns/iter (± 4533) 0.98
es/full/codegen/es2017 34272 ns/iter (± 1263) 34383 ns/iter (± 2954) 1.00
es/full/codegen/es2018 34274 ns/iter (± 1330) 34802 ns/iter (± 2297) 0.98
es/full/codegen/es2019 33560 ns/iter (± 1274) 35208 ns/iter (± 1398) 0.95
es/full/codegen/es2020 33570 ns/iter (± 950) 35462 ns/iter (± 1920) 0.95
es/full/all/es3 204574369 ns/iter (± 12820859) 229464856 ns/iter (± 22314812) 0.89
es/full/all/es5 190353588 ns/iter (± 12138313) 204005279 ns/iter (± 19619762) 0.93
es/full/all/es2015 149702186 ns/iter (± 9273478) 163757023 ns/iter (± 16543214) 0.91
es/full/all/es2016 149885499 ns/iter (± 7519214) 153562851 ns/iter (± 17696688) 0.98
es/full/all/es2017 148730928 ns/iter (± 7866854) 167169040 ns/iter (± 21627712) 0.89
es/full/all/es2018 145720852 ns/iter (± 7782054) 168211359 ns/iter (± 15728945) 0.87
es/full/all/es2019 145288555 ns/iter (± 7755768) 164589946 ns/iter (± 21174490) 0.88
es/full/all/es2020 139120267 ns/iter (± 7578809) 152813785 ns/iter (± 13735371) 0.91
es/full/parser 725566 ns/iter (± 29837) 733987 ns/iter (± 54448) 0.99
es/full/base/fixer 26640 ns/iter (± 1643) 27556 ns/iter (± 1602) 0.97
es/full/base/resolver_and_hygiene 92397 ns/iter (± 11222) 95873 ns/iter (± 4661) 0.96
serialization of ast node 214 ns/iter (± 5) 235 ns/iter (± 7) 0.91
serialization of serde 214 ns/iter (± 4) 239 ns/iter (± 21) 0.90

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

Please sign in to comment.