From 36a55e582c95166e8f91702d6314fc920b88da6c Mon Sep 17 00:00:00 2001 From: Connor Skees Date: Fri, 7 Aug 2020 13:07:28 -0400 Subject: [PATCH] use `consume_char_if_exists` to simplify parsing --- src/parse/args.rs | 3 +-- src/parse/mixin.rs | 5 ++--- src/parse/mod.rs | 3 +-- src/parse/value/parse.rs | 12 +++++------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/parse/args.rs b/src/parse/args.rs index 8bb3e9d..adad512 100644 --- a/src/parse/args.rs +++ b/src/parse/args.rs @@ -134,8 +134,7 @@ impl<'a> Parser<'a> { loop { self.whitespace_or_comment(); - if matches!(self.toks.peek(), Some(Token { kind: ')', .. })) { - self.toks.next(); + if self.consume_char_if_exists(')') { return Ok(CallArgs(args, span)); } diff --git a/src/parse/mixin.rs b/src/parse/mixin.rs index f0764b7..1278b57 100644 --- a/src/parse/mixin.rs +++ b/src/parse/mixin.rs @@ -119,9 +119,8 @@ impl<'a> Parser<'a> { let content = if content_args.is_some() || matches!(self.toks.peek(), Some(Token { kind: '{', .. })) { - if matches!(self.toks.peek(), Some(Token { kind: '{', .. })) { - self.toks.next(); - } + self.consume_char_if_exists('{'); + let mut toks = read_until_closing_curly_brace(self.toks)?; if let Some(tok) = self.toks.peek() { toks.push(*tok); diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 56f7c45..36d50d1 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -709,8 +709,7 @@ impl<'a> Parser<'a> { fn parse_at_root(&mut self) -> SassResult> { self.whitespace(); let mut at_root_has_selector = false; - let at_rule_selector = if matches!(self.toks.peek(), Some(Token { kind: '{', .. })) { - self.toks.next(); + let at_rule_selector = if self.consume_char_if_exists('{') { self.super_selectors.last().clone() } else { at_root_has_selector = true; diff --git a/src/parse/value/parse.rs b/src/parse/value/parse.rs index 2cc39f3..6eea8aa 100644 --- a/src/parse/value/parse.rs +++ b/src/parse/value/parse.rs @@ -199,9 +199,8 @@ impl<'a> Parser<'a> { module: &str, mut module_span: Span, ) -> SassResult> { - Ok(IntermediateValue::Value( - if matches!(self.toks.peek(), Some(Token { kind: '$', .. })) { - self.toks.next(); + Ok( + IntermediateValue::Value(if self.consume_char_if_exists('$') { let var = self .parse_identifier_no_interpolation(false)? .map_node(|i| i.into()); @@ -228,9 +227,9 @@ impl<'a> Parser<'a> { let call_args = self.parse_call_args()?; HigherIntermediateValue::Function(function, call_args) - }, + }) + .span(module_span), ) - .span(module_span)) } fn parse_ident_value( @@ -243,9 +242,8 @@ impl<'a> Parser<'a> { let lower = s.to_ascii_lowercase(); - if lower == "progid" && matches!(self.toks.peek(), Some(Token { kind: ':', .. })) { + if lower == "progid" && self.consume_char_if_exists(':') { s = lower; - self.toks.next(); s.push(':'); s.push_str(&self.parse_progid()?); return Ok(Spanned {