[INFO] fetching crate rs-trafilatura 0.2.2...
[INFO] testing rs-trafilatura-0.2.2 against beta-2026-04-21 for beta-1.96-2
[INFO] extracting crate rs-trafilatura 0.2.2 into /workspace/builds/worker-5-tc2/source
[INFO] removed /workspace/builds/worker-5-tc2/source/rust-toolchain.toml
[INFO] started tweaking crates.io crate rs-trafilatura 0.2.2
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate rs-trafilatura 0.2.2
[INFO] tweaked toml for crates.io crate rs-trafilatura 0.2.2 written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate rs-trafilatura 0.2.2 on toolchain beta-2026-04-21
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rs-trafilatura 0.2.2 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-04-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 20243c5614a8e1bac77c74dd0c61aeef71a5a5dd298c9f143fec0146d5f07c98
[INFO] running `Command { std: "docker" "start" "-a" "20243c5614a8e1bac77c74dd0c61aeef71a5a5dd298c9f143fec0146d5f07c98", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "20243c5614a8e1bac77c74dd0c61aeef71a5a5dd298c9f143fec0146d5f07c98", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "20243c5614a8e1bac77c74dd0c61aeef71a5a5dd298c9f143fec0146d5f07c98", kill_on_drop: false }`
[INFO] [stdout] 20243c5614a8e1bac77c74dd0c61aeef71a5a5dd298c9f143fec0146d5f07c98
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 9e187d7518591bdeb1fb5dd202eec939e2a630aa49fa914318e6ab0ad79d430e
[INFO] running `Command { std: "docker" "start" "-a" "9e187d7518591bdeb1fb5dd202eec939e2a630aa49fa914318e6ab0ad79d430e", kill_on_drop: false }`
[INFO] [stderr]    Compiling siphasher v1.0.2
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling precomputed-hash v0.1.1
[INFO] [stderr]    Compiling mac v0.1.1
[INFO] [stderr]    Compiling dtoa v1.0.11
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling utf-8 v0.7.6
[INFO] [stderr]    Compiling bit-vec v0.8.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling rustc-hash v2.1.1
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling percent-encoding v2.3.2
[INFO] [stderr]    Compiling futf v0.1.5
[INFO] [stderr]    Compiling servo_arc v0.4.3
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling tendril v0.4.3
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling web-page-classifier v0.1.0
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling phf_shared v0.13.1
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling phf_generator v0.13.1
[INFO] [stderr]    Compiling phf_codegen v0.13.1
[INFO] [stderr]    Compiling string_cache_codegen v0.6.1
[INFO] [stderr]    Compiling selectors v0.33.0
[INFO] [stderr]    Compiling web_atoms v0.2.3
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling string_cache v0.9.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling phf_macros v0.13.1
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling cssparser-macros v0.6.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling phf v0.13.1
[INFO] [stderr]    Compiling cssparser v0.36.0
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling markup5ever v0.36.1
[INFO] [stderr]    Compiling html5ever v0.36.1
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling dom_query v0.24.0
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling quick_html2md v0.2.1
[INFO] [stderr]    Compiling html-cleaning v0.3.0
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling rs-trafilatura v0.2.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::result::Metadata`
[INFO] [stdout]    --> src/page_type/mod.rs:861:5
[INFO] [stdout]     |
[INFO] [stdout] 861 | use crate::result::Metadata;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes`
[INFO] [stdout]   --> src/etree.rs:24:22
[INFO] [stdout]    |
[INFO] [stdout] 24 |     append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove,
[INFO] [stdout]    |                      ^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text,
[INFO] [stdout]    |                                                                               ^^^^^^^^^^
[INFO] [stdout] 26 |     Document,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CleaningOptions`
[INFO] [stdout]    --> src/html_processing.rs:202:42
[INFO] [stdout]     |
[INFO] [stdout] 202 |         use html_cleaning::{HtmlCleaner, CleaningOptions};
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `comments::extract_comments`
[INFO] [stdout]   --> src/extractor/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub use comments::extract_comments;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `baseline`, `candidate_is_usable`, `compare_external_extraction`, and `extract_with_fallback`
[INFO] [stdout]   --> src/extractor/mod.rs:54:20
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use fallback::{baseline, candidate_is_usable, compare_external_extraction, extract_with_fallback};
[INFO] [stdout]    |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pipeline::extract_content`
[INFO] [stdout]   --> src/extractor/mod.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub use pipeline::extract_content;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `state::ExtractionState`
[INFO] [stdout]   --> src/extractor/mod.rs:56:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub use state::ExtractionState;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_title_element`, `extract_dom_author`, `extract_dom_categories`, `extract_dom_license`, `extract_dom_sitename`, `extract_dom_tags`, `extract_dom_title`, and `extract_dom_url`
[INFO] [stdout]   --> src/metadata/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     examine_title_element, extract_dom_author, extract_dom_categories,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     extract_dom_license, extract_dom_sitename, extract_dom_tags,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     extract_dom_title, extract_dom_url,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json_ld::extract_json_ld`
[INFO] [stdout]   --> src/metadata/mod.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use json_ld::extract_json_ld;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_meta`, `extract_open_graph`, and `validate_metadata_name`
[INFO] [stdout]   --> src/metadata/mod.rs:21:21
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use meta_tags::{examine_meta, extract_open_graph, validate_metadata_name};
[INFO] [stdout]    |                     ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `best_total_len` is never read
[INFO] [stdout]    --> src/extract.rs:593:17
[INFO] [stdout]     |
[INFO] [stdout] 553 |                     best_total_len = total;
[INFO] [stdout]     |                     ---------------------- `best_total_len` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `longer`
[INFO] [stdout]    --> src/extract.rs:743:17
[INFO] [stdout]     |
[INFO] [stdout] 743 |             let longer = c.text_len.max(existing.len());
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_longer`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `options`
[INFO] [stdout]    --> src/extract.rs:644:46
[INFO] [stdout]     |
[INFO] [stdout] 644 | fn try_multi_candidate_merge(doc: &Document, options: &Options) -> Option<String> {
[INFO] [stdout]     |                                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_tags`
[INFO] [stdout]     --> src/extract.rs:1938:9
[INFO] [stdout]      |
[INFO] [stdout] 1938 |     let block_tags = ["div", "p", "pre", "section", "article", "table",
[INFO] [stdout]      |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_tags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a_count`
[INFO] [stdout]     --> src/extract.rs:2212:9
[INFO] [stdout]      |
[INFO] [stdout] 2212 |     let a_count: i64 = match i64::try_from(el.select("a").length()) {
[INFO] [stdout]      |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_a_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_links` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:264:13
[INFO] [stdout]     |
[INFO] [stdout] 264 |             current_links = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 268 |             current_links = sel.select("a").length() as u32;
[INFO] [stdout]     |             ----------------------------------------------- `current_links` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_text_len` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:265:13
[INFO] [stdout]     |
[INFO] [stdout] 265 |             current_text_len = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 270 |             current_text_len = text.trim().len() as u32;
[INFO] [stdout]     |             ------------------------------------------- `current_text_len` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_extraction_quality_ml` is never used
[INFO] [stdout]    --> src/extract.rs:775:4
[INFO] [stdout]     |
[INFO] [stdout] 775 | fn compute_extraction_quality_ml(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_link_dense_sections` is never used
[INFO] [stdout]     --> src/extract.rs:1150:4
[INFO] [stdout]      |
[INFO] [stdout] 1150 | fn strip_link_dense_sections(html: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lenient_boilerplate` and `min_paragraph_density` are never read
[INFO] [stdout]    --> src/page_type/mod.rs:110:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub(crate) struct ExtractionProfile {
[INFO] [stdout]     |                   ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub lenient_boilerplate: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub min_paragraph_density: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ExtractionProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVICE_BOILERPLATE_SELECTORS` is never used
[INFO] [stdout]     --> src/page_type/mod.rs:1052:7
[INFO] [stdout]      |
[INFO] [stdout] 1052 | const SERVICE_BOILERPLATE_SELECTORS: &[&str] = &[
[INFO] [stdout]      |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `remove_attribute` is never used
[INFO] [stdout]   --> src/dom.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn remove_attribute(sel: &Selection, name: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `inner_html` is never used
[INFO] [stdout]    --> src/dom.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn inner_html(sel: &Selection) -> StrTendril {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn next_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prev_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn prev_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_element_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub fn next_element_sibling<'a>(sel: &Selection<'a>) -> Option<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_selector` is never used
[INFO] [stdout]    --> src/dom.rs:201:8
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub fn query_selector<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_selector_all` is never used
[INFO] [stdout]    --> src/dom.rs:210:8
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub fn query_selector_all<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_elements_by_tag_name` is never used
[INFO] [stdout]    --> src/dom.rs:219:8
[INFO] [stdout]     |
[INFO] [stdout] 219 | pub fn get_elements_by_tag_name<'a>(sel: &Selection<'a>, tag: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_tags` is never used
[INFO] [stdout]    --> src/dom.rs:237:8
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn strip_tags(sel: &Selection, tags: &[&str]) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_html` is never used
[INFO] [stdout]    --> src/dom.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout] 252 | pub fn append_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_inner_html` is never used
[INFO] [stdout]    --> src/dom.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 260 | pub fn set_inner_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `replace_with_html` is never used
[INFO] [stdout]    --> src/dom.rs:268:8
[INFO] [stdout]     |
[INFO] [stdout] 268 | pub fn replace_with_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `replace_element` is never used
[INFO] [stdout]    --> src/dom.rs:278:8
[INFO] [stdout]     |
[INFO] [stdout] 278 | pub fn replace_element(old: &Selection, new: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_void_element` is never used
[INFO] [stdout]    --> src/dom.rs:297:8
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn is_void_element(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `remove_comments` is never used
[INFO] [stdout]    --> src/dom.rs:326:8
[INFO] [stdout]     |
[INFO] [stdout] 326 | pub fn remove_comments(_doc: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_child` is never used
[INFO] [stdout]    --> src/dom.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn append_child(parent: &Selection, child: &Selection) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `child_nodes` is never used
[INFO] [stdout]    --> src/dom.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn child_nodes<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_all_attributes` is never used
[INFO] [stdout]    --> src/dom.rs:384:8
[INFO] [stdout]     |
[INFO] [stdout] 384 | pub fn clear_all_attributes(sel: &Selection) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse` is never used
[INFO] [stdout]    --> src/dom.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn parse(html: &str) -> Document {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:285:12
[INFO] [stdout]     |
[INFO] [stdout] 285 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discard_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn precision_discard_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TEASER_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 309 | pub static TEASER_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `teaser_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_discardable` is never used
[INFO] [stdout]    --> src/selector/discard.rs:375:8
[INFO] [stdout]     |
[INFO] [stdout] 375 | pub fn find_discardable<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stdout]   --> src/selector/precision.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discarded_content_rule_1` is never used
[INFO] [stdout]   --> src/selector/precision.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn precision_discarded_content_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discarded_content_rule_2` is never used
[INFO] [stdout]   --> src/selector/precision.rs:55:8
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub fn precision_discarded_content_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_TEASER` is never used
[INFO] [stdout]   --> src/selector/precision.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub static DISCARDED_TEASER: &[Rule] = &[discarded_teaser_rule_1];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_teaser_rule_1` is never used
[INFO] [stdout]   --> src/selector/precision.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn discarded_teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_IMAGE` is never used
[INFO] [stdout]    --> src/selector/precision.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub static DISCARDED_IMAGE: &[Rule] = &[discarded_image_rule_1];
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_image_rule_1` is never used
[INFO] [stdout]    --> src/selector/precision.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn discarded_image_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_discard_precision` is never used
[INFO] [stdout]    --> src/selector/precision.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn should_discard_precision(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_teaser` is never used
[INFO] [stdout]    --> src/selector/precision.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 195 | pub fn is_teaser(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_discard` is never used
[INFO] [stdout]    --> src/selector/precision.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub fn is_image_discard(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `COMMENTS` is never used
[INFO] [stdout]   --> src/selector/comments.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub static COMMENTS: &[Rule] = &[
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_1` is never used
[INFO] [stdout]   --> src/selector/comments.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_2` is never used
[INFO] [stdout]   --> src/selector/comments.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn comments_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_3` is never used
[INFO] [stdout]   --> src/selector/comments.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn comments_rule_3(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_4` is never used
[INFO] [stdout]    --> src/selector/comments.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn comments_rule_4(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_COMMENTS` is never used
[INFO] [stdout]    --> src/selector/comments.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub static DISCARDED_COMMENTS: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_1` is never used
[INFO] [stdout]    --> src/selector/comments.rs:150:8
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub fn discarded_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_2` is never used
[INFO] [stdout]    --> src/selector/comments.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn discarded_comments_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_3` is never used
[INFO] [stdout]    --> src/selector/comments.rs:181:8
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub fn discarded_comments_rule_3(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `REMOVED_COMMENTS` is never used
[INFO] [stdout]    --> src/selector/comments.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub static REMOVED_COMMENTS: &[Rule] = &[removed_comments_rule_1];
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `removed_comments_rule_1` is never used
[INFO] [stdout]    --> src/selector/comments.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn removed_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_comments` is never used
[INFO] [stdout]    --> src/selector/comments.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn find_comments<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_comment_section` is never used
[INFO] [stdout]    --> src/selector/comments.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 | pub fn is_comment_section(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_comment_debris` is never used
[INFO] [stdout]    --> src/selector/comments.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn is_comment_debris(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_remove_comments` is never used
[INFO] [stdout]    --> src/selector/comments.rs:269:8
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub fn should_remove_comments(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_authors` is never used
[INFO] [stdout]    --> src/selector/meta.rs:517:8
[INFO] [stdout]     |
[INFO] [stdout] 517 | pub fn find_authors<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_titles` is never used
[INFO] [stdout]    --> src/selector/meta.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 528 | pub fn find_titles<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_tags` is never used
[INFO] [stdout]    --> src/selector/meta.rs:539:8
[INFO] [stdout]     |
[INFO] [stdout] 539 | pub fn find_tags<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_categories` is never used
[INFO] [stdout]    --> src/selector/meta.rs:550:8
[INFO] [stdout]     |
[INFO] [stdout] 550 | pub fn find_categories<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_author_discard` is never used
[INFO] [stdout]    --> src/selector/meta.rs:561:8
[INFO] [stdout]     |
[INFO] [stdout] 561 | pub fn is_author_discard(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_node_ancestors` is never used
[INFO] [stdout]   --> src/selector/utils.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn get_node_ancestors<'a>(sel: &Selection<'a>, ancestor_tag: &str) -> Vec<Selection<'a>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `id_class` is never used
[INFO] [stdout]    --> src/selector/utils.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn id_class(sel: &Selection) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_tag` is never used
[INFO] [stdout]    --> src/selector/utils.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn is_tag(sel: &Selection, expected: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_one_of_tags` is never used
[INFO] [stdout]    --> src/selector/utils.rs:180:8
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub fn is_one_of_tags(sel: &Selection, tags: &[&str]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ELEMENT_WITH_SIZE_ATTR` is never used
[INFO] [stdout]   --> src/html_processing.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub static ELEMENT_WITH_SIZE_ATTR: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ALLOWED_ATTRIBUTES` is never used
[INFO] [stdout]   --> src/html_processing.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub static ALLOWED_ATTRIBUTES: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:82:8
[INFO] [stdout]    |
[INFO] [stdout] 82 | static XML_LB_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | static XML_GRAPHIC_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_DUPLICATE_CHECK_SIZE` is never used
[INFO] [stdout]    --> src/html_processing.rs:102:7
[INFO] [stdout]     |
[INFO] [stdout] 102 | const MIN_DUPLICATE_CHECK_SIZE: usize = 100;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DUPLICATE_COUNT` is never used
[INFO] [stdout]    --> src/html_processing.rs:105:7
[INFO] [stdout]     |
[INFO] [stdout] 105 | const MAX_DUPLICATE_COUNT: i32 = 2;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `doc_cleaning` is never used
[INFO] [stdout]    --> src/html_processing.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn doc_cleaning(doc: &Document, opts: &Options) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_clean_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:268:4
[INFO] [stdout]     |
[INFO] [stdout] 268 | fn build_clean_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_strip_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:308:4
[INFO] [stdout]     |
[INFO] [stdout] 308 | fn build_strip_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_cleaning` is never used
[INFO] [stdout]    --> src/html_processing.rs:351:8
[INFO] [stdout]     |
[INFO] [stdout] 351 | pub fn post_cleaning(doc: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_by_link_density` is never used
[INFO] [stdout]    --> src/html_processing.rs:408:8
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub fn delete_by_link_density(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `text_chars_test` is never used
[INFO] [stdout]    --> src/html_processing.rs:448:8
[INFO] [stdout]     |
[INFO] [stdout] 448 | pub fn text_chars_test(text: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `text_filter` is never used
[INFO] [stdout]    --> src/html_processing.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn text_filter(element: &Selection) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_element` is never used
[INFO] [stdout]    --> src/html_processing.rs:656:4
[INFO] [stdout]     |
[INFO] [stdout] 656 | fn is_image_element(sel: &Selection) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_file` is never used
[INFO] [stdout]    --> src/html_processing.rs:678:4
[INFO] [stdout]     |
[INFO] [stdout] 678 | fn is_image_file(src: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `duplicate_test` is never used
[INFO] [stdout]    --> src/html_processing.rs:699:4
[INFO] [stdout]     |
[INFO] [stdout] 699 | fn duplicate_test(element: &Selection, cache: &mut LruCache) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_all_attributes` is never used
[INFO] [stdout]    --> src/html_processing.rs:720:4
[INFO] [stdout]     |
[INFO] [stdout] 720 | fn clear_all_attributes(sel: &Selection) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_absolute_url` is never used
[INFO] [stdout]    --> src/html_processing.rs:730:4
[INFO] [stdout]     |
[INFO] [stdout] 730 | fn create_absolute_url(href: &str, base_url: Option<&str>) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_node` is never used
[INFO] [stdout]    --> src/html_processing.rs:779:8
[INFO] [stdout]     |
[INFO] [stdout] 779 | pub fn process_node(element: &Selection, cache: Option<&mut LruCache>, opts: &Options) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_text_node` is never used
[INFO] [stdout]    --> src/html_processing.rs:840:8
[INFO] [stdout]     |
[INFO] [stdout] 840 | pub fn handle_text_node(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_unwanted_nodes` is never used
[INFO] [stdout]    --> src/html_processing.rs:914:8
[INFO] [stdout]     |
[INFO] [stdout] 914 | pub fn prune_unwanted_nodes(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_tags` is never used
[INFO] [stdout]    --> src/html_processing.rs:983:8
[INFO] [stdout]     |
[INFO] [stdout] 983 | pub fn convert_tags(tree: &Selection, opts: &Options) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_comments_node` is never used
[INFO] [stdout]   --> src/extractor/comments.rs:20:4
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn process_comments_node<'a>(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_comments` is never used
[INFO] [stdout]   --> src/extractor/comments.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn extract_comments(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_with_fallback` is never used
[INFO] [stdout]    --> src/extractor/fallback.rs:604:8
[INFO] [stdout]     |
[INFO] [stdout] 604 | pub fn extract_with_fallback(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_text_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn is_text_element(element: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `define_new_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn define_new_element(processed: Option<&Selection>, original: &Selection) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_sub_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn add_sub_element<'a>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_titles` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_titles(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_formatting` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub fn handle_formatting(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_code_block_element` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn is_code_block_element(element: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_code_blocks` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn handle_code_blocks(element: &Selection, state: &mut ExtractionState) -> Document {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_other_elements` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:272:8
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn handle_other_elements(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_image` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:327:8
[INFO] [stdout]     |
[INFO] [stdout] 327 | pub fn handle_image(element: &Selection) -> Option<Document> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_file` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:395:4
[INFO] [stdout]     |
[INFO] [stdout] 395 | fn is_image_file(src: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_nested_element` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:419:8
[INFO] [stdout]     |
[INFO] [stdout] 419 | pub fn process_nested_element(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_lists` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:460:8
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub fn handle_lists(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_quotes` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:544:8
[INFO] [stdout]     |
[INFO] [stdout] 544 | pub fn handle_quotes(
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_paragraphs` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:594:8
[INFO] [stdout]     |
[INFO] [stdout] 594 | pub fn handle_paragraphs(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_table` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:737:8
[INFO] [stdout]     |
[INFO] [stdout] 737 | pub fn handle_table(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_table_cell` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:815:4
[INFO] [stdout]     |
[INFO] [stdout] 815 | fn process_table_cell(cell: &Selection, state: &mut ExtractionState, opts: &Options) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:878:4
[INFO] [stdout]     |
[INFO] [stdout] 878 | fn html_escape(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_text_elem` is never used
[INFO] [stdout]   --> src/extractor/pipeline.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn handle_text_elem(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recover_wild_text` is never used
[INFO] [stdout]   --> src/extractor/pipeline.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn recover_wild_text(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_content` is never used
[INFO] [stdout]    --> src/extractor/pipeline.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn extract_content(doc: &Document, opts: &Options) -> (Document, String) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_unwanted_sections` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn prune_unwanted_sections<S: std::hash::BuildHasher>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_in_place` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:211:4
[INFO] [stdout]     |
[INFO] [stdout] 211 | fn prune_in_place(tree: &Selection, rules: &[Rule]) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_non_potential_tags` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub fn strip_non_potential_tags<S: std::hash::BuildHasher>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExtractionState` is never constructed
[INFO] [stdout]   --> src/extractor/state.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct ExtractionState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/extractor/state.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl ExtractionState {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn mark_done(&mut self, node_id: NodeId) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn is_done(&self, node_id: NodeId) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn is_potential_tag(&self, tag: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_potential_tag(&mut self, tag: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn remove_potential_tag(&mut self, tag: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn configure_from_options(&mut self, opts: &crate::Options) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn potential_tags(&self) -> &HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn clone_potential_tags(&self) -> HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LIST_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub static XML_LIST_TAGS: [&str; 3] = ["ul", "ol", "dl"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HEAD_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub static XML_HEAD_TAGS: [&str; 7] = ["h1", "h2", "h3", "h4", "h5", "h6", "summary"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub static XML_LB_TAGS: [&str; 3] = ["br", "hr", "lb"];
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HI_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub static XML_HI_TAGS: [&str; 12] = [
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_REF_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub static XML_REF_TAGS: [&str; 1] = ["a"];
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub static XML_GRAPHIC_TAGS: [&str; 1] = ["img"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_ITEM_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub static XML_ITEM_TAGS: [&str; 3] = ["dd", "dt", "li"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_CELL_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub static XML_CELL_TAGS: [&str; 2] = ["th", "td"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LIST_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub static XML_LIST_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub static XML_QUOTE_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HEAD_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub static XML_HEAD_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub static XML_LB_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HI_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub static XML_HI_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_REF_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub static XML_REF_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub static XML_GRAPHIC_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_ITEM_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub static XML_ITEM_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_CELL_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub static XML_CELL_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_CLEAN` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub static TAGS_TO_CLEAN: [&str; 50] = [
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_CLEAN_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub static TAGS_TO_CLEAN_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_STRIP` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub static TAGS_TO_STRIP: [&str; 18] = [
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_STRIP_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:116:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub static TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TABLE_TAGS_TO_STRIP_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub static TABLE_TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_clean_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn should_clean_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_strip_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub fn should_strip_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_remove_if_empty` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:161:8
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub fn should_remove_if_empty(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAG_CATALOG` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub static TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `FORMAT_TAG_CATALOG` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub static FORMAT_TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_list_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:210:8
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub fn is_xml_list_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_quote_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn is_xml_quote_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_head_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn is_xml_head_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_lb_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:231:8
[INFO] [stdout]     |
[INFO] [stdout] 231 | pub fn is_xml_lb_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_hi_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn is_xml_hi_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_ref_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn is_xml_ref_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_graphic_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout] 252 | pub fn is_xml_graphic_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_item_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:259:8
[INFO] [stdout]     |
[INFO] [stdout] 259 | pub fn is_xml_item_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_cell_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 266 | pub fn is_xml_cell_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_in_tag_catalog` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn is_in_tag_catalog(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_format_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:280:8
[INFO] [stdout]     |
[INFO] [stdout] 280 | pub fn is_format_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:287:8
[INFO] [stdout]     |
[INFO] [stdout] 287 | pub fn is_valid_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_metadata_light` is never used
[INFO] [stdout]    --> src/metadata/mod.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn extract_metadata_light(doc: &Document, opts: &Options) -> Metadata {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `types` and `parent` are never read
[INFO] [stdout]   --> src/metadata/json_ld.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SchemaData {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 17 |     /// Schema @type values
[INFO] [stdout] 18 |     pub types: Vec<String>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub parent: Option<Box<SchemaData>>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SchemaData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_open_graph` is never used
[INFO] [stdout]    --> src/metadata/meta_tags.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn extract_open_graph(doc: &Document, original: Metadata) -> Metadata {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_base_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:107:8
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub fn get_base_url(url_str: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn parse_url(url_str: &str) -> Option<Url> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn normalize_url(url_str: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `urls_match` is never used
[INFO] [stdout]    --> src/url_utils.rs:205:8
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub fn urls_match(url1: &str, url2: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LinkDensityResult` is never constructed
[INFO] [stdout]   --> src/link_density.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct LinkDensityResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `link_density_test_with_info` is never used
[INFO] [stdout]    --> src/link_density.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn link_density_test_with_info(element: &Selection, options: &Options) -> (bool, bool) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 43.70s
[INFO] running `Command { std: "docker" "inspect" "9e187d7518591bdeb1fb5dd202eec939e2a630aa49fa914318e6ab0ad79d430e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9e187d7518591bdeb1fb5dd202eec939e2a630aa49fa914318e6ab0ad79d430e", kill_on_drop: false }`
[INFO] [stdout] 9e187d7518591bdeb1fb5dd202eec939e2a630aa49fa914318e6ab0ad79d430e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] c703d482ccfa7b8c38db93920bb0702f383c21bccfc8d58e1876c7b03aa22839
[INFO] running `Command { std: "docker" "start" "-a" "c703d482ccfa7b8c38db93920bb0702f383c21bccfc8d58e1876c7b03aa22839", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling zerocopy v0.8.47
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling zerocopy-derive v0.8.47
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling clap v4.6.0
[INFO] [stderr]    Compiling rs-trafilatura v0.2.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::result::Metadata`
[INFO] [stdout]    --> src/page_type/mod.rs:861:5
[INFO] [stdout]     |
[INFO] [stdout] 861 | use crate::result::Metadata;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes`
[INFO] [stdout]   --> src/etree.rs:24:22
[INFO] [stdout]    |
[INFO] [stdout] 24 |     append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove,
[INFO] [stdout]    |                      ^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text,
[INFO] [stdout]    |                                                                               ^^^^^^^^^^
[INFO] [stdout] 26 |     Document,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CleaningOptions`
[INFO] [stdout]    --> src/html_processing.rs:202:42
[INFO] [stdout]     |
[INFO] [stdout] 202 |         use html_cleaning::{HtmlCleaner, CleaningOptions};
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `comments::extract_comments`
[INFO] [stdout]   --> src/extractor/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub use comments::extract_comments;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `baseline`, `candidate_is_usable`, `compare_external_extraction`, and `extract_with_fallback`
[INFO] [stdout]   --> src/extractor/mod.rs:54:20
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use fallback::{baseline, candidate_is_usable, compare_external_extraction, extract_with_fallback};
[INFO] [stdout]    |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pipeline::extract_content`
[INFO] [stdout]   --> src/extractor/mod.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub use pipeline::extract_content;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `state::ExtractionState`
[INFO] [stdout]   --> src/extractor/mod.rs:56:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub use state::ExtractionState;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_title_element`, `extract_dom_author`, `extract_dom_categories`, `extract_dom_license`, `extract_dom_sitename`, `extract_dom_tags`, `extract_dom_title`, and `extract_dom_url`
[INFO] [stdout]   --> src/metadata/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     examine_title_element, extract_dom_author, extract_dom_categories,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     extract_dom_license, extract_dom_sitename, extract_dom_tags,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     extract_dom_title, extract_dom_url,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json_ld::extract_json_ld`
[INFO] [stdout]   --> src/metadata/mod.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use json_ld::extract_json_ld;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_meta`, `extract_open_graph`, and `validate_metadata_name`
[INFO] [stdout]   --> src/metadata/mod.rs:21:21
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use meta_tags::{examine_meta, extract_open_graph, validate_metadata_name};
[INFO] [stdout]    |                     ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `best_total_len` is never read
[INFO] [stdout]    --> src/extract.rs:593:17
[INFO] [stdout]     |
[INFO] [stdout] 553 |                     best_total_len = total;
[INFO] [stdout]     |                     ---------------------- `best_total_len` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `longer`
[INFO] [stdout]    --> src/extract.rs:743:17
[INFO] [stdout]     |
[INFO] [stdout] 743 |             let longer = c.text_len.max(existing.len());
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_longer`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `options`
[INFO] [stdout]    --> src/extract.rs:644:46
[INFO] [stdout]     |
[INFO] [stdout] 644 | fn try_multi_candidate_merge(doc: &Document, options: &Options) -> Option<String> {
[INFO] [stdout]     |                                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_tags`
[INFO] [stdout]     --> src/extract.rs:1938:9
[INFO] [stdout]      |
[INFO] [stdout] 1938 |     let block_tags = ["div", "p", "pre", "section", "article", "table",
[INFO] [stdout]      |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_tags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a_count`
[INFO] [stdout]     --> src/extract.rs:2212:9
[INFO] [stdout]      |
[INFO] [stdout] 2212 |     let a_count: i64 = match i64::try_from(el.select("a").length()) {
[INFO] [stdout]      |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_a_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_links` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:264:13
[INFO] [stdout]     |
[INFO] [stdout] 264 |             current_links = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 268 |             current_links = sel.select("a").length() as u32;
[INFO] [stdout]     |             ----------------------------------------------- `current_links` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_text_len` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:265:13
[INFO] [stdout]     |
[INFO] [stdout] 265 |             current_text_len = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 270 |             current_text_len = text.trim().len() as u32;
[INFO] [stdout]     |             ------------------------------------------- `current_text_len` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_extraction_quality_ml` is never used
[INFO] [stdout]    --> src/extract.rs:775:4
[INFO] [stdout]     |
[INFO] [stdout] 775 | fn compute_extraction_quality_ml(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_link_dense_sections` is never used
[INFO] [stdout]     --> src/extract.rs:1150:4
[INFO] [stdout]      |
[INFO] [stdout] 1150 | fn strip_link_dense_sections(html: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lenient_boilerplate` and `min_paragraph_density` are never read
[INFO] [stdout]    --> src/page_type/mod.rs:110:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub(crate) struct ExtractionProfile {
[INFO] [stdout]     |                   ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub lenient_boilerplate: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub min_paragraph_density: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ExtractionProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVICE_BOILERPLATE_SELECTORS` is never used
[INFO] [stdout]     --> src/page_type/mod.rs:1052:7
[INFO] [stdout]      |
[INFO] [stdout] 1052 | const SERVICE_BOILERPLATE_SELECTORS: &[&str] = &[
[INFO] [stdout]      |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `remove_attribute` is never used
[INFO] [stdout]   --> src/dom.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn remove_attribute(sel: &Selection, name: &str) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `inner_html` is never used
[INFO] [stdout]    --> src/dom.rs:106:8
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub fn inner_html(sel: &Selection) -> StrTendril {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn next_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prev_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn prev_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_element_sibling` is never used
[INFO] [stdout]    --> src/dom.rs:164:8
[INFO] [stdout]     |
[INFO] [stdout] 164 | pub fn next_element_sibling<'a>(sel: &Selection<'a>) -> Option<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_selector` is never used
[INFO] [stdout]    --> src/dom.rs:201:8
[INFO] [stdout]     |
[INFO] [stdout] 201 | pub fn query_selector<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `query_selector_all` is never used
[INFO] [stdout]    --> src/dom.rs:210:8
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub fn query_selector_all<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_elements_by_tag_name` is never used
[INFO] [stdout]    --> src/dom.rs:219:8
[INFO] [stdout]     |
[INFO] [stdout] 219 | pub fn get_elements_by_tag_name<'a>(sel: &Selection<'a>, tag: &str) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_tags` is never used
[INFO] [stdout]    --> src/dom.rs:237:8
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn strip_tags(sel: &Selection, tags: &[&str]) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_html` is never used
[INFO] [stdout]    --> src/dom.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout] 252 | pub fn append_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_inner_html` is never used
[INFO] [stdout]    --> src/dom.rs:260:8
[INFO] [stdout]     |
[INFO] [stdout] 260 | pub fn set_inner_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `replace_with_html` is never used
[INFO] [stdout]    --> src/dom.rs:268:8
[INFO] [stdout]     |
[INFO] [stdout] 268 | pub fn replace_with_html(sel: &Selection, html: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `replace_element` is never used
[INFO] [stdout]    --> src/dom.rs:278:8
[INFO] [stdout]     |
[INFO] [stdout] 278 | pub fn replace_element(old: &Selection, new: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_void_element` is never used
[INFO] [stdout]    --> src/dom.rs:297:8
[INFO] [stdout]     |
[INFO] [stdout] 297 | pub fn is_void_element(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `remove_comments` is never used
[INFO] [stdout]    --> src/dom.rs:326:8
[INFO] [stdout]     |
[INFO] [stdout] 326 | pub fn remove_comments(_doc: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `append_child` is never used
[INFO] [stdout]    --> src/dom.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn append_child(parent: &Selection, child: &Selection) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `child_nodes` is never used
[INFO] [stdout]    --> src/dom.rs:377:8
[INFO] [stdout]     |
[INFO] [stdout] 377 | pub fn child_nodes<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_all_attributes` is never used
[INFO] [stdout]    --> src/dom.rs:384:8
[INFO] [stdout]     |
[INFO] [stdout] 384 | pub fn clear_all_attributes(sel: &Selection) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse` is never used
[INFO] [stdout]    --> src/dom.rs:398:8
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub fn parse(html: &str) -> Document {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:285:12
[INFO] [stdout]     |
[INFO] [stdout] 285 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discard_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn precision_discard_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TEASER_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 309 | pub static TEASER_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `teaser_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_discardable` is never used
[INFO] [stdout]    --> src/selector/discard.rs:375:8
[INFO] [stdout]     |
[INFO] [stdout] 375 | pub fn find_discardable<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stdout]   --> src/selector/precision.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discarded_content_rule_1` is never used
[INFO] [stdout]   --> src/selector/precision.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn precision_discarded_content_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discarded_content_rule_2` is never used
[INFO] [stdout]   --> src/selector/precision.rs:55:8
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub fn precision_discarded_content_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_TEASER` is never used
[INFO] [stdout]   --> src/selector/precision.rs:84:12
[INFO] [stdout]    |
[INFO] [stdout] 84 | pub static DISCARDED_TEASER: &[Rule] = &[discarded_teaser_rule_1];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_teaser_rule_1` is never used
[INFO] [stdout]   --> src/selector/precision.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn discarded_teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_IMAGE` is never used
[INFO] [stdout]    --> src/selector/precision.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub static DISCARDED_IMAGE: &[Rule] = &[discarded_image_rule_1];
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_image_rule_1` is never used
[INFO] [stdout]    --> src/selector/precision.rs:138:8
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub fn discarded_image_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_discard_precision` is never used
[INFO] [stdout]    --> src/selector/precision.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn should_discard_precision(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_teaser` is never used
[INFO] [stdout]    --> src/selector/precision.rs:195:8
[INFO] [stdout]     |
[INFO] [stdout] 195 | pub fn is_teaser(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_discard` is never used
[INFO] [stdout]    --> src/selector/precision.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub fn is_image_discard(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `COMMENTS` is never used
[INFO] [stdout]   --> src/selector/comments.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub static COMMENTS: &[Rule] = &[
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_1` is never used
[INFO] [stdout]   --> src/selector/comments.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_2` is never used
[INFO] [stdout]   --> src/selector/comments.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn comments_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_3` is never used
[INFO] [stdout]   --> src/selector/comments.rs:92:8
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub fn comments_rule_3(sel: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `comments_rule_4` is never used
[INFO] [stdout]    --> src/selector/comments.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn comments_rule_4(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DISCARDED_COMMENTS` is never used
[INFO] [stdout]    --> src/selector/comments.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 137 | pub static DISCARDED_COMMENTS: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_1` is never used
[INFO] [stdout]    --> src/selector/comments.rs:150:8
[INFO] [stdout]     |
[INFO] [stdout] 150 | pub fn discarded_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_2` is never used
[INFO] [stdout]    --> src/selector/comments.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn discarded_comments_rule_2(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `discarded_comments_rule_3` is never used
[INFO] [stdout]    --> src/selector/comments.rs:181:8
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub fn discarded_comments_rule_3(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `REMOVED_COMMENTS` is never used
[INFO] [stdout]    --> src/selector/comments.rs:207:12
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub static REMOVED_COMMENTS: &[Rule] = &[removed_comments_rule_1];
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `removed_comments_rule_1` is never used
[INFO] [stdout]    --> src/selector/comments.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn removed_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_comments` is never used
[INFO] [stdout]    --> src/selector/comments.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn find_comments<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_comment_section` is never used
[INFO] [stdout]    --> src/selector/comments.rs:257:8
[INFO] [stdout]     |
[INFO] [stdout] 257 | pub fn is_comment_section(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_comment_debris` is never used
[INFO] [stdout]    --> src/selector/comments.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn is_comment_debris(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_remove_comments` is never used
[INFO] [stdout]    --> src/selector/comments.rs:269:8
[INFO] [stdout]     |
[INFO] [stdout] 269 | pub fn should_remove_comments(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_authors` is never used
[INFO] [stdout]    --> src/selector/meta.rs:517:8
[INFO] [stdout]     |
[INFO] [stdout] 517 | pub fn find_authors<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_titles` is never used
[INFO] [stdout]    --> src/selector/meta.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 528 | pub fn find_titles<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_tags` is never used
[INFO] [stdout]    --> src/selector/meta.rs:539:8
[INFO] [stdout]     |
[INFO] [stdout] 539 | pub fn find_tags<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_categories` is never used
[INFO] [stdout]    --> src/selector/meta.rs:550:8
[INFO] [stdout]     |
[INFO] [stdout] 550 | pub fn find_categories<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_author_discard` is never used
[INFO] [stdout]    --> src/selector/meta.rs:561:8
[INFO] [stdout]     |
[INFO] [stdout] 561 | pub fn is_author_discard(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_node_ancestors` is never used
[INFO] [stdout]   --> src/selector/utils.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn get_node_ancestors<'a>(sel: &Selection<'a>, ancestor_tag: &str) -> Vec<Selection<'a>> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `id_class` is never used
[INFO] [stdout]    --> src/selector/utils.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn id_class(sel: &Selection) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_tag` is never used
[INFO] [stdout]    --> src/selector/utils.rs:158:8
[INFO] [stdout]     |
[INFO] [stdout] 158 | pub fn is_tag(sel: &Selection, expected: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_one_of_tags` is never used
[INFO] [stdout]    --> src/selector/utils.rs:180:8
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub fn is_one_of_tags(sel: &Selection, tags: &[&str]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ELEMENT_WITH_SIZE_ATTR` is never used
[INFO] [stdout]   --> src/html_processing.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub static ELEMENT_WITH_SIZE_ATTR: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `ALLOWED_ATTRIBUTES` is never used
[INFO] [stdout]   --> src/html_processing.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub static ALLOWED_ATTRIBUTES: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:82:8
[INFO] [stdout]    |
[INFO] [stdout] 82 | static XML_LB_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | static XML_GRAPHIC_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stdout]   --> src/html_processing.rs:96:8
[INFO] [stdout]    |
[INFO] [stdout] 96 | static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_DUPLICATE_CHECK_SIZE` is never used
[INFO] [stdout]    --> src/html_processing.rs:102:7
[INFO] [stdout]     |
[INFO] [stdout] 102 | const MIN_DUPLICATE_CHECK_SIZE: usize = 100;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DUPLICATE_COUNT` is never used
[INFO] [stdout]    --> src/html_processing.rs:105:7
[INFO] [stdout]     |
[INFO] [stdout] 105 | const MAX_DUPLICATE_COUNT: i32 = 2;
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `doc_cleaning` is never used
[INFO] [stdout]    --> src/html_processing.rs:131:8
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub fn doc_cleaning(doc: &Document, opts: &Options) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_clean_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:268:4
[INFO] [stdout]     |
[INFO] [stdout] 268 | fn build_clean_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_strip_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:308:4
[INFO] [stdout]     |
[INFO] [stdout] 308 | fn build_strip_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `post_cleaning` is never used
[INFO] [stdout]    --> src/html_processing.rs:351:8
[INFO] [stdout]     |
[INFO] [stdout] 351 | pub fn post_cleaning(doc: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `delete_by_link_density` is never used
[INFO] [stdout]    --> src/html_processing.rs:408:8
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub fn delete_by_link_density(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `text_chars_test` is never used
[INFO] [stdout]    --> src/html_processing.rs:448:8
[INFO] [stdout]     |
[INFO] [stdout] 448 | pub fn text_chars_test(text: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `text_filter` is never used
[INFO] [stdout]    --> src/html_processing.rs:455:4
[INFO] [stdout]     |
[INFO] [stdout] 455 | fn text_filter(element: &Selection) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_element` is never used
[INFO] [stdout]    --> src/html_processing.rs:656:4
[INFO] [stdout]     |
[INFO] [stdout] 656 | fn is_image_element(sel: &Selection) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_file` is never used
[INFO] [stdout]    --> src/html_processing.rs:678:4
[INFO] [stdout]     |
[INFO] [stdout] 678 | fn is_image_file(src: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `duplicate_test` is never used
[INFO] [stdout]    --> src/html_processing.rs:699:4
[INFO] [stdout]     |
[INFO] [stdout] 699 | fn duplicate_test(element: &Selection, cache: &mut LruCache) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_all_attributes` is never used
[INFO] [stdout]    --> src/html_processing.rs:720:4
[INFO] [stdout]     |
[INFO] [stdout] 720 | fn clear_all_attributes(sel: &Selection) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_absolute_url` is never used
[INFO] [stdout]    --> src/html_processing.rs:730:4
[INFO] [stdout]     |
[INFO] [stdout] 730 | fn create_absolute_url(href: &str, base_url: Option<&str>) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_node` is never used
[INFO] [stdout]    --> src/html_processing.rs:779:8
[INFO] [stdout]     |
[INFO] [stdout] 779 | pub fn process_node(element: &Selection, cache: Option<&mut LruCache>, opts: &Options) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_text_node` is never used
[INFO] [stdout]    --> src/html_processing.rs:840:8
[INFO] [stdout]     |
[INFO] [stdout] 840 | pub fn handle_text_node(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_unwanted_nodes` is never used
[INFO] [stdout]    --> src/html_processing.rs:914:8
[INFO] [stdout]     |
[INFO] [stdout] 914 | pub fn prune_unwanted_nodes(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `convert_tags` is never used
[INFO] [stdout]    --> src/html_processing.rs:983:8
[INFO] [stdout]     |
[INFO] [stdout] 983 | pub fn convert_tags(tree: &Selection, opts: &Options) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_comments_node` is never used
[INFO] [stdout]   --> src/extractor/comments.rs:20:4
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn process_comments_node<'a>(
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_comments` is never used
[INFO] [stdout]   --> src/extractor/comments.rs:50:8
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub fn extract_comments(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_with_fallback` is never used
[INFO] [stdout]    --> src/extractor/fallback.rs:604:8
[INFO] [stdout]     |
[INFO] [stdout] 604 | pub fn extract_with_fallback(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_text_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn is_text_element(element: &Selection) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `define_new_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn define_new_element(processed: Option<&Selection>, original: &Selection) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `add_sub_element` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn add_sub_element<'a>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_titles` is never used
[INFO] [stdout]   --> src/extractor/handlers.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn handle_titles(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_formatting` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub fn handle_formatting(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_code_block_element` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:209:8
[INFO] [stdout]     |
[INFO] [stdout] 209 | pub fn is_code_block_element(element: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_code_blocks` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn handle_code_blocks(element: &Selection, state: &mut ExtractionState) -> Document {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_other_elements` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:272:8
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn handle_other_elements(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_image` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:327:8
[INFO] [stdout]     |
[INFO] [stdout] 327 | pub fn handle_image(element: &Selection) -> Option<Document> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_image_file` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:395:4
[INFO] [stdout]     |
[INFO] [stdout] 395 | fn is_image_file(src: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_nested_element` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:419:8
[INFO] [stdout]     |
[INFO] [stdout] 419 | pub fn process_nested_element(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_lists` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:460:8
[INFO] [stdout]     |
[INFO] [stdout] 460 | pub fn handle_lists(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_quotes` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:544:8
[INFO] [stdout]     |
[INFO] [stdout] 544 | pub fn handle_quotes(
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_paragraphs` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:594:8
[INFO] [stdout]     |
[INFO] [stdout] 594 | pub fn handle_paragraphs(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_table` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:737:8
[INFO] [stdout]     |
[INFO] [stdout] 737 | pub fn handle_table(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `process_table_cell` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:815:4
[INFO] [stdout]     |
[INFO] [stdout] 815 | fn process_table_cell(cell: &Selection, state: &mut ExtractionState, opts: &Options) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `html_escape` is never used
[INFO] [stdout]    --> src/extractor/handlers.rs:878:4
[INFO] [stdout]     |
[INFO] [stdout] 878 | fn html_escape(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `handle_text_elem` is never used
[INFO] [stdout]   --> src/extractor/pipeline.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn handle_text_elem(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `recover_wild_text` is never used
[INFO] [stdout]   --> src/extractor/pipeline.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn recover_wild_text(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_content` is never used
[INFO] [stdout]    --> src/extractor/pipeline.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn extract_content(doc: &Document, opts: &Options) -> (Document, String) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_unwanted_sections` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn prune_unwanted_sections<S: std::hash::BuildHasher>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_in_place` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:211:4
[INFO] [stdout]     |
[INFO] [stdout] 211 | fn prune_in_place(tree: &Selection, rules: &[Rule]) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_non_potential_tags` is never used
[INFO] [stdout]    --> src/extractor/pruning.rs:233:8
[INFO] [stdout]     |
[INFO] [stdout] 233 | pub fn strip_non_potential_tags<S: std::hash::BuildHasher>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExtractionState` is never constructed
[INFO] [stdout]   --> src/extractor/state.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct ExtractionState {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/extractor/state.rs:31:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl ExtractionState {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  31 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  43 |     pub fn mark_done(&mut self, node_id: NodeId) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  51 |     pub fn is_done(&self, node_id: NodeId) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn is_potential_tag(&self, tag: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_potential_tag(&mut self, tag: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn remove_potential_tag(&mut self, tag: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn configure_from_options(&mut self, opts: &crate::Options) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn potential_tags(&self) -> &HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn clone_potential_tags(&self) -> HashSet<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LIST_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub static XML_LIST_TAGS: [&str; 3] = ["ul", "ol", "dl"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HEAD_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub static XML_HEAD_TAGS: [&str; 7] = ["h1", "h2", "h3", "h4", "h5", "h6", "summary"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub static XML_LB_TAGS: [&str; 3] = ["br", "hr", "lb"];
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HI_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub static XML_HI_TAGS: [&str; 12] = [
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_REF_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub static XML_REF_TAGS: [&str; 1] = ["a"];
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub static XML_GRAPHIC_TAGS: [&str; 1] = ["img"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_ITEM_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub static XML_ITEM_TAGS: [&str; 3] = ["dd", "dt", "li"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_CELL_TAGS` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub static XML_CELL_TAGS: [&str; 2] = ["th", "td"];
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LIST_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub static XML_LIST_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_QUOTE_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub static XML_QUOTE_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HEAD_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub static XML_HEAD_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_LB_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub static XML_LB_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_HI_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub static XML_HI_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_REF_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub static XML_REF_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_GRAPHIC_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:73:12
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub static XML_GRAPHIC_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_ITEM_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub static XML_ITEM_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `XML_CELL_TAG_SET` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub static XML_CELL_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_CLEAN` is never used
[INFO] [stdout]   --> src/extractor/tags.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub static TAGS_TO_CLEAN: [&str; 50] = [
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_CLEAN_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 104 | pub static TAGS_TO_CLEAN_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_STRIP` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub static TAGS_TO_STRIP: [&str; 18] = [
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAGS_TO_STRIP_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:116:12
[INFO] [stdout]     |
[INFO] [stdout] 116 | pub static TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TABLE_TAGS_TO_STRIP_SET` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:138:12
[INFO] [stdout]     |
[INFO] [stdout] 138 | pub static TABLE_TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_clean_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn should_clean_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_strip_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:154:8
[INFO] [stdout]     |
[INFO] [stdout] 154 | pub fn should_strip_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_remove_if_empty` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:161:8
[INFO] [stdout]     |
[INFO] [stdout] 161 | pub fn should_remove_if_empty(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TAG_CATALOG` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:168:12
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub static TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `FORMAT_TAG_CATALOG` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub static FORMAT_TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_list_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:210:8
[INFO] [stdout]     |
[INFO] [stdout] 210 | pub fn is_xml_list_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_quote_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn is_xml_quote_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_head_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:224:8
[INFO] [stdout]     |
[INFO] [stdout] 224 | pub fn is_xml_head_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_lb_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:231:8
[INFO] [stdout]     |
[INFO] [stdout] 231 | pub fn is_xml_lb_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_hi_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn is_xml_hi_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_ref_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn is_xml_ref_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_graphic_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:252:8
[INFO] [stdout]     |
[INFO] [stdout] 252 | pub fn is_xml_graphic_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_item_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:259:8
[INFO] [stdout]     |
[INFO] [stdout] 259 | pub fn is_xml_item_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_xml_cell_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 266 | pub fn is_xml_cell_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_in_tag_catalog` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:273:8
[INFO] [stdout]     |
[INFO] [stdout] 273 | pub fn is_in_tag_catalog(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_format_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:280:8
[INFO] [stdout]     |
[INFO] [stdout] 280 | pub fn is_format_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_tag` is never used
[INFO] [stdout]    --> src/extractor/tags.rs:287:8
[INFO] [stdout]     |
[INFO] [stdout] 287 | pub fn is_valid_tag(tag: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_metadata_light` is never used
[INFO] [stdout]    --> src/metadata/mod.rs:238:8
[INFO] [stdout]     |
[INFO] [stdout] 238 | pub fn extract_metadata_light(doc: &Document, opts: &Options) -> Metadata {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `types` and `parent` are never read
[INFO] [stdout]   --> src/metadata/json_ld.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SchemaData {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 17 |     /// Schema @type values
[INFO] [stdout] 18 |     pub types: Vec<String>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub parent: Option<Box<SchemaData>>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SchemaData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_open_graph` is never used
[INFO] [stdout]    --> src/metadata/meta_tags.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn extract_open_graph(doc: &Document, original: Metadata) -> Metadata {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_base_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:107:8
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub fn get_base_url(url_str: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:175:8
[INFO] [stdout]     |
[INFO] [stdout] 175 | pub fn parse_url(url_str: &str) -> Option<Url> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `normalize_url` is never used
[INFO] [stdout]    --> src/url_utils.rs:186:8
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub fn normalize_url(url_str: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `urls_match` is never used
[INFO] [stdout]    --> src/url_utils.rs:205:8
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub fn urls_match(url1: &str, url2: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LinkDensityResult` is never constructed
[INFO] [stdout]   --> src/link_density.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct LinkDensityResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `link_density_test_with_info` is never used
[INFO] [stdout]    --> src/link_density.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn link_density_test_with_info(element: &Selection, options: &Options) -> (bool, bool) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stdout] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes`
[INFO] [stdout]   --> src/etree.rs:24:22
[INFO] [stdout]    |
[INFO] [stdout] 24 |     append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove,
[INFO] [stdout]    |                      ^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text,
[INFO] [stdout]    |                                                                               ^^^^^^^^^^
[INFO] [stdout] 26 |     Document,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CleaningOptions`
[INFO] [stdout]    --> src/html_processing.rs:202:42
[INFO] [stdout]     |
[INFO] [stdout] 202 |         use html_cleaning::{HtmlCleaner, CleaningOptions};
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `comments::extract_comments`
[INFO] [stdout]   --> src/extractor/mod.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub use comments::extract_comments;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `baseline`, `candidate_is_usable`, `compare_external_extraction`, and `extract_with_fallback`
[INFO] [stdout]   --> src/extractor/mod.rs:54:20
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub use fallback::{baseline, candidate_is_usable, compare_external_extraction, extract_with_fallback};
[INFO] [stdout]    |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `pipeline::extract_content`
[INFO] [stdout]   --> src/extractor/mod.rs:55:9
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub use pipeline::extract_content;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `state::ExtractionState`
[INFO] [stdout]   --> src/extractor/mod.rs:56:9
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub use state::ExtractionState;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_title_element`, `extract_dom_author`, `extract_dom_categories`, `extract_dom_license`, `extract_dom_sitename`, `extract_dom_tags`, `extract_dom_title`, and `extract_dom_url`
[INFO] [stdout]   --> src/metadata/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     examine_title_element, extract_dom_author, extract_dom_categories,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 17 |     extract_dom_license, extract_dom_sitename, extract_dom_tags,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 18 |     extract_dom_title, extract_dom_url,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `json_ld::extract_json_ld`
[INFO] [stdout]   --> src/metadata/mod.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub use json_ld::extract_json_ld;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `examine_meta`, `extract_open_graph`, and `validate_metadata_name`
[INFO] [stdout]   --> src/metadata/mod.rs:21:21
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub use meta_tags::{examine_meta, extract_open_graph, validate_metadata_name};
[INFO] [stdout]    |                     ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]    --> src/markdown.rs:527:22
[INFO] [stdout]     |
[INFO] [stdout] 527 |         let result = post_process_markdown(input);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]    --> src/markdown.rs:537:22
[INFO] [stdout]     |
[INFO] [stdout] 537 |         let result = post_process_markdown(input);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]    --> src/markdown.rs:545:22
[INFO] [stdout]     |
[INFO] [stdout] 545 |         let result = post_process_markdown(input);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]    --> src/markdown.rs:552:22
[INFO] [stdout]     |
[INFO] [stdout] 552 |         let result = post_process_markdown(input);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]    --> src/markdown.rs:559:22
[INFO] [stdout]     |
[INFO] [stdout] 559 |         let result = post_process_markdown(input);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]  --> tests/spike_markdown_validation.rs:8:35
[INFO] [stdout]   |
[INFO] [stdout] 8 |     use rs_trafilatura::markdown::post_process_markdown;
[INFO] [stdout]   |                                   ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stdout]   --> tests/spike_markdown_validation.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 13 |         post_process_markdown(&raw)
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `md`
[INFO] [stdout]    --> tests/spike_markdown_validation.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |         let md = to_markdown(html);
[INFO] [stdout]     |             ^^ help: if this is intentional, prefix it with an underscore: `_md`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `md`
[INFO] [stdout]    --> tests/spike_markdown_validation.rs:166:13
[INFO] [stdout]     |
[INFO] [stdout] 166 |         let md = to_markdown(html);
[INFO] [stdout]     |             ^^ help: if this is intentional, prefix it with an underscore: `_md`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `best_total_len` is never read
[INFO] [stdout]    --> src/extract.rs:593:17
[INFO] [stdout]     |
[INFO] [stdout] 553 |                     best_total_len = total;
[INFO] [stdout]     |                     ---------------------- `best_total_len` is overwritten here before the previous value is read
[INFO] [stdout] ...
[INFO] [stdout] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `longer`
[INFO] [stdout]    --> src/extract.rs:743:17
[INFO] [stdout]     |
[INFO] [stdout] 743 |             let longer = c.text_len.max(existing.len());
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_longer`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `options`
[INFO] [stdout]    --> src/extract.rs:644:46
[INFO] [stdout]     |
[INFO] [stdout] 644 | fn try_multi_candidate_merge(doc: &Document, options: &Options) -> Option<String> {
[INFO] [stdout]     |                                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_tags`
[INFO] [stdout]     --> src/extract.rs:1938:9
[INFO] [stdout]      |
[INFO] [stdout] 1938 |     let block_tags = ["div", "p", "pre", "section", "article", "table",
[INFO] [stdout]      |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_tags`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a_count`
[INFO] [stdout]     --> src/extract.rs:2212:9
[INFO] [stdout]      |
[INFO] [stdout] 2212 |     let a_count: i64 = match i64::try_from(el.select("a").length()) {
[INFO] [stdout]      |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_a_count`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_links` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:264:13
[INFO] [stdout]     |
[INFO] [stdout] 264 |             current_links = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 268 |             current_links = sel.select("a").length() as u32;
[INFO] [stdout]     |             ----------------------------------------------- `current_links` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `current_text_len` is never read
[INFO] [stdout]    --> src/page_type/ml.rs:265:13
[INFO] [stdout]     |
[INFO] [stdout] 265 |             current_text_len = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stdout] ...
[INFO] [stdout] 270 |             current_text_len = text.trim().len() as u32;
[INFO] [stdout]     |             ------------------------------------------- `current_text_len` is overwritten here before the previous value is read
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_extraction_quality_ml` is never used
[INFO] [stdout]    --> src/extract.rs:775:4
[INFO] [stdout]     |
[INFO] [stdout] 775 | fn compute_extraction_quality_ml(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_link_dense_sections` is never used
[INFO] [stdout]     --> src/extract.rs:1150:4
[INFO] [stdout]      |
[INFO] [stdout] 1150 | fn strip_link_dense_sections(html: &str) -> String {
[INFO] [stdout]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lenient_boilerplate` and `min_paragraph_density` are never read
[INFO] [stdout]    --> src/page_type/mod.rs:110:9
[INFO] [stdout]     |
[INFO] [stdout]  99 | pub(crate) struct ExtractionProfile {
[INFO] [stdout]     |                   ----------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub lenient_boilerplate: bool,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub min_paragraph_density: f64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `ExtractionProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SERVICE_BOILERPLATE_SELECTORS` is never used
[INFO] [stdout]     --> src/page_type/mod.rs:1052:7
[INFO] [stdout]      |
[INFO] [stdout] 1052 | const SERVICE_BOILERPLATE_SELECTORS: &[&str] = &[
[INFO] [stdout]      |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `remove_comments` is never used
[INFO] [stdout]    --> src/dom.rs:326:8
[INFO] [stdout]     |
[INFO] [stdout] 326 | pub fn remove_comments(_doc: &Document) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:285:12
[INFO] [stdout]     |
[INFO] [stdout] 285 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `precision_discard_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:293:8
[INFO] [stdout]     |
[INFO] [stdout] 293 | pub fn precision_discard_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `TEASER_DISCARDED_CONTENT` is never used
[INFO] [stdout]    --> src/selector/discard.rs:309:12
[INFO] [stdout]     |
[INFO] [stdout] 309 | pub static TEASER_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `teaser_rule_1` is never used
[INFO] [stdout]    --> src/selector/discard.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_clean_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:268:4
[INFO] [stdout]     |
[INFO] [stdout] 268 | fn build_clean_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_strip_selector` is never used
[INFO] [stdout]    --> src/html_processing.rs:308:4
[INFO] [stdout]     |
[INFO] [stdout] 308 | fn build_strip_selector(opts: &Options) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `prune_unwanted_nodes` is never used
[INFO] [stdout]    --> src/html_processing.rs:914:8
[INFO] [stdout]     |
[INFO] [stdout] 914 | pub fn prune_unwanted_nodes(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_with_fallback` is never used
[INFO] [stdout]    --> src/extractor/fallback.rs:604:8
[INFO] [stdout]     |
[INFO] [stdout] 604 | pub fn extract_with_fallback(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `types` and `parent` are never read
[INFO] [stdout]   --> src/metadata/json_ld.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct SchemaData {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 17 |     /// Schema @type values
[INFO] [stdout] 18 |     pub types: Vec<String>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub parent: Option<Box<SchemaData>>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SchemaData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_open_graph` is never used
[INFO] [stdout]    --> src/metadata/meta_tags.rs:216:8
[INFO] [stdout]     |
[INFO] [stdout] 216 | pub fn extract_open_graph(doc: &Document, original: Metadata) -> Metadata {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LinkDensityResult` is never constructed
[INFO] [stdout]   --> src/link_density.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct LinkDensityResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 44.64s
[INFO] running `Command { std: "docker" "inspect" "c703d482ccfa7b8c38db93920bb0702f383c21bccfc8d58e1876c7b03aa22839", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c703d482ccfa7b8c38db93920bb0702f383c21bccfc8d58e1876c7b03aa22839", kill_on_drop: false }`
[INFO] [stdout] c703d482ccfa7b8c38db93920bb0702f383c21bccfc8d58e1876c7b03aa22839
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-04-21" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] d931414be908a7041ca905cbd76747444d70cdcb56b0e946986678808f465290
[INFO] running `Command { std: "docker" "start" "-a" "d931414be908a7041ca905cbd76747444d70cdcb56b0e946986678808f465290", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `crate::result::Metadata`
[INFO] [stderr]    --> src/page_type/mod.rs:861:5
[INFO] [stderr]     |
[INFO] [stderr] 861 | use crate::result::Metadata;
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes`
[INFO] [stderr]   --> src/etree.rs:24:22
[INFO] [stderr]    |
[INFO] [stderr] 24 |     append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove,
[INFO] [stderr]    |                      ^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 25 |     set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text,
[INFO] [stderr]    |                                                                               ^^^^^^^^^^
[INFO] [stderr] 26 |     Document,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CleaningOptions`
[INFO] [stderr]    --> src/html_processing.rs:202:42
[INFO] [stderr]     |
[INFO] [stderr] 202 |         use html_cleaning::{HtmlCleaner, CleaningOptions};
[INFO] [stderr]     |                                          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `comments::extract_comments`
[INFO] [stderr]   --> src/extractor/mod.rs:53:9
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub use comments::extract_comments;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `baseline`, `candidate_is_usable`, `compare_external_extraction`, and `extract_with_fallback`
[INFO] [stderr]   --> src/extractor/mod.rs:54:20
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub use fallback::{baseline, candidate_is_usable, compare_external_extraction, extract_with_fallback};
[INFO] [stderr]    |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `pipeline::extract_content`
[INFO] [stderr]   --> src/extractor/mod.rs:55:9
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub use pipeline::extract_content;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `state::ExtractionState`
[INFO] [stderr]   --> src/extractor/mod.rs:56:9
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub use state::ExtractionState;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `examine_title_element`, `extract_dom_author`, `extract_dom_categories`, `extract_dom_license`, `extract_dom_sitename`, `extract_dom_tags`, `extract_dom_title`, and `extract_dom_url`
[INFO] [stderr]   --> src/metadata/mod.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 |     examine_title_element, extract_dom_author, extract_dom_categories,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 17 |     extract_dom_license, extract_dom_sitename, extract_dom_tags,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stderr] 18 |     extract_dom_title, extract_dom_url,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `json_ld::extract_json_ld`
[INFO] [stderr]   --> src/metadata/mod.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub use json_ld::extract_json_ld;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `examine_meta`, `extract_open_graph`, and `validate_metadata_name`
[INFO] [stderr]   --> src/metadata/mod.rs:21:21
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub use meta_tags::{examine_meta, extract_open_graph, validate_metadata_name};
[INFO] [stderr]    |                     ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `best_total_len` is never read
[INFO] [stderr]    --> src/extract.rs:593:17
[INFO] [stderr]     |
[INFO] [stderr] 553 |                     best_total_len = total;
[INFO] [stderr]     |                     ---------------------- `best_total_len` is overwritten here before the previous value is read
[INFO] [stderr] ...
[INFO] [stderr] 593 |                 best_total_len = total;
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `longer`
[INFO] [stderr]    --> src/extract.rs:743:17
[INFO] [stderr]     |
[INFO] [stderr] 743 |             let longer = c.text_len.max(existing.len());
[INFO] [stderr]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_longer`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `options`
[INFO] [stderr]    --> src/extract.rs:644:46
[INFO] [stderr]     |
[INFO] [stderr] 644 | fn try_multi_candidate_merge(doc: &Document, options: &Options) -> Option<String> {
[INFO] [stderr]     |                                              ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_options`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `block_tags`
[INFO] [stderr]     --> src/extract.rs:1938:9
[INFO] [stderr]      |
[INFO] [stderr] 1938 |     let block_tags = ["div", "p", "pre", "section", "article", "table",
[INFO] [stderr]      |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_tags`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `a_count`
[INFO] [stderr]     --> src/extract.rs:2212:9
[INFO] [stderr]      |
[INFO] [stderr] 2212 |     let a_count: i64 = match i64::try_from(el.select("a").length()) {
[INFO] [stderr]      |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_a_count`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `current_links` is never read
[INFO] [stderr]    --> src/page_type/ml.rs:264:13
[INFO] [stderr]     |
[INFO] [stderr] 264 |             current_links = 0;
[INFO] [stderr]     |             ^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 268 |             current_links = sel.select("a").length() as u32;
[INFO] [stderr]     |             ----------------------------------------------- `current_links` is overwritten here before the previous value is read
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `current_text_len` is never read
[INFO] [stderr]    --> src/page_type/ml.rs:265:13
[INFO] [stderr]     |
[INFO] [stderr] 265 |             current_text_len = 0;
[INFO] [stderr]     |             ^^^^^^^^^^^^^^^^^^^^ this value is reassigned later and never used
[INFO] [stderr] ...
[INFO] [stderr] 270 |             current_text_len = text.trim().len() as u32;
[INFO] [stderr]     |             ------------------------------------------- `current_text_len` is overwritten here before the previous value is read
[INFO] [stderr] 
[INFO] [stderr] warning: function `compute_extraction_quality_ml` is never used
[INFO] [stderr]    --> src/extract.rs:775:4
[INFO] [stderr]     |
[INFO] [stderr] 775 | fn compute_extraction_quality_ml(
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `strip_link_dense_sections` is never used
[INFO] [stderr]     --> src/extract.rs:1150:4
[INFO] [stderr]      |
[INFO] [stderr] 1150 | fn strip_link_dense_sections(html: &str) -> String {
[INFO] [stderr]      |    ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `lenient_boilerplate` and `min_paragraph_density` are never read
[INFO] [stderr]    --> src/page_type/mod.rs:110:9
[INFO] [stderr]     |
[INFO] [stderr]  99 | pub(crate) struct ExtractionProfile {
[INFO] [stderr]     |                   ----------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 110 |     pub lenient_boilerplate: bool,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     pub min_paragraph_density: f64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `ExtractionProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SERVICE_BOILERPLATE_SELECTORS` is never used
[INFO] [stderr]     --> src/page_type/mod.rs:1052:7
[INFO] [stderr]      |
[INFO] [stderr] 1052 | const SERVICE_BOILERPLATE_SELECTORS: &[&str] = &[
[INFO] [stderr]      |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `remove_attribute` is never used
[INFO] [stderr]   --> src/dom.rs:63:8
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub fn remove_attribute(sel: &Selection, name: &str) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `inner_html` is never used
[INFO] [stderr]    --> src/dom.rs:106:8
[INFO] [stderr]     |
[INFO] [stderr] 106 | pub fn inner_html(sel: &Selection) -> StrTendril {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `next_sibling` is never used
[INFO] [stderr]    --> src/dom.rs:147:8
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub fn next_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `prev_sibling` is never used
[INFO] [stderr]    --> src/dom.rs:156:8
[INFO] [stderr]     |
[INFO] [stderr] 156 | pub fn prev_sibling<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `next_element_sibling` is never used
[INFO] [stderr]    --> src/dom.rs:164:8
[INFO] [stderr]     |
[INFO] [stderr] 164 | pub fn next_element_sibling<'a>(sel: &Selection<'a>) -> Option<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `query_selector` is never used
[INFO] [stderr]    --> src/dom.rs:201:8
[INFO] [stderr]     |
[INFO] [stderr] 201 | pub fn query_selector<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `query_selector_all` is never used
[INFO] [stderr]    --> src/dom.rs:210:8
[INFO] [stderr]     |
[INFO] [stderr] 210 | pub fn query_selector_all<'a>(sel: &Selection<'a>, selector: &str) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_elements_by_tag_name` is never used
[INFO] [stderr]    --> src/dom.rs:219:8
[INFO] [stderr]     |
[INFO] [stderr] 219 | pub fn get_elements_by_tag_name<'a>(sel: &Selection<'a>, tag: &str) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `strip_tags` is never used
[INFO] [stderr]    --> src/dom.rs:237:8
[INFO] [stderr]     |
[INFO] [stderr] 237 | pub fn strip_tags(sel: &Selection, tags: &[&str]) {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `append_html` is never used
[INFO] [stderr]    --> src/dom.rs:252:8
[INFO] [stderr]     |
[INFO] [stderr] 252 | pub fn append_html(sel: &Selection, html: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `set_inner_html` is never used
[INFO] [stderr]    --> src/dom.rs:260:8
[INFO] [stderr]     |
[INFO] [stderr] 260 | pub fn set_inner_html(sel: &Selection, html: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `replace_with_html` is never used
[INFO] [stderr]    --> src/dom.rs:268:8
[INFO] [stderr]     |
[INFO] [stderr] 268 | pub fn replace_with_html(sel: &Selection, html: &str) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `replace_element` is never used
[INFO] [stderr]    --> src/dom.rs:278:8
[INFO] [stderr]     |
[INFO] [stderr] 278 | pub fn replace_element(old: &Selection, new: &Document) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_void_element` is never used
[INFO] [stderr]    --> src/dom.rs:297:8
[INFO] [stderr]     |
[INFO] [stderr] 297 | pub fn is_void_element(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `remove_comments` is never used
[INFO] [stderr]    --> src/dom.rs:326:8
[INFO] [stderr]     |
[INFO] [stderr] 326 | pub fn remove_comments(_doc: &Document) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `append_child` is never used
[INFO] [stderr]    --> src/dom.rs:367:8
[INFO] [stderr]     |
[INFO] [stderr] 367 | pub fn append_child(parent: &Selection, child: &Selection) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `child_nodes` is never used
[INFO] [stderr]    --> src/dom.rs:377:8
[INFO] [stderr]     |
[INFO] [stderr] 377 | pub fn child_nodes<'a>(sel: &Selection<'a>) -> Selection<'a> {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clear_all_attributes` is never used
[INFO] [stderr]    --> src/dom.rs:384:8
[INFO] [stderr]     |
[INFO] [stderr] 384 | pub fn clear_all_attributes(sel: &Selection) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse` is never used
[INFO] [stderr]    --> src/dom.rs:398:8
[INFO] [stderr]     |
[INFO] [stderr] 398 | pub fn parse(html: &str) -> Document {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stderr]    --> src/selector/discard.rs:285:12
[INFO] [stderr]     |
[INFO] [stderr] 285 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `precision_discard_rule_1` is never used
[INFO] [stderr]    --> src/selector/discard.rs:293:8
[INFO] [stderr]     |
[INFO] [stderr] 293 | pub fn precision_discard_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TEASER_DISCARDED_CONTENT` is never used
[INFO] [stderr]    --> src/selector/discard.rs:309:12
[INFO] [stderr]     |
[INFO] [stderr] 309 | pub static TEASER_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `teaser_rule_1` is never used
[INFO] [stderr]    --> src/selector/discard.rs:317:8
[INFO] [stderr]     |
[INFO] [stderr] 317 | pub fn teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_discardable` is never used
[INFO] [stderr]    --> src/selector/discard.rs:375:8
[INFO] [stderr]     |
[INFO] [stderr] 375 | pub fn find_discardable<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `PRECISION_DISCARDED_CONTENT` is never used
[INFO] [stderr]   --> src/selector/precision.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub static PRECISION_DISCARDED_CONTENT: &[Rule] = &[
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `precision_discarded_content_rule_1` is never used
[INFO] [stderr]   --> src/selector/precision.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn precision_discarded_content_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `precision_discarded_content_rule_2` is never used
[INFO] [stderr]   --> src/selector/precision.rs:55:8
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub fn precision_discarded_content_rule_2(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `DISCARDED_TEASER` is never used
[INFO] [stderr]   --> src/selector/precision.rs:84:12
[INFO] [stderr]    |
[INFO] [stderr] 84 | pub static DISCARDED_TEASER: &[Rule] = &[discarded_teaser_rule_1];
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `discarded_teaser_rule_1` is never used
[INFO] [stderr]   --> src/selector/precision.rs:97:8
[INFO] [stderr]    |
[INFO] [stderr] 97 | pub fn discarded_teaser_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `DISCARDED_IMAGE` is never used
[INFO] [stderr]    --> src/selector/precision.rs:125:12
[INFO] [stderr]     |
[INFO] [stderr] 125 | pub static DISCARDED_IMAGE: &[Rule] = &[discarded_image_rule_1];
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `discarded_image_rule_1` is never used
[INFO] [stderr]    --> src/selector/precision.rs:138:8
[INFO] [stderr]     |
[INFO] [stderr] 138 | pub fn discarded_image_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_discard_precision` is never used
[INFO] [stderr]    --> src/selector/precision.rs:175:8
[INFO] [stderr]     |
[INFO] [stderr] 175 | pub fn should_discard_precision(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_teaser` is never used
[INFO] [stderr]    --> src/selector/precision.rs:195:8
[INFO] [stderr]     |
[INFO] [stderr] 195 | pub fn is_teaser(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_image_discard` is never used
[INFO] [stderr]    --> src/selector/precision.rs:215:8
[INFO] [stderr]     |
[INFO] [stderr] 215 | pub fn is_image_discard(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `COMMENTS` is never used
[INFO] [stderr]   --> src/selector/comments.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub static COMMENTS: &[Rule] = &[
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `comments_rule_1` is never used
[INFO] [stderr]   --> src/selector/comments.rs:35:8
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub fn comments_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `comments_rule_2` is never used
[INFO] [stderr]   --> src/selector/comments.rs:64:8
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub fn comments_rule_2(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `comments_rule_3` is never used
[INFO] [stderr]   --> src/selector/comments.rs:92:8
[INFO] [stderr]    |
[INFO] [stderr] 92 | pub fn comments_rule_3(sel: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `comments_rule_4` is never used
[INFO] [stderr]    --> src/selector/comments.rs:117:8
[INFO] [stderr]     |
[INFO] [stderr] 117 | pub fn comments_rule_4(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `DISCARDED_COMMENTS` is never used
[INFO] [stderr]    --> src/selector/comments.rs:137:12
[INFO] [stderr]     |
[INFO] [stderr] 137 | pub static DISCARDED_COMMENTS: &[Rule] = &[
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `discarded_comments_rule_1` is never used
[INFO] [stderr]    --> src/selector/comments.rs:150:8
[INFO] [stderr]     |
[INFO] [stderr] 150 | pub fn discarded_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `discarded_comments_rule_2` is never used
[INFO] [stderr]    --> src/selector/comments.rs:169:8
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub fn discarded_comments_rule_2(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `discarded_comments_rule_3` is never used
[INFO] [stderr]    --> src/selector/comments.rs:181:8
[INFO] [stderr]     |
[INFO] [stderr] 181 | pub fn discarded_comments_rule_3(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `REMOVED_COMMENTS` is never used
[INFO] [stderr]    --> src/selector/comments.rs:207:12
[INFO] [stderr]     |
[INFO] [stderr] 207 | pub static REMOVED_COMMENTS: &[Rule] = &[removed_comments_rule_1];
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `removed_comments_rule_1` is never used
[INFO] [stderr]    --> src/selector/comments.rs:216:8
[INFO] [stderr]     |
[INFO] [stderr] 216 | pub fn removed_comments_rule_1(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_comments` is never used
[INFO] [stderr]    --> src/selector/comments.rs:245:8
[INFO] [stderr]     |
[INFO] [stderr] 245 | pub fn find_comments<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_comment_section` is never used
[INFO] [stderr]    --> src/selector/comments.rs:257:8
[INFO] [stderr]     |
[INFO] [stderr] 257 | pub fn is_comment_section(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_comment_debris` is never used
[INFO] [stderr]    --> src/selector/comments.rs:263:8
[INFO] [stderr]     |
[INFO] [stderr] 263 | pub fn is_comment_debris(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_remove_comments` is never used
[INFO] [stderr]    --> src/selector/comments.rs:269:8
[INFO] [stderr]     |
[INFO] [stderr] 269 | pub fn should_remove_comments(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_authors` is never used
[INFO] [stderr]    --> src/selector/meta.rs:517:8
[INFO] [stderr]     |
[INFO] [stderr] 517 | pub fn find_authors<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_titles` is never used
[INFO] [stderr]    --> src/selector/meta.rs:528:8
[INFO] [stderr]     |
[INFO] [stderr] 528 | pub fn find_titles<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_tags` is never used
[INFO] [stderr]    --> src/selector/meta.rs:539:8
[INFO] [stderr]     |
[INFO] [stderr] 539 | pub fn find_tags<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_categories` is never used
[INFO] [stderr]    --> src/selector/meta.rs:550:8
[INFO] [stderr]     |
[INFO] [stderr] 550 | pub fn find_categories<'a>(root: &Selection<'a>) -> Vec<Selection<'a>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_author_discard` is never used
[INFO] [stderr]    --> src/selector/meta.rs:561:8
[INFO] [stderr]     |
[INFO] [stderr] 561 | pub fn is_author_discard(sel: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_node_ancestors` is never used
[INFO] [stderr]   --> src/selector/utils.rs:41:8
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub fn get_node_ancestors<'a>(sel: &Selection<'a>, ancestor_tag: &str) -> Vec<Selection<'a>> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `id_class` is never used
[INFO] [stderr]    --> src/selector/utils.rs:147:8
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub fn id_class(sel: &Selection) -> String {
[INFO] [stderr]     |        ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_tag` is never used
[INFO] [stderr]    --> src/selector/utils.rs:158:8
[INFO] [stderr]     |
[INFO] [stderr] 158 | pub fn is_tag(sel: &Selection, expected: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_one_of_tags` is never used
[INFO] [stderr]    --> src/selector/utils.rs:180:8
[INFO] [stderr]     |
[INFO] [stderr] 180 | pub fn is_one_of_tags(sel: &Selection, tags: &[&str]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `ELEMENT_WITH_SIZE_ATTR` is never used
[INFO] [stderr]   --> src/html_processing.rs:27:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | pub static ELEMENT_WITH_SIZE_ATTR: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `ALLOWED_ATTRIBUTES` is never used
[INFO] [stderr]   --> src/html_processing.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub static ALLOWED_ATTRIBUTES: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_LB_TAGS` is never used
[INFO] [stderr]   --> src/html_processing.rs:82:8
[INFO] [stderr]    |
[INFO] [stderr] 82 | static XML_LB_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stderr]   --> src/html_processing.rs:89:8
[INFO] [stderr]    |
[INFO] [stderr] 89 | static XML_GRAPHIC_TAGS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stderr]   --> src/html_processing.rs:96:8
[INFO] [stderr]    |
[INFO] [stderr] 96 | static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MIN_DUPLICATE_CHECK_SIZE` is never used
[INFO] [stderr]    --> src/html_processing.rs:102:7
[INFO] [stderr]     |
[INFO] [stderr] 102 | const MIN_DUPLICATE_CHECK_SIZE: usize = 100;
[INFO] [stderr]     |       ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAX_DUPLICATE_COUNT` is never used
[INFO] [stderr]    --> src/html_processing.rs:105:7
[INFO] [stderr]     |
[INFO] [stderr] 105 | const MAX_DUPLICATE_COUNT: i32 = 2;
[INFO] [stderr]     |       ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `doc_cleaning` is never used
[INFO] [stderr]    --> src/html_processing.rs:131:8
[INFO] [stderr]     |
[INFO] [stderr] 131 | pub fn doc_cleaning(doc: &Document, opts: &Options) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `build_clean_selector` is never used
[INFO] [stderr]    --> src/html_processing.rs:268:4
[INFO] [stderr]     |
[INFO] [stderr] 268 | fn build_clean_selector(opts: &Options) -> Vec<String> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `build_strip_selector` is never used
[INFO] [stderr]    --> src/html_processing.rs:308:4
[INFO] [stderr]     |
[INFO] [stderr] 308 | fn build_strip_selector(opts: &Options) -> Vec<String> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `post_cleaning` is never used
[INFO] [stderr]    --> src/html_processing.rs:351:8
[INFO] [stderr]     |
[INFO] [stderr] 351 | pub fn post_cleaning(doc: &Document) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `delete_by_link_density` is never used
[INFO] [stderr]    --> src/html_processing.rs:408:8
[INFO] [stderr]     |
[INFO] [stderr] 408 | pub fn delete_by_link_density(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `text_chars_test` is never used
[INFO] [stderr]    --> src/html_processing.rs:448:8
[INFO] [stderr]     |
[INFO] [stderr] 448 | pub fn text_chars_test(text: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `text_filter` is never used
[INFO] [stderr]    --> src/html_processing.rs:455:4
[INFO] [stderr]     |
[INFO] [stderr] 455 | fn text_filter(element: &Selection) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_image_element` is never used
[INFO] [stderr]    --> src/html_processing.rs:656:4
[INFO] [stderr]     |
[INFO] [stderr] 656 | fn is_image_element(sel: &Selection) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_image_file` is never used
[INFO] [stderr]    --> src/html_processing.rs:678:4
[INFO] [stderr]     |
[INFO] [stderr] 678 | fn is_image_file(src: &str) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `duplicate_test` is never used
[INFO] [stderr]    --> src/html_processing.rs:699:4
[INFO] [stderr]     |
[INFO] [stderr] 699 | fn duplicate_test(element: &Selection, cache: &mut LruCache) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clear_all_attributes` is never used
[INFO] [stderr]    --> src/html_processing.rs:720:4
[INFO] [stderr]     |
[INFO] [stderr] 720 | fn clear_all_attributes(sel: &Selection) {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_absolute_url` is never used
[INFO] [stderr]    --> src/html_processing.rs:730:4
[INFO] [stderr]     |
[INFO] [stderr] 730 | fn create_absolute_url(href: &str, base_url: Option<&str>) -> String {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `process_node` is never used
[INFO] [stderr]    --> src/html_processing.rs:779:8
[INFO] [stderr]     |
[INFO] [stderr] 779 | pub fn process_node(element: &Selection, cache: Option<&mut LruCache>, opts: &Options) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_text_node` is never used
[INFO] [stderr]    --> src/html_processing.rs:840:8
[INFO] [stderr]     |
[INFO] [stderr] 840 | pub fn handle_text_node(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `prune_unwanted_nodes` is never used
[INFO] [stderr]    --> src/html_processing.rs:914:8
[INFO] [stderr]     |
[INFO] [stderr] 914 | pub fn prune_unwanted_nodes(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `convert_tags` is never used
[INFO] [stderr]    --> src/html_processing.rs:983:8
[INFO] [stderr]     |
[INFO] [stderr] 983 | pub fn convert_tags(tree: &Selection, opts: &Options) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `process_comments_node` is never used
[INFO] [stderr]   --> src/extractor/comments.rs:20:4
[INFO] [stderr]    |
[INFO] [stderr] 20 | fn process_comments_node<'a>(
[INFO] [stderr]    |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `extract_comments` is never used
[INFO] [stderr]   --> src/extractor/comments.rs:50:8
[INFO] [stderr]    |
[INFO] [stderr] 50 | pub fn extract_comments(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `extract_with_fallback` is never used
[INFO] [stderr]    --> src/extractor/fallback.rs:604:8
[INFO] [stderr]     |
[INFO] [stderr] 604 | pub fn extract_with_fallback(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_text_element` is never used
[INFO] [stderr]   --> src/extractor/handlers.rs:21:8
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub fn is_text_element(element: &Selection) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `define_new_element` is never used
[INFO] [stderr]   --> src/extractor/handlers.rs:32:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub fn define_new_element(processed: Option<&Selection>, original: &Selection) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `add_sub_element` is never used
[INFO] [stderr]   --> src/extractor/handlers.rs:45:8
[INFO] [stderr]    |
[INFO] [stderr] 45 | pub fn add_sub_element<'a>(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_titles` is never used
[INFO] [stderr]   --> src/extractor/handlers.rs:78:8
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub fn handle_titles(
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_formatting` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:154:8
[INFO] [stderr]     |
[INFO] [stderr] 154 | pub fn handle_formatting(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_code_block_element` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:209:8
[INFO] [stderr]     |
[INFO] [stderr] 209 | pub fn is_code_block_element(element: &Selection) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_code_blocks` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:245:8
[INFO] [stderr]     |
[INFO] [stderr] 245 | pub fn handle_code_blocks(element: &Selection, state: &mut ExtractionState) -> Document {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_other_elements` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:272:8
[INFO] [stderr]     |
[INFO] [stderr] 272 | pub fn handle_other_elements(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_image` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:327:8
[INFO] [stderr]     |
[INFO] [stderr] 327 | pub fn handle_image(element: &Selection) -> Option<Document> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_image_file` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:395:4
[INFO] [stderr]     |
[INFO] [stderr] 395 | fn is_image_file(src: &str) -> bool {
[INFO] [stderr]     |    ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `process_nested_element` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:419:8
[INFO] [stderr]     |
[INFO] [stderr] 419 | pub fn process_nested_element(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_lists` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:460:8
[INFO] [stderr]     |
[INFO] [stderr] 460 | pub fn handle_lists(
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_quotes` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:544:8
[INFO] [stderr]     |
[INFO] [stderr] 544 | pub fn handle_quotes(
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_paragraphs` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:594:8
[INFO] [stderr]     |
[INFO] [stderr] 594 | pub fn handle_paragraphs(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_table` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:737:8
[INFO] [stderr]     |
[INFO] [stderr] 737 | pub fn handle_table(
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `process_table_cell` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:815:4
[INFO] [stderr]     |
[INFO] [stderr] 815 | fn process_table_cell(cell: &Selection, state: &mut ExtractionState, opts: &Options) -> String {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `html_escape` is never used
[INFO] [stderr]    --> src/extractor/handlers.rs:878:4
[INFO] [stderr]     |
[INFO] [stderr] 878 | fn html_escape(s: &str) -> String {
[INFO] [stderr]     |    ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `handle_text_elem` is never used
[INFO] [stderr]   --> src/extractor/pipeline.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn handle_text_elem(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `recover_wild_text` is never used
[INFO] [stderr]   --> src/extractor/pipeline.rs:91:8
[INFO] [stderr]    |
[INFO] [stderr] 91 | pub fn recover_wild_text(
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `extract_content` is never used
[INFO] [stderr]    --> src/extractor/pipeline.rs:170:8
[INFO] [stderr]     |
[INFO] [stderr] 170 | pub fn extract_content(doc: &Document, opts: &Options) -> (Document, String) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `prune_unwanted_sections` is never used
[INFO] [stderr]    --> src/extractor/pruning.rs:141:8
[INFO] [stderr]     |
[INFO] [stderr] 141 | pub fn prune_unwanted_sections<S: std::hash::BuildHasher>(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `prune_in_place` is never used
[INFO] [stderr]    --> src/extractor/pruning.rs:211:4
[INFO] [stderr]     |
[INFO] [stderr] 211 | fn prune_in_place(tree: &Selection, rules: &[Rule]) {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `strip_non_potential_tags` is never used
[INFO] [stderr]    --> src/extractor/pruning.rs:233:8
[INFO] [stderr]     |
[INFO] [stderr] 233 | pub fn strip_non_potential_tags<S: std::hash::BuildHasher>(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ExtractionState` is never constructed
[INFO] [stderr]   --> src/extractor/state.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct ExtractionState {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/extractor/state.rs:31:12
[INFO] [stderr]     |
[INFO] [stderr]  25 | impl ExtractionState {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  31 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  43 |     pub fn mark_done(&mut self, node_id: NodeId) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  51 |     pub fn is_done(&self, node_id: NodeId) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  57 |     pub fn is_potential_tag(&self, tag: &str) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  62 |     pub fn add_potential_tag(&mut self, tag: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  67 |     pub fn remove_potential_tag(&mut self, tag: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  75 |     pub fn configure_from_options(&mut self, opts: &crate::Options) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub fn potential_tags(&self) -> &HashSet<String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     pub fn clone_potential_tags(&self) -> HashSet<String> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_LIST_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:12:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub static XML_LIST_TAGS: [&str; 3] = ["ul", "ol", "dl"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_QUOTE_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub static XML_QUOTE_TAGS: [&str; 3] = ["blockquote", "pre", "q"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_HEAD_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub static XML_HEAD_TAGS: [&str; 7] = ["h1", "h2", "h3", "h4", "h5", "h6", "summary"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_LB_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub static XML_LB_TAGS: [&str; 3] = ["br", "hr", "lb"];
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_HI_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:24:12
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub static XML_HI_TAGS: [&str; 12] = [
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_REF_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:29:12
[INFO] [stderr]    |
[INFO] [stderr] 29 | pub static XML_REF_TAGS: [&str; 1] = ["a"];
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_GRAPHIC_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:32:12
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub static XML_GRAPHIC_TAGS: [&str; 1] = ["img"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_ITEM_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub static XML_ITEM_TAGS: [&str; 3] = ["dd", "dt", "li"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_CELL_TAGS` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:38:12
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub static XML_CELL_TAGS: [&str; 2] = ["th", "td"];
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_LIST_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:43:12
[INFO] [stderr]    |
[INFO] [stderr] 43 | pub static XML_LIST_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_QUOTE_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:48:12
[INFO] [stderr]    |
[INFO] [stderr] 48 | pub static XML_QUOTE_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_HEAD_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:53:12
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub static XML_HEAD_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_LB_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:58:12
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub static XML_LB_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_HI_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub static XML_HI_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_REF_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:68:12
[INFO] [stderr]    |
[INFO] [stderr] 68 | pub static XML_REF_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_GRAPHIC_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:73:12
[INFO] [stderr]    |
[INFO] [stderr] 73 | pub static XML_GRAPHIC_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_ITEM_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:78:12
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub static XML_ITEM_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `XML_CELL_TAG_SET` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:83:12
[INFO] [stderr]    |
[INFO] [stderr] 83 | pub static XML_CELL_TAG_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TAGS_TO_CLEAN` is never used
[INFO] [stderr]   --> src/extractor/tags.rs:91:12
[INFO] [stderr]    |
[INFO] [stderr] 91 | pub static TAGS_TO_CLEAN: [&str; 50] = [
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TAGS_TO_CLEAN_SET` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:104:12
[INFO] [stderr]     |
[INFO] [stderr] 104 | pub static TAGS_TO_CLEAN_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TAGS_TO_STRIP` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:110:12
[INFO] [stderr]     |
[INFO] [stderr] 110 | pub static TAGS_TO_STRIP: [&str; 18] = [
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TAGS_TO_STRIP_SET` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:116:12
[INFO] [stderr]     |
[INFO] [stderr] 116 | pub static TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TABLE_TAGS_TO_STRIP_SET` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:138:12
[INFO] [stderr]     |
[INFO] [stderr] 138 | pub static TABLE_TAGS_TO_STRIP_SET: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_clean_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:147:8
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub fn should_clean_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_strip_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:154:8
[INFO] [stderr]     |
[INFO] [stderr] 154 | pub fn should_strip_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `should_remove_if_empty` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:161:8
[INFO] [stderr]     |
[INFO] [stderr] 161 | pub fn should_remove_if_empty(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `TAG_CATALOG` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:168:12
[INFO] [stderr]     |
[INFO] [stderr] 168 | pub static TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `FORMAT_TAG_CATALOG` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:182:12
[INFO] [stderr]     |
[INFO] [stderr] 182 | pub static FORMAT_TAG_CATALOG: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_list_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:210:8
[INFO] [stderr]     |
[INFO] [stderr] 210 | pub fn is_xml_list_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_quote_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:217:8
[INFO] [stderr]     |
[INFO] [stderr] 217 | pub fn is_xml_quote_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_head_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:224:8
[INFO] [stderr]     |
[INFO] [stderr] 224 | pub fn is_xml_head_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_lb_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:231:8
[INFO] [stderr]     |
[INFO] [stderr] 231 | pub fn is_xml_lb_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_hi_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:238:8
[INFO] [stderr]     |
[INFO] [stderr] 238 | pub fn is_xml_hi_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_ref_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:245:8
[INFO] [stderr]     |
[INFO] [stderr] 245 | pub fn is_xml_ref_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_graphic_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:252:8
[INFO] [stderr]     |
[INFO] [stderr] 252 | pub fn is_xml_graphic_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_item_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:259:8
[INFO] [stderr]     |
[INFO] [stderr] 259 | pub fn is_xml_item_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_xml_cell_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:266:8
[INFO] [stderr]     |
[INFO] [stderr] 266 | pub fn is_xml_cell_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_in_tag_catalog` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:273:8
[INFO] [stderr]     |
[INFO] [stderr] 273 | pub fn is_in_tag_catalog(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_format_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:280:8
[INFO] [stderr]     |
[INFO] [stderr] 280 | pub fn is_format_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_valid_tag` is never used
[INFO] [stderr]    --> src/extractor/tags.rs:287:8
[INFO] [stderr]     |
[INFO] [stderr] 287 | pub fn is_valid_tag(tag: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `extract_metadata_light` is never used
[INFO] [stderr]    --> src/metadata/mod.rs:238:8
[INFO] [stderr]     |
[INFO] [stderr] 238 | pub fn extract_metadata_light(doc: &Document, opts: &Options) -> Metadata {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `types` and `parent` are never read
[INFO] [stderr]   --> src/metadata/json_ld.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct SchemaData {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 17 |     /// Schema @type values
[INFO] [stderr] 18 |     pub types: Vec<String>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 24 |     pub parent: Option<Box<SchemaData>>,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SchemaData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `extract_open_graph` is never used
[INFO] [stderr]    --> src/metadata/meta_tags.rs:216:8
[INFO] [stderr]     |
[INFO] [stderr] 216 | pub fn extract_open_graph(doc: &Document, original: Metadata) -> Metadata {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_base_url` is never used
[INFO] [stderr]    --> src/url_utils.rs:107:8
[INFO] [stderr]     |
[INFO] [stderr] 107 | pub fn get_base_url(url_str: &str) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_url` is never used
[INFO] [stderr]    --> src/url_utils.rs:175:8
[INFO] [stderr]     |
[INFO] [stderr] 175 | pub fn parse_url(url_str: &str) -> Option<Url> {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `normalize_url` is never used
[INFO] [stderr]    --> src/url_utils.rs:186:8
[INFO] [stderr]     |
[INFO] [stderr] 186 | pub fn normalize_url(url_str: &str) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `urls_match` is never used
[INFO] [stderr]    --> src/url_utils.rs:205:8
[INFO] [stderr]     |
[INFO] [stderr] 205 | pub fn urls_match(url1: &str, url2: &str) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `LinkDensityResult` is never constructed
[INFO] [stderr]   --> src/link_density.rs:11:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub struct LinkDensityResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `link_density_test_with_info` is never used
[INFO] [stderr]    --> src/link_density.rs:156:8
[INFO] [stderr]     |
[INFO] [stderr] 156 | pub fn link_density_test_with_info(element: &Selection, options: &Options) -> (bool, bool) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes`
[INFO] [stderr]   --> src/etree.rs:24:22
[INFO] [stderr]    |
[INFO] [stderr] 24 |     append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove,
[INFO] [stderr]    |                      ^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 25 |     set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text,
[INFO] [stderr]    |                                                                               ^^^^^^^^^^
[INFO] [stderr] 26 |     Document,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]    --> src/markdown.rs:527:22
[INFO] [stderr]     |
[INFO] [stderr] 527 |         let result = post_process_markdown(input);
[INFO] [stderr]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]    --> src/markdown.rs:537:22
[INFO] [stderr]     |
[INFO] [stderr] 537 |         let result = post_process_markdown(input);
[INFO] [stderr]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]    --> src/markdown.rs:545:22
[INFO] [stderr]     |
[INFO] [stderr] 545 |         let result = post_process_markdown(input);
[INFO] [stderr]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]    --> src/markdown.rs:552:22
[INFO] [stderr]     |
[INFO] [stderr] 552 |         let result = post_process_markdown(input);
[INFO] [stderr]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]    --> src/markdown.rs:559:22
[INFO] [stderr]     |
[INFO] [stderr] 559 |         let result = post_process_markdown(input);
[INFO] [stderr]     |                      ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `rs-trafilatura` (lib) generated 179 warnings (run `cargo fix --lib -p rs-trafilatura` to apply 14 suggestions)
[INFO] [stderr] warning: `rs-trafilatura` (lib test) generated 37 warnings (31 duplicates) (run `cargo fix --lib -p rs-trafilatura --tests` to apply 1 suggestion)
[INFO] [stderr] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]  --> tests/spike_markdown_validation.rs:8:35
[INFO] [stderr]   |
[INFO] [stderr] 8 |     use rs_trafilatura::markdown::post_process_markdown;
[INFO] [stderr]   |                                   ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead
[INFO] [stderr]   --> tests/spike_markdown_validation.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 13 |         post_process_markdown(&raw)
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `md`
[INFO] [stderr]    --> tests/spike_markdown_validation.rs:159:13
[INFO] [stderr]     |
[INFO] [stderr] 159 |         let md = to_markdown(html);
[INFO] [stderr]     |             ^^ help: if this is intentional, prefix it with an underscore: `_md`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `md`
[INFO] [stderr]    --> tests/spike_markdown_validation.rs:166:13
[INFO] [stderr]     |
[INFO] [stderr] 166 |         let md = to_markdown(html);
[INFO] [stderr]     |             ^^ help: if this is intentional, prefix it with an underscore: `_md`
[INFO] [stderr] 
[INFO] [stderr] warning: `rs-trafilatura` (test "spike_markdown_validation") generated 4 warnings (run `cargo fix --test "spike_markdown_validation" -p rs-trafilatura` to apply 2 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.48s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rs_trafilatura-e4a853a79008f454)
[INFO] [stdout] 
[INFO] [stdout] running 619 tests
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_size ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_deref_to_str ... ok
[INFO] [stdout] test dom::tests::test_attribute_modification ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_uses_rc_internally ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_clone_is_cheap ... ok
[INFO] [stdout] test dom::tests::test_append_and_set_html ... ok
[INFO] [stdout] test dom::tests::test_clone_document ... ok
[INFO] [stdout] test dom::tests::test_get_all_attributes ... ok
[INFO] [stdout] test dom::tests::test_get_all_attributes_empty ... ok
[INFO] [stdout] test dom::tests::test_iteration_and_removal ... ok
[INFO] [stdout] test dom::tests::test_previous_element_sibling ... ok
[INFO] [stdout] test dom::tests::test_previous_element_sibling_none ... ok
[INFO] [stdout] test dom::tests::test_tag_name ... ok
[INFO] [stdout] test dom::tests::test_is_void_element ... ok
[INFO] [stdout] test dom::tests::test_querying ... ok
[INFO] [stdout] test dom::tests::test_next_element_sibling ... ok
[INFO] [stdout] test dom::tests::test_remove_elements ... ok
[INFO] [stdout] test dom::tests::test_navigation ... ok
[INFO] [stdout] test dom::tests::test_operations_on_empty_selection ... ok
[INFO] [stdout] test dom::tests::test_rename_element ... ok
[INFO] [stdout] test dom::tests::test_parse_and_select ... ok
[INFO] [stdout] test dom::tests::test_replace_with_html ... ok
[INFO] [stdout] test dom::tests::test_strip_tags_keep_content ... ok
[INFO] [stdout] test dom::tests::test_text_and_html_content ... ok
[INFO] [stdout] test encoding::tests::transcode_iso88591_to_utf8 ... ok
[INFO] [stdout] test encoding::tests::detect_iso88591_from_meta_charset ... ok
[INFO] [stdout] test encoding::tests::transcode_windows1252_to_utf8 ... ok
[INFO] [stdout] test encoding::tests::extract_charset_case_insensitive ... ok
[INFO] [stdout] test encoding::tests::detect_utf8_from_meta_charset ... ok
[INFO] [stdout] test encoding::tests::detect_charset_from_content_type ... ok
[INFO] [stdout] test encoding::tests::handle_invalid_encoding_gracefully ... ok
[INFO] [stdout] test encoding::tests::transcode_utf8_passthrough ... ok
[INFO] [stdout] test encoding::tests::detect_windows1252_from_meta_charset ... ok
[INFO] [stdout] test dom::tests::test_next_element_sibling_none ... ok
[INFO] [stdout] test encoding::tests::extract_charset_with_quotes ... ok
[INFO] [stdout] test encoding::tests::extract_charset_without_quotes ... ok
[INFO] [stdout] test encoding::tests::default_to_utf8_when_no_charset ... ok
[INFO] [stdout] test encoding::tests::extract_content_type_charset_standard ... ok
[INFO] [stdout] test extract::tests::clean_text_normalizes_whitespace ... ok
[INFO] [stdout] test encoding::tests::extract_content_type_charset_case_insensitive ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_invalid_nesting ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_incomplete_entities ... ok
[INFO] [stdout] test extract::tests::extract_returns_content_from_article_tag ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_whitespace_only_input ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_unclosed_tags ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_missing_closing_tags ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_broken_attributes ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_body_only_html ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_empty_string_input ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_empty_content ... ok
[INFO] [stdout] test extract::tests::test_content_truncation_max_extracted_len ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_minimal_html ... ok
[INFO] [stdout] test extract::tests::test_false_positive_helper ... ok
[INFO] [stdout] test dom::tests::test_missing_attributes_return_none ... ok
[INFO] [stdout] test extract::test_bloginner_content_not_boilerplate ... ok
[INFO] [stdout] test extract::tests::test_bem_layout_prefix_not_boilerplate ... ok
[INFO] [stdout] test extract::tests::test_count_words_filters_by_min_length ... ok
[INFO] [stdout] test extract::tests::test_actual_boilerplate_still_detected ... ok
[INFO] [stdout] test extract::tests::extract_merges_split_article_body_chunks_conservatively ... ok
[INFO] [stdout] test extract::tests::is_boilerplate_detects_navigation ... ok
[INFO] [stdout] test extract::tests::test_comments_validation_min_output_comm_size ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_no_comments ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_clears_attributes ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_with_comments_section ... ok
[INFO] [stdout] test extract::tests::test_mixed_bem_and_boilerplate ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_valid_tag ... ok
[INFO] [stdout] test extractor::fallback::share_plugin_tests::test_share_plugin_selector_matches ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_empty_text ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_deduplication ... ok
[INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_empty_extracted ... ok
[INFO] [stdout] test extract::tests::test_content_length_validation_min_extracted_len ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_nested ... ok
[INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_removes_invalid ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_insufficient_content ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_removes_from_dom ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_paragraph_scraping ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_formatting_orphan ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_basic ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_data_src ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_data_src_lazy ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_no_src ... ok
[INFO] [stdout] test extract::tests::test_word_count_validation_min_output_size ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_non_image_src ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_with_html ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_protocol_relative ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_with_title ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_code_blocks ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_empty ... ok
[INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_strips_links_when_disabled ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_other_elements_w3_code ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_nested ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_with_text ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_formatting ... ok
[INFO] [stdout] test dom::tests::test_children_navigation ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_with_article_tag ... ok
[INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_much_longer ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_with_link ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_invalid_tag ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_titles_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_titles_summary_to_bold ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_list_recall_mode ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_truncated_content ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_code_block ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_strips_structural ... ok
[INFO] [stdout] test extract::tests::test_bem_component_prefix_not_boilerplate ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_nested_p ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_strips_links ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_nested_elements ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_removed_comments ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_multiple_rows ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_github_highlight ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_png ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_with_query ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_no_alphanumeric ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_with_text ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_code_tag ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_lang ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_basic ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_not_image ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_empty ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_heading ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_formatting ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_paragraph ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_image ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_list ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_single_code_child ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_table ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_quote ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_code_routes_to_quotes ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_recall_mode ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_removes_trailing_titles ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_with_boilerplate ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_preserves_tail ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_not_code ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_finds_paragraphs ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_recall_mode ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_table_requires_potential_tag ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_empty_rules ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_no_matches ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_jpg ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_default_options ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_removes_matching ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_with_backup_restores ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_precision_mode ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_empty_document ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_keeps_non_trailing_titles ... ok
[INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_with_links ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_all_options ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_potential_tags_default ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_images ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_links ... ok
[INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_without_links ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_done_tracking ... ok
[INFO] [stdout] test extractor::tags::tests::test_cleaning_tags_in_sets ... ok
[INFO] [stdout] test extractor::tags::tests::test_format_tag_catalog ... ok
[INFO] [stdout] test extractor::tags::tests::test_tag_catalog ... ok
[INFO] [stdout] test extractor::tags::tests::test_tags_to_clean ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_removes_trailing_titles ... ok
[INFO] [stdout] test extractor::tags::tests::test_cleaning_tag_counts ... ok
[INFO] [stdout] test extractor::state::tests::test_add_remove_potential_tag ... ok
[INFO] [stdout] test extractor::tags::tests::test_all_tags_in_sets ... ok
[INFO] [stdout] test extractor::tags::tests::test_empty_tags_to_remove ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_tables ... ok
[INFO] [stdout] test extractor::state::tests::test_multiple_nodes_done_tracking ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_head_tags ... ok
[INFO] [stdout] test extractor::state::tests::test_clone_potential_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_item_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_list_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_quote_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_lb_tags ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_no_code_detection_for_normal_pre ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_code_detection_single_span ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_graphic_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_hi_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_tags_to_strip ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_data_uri ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_makes_urls_absolute ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_hash ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_protocol_relative ... ok
[INFO] [stdout] test extractor::tags::tests::test_valid_tag_catalog ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_preserves_content_links ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_already_absolute ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_file ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_ref_tags ... ok
[INFO] [stdout] test html_processing::tests::test_clear_all_attributes ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_no_base ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_cell_tags ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_path ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_code_detection_hljs ... ok
[INFO] [stdout] test html_processing::tests::test_duplicate_test_long_text_threshold ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_empty ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_strips_standalone_links ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_script ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_fix_comments_converts_br_to_p ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_moves_tail_to_text ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_preserves_spaces ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_with_content ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_tables ... ok
[INFO] [stdout] test html_processing::tests::test_duplicate_test_short_text ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_linebreak_bypass ... ok
[INFO] [stdout] test html_processing::tests::test_delete_by_link_density ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_preserves_tables ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_image_bypass ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_file ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_non_image_src ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_image_without_src ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_href ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_with_data_src ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_with_data_srcset ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_with_src ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_without_src ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_void_elements ... ok
[INFO] [stdout] test html_processing::tests::test_process_node_empty ... ok
[INFO] [stdout] test link_density::tests::test_link_density_article_paragraph ... ok
[INFO] [stdout] test html_processing::tests::test_process_node_with_cache_dedup ... ok
[INFO] [stdout] test markdown::tests::test_escape_asterisks ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_removes_class ... ok
[INFO] [stdout] test link_density::tests::test_link_density_nav_menu ... ok
[INFO] [stdout] test html_processing::tests::test_prune_html_removes_empty ... ok
[INFO] [stdout] test link_density::tests::test_link_density_data_table ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_removes_empty_nodes ... ok
[INFO] [stdout] test html_processing::tests::test_process_node ... ok
[INFO] [stdout] test link_density::tests::test_link_density_no_links ... ok
[INFO] [stdout] test markdown::tests::test_escape_angle_brackets ... ok
[INFO] [stdout] test markdown::tests::test_escape_backslash ... ok
[INFO] [stdout] test markdown::tests::test_empty_table ... ok
[INFO] [stdout] test link_density::tests::test_link_density_table_nav ... ok
[INFO] [stdout] test markdown::tests::test_escape_brackets ... ok
[INFO] [stdout] test markdown::tests::test_escape_mixed_content ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_lists ... ok
[INFO] [stdout] test markdown::tests::test_escape_no_special_chars ... ok
[INFO] [stdout] test markdown::tests::test_simple_table ... ok
[INFO] [stdout] test markdown::tests::test_escape_underscores ... ok
[INFO] [stdout] test markdown::tests::test_no_escape_in_code_block ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_code_blocks ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_headings ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_inline_code ... ok
[INFO] [stdout] test markdown::tests::test_escape_empty_string ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_formatting ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_clean_cat_tags ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_left ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_simple ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_center ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_graph_array_schema ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_image_extraction_formats ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_with_separator ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_invalid_json_skipped ... ok
[INFO] [stdout] test html_processing::tests::test_text_chars_test ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_title_h1 ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_right ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_license_cc ... ok
[INFO] [stdout] test markdown::tests::test_table_uneven_rows ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_preserves_existing_metadata ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_sitename_from_title ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_preserves_original_metadata ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_dublin_core ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_date_parsing_formats ... ok
[INFO] [stdout] test markdown::tests::test_table_with_thead ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_standard_meta_tags ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_open_graph_tags ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_language_from_html_lang ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_url_canonical ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_keywords_extraction ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_person_name_composition ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_title_h1_only ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_twitter_cards ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_validate_metadata_name_invalid ... ok
[INFO] [stdout] test metadata::tests::test_no_separator ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_light ... ok
[INFO] [stdout] test metadata::tests::test_no_strip_subtitle ... ok
[INFO] [stdout] test metadata::tests::test_strip_prefix_pattern ... ok
[INFO] [stdout] test metadata::tests::test_strip_prefix_with_known_sitename ... ok
[INFO] [stdout] test metadata::tests::test_post_process_trims_fields ... ok
[INFO] [stdout] test metadata::tests::test_author_blacklist ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_with_url_option ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_priority ... ok
[INFO] [stdout] test metadata::tests::test_is_blacklisted_author ... ok
[INFO] [stdout] test metadata::tests::test_strip_og_title_with_suffix ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_fallback_chain ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_simple_article_schema ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_validate_metadata_name_valid ... ok
[INFO] [stdout] test metadata::tests::test_h1_preferred_when_contained_in_title ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_dash ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_normalize_author ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_em_dash ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_pipe ... ok
[INFO] [stdout] test metadata::tests::test_strip_with_known_sitename ... ok
[INFO] [stdout] test options::tests::test_boolean_options_can_be_toggled ... ok
[INFO] [stdout] test options::tests::test_custom_thresholds ... ok
[INFO] [stdout] test options::tests::test_default_options_thresholds ... ok
[INFO] [stdout] test options::tests::test_favor_precision_overrides_min_score ... ok
[INFO] [stdout] test options::tests::test_favor_precision_takes_precedence_over_recall ... ok
[INFO] [stdout] test options::tests::test_favor_recall_overrides_min_score ... ok
[INFO] [stdout] test page_type::tests::test_article_by_path ... ok
[INFO] [stdout] test page_type::tests::test_article_by_slug ... ok
[INFO] [stdout] test page_type::tests::test_documentation_by_path ... ok
[INFO] [stdout] test page_type::tests::test_extract_domain_path ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_add_to_cart_button ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_collection_page_ld ... ok
[INFO] [stdout] test page_type::tests::test_category_by_path ... ok
[INFO] [stdout] test page_type::tests::test_documentation_by_domain ... ok
[INFO] [stdout] test page_type::tests::test_forum_by_domain ... ok
[INFO] [stdout] test page_type::tests::test_forum_by_path ... ok
[INFO] [stdout] test page_type::tests::test_product_by_domain ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_graph_array ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_no_signals_on_article ... ok
[INFO] [stdout] test page_type::tests::test_full_pipeline_ambiguous_url_with_product_signals ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_docs_page ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_pagination_aria_label ... ok
[INFO] [stdout] test page_type::tests::test_refine_article_stays_with_item_list_alone ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_og_type_from_metadata ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_product_grid ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_product_json_ld ... ok
[INFO] [stdout] test page_type::tests::test_refine_article_stays_with_nav_but_few_code ... ok
[INFO] [stdout] test page_type::tests::test_refine_article_stays_with_product_elements_only ... ok
[INFO] [stdout] test page_type::tests::test_refine_article_stays_with_code_only ... ok
[INFO] [stdout] test page_type::tests::test_fallback_to_article ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_collection_page_ld ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_pagination_rel_next ... ok
[INFO] [stdout] test page_type::tests::test_product_by_path ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_product_element_count ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_grid_plus_cart ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_item_list_with_product_grid ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_og_product_group ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_product_elements_with_pagination ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_product_elements_with_grid_and_cart ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_with_grid_and_product_ld ... ok
[INFO] [stdout] test page_type::tests::test_refine_preserves_url_classification ... ok
[INFO] [stdout] test page_type::tests::test_refine_no_signals_stays_article ... ok
[INFO] [stdout] test page_type::tests::test_refine_documentation_by_code_and_nav ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_by_og_type ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_by_ld_json ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_few_product_elements ... ok
[INFO] [stdout] test scoring::tests::both_empty_returns_perfect ... ok
[INFO] [stdout] test patterns::tests::whitespace_normalize_collapses_spaces ... ok
[INFO] [stdout] test scoring::tests::tokenize_empty_string ... ok
[INFO] [stdout] test scoring::tests::empty_expected_returns_zero ... ok
[INFO] [stdout] test scoring::tests::exact_match_returns_perfect_score ... ok
[INFO] [stdout] test scoring::tests::tokenize_splits_and_lowercases ... ok
[INFO] [stdout] test scoring::tests::tokenize_handles_multiple_whitespace ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_page ... ok
[INFO] [stdout] test scoring::tests::partial_match_calculates_correctly ... ok
[INFO] [stdout] test patterns::tests::navigation_class_matches_nav_elements ... ok
[INFO] [stdout] test scoring::tests::empty_extracted_returns_zero ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_list ... ok
[INFO] [stdout] test scoring::tests::case_insensitive_matching ... ok
[INFO] [stdout] test scoring::tests::duplicate_words_counted_once ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_commentlist ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_post_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_wrong_tag ... ok
[INFO] [stdout] test scoring::tests::whitespace_normalization ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comments_content ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_article_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_class ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_disqus ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_comol ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comment_dash ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_cite ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_dsq_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_social ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_akismet ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_comment_class ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_message ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_not_cite_or_quote ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_reply_dash ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_nocomments ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_reply_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond_section ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond_wrong_tag ... ok
[INFO] [stdout] test page_type::tests::test_service_by_path ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_quote ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_signin ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_comments_title_contains ... ok
[INFO] [stdout] test selector::comments::tests::test_find_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_is_comment_debris ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_comments_title_exact ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_display_none ... ok
[INFO] [stdout] test selector::comments::tests::test_is_comment_section ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comments_case_insensitive ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_disqus ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_dsq_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_is_not_comment_debris ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comment_capital_c ... ok
[INFO] [stdout] test selector::comments::tests::test_is_not_comment_section ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_post_comments ... ok
[INFO] [stdout] test patterns::tests::content_class_matches_article_elements ... ok
[INFO] [stdout] test selector::comments::tests::test_find_comments_empty ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comol ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_article_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comments_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_should_remove_comments ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_article_body ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_3_role_article ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_5_main_tag ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_4_id_content ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_3_story_content ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_2_article ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_4_main_content ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_post_content ... ok
[INFO] [stdout] test selector::comments::tests::test_should_not_remove_comments ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_ad ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_breadcrumb ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_aria_hidden ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_fallback ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_ad_with_spaces ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_skips_nav ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_5_main_class ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_comments_title ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_akismet ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_comments_title_exact ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_author ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_priority_order ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_chinese_pattern ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_skips_wrapper_with_sidebar ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_skips_header ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_footer_case_insensitive ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_class ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_style ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_navigation ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_modal ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hide_class ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_paywall_obfuscated ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_style_with_space ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_paywall ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_nocomments ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hide_prefix ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_noprint ... ok
[INFO] [stdout] test page_type::tests::test_page_type_display ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_navigation_avigation_pattern ... ok
[INFO] [stdout] test scoring::tests::no_match_returns_zero_score ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_footer ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_related_elated_pattern ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_reply ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_sidebar ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_widget ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_third_party_outbrain ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag_h1 ... ok
[INFO] [stdout] test selector::discard::tests::test_rule_2_applies_to_any_tag ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable ... ok
[INFO] [stdout] test selector::discard::tests::test_should_discard_rule_2 ... ok
[INFO] [stdout] test selector::discard::tests::test_should_not_discard_content ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag ... ok
[INFO] [stdout] test selector::discard::tests::test_no_discard_clean_content ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wordpress_jetpack ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable_mixed_rules ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_1_mailto ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable_none ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_1_photo ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_facebook ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_1_avatar ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_3_figure ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_class_author ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_itemprop ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_linkedin ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_id_author ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_rel ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_name ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_sharing_shar_prefix ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_social ... ok
[INFO] [stdout] test selector::discard::tests::test_no_discard_visible_content_rule_2 ... ok
[INFO] [stdout] test selector::discard::tests::test_should_discard_rule_1 ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_twitter ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_3_img ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_testid ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_journalist ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_username ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_3_case_insensitive ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_3_screenname ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_section ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_container ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_3_writer ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_section_link ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_article_section ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_link ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_rubric ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_byline ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_6_section_name ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_meta_category ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_6_data_section ... ok
[INFO] [stdout] test selector::meta::tests::test_find_titles ... ok
[INFO] [stdout] test selector::meta::tests::test_find_authors ... ok
[INFO] [stdout] test selector::meta::tests::test_find_categories ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_4_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_find_tags ... ok
[INFO] [stdout] test selector::meta::tests::test_is_author_discard ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_4_breadcrumb ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_4_breadcrumb_ul ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_1_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_1_container ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_href ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_chinese ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_1_id_tags ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_rel ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_5_schema ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_3_meta_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_3_news_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_class_title ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_headline ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_id_headline ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_2_h1 ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_article_title ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_2_not_h1 ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_entry ... ok
[INFO] [stdout] test selector::precision::tests::test_all_rules_independent ... ok
[INFO] [stdout] test selector::precision::tests::test_image_wrong_tag ... ok
[INFO] [stdout] test selector::precision::tests::test_image_wrong_tag_figure ... ok
[INFO] [stdout] test selector::precision::tests::test_is_image_discard_false ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_case_sensitive ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_post_title ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_4_itemprop ... ok
[INFO] [stdout] test selector::precision::tests::test_is_image_discard_true ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_case_sensitive_id ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_id ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_class ... ok
[INFO] [stdout] test selector::precision::tests::test_image_no_match ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_in_class ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_border_style ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_border_style_complex ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_link ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_wrong_tag ... ok
[INFO] [stdout] test selector::precision::tests::test_is_teaser_true ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_bottom_in_id ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_header_with_class ... ok
[INFO] [stdout] test selector::precision::tests::test_is_teaser_false ... ok
[INFO] [stdout] test selector::precision::tests::test_should_not_discard_precision ... ok
[INFO] [stdout] test selector::precision::tests::test_should_discard_precision_rule_1 ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_case_insensitive_class ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_bottom ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_class ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_case_insensitive ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_no_match ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_no_match ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_id ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_not_header ... ok
[INFO] [stdout] test selector::precision::tests::test_should_discard_precision_rule_2 ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_link_in_class ... ok
[INFO] [stdout] test selector::tests::test_query_all_finds_all_matches ... ok
[INFO] [stdout] test selector::tests::test_query_all_preserves_document_order ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_header ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag ... ok
[INFO] [stdout] test selector::utils::tests::test_attr_returns_value_or_empty ... ok
[INFO] [stdout] test selector::utils::tests::test_contains_case_sensitive ... ok
[INFO] [stdout] test selector::tests::test_query_with_tag_filter ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag_h2 ... ok
[INFO] [stdout] test selector::tests::test_query_finds_first_match ... ok
[INFO] [stdout] test selector::tests::test_query_all_returns_empty_when_no_matches ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_empty_when_no_matches ... ok
[INFO] [stdout] test selector::tests::test_rule_can_check_multiple_conditions ... ok
[INFO] [stdout] test selector::tests::test_query_returns_none_when_no_match ... ok
[INFO] [stdout] test selector::tests::test_query_document_order ... ok
[INFO] [stdout] test selector::utils::tests::test_class_returns_value_or_empty ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_finds_all_matching ... ok
[INFO] [stdout] test selector::utils::tests::test_combined_pattern_matching ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_stops_at_root ... ok
[INFO] [stdout] test selector::utils::tests::test_lower ... ok
[INFO] [stdout] test selector::utils::tests::test_id_class_handles_missing_attributes ... ok
[INFO] [stdout] test selector::utils::tests::test_starts_with_case_sensitive ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_preserves_order ... ok
[INFO] [stdout] test selector::utils::tests::test_tag_returns_lowercase_tag_name ... ok
[INFO] [stdout] test selector::utils::tests::test_id_returns_value_or_empty ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_relative ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_already_absolute ... ok
[INFO] [stdout] test selector::utils::tests::test_id_class_combines_both_attributes ... ok
[INFO] [stdout] test selector::utils::tests::test_is_one_of_tags ... ok
[INFO] [stdout] test url_utils::tests::test_extract_hostname ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_special_chars ... ok
[INFO] [stdout] test selector::utils::tests::test_is_tag ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_basic ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_special ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_empty ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_basic ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_edge_cases ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_query_params ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_case_insensitive ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_query_and_fragment ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_fragment ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_empty ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_empty ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_invalid ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_relative_no_base ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_with_whitespace ... ok
[INFO] [stdout] test url_utils::tests::test_normalize_url_invalid ... ok
[INFO] [stdout] test url_utils::tests::test_normalize_url ... ok
[INFO] [stdout] test url_utils::tests::test_parse_url ... ok
[INFO] [stdout] test url_utils::tests::test_urls_match ... ok
[INFO] [stdout] test url_utils::tests::test_get_base_url ... ok
[INFO] [stdout] test url_utils::tests::test_get_domain_url ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_valid ... ok
[INFO] [stdout] test url_utils::tests::test_urls_match_trailing_slash ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_absolute ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_relative_with_base ... ok
[INFO] [stdout] test extract::tests::extract_handles_large_html_without_panic has been running for over 60 seconds
[INFO] [stdout] test extract::tests::extract_handles_large_html_without_panic ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- extract::tests::extract_handles_large_html_without_panic stdout ----
[INFO] [stdout] DEBUG: Starting content extraction (HTML length: 10485789 chars)
[INFO] [stdout] DEBUG: Page type: article (confidence: Some(0.7618021876119629))
[INFO] [stdout] DEBUG: No title found in metadata
[INFO] [stdout] DEBUG: Starting main content extraction
[INFO] [stdout] DEBUG: Found content node with tag: article
[INFO] [stdout] DEBUG: Extracted from content node: 9393477 chars
[INFO] [stdout] DEBUG: Extraction complete! Final text length: 9393477 chars
[INFO] [stdout] DEBUG: Extraction summary:
[INFO] [stdout]   Content text: 9393477 chars
[INFO] [stdout]   Comments: 0 chars
[INFO] [stdout]   Images: 0
[INFO] [stdout]   Warnings: 0
[INFO] [stdout] DEBUG: Extraction complete! Final content: 1000000 chars
[INFO] [stdout] 
[INFO] [stdout] thread 'extract::tests::extract_handles_large_html_without_panic' (60) panicked at src/extract.rs:3917:9:
[INFO] [stdout] large HTML parsing took 62.517180003s
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x618be287396a - std[128c3efe2914e152]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x618be287396a - std[128c3efe2914e152]::backtrace_rs::backtrace::trace_unsynchronized::<std[128c3efe2914e152]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x618be287396a - std[128c3efe2914e152]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x618be287396a - <<std[128c3efe2914e152]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[6771d259883166e6]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x618be288b0aa - <core[6771d259883166e6]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x618be288b0aa - core[6771d259883166e6]::fmt::write
[INFO] [stdout]    6:     0x618be2878292 - std[128c3efe2914e152]::io::default_write_fmt::<alloc[fef50e8eecedd288]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/io/mod.rs:621:11
[INFO] [stdout]    7:     0x618be2878292 - <alloc[fef50e8eecedd288]::vec::Vec<u8> as std[128c3efe2914e152]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/io/mod.rs:1976:13
[INFO] [stdout]    8:     0x618be2852a7f - <std[128c3efe2914e152]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x618be2852a7f - std[128c3efe2914e152]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x618be286bda9 - std[128c3efe2914e152]::panicking::default_hook
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x618be230810c - <alloc[fef50e8eecedd288]::boxed::Box<dyn for<'a, 'b> core[6771d259883166e6]::ops::function::Fn<(&'a std[128c3efe2914e152]::panic::PanicHookInfo<'b>,), Output = ()> + core[6771d259883166e6]::marker::Sync + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::Fn<(&std[128c3efe2914e152]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2263:9
[INFO] [stdout]   12:     0x618be230810c - test[b137923399915ecf]::test_main_with_exit_callback::<test[b137923399915ecf]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x618be286bf62 - <alloc[fef50e8eecedd288]::boxed::Box<dyn for<'a, 'b> core[6771d259883166e6]::ops::function::Fn<(&'a std[128c3efe2914e152]::panic::PanicHookInfo<'b>,), Output = ()> + core[6771d259883166e6]::marker::Sync + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::Fn<(&std[128c3efe2914e152]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2263:9
[INFO] [stdout]   14:     0x618be286bf62 - std[128c3efe2914e152]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x618be2852b38 - std[128c3efe2914e152]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x618be2847d19 - std[128c3efe2914e152]::sys::backtrace::__rust_end_short_backtrace::<std[128c3efe2914e152]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x618be285384d - __rustc[752cc74e29381ccc]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x618be288b91c - core[6771d259883166e6]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x618be21e738a - rs_trafilatura::extract::tests::extract_handles_large_html_without_panic::h95dcc6936a6b8854
[INFO] [stdout]                                at /opt/rustwide/workdir/src/extract.rs:3917:9
[INFO] [stdout]   20:     0x618be21e73d7 - rs_trafilatura::extract::tests::extract_handles_large_html_without_panic::{{closure}}::hf6cb0c7eb06a848d
[INFO] [stdout]                                at /opt/rustwide/workdir/src/extract.rs:3902:50
[INFO] [stdout]   21:     0x618be2298b66 - core::ops::function::FnOnce::call_once::h9fae7b1029674ed2
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   22:     0x618be22fc20b - <fn() -> core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x618be22fc20b - test[b137923399915ecf]::__rust_begin_short_backtrace::<core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>, fn() -> core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:663:18
[INFO] [stdout]   24:     0x618be2308bdb - test[b137923399915ecf]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:686:74
[INFO] [stdout]   25:     0x618be2308bdb - <core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<test[b137923399915ecf]::run_test_in_process::{closure#0}> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   26:     0x618be2308bdb - std[128c3efe2914e152]::panicking::catch_unwind::do_call::<core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<test[b137923399915ecf]::run_test_in_process::{closure#0}>, core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:581:40
[INFO] [stdout]   27:     0x618be2308bdb - std[128c3efe2914e152]::panicking::catch_unwind::<core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>, core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<test[b137923399915ecf]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:544:19
[INFO] [stdout]   28:     0x618be2308bdb - std[128c3efe2914e152]::panic::catch_unwind::<core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<test[b137923399915ecf]::run_test_in_process::{closure#0}>, core[6771d259883166e6]::result::Result<(), alloc[fef50e8eecedd288]::string::String>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panic.rs:359:14
[INFO] [stdout]   29:     0x618be2308bdb - test[b137923399915ecf]::run_test_in_process
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:686:27
[INFO] [stdout]   30:     0x618be2308bdb - test[b137923399915ecf]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:607:43
[INFO] [stdout]   31:     0x618be2303034 - test[b137923399915ecf]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/test/src/lib.rs:637:41
[INFO] [stdout]   32:     0x618be2303034 - std[128c3efe2914e152]::sys::backtrace::__rust_begin_short_backtrace::<test[b137923399915ecf]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   33:     0x618be230b7e2 - std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked::<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   34:     0x618be230b7e2 - <core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   35:     0x618be230b7e2 - std[128c3efe2914e152]::panicking::catch_unwind::do_call::<core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:581:40
[INFO] [stdout]   36:     0x618be230b7e2 - std[128c3efe2914e152]::panicking::catch_unwind::<(), core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panicking.rs:544:19
[INFO] [stdout]   37:     0x618be230b7e2 - std[128c3efe2914e152]::panic::catch_unwind::<core[6771d259883166e6]::panic::unwind_safe::AssertUnwindSafe<std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/panic.rs:359:14
[INFO] [stdout]   38:     0x618be230b7e2 - std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked::<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   39:     0x618be230b7e2 - <std[128c3efe2914e152]::thread::lifecycle::spawn_unchecked<test[b137923399915ecf]::run_test::{closure#1}, ()>::{closure#1} as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   40:     0x618be287327f - <alloc[fef50e8eecedd288]::boxed::Box<dyn core[6771d259883166e6]::ops::function::FnOnce<(), Output = ()> + core[6771d259883166e6]::marker::Send> as core[6771d259883166e6]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/alloc/src/boxed.rs:2249:9
[INFO] [stdout]   41:     0x618be287327f - <std[128c3efe2914e152]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/8489f1adbe1c8f8921cf18b9962cf565237a5489/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   42:     0x7ecb0e2c8aa4 - <unknown>
[INFO] [stdout]   43:     0x7ecb0e355a64 - clone
[INFO] [stdout]   44:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     extract::tests::extract_handles_large_html_without_panic
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 618 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 62.65s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--lib`
[INFO] running `Command { std: "docker" "inspect" "d931414be908a7041ca905cbd76747444d70cdcb56b0e946986678808f465290", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d931414be908a7041ca905cbd76747444d70cdcb56b0e946986678808f465290", kill_on_drop: false }`
[INFO] [stdout] d931414be908a7041ca905cbd76747444d70cdcb56b0e946986678808f465290
