[INFO] fetching crate rs-trafilatura 0.2.2...
[INFO] testing rs-trafilatura-0.2.2 against 1.95.0 for beta-1.96-2
[INFO] extracting crate rs-trafilatura 0.2.2 into /workspace/builds/worker-5-tc1/source
[INFO] removed /workspace/builds/worker-5-tc1/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-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate rs-trafilatura 0.2.2 on toolchain 1.95.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "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" "+1.95.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded mac v0.1.1
[INFO] [stderr]   Downloaded cssparser-macros v0.6.1
[INFO] [stderr]   Downloaded case_insensitive_string v0.2.10
[INFO] [stderr]   Downloaded precomputed-hash v0.1.1
[INFO] [stderr]   Downloaded dtoa-short v0.3.5
[INFO] [stderr]   Downloaded string_cache v0.9.0
[INFO] [stderr]   Downloaded html-cleaning v0.3.0
[INFO] [stderr]   Downloaded servo_arc v0.4.3
[INFO] [stderr]   Downloaded string_cache_codegen v0.6.1
[INFO] [stderr]   Downloaded chardetng v0.1.17
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.47
[INFO] [stderr]   Downloaded spider_agent_types v2.48.24
[INFO] [stderr]   Downloaded tendril v0.4.3
[INFO] [stderr]   Downloaded spider_fingerprint v2.39.0
[INFO] [stderr]   Downloaded quick-xml v0.39.2
[INFO] [stderr]   Downloaded lol_html v2.7.2
[INFO] [stderr]   Downloaded aws-lc-rs v1.16.2
[INFO] [stderr]   Downloaded zerocopy v0.8.47
[INFO] [stderr]   Downloaded selectors v0.33.0
[INFO] [stderr]   Downloaded llm_models_spider v0.1.62
[INFO] [stderr]   Downloaded quick_html2md v0.2.1
[INFO] [stderr]   Downloaded spider v2.48.24
[INFO] [stderr]   Downloaded web-page-classifier v0.1.0
[INFO] [stderr]   Downloaded dtoa v1.0.11
[INFO] [stderr]   Downloaded cssparser v0.36.0
[INFO] [stderr]   Downloaded phf_generator v0.11.3
[INFO] [stderr]   Downloaded string_concat v0.0.1
[INFO] [stderr]   Downloaded web_atoms v0.2.3
[INFO] [stderr]   Downloaded markup5ever v0.36.1
[INFO] [stderr]   Downloaded auto_encoder v0.1.10
[INFO] [stderr]   Downloaded phf_codegen v0.13.1
[INFO] [stderr]   Downloaded phf_macros v0.11.3
[INFO] [stderr]   Downloaded phf v0.11.3
[INFO] [stderr]   Downloaded phf_shared v0.11.3
[INFO] [stderr]   Downloaded phf_codegen v0.11.3
[INFO] [stderr]   Downloaded rustls-webpki v0.103.10
[INFO] [stderr]   Downloaded futf v0.1.5
[INFO] [stderr]   Downloaded aws-lc-sys v0.39.1
[INFO] [stderr]   Downloaded html5ever v0.36.1
[INFO] [stderr]   Downloaded dom_query v0.24.0
[INFO] [stderr]   Downloaded async-compression v0.4.41
[INFO] [stderr]   Downloaded wasm-streams v0.5.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/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" "+1.95.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 8a99b2eb8e69dbb636ada70b75e58277e60166558dcd1c844d16def11a685f4e
[INFO] running `Command { std: "docker" "start" "-a" "8a99b2eb8e69dbb636ada70b75e58277e60166558dcd1c844d16def11a685f4e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "8a99b2eb8e69dbb636ada70b75e58277e60166558dcd1c844d16def11a685f4e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8a99b2eb8e69dbb636ada70b75e58277e60166558dcd1c844d16def11a685f4e", kill_on_drop: false }`
[INFO] [stdout] 8a99b2eb8e69dbb636ada70b75e58277e60166558dcd1c844d16def11a685f4e
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/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" "+1.95.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 79c0aead2a11d813bdcb9c7a024e29b0e305250e6ea6fdb94fcfde239c607ffb
[INFO] running `Command { std: "docker" "start" "-a" "79c0aead2a11d813bdcb9c7a024e29b0e305250e6ea6fdb94fcfde239c607ffb", 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 utf-8 v0.7.6
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling rustc-hash v2.1.1
[INFO] [stderr]    Compiling bitflags v2.11.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling bit-vec v0.8.0
[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 phf_shared v0.13.1
[INFO] [stderr]    Compiling servo_arc v0.4.3
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling dtoa-short v0.3.5
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling tendril v0.4.3
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling web-page-classifier v0.1.0
[INFO] [stderr]    Compiling phf_generator v0.13.1
[INFO] [stderr]    Compiling bit-set v0.8.0
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[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 regex-automata v0.4.14
[INFO] [stderr]    Compiling string_cache v0.9.0
[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 regex v1.12.3
[INFO] [stderr]    Compiling phf v0.13.1
[INFO] [stderr]    Compiling cssparser v0.36.0
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling zerofrom v0.1.6
[INFO] [stderr]    Compiling yoke v0.8.1
[INFO] [stderr]    Compiling zerovec v0.11.5
[INFO] [stderr]    Compiling zerotrie v0.2.3
[INFO] [stderr]    Compiling tinystr v0.8.2
[INFO] [stderr]    Compiling potential_utf v0.1.4
[INFO] [stderr]    Compiling markup5ever v0.36.1
[INFO] [stderr]    Compiling icu_collections v2.1.1
[INFO] [stderr]    Compiling icu_locale_core v2.1.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling html5ever v0.36.1
[INFO] [stderr]    Compiling icu_provider v2.1.1
[INFO] [stderr]    Compiling icu_properties v2.1.2
[INFO] [stderr]    Compiling icu_normalizer v2.1.1
[INFO] [stderr]    Compiling dom_query v0.24.0
[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] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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 39.34s
[INFO] running `Command { std: "docker" "inspect" "79c0aead2a11d813bdcb9c7a024e29b0e305250e6ea6fdb94fcfde239c607ffb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "79c0aead2a11d813bdcb9c7a024e29b0e305250e6ea6fdb94fcfde239c607ffb", kill_on_drop: false }`
[INFO] [stdout] 79c0aead2a11d813bdcb9c7a024e29b0e305250e6ea6fdb94fcfde239c607ffb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/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" "+1.95.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 2a043ebb01d14291102b94b1d45898f997563c6ee7c02b964f484c9745a2c0b2
[INFO] running `Command { std: "docker" "start" "-a" "2a043ebb01d14291102b94b1d45898f997563c6ee7c02b964f484c9745a2c0b2", 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 clap_lex v1.1.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling is-terminal v0.4.17
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling oorandom v11.1.5
[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 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] [stderr]    Compiling clap v4.6.0
[INFO] [stdout] warning: value assigned to `best_total_len` is never read
[INFO] [stdout]    --> src/extract.rs:593:17
[INFO] [stdout]     |
[INFO] [stdout] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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: value assigned to `best_total_len` is never read
[INFO] [stdout]    --> src/extract.rs:593:17
[INFO] [stdout]     |
[INFO] [stdout] 593 |                 best_total_len = total;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being 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] [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] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 34.93s
[INFO] running `Command { std: "docker" "inspect" "2a043ebb01d14291102b94b1d45898f997563c6ee7c02b964f484c9745a2c0b2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2a043ebb01d14291102b94b1d45898f997563c6ee7c02b964f484c9745a2c0b2", kill_on_drop: false }`
[INFO] [stdout] 2a043ebb01d14291102b94b1d45898f997563c6ee7c02b964f484c9745a2c0b2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/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" "+1.95.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 1d456b6a0f3f91635876e473bd28734173800fcaab57290065010ddc0a561778
[INFO] running `Command { std: "docker" "start" "-a" "1d456b6a0f3f91635876e473bd28734173800fcaab57290065010ddc0a561778", 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] 593 |                 best_total_len = total;
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[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]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being 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]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being 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: `rs-trafilatura` (lib) generated 179 warnings (run `cargo fix --lib -p rs-trafilatura` to apply 14 suggestions)
[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: 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` (test "spike_markdown_validation") generated 4 warnings (run `cargo fix --test "spike_markdown_validation" -p rs-trafilatura` to apply 2 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]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.49s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rs_trafilatura-9e6e6088ce448db3)
[INFO] [stdout] 
[INFO] [stdout] running 619 tests
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_clone_is_cheap ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_uses_rc_internally ... ok
[INFO] [stdout] test dom::tests::test_append_and_set_html ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_deref_to_str ... ok
[INFO] [stdout] test dom::tests::test_clone_document ... ok
[INFO] [stdout] test dom::tests::test_children_navigation ... ok
[INFO] [stdout] test dom::tests::test_missing_attributes_return_none ... ok
[INFO] [stdout] test dom::tests::test_get_all_attributes ... ok
[INFO] [stdout] test dom::tests::test_navigation ... ok
[INFO] [stdout] test dom::tests::test_iteration_and_removal ... ok
[INFO] [stdout] test dom::tests::test_get_all_attributes_empty ... ok
[INFO] [stdout] test dom::tests::test_next_element_sibling ... ok
[INFO] [stdout] test dom::tests::test_operations_on_empty_selection ... ok
[INFO] [stdout] test dom::tests::test_previous_element_sibling ... ok
[INFO] [stdout] test dom::tests::test_rename_element ... ok
[INFO] [stdout] test dom::tests::test_is_void_element ... ok
[INFO] [stdout] test dom::tests::test_attribute_modification ... ok
[INFO] [stdout] test dom::tests::test_strip_tags_keep_content ... ok
[INFO] [stdout] test dom::tests::test_previous_element_sibling_none ... ok
[INFO] [stdout] test dom::tests::test_text_and_html_content ... ok
[INFO] [stdout] test encoding::tests::extract_charset_with_quotes ... ok
[INFO] [stdout] test encoding::tests::detect_iso88591_from_meta_charset ... ok
[INFO] [stdout] test dom::tests::test_tag_name ... ok
[INFO] [stdout] test encoding::tests::detect_windows1252_from_meta_charset ... ok
[INFO] [stdout] test encoding::tests::extract_charset_without_quotes ... ok
[INFO] [stdout] test encoding::tests::detect_utf8_from_meta_charset ... ok
[INFO] [stdout] test dom::tests::test_parse_and_select ... ok
[INFO] [stdout] test dom::tests::test_remove_elements ... 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::transcode_iso88591_to_utf8 ... ok
[INFO] [stdout] test encoding::tests::transcode_windows1252_to_utf8 ... ok
[INFO] [stdout] test extract::tests::clean_text_normalizes_whitespace ... ok
[INFO] [stdout] test dom::tests::test_replace_with_html ... ok
[INFO] [stdout] test encoding::tests::default_to_utf8_when_no_charset ... ok
[INFO] [stdout] test encoding::tests::detect_charset_from_content_type ... ok
[INFO] [stdout] test encoding::tests::extract_content_type_charset_standard ... ok
[INFO] [stdout] test encoding::tests::extract_content_type_charset_case_insensitive ... ok
[INFO] [stdout] test dom::tests::test_querying ... ok
[INFO] [stdout] test dom::tests::test_next_element_sibling_none ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_broken_attributes ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_invalid_nesting ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_empty_string_input ... 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::is_boilerplate_detects_navigation ... ok
[INFO] [stdout] test extract::tests::test_bem_component_prefix_not_boilerplate ... ok
[INFO] [stdout] test extract::tests::extract_returns_content_from_article_tag ... ok
[INFO] [stdout] test extract::tests::test_content_truncation_max_extracted_len ... ok
[INFO] [stdout] test extract::tests::test_count_words_filters_by_min_length ... ok
[INFO] [stdout] test extract::tests::test_comments_validation_min_output_comm_size ... ok
[INFO] [stdout] test encoding::tests::extract_charset_case_insensitive ... ok
[INFO] [stdout] test extract::tests::test_content_length_validation_min_extracted_len ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_insufficient_content ... ok
[INFO] [stdout] test extract::tests::test_false_positive_helper ... ok
[INFO] [stdout] test dom::strtendril_verification::test_strtendril_size ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_empty_text ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_no_comments ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_removes_from_dom ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_strips_links ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_clears_attributes ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_invalid_tag ... ok
[INFO] [stdout] test extractor::comments::tests::test_process_comments_node_valid_tag ... ok
[INFO] [stdout] test extractor::comments::tests::test_extract_comments_with_comments_section ... ok
[INFO] [stdout] test extractor::fallback::share_plugin_tests::test_share_plugin_selector_matches ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_minimal_html ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_paragraph_scraping ... ok
[INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_empty_extracted ... ok
[INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_much_longer ... ok
[INFO] [stdout] test extract::tests::test_word_count_validation_min_output_size ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_nested ... 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_content ... ok
[INFO] [stdout] test extract::tests::extract_returns_partial_result_for_whitespace_only_input ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_incomplete_entities ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_simple ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_missing_closing_tags ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_basic ... ok
[INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_with_html ... ok
[INFO] [stdout] test extract::tests::extract_handles_malformed_html_unclosed_tags ... 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 extractor::handlers::tests::test_handle_code_blocks ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_protocol_relative ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_deduplication ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_with_title ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_formatting_orphan ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_data_src ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_with_text ... ok
[INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_removes_invalid ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_image_non_image_src ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_nested ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_empty ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_removed_comments ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_lists_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_with_link ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_simple ... ok
[INFO] [stdout] test extractor::fallback::tests::test_baseline_with_article_tag ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_code_block ... ok
[INFO] [stdout] test extract::tests::test_mixed_bem_and_boilerplate ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_other_elements_w3_code ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_nested_p ... ok
[INFO] [stdout] test extract::tests::test_actual_boilerplate_still_detected ... ok
[INFO] [stdout] test extract::tests::test_warning_generation_truncated_content ... ok
[INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_strips_links_when_disabled ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_strips_structural ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_titles_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_formatting ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_single_code_child ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_code_tag ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_not_code ... 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 extractor::handlers::tests::test_handle_table_multiple_rows ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_simple ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_titles_summary_to_bold ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_with_query ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_lang ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_jpg ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_code_block_github_highlight ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_not_image ... ok
[INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_nested_elements ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_image_file_png ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_empty ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_no_alphanumeric ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_formatting ... ok
[INFO] [stdout] test extract::tests::extract_merges_split_article_body_chunks_conservatively ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_code_routes_to_quotes ... 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_list ... 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_table_requires_potential_tag ... ok
[INFO] [stdout] test extractor::handlers::tests::test_is_text_element_with_text ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_precision_mode ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_finds_paragraphs ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_basic ... 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::pruning::tests::test_prune_unwanted_nodes_removes_matching ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_preserves_tail ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_keeps_non_trailing_titles ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_recall_mode ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_with_backup_restores ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_removes_trailing_titles ... ok
[INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_default_options ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_recall_mode ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_empty_document ... 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_heading ... ok
[INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_with_links ... ok
[INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_without_links ... ok
[INFO] [stdout] test extractor::state::tests::test_add_remove_potential_tag ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_all_options ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_tables ... ok
[INFO] [stdout] test extractor::state::tests::test_clone_potential_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_cleaning_tag_counts ... ok
[INFO] [stdout] test extractor::tags::tests::test_empty_tags_to_remove ... ok
[INFO] [stdout] test extractor::tags::tests::test_tags_to_strip ... ok
[INFO] [stdout] test extractor::tags::tests::test_valid_tag_catalog ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_done_tracking ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_potential_tags_default ... ok
[INFO] [stdout] test extractor::state::tests::test_multiple_nodes_done_tracking ... ok
[INFO] [stdout] test extractor::tags::tests::test_cleaning_tags_in_sets ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_links ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_head_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_list_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_hi_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_item_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_lb_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_graphic_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_all_tags_in_sets ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_ref_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_format_tag_catalog ... ok
[INFO] [stdout] test html_processing::tests::test_clear_all_attributes ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_code_detection_hljs ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_quote_tags ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_makes_urls_absolute ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_already_absolute ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_hash ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_no_base ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_data_uri ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_path ... 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_preserves_content_links ... ok
[INFO] [stdout] test html_processing::tests::test_convert_tags_strips_standalone_links ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_protocol_relative ... ok
[INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_file ... ok
[INFO] [stdout] test extractor::tags::tests::test_xml_cell_tags ... ok
[INFO] [stdout] test extractor::tags::tests::test_tag_catalog ... ok
[INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_images ... ok
[INFO] [stdout] test html_processing::tests::test_duplicate_test_short_text ... ok
[INFO] [stdout] test extractor::tags::tests::test_tags_to_clean ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_empty ... ok
[INFO] [stdout] test html_processing::tests::test_delete_by_link_density ... 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_convert_tags_code_detection_single_span ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_image_without_src ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_preserves_tables ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_script ... ok
[INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_tables ... ok
[INFO] [stdout] test html_processing::tests::test_duplicate_test_long_text_threshold ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_image_bypass ... 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 extractor::pipeline::tests::test_extract_content_removes_trailing_titles ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_without_src ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_element_non_image_src ... 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_text_chars_test ... ok
[INFO] [stdout] test html_processing::tests::test_process_node ... ok
[INFO] [stdout] test html_processing::tests::test_is_image_file ... ok
[INFO] [stdout] test link_density::tests::test_link_density_article_paragraph ... ok
[INFO] [stdout] test link_density::tests::test_link_density_no_links ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_void_elements ... 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_post_cleaning_removes_empty_nodes ... ok
[INFO] [stdout] test html_processing::tests::test_process_node_with_cache_dedup ... ok
[INFO] [stdout] test html_processing::tests::test_process_node_empty ... ok
[INFO] [stdout] test html_processing::tests::test_prune_html_removes_empty ... 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_escape_empty_string ... ok
[INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_href ... ok
[INFO] [stdout] test markdown::tests::test_escape_mixed_content ... ok
[INFO] [stdout] test markdown::tests::test_escape_underscores ... ok
[INFO] [stdout] test markdown::tests::test_escape_no_special_chars ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_code_blocks ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_formatting ... 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 link_density::tests::test_link_density_data_table ... ok
[INFO] [stdout] test markdown::tests::test_empty_table ... ok
[INFO] [stdout] test markdown::tests::test_escape_asterisks ... ok
[INFO] [stdout] test markdown::tests::test_no_escape_in_code_block ... ok
[INFO] [stdout] test link_density::tests::test_link_density_table_nav ... ok
[INFO] [stdout] test markdown::tests::test_post_process_preserves_lists ... ok
[INFO] [stdout] test markdown::tests::test_simple_table ... ok
[INFO] [stdout] test markdown::tests::test_table_with_thead ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_right ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_center ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_with_separator ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_clean_cat_tags ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_simple ... ok
[INFO] [stdout] test markdown::tests::test_table_uneven_rows ... ok
[INFO] [stdout] test markdown::tests::test_table_alignment_left ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_title_h1 ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_url_canonical ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_license_cc ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_invalid_json_skipped ... 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::json_ld::tests::test_keywords_extraction ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_sitename_from_title ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_graph_array_schema ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_date_parsing_formats ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_preserves_existing_metadata ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_dublin_core ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_open_graph_tags ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_preserves_original_metadata ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_language_from_html_lang ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_simple_article_schema ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_standard_meta_tags ... ok
[INFO] [stdout] test metadata::json_ld::tests::test_image_extraction_formats ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_validate_metadata_name_invalid ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_validate_metadata_name_valid ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_light ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_fallback_chain ... ok
[INFO] [stdout] test metadata::tests::test_author_blacklist ... ok
[INFO] [stdout] test markdown::tests::test_escape_brackets ... ok
[INFO] [stdout] test metadata::tests::test_no_strip_subtitle ... ok
[INFO] [stdout] test metadata::meta_tags::tests::test_twitter_cards ... ok
[INFO] [stdout] test metadata::tests::test_strip_prefix_with_known_sitename ... ok
[INFO] [stdout] test metadata::tests::test_strip_prefix_pattern ... ok
[INFO] [stdout] test metadata::tests::test_no_separator ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_em_dash ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_dash ... ok
[INFO] [stdout] test metadata::tests::test_strip_suffix_pipe ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_priority ... ok
[INFO] [stdout] test metadata::tests::test_strip_og_title_with_suffix ... ok
[INFO] [stdout] test metadata::tests::test_strip_with_known_sitename ... ok
[INFO] [stdout] test metadata::tests::test_post_process_trims_fields ... ok
[INFO] [stdout] test options::tests::test_favor_precision_overrides_min_score ... ok
[INFO] [stdout] test options::tests::test_boolean_options_can_be_toggled ... ok
[INFO] [stdout] test options::tests::test_default_options_thresholds ... ok
[INFO] [stdout] test metadata::dom_extraction::tests::test_normalize_author ... ok
[INFO] [stdout] test options::tests::test_custom_thresholds ... ok
[INFO] [stdout] test metadata::tests::test_extract_metadata_with_url_option ... ok
[INFO] [stdout] test metadata::tests::test_is_blacklisted_author ... ok
[INFO] [stdout] test page_type::tests::test_documentation_by_path ... ok
[INFO] [stdout] test page_type::tests::test_category_by_path ... ok
[INFO] [stdout] test page_type::tests::test_extract_domain_path ... ok
[INFO] [stdout] test options::tests::test_favor_recall_overrides_min_score ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_add_to_cart_button ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_graph_array ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_collection_page_ld ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_og_type_from_metadata ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_pagination_rel_next ... ok
[INFO] [stdout] test page_type::tests::test_article_by_path ... ok
[INFO] [stdout] test page_type::tests::test_documentation_by_domain ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_docs_page ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_product_element_count ... ok
[INFO] [stdout] test page_type::tests::test_forum_by_path ... 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_product_grid ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_product_json_ld ... ok
[INFO] [stdout] test page_type::tests::test_fallback_to_article ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_pagination_aria_label ... ok
[INFO] [stdout] test page_type::tests::test_product_by_path ... ok
[INFO] [stdout] test page_type::tests::test_refine_article_stays_with_code_only ... 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_item_list_alone ... ok
[INFO] [stdout] test page_type::tests::test_page_type_display ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_grid_plus_cart ... ok
[INFO] [stdout] test metadata::tests::test_h1_preferred_when_contained_in_title ... ok
[INFO] [stdout] test page_type::tests::test_extract_signals_no_signals_on_article ... ok
[INFO] [stdout] test page_type::tests::test_forum_by_domain ... 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_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 options::tests::test_favor_precision_takes_precedence_over_recall ... ok
[INFO] [stdout] test page_type::tests::test_refine_documentation_by_code_and_nav ... ok
[INFO] [stdout] test page_type::tests::test_refine_preserves_url_classification ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_product_elements_with_pagination ... ok
[INFO] [stdout] test page_type::tests::test_refine_no_signals_stays_article ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_by_ld_json ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_og_product_group ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_by_og_type ... ok
[INFO] [stdout] test page_type::tests::test_refine_product_few_product_elements ... ok
[INFO] [stdout] test page_type::tests::test_refine_category_by_collection_page_ld ... ok
[INFO] [stdout] test page_type::tests::test_product_by_domain ... ok
[INFO] [stdout] test page_type::tests::test_service_by_path ... ok
[INFO] [stdout] test scoring::tests::both_empty_returns_perfect ... ok
[INFO] [stdout] test scoring::tests::case_insensitive_matching ... ok
[INFO] [stdout] test scoring::tests::empty_extracted_returns_zero ... ok
[INFO] [stdout] test scoring::tests::empty_expected_returns_zero ... ok
[INFO] [stdout] test scoring::tests::duplicate_words_counted_once ... ok
[INFO] [stdout] test scoring::tests::exact_match_returns_perfect_score ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_linebreak_bypass ... ok
[INFO] [stdout] test html_processing::tests::test_handle_text_node_moves_tail_to_text ... ok
[INFO] [stdout] test patterns::tests::content_class_matches_article_elements ... ok
[INFO] [stdout] test patterns::tests::navigation_class_matches_nav_elements ... 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::tokenize_splits_and_lowercases ... ok
[INFO] [stdout] test scoring::tests::whitespace_normalization ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_article_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comments_content ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comment_dash ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_page ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_post_comments ... ok
[INFO] [stdout] test scoring::tests::partial_match_calculates_correctly ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_commentlist ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_class ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_disqus ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_comol ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_akismet ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_cite ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_comment_class ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_social ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_4_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_comments_title_exact ... 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 scoring::tests::no_match_returns_zero_score ... ok
[INFO] [stdout] test scoring::tests::tokenize_handles_multiple_whitespace ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_nocomments ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_3_dsq_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_quote ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_list ... ok
[INFO] [stdout] test extractor::pipeline::tests::test_extract_content_with_boilerplate ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_reply_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_comments_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond_section ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_reply_dash ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_respond_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_is_comment_debris ... ok
[INFO] [stdout] test selector::comments::tests::test_is_not_comment_section ... ok
[INFO] [stdout] test selector::comments::tests::test_find_comments_empty ... ok
[INFO] [stdout] test selector::comments::tests::test_find_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comments_case_insensitive ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_article_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_is_comment_section ... 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_discarded_signin ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comments_prefix ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_comol ... 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_removed_post_comments ... ok
[INFO] [stdout] test selector::comments::tests::test_removed_wrong_tag ... ok
[INFO] [stdout] test selector::comments::tests::test_should_not_remove_comments ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_article_body ... ok
[INFO] [stdout] test selector::comments::tests::test_should_remove_comments ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_2_article ... 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_class ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_5_main_tag ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_4_main_content ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_ad_with_spaces ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_4_id_content ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_fallback ... 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_nav ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_author ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_ad ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_chinese_pattern ... 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::content::tests::test_content_rule_3_story_content ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_footer ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_aria_hidden ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_modal ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_navigation ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_footer_case_insensitive ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_navigation_avigation_pattern ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_noprint ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_paywall ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_paywall_obfuscated ... 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_sharing_shar_prefix ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_sidebar ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_social ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_third_party_outbrain ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_widget ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wordpress_jetpack ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag_h1 ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable_mixed_rules ... ok
[INFO] [stdout] test selector::discard::tests::test_find_discardable_none ... ok
[INFO] [stdout] test selector::discard::tests::test_no_discard_clean_content ... ok
[INFO] [stdout] test selector::discard::tests::test_no_discard_visible_content_rule_2 ... ok
[INFO] [stdout] test selector::discard::tests::test_rule_2_applies_to_any_tag ... ok
[INFO] [stdout] test selector::discard::tests::test_should_discard_rule_1 ... 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::meta::tests::test_author_discard_1_avatar ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_1_mailto ... 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_facebook ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_linkedin ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_twitter ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_3_figure ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_comments_title_contains ... ok
[INFO] [stdout] test selector::meta::tests::test_author_discard_3_img ... ok
[INFO] [stdout] test selector::comments::tests::test_discarded_display_none ... ok
[INFO] [stdout] test selector::content::tests::test_content_rule_1_post_content ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_tag ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_skips_header ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_name ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_id_author ... 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_rule_1_testid ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_byline ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_2_chinese ... 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_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_author_rule_1_rel ... 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_author_rule_3_writer ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_container ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_rubric ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_section ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_link ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_section_link ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_2_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_article_section ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_meta_category ... 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_categories_rule_4_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_5_schema ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_6_data_section ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_6_section_name ... ok
[INFO] [stdout] test selector::meta::tests::test_find_authors ... ok
[INFO] [stdout] test selector::meta::tests::test_categories_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_find_categories ... ok
[INFO] [stdout] test selector::meta::tests::test_is_author_discard ... ok
[INFO] [stdout] test selector::meta::tests::test_find_tags ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_1_container ... ok
[INFO] [stdout] test selector::meta::tests::test_find_titles ... 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_1_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_href ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_rel ... ok
[INFO] [stdout] test selector::content::tests::test_find_content_priority_order ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_3_meta_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_2_wrong_tag ... ok
[INFO] [stdout] test page_type::tests::test_article_by_slug ... 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_tags_rule_3_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_3_news_keywords ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_wrong_tag ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_1_class_title ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_article_title ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_entry ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_2_h1 ... ok
[INFO] [stdout] test selector::precision::tests::test_all_rules_independent ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_3_post_title ... ok
[INFO] [stdout] test selector::meta::tests::test_title_rule_2_not_h1 ... ok
[INFO] [stdout] test selector::meta::tests::test_tags_rule_4_itemprop ... ok
[INFO] [stdout] test selector::precision::tests::test_image_caption_case_sensitive ... ok
[INFO] [stdout] test selector::precision::tests::test_image_no_match ... 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_in_class ... 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_is_teaser_true ... 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_bottom ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_bottom_in_id ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_header ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_link_in_class ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_header_with_class ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_link ... ok
[INFO] [stdout] test selector::precision::tests::test_is_image_discard_true ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_wrong_tag ... ok
[INFO] [stdout] test selector::precision::tests::test_precision_no_match ... ok
[INFO] [stdout] test selector::precision::tests::test_should_discard_precision_rule_1 ... 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_image_caption_class ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_case_insensitive ... 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_teaser_case_insensitive_class ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_class ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_id ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_no_match ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag_h2 ... ok
[INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag ... ok
[INFO] [stdout] test selector::tests::test_query_all_finds_all_matches ... ok
[INFO] [stdout] test selector::tests::test_query_finds_first_match ... ok
[INFO] [stdout] test selector::tests::test_query_all_preserves_document_order ... ok
[INFO] [stdout] test selector::tests::test_query_returns_none_when_no_match ... ok
[INFO] [stdout] test selector::utils::tests::test_attr_returns_value_or_empty ... ok
[INFO] [stdout] test selector::utils::tests::test_class_returns_value_or_empty ... ok
[INFO] [stdout] test selector::tests::test_query_with_tag_filter ... ok
[INFO] [stdout] test selector::tests::test_query_document_order ... ok
[INFO] [stdout] test selector::tests::test_rule_can_check_multiple_conditions ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_empty_when_no_matches ... ok
[INFO] [stdout] test selector::utils::tests::test_combined_pattern_matching ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_preserves_order ... ok
[INFO] [stdout] test selector::utils::tests::test_id_returns_value_or_empty ... ok
[INFO] [stdout] test selector::utils::tests::test_is_one_of_tags ... ok
[INFO] [stdout] test selector::utils::tests::test_is_tag ... ok
[INFO] [stdout] test selector::utils::tests::test_lower ... ok
[INFO] [stdout] test selector::utils::tests::test_id_class_combines_both_attributes ... ok
[INFO] [stdout] test selector::utils::tests::test_id_class_handles_missing_attributes ... ok
[INFO] [stdout] test selector::utils::tests::test_contains_case_sensitive ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_stops_at_root ... ok
[INFO] [stdout] test selector::utils::tests::test_starts_with_case_sensitive ... ok
[INFO] [stdout] test selector::utils::tests::test_tag_returns_lowercase_tag_name ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_already_absolute ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_empty ... ok
[INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_finds_all_matching ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_special ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_query_and_fragment ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_basic ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_fragment ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_query_params ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_basic ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_special_chars ... ok
[INFO] [stdout] test url_utils::tests::test_extract_hostname ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_case_insensitive ... ok
[INFO] [stdout] test url_utils::tests::test_get_base_url ... ok
[INFO] [stdout] test url_utils::tests::test_filenames_match_empty ... ok
[INFO] [stdout] test url_utils::tests::test_get_domain_url ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_with_whitespace ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_invalid ... ok
[INFO] [stdout] test url_utils::tests::test_is_absolute_url_valid ... ok
[INFO] [stdout] test url_utils::tests::test_normalize_url ... ok
[INFO] [stdout] test url_utils::tests::test_normalize_url_invalid ... ok
[INFO] [stdout] test url_utils::tests::test_urls_match_trailing_slash ... 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_validate_url_relative_no_base ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_absolute ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_empty ... ok
[INFO] [stdout] test url_utils::tests::test_validate_url_relative_with_base ... ok
[INFO] [stdout] test selector::tests::test_query_all_returns_empty_when_no_matches ... ok
[INFO] [stdout] test url_utils::tests::test_create_absolute_url_relative ... ok
[INFO] [stdout] test url_utils::tests::test_extract_filename_edge_cases ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_style ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_style_with_space ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hide_class ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hidden_class ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_hide_prefix ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_comments_title ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_nocomments ... ok
[INFO] [stdout] test selector::discard::tests::test_discard_breadcrumb ... ok
[INFO] [stdout] test extract::tests::extract_handles_large_html_without_panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 619 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 54.74s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/batch_markdown.rs (/opt/rustwide/target/debug/deps/batch_markdown-1f315b7d73082847)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/extract_stdin.rs (/opt/rustwide/target/debug/deps/extract_stdin-6a8a70ccaace1a41)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/author_date_extraction_test.rs (/opt/rustwide/target/debug/deps/author_date_extraction_test-ad31d60303d47f79)
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test date_parses_us_date_format ... ok
[INFO] [stdout] test date_from_time_datetime_is_parsed ... ok
[INFO] [stdout] test author_is_none_when_no_sources_present ... ok
[INFO] [stdout] test date_from_meta_modified_time_is_parsed ... ok
[INFO] [stdout] test date_parses_short_month_format ... ok
[INFO] [stdout] test date_from_meta_published_time_is_parsed ... ok
[INFO] [stdout] test date_parse_failure_is_graceful ... ok
[INFO] [stdout] test date_is_none_when_time_element_is_empty ... ok
[INFO] [stdout] test author_from_meta_is_extracted_and_cleaned ... ok
[INFO] [stdout] test author_from_article_author_meta_is_extracted ... ok
[INFO] [stdout] test date_from_human_readable_text_is_parsed ... ok
[INFO] [stdout] test author_from_jsonld_is_extracted ... ok
[INFO] [stdout] test author_from_class_selector_is_extracted_and_cleaned ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/boilerplate_test.rs (/opt/rustwide/target/debug/deps/boilerplate_test-5ba9dde4225bdbca)
[INFO] [stdout] 
[INFO] [stdout] running 26 tests
[INFO] [stdout] test aside_is_excluded_even_inside_article ... ok
[INFO] [stdout] test breadcrumb_class_is_excluded ... ok
[INFO] [stdout] test footer_inside_main_is_preserved ... ok
[INFO] [stdout] test nav_is_excluded_even_inside_article ... ok
[INFO] [stdout] test schema_org_breadcrumb_list_is_excluded ... ok
[INFO] [stdout] test aside_inside_main_is_excluded ... ok
[INFO] [stdout] test schema_org_breadcrumb_list_inside_article_is_excluded ... ok
[INFO] [stdout] test main_menu_class_is_excluded ... ok
[INFO] [stdout] test navbar_class_is_excluded ... ok
[INFO] [stdout] test nested_aside_is_excluded ... ok
[INFO] [stdout] test header_inside_main_is_preserved ... ok
[INFO] [stdout] test ins_tag_is_excluded ... ok
[INFO] [stdout] test top_nav_class_is_excluded ... ok
[INFO] [stdout] test ad_class_is_excluded ... ok
[INFO] [stdout] test sponsored_class_is_excluded ... ok
[INFO] [stdout] test site_header_is_excluded_but_article_header_is_preserved ... ok
[INFO] [stdout] test related_and_recommended_sections_are_excluded_by_class ... ok
[INFO] [stdout] test advertisement_class_is_excluded ... ok
[INFO] [stdout] test address_class_is_not_treated_as_ad ... ok
[INFO] [stdout] test ad_id_is_excluded ... ok
[INFO] [stdout] test footer_related_legal_classes_are_excluded_by_class ... ok
[INFO] [stdout] test banner_ad_id_is_excluded ... ok
[INFO] [stdout] test site_nav_class_is_excluded ... ok
[INFO] [stdout] test social_widget_is_excluded ... ok
[INFO] [stdout] test share_buttons_are_excluded ... ok
[INFO] [stdout] test site_footer_is_excluded_but_article_footer_is_preserved ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/categories_tags_test.rs (/opt/rustwide/target/debug/deps/categories_tags_test-55d78a8ea5066600)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test tags_parse_keywords_meta_comma_separated ... ok
[INFO] [stdout] test categories_extract_article_section ... ok
[INFO] [stdout] test tags_collect_all_article_tag_meta_values ... ok
[INFO] [stdout] test page_type_extracts_og_type ... ok
[INFO] [stdout] test tags_combine_article_tag_and_keywords_sources ... ok
[INFO] [stdout] test tags_deduplicate_across_article_tag_and_keywords ... ok
[INFO] [stdout] test categories_and_tags_are_empty_when_no_sources ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/comments_test.rs (/opt/rustwide/target/debug/deps/comments_test-6ba5847eaa32da24)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test extract_returns_none_when_no_comments_found ... ok
[INFO] [stdout] test extract_excludes_comments_by_default ... ok
[INFO] [stdout] test extract_includes_comments_when_option_enabled ... ok
[INFO] [stdout] test extract_detects_fb_comments_container ... ok
[INFO] [stdout] test extract_detects_disqus_container_as_comments ... ok
[INFO] [stdout] test extract_detects_respond_id_as_comment_section ... ok
[INFO] [stdout] test extract_detects_comment_list_class_via_regex_fallback ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/description_language_test.rs (/opt/rustwide/target/debug/deps/description_language_test-6b0ea7e0dc45b460)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test language_from_content_language_meta ... ok
[INFO] [stdout] test description_is_none_when_no_sources ... ok
[INFO] [stdout] test description_falls_back_to_og_description ... ok
[INFO] [stdout] test language_is_none_when_no_indicators ... ok
[INFO] [stdout] test language_from_simple_code_without_region ... ok
[INFO] [stdout] test language_from_html_lang_is_normalized ... ok
[INFO] [stdout] test description_falls_back_to_twitter_description ... ok
[INFO] [stdout] test language_from_og_locale_is_normalized ... ok
[INFO] [stdout] test description_from_meta_description ... ok
[INFO] [stderr]      Running tests/encoding_test.rs (/opt/rustwide/target/debug/deps/encoding_test-8cc92ad9b992de3a)
[INFO] [stdout] test language_from_meta_name_language ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test latin1_special_characters ... ok
[INFO] [stdout] test utf8_assumed_when_no_charset ... ok
[INFO] [stdout] test utf8_bom_handled_correctly ... ok
[INFO] [stdout] test charset_detection_case_insensitive ... ok
[INFO] [stdout] test utf8_content_handled_correctly ... ok
[INFO] [stdout] test iso88591_converted_to_utf8 ... ok
[INFO] [stdout] test invalid_encoding_handled_gracefully ... ok
[INFO] [stdout] test multiple_charset_declarations ... ok
[INFO] [stdout] test partial_results_on_corrupted_encoding ... ok
[INFO] [stdout] test windows1252_detected_and_converted ... ok
[INFO] [stdout] test extract_bytes_with_options_works ... ok
[INFO] [stdout] test real_world_mixed_encoding ... ok
[INFO] [stderr]      Running tests/extraction_test.rs (/opt/rustwide/target/debug/deps/extraction_test-47712639df2c4660)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test partial_result_has_meaningful_warning ... ok
[INFO] [stdout] test extract_uses_main_when_no_article_present ... ok
[INFO] [stdout] test extract_returns_partial_result_when_only_boilerplate_present ... ok
[INFO] [stdout] test extract_prefers_article_over_main ... ok
[INFO] [stdout] test extract_excludes_boilerplate_inside_article ... ok
[INFO] [stdout] test extract_supports_role_main ... ok
[INFO] [stdout] test extract_handles_section_with_content_class ... ok
[INFO] [stdout] test extract_article_nested_in_nav_uses_fallback ... ok
[INFO] [stdout] test extract_applies_content_heuristics_and_excludes_boilerplate ... ok
[INFO] [stdout] test extract_supports_role_article ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/html_output_test.rs (/opt/rustwide/target/debug/deps/html_output_test-ee894e92b14a6816)
[INFO] [stdout] 
[INFO] [stdout] running 8 tests
[INFO] [stdout] test extract_preserves_blockquote ... ok
[INFO] [stdout] test extract_returns_content_html_with_block_structure ... ok
[INFO] [stdout] test extract_content_html_is_well_formed_and_escapes_special_chars ... ok
[INFO] [stdout] test extract_preserves_definition_list_structure ... ok
[INFO] [stdout] test extract_preserves_list_structure_in_content_html ... ok
[INFO] [stdout] test extract_preserves_b_and_i_tags ... ok
[INFO] [stdout] test extract_preserves_inline_formatting_in_content_html ... ok
[INFO] [stdout] test extract_preserves_ordered_list_structure ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/image_license_test.rs (/opt/rustwide/target/debug/deps/image_license_test-dae265c797082428)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test image_falls_back_to_twitter_image_property ... ok
[INFO] [stdout] test license_from_anchor_rel_license ... ok
[INFO] [stdout] test no_image_and_license_are_none ... ok
[INFO] [stdout] test license_from_link_rel_license ... ok
[INFO] [stdout] test license_normalizes_cc0_public_domain ... ok
[INFO] [stdout] test license_from_dcterms_license_meta ... ok
[INFO] [stdout] test image_from_og_image ... ok
[INFO] [stdout] test license_from_dc_rights_meta ... ok
[INFO] [stdout] test image_falls_back_to_twitter_image_name ... ok
[INFO] [stdout] test license_from_dc_rights_meta_creative_commons_url_is_normalized ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.14s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/image_link_toggle_test.rs (/opt/rustwide/target/debug/deps/image_link_toggle_test-98853cec4ffb69e5)
[INFO] [stdout] 
[INFO] [stdout] running 26 tests
[INFO] [stdout] test both_image_and_link_toggles_disabled ... ok
[INFO] [stdout] test image_filename_extracted_correctly ... ok
[INFO] [stdout] test figcaption_extracted_from_figure ... ok
[INFO] [stdout] test default_options_excludes_images ... ok
[INFO] [stdout] test figure_images_not_duplicated ... ok
[INFO] [stdout] test first_image_is_hero_without_og_image ... ok
[INFO] [stdout] test include_images_deduplicates_urls ... ok
[INFO] [stdout] test figcaption_and_hero_combined ... ok
[INFO] [stdout] test both_image_and_link_toggles_enabled ... ok
[INFO] [stdout] test empty_figcaption_is_none ... ok
[INFO] [stdout] test figcaption_whitespace_normalized ... ok
[INFO] [stdout] test image_toggle_doesnt_affect_text_content ... ok
[INFO] [stdout] test full_image_pipeline_integration ... ok
[INFO] [stdout] test include_images_extracts_lazy_loaded_images ... ok
[INFO] [stdout] test default_options_excludes_link_urls ... ok
[INFO] [stdout] test figure_without_figcaption ... ok
[INFO] [stdout] test include_links_false_strips_href_from_html ... ok
[INFO] [stdout] test include_links_preserves_multiple_hrefs ... ok
[INFO] [stdout] test include_images_true_collects_image_urls ... ok
[INFO] [stdout] test include_images_false_returns_empty_images ... ok
[INFO] [stdout] test og_image_filename_match_is_hero ... ok
[INFO] [stdout] test og_image_exact_match_is_hero ... ok
[INFO] [stdout] test standalone_image_has_no_caption ... ok
[INFO] [stdout] test include_links_true_preserves_href_in_html ... ok
[INFO] [stdout] test pipeline_deduplicates_images ... ok
[INFO] [stdout] test link_toggle_doesnt_affect_text_content ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/integration_tests.rs (/opt/rustwide/target/debug/deps/integration_tests-7924be55e872f4ac)
[INFO] [stdout] 
[INFO] [stdout] running 27 tests
[INFO] [stdout] test integration::edge_cases::test_extract_empty_body ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_only_whitespace_content ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_no_body ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_minimal_html ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_non_english_content ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_script_and_style_removed ... ok
[INFO] [stdout] test integration::feature_combinations::test_min_output_size_validation ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_malformed_html ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_handles_special_characters ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_unicode_content ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_preserves_text_structure ... ok
[INFO] [stdout] test integration::feature_combinations::test_deduplication_removes_repeated_text ... ok
[INFO] [stdout] test integration::feature_combinations::test_tables_and_precision_combined ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_deeply_nested_html ... ok
[INFO] [stdout] test integration::real_world_articles::test_extract_full_article_with_metadata ... ok
[INFO] [stdout] test integration::feature_combinations::test_precision_mode_with_metadata ... ok
[INFO] [stdout] test integration::feature_combinations::test_content_length_limits ... ok
[INFO] [stdout] test integration::real_world_articles::test_extract_docs_with_tables ... ok
[INFO] [stdout] test integration::real_world_articles::test_extract_blog_without_comments ... ok
[INFO] [stdout] test integration::feature_combinations::test_recall_mode_extracts_more_content ... ok
[INFO] [stdout] test integration::real_world_articles::test_article_metadata_completeness ... ok
[INFO] [stdout] test integration::feature_combinations::test_multiple_options_combined ... ok
[INFO] [stdout] test integration::real_world_articles::test_extract_article_removes_boilerplate ... ok
[INFO] [stdout] test integration::real_world_articles::test_extract_blog_with_comments_enabled ... ok
[INFO] [stdout] test integration::feature_combinations::test_author_blacklist_filtering ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_performance_baseline ... ok
[INFO] [stdout] test integration::edge_cases::test_extract_very_large_document ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 27 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.50s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/language_filtering_test.rs (/opt/rustwide/target/debug/deps/language_filtering_test-8f804cfcd3690d94)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test language_codes_are_normalized ... ok
[INFO] [stdout] test target_language_filters_non_matching_content ... ok
[INFO] [stdout] test child_inherits_parent_language ... ok
[INFO] [stdout] test language_matching_is_case_insensitive ... ok
[INFO] [stdout] test default_options_has_no_target_language ... ok
[INFO] [stdout] test no_language_metadata_accepts_content ... ok
[INFO] [stdout] test target_language_de_prefers_german ... ok
[INFO] [stdout] test no_target_language_accepts_all_content ... ok
[INFO] [stdout] test language_filtering_doesnt_affect_metadata ... ok
[INFO] [stdout] test document_language_used_when_no_element_lang ... ok
[INFO] [stdout] test mixed_language_page_filters_correctly ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/options_test.rs (/opt/rustwide/target/debug/deps/options_test-749aebc6d77596e8)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test options_struct_update_syntax_overrides_selected_fields_only ... ok
[INFO] [stdout] test options_default_values_are_sensible ... ok
[INFO] [stdout] test options_implements_debug_and_clone ... ok
[INFO] [stdout] test extract_with_options_can_use_options_url_for_hostname_extraction ... ok
[INFO] [stdout] test extract_and_extract_with_default_options_match ... ok
[INFO] [stdout] test extract_with_options_respects_include_tables_false ... ok
[INFO] [stdout] test extract_with_options_respects_non_default_options_and_extract_remains_unchanged ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/partial_test.rs (/opt/rustwide/target/debug/deps/partial_test-aee16f9ecba416b4)
[INFO] [stdout] 
[INFO] [stdout] running 11 tests
[INFO] [stdout] test malformed_html_graceful_degradation ... ok
[INFO] [stdout] test empty_html_returns_partial_result ... ok
[INFO] [stdout] test minimal_valid_content ... ok
[INFO] [stdout] test only_boilerplate_returns_metadata ... ok
[INFO] [stdout] test title_fails_but_other_metadata_succeeds ... ok
[INFO] [stdout] test multiple_warnings_collected ... ok
[INFO] [stdout] test successful_extraction_no_warnings ... ok
[INFO] [stdout] test metadata_only_when_content_fails ... ok
[INFO] [stdout] test partial_metadata_with_content ... ok
[INFO] [stdout] test recoverable_errors_dont_panic ... ok
[INFO] [stdout] test partial_results_respect_options ... ok
[INFO] [stderr]      Running tests/precision_test.rs (/opt/rustwide/target/debug/deps/precision_test-0eeadbe912ac8481)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.15s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test conflicting_precision_and_recall_options_handled_gracefully ... ok
[INFO] [stdout] test precision_mode_filters_link_heavy_content ... ok
[INFO] [stdout] test different_modes_use_different_thresholds ... ok
[INFO] [stdout] test threshold_boundaries_differentiate_modes ... ok
[INFO] [stdout] test recall_mode_is_more_inclusive ... ok
[INFO] [stdout] test precision_mode_is_more_selective ... ok
[INFO] [stdout] test precision_mode_accepts_high_quality_content ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/recall_test.rs (/opt/rustwide/target/debug/deps/recall_test-12feb1d48493b6ff)
[INFO] [stdout] 
[INFO] [stdout] running 9 tests
[INFO] [stdout] test recall_mode_handles_minimal_content ... ok
[INFO] [stdout] test recall_mode_extracts_from_multiple_small_paragraphs ... ok
[INFO] [stdout] test recall_mode_includes_borderline_content ... ok
[INFO] [stdout] test recall_mode_uses_lower_threshold_than_default ... ok
[INFO] [stdout] test recall_is_more_inclusive_than_precision ... ok
[INFO] [stdout] test recall_mode_accepts_sparse_content ... ok
[INFO] [stdout] test recall_mode_extracts_more_or_equal_content ... ok
[INFO] [stderr]      Running tests/robustness_test.rs (/opt/rustwide/target/debug/deps/robustness_test-a9f65ffec02206e7)
[INFO] [stdout] test recall_mode_accepts_high_quality_content ... ok
[INFO] [stdout] test recall_mode_combines_content_from_multiple_regions ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 9 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test extract_returns_partial_result_for_body_only_html ... ok
[INFO] [stdout] test extract_returns_partial_result_for_minimal_html ... ok
[INFO] [stdout] test extract_does_not_panic_on_malformed_html_missing_closing_tags ... ok
[INFO] [stdout] test extract_returns_partial_result_for_empty_string ... ok
[INFO] [stdout] test extract_returns_partial_result_for_whitespace_only_input ... ok
[INFO] [stdout] test extract_does_not_panic_on_malformed_html_broken_attributes ... ok
[INFO] [stdout] test extract_handles_null_bytes_gracefully ... ok
[INFO] [stdout] test extract_does_not_panic_on_malformed_html_invalid_nesting ... ok
[INFO] [stdout] test extract_does_not_panic_on_malformed_html_incomplete_entities ... ok
[INFO] [stdout] test extract_does_not_panic_on_malformed_html_unclosed_tags ... ok
[INFO] [stdout] test extract_skips_script_tags ... ok
[INFO] [stdout] test extract_handles_large_html_without_panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 53.10s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/scoring_test.rs (/opt/rustwide/target/debug/deps/scoring_test-717733a8d98cd469)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test extract_rewards_sentence_rich_regions ... ok
[INFO] [stdout] test extract_degrades_gracefully_when_selected_node_filters_to_empty ... ok
[INFO] [stdout] test extract_selects_deeply_nested_content_node ... ok
[INFO] [stdout] test extract_prefers_substantive_paragraphs ... ok
[INFO] [stdout] test extract_penalizes_link_dense_regions ... ok
[INFO] [stdout] test extract_rewards_heading_proximity ... ok
[INFO] [stderr]      Running tests/site_identity_test.rs (/opt/rustwide/target/debug/deps/site_identity_test-5d2828b83ca130fc)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.12s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test url_is_none_when_no_sources_present ... ok
[INFO] [stdout] test sitename_falls_back_to_application_name ... ok
[INFO] [stdout] test hostname_extracted_from_options_url ... ok
[INFO] [stdout] test hostname_falls_back_to_extracted_url_when_no_options_url ... ok
[INFO] [stdout] test url_from_canonical_link ... ok
[INFO] [stdout] test sitename_is_none_when_no_sources ... ok
[INFO] [stdout] test sitename_can_fall_back_to_title_suffix ... ok
[INFO] [stdout] test url_is_none_when_invalid_url_found ... ok
[INFO] [stdout] test url_falls_back_to_og_url_when_no_canonical ... ok
[INFO] [stdout] test sitename_from_og_site_name ... ok
[INFO] [stdout] 
[INFO] [stderr]      Running tests/spike_markdown_validation.rs (/opt/rustwide/target/debug/deps/spike_markdown_validation-d7358463e418fed6)
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 26 tests
[INFO] [stdout] test markdown_validation_tests::test_malformed_html ... ok
[INFO] [stdout] test markdown_validation_tests::test_literal_asterisks_preserved ... ok
[INFO] [stdout] test markdown_validation_tests::test_literal_underscores_preserved ... ok
[INFO] [stdout] test markdown_validation_tests::test_escape_markdown_function ... ok
[INFO] [stdout] test markdown_validation_tests::test_empty_elements ... ok
[INFO] [stdout] test markdown_validation_tests::test_inline_code ... ok
[INFO] [stdout] test markdown_validation_tests::test_bold_italic ... ok
[INFO] [stdout] test markdown_validation_tests::test_headings ... ok
[INFO] [stdout] test markdown_validation_tests::test_code_block ... ok
[INFO] [stdout] test markdown_validation_tests::test_nested_list ... ok
[INFO] [stdout] test markdown_validation_tests::test_paragraphs ... ok
[INFO] [stdout] test markdown_validation_tests::test_preserves_bold_formatting ... ok
[INFO] [stdout] test markdown_validation_tests::test_ordered_list ... ok
[INFO] [stdout] test markdown_validation_tests::test_preserves_code_blocks ... ok
[INFO] [stdout] test markdown_validation_tests::test_preserves_italic_formatting ... ok
[INFO] [stdout] test markdown_validation_tests::test_table_alignment ... ok
[INFO] [stdout] test markdown_validation_tests::test_table_to_markdown_function ... ok
[INFO] [stdout] test markdown_validation_tests::test_table_conversion ... ok
[INFO] [stdout] test markdown_validation_tests::test_unordered_list ... ok
[INFO] [stdout] test markdown_validation_tests::test_markdown_options_content_markdown_populated ... ok
[INFO] [stdout] test markdown_validation_tests::test_markdown_options_none_when_disabled ... ok
[INFO] [stdout] test markdown_validation_tests::test_markdown_options_configured ... ok
[INFO] [stdout] test markdown_validation_tests::test_markdown_disabled_by_default ... ok
[INFO] [stdout] test markdown_validation_tests::test_markdown_options_preserves_headings ... ok
[INFO] [stdout] test markdown_validation_tests::test_full_pipeline_document_structure ... ok
[INFO] [stderr]      Running tests/subtitle_extraction_test.rs (/opt/rustwide/target/debug/deps/subtitle_extraction_test-44ad3a47a46c9557)
[INFO] [stdout] test markdown_validation_tests::test_full_pipeline_code_blocks ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test no_subtitle_when_not_present ... ok
[INFO] [stdout] test subtitle_extracted_from_h1_following_paragraph ... ok
[INFO] [stdout] test subtitle_prepended_to_content ... ok
[INFO] [stdout] test subtitle_with_common_selectors ... ok
[INFO] [stdout] test subtitle_extracted_from_nytimes_style_deck ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/table_test.rs (/opt/rustwide/target/debug/deps/table_test-d77c058cdeae4f07)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test extract_treats_layout_tables_as_regular_content ... ok
[INFO] [stdout] test extract_treats_single_row_table_as_layout ... ok
[INFO] [stdout] test extract_formats_simple_tables_in_content_text_and_preserves_in_content_html ... ok
[INFO] [stdout] test extract_handles_colspan_and_rowspan_in_table_text ... ok
[INFO] [stdout] test extract_handles_large_tables_without_panic ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.18s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/text_output_test.rs (/opt/rustwide/target/debug/deps/text_output_test-d34daa8b3b683b0d)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test no_content_returns_partial_result_with_warning ... ok
[INFO] [stdout] test extract_handles_nested_inline_elements ... ok
[INFO] [stdout] test extract_preserves_paragraph_separation ... ok
[INFO] [stdout] test extract_preserves_link_text_without_url ... ok
[INFO] [stdout] test extract_strips_inline_elements ... ok
[INFO] [stdout] test extract_handles_list_items ... ok
[INFO] [stdout] test extract_handles_br_as_single_newline ... ok
[INFO] [stdout] test extract_preserves_headings_with_separation ... ok
[INFO] [stdout] test extract_normalizes_inline_whitespace_but_preserves_newlines ... ok
[INFO] [stdout] test extract_result_fields_are_public_and_options_are_defaultable ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/title_extraction_test.rs (/opt/rustwide/target/debug/deps/title_extraction_test-26e13787e422b3a8)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test title_from_title_tag ... ok
[INFO] [stdout] test title_skips_empty_h1_and_returns_none ... ok
[INFO] [stdout] test title_prefers_og_title_when_longer_than_cleaned_title_tag ... ok
[INFO] [stdout] test title_falls_back_to_twitter_title_when_title_and_og_missing ... ok
[INFO] [stdout] test title_falls_back_to_h1_when_no_meta_titles_present ... ok
[INFO] [stdout] test title_cleaning_removes_trailing_site_suffix_only ... ok
[INFO] [stdout] test title_is_none_when_no_sources_present ... ok
[INFO] [stdout] test title_cleaning_removes_site_suffix ... ok
[INFO] [stdout] test title_falls_back_to_og_title_when_title_missing ... ok
[INFO] [stdout] test title_cleaning_preserves_colons_in_content ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/toggle_test.rs (/opt/rustwide/target/debug/deps/toggle_test-28bcb5fb3679ef4c)
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test include_tables_true_includes_table_content ... ok
[INFO] [stdout] test default_options_includes_tables ... ok
[INFO] [stdout] test table_toggle_doesnt_affect_other_content ... ok
[INFO] [stdout] test include_tables_false_excludes_table_content ... ok
[INFO] [stdout] test include_comments_false_returns_none_for_comments ... ok
[INFO] [stdout] test both_toggles_disabled ... ok
[INFO] [stdout] test include_comments_true_populates_comments_fields ... ok
[INFO] [stdout] test both_toggles_enabled ... ok
[INFO] [stdout] test default_options_excludes_comments ... ok
[INFO] [stdout] test comment_toggle_doesnt_affect_main_content ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rs_trafilatura
[INFO] [stdout] 
[INFO] [stdout] running 22 tests
[INFO] [stdout] test src/extractor/mod.rs - extractor (line 17) ... ignored
[INFO] [stdout] test src/selector/discard.rs - selector::discard::find_discardable (line 359) ... ignored
[INFO] [stdout] test src/selector/discard.rs - selector::discard::should_discard (line 339) ... ignored
[INFO] [stdout] test src/selector/mod.rs - selector::query (line 36) ... ignored
[INFO] [stdout] test src/selector/mod.rs - selector::query_all (line 71) ... ignored
[INFO] [stdout] test src/selector/precision.rs - selector::precision::is_image_discard (line 205) ... ignored
[INFO] [stdout] test src/selector/precision.rs - selector::precision::is_teaser (line 185) ... ignored
[INFO] [stdout] test src/selector/precision.rs - selector::precision::should_discard_precision (line 165) ... ignored
[INFO] [stdout] test src/selector/utils.rs - selector::utils::get_node_ancestors (line 22) ... ignored
[INFO] [stdout] test src/selector/utils.rs - selector::utils::id_class (line 134) ... ignored
[INFO] [stdout] test src/selector/utils.rs - selector::utils::is_one_of_tags (line 168) ... ignored
[INFO] [stdout] test src/url_utils.rs - url_utils::extract_filename (line 220) ... ignored
[INFO] [stdout] test src/markdown.rs - markdown::escape_markdown (line 31) ... ok
[INFO] [stdout] test src/scoring.rs - scoring::calculate_fscore (line 54) ... ok
[INFO] [stdout] test src/lib.rs - page_type (line 62) ... ok
[INFO] [stdout] test src/encoding.rs - encoding::transcode_to_utf8 (line 82) ... ok
[INFO] [stdout] test src/lib.rs - extract (line 99) ... ok
[INFO] [stdout] test src/lib.rs - extract_bytes_with_options (line 201) ... ok
[INFO] [stdout] test src/lib.rs - (line 11) ... ok
[INFO] [stdout] test src/lib.rs - extract_with_options (line 126) ... ok
[INFO] [stdout] test src/lib.rs - extract_bytes (line 169) ... ok
[INFO] [stdout] test src/options.rs - options::Options (line 13) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 2.54s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "1d456b6a0f3f91635876e473bd28734173800fcaab57290065010ddc0a561778", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1d456b6a0f3f91635876e473bd28734173800fcaab57290065010ddc0a561778", kill_on_drop: false }`
[INFO] [stdout] 1d456b6a0f3f91635876e473bd28734173800fcaab57290065010ddc0a561778
