[INFO] fetching crate rs-trafilatura 0.2.2... [INFO] testing rs-trafilatura-0.2.2 against 1.95.0 for beta-1.96-1 [INFO] extracting crate rs-trafilatura 0.2.2 into /workspace/builds/worker-0-tc1/source [INFO] removed /workspace/builds/worker-0-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-0-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] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded case_insensitive_string v0.2.10 [INFO] [stderr] Downloaded compression-codecs v0.4.37 [INFO] [stderr] Downloaded string_concat v0.0.1 [INFO] [stderr] Downloaded auto_encoder v0.1.10 [INFO] [stderr] Downloaded string_cache_codegen v0.6.1 [INFO] [stderr] Downloaded markup5ever v0.36.1 [INFO] [stderr] Downloaded html-cleaning v0.3.0 [INFO] [stderr] Downloaded servo_arc v0.4.3 [INFO] [stderr] Downloaded string_cache v0.9.0 [INFO] [stderr] Downloaded llm_models_spider v0.1.62 [INFO] [stderr] Downloaded web_atoms v0.2.3 [INFO] [stderr] Downloaded cssparser v0.36.0 [INFO] [stderr] Downloaded html5ever v0.36.1 [INFO] [stderr] Downloaded dom_query v0.24.0 [INFO] [stderr] Downloaded quick_html2md v0.2.1 [INFO] [stderr] Downloaded chardetng v0.1.17 [INFO] [stderr] Downloaded selectors v0.33.0 [INFO] [stderr] Downloaded spider_agent_types v2.48.24 [INFO] [stderr] Downloaded quick-xml v0.39.2 [INFO] [stderr] Downloaded spider_fingerprint v2.39.0 [INFO] [stderr] Downloaded lol_html v2.7.2 [INFO] [stderr] Downloaded async-compression v0.4.41 [INFO] [stderr] Downloaded spider v2.48.24 [INFO] [stderr] Downloaded web-page-classifier v0.1.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] 98f7e33d1b06dce26b24c58152ceb2d92bb102a66afae634a6a4cc9ce39ad00a [INFO] running `Command { std: "docker" "start" "-a" "98f7e33d1b06dce26b24c58152ceb2d92bb102a66afae634a6a4cc9ce39ad00a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "98f7e33d1b06dce26b24c58152ceb2d92bb102a66afae634a6a4cc9ce39ad00a", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "98f7e33d1b06dce26b24c58152ceb2d92bb102a66afae634a6a4cc9ce39ad00a", kill_on_drop: false }` [INFO] [stdout] 98f7e33d1b06dce26b24c58152ceb2d92bb102a66afae634a6a4cc9ce39ad00a [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] 13b4d1c2fa37dc08a9fcc86618d8ee2db955cfc99741bb1e9aebedcca2c770c8 [INFO] running `Command { std: "docker" "start" "-a" "13b4d1c2fa37dc08a9fcc86618d8ee2db955cfc99741bb1e9aebedcca2c770c8", kill_on_drop: false }` [INFO] [stderr] Compiling stable_deref_trait v1.2.1 [INFO] [stderr] Compiling zerovec-derive v0.11.2 [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 phf_shared v0.13.1 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.8.1 [INFO] [stderr] Compiling dtoa v1.0.11 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Compiling cssparser-macros v0.6.1 [INFO] [stderr] Compiling parking_lot_core v0.9.12 [INFO] [stderr] Compiling rustc-hash v2.1.1 [INFO] [stderr] Compiling bit-set v0.8.0 [INFO] [stderr] Compiling foldhash v0.2.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling dtoa-short v0.3.5 [INFO] [stderr] Compiling futf v0.1.5 [INFO] [stderr] Compiling servo_arc v0.4.3 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling tendril v0.4.3 [INFO] [stderr] Compiling web-page-classifier v0.1.0 [INFO] [stderr] Compiling parking_lot v0.12.5 [INFO] [stderr] Compiling phf_generator v0.13.1 [INFO] [stderr] Compiling phf_codegen v0.13.1 [INFO] [stderr] Compiling string_cache_codegen v0.6.1 [INFO] [stderr] Compiling phf_macros v0.13.1 [INFO] [stderr] Compiling string_cache v0.9.0 [INFO] [stderr] Compiling selectors v0.33.0 [INFO] [stderr] Compiling web_atoms v0.2.3 [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Compiling zerofrom v0.1.6 [INFO] [stderr] Compiling derive_more v2.1.1 [INFO] [stderr] Compiling yoke v0.8.1 [INFO] [stderr] Compiling phf v0.13.1 [INFO] [stderr] Compiling cssparser v0.36.0 [INFO] [stderr] Compiling zerovec v0.11.5 [INFO] [stderr] Compiling zerotrie v0.2.3 [INFO] [stderr] Compiling markup5ever v0.36.1 [INFO] [stderr] Compiling tinystr v0.8.2 [INFO] [stderr] Compiling potential_utf v0.1.4 [INFO] [stderr] Compiling icu_collections v2.1.1 [INFO] [stderr] Compiling html5ever v0.36.1 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling icu_locale_core v2.1.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 html-cleaning v0.3.0 [INFO] [stderr] Compiling quick_html2md v0.2.1 [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 { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> = 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> = 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> = 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> = 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 { [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 { [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 { [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( [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( [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 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn clone_potential_tags(&self) -> HashSet { [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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | pub parent: Option>, [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 { [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 20.59s [INFO] running `Command { std: "docker" "inspect" "13b4d1c2fa37dc08a9fcc86618d8ee2db955cfc99741bb1e9aebedcca2c770c8", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "13b4d1c2fa37dc08a9fcc86618d8ee2db955cfc99741bb1e9aebedcca2c770c8", kill_on_drop: false }` [INFO] [stdout] 13b4d1c2fa37dc08a9fcc86618d8ee2db955cfc99741bb1e9aebedcca2c770c8 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] c7a0f5632b06d23881c4acc2af4fe379d33d99ef59275e06e3d376e86f05da29 [INFO] running `Command { std: "docker" "start" "-a" "c7a0f5632b06d23881c4acc2af4fe379d33d99ef59275e06e3d376e86f05da29", kill_on_drop: false }` [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling zerocopy-derive v0.8.47 [INFO] [stderr] Compiling chrono v0.4.44 [INFO] [stderr] Compiling clap_builder v4.6.0 [INFO] [stderr] Compiling criterion-plot v0.5.0 [INFO] [stderr] Compiling is-terminal v0.4.17 [INFO] [stderr] Compiling tinytemplate v1.2.1 [INFO] [stderr] Compiling zerocopy v0.8.47 [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 { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> = 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> = 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> = 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> = 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 { [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 { [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 { [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( [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( [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 { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn clone_potential_tags(&self) -> HashSet { [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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | pub parent: Option>, [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 { [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: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stdout] --> tests/spike_markdown_validation.rs:8:35 [INFO] [stdout] | [INFO] [stdout] 8 | use rs_trafilatura::markdown::post_process_markdown; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stdout] --> tests/spike_markdown_validation.rs:13:9 [INFO] [stdout] | [INFO] [stdout] 13 | post_process_markdown(&raw) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `md` [INFO] [stdout] --> tests/spike_markdown_validation.rs:159:13 [INFO] [stdout] | [INFO] [stdout] 159 | let md = to_markdown(html); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_md` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `md` [INFO] [stdout] --> tests/spike_markdown_validation.rs:166:13 [INFO] [stdout] | [INFO] [stdout] 166 | let md = to_markdown(html); [INFO] [stdout] | ^^ help: if this is intentional, prefix it with an underscore: `_md` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 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 { [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 { [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 { [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, [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 24 | pub parent: Option>, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `SchemaData` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `extract_open_graph` is never used [INFO] [stdout] --> src/metadata/meta_tags.rs:216:8 [INFO] [stdout] | [INFO] [stdout] 216 | pub fn extract_open_graph(doc: &Document, original: Metadata) -> Metadata { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `LinkDensityResult` is never constructed [INFO] [stdout] --> src/link_density.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 11 | pub struct LinkDensityResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 27.94s [INFO] running `Command { std: "docker" "inspect" "c7a0f5632b06d23881c4acc2af4fe379d33d99ef59275e06e3d376e86f05da29", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c7a0f5632b06d23881c4acc2af4fe379d33d99ef59275e06e3d376e86f05da29", kill_on_drop: false }` [INFO] [stdout] c7a0f5632b06d23881c4acc2af4fe379d33d99ef59275e06e3d376e86f05da29 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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] f1e097d43cdfd088e4dead1fdc4b9792d5b16bc414f991588bd15235f8326c09 [INFO] running `Command { std: "docker" "start" "-a" "f1e097d43cdfd088e4dead1fdc4b9792d5b16bc414f991588bd15235f8326c09", 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 { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> { [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> = 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> = 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> = 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> = 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 { [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 { [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 { [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( [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( [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 { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 103 | pub fn clone_potential_tags(&self) -> HashSet { [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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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> = 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, [INFO] [stderr] | ^^^^^ [INFO] [stderr] ... [INFO] [stderr] 24 | pub parent: Option>, [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 { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `normalize_url` is never used [INFO] [stderr] --> src/url_utils.rs:186:8 [INFO] [stderr] | [INFO] [stderr] 186 | pub fn normalize_url(url_str: &str) -> String { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `urls_match` is never used [INFO] [stderr] --> src/url_utils.rs:205:8 [INFO] [stderr] | [INFO] [stderr] 205 | pub fn urls_match(url1: &str, url2: &str) -> bool { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `LinkDensityResult` is never constructed [INFO] [stderr] --> src/link_density.rs:11:12 [INFO] [stderr] | [INFO] [stderr] 11 | pub struct LinkDensityResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `link_density_test_with_info` is never used [INFO] [stderr] --> src/link_density.rs:156:8 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn link_density_test_with_info(element: &Selection, options: &Options) -> (bool, bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Document`, `extend`, `is_void_element`, and `tail_nodes` [INFO] [stderr] --> src/etree.rs:24:22 [INFO] [stderr] | [INFO] [stderr] 24 | append, element, extend, is_void_element, iter, iter_descendants, iter_text, remove, [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stderr] 25 | set_tail, set_text, strip, strip_elements, strip_tags, sub_element, tail, tail_nodes, text, [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] 26 | Document, [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> src/markdown.rs:527:22 [INFO] [stderr] | [INFO] [stderr] 527 | let result = post_process_markdown(input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> src/markdown.rs:537:22 [INFO] [stderr] | [INFO] [stderr] 537 | let result = post_process_markdown(input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> src/markdown.rs:545:22 [INFO] [stderr] | [INFO] [stderr] 545 | let result = post_process_markdown(input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> src/markdown.rs:552:22 [INFO] [stderr] | [INFO] [stderr] 552 | let result = post_process_markdown(input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> src/markdown.rs:559:22 [INFO] [stderr] | [INFO] [stderr] 559 | let result = post_process_markdown(input); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `rs-trafilatura` (lib) generated 179 warnings (run `cargo fix --lib -p rs-trafilatura` to apply 14 suggestions) [INFO] [stderr] warning: `rs-trafilatura` (lib test) generated 37 warnings (31 duplicates) (run `cargo fix --lib -p rs-trafilatura --tests` to apply 1 suggestion) [INFO] [stderr] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> tests/spike_markdown_validation.rs:8:35 [INFO] [stderr] | [INFO] [stderr] 8 | use rs_trafilatura::markdown::post_process_markdown; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(deprecated)]` on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated function `rs_trafilatura::markdown::post_process_markdown`: Use quick_html2md's built-in escape_special_chars option instead [INFO] [stderr] --> tests/spike_markdown_validation.rs:13:9 [INFO] [stderr] | [INFO] [stderr] 13 | post_process_markdown(&raw) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md` [INFO] [stderr] --> tests/spike_markdown_validation.rs:159:13 [INFO] [stderr] | [INFO] [stderr] 159 | let md = to_markdown(html); [INFO] [stderr] | ^^ help: if this is intentional, prefix it with an underscore: `_md` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `md` [INFO] [stderr] --> tests/spike_markdown_validation.rs:166:13 [INFO] [stderr] | [INFO] [stderr] 166 | let md = to_markdown(html); [INFO] [stderr] | ^^ help: if this is intentional, prefix it with an underscore: `_md` [INFO] [stderr] [INFO] [stderr] warning: `rs-trafilatura` (test "spike_markdown_validation") generated 4 warnings (run `cargo fix --test "spike_markdown_validation" -p rs-trafilatura` to apply 2 suggestions) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.38s [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_deref_to_str ... ok [INFO] [stdout] test dom::tests::test_get_all_attributes ... ok [INFO] [stdout] test dom::tests::test_clone_document ... ok [INFO] [stdout] test dom::strtendril_verification::test_strtendril_size ... ok [INFO] [stdout] test dom::tests::test_children_navigation ... ok [INFO] [stdout] test dom::tests::test_get_all_attributes_empty ... ok [INFO] [stdout] test dom::strtendril_verification::test_strtendril_uses_rc_internally ... ok [INFO] [stdout] test dom::tests::test_is_void_element ... ok [INFO] [stdout] test dom::tests::test_append_and_set_html ... ok [INFO] [stdout] test dom::tests::test_missing_attributes_return_none ... ok [INFO] [stdout] test dom::tests::test_iteration_and_removal ... ok [INFO] [stdout] test dom::tests::test_navigation ... ok [INFO] [stdout] test dom::tests::test_attribute_modification ... 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_next_element_sibling_none ... ok [INFO] [stdout] test dom::tests::test_parse_and_select ... ok [INFO] [stdout] test dom::tests::test_previous_element_sibling_none ... ok [INFO] [stdout] test dom::strtendril_verification::test_strtendril_clone_is_cheap ... ok [INFO] [stdout] test dom::tests::test_remove_elements ... ok [INFO] [stdout] test dom::tests::test_rename_element ... ok [INFO] [stdout] test dom::tests::test_querying ... ok [INFO] [stdout] test dom::tests::test_tag_name ... ok [INFO] [stdout] test dom::tests::test_strip_tags_keep_content ... ok [INFO] [stdout] test dom::tests::test_previous_element_sibling ... ok [INFO] [stdout] test dom::tests::test_replace_with_html ... ok [INFO] [stdout] test dom::tests::test_text_and_html_content ... ok [INFO] [stdout] test extract::tests::clean_text_normalizes_whitespace ... ok [INFO] [stdout] test encoding::tests::detect_utf8_from_meta_charset ... ok [INFO] [stdout] test encoding::tests::detect_windows1252_from_meta_charset ... ok [INFO] [stdout] test encoding::tests::extract_charset_with_quotes ... ok [INFO] [stdout] test encoding::tests::detect_charset_from_content_type ... ok [INFO] [stdout] test encoding::tests::transcode_windows1252_to_utf8 ... ok [INFO] [stdout] test encoding::tests::transcode_iso88591_to_utf8 ... ok [INFO] [stdout] test encoding::tests::detect_iso88591_from_meta_charset ... ok [INFO] [stdout] test encoding::tests::handle_invalid_encoding_gracefully ... ok [INFO] [stdout] test encoding::tests::extract_content_type_charset_case_insensitive ... ok [INFO] [stdout] test encoding::tests::extract_content_type_charset_standard ... ok [INFO] [stdout] test encoding::tests::transcode_utf8_passthrough ... ok [INFO] [stdout] test encoding::tests::default_to_utf8_when_no_charset ... ok [INFO] [stdout] test encoding::tests::extract_charset_without_quotes ... ok [INFO] [stdout] test encoding::tests::extract_charset_case_insensitive ... ok [INFO] [stdout] test extract::test_bloginner_content_not_boilerplate ... ok [INFO] [stdout] test extract::tests::is_boilerplate_detects_navigation ... ok [INFO] [stdout] test extract::tests::extract_returns_partial_result_for_empty_content ... ok [INFO] [stdout] test extract::tests::test_actual_boilerplate_still_detected ... ok [INFO] [stdout] test extract::tests::test_bem_component_prefix_not_boilerplate ... ok [INFO] [stdout] test extract::tests::extract_returns_partial_result_for_empty_string_input ... 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::test_count_words_filters_by_min_length ... ok [INFO] [stdout] test extract::tests::extract_handles_malformed_html_missing_closing_tags ... ok [INFO] [stdout] test extract::tests::extract_returns_partial_result_for_body_only_html ... ok [INFO] [stdout] test extract::tests::test_bem_layout_prefix_not_boilerplate ... ok [INFO] [stdout] test extract::tests::extract_returns_partial_result_for_minimal_html ... ok [INFO] [stdout] test extract::tests::extract_returns_partial_result_for_whitespace_only_input ... ok [INFO] [stdout] test extractor::comments::tests::test_extract_comments_empty_text ... ok [INFO] [stdout] test extractor::comments::tests::test_extract_comments_removes_from_dom ... ok [INFO] [stdout] test extract::tests::test_false_positive_helper ... ok [INFO] [stdout] test extract::tests::test_content_length_validation_min_extracted_len ... ok [INFO] [stdout] test extractor::comments::tests::test_extract_comments_no_comments ... ok [INFO] [stdout] test extractor::comments::tests::test_extract_comments_strips_links ... 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_process_comments_node_clears_attributes ... ok [INFO] [stdout] test extract::tests::extract_returns_content_from_article_tag ... ok [INFO] [stdout] test extract::tests::extract_merges_split_article_body_chunks_conservatively ... ok [INFO] [stdout] test extract::tests::test_comments_validation_min_output_comm_size ... ok [INFO] [stdout] test extractor::fallback::tests::test_baseline_paragraph_scraping ... ok [INFO] [stdout] test extractor::fallback::tests::test_baseline_deduplication ... ok [INFO] [stdout] test extract::tests::extract_handles_malformed_html_incomplete_entities ... 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::test_content_truncation_max_extracted_len ... ok [INFO] [stdout] test extract::tests::test_warning_generation_insufficient_content ... ok [INFO] [stdout] test extract::tests::extract_handles_malformed_html_unclosed_tags ... ok [INFO] [stdout] test extract::tests::test_mixed_bem_and_boilerplate ... ok [INFO] [stdout] test extract::tests::test_warning_generation_removed_comments ... ok [INFO] [stdout] test extract::tests::test_word_count_validation_min_output_size ... ok [INFO] [stdout] test extract::tests::test_warning_generation_truncated_content ... ok [INFO] [stdout] test extractor::fallback::tests::test_baseline_with_article_tag ... ok [INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_empty_extracted ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_data_src_lazy ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_code_blocks ... ok [INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_nested ... ok [INFO] [stdout] test extractor::fallback::tests::test_candidate_is_usable_much_longer ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_lists_empty ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_with_title ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_lists_with_text ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_protocol_relative ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_other_elements_w3_code ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_empty ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_nested_p ... ok [INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_simple ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_simple ... ok [INFO] [stdout] test extractor::fallback::tests::test_extract_json_ld_with_html ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_code_block ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_lists_nested ... ok [INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_removes_invalid ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_empty ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_lists_simple ... ok [INFO] [stdout] test extractor::fallback::tests::test_sanitize_tree_strips_links_when_disabled ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_paragraphs_with_link ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_formatting_orphan ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_multiple_rows ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_basic ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_data_src ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_no_src ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_image_non_image_src ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_empty ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_quotes_simple ... 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_github_highlight ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_simple ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_image_file_jpg ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_list_recall_mode ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_lang ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_titles_summary_to_bold ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_image_file_png ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_image_file_with_query ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_cell_with_nested_elements ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_text_element_empty ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_text_element_with_text ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_text_element_no_alphanumeric ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_code_block_not_code ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_code_block_with_code_tag ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_code_block_single_code_child ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_basic ... ok [INFO] [stdout] test extractor::handlers::tests::test_is_image_file_not_image ... ok [INFO] [stdout] test extractor::handlers::tests::test_handle_table_strips_structural ... 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_formatting ... ok [INFO] [stdout] test extractor::pipeline::tests::test_handle_text_elem_dispatches_to_heading ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_empty_document ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_with_boilerplate ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_no_matches ... ok [INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_finds_paragraphs ... 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_quote ... 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_table_requires_potential_tag ... 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::pruning::tests::test_prune_unwanted_nodes_removes_matching ... ok [INFO] [stdout] test extractor::pipeline::tests::test_recover_wild_text_recall_mode ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_preserves_tail ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_with_backup_restores ... ok [INFO] [stdout] test extractor::state::tests::test_clone_potential_tags ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_keeps_non_trailing_titles ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_all_options ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_precision_removes_trailing_titles ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_images ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_links ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_nodes_empty_rules ... ok [INFO] [stdout] test extractor::pruning::tests::test_prune_unwanted_sections_default_options ... ok [INFO] [stdout] test extractor::state::tests::test_add_remove_potential_tag ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_configure_with_tables ... ok [INFO] [stdout] test extractor::tags::tests::test_empty_tags_to_remove ... ok [INFO] [stdout] test extractor::state::tests::test_multiple_nodes_done_tracking ... ok [INFO] [stdout] test extractor::tags::tests::test_cleaning_tag_counts ... ok [INFO] [stdout] test extractor::tags::tests::test_format_tag_catalog ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_done_tracking ... ok [INFO] [stdout] test extractor::tags::tests::test_tag_catalog ... ok [INFO] [stdout] test extractor::tags::tests::test_cleaning_tags_in_sets ... ok [INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_without_links ... ok [INFO] [stdout] test extractor::pruning::tests::test_strip_non_potential_tags_with_links ... ok [INFO] [stdout] test extractor::state::tests::test_extraction_state_potential_tags_default ... ok [INFO] [stdout] test extractor::tags::tests::test_all_tags_in_sets ... ok [INFO] [stdout] test extractor::tags::tests::test_tags_to_strip ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_precision_mode ... ok [INFO] [stdout] test extractor::tags::tests::test_valid_tag_catalog ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_cell_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_item_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_hi_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_list_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_tags_to_clean ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_graphic_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_quote_tags ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_head_tags ... ok [INFO] [stdout] test html_processing::tests::test_clear_all_attributes ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_code_detection_single_span ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_ref_tags ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_no_code_detection_for_normal_pre ... ok [INFO] [stdout] test extractor::tags::tests::test_xml_lb_tags ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_makes_urls_absolute ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_code_detection_hljs ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_preserves_content_links ... ok [INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_script ... ok [INFO] [stdout] test html_processing::tests::test_convert_tags_strips_standalone_links ... ok [INFO] [stdout] test html_processing::tests::test_create_absolute_url_already_absolute ... ok [INFO] [stdout] test html_processing::tests::test_create_absolute_url_data_uri ... ok [INFO] [stdout] test html_processing::tests::test_duplicate_test_short_text ... 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_handle_text_node_empty ... ok [INFO] [stdout] test html_processing::tests::test_create_absolute_url_protocol_relative ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_fix_comments_converts_br_to_p ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_image_without_src ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_image_bypass ... ok [INFO] [stdout] test html_processing::tests::test_delete_by_link_density ... ok [INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_file ... ok [INFO] [stdout] test html_processing::tests::test_duplicate_test_long_text_threshold ... ok [INFO] [stdout] test html_processing::tests::test_create_absolute_url_relative_path ... ok [INFO] [stdout] test html_processing::tests::test_doc_cleaning_preserves_tables ... ok [INFO] [stdout] test html_processing::tests::test_is_image_element_with_data_srcset ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_preserves_spaces ... ok [INFO] [stdout] test html_processing::tests::test_is_image_element_without_src ... ok [INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_href ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_moves_tail_to_text ... ok [INFO] [stdout] test html_processing::tests::test_post_cleaning_removes_class ... ok [INFO] [stdout] test html_processing::tests::test_post_cleaning_keeps_void_elements ... ok [INFO] [stdout] test html_processing::tests::test_doc_cleaning_removes_tables ... ok [INFO] [stdout] test html_processing::tests::test_post_cleaning_removes_empty_nodes ... ok [INFO] [stdout] test html_processing::tests::test_process_node ... ok [INFO] [stdout] test html_processing::tests::test_process_node_empty ... ok [INFO] [stdout] test html_processing::tests::test_prune_html_removes_empty ... ok [INFO] [stdout] test html_processing::tests::test_is_image_element_non_image_src ... ok [INFO] [stdout] test html_processing::tests::test_process_node_with_cache_dedup ... 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_src ... 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 markdown::tests::test_escape_angle_brackets ... ok [INFO] [stdout] test markdown::tests::test_escape_asterisks ... ok [INFO] [stdout] test markdown::tests::test_empty_table ... ok [INFO] [stdout] test link_density::tests::test_link_density_nav_menu ... ok [INFO] [stdout] test link_density::tests::test_link_density_data_table ... ok [INFO] [stdout] test link_density::tests::test_link_density_table_nav ... ok [INFO] [stdout] test markdown::tests::test_escape_backslash ... ok [INFO] [stdout] test markdown::tests::test_escape_no_special_chars ... ok [INFO] [stdout] test markdown::tests::test_escape_underscores ... ok [INFO] [stdout] test markdown::tests::test_no_escape_in_code_block ... ok [INFO] [stdout] test markdown::tests::test_post_process_preserves_code_blocks ... ok [INFO] [stdout] test markdown::tests::test_post_process_preserves_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 markdown::tests::test_post_process_preserves_lists ... ok [INFO] [stdout] test markdown::tests::test_escape_mixed_content ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_clean_cat_tags ... ok [INFO] [stdout] test markdown::tests::test_table_with_thead ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_removes_trailing_titles ... ok [INFO] [stdout] test markdown::tests::test_simple_table ... ok [INFO] [stdout] test markdown::tests::test_table_alignment_left ... ok [INFO] [stdout] test markdown::tests::test_table_alignment_right ... ok [INFO] [stdout] test markdown::tests::test_table_uneven_rows ... ok [INFO] [stdout] test markdown::tests::test_table_alignment_center ... ok [INFO] [stdout] test markdown::tests::test_escape_brackets ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_with_separator ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_examine_title_element_simple ... ok [INFO] [stdout] test markdown::tests::test_escape_empty_string ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_license_cc ... ok [INFO] [stdout] test metadata::json_ld::tests::test_preserves_original_metadata ... 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_invalid_json_skipped ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_title_h1 ... 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::json_ld::tests::test_image_extraction_formats ... ok [INFO] [stdout] test metadata::json_ld::tests::test_simple_article_schema ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_dublin_core ... ok [INFO] [stdout] test html_processing::tests::test_text_chars_test ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_validate_metadata_name_invalid ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_open_graph_tags ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_standard_meta_tags ... ok [INFO] [stdout] test metadata::tests::test_author_blacklist ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_twitter_cards ... 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_priority ... ok [INFO] [stdout] test metadata::json_ld::tests::test_person_name_composition ... ok [INFO] [stdout] test metadata::tests::test_extract_metadata_with_url_option ... ok [INFO] [stdout] test metadata::tests::test_no_strip_subtitle ... ok [INFO] [stdout] test metadata::tests::test_is_blacklisted_author ... ok [INFO] [stdout] test metadata::tests::test_no_separator ... ok [INFO] [stdout] test metadata::tests::test_strip_prefix_pattern ... ok [INFO] [stdout] test metadata::tests::test_post_process_trims_fields ... ok [INFO] [stdout] test metadata::tests::test_strip_prefix_with_known_sitename ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_linebreak_bypass ... ok [INFO] [stdout] test html_processing::tests::test_handle_text_node_with_content ... ok [INFO] [stdout] test metadata::tests::test_extract_metadata_fallback_chain ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_title_h1_only ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_extract_dom_url_canonical ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_preserves_existing_metadata ... ok [INFO] [stdout] test options::tests::test_favor_precision_takes_precedence_over_recall ... ok [INFO] [stdout] test extractor::pipeline::tests::test_extract_content_recall_mode ... ok [INFO] [stdout] test metadata::tests::test_h1_preferred_when_contained_in_title ... ok [INFO] [stdout] test metadata::tests::test_strip_suffix_dash ... ok [INFO] [stdout] test metadata::tests::test_strip_suffix_em_dash ... ok [INFO] [stdout] test metadata::tests::test_strip_suffix_pipe ... ok [INFO] [stdout] test metadata::tests::test_strip_with_known_sitename ... ok [INFO] [stdout] test options::tests::test_boolean_options_can_be_toggled ... ok [INFO] [stdout] test options::tests::test_custom_thresholds ... ok [INFO] [stdout] test options::tests::test_default_options_thresholds ... ok [INFO] [stdout] test metadata::tests::test_strip_og_title_with_suffix ... ok [INFO] [stdout] test metadata::meta_tags::tests::test_language_from_html_lang ... ok [INFO] [stdout] test options::tests::test_favor_precision_overrides_min_score ... ok [INFO] [stdout] test metadata::dom_extraction::tests::test_normalize_author ... ok [INFO] [stdout] test options::tests::test_favor_recall_overrides_min_score ... ok [INFO] [stdout] test page_type::tests::test_documentation_by_domain ... ok [INFO] [stdout] test page_type::tests::test_documentation_by_path ... ok [INFO] [stdout] test page_type::tests::test_article_by_slug ... 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_category_by_path ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_docs_page ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_collection_page_ld ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_pagination_aria_label ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_product_element_count ... 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_domain_path ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_product_grid ... ok [INFO] [stdout] test page_type::tests::test_extract_signals_no_signals_on_article ... ok [INFO] [stdout] test page_type::tests::test_article_by_path ... 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_forum_by_path ... ok [INFO] [stdout] test page_type::tests::test_forum_by_domain ... ok [INFO] [stdout] test page_type::tests::test_full_pipeline_ambiguous_url_with_product_signals ... ok [INFO] [stdout] test page_type::tests::test_product_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_og_product_group ... ok [INFO] [stdout] test page_type::tests::test_product_by_path ... 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_article_stays_with_code_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_collection_page_ld ... ok [INFO] [stdout] test page_type::tests::test_refine_article_stays_with_product_elements_only ... ok [INFO] [stdout] test page_type::tests::test_refine_category_by_product_elements_with_pagination ... ok [INFO] [stdout] test page_type::tests::test_refine_category_with_grid_and_product_ld ... ok [INFO] [stdout] test page_type::tests::test_refine_documentation_by_code_and_nav ... ok [INFO] [stdout] test page_type::tests::test_refine_product_by_ld_json ... ok [INFO] [stdout] test page_type::tests::test_refine_no_signals_stays_article ... ok [INFO] [stdout] test page_type::tests::test_refine_preserves_url_classification ... 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_article_stays_with_nav_but_few_code ... ok [INFO] [stdout] test scoring::tests::tokenize_empty_string ... ok [INFO] [stdout] test scoring::tests::partial_match_calculates_correctly ... ok [INFO] [stdout] test scoring::tests::tokenize_splits_and_lowercases ... ok [INFO] [stdout] test scoring::tests::whitespace_normalization ... ok [INFO] [stdout] test page_type::tests::test_service_by_path ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_page ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comment_list ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_commentlist ... ok [INFO] [stdout] test scoring::tests::both_empty_returns_perfect ... 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::case_insensitive_matching ... ok [INFO] [stdout] test scoring::tests::duplicate_words_counted_once ... ok [INFO] [stdout] test scoring::tests::empty_expected_returns_zero ... ok [INFO] [stdout] test scoring::tests::empty_extracted_returns_zero ... ok [INFO] [stdout] test scoring::tests::exact_match_returns_perfect_score ... 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 page_type::tests::test_refine_category_by_grid_plus_cart ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_comments_content ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_post_comments ... ok [INFO] [stdout] test patterns::tests::content_class_matches_article_elements ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_2_article_comments ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comment_dash ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_4_social ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_4_comment_class ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_class ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_display_none ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_2_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_nocomments ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_3_comol ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_3_disqus ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_reply_prefix ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_3_dsq_comments ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_respond ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_3_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_4_wrong_tag ... 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_discarded_comments_title_exact ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_not_cite_or_quote ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_quote ... ok [INFO] [stdout] test selector::comments::tests::test_comments_rule_2_comments_prefix ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_respond_section ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_respond_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_find_comments_empty ... ok [INFO] [stdout] test selector::comments::tests::test_is_not_comment_section ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_signin ... ok [INFO] [stdout] test selector::comments::tests::test_is_comment_debris ... ok [INFO] [stdout] test selector::comments::tests::test_is_not_comment_debris ... ok [INFO] [stdout] test selector::comments::tests::test_find_comments ... ok [INFO] [stdout] test selector::comments::tests::test_removed_comment_capital_c ... ok [INFO] [stdout] test selector::comments::tests::test_is_comment_section ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_message ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_reply_dash ... ok [INFO] [stdout] test selector::comments::tests::test_removed_article_comments ... 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::content::tests::test_content_rule_2_article ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_3_story_content ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_3_role_article ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_removed_comments_case_insensitive ... ok [INFO] [stdout] test selector::comments::tests::test_should_not_remove_comments ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_1_post_content ... ok [INFO] [stdout] test selector::comments::tests::test_removed_wrong_tag ... ok [INFO] [stdout] test selector::comments::tests::test_should_remove_comments ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_1_article_body ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_4_id_content ... ok [INFO] [stdout] test selector::comments::tests::test_removed_post_comments ... ok [INFO] [stdout] test selector::comments::tests::test_discarded_comments_title_contains ... ok [INFO] [stdout] test selector::discard::tests::test_discard_aria_hidden ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_5_main_tag ... ok [INFO] [stdout] test selector::discard::tests::test_discard_author ... ok [INFO] [stdout] test selector::comments::tests::test_removed_comments_prefix ... ok [INFO] [stdout] test selector::discard::tests::test_discard_breadcrumb ... ok [INFO] [stdout] test selector::content::tests::test_content_rule_5_main_class ... ok [INFO] [stdout] test selector::content::tests::test_find_content_fallback ... ok [INFO] [stdout] test selector::content::tests::test_find_content_skips_header ... 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::discard::tests::test_discard_akismet ... ok [INFO] [stdout] test selector::discard::tests::test_discard_chinese_pattern ... ok [INFO] [stdout] test selector::discard::tests::test_discard_comments_title ... ok [INFO] [stdout] test selector::discard::tests::test_discard_ad ... ok [INFO] [stdout] test selector::discard::tests::test_discard_footer ... ok [INFO] [stdout] test selector::discard::tests::test_discard_footer_case_insensitive ... ok [INFO] [stdout] test selector::content::tests::test_find_content_skips_wrapper_with_sidebar ... 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_hidden_style_with_space ... ok [INFO] [stdout] test selector::discard::tests::test_discard_reply ... ok [INFO] [stdout] test selector::discard::tests::test_discard_navigation_avigation_pattern ... ok [INFO] [stdout] test selector::content::tests::test_find_content_priority_order ... ok [INFO] [stdout] test selector::discard::tests::test_discard_modal ... ok [INFO] [stdout] test selector::discard::tests::test_discard_hidden_style ... ok [INFO] [stdout] test selector::discard::tests::test_discard_comments_title_exact ... ok [INFO] [stdout] test selector::content::tests::test_find_content_skips_nav ... ok [INFO] [stdout] test selector::discard::tests::test_discard_nocomments ... 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_noprint ... ok [INFO] [stdout] test selector::discard::tests::test_discard_navigation ... ok [INFO] [stdout] test selector::discard::tests::test_discard_hide_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_sharing_shar_prefix ... 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::meta::tests::test_author_discard_1_avatar ... ok [INFO] [stdout] test selector::discard::tests::test_should_not_discard_content ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_1_mailto ... ok [INFO] [stdout] test selector::discard::tests::test_find_discardable ... ok [INFO] [stdout] test selector::discard::tests::test_discard_widget ... ok [INFO] [stdout] test selector::discard::tests::test_discard_third_party_outbrain ... ok [INFO] [stdout] test selector::discard::tests::test_find_discardable_mixed_rules ... ok [INFO] [stdout] test selector::discard::tests::test_discard_wordpress_jetpack ... ok [INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag_h1 ... ok [INFO] [stdout] test selector::discard::tests::test_discard_wrong_tag ... 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::meta::tests::test_author_discard_1_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_1_photo ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_2_linkedin ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_3_img ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_2_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_name ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_rel ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_2_twitter ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_testid ... 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_1_id_author ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_3_figure ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_2_journalist ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_author_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_2_username ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_itemprop ... ok [INFO] [stdout] test selector::meta::tests::test_author_discard_2_facebook ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_2_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_3_screenname ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_1_class_author ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_1_container ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_3_writer ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_1_section ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_1_rubric ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_author_rule_3_case_insensitive ... 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_meta_category ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_3_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_4_breadcrumb ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_4_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_4_breadcrumb_ul ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_1_container ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_3_article_section ... ok [INFO] [stdout] test selector::meta::tests::test_find_tags ... ok [INFO] [stdout] test selector::meta::tests::test_find_categories ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_1_keywords ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_2_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_3_meta_keywords ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_2_rel ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_1_id_tags ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_3_news_keywords ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_2_href ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_3_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_4_itemprop ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_1_id_headline ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_2_not_h1 ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_3_entry ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_1_class_title ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_1_headline ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_3_post_title ... ok [INFO] [stdout] test selector::precision::tests::test_image_caption_case_sensitive ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_5_schema ... ok [INFO] [stdout] test selector::precision::tests::test_image_caption_case_sensitive_id ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_6_data_section ... ok [INFO] [stdout] test selector::precision::tests::test_image_wrong_tag_figure ... ok [INFO] [stdout] test selector::precision::tests::test_image_wrong_tag ... ok [INFO] [stdout] test selector::precision::tests::test_image_caption_id ... ok [INFO] [stdout] test selector::meta::tests::test_find_titles ... ok [INFO] [stdout] test selector::meta::tests::test_is_author_discard ... ok [INFO] [stdout] test selector::meta::tests::test_tags_rule_1_wrong_tag ... ok [INFO] [stdout] test selector::precision::tests::test_image_caption_in_class ... ok [INFO] [stdout] test selector::precision::tests::test_image_no_match ... ok [INFO] [stdout] test selector::precision::tests::test_all_rules_independent ... ok [INFO] [stdout] test selector::precision::tests::test_image_caption_class ... ok [INFO] [stdout] test selector::precision::tests::test_is_image_discard_false ... 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_header ... ok [INFO] [stdout] test selector::precision::tests::test_precision_not_header ... ok [INFO] [stdout] test selector::precision::tests::test_is_teaser_true ... ok [INFO] [stdout] test selector::precision::tests::test_precision_link ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_2_h1 ... ok [INFO] [stdout] test selector::precision::tests::test_precision_wrong_tag ... ok [INFO] [stdout] test selector::precision::tests::test_precision_header_with_class ... 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_case_insensitive ... ok [INFO] [stdout] test selector::precision::tests::test_teaser_class ... ok [INFO] [stdout] test selector::precision::tests::test_teaser_no_match ... ok [INFO] [stdout] test selector::precision::tests::test_teaser_id ... ok [INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag ... ok [INFO] [stdout] test selector::precision::tests::test_is_teaser_false ... ok [INFO] [stdout] test selector::meta::tests::test_categories_rule_6_section_name ... ok [INFO] [stdout] test selector::precision::tests::test_teaser_wrong_tag_h2 ... ok [INFO] [stdout] test selector::precision::tests::test_should_discard_precision_rule_1 ... ok [INFO] [stdout] test selector::precision::tests::test_precision_bottom_in_id ... 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::precision::tests::test_precision_link_in_class ... ok [INFO] [stdout] test selector::tests::test_query_document_order ... ok [INFO] [stdout] test selector::precision::tests::test_is_image_discard_true ... ok [INFO] [stdout] test selector::meta::tests::test_find_authors ... ok [INFO] [stdout] test selector::meta::tests::test_title_rule_3_article_title ... ok [INFO] [stdout] test selector::tests::test_query_with_tag_filter ... ok [INFO] [stdout] test selector::precision::tests::test_should_not_discard_precision ... ok [INFO] [stdout] test selector::precision::tests::test_precision_no_match ... ok [INFO] [stdout] test selector::tests::test_query_returns_none_when_no_match ... ok [INFO] [stdout] test selector::tests::test_rule_can_check_multiple_conditions ... ok [INFO] [stdout] test selector::utils::tests::test_attr_returns_value_or_empty ... ok [INFO] [stdout] test selector::tests::test_query_all_returns_empty_when_no_matches ... ok [INFO] [stdout] test selector::tests::test_query_all_finds_all_matches ... ok [INFO] [stdout] test selector::precision::tests::test_precision_border_style ... ok [INFO] [stdout] test selector::utils::tests::test_contains_case_sensitive ... ok [INFO] [stdout] test selector::utils::tests::test_class_returns_value_or_empty ... ok [INFO] [stdout] test selector::utils::tests::test_combined_pattern_matching ... ok [INFO] [stdout] test url_utils::tests::test_create_absolute_url_relative ... ok [INFO] [stdout] test url_utils::tests::test_create_absolute_url_empty ... ok [INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_stops_at_root ... ok [INFO] [stdout] test url_utils::tests::test_create_absolute_url_already_absolute ... ok [INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_empty_when_no_matches ... ok [INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_finds_all_matching ... ok [INFO] [stdout] test selector::utils::tests::test_id_class_handles_missing_attributes ... ok [INFO] [stdout] test selector::utils::tests::test_tag_returns_lowercase_tag_name ... ok [INFO] [stdout] test selector::utils::tests::test_is_tag ... ok [INFO] [stdout] test selector::utils::tests::test_is_one_of_tags ... ok [INFO] [stdout] test selector::utils::tests::test_id_returns_value_or_empty ... ok [INFO] [stdout] test selector::utils::tests::test_starts_with_case_sensitive ... ok [INFO] [stdout] test selector::utils::tests::test_id_class_combines_both_attributes ... ok [INFO] [stdout] test selector::utils::tests::test_lower ... ok [INFO] [stdout] test selector::utils::tests::test_get_node_ancestors_preserves_order ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_basic ... ok [INFO] [stdout] test url_utils::tests::test_create_absolute_url_special ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_fragment ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_edge_cases ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_query_params ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_query_and_fragment ... 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_filenames_match_basic ... ok [INFO] [stdout] test url_utils::tests::test_filenames_match_empty ... ok [INFO] [stdout] test url_utils::tests::test_get_base_url ... ok [INFO] [stdout] test url_utils::tests::test_get_domain_url ... ok [INFO] [stdout] test url_utils::tests::test_is_absolute_url_invalid ... ok [INFO] [stdout] test url_utils::tests::test_is_absolute_url_valid ... ok [INFO] [stdout] test url_utils::tests::test_is_absolute_url_with_whitespace ... 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_parse_url ... ok [INFO] [stdout] test url_utils::tests::test_urls_match ... ok [INFO] [stdout] test url_utils::tests::test_validate_url_absolute ... ok [INFO] [stdout] test url_utils::tests::test_urls_match_trailing_slash ... ok [INFO] [stdout] test url_utils::tests::test_extract_filename_special_chars ... ok [INFO] [stdout] test url_utils::tests::test_validate_url_empty ... ok [INFO] [stdout] test url_utils::tests::test_validate_url_relative_no_base ... ok [INFO] [stdout] test url_utils::tests::test_validate_url_relative_with_base ... ok [INFO] [stdout] test extract::tests::extract_handles_large_html_without_panic ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 619 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 48.94s [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_from_meta_published_time_is_parsed ... ok [INFO] [stdout] test author_from_jsonld_is_extracted ... ok [INFO] [stdout] test author_from_meta_is_extracted_and_cleaned ... ok [INFO] [stdout] test date_parse_failure_is_graceful ... ok [INFO] [stdout] test author_from_article_author_meta_is_extracted ... ok [INFO] [stdout] test date_is_none_when_time_element_is_empty ... ok [INFO] [stdout] test date_parses_us_date_format ... ok [INFO] [stdout] test date_parses_short_month_format ... ok [INFO] [stdout] test date_from_human_readable_text_is_parsed ... 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 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.46s [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 ins_tag_is_excluded ... ok [INFO] [stdout] test breadcrumb_class_is_excluded ... ok [INFO] [stdout] test footer_inside_main_is_preserved ... ok [INFO] [stdout] test navbar_class_is_excluded ... ok [INFO] [stdout] test nav_is_excluded_even_inside_article ... ok [INFO] [stdout] test header_inside_main_is_preserved ... ok [INFO] [stdout] test nested_aside_is_excluded ... ok [INFO] [stdout] test main_menu_class_is_excluded ... ok [INFO] [stdout] test aside_inside_main_is_excluded ... ok [INFO] [stdout] test aside_is_excluded_even_inside_article ... ok [INFO] [stdout] test schema_org_breadcrumb_list_inside_article_is_excluded ... ok [INFO] [stdout] test site_nav_class_is_excluded ... ok [INFO] [stdout] test schema_org_breadcrumb_list_is_excluded ... ok [INFO] [stdout] test site_footer_is_excluded_but_article_footer_is_preserved ... ok [INFO] [stdout] test footer_related_legal_classes_are_excluded_by_class ... ok [INFO] [stdout] test social_widget_is_excluded ... ok [INFO] [stdout] test site_header_is_excluded_but_article_header_is_preserved ... ok [INFO] [stdout] test address_class_is_not_treated_as_ad ... ok [INFO] [stdout] test share_buttons_are_excluded ... ok [INFO] [stdout] test related_and_recommended_sections_are_excluded_by_class ... ok [INFO] [stdout] test sponsored_class_is_excluded ... ok [INFO] [stdout] test ad_id_is_excluded ... ok [INFO] [stdout] test ad_class_is_excluded ... ok [INFO] [stdout] test top_nav_class_is_excluded ... ok [INFO] [stdout] test banner_ad_id_is_excluded ... ok [INFO] [stdout] test advertisement_class_is_excluded ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [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_deduplicate_across_article_tag_and_keywords ... ok [INFO] [stdout] test tags_collect_all_article_tag_meta_values ... ok [INFO] [stderr] Running tests/comments_test.rs (/opt/rustwide/target/debug/deps/comments_test-6ba5847eaa32da24) [INFO] [stdout] test categories_and_tags_are_empty_when_no_sources ... ok [INFO] [stdout] test page_type_extracts_og_type ... ok [INFO] [stdout] test categories_extract_article_section ... ok [INFO] [stdout] test tags_parse_keywords_meta_comma_separated ... ok [INFO] [stdout] test tags_combine_article_tag_and_keywords_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] [stdout] [INFO] [stdout] running 7 tests [INFO] [stdout] test extract_returns_none_when_no_comments_found ... ok [INFO] [stdout] test extract_detects_fb_comments_container ... ok [INFO] [stdout] test extract_includes_comments_when_option_enabled ... ok [INFO] [stdout] test extract_excludes_comments_by_default ... ok [INFO] [stdout] test extract_detects_respond_id_as_comment_section ... ok [INFO] [stdout] test extract_detects_disqus_container_as_comments ... 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 description_from_meta_description ... ok [INFO] [stdout] test language_is_none_when_no_indicators ... ok [INFO] [stdout] test description_falls_back_to_twitter_description ... ok [INFO] [stdout] test language_from_og_locale_is_normalized ... ok [INFO] [stdout] test language_from_simple_code_without_region ... ok [INFO] [stdout] test language_from_html_lang_is_normalized ... ok [INFO] [stdout] test language_from_meta_name_language ... ok [INFO] [stdout] test language_from_content_language_meta ... ok [INFO] [stdout] test description_falls_back_to_og_description ... ok [INFO] [stdout] test description_is_none_when_no_sources ... 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/encoding_test.rs (/opt/rustwide/target/debug/deps/encoding_test-8cc92ad9b992de3a) [INFO] [stdout] [INFO] [stdout] running 12 tests [INFO] [stdout] test windows1252_detected_and_converted ... ok [INFO] [stdout] test utf8_assumed_when_no_charset ... ok [INFO] [stdout] test multiple_charset_declarations ... ok [INFO] [stdout] test partial_results_on_corrupted_encoding ... ok [INFO] [stdout] test utf8_content_handled_correctly ... ok [INFO] [stdout] test utf8_bom_handled_correctly ... ok [INFO] [stdout] test real_world_mixed_encoding ... ok [INFO] [stdout] test charset_detection_case_insensitive ... ok [INFO] [stdout] test extract_bytes_with_options_works ... ok [INFO] [stdout] test latin1_special_characters ... ok [INFO] [stdout] test iso88591_converted_to_utf8 ... ok [INFO] [stdout] test invalid_encoding_handled_gracefully ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s [INFO] [stdout] [INFO] [stderr] Running tests/extraction_test.rs (/opt/rustwide/target/debug/deps/extraction_test-47712639df2c4660) [INFO] [stdout] [INFO] [stdout] running 10 tests [INFO] [stdout] test extract_returns_partial_result_when_only_boilerplate_present ... ok [INFO] [stdout] test extract_supports_role_main ... ok [INFO] [stdout] test partial_result_has_meaningful_warning ... ok [INFO] [stdout] test extract_supports_role_article ... ok [INFO] [stdout] test extract_prefers_article_over_main ... ok [INFO] [stdout] test extract_excludes_boilerplate_inside_article ... ok [INFO] [stdout] test extract_uses_main_when_no_article_present ... ok [INFO] [stdout] test extract_handles_section_with_content_class ... ok [INFO] [stdout] test extract_applies_content_heuristics_and_excludes_boilerplate ... ok [INFO] [stdout] test extract_article_nested_in_nav_uses_fallback ... 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_b_and_i_tags ... ok [INFO] [stdout] test extract_preserves_blockquote ... ok [INFO] [stdout] test extract_preserves_inline_formatting_in_content_html ... ok [INFO] [stdout] test extract_returns_content_html_with_block_structure ... 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_ordered_list_structure ... ok [INFO] [stdout] test extract_content_html_is_well_formed_and_escapes_special_chars ... 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_name ... ok [INFO] [stdout] test license_from_dcterms_license_meta ... 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 image_from_og_image ... ok [INFO] [stdout] test license_from_dc_rights_meta ... ok [INFO] [stdout] test license_normalizes_cc0_public_domain ... ok [INFO] [stderr] Running tests/image_link_toggle_test.rs (/opt/rustwide/target/debug/deps/image_link_toggle_test-98853cec4ffb69e5) [INFO] [stdout] test image_falls_back_to_twitter_image_property ... 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.05s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 26 tests [INFO] [stdout] test figure_without_figcaption ... ok [INFO] [stdout] test first_image_is_hero_without_og_image ... ok [INFO] [stdout] test figcaption_extracted_from_figure ... ok [INFO] [stdout] test both_image_and_link_toggles_disabled ... ok [INFO] [stdout] test default_options_excludes_link_urls ... ok [INFO] [stdout] test include_images_extracts_lazy_loaded_images ... ok [INFO] [stdout] test full_image_pipeline_integration ... ok [INFO] [stdout] test image_filename_extracted_correctly ... ok [INFO] [stdout] test image_toggle_doesnt_affect_text_content ... ok [INFO] [stdout] test figure_images_not_duplicated ... ok [INFO] [stdout] test empty_figcaption_is_none ... ok [INFO] [stdout] test figcaption_and_hero_combined ... ok [INFO] [stdout] test default_options_excludes_images ... ok [INFO] [stdout] test figcaption_whitespace_normalized ... ok [INFO] [stdout] test include_images_true_collects_image_urls ... ok [INFO] [stdout] test both_image_and_link_toggles_enabled ... ok [INFO] [stdout] test include_images_deduplicates_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 include_links_true_preserves_href_in_html ... ok [INFO] [stdout] test standalone_image_has_no_caption ... ok [INFO] [stdout] test pipeline_deduplicates_images ... ok [INFO] [stdout] test include_links_preserves_multiple_hrefs ... ok [INFO] [stdout] test include_links_false_strips_href_from_html ... ok [INFO] [stdout] test link_toggle_doesnt_affect_text_content ... ok [INFO] [stdout] test og_image_exact_match_is_hero ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s [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_only_whitespace_content ... ok [INFO] [stdout] test integration::edge_cases::test_extract_no_body ... ok [INFO] [stdout] test integration::edge_cases::test_extract_empty_body ... ok [INFO] [stdout] test integration::edge_cases::test_extract_minimal_html ... ok [INFO] [stdout] test integration::edge_cases::test_extract_preserves_text_structure ... ok [INFO] [stdout] test integration::edge_cases::test_extract_script_and_style_removed ... ok [INFO] [stdout] test integration::edge_cases::test_extract_unicode_content ... ok [INFO] [stdout] test integration::edge_cases::test_extract_handles_special_characters ... ok [INFO] [stdout] test integration::edge_cases::test_extract_malformed_html ... ok [INFO] [stdout] test integration::edge_cases::test_extract_non_english_content ... ok [INFO] [stdout] test integration::feature_combinations::test_min_output_size_validation ... ok [INFO] [stdout] test integration::feature_combinations::test_deduplication_removes_repeated_text ... ok [INFO] [stdout] test integration::feature_combinations::test_content_length_limits ... ok [INFO] [stdout] test integration::real_world_articles::test_extract_full_article_with_metadata ... ok [INFO] [stdout] test integration::real_world_articles::test_extract_blog_without_comments ... ok [INFO] [stdout] test integration::real_world_articles::test_extract_blog_with_comments_enabled ... ok [INFO] [stdout] test integration::feature_combinations::test_precision_mode_with_metadata ... 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_article_metadata_completeness ... ok [INFO] [stdout] test integration::feature_combinations::test_author_blacklist_filtering ... ok [INFO] [stdout] test integration::edge_cases::test_extract_deeply_nested_html ... ok [INFO] [stdout] test integration::feature_combinations::test_tables_and_precision_combined ... ok [INFO] [stdout] test integration::real_world_articles::test_extract_docs_with_tables ... ok [INFO] [stdout] test integration::feature_combinations::test_recall_mode_extracts_more_content ... 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.35s [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 no_language_metadata_accepts_content ... ok [INFO] [stdout] test language_filtering_doesnt_affect_metadata ... ok [INFO] [stdout] test language_codes_are_normalized ... ok [INFO] [stdout] test default_options_has_no_target_language ... ok [INFO] [stdout] test target_language_de_prefers_german ... ok [INFO] [stdout] test child_inherits_parent_language ... ok [INFO] [stdout] test language_matching_is_case_insensitive ... ok [INFO] [stdout] test target_language_filters_non_matching_content ... ok [INFO] [stdout] test no_target_language_accepts_all_content ... 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.06s [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_default_values_are_sensible ... ok [INFO] [stdout] test options_implements_debug_and_clone ... ok [INFO] [stdout] test options_struct_update_syntax_overrides_selected_fields_only ... 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.06s [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 empty_html_returns_partial_result ... ok [INFO] [stdout] test partial_results_respect_options ... ok [INFO] [stdout] test partial_metadata_with_content ... ok [INFO] [stdout] test successful_extraction_no_warnings ... ok [INFO] [stdout] test title_fails_but_other_metadata_succeeds ... ok [INFO] [stdout] test multiple_warnings_collected ... ok [INFO] [stdout] test minimal_valid_content ... ok [INFO] [stdout] test only_boilerplate_returns_metadata ... ok [INFO] [stdout] test malformed_html_graceful_degradation ... ok [INFO] [stdout] test metadata_only_when_content_fails ... ok [INFO] [stdout] test recoverable_errors_dont_panic ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s [INFO] [stdout] [INFO] [stderr] Running tests/precision_test.rs (/opt/rustwide/target/debug/deps/precision_test-0eeadbe912ac8481) [INFO] [stdout] [INFO] [stdout] running 7 tests [INFO] [stdout] test precision_mode_accepts_high_quality_content ... ok [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] [INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s [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_accepts_high_quality_content ... ok [INFO] [stdout] test recall_mode_includes_borderline_content ... ok [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_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] [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.09s [INFO] [stdout] [INFO] [stderr] Running tests/robustness_test.rs (/opt/rustwide/target/debug/deps/robustness_test-a9f65ffec02206e7) [INFO] [stdout] [INFO] [stdout] running 12 tests [INFO] [stdout] test extract_returns_partial_result_for_whitespace_only_input ... ok [INFO] [stdout] test extract_does_not_panic_on_malformed_html_invalid_nesting ... ok [INFO] [stdout] test extract_returns_partial_result_for_minimal_html ... ok [INFO] [stdout] test extract_handles_null_bytes_gracefully ... ok [INFO] [stdout] test extract_does_not_panic_on_malformed_html_broken_attributes ... 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_does_not_panic_on_malformed_html_missing_closing_tags ... ok [INFO] [stdout] test extract_does_not_panic_on_malformed_html_incomplete_entities ... ok [INFO] [stdout] test extract_returns_partial_result_for_body_only_html ... ok [INFO] [stdout] test extract_returns_partial_result_for_empty_string ... 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 50.71s [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_rewards_heading_proximity ... ok [INFO] [stdout] test extract_penalizes_link_dense_regions ... ok [INFO] [stdout] test extract_prefers_substantive_paragraphs ... ok [INFO] [stdout] test extract_selects_deeply_nested_content_node ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.10s [INFO] [stdout] [INFO] [stderr] Running tests/site_identity_test.rs (/opt/rustwide/target/debug/deps/site_identity_test-5d2828b83ca130fc) [INFO] [stdout] [INFO] [stdout] running 10 tests [INFO] [stdout] test hostname_extracted_from_options_url ... ok [INFO] [stdout] test sitename_falls_back_to_application_name ... ok [INFO] [stdout] test url_is_none_when_no_sources_present ... ok [INFO] [stdout] test url_from_canonical_link ... ok [INFO] [stdout] test url_is_none_when_invalid_url_found ... ok [INFO] [stdout] test sitename_from_og_site_name ... ok [INFO] [stdout] test sitename_can_fall_back_to_title_suffix ... ok [INFO] [stdout] test url_falls_back_to_og_url_when_no_canonical ... ok [INFO] [stdout] test hostname_falls_back_to_extracted_url_when_no_options_url ... ok [INFO] [stdout] test sitename_is_none_when_no_sources ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s [INFO] [stdout] [INFO] [stderr] Running tests/spike_markdown_validation.rs (/opt/rustwide/target/debug/deps/spike_markdown_validation-d7358463e418fed6) [INFO] [stdout] [INFO] [stdout] running 26 tests [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_nested_list ... ok [INFO] [stdout] test markdown_validation_tests::test_code_block ... ok [INFO] [stdout] test markdown_validation_tests::test_inline_code ... ok [INFO] [stdout] test markdown_validation_tests::test_malformed_html ... ok [INFO] [stdout] test markdown_validation_tests::test_paragraphs ... ok [INFO] [stdout] test markdown_validation_tests::test_preserves_code_blocks ... ok [INFO] [stdout] test markdown_validation_tests::test_headings ... ok [INFO] [stdout] test markdown_validation_tests::test_literal_asterisks_preserved ... ok [INFO] [stdout] test markdown_validation_tests::test_preserves_italic_formatting ... ok [INFO] [stdout] test markdown_validation_tests::test_bold_italic ... ok [INFO] [stdout] test markdown_validation_tests::test_literal_underscores_preserved ... ok [INFO] [stdout] test markdown_validation_tests::test_ordered_list ... ok [INFO] [stdout] test markdown_validation_tests::test_unordered_list ... ok [INFO] [stdout] test markdown_validation_tests::test_table_to_markdown_function ... ok [INFO] [stdout] test markdown_validation_tests::test_table_alignment ... ok [INFO] [stdout] test markdown_validation_tests::test_table_conversion ... ok [INFO] [stdout] test markdown_validation_tests::test_preserves_bold_formatting ... ok [INFO] [stdout] test markdown_validation_tests::test_full_pipeline_code_blocks ... ok [INFO] [stdout] test markdown_validation_tests::test_markdown_options_configured ... ok [INFO] [stdout] test markdown_validation_tests::test_markdown_options_none_when_disabled ... ok [INFO] [stdout] test markdown_validation_tests::test_markdown_options_content_markdown_populated ... 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] [stdout] [INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s [INFO] [stdout] [INFO] [stderr] Running tests/subtitle_extraction_test.rs (/opt/rustwide/target/debug/deps/subtitle_extraction_test-44ad3a47a46c9557) [INFO] [stdout] [INFO] [stdout] running 5 tests [INFO] [stdout] test subtitle_extracted_from_h1_following_paragraph ... ok [INFO] [stdout] test no_subtitle_when_not_present ... 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.07s [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_formats_simple_tables_in_content_text_and_preserves_in_content_html ... ok [INFO] [stdout] test extract_treats_single_row_table_as_layout ... 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.14s [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_result_fields_are_public_and_options_are_defaultable ... ok [INFO] [stdout] test extract_preserves_headings_with_separation ... ok [INFO] [stdout] test extract_preserves_link_text_without_url ... ok [INFO] [stdout] test extract_handles_br_as_single_newline ... ok [INFO] [stdout] test extract_strips_inline_elements ... ok [INFO] [stdout] test extract_normalizes_inline_whitespace_but_preserves_newlines ... ok [INFO] [stdout] test extract_preserves_paragraph_separation ... ok [INFO] [stdout] test extract_handles_list_items ... ok [INFO] [stderr] Running tests/title_extraction_test.rs (/opt/rustwide/target/debug/deps/title_extraction_test-26e13787e422b3a8) [INFO] [stdout] [INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.16s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 10 tests [INFO] [stdout] test title_falls_back_to_twitter_title_when_title_and_og_missing ... ok [INFO] [stdout] test title_cleaning_removes_site_suffix ... ok [INFO] [stdout] test title_skips_empty_h1_and_returns_none ... ok [INFO] [stdout] test title_is_none_when_no_sources_present ... ok [INFO] [stdout] test title_falls_back_to_h1_when_no_meta_titles_present ... ok [INFO] [stdout] test title_falls_back_to_og_title_when_title_missing ... ok [INFO] [stdout] test title_from_title_tag ... ok [INFO] [stdout] test title_cleaning_preserves_colons_in_content ... ok [INFO] [stdout] test title_cleaning_removes_trailing_site_suffix_only ... ok [INFO] [stderr] Running tests/toggle_test.rs (/opt/rustwide/target/debug/deps/toggle_test-28bcb5fb3679ef4c) [INFO] [stdout] test title_prefers_og_title_when_longer_than_cleaned_title_tag ... ok [INFO] [stdout] [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 10 tests [INFO] [stdout] test include_tables_true_includes_table_content ... ok [INFO] [stdout] test default_options_includes_tables ... ok [INFO] [stdout] test include_tables_false_excludes_table_content ... ok [INFO] [stdout] test table_toggle_doesnt_affect_other_content ... ok [INFO] [stdout] test include_comments_false_returns_none_for_comments ... ok [INFO] [stdout] test default_options_excludes_comments ... ok [INFO] [stdout] test both_toggles_disabled ... ok [INFO] [stdout] test both_toggles_enabled ... ok [INFO] [stdout] test include_comments_true_populates_comments_fields ... 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/options.rs - options::Options (line 13) ... 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/scoring.rs - scoring::calculate_fscore (line 54) ... ok [INFO] [stdout] test src/lib.rs - extract_bytes (line 169) ... ok [INFO] [stdout] test src/lib.rs - extract_bytes_with_options (line 201) ... ok [INFO] [stdout] test src/lib.rs - extract (line 99) ... ok [INFO] [stdout] test src/lib.rs - extract_with_options (line 126) ... ok [INFO] [stdout] test src/lib.rs - (line 11) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 10 passed; 0 failed; 12 ignored; 0 measured; 0 filtered out; finished in 1.89s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "f1e097d43cdfd088e4dead1fdc4b9792d5b16bc414f991588bd15235f8326c09", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f1e097d43cdfd088e4dead1fdc4b9792d5b16bc414f991588bd15235f8326c09", kill_on_drop: false }` [INFO] [stdout] f1e097d43cdfd088e4dead1fdc4b9792d5b16bc414f991588bd15235f8326c09