From 07b6f8aa0e1a3dca218451bb07d4d4826787291a Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Sat, 17 Dec 2022 17:50:06 +0800 Subject: [PATCH 01/17] Started implementing on a custom error type --- src/error.rs | 0 src/lib.rs | 1 + 2 files changed, 1 insertion(+) create mode 100644 src/error.rs diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 00000000..e69de29b diff --git a/src/lib.rs b/src/lib.rs index e5a48655..4f19459f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -146,6 +146,7 @@ pub use crate::node::Node; pub use crate::selector::Selector; pub mod element_ref; +pub mod error; pub mod html; pub mod node; pub mod selector; From afaf6dc572adebb1a08cd2612ec03b171b517f5f Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Sat, 17 Dec 2022 19:25:32 +0800 Subject: [PATCH 02/17] Implemented SelectorErrorKind --- src/error.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/error.rs b/src/error.rs index e69de29b..853fcdb8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -0,0 +1,65 @@ +//! Custom error types for diagnostics +//! Includes re-exported error types from dependencies + +use std::fmt::Display; + +use cssparser::{BasicParseErrorKind, ParseErrorKind, Token}; +use selectors::parser::SelectorParseErrorKind; + +/// Error type that is returned when calling `Selector::parse` +#[derive(Debug, Clone)] +pub enum SelectorErrorKind<'a> { + /// A `Token` was not expected + UnexpectedToken(Token<'a>), + + /// End-Of-Line was unexpected + EndOfLine, + + /// `@` rule is invalid + InvalidAtRule(String), + + /// The body of an `@` rule is invalid + InvalidAtRuleBody, + + /// The qualified rule is invalid + QualRuleInvalid, + + /// Expected a `::` for a pseudoelement + ExpectedColonOnPseudoElement(Token<'a>), + + /// Expected an identity for a pseudoelement + ExpectedIdentityOnPseudoElement(Token<'a>), + + /// A `SelectorParseErrorKind` error that isn't really supposed to happen did + UnexpectedSelectorParseError(SelectorParseErrorKind<'a>), +} + +impl<'a> From>> for SelectorErrorKind<'a> { + fn from(original: cssparser::ParseError<'a, SelectorParseErrorKind<'a>>) -> Self { + // To anyone who dares to read this code + // I commend you, i guess. I'm so sorry + // for the abomination that is casting + // stuff into this one enum + + match original.kind { + ParseErrorKind::Basic(err) => match err { + BasicParseErrorKind::UnexpectedToken(token) => Self::UnexpectedToken(token), + BasicParseErrorKind::EndOfInput => Self::EndOfLine, + BasicParseErrorKind::AtRuleInvalid(rule) => { + Self::InvalidAtRule(rule.clone().to_string()) + } + BasicParseErrorKind::AtRuleBodyInvalid => Self::InvalidAtRuleBody, + BasicParseErrorKind::QualifiedRuleInvalid => Self::QualRuleInvalid, + }, + ParseErrorKind::Custom(err) => match err { + SelectorParseErrorKind::PseudoElementExpectedColon(token) => { + Self::ExpectedColonOnPseudoElement(token) + } + SelectorParseErrorKind::PseudoElementExpectedIdent(token) => { + Self::ExpectedIdentityOnPseudoElement(token) + } + other => Self::UnexpectedSelectorParseError(other), + }, + } + } +} From a9cae7b77132053c36281a9d1d957bf72bab2c38 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Sat, 17 Dec 2022 20:01:52 +0800 Subject: [PATCH 03/17] Added utility function to render `Token`s --- src/error.rs | 2 + src/error/utils.rs | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 src/error/utils.rs diff --git a/src/error.rs b/src/error.rs index 853fcdb8..48d81317 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,6 +1,8 @@ //! Custom error types for diagnostics //! Includes re-exported error types from dependencies +mod utils; + use std::fmt::Display; use cssparser::{BasicParseErrorKind, ParseErrorKind, Token}; diff --git a/src/error/utils.rs b/src/error/utils.rs new file mode 100644 index 00000000..e64c788d --- /dev/null +++ b/src/error/utils.rs @@ -0,0 +1,95 @@ +use cssparser::Token; + +pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { + // THIS TOOK FOREVER TO IMPLEMENT + // TODO: Make this easier to read, I guess + + match token { + // TODO: Give these guys some better names + Token::Ident(ident) => format!("{}", ident.clone()), + Token::AtKeyword(value) => format!("@{}", value.clone()), + Token::Hash(name) | Token::IDHash(name) => format!("#{}", name.clone()), + Token::QuotedString(value) => format!("\"{}\"", value.clone()), + Token::Number { + has_sign: signed, + value: num, + int_value: _, + } => { + if *signed { + render_int_signed(*num) + } else { + render_int_unsigned(*num) + } + } + Token::Percentage { + has_sign: signed, + unit_value: num, + int_value: _, + } => { + format!( + "{}%", + if *signed { + render_int_signed(*num) + } else { + render_int_unsigned(*num) + } + ) + } + Token::Dimension { + has_sign: signed, + value: num, + int_value: _, + unit, + } => { + format!( + "{}{}", + if *signed { + render_int_signed(*num) + } else { + render_int_unsigned(*num) + }, + unit + ) + } + Token::WhiteSpace(_) => String::from(" "), + Token::Comment(comment) => format!("/* {} */", comment), + Token::Function(name) => format!("{}()", name), + Token::BadString(string) => format!("", string), + Token::BadUrl(url) => format!("", url), + // Single-character token + sc_token => String::from(match sc_token { + Token::Colon => ":", + Token::Semicolon => ";", + Token::Comma => ",", + Token::IncludeMatch => "~=", + Token::DashMatch => "|=", + Token::PrefixMatch => "^=", + Token::SuffixMatch => "$=", + Token::SubstringMatch => "*=", + Token::CDO => "", + Token::ParenthesisBlock => "<(", + Token::SquareBracketBlock => "<[", + Token::CurlyBracketBlock => "<{", + Token::CloseParenthesis => "<)", + Token::CloseSquareBracket => "<]", + Token::CloseCurlyBracket => "<}", + other => panic!( + "Token {:?} is not supposed to match as a single-character token!", + other + ), + }), + } +} + +fn render_int_signed(num: f32) -> String { + if num > 0.0 { + format!("+{}", num) + } else { + format!("-{}", num) + } +} + +fn render_int_unsigned(num: f32) -> String { + format!("{}", num) +} From 278e955ebceb92f12f300025443102df79737fc6 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Sat, 17 Dec 2022 20:12:42 +0800 Subject: [PATCH 04/17] Implemented Display trait for SelectorErrorKind --- src/error.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/error.rs b/src/error.rs index 48d81317..1b061970 100644 --- a/src/error.rs +++ b/src/error.rs @@ -65,3 +65,33 @@ impl<'a> From>> for Selecto } } } + +impl<'a> Display for SelectorErrorKind<'a> { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Self::UnexpectedToken(token) => { + format!("Token {:?} was not expected", utils::render_token(token)) + } + Self::EndOfLine => format!("Unexpected EOL"), + Self::InvalidAtRule(rule) => format!("Invalid @-rule {:?}", rule), + Self::InvalidAtRuleBody => format!("The body of an @-rule was invalid"), + Self::QualRuleInvalid => format!("The qualified name was invalid"), + Self::ExpectedColonOnPseudoElement(token) => format!( + "Expected a ':' token for pseudoelement, got {:?} instead", + utils::render_token(token) + ), + Self::ExpectedIdentityOnPseudoElement(token) => format!( + "Expected identity for pseudoelement, got {:?} instead", + utils::render_token(token) + ), + Self::UnexpectedSelectorParseError(err) => format!( + "Unexpected error occurred. PLEASE REPORT THIS TO THE DEVELOPER\n{:#?}", + err + ), + } + ) + } +} From a54d8c2121fa5c7b8ed54039c0b8d4478cdbc8b0 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Sat, 17 Dec 2022 20:19:34 +0800 Subject: [PATCH 05/17] Refactored Selector::parse --- src/selector.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/selector.rs b/src/selector.rs index d7b8b10b..922872ec 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -9,6 +9,7 @@ use html5ever::{LocalName, Namespace}; use selectors::parser::SelectorParseErrorKind; use selectors::{matching, parser, visitor}; +use crate::error::SelectorErrorKind; use crate::ElementRef; /// Wrapper around CSS selectors. @@ -23,12 +24,15 @@ pub struct Selector { impl Selector { /// Parses a CSS selector group. - pub fn parse( - selectors: &'_ str, - ) -> Result>> { + pub fn parse(selectors: &'_ str) -> Result { let mut parser_input = cssparser::ParserInput::new(selectors); let mut parser = cssparser::Parser::new(&mut parser_input); - parser::SelectorList::parse(&Parser, &mut parser).map(|list| Selector { selectors: list.0 }) + match parser::SelectorList::parse(&Parser, &mut parser) + .map(|list| Selector { selectors: list.0 }) + { + Ok(selected) => Ok(selected), + Err(err) => Err(SelectorErrorKind::from(err)), + } } /// Returns true if the element matches this selector. @@ -140,7 +144,7 @@ impl cssparser::ToCss for PseudoElement { } impl<'i> TryFrom<&'i str> for Selector { - type Error = cssparser::ParseError<'i, SelectorParseErrorKind<'i>>; + type Error = SelectorErrorKind<'i>; fn try_from(s: &'i str) -> Result { Selector::parse(s) From 32b1d78aab7bc5b9d1f95416dab502565a348b5d Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 07:30:32 +0800 Subject: [PATCH 06/17] Separated ErrorKind to SelectorErrorKind typecasting --- src/error.rs | 55 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/src/error.rs b/src/error.rs index 1b061970..6a486c18 100644 --- a/src/error.rs +++ b/src/error.rs @@ -38,30 +38,39 @@ pub enum SelectorErrorKind<'a> { impl<'a> From>> for SelectorErrorKind<'a> { fn from(original: cssparser::ParseError<'a, SelectorParseErrorKind<'a>>) -> Self { - // To anyone who dares to read this code - // I commend you, i guess. I'm so sorry - // for the abomination that is casting - // stuff into this one enum - + // NOTE: This could be improved, but I dont + // exactly know how match original.kind { - ParseErrorKind::Basic(err) => match err { - BasicParseErrorKind::UnexpectedToken(token) => Self::UnexpectedToken(token), - BasicParseErrorKind::EndOfInput => Self::EndOfLine, - BasicParseErrorKind::AtRuleInvalid(rule) => { - Self::InvalidAtRule(rule.clone().to_string()) - } - BasicParseErrorKind::AtRuleBodyInvalid => Self::InvalidAtRuleBody, - BasicParseErrorKind::QualifiedRuleInvalid => Self::QualRuleInvalid, - }, - ParseErrorKind::Custom(err) => match err { - SelectorParseErrorKind::PseudoElementExpectedColon(token) => { - Self::ExpectedColonOnPseudoElement(token) - } - SelectorParseErrorKind::PseudoElementExpectedIdent(token) => { - Self::ExpectedIdentityOnPseudoElement(token) - } - other => Self::UnexpectedSelectorParseError(other), - }, + ParseErrorKind::Basic(err) => SelectorErrorKind::from(err), + ParseErrorKind::Custom(err) => SelectorErrorKind::from(err), + } + } +} + +impl<'a> From> for SelectorErrorKind<'a> { + fn from(err: BasicParseErrorKind<'a>) -> Self { + match err { + BasicParseErrorKind::UnexpectedToken(token) => Self::UnexpectedToken(token), + BasicParseErrorKind::EndOfInput => Self::EndOfLine, + BasicParseErrorKind::AtRuleInvalid(rule) => { + Self::InvalidAtRule(rule.clone().to_string()) + } + BasicParseErrorKind::AtRuleBodyInvalid => Self::InvalidAtRuleBody, + BasicParseErrorKind::QualifiedRuleInvalid => Self::QualRuleInvalid, + } + } +} + +impl<'a> From> for SelectorErrorKind<'a> { + fn from(err: SelectorParseErrorKind<'a>) -> Self { + match err { + SelectorParseErrorKind::PseudoElementExpectedColon(token) => { + Self::ExpectedColonOnPseudoElement(token) + } + SelectorParseErrorKind::PseudoElementExpectedIdent(token) => { + Self::ExpectedIdentityOnPseudoElement(token) + } + other => Self::UnexpectedSelectorParseError(other), } } } From 103f352613dc55414df726dbd2fee50db5fa181f Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 07:48:15 +0800 Subject: [PATCH 07/17] Implemented Error for SelectorErrorKind --- src/error.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/error.rs b/src/error.rs index 6a486c18..fbcdfbcf 100644 --- a/src/error.rs +++ b/src/error.rs @@ -3,7 +3,7 @@ mod utils; -use std::fmt::Display; +use std::{error::Error, fmt::Display}; use cssparser::{BasicParseErrorKind, ParseErrorKind, Token}; use selectors::parser::SelectorParseErrorKind; @@ -104,3 +104,18 @@ impl<'a> Display for SelectorErrorKind<'a> { ) } } + +impl<'a> Error for SelectorErrorKind<'a> { + fn description(&self) -> &str { + match self { + Self::UnexpectedToken(_) => "Token was not expected", + Self::EndOfLine => "Unexpected EOL", + Self::InvalidAtRule(_) => "Invalid @-rule", + Self::InvalidAtRuleBody => "The body of an @-rule was invalid", + Self::QualRuleInvalid => "The qualified name was invalid", + Self::ExpectedColonOnPseudoElement(_) => "Missing colon character on pseudoelement", + Self::ExpectedIdentityOnPseudoElement(_) => "Missing pseudoelement identity", + Self::UnexpectedSelectorParseError(_) => "Unexpected error", + } + } +} From 4316b627a0878e7e8aba421510879afdf0b6b4fa Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 08:08:33 +0800 Subject: [PATCH 08/17] Added helper function for rendering ints --- src/error/utils.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/error/utils.rs b/src/error/utils.rs index e64c788d..98ede250 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -82,6 +82,14 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { } } +fn render_int(signed: bool, number: f32) -> String { + if signed { + render_int_signed(num) + } else { + render_int_unsigned(num) + } +} + fn render_int_signed(num: f32) -> String { if num > 0.0 { format!("+{}", num) From 57273c4b284a4a3a1ddbead06cb083b33816f870 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 08:15:29 +0800 Subject: [PATCH 09/17] Added helper function to render numerical tokens (`Number` and `Percentage`) --- src/error/utils.rs | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index 98ede250..eb5eea45 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -14,43 +14,18 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { has_sign: signed, value: num, int_value: _, - } => { - if *signed { - render_int_signed(*num) - } else { - render_int_unsigned(*num) - } } - Token::Percentage { + | Token::Percentage { has_sign: signed, unit_value: num, int_value: _, - } => { - format!( - "{}%", - if *signed { - render_int_signed(*num) - } else { - render_int_unsigned(*num) - } - ) - } + } => render_number(*signed, *num, &token), Token::Dimension { has_sign: signed, value: num, int_value: _, unit, - } => { - format!( - "{}{}", - if *signed { - render_int_signed(*num) - } else { - render_int_unsigned(*num) - }, - unit - ) - } + } => format!("{}{}", render_int(*signed, *num), unit), Token::WhiteSpace(_) => String::from(" "), Token::Comment(comment) => format!("/* {} */", comment), Token::Function(name) => format!("{}()", name), @@ -82,7 +57,17 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { } } -fn render_int(signed: bool, number: f32) -> String { +fn render_number(signed: bool, num: f32, token: &Token) -> String { + let num = render_int(signed, num); + + match token { + Token::Number { .. } => format!("{}", num), + Token::Percentage { .. } => format!("{}%", num), + _ => panic!("render_number is not supposed to be called on a non-numerical token"), + } +} + +fn render_int(signed: bool, num: f32) -> String { if signed { render_int_signed(num) } else { From bfae7055253449a42d395639702e52da2d3323dc Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 08:16:44 +0800 Subject: [PATCH 10/17] Added helper function to render single-character tokens --- src/error/utils.rs | 48 +++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index eb5eea45..2bf3506f 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -32,31 +32,35 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { Token::BadString(string) => format!("", string), Token::BadUrl(url) => format!("", url), // Single-character token - sc_token => String::from(match sc_token { - Token::Colon => ":", - Token::Semicolon => ";", - Token::Comma => ",", - Token::IncludeMatch => "~=", - Token::DashMatch => "|=", - Token::PrefixMatch => "^=", - Token::SuffixMatch => "$=", - Token::SubstringMatch => "*=", - Token::CDO => "", - Token::ParenthesisBlock => "<(", - Token::SquareBracketBlock => "<[", - Token::CurlyBracketBlock => "<{", - Token::CloseParenthesis => "<)", - Token::CloseSquareBracket => "<]", - Token::CloseCurlyBracket => "<}", - other => panic!( - "Token {:?} is not supposed to match as a single-character token!", - other - ), - }), + sc_token => render_single_char_token(&sc_token), } } +fn render_single_char_token(token: &Token) -> String { + String::from(match token { + Token::Colon => ":", + Token::Semicolon => ";", + Token::Comma => ",", + Token::IncludeMatch => "~=", + Token::DashMatch => "|=", + Token::PrefixMatch => "^=", + Token::SuffixMatch => "$=", + Token::SubstringMatch => "*=", + Token::CDO => "", + Token::ParenthesisBlock => "<(", + Token::SquareBracketBlock => "<[", + Token::CurlyBracketBlock => "<{", + Token::CloseParenthesis => "<)", + Token::CloseSquareBracket => "<]", + Token::CloseCurlyBracket => "<}", + other => panic!( + "Token {:?} is not supposed to match as a single-character token!", + other + ), + }) +} + fn render_number(signed: bool, num: f32, token: &Token) -> String { let num = render_int(signed, num); From be5d791caadb23c0e78424afb7fece906edbf276 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 20:32:05 +0800 Subject: [PATCH 11/17] `.clone()`'d the data when rendering `Token`s --- src/error/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index 2bf3506f..e8691d9d 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -27,10 +27,10 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { unit, } => format!("{}{}", render_int(*signed, *num), unit), Token::WhiteSpace(_) => String::from(" "), - Token::Comment(comment) => format!("/* {} */", comment), - Token::Function(name) => format!("{}()", name), - Token::BadString(string) => format!("", string), - Token::BadUrl(url) => format!("", url), + Token::Comment(comment) => format!("/* {} */", comment.clone()), + Token::Function(name) => format!("{}()", name.clone()), + Token::BadString(string) => format!("", string.clone()), + Token::BadUrl(url) => format!("", url.clone()), // Single-character token sc_token => render_single_char_token(&sc_token), } From a7452bcfb86c842986560ae29b4a77b7efa13ad5 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 20:33:06 +0800 Subject: [PATCH 12/17] Removed caps-lock on line 100 --- src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/error.rs b/src/error.rs index fbcdfbcf..2320054e 100644 --- a/src/error.rs +++ b/src/error.rs @@ -97,7 +97,7 @@ impl<'a> Display for SelectorErrorKind<'a> { utils::render_token(token) ), Self::UnexpectedSelectorParseError(err) => format!( - "Unexpected error occurred. PLEASE REPORT THIS TO THE DEVELOPER\n{:#?}", + "Unexpected error occurred. Please report this to the developer\n{:#?}", err ), } From 7f4cf0fbe9b3be8ebb8a163273b6df247d2fbd45 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 20:46:31 +0800 Subject: [PATCH 13/17] Switched the `match` block for `.map_err()` --- src/selector.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/selector.rs b/src/selector.rs index 922872ec..cbc7044c 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -27,12 +27,10 @@ impl Selector { pub fn parse(selectors: &'_ str) -> Result { let mut parser_input = cssparser::ParserInput::new(selectors); let mut parser = cssparser::Parser::new(&mut parser_input); - match parser::SelectorList::parse(&Parser, &mut parser) + + parser::SelectorList::parse(&Parser, &mut parser) .map(|list| Selector { selectors: list.0 }) - { - Ok(selected) => Ok(selected), - Err(err) => Err(SelectorErrorKind::from(err)), - } + .map_err(|e| SelectorErrorKind::from(e)) } /// Returns true if the element matches this selector. From 5cb378a23449b73df4c4413a4433590e63525a27 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 20:58:46 +0800 Subject: [PATCH 14/17] Resolved (some of) Clippy's warnings Only did code which I touched, though --- src/error.rs | 6 +++--- src/error/utils.rs | 11 +++++------ src/selector.rs | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/error.rs b/src/error.rs index 2320054e..1b2bc9ee 100644 --- a/src/error.rs +++ b/src/error.rs @@ -84,10 +84,10 @@ impl<'a> Display for SelectorErrorKind<'a> { Self::UnexpectedToken(token) => { format!("Token {:?} was not expected", utils::render_token(token)) } - Self::EndOfLine => format!("Unexpected EOL"), + Self::EndOfLine => "Unexpected EOL".to_string(), Self::InvalidAtRule(rule) => format!("Invalid @-rule {:?}", rule), - Self::InvalidAtRuleBody => format!("The body of an @-rule was invalid"), - Self::QualRuleInvalid => format!("The qualified name was invalid"), + Self::InvalidAtRuleBody => "The body of an @-rule was invalid".to_string(), + Self::QualRuleInvalid => "The qualified name was invalid".to_string(), Self::ExpectedColonOnPseudoElement(token) => format!( "Expected a ':' token for pseudoelement, got {:?} instead", utils::render_token(token) diff --git a/src/error/utils.rs b/src/error/utils.rs index e8691d9d..3a581638 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -1,8 +1,7 @@ use cssparser::Token; -pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { +pub(crate) fn render_token(token: &Token<'_>) -> String { // THIS TOOK FOREVER TO IMPLEMENT - // TODO: Make this easier to read, I guess match token { // TODO: Give these guys some better names @@ -19,7 +18,7 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { has_sign: signed, unit_value: num, int_value: _, - } => render_number(*signed, *num, &token), + } => render_number(*signed, *num, token), Token::Dimension { has_sign: signed, value: num, @@ -27,12 +26,12 @@ pub(crate) fn render_token<'a>(token: &Token<'a>) -> String { unit, } => format!("{}{}", render_int(*signed, *num), unit), Token::WhiteSpace(_) => String::from(" "), - Token::Comment(comment) => format!("/* {} */", comment.clone()), + Token::Comment(comment) => format!("/* {} */", &(*comment).clone()), Token::Function(name) => format!("{}()", name.clone()), Token::BadString(string) => format!("", string.clone()), Token::BadUrl(url) => format!("", url.clone()), // Single-character token - sc_token => render_single_char_token(&sc_token), + sc_token => render_single_char_token(sc_token), } } @@ -65,7 +64,7 @@ fn render_number(signed: bool, num: f32, token: &Token) -> String { let num = render_int(signed, num); match token { - Token::Number { .. } => format!("{}", num), + Token::Number { .. } => num.to_string(), Token::Percentage { .. } => format!("{}%", num), _ => panic!("render_number is not supposed to be called on a non-numerical token"), } diff --git a/src/selector.rs b/src/selector.rs index cbc7044c..2e1a14e7 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -30,7 +30,7 @@ impl Selector { parser::SelectorList::parse(&Parser, &mut parser) .map(|list| Selector { selectors: list.0 }) - .map_err(|e| SelectorErrorKind::from(e)) + .map_err(SelectorErrorKind::from) } /// Returns true if the element matches this selector. From 8fdaaf6ffe3e12525121b8f3986293f5aeed5914 Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 21:05:50 +0800 Subject: [PATCH 15/17] Changed `num.to_string()` Forgot this is already a `String` --- src/error/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index 3a581638..80a5e185 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -64,7 +64,7 @@ fn render_number(signed: bool, num: f32, token: &Token) -> String { let num = render_int(signed, num); match token { - Token::Number { .. } => num.to_string(), + Token::Number { .. } => num, Token::Percentage { .. } => format!("{}%", num), _ => panic!("render_number is not supposed to be called on a non-numerical token"), } From 9f2dbebba9d32405958d4f14e619b56afa52a10e Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 21:06:40 +0800 Subject: [PATCH 16/17] Reverted a change in `render_token` --- src/error/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index 80a5e185..aed15438 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -26,7 +26,7 @@ pub(crate) fn render_token(token: &Token<'_>) -> String { unit, } => format!("{}{}", render_int(*signed, *num), unit), Token::WhiteSpace(_) => String::from(" "), - Token::Comment(comment) => format!("/* {} */", &(*comment).clone()), + Token::Comment(comment) => format!("/* {} */", comment.clone()), Token::Function(name) => format!("{}()", name.clone()), Token::BadString(string) => format!("", string.clone()), Token::BadUrl(url) => format!("", url.clone()), From 78b4d530bc132b4131610ec901916d447884193c Mon Sep 17 00:00:00 2001 From: Kiwifuit Date: Mon, 19 Dec 2022 21:14:02 +0800 Subject: [PATCH 17/17] Removed `.clone()` for `comment` --- src/error/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/error/utils.rs b/src/error/utils.rs index aed15438..a1bcb0e7 100644 --- a/src/error/utils.rs +++ b/src/error/utils.rs @@ -26,7 +26,7 @@ pub(crate) fn render_token(token: &Token<'_>) -> String { unit, } => format!("{}{}", render_int(*signed, *num), unit), Token::WhiteSpace(_) => String::from(" "), - Token::Comment(comment) => format!("/* {} */", comment.clone()), + Token::Comment(comment) => format!("/* {} */", comment), Token::Function(name) => format!("{}()", name.clone()), Token::BadString(string) => format!("", string.clone()), Token::BadUrl(url) => format!("", url.clone()),