From 56bc6b87948a41ccf8e6e7ac2da0c19ead2b451b Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Thu, 10 Nov 2022 05:44:53 +0300 Subject: [PATCH] refactor(css/parser): Skip whitespaces in correct places (#6382) --- .../swc_css_parser/src/parser/at_rules/mod.rs | 18 +++++----- .../src/parser/selectors/mod.rs | 36 ++++++++++++------- .../src/parser/values_and_units/mod.rs | 2 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/crates/swc_css_parser/src/parser/at_rules/mod.rs b/crates/swc_css_parser/src/parser/at_rules/mod.rs index 3ca096cdd77a..c86164dba8d1 100644 --- a/crates/swc_css_parser/src/parser/at_rules/mod.rs +++ b/crates/swc_css_parser/src/parser/at_rules/mod.rs @@ -976,8 +976,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let start_pos = self.input.cur_span().lo; let mut last_pos; let mut conditions = vec![]; @@ -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)) @@ -1297,8 +1299,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let query = self.parse()?; let mut queries = vec![query]; @@ -1438,8 +1438,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let start_pos = self.input.cur_span().lo; let mut last_pos; let mut conditions = vec![]; @@ -1494,8 +1492,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let start_pos = self.input.cur_span().lo; let mut last_pos; let mut conditions = vec![]; @@ -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)) @@ -1923,8 +1923,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let span = self.input.cur_span(); let page_type = if is!(self, Ident) { diff --git a/crates/swc_css_parser/src/parser/selectors/mod.rs b/crates/swc_css_parser/src/parser/selectors/mod.rs index 094a87779f7a..5450f9ee76b1 100644 --- a/crates/swc_css_parser/src/parser/selectors/mod.rs +++ b/crates/swc_css_parser/src/parser/selectors/mod.rs @@ -12,8 +12,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let child: ComplexSelector = self.parse()?; let mut children = vec![child]; @@ -126,8 +124,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let child: CompoundSelector = self.parse()?; let mut children = vec![child]; @@ -170,8 +166,6 @@ where I: ParserInput, { fn parse(&mut self) -> PResult { - self.input.skip_ws(); - let child: RelativeSelector = self.parse()?; let mut children = vec![child]; @@ -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; } @@ -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, )); @@ -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(); @@ -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" => { @@ -974,10 +984,10 @@ where let selector_list = self.parse()?; + self.input.skip_ws(); + children .push(PseudoClassSelectorChildren::SelectorList(selector_list)); - - self.input.skip_ws(); } } "host" | "host-context" => { @@ -985,11 +995,11 @@ where 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)); diff --git a/crates/swc_css_parser/src/parser/values_and_units/mod.rs b/crates/swc_css_parser/src/parser/values_and_units/mod.rs index 25189aa70fbe..0c2eaf715191 100644 --- a/crates/swc_css_parser/src/parser/values_and_units/mod.rs +++ b/crates/swc_css_parser/src/parser/values_and_units/mod.rs @@ -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), };