diff --git a/Cargo.lock b/Cargo.lock index 08383af..183406d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -370,14 +370,14 @@ dependencies = [ [[package]] name = "cssparser" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9cdaae01d5ed7882b04d795e7f752f46ff52d2fa3b50a20d28c464510bba98" +checksum = "11119743ad110e8c1bdccd930d7f5c30c99e5fc76a7b63ec9807e84eef0c5f59" dependencies = [ "cssparser-macros 0.7.0", "dtoa-short", "itoa", - "phf 0.13.1", + "phf 0.14.0", "smallvec", ] @@ -1036,7 +1036,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" dependencies = [ - "phf_macros", + "phf_macros 0.13.1", "phf_shared 0.13.1", "serde", ] @@ -1047,6 +1047,7 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "010378780309880b08997fae13be7834dba947d36393bd372f2b1556deb2a2f6" dependencies = [ + "phf_macros 0.14.0", "phf_shared 0.14.0", "serde", ] @@ -1104,6 +1105,19 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "phf_macros" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fa8d0ca26d424d27630da600c6624696e7dec8bf7b3b492b383c5dc49e5e085" +dependencies = [ + "phf_generator 0.14.0", + "phf_shared 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "phf_shared" version = "0.13.1" @@ -1437,7 +1451,7 @@ name = "scrape-core" version = "0.2.13" dependencies = [ "criterion", - "cssparser 0.37.0", + "cssparser 0.38.0", "encoding_rs", "html5ever", "lol_html", @@ -1446,7 +1460,7 @@ dependencies = [ "memmap2", "precomputed-hash", "rayon", - "selectors 0.40.0", + "selectors 0.41.0", "serde", "serde_json", "thiserror", @@ -1501,26 +1515,24 @@ dependencies = [ "phf_codegen 0.13.1", "precomputed-hash", "rustc-hash", - "servo_arc", + "servo_arc 0.4.3", "smallvec", ] [[package]] name = "selectors" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeee001a77567bb05e71652718d3ff76d8697c151ac523e68e9513194eb2b75a" +checksum = "8322aebea94a6cc288ff884e8a49bdbceef60206c400c6c46d22e62fc4fd91a6" dependencies = [ "bitflags", - "cssparser 0.37.0", + "cssparser 0.38.0", "derive_more", "log", "new_debug_unreachable", - "phf 0.13.1", - "phf_codegen 0.13.1", "precomputed-hash", "rustc-hash", - "servo_arc", + "servo_arc 0.5.0", "smallvec", ] @@ -1582,6 +1594,15 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "servo_arc" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eceb519ec34d8290aaf6e46f435102f2bfa63f22b05a144fb16ab266d3b198" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "shlex" version = "2.0.1" diff --git a/Cargo.toml b/Cargo.toml index d8d141e..bd6c6ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ assert_cmd = "2.2" clap = "4.6" criterion = { version = "0.8", default-features = false } csv = "1.4" -cssparser = "0.37" +cssparser = "0.38" encoding_rs = "0.8" html5ever = "0.40" is-terminal = "0.4" @@ -39,7 +39,7 @@ scrape-cli = { path = "crates/scrape-cli", version = "0.2.13" } scrape-core = { path = "crates/scrape-core", default-features = false, version = "0.2.13" } scraper = "0.27" select = "0.6" -selectors = "0.40" +selectors = "0.41" serde = "1.0" serde_json = "1.0" tempfile = "3.27" diff --git a/crates/scrape-core/src/query/selector.rs b/crates/scrape-core/src/query/selector.rs index 38d1eb9..f50decd 100644 --- a/crates/scrape-core/src/query/selector.rs +++ b/crates/scrape-core/src/query/selector.rs @@ -154,8 +154,6 @@ pub enum NonTSPseudoClass { } impl selectors::parser::NonTSPseudoClass for NonTSPseudoClass { - type Impl = ScrapeSelector; - fn is_active_or_hover(&self) -> bool { false } @@ -181,9 +179,7 @@ impl ToCss for NonTSPseudoClass { #[derive(Debug, Clone, PartialEq, Eq)] pub enum PseudoElement {} -impl selectors::parser::PseudoElement for PseudoElement { - type Impl = ScrapeSelector; -} +impl selectors::parser::PseudoElement for PseudoElement {} impl ToCss for PseudoElement { fn to_css(&self, _dest: &mut W) -> fmt::Result @@ -213,22 +209,18 @@ struct SelectorParser; impl<'i> Parser<'i> for SelectorParser { type Impl = ScrapeSelector; - type Error = SelectorParseErrorKind<'i>; + type Error = SelectorParseErrorKind; fn parse_non_ts_pseudo_class( &self, - location: cssparser::SourceLocation, name: cssparser::CowRcStr<'i>, - ) -> Result> { + ) -> Result> { match name.as_ref() { "link" => Ok(NonTSPseudoClass::Link), "any-link" => Ok(NonTSPseudoClass::AnyLink), - _ => Err(cssparser::ParseError { - kind: cssparser::ParseErrorKind::Custom( - SelectorParseErrorKind::UnsupportedPseudoClassOrElement(name), - ), - location, - }), + _ => Err(cssparser::ParseError::custom( + SelectorParseErrorKind::UnsupportedPseudoClassOrElement, + )), } } } @@ -247,15 +239,15 @@ impl<'i> Parser<'i> for SelectorParser { /// let selectors = parse_selector("div.container > span").unwrap(); /// ``` pub fn parse_selector(selector: &str) -> QueryResult> { - let mut parser_input = cssparser::ParserInput::new(selector); - let mut parser = cssparser::Parser::new(&mut parser_input); + let mut parser = cssparser::Parser::new(selector); - SelectorList::parse(&SelectorParser, &mut parser, ParseRelative::No).map_err(|e| { + SelectorList::parse(&SelectorParser, &mut parser, ParseRelative::No).map_err(|_| { // Sanitize error messages to expose only position info, avoiding potential // information disclosure from internal parser state in public error messages. + let location = parser.current_source_location(); QueryError::invalid_selector(format!( "invalid selector at line {}, column {}", - e.location.line, e.location.column + location.line, location.column )) }) }