remove generics from utility fns

This commit is contained in:
Connor Skees 2020-07-09 11:56:58 -04:00
parent b199984170
commit a813cab0d7
5 changed files with 54 additions and 59 deletions

View File

@ -1,3 +1,5 @@
use std::vec::IntoIter;
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
use crate::{error::SassResult, Token}; use crate::{error::SassResult, Token};
@ -5,8 +7,8 @@ use crate::{error::SassResult, Token};
use super::{read_until_closing_paren, read_until_closing_quote}; use super::{read_until_closing_paren, read_until_closing_quote};
/// Reads until the char is found, consuming the char, /// Reads until the char is found, consuming the char,
/// or until the end of the iterator is hit /// or until the end of the iterator is hit
pub(crate) fn read_until_char<I: Iterator<Item = Token>>( pub(crate) fn read_until_char(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
c: char, c: char,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut v = Vec::new(); let mut v = Vec::new();

View File

@ -1,3 +1,5 @@
use std::vec::IntoIter;
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
use crate::Token; use crate::Token;
@ -26,13 +28,16 @@ pub(crate) fn devour_whitespace<I: Iterator<Item = W>, W: IsWhitespace>(
found_whitespace found_whitespace
} }
pub(crate) fn peek_whitespace<I: Iterator<Item = W>, W: IsWhitespace>(s: &mut PeekMoreIterator<I>) { pub(crate) fn peek_whitespace(s: &mut PeekMoreIterator<IntoIter<Token>>) -> bool {
let mut found_whitespace = false;
while let Some(w) = s.peek() { while let Some(w) = s.peek() {
if !w.is_whitespace() { if !w.is_whitespace() {
break; break;
} }
found_whitespace = true;
s.advance_cursor(); s.advance_cursor();
} }
found_whitespace
} }
/// Eat tokens until a newline /// Eat tokens until a newline
@ -44,7 +49,7 @@ pub(crate) fn peek_whitespace<I: Iterator<Item = W>, W: IsWhitespace>(s: &mut Pe
pub(crate) fn read_until_newline<I: Iterator<Item = Token>>(toks: &mut PeekMoreIterator<I>) { pub(crate) fn read_until_newline<I: Iterator<Item = Token>>(toks: &mut PeekMoreIterator<I>) {
for tok in toks { for tok in toks {
if tok.kind == '\n' { if tok.kind == '\n' {
break; return;
} }
} }
} }

View File

@ -1,3 +1,5 @@
use std::vec::IntoIter;
use codemap::Spanned; use codemap::Spanned;
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
@ -45,8 +47,8 @@ impl ParsedNumber {
} }
} }
pub(crate) fn eat_number<I: Iterator<Item = Token>>( pub(crate) fn eat_number(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Spanned<ParsedNumber>> { ) -> SassResult<Spanned<ParsedNumber>> {
let mut span = toks.peek().unwrap().pos; let mut span = toks.peek().unwrap().pos;
let mut whole = eat_whole_number(toks); let mut whole = eat_whole_number(toks);
@ -112,9 +114,7 @@ pub(crate) fn eat_number<I: Iterator<Item = Token>>(
}) })
} }
pub(crate) fn eat_whole_number<I: Iterator<Item = Token>>( pub(crate) fn eat_whole_number(toks: &mut PeekMoreIterator<IntoIter<Token>>) -> String {
toks: &mut PeekMoreIterator<I>,
) -> String {
let mut buf = String::new(); let mut buf = String::new();
while let Some(c) = toks.peek() { while let Some(c) = toks.peek() {
if !c.kind.is_ascii_digit() { if !c.kind.is_ascii_digit() {

View File

@ -1,13 +1,15 @@
use std::vec::IntoIter;
use codemap::{Span, Spanned}; use codemap::{Span, Spanned};
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
use crate::{error::SassResult, Token}; use crate::{error::SassResult, Token};
use super::{as_hex, hex_char_for, is_name, is_name_start, IsWhitespace}; use super::{as_hex, hex_char_for, is_name, is_name_start, peek_whitespace};
pub(crate) fn peek_until_closing_curly_brace<I: Iterator<Item = Token>>( pub(crate) fn peek_until_closing_curly_brace(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
let mut nesting = 0; let mut nesting = 0;
@ -52,8 +54,8 @@ pub(crate) fn peek_until_closing_curly_brace<I: Iterator<Item = Token>>(
Ok(t) Ok(t)
} }
fn peek_until_closing_quote<I: Iterator<Item = Token>>( fn peek_until_closing_quote(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
q: char, q: char,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
@ -95,7 +97,7 @@ fn peek_until_closing_quote<I: Iterator<Item = Token>>(
Ok(t) Ok(t)
} }
fn peek_until_newline<I: Iterator<Item = Token>>(toks: &mut PeekMoreIterator<I>) { fn peek_until_newline(toks: &mut PeekMoreIterator<IntoIter<Token>>) {
while let Some(tok) = toks.peek() { while let Some(tok) = toks.peek() {
if tok.kind == '\n' { if tok.kind == '\n' {
break; break;
@ -104,21 +106,7 @@ fn peek_until_newline<I: Iterator<Item = Token>>(toks: &mut PeekMoreIterator<I>)
} }
} }
fn peek_whitespace<I: Iterator<Item = W>, W: IsWhitespace>(s: &mut PeekMoreIterator<I>) -> bool { pub(crate) fn peek_escape(toks: &mut PeekMoreIterator<IntoIter<Token>>) -> SassResult<String> {
let mut found_whitespace = false;
while let Some(w) = s.peek() {
if !w.is_whitespace() {
break;
}
found_whitespace = true;
s.advance_cursor();
}
found_whitespace
}
pub(crate) fn peek_escape<I: Iterator<Item = Token>>(
toks: &mut PeekMoreIterator<I>,
) -> SassResult<String> {
let mut value = 0; let mut value = 0;
let first = match toks.peek() { let first = match toks.peek() {
Some(t) => *t, Some(t) => *t,
@ -165,8 +153,8 @@ pub(crate) fn peek_escape<I: Iterator<Item = Token>>(
} }
} }
pub(crate) fn peek_ident_no_interpolation<I: Iterator<Item = Token>>( pub(crate) fn peek_ident_no_interpolation(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
unit: bool, unit: bool,
span_before: Span, span_before: Span,
) -> SassResult<Spanned<String>> { ) -> SassResult<Spanned<String>> {
@ -210,8 +198,8 @@ pub(crate) fn peek_ident_no_interpolation<I: Iterator<Item = Token>>(
Ok(Spanned { node: text, span }) Ok(Spanned { node: text, span })
} }
fn peek_ident_body_no_interpolation<I: Iterator<Item = Token>>( fn peek_ident_body_no_interpolation(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
unit: bool, unit: bool,
mut span: Span, mut span: Span,
) -> SassResult<Spanned<String>> { ) -> SassResult<Spanned<String>> {

View File

@ -1,4 +1,4 @@
use std::iter::Iterator; use std::vec::IntoIter;
use peekmore::PeekMoreIterator; use peekmore::PeekMoreIterator;
@ -9,8 +9,8 @@ use super::{devour_whitespace, read_until_newline};
// Eat tokens until an open curly brace // Eat tokens until an open curly brace
// //
// Does not consume the open curly brace // Does not consume the open curly brace
pub(crate) fn read_until_open_curly_brace<I: Iterator<Item = Token>>( pub(crate) fn read_until_open_curly_brace(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
let mut n = 0; let mut n = 0;
@ -49,27 +49,27 @@ pub(crate) fn read_until_open_curly_brace<I: Iterator<Item = Token>>(
Ok(t) Ok(t)
} }
pub(crate) fn read_until_closing_curly_brace<I: Iterator<Item = Token>>( pub(crate) fn read_until_closing_curly_brace(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut buf = Vec::new();
let mut nesting = 0; let mut nesting = 0;
while let Some(tok) = toks.peek() { while let Some(tok) = toks.peek() {
match tok.kind { match tok.kind {
q @ '"' | q @ '\'' => { q @ '"' | q @ '\'' => {
t.push(toks.next().unwrap()); buf.push(toks.next().unwrap());
t.extend(read_until_closing_quote(toks, q)?); buf.extend(read_until_closing_quote(toks, q)?);
} }
'{' => { '{' => {
nesting += 1; nesting += 1;
t.push(toks.next().unwrap()); buf.push(toks.next().unwrap());
} }
'}' => { '}' => {
if nesting == 0 { if nesting == 0 {
break; break;
} else { } else {
nesting -= 1; nesting -= 1;
t.push(toks.next().unwrap()); buf.push(toks.next().unwrap());
} }
} }
'/' => { '/' => {
@ -79,33 +79,33 @@ pub(crate) fn read_until_closing_curly_brace<I: Iterator<Item = Token>>(
read_until_newline(toks); read_until_newline(toks);
devour_whitespace(toks); devour_whitespace(toks);
} }
Some(..) | None => t.push(next), Some(..) | None => buf.push(next),
}; };
continue; continue;
} }
'(' => { '(' => {
t.push(toks.next().unwrap()); buf.push(toks.next().unwrap());
t.extend(read_until_closing_paren(toks)?); buf.extend(read_until_closing_paren(toks)?);
} }
'\\' => { '\\' => {
t.push(toks.next().unwrap()); buf.push(toks.next().unwrap());
t.push(match toks.next() { buf.push(match toks.next() {
Some(tok) => tok, Some(tok) => tok,
None => continue, None => continue,
}); });
} }
_ => t.push(toks.next().unwrap()), _ => buf.push(toks.next().unwrap()),
} }
} }
devour_whitespace(toks); devour_whitespace(toks);
Ok(t) Ok(buf)
} }
/// Read tokens into a vector until a matching closing quote is found /// Read tokens into a vector until a matching closing quote is found
/// ///
/// The closing quote is included in the output /// The closing quote is included in the output
pub(crate) fn read_until_closing_quote<I: Iterator<Item = Token>>( pub(crate) fn read_until_closing_quote(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
q: char, q: char,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
@ -150,8 +150,8 @@ pub(crate) fn read_until_closing_quote<I: Iterator<Item = Token>>(
Ok(t) Ok(t)
} }
pub(crate) fn read_until_semicolon_or_closing_curly_brace<I: Iterator<Item = Token>>( pub(crate) fn read_until_semicolon_or_closing_curly_brace(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
let mut nesting = 0; let mut nesting = 0;
@ -202,8 +202,8 @@ pub(crate) fn read_until_semicolon_or_closing_curly_brace<I: Iterator<Item = Tok
Ok(t) Ok(t)
} }
pub(crate) fn read_until_closing_paren<I: Iterator<Item = Token>>( pub(crate) fn read_until_closing_paren(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
let mut scope = 0; let mut scope = 0;
@ -236,8 +236,8 @@ pub(crate) fn read_until_closing_paren<I: Iterator<Item = Token>>(
Ok(t) Ok(t)
} }
pub(crate) fn read_until_closing_square_brace<I: Iterator<Item = Token>>( pub(crate) fn read_until_closing_square_brace(
toks: &mut PeekMoreIterator<I>, toks: &mut PeekMoreIterator<IntoIter<Token>>,
) -> SassResult<Vec<Token>> { ) -> SassResult<Vec<Token>> {
let mut t = Vec::new(); let mut t = Vec::new();
let mut scope = 0; let mut scope = 0;