diff --git a/Cargo.lock b/Cargo.lock index 5ff6fa328d461..de7c13ea95d65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -24,7 +24,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", "once_cell", "version_check", "zerocopy", @@ -187,12 +186,6 @@ dependencies = [ "allocator-api2", ] -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.7.2" @@ -408,29 +401,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "cssparser" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b3df4f93e5fbbe73ec01ec8d3f68bba73107993a5b1e7519273c32db9b0d5be" -dependencies = [ - "cssparser-macros", - "dtoa-short", - "itoa", - "phf 0.11.2", - "smallvec", -] - -[[package]] -name = "cssparser-macros" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ctor" version = "0.2.8" @@ -477,17 +447,6 @@ dependencies = [ "powerfmt", ] -[[package]] -name = "derive_more" -version = "0.99.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "digest" version = "0.10.7" @@ -498,21 +457,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "dtoa" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" - -[[package]] -name = "dtoa-short" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" -dependencies = [ - "dtoa", -] - [[package]] name = "dunce" version = "1.0.5" @@ -525,12 +469,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" -[[package]] -name = "ego-tree" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642" - [[package]] name = "either" version = "1.13.0" @@ -628,16 +566,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.31" @@ -727,15 +655,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fxhash" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" -dependencies = [ - "byteorder", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -746,15 +665,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "getopts" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width 0.1.14", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -860,20 +770,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "html5ever" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "httparse" version = "1.9.5" @@ -1101,12 +997,6 @@ dependencies = [ "url", ] -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - [[package]] name = "markdown" version = "1.0.0-alpha.21" @@ -1116,20 +1006,6 @@ dependencies = [ "unicode-id", ] -[[package]] -name = "markup5ever" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" -dependencies = [ - "log", - "phf 0.11.2", - "phf_codegen 0.11.2", - "string_cache", - "string_cache_codegen", - "tendril", -] - [[package]] name = "memchr" version = "2.7.4" @@ -1252,12 +1128,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nom" version = "7.1.3" @@ -1689,7 +1559,7 @@ dependencies = [ "oxc_semantic", "oxc_span", "oxc_syntax", - "phf 0.11.2", + "phf", "project-root", "rayon", "regex", @@ -1867,7 +1737,7 @@ dependencies = [ "oxc_diagnostics", "oxc_estree", "oxc_span", - "phf 0.11.2", + "phf", "rustc-hash", "serde", "unicode-id-start", @@ -1910,7 +1780,7 @@ dependencies = [ "oxc_parser", "oxc_span", "oxc_syntax", - "phf 0.11.2", + "phf", "rustc-hash", "serde", "serde_json", @@ -1957,7 +1827,7 @@ dependencies = [ "oxc_estree", "oxc_index", "oxc_span", - "phf 0.11.2", + "phf", "rustc-hash", "ryu-js", "serde", @@ -2178,15 +2048,6 @@ dependencies = [ "indexmap", ] -[[package]] -name = "phf" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" -dependencies = [ - "phf_shared 0.10.0", -] - [[package]] name = "phf" version = "0.11.2" @@ -2194,37 +2055,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" dependencies = [ "phf_macros", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_codegen" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", -] - -[[package]] -name = "phf_codegen" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" -dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand", + "phf_shared", ] [[package]] @@ -2233,7 +2064,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ - "phf_shared 0.11.2", + "phf_shared", "rand", ] @@ -2243,22 +2074,13 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn", ] -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - [[package]] name = "phf_shared" version = "0.11.2" @@ -2312,21 +2134,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppv-lite86" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] - -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "prettyplease" version = "0.2.25" @@ -2367,18 +2174,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", "rand_core", ] @@ -2387,9 +2182,6 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] [[package]] name = "rayon" @@ -2638,41 +2430,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scraper" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90460b31bfe1fc07be8262e42c665ad97118d4585869de9345a84d501a9eaf0" -dependencies = [ - "ahash", - "cssparser", - "ego-tree", - "getopts", - "html5ever", - "once_cell", - "selectors", - "tendril", -] - -[[package]] -name = "selectors" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb30575f3638fc8f6815f448d50cb1a2e255b0897985c8c59f4d37b72a07b06" -dependencies = [ - "bitflags 2.6.0", - "cssparser", - "derive_more", - "fxhash", - "log", - "new_debug_unreachable", - "phf 0.10.1", - "phf_codegen 0.10.0", - "precomputed-hash", - "servo_arc", - "smallvec", -] - [[package]] name = "semver" version = "1.0.23" @@ -2762,15 +2519,6 @@ dependencies = [ "syn", ] -[[package]] -name = "servo_arc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d036d71a959e00c77a63538b90a6c2390969f9772b096ea837205c6bd0491a44" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "sha1" version = "0.10.6" @@ -2872,12 +2620,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "1.1.0" @@ -2890,32 +2632,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9557cb6521e8d009c51a8666f09356f4b817ba9ba0981a305bd86aee47bd35c" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - [[package]] name = "subtle" version = "2.6.1" @@ -2955,17 +2671,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - [[package]] name = "textwrap" version = "0.16.1" @@ -3339,12 +3044,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "valuable" version = "0.1.0" @@ -3470,7 +3169,6 @@ dependencies = [ "pico-args", "project-root", "schemars", - "scraper", "serde", "serde_json", ] @@ -3660,7 +3358,6 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive", ] diff --git a/Cargo.toml b/Cargo.toml index 9389e25ac094a..ea92c8549354f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -181,7 +181,6 @@ rustc-hash = "2.*" ryu-js = "1.0.1" saphyr = "0.0.3" schemars = "0.8.21" -scraper = "0.20.0" seq-macro = "0.3.5" serde = "1.0.210" serde-wasm-bindgen = "0.6.5" diff --git a/tasks/website/Cargo.toml b/tasks/website/Cargo.toml index 57dc0fd36c127..92ce082b5210c 100644 --- a/tasks/website/Cargo.toml +++ b/tasks/website/Cargo.toml @@ -35,7 +35,6 @@ oxc_span = { workspace = true } insta = { workspace = true } markdown = { workspace = true } -scraper = { workspace = true } [package.metadata.cargo-shear] ignored = ["bpaf"] diff --git a/tasks/website/src/linter/rules/mod.rs b/tasks/website/src/linter/rules/mod.rs index 3bf9cd234d4bd..6bb02421aace4 100644 --- a/tasks/website/src/linter/rules/mod.rs +++ b/tasks/website/src/linter/rules/mod.rs @@ -1,8 +1,6 @@ mod doc_page; mod html; mod table; -#[cfg(test)] -mod test; use std::{ borrow::Cow, diff --git a/tasks/website/src/linter/rules/test.rs b/tasks/website/src/linter/rules/test.rs index 5e78991764daa..f2a8e3439993f 100644 --- a/tasks/website/src/linter/rules/test.rs +++ b/tasks/website/src/linter/rules/test.rs @@ -6,9 +6,8 @@ use oxc_diagnostics::NamedSource; use oxc_linter::table::RuleTable; use oxc_parser::Parser; use oxc_span::SourceType; -use scraper::{ElementRef, Html, Selector}; -use super::{render_rule_docs_page, render_rules_table}; +use super::render_rules_table; static TABLE: OnceLock = OnceLock::new(); @@ -21,96 +20,3 @@ fn parse(filename: &str, jsx: &str) -> Result<(), String> { let source_type = SourceType::from_path(&filename).unwrap(); parse_type(&filename, jsx, source_type) } - -fn parse_type(filename: &str, source_text: &str, source_type: SourceType) -> Result<(), String> { - let alloc = Allocator::default(); - let ret = Parser::new(&alloc, source_text, source_type).parse(); - - if ret.errors.is_empty() { - Ok(()) - } else { - let num_errs = ret.errors.len(); - let source = Arc::new(NamedSource::new(filename, source_text.to_string())); - ret.errors - .into_iter() - .map(|e| e.with_source_code(Arc::clone(&source))) - .for_each(|e| println!("{e:?}")); - Err(format!("{num_errs} errors occurred while parsing {filename}.jsx")) - } -} - -#[test] -fn test_rules_table() { - const PREFIX: &str = "/docs/guide/usage/linter/rules"; - let options = Options::gfm(); - let rendered_table = render_rules_table(table(), PREFIX); - let rendered_html = to_html_with_options(&rendered_table, &options).unwrap(); - assert!(rendered_html.contains("")); - let html = Html::parse_fragment(&rendered_html); - assert!(html.errors.is_empty(), "{:#?}", html.errors); - let jsx = format!("const Table = () => <>{rendered_html}"); - parse("rules-table", &jsx).unwrap(); -} - -#[test] -fn test_doc_pages() { - let mut options = Options::gfm(); - options.compile.allow_dangerous_html = true; - - for section in &table().sections { - let category = section.category; - let code = Selector::parse("code").unwrap(); - - for row in §ion.rows { - let filename = format!("{category}/{}/{}", row.plugin, row.name); - let docs = render_rule_docs_page(row).unwrap(); - let docs = to_html_with_options(&docs, &options).unwrap(); - let docs = if let Some(end_of_autogen_comment) = docs.find("-->") { - &docs[end_of_autogen_comment + 4..] - } else { - &docs - }; - - // ensure code examples are valid - { - let html = Html::parse_fragment(docs); - for code_el in html.select(&code) { - let inner = code_el.inner_html(); - let inner = - inner.replace("<", "<").replace(">", ">").replace("&", "&"); - let filename = filename.clone() + "/code-snippet"; - let Some(source_type) = source_type_from_code_element(code_el) else { - continue; - }; - if row.plugin == "nextjs" { - // Almost all Next.js rules are missing docs. - continue; - } - assert!( - !inner.trim().is_empty(), - "Rule '{}' has an empty code snippet", - row.name - ); - parse_type(&filename, &inner, source_type).unwrap(); - } - } - } - } -} - -fn source_type_from_code_element(code: ElementRef) -> Option { - let class = code.attr("class")?; - let maybe_class = class.split('-').collect::>(); - let ["language", lang] = maybe_class.as_slice() else { - return None; - }; - - match *lang { - "javascript" | "js" => Some(SourceType::default()), - "typescript" | "ts" => Some(SourceType::default().with_typescript(true)), - "tsx" => Some(SourceType::tsx()), - // FIXME: lots of jsx examples are usefully succinct but not valid JSX. - // "jsx" => Some(SourceType::default().with_jsx(true).with_always_strict(true)), - _ => None, - } -}