[INFO] cloning repository https://github.com/shybyte/exercises-in-programming-style-rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/shybyte/exercises-in-programming-style-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fshybyte%2Fexercises-in-programming-style-rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fshybyte%2Fexercises-in-programming-style-rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] eeb1242d7416b4a4b163f9be2fdb4c19984f436f
[INFO] checking shybyte/exercises-in-programming-style-rust/eeb1242d7416b4a4b163f9be2fdb4c19984f436f against master#d5419f1e97b90741d51841f800d3c697c662567d for pr-147565
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fshybyte%2Fexercises-in-programming-style-rust" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/shybyte/exercises-in-programming-style-rust
[INFO] finished tweaking git repo https://github.com/shybyte/exercises-in-programming-style-rust
[INFO] tweaked toml for git repo https://github.com/shybyte/exercises-in-programming-style-rust written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/shybyte/exercises-in-programming-style-rust on toolchain d5419f1e97b90741d51841f800d3c697c662567d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d5419f1e97b90741d51841f800d3c697c662567d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/shybyte/exercises-in-programming-style-rust 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" "+d5419f1e97b90741d51841f800d3c697c662567d" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d5419f1e97b90741d51841f800d3c697c662567d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 9ce592fb8a2f51fef718cdfe822bf5b0ece0814297403520f94208e2b22d90d0
[INFO] running `Command { std: "docker" "start" "-a" "9ce592fb8a2f51fef718cdfe822bf5b0ece0814297403520f94208e2b22d90d0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9ce592fb8a2f51fef718cdfe822bf5b0ece0814297403520f94208e2b22d90d0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9ce592fb8a2f51fef718cdfe822bf5b0ece0814297403520f94208e2b22d90d0", kill_on_drop: false }`
[INFO] [stdout] 9ce592fb8a2f51fef718cdfe822bf5b0ece0814297403520f94208e2b22d90d0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d5419f1e97b90741d51841f800d3c697c662567d" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 028b72130b3ab729b67480472b0a0af682438fa53665d8d78abcc967269b2069
[INFO] running `Command { std: "docker" "start" "-a" "028b72130b3ab729b67480472b0a0af682438fa53665d8d78abcc967269b2069", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Checking exercises_in_programming_style_rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | /     /// Takes a path to a file and assigns the entire
[INFO] [stdout] 17 | |     /// contents of the file to the global variable data
[INFO] [stdout]    | |________________________________________________________^
[INFO] [stdout] 18 | /     let read_file = |filename: &str| {
[INFO] [stdout] 19 | |         let mut text = String::new();
[INFO] [stdout] 20 | |         File::open(filename).unwrap().read_to_string(&mut text).unwrap();
[INFO] [stdout] 21 | |         data.borrow_mut().append(&mut text.chars().collect());
[INFO] [stdout] 22 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |       /// Replaces all nonalphanumeric chars in data with white space
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 26 | /     let filter_chars_and_normalize = || {
[INFO] [stdout] 27 | |         for c in data.borrow_mut().iter_mut() {
[INFO] [stdout] 28 | |             if !c.is_alphanumeric() {
[INFO] [stdout] 29 | |                 *c = ' ';
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |       /// Scans data for words, filling the global variable words
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 37 | /     let scan = || {
[INFO] [stdout] 38 | |         let data_str: String = data.borrow().iter().collect();
[INFO] [stdout] 39 | |         words.borrow_mut().append(&mut data_str.split(' ').map(|s| s.to_string()).filter(|s| !s.is_empty()).collect());
[INFO] [stdout] 40 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |       /// Scans data for words, filling the global variable words
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 43 | /     let remove_stop_words = || {
[INFO] [stdout] 44 | |         let mut stop_words: HashSet<String> = BufReader::new(File::open("test-data/stop_words.txt").unwrap())
[INFO] [stdout] 45 | |             .split(b',').map(|b| String::from_utf8_lossy(&b.unwrap()).into()).collect();
[INFO] [stdout] 46 | |         for ascii_lowercase in b'a'..b'z' { stop_words.insert((ascii_lowercase as char).to_string()); }
[INFO] [stdout] ...  |
[INFO] [stdout] 59 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |       /// Creates a list of pairs associating words with frequencies
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 62 | /     let frequencies = || {
[INFO] [stdout] 63 | |         let mut word_freqs_mut = word_freqs.borrow_mut();
[INFO] [stdout] 64 | |         for w in words.borrow().iter() {
[INFO] [stdout] 65 | |             if let Some(index) = word_freqs_mut.iter().position(|pair| &pair.0 == w) {
[INFO] [stdout] ...  |
[INFO] [stdout] 71 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |       /// Sorts word_freqs by frequency
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 74 | /     let sort = || {
[INFO] [stdout] 75 | |         word_freqs.borrow_mut().sort_by_key(|p| 0 - p.1);
[INFO] [stdout] 76 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info` is never used
[INFO] [stdout]   --> src/bin/10-things.rs:10:4
[INFO] [stdout]    |
[INFO] [stdout] 10 | fn info<T: Debug>(object: &T) -> String {
[INFO] [stdout]    |    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `TFExercise` is never used
[INFO] [stdout]   --> src/bin/10-things.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | trait TFExercise: Debug {
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info` is never used
[INFO] [stdout]   --> src/bin/10-things.rs:10:4
[INFO] [stdout]    |
[INFO] [stdout] 10 | fn info<T: Debug>(object: &T) -> String {
[INFO] [stdout]    |    ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `TFExercise` is never used
[INFO] [stdout]   --> src/bin/10-things.rs:14:7
[INFO] [stdout]    |
[INFO] [stdout] 14 | trait TFExercise: Debug {
[INFO] [stdout]    |       ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | /     /// Takes a path to a file and assigns the entire
[INFO] [stdout] 17 | |     /// contents of the file to the global variable data
[INFO] [stdout]    | |________________________________________________________^
[INFO] [stdout] 18 | /     let read_file = |filename: &str| {
[INFO] [stdout] 19 | |         let mut text = String::new();
[INFO] [stdout] 20 | |         File::open(filename).unwrap().read_to_string(&mut text).unwrap();
[INFO] [stdout] 21 | |         data.borrow_mut().append(&mut text.chars().collect());
[INFO] [stdout] 22 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |       /// Replaces all nonalphanumeric chars in data with white space
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 26 | /     let filter_chars_and_normalize = || {
[INFO] [stdout] 27 | |         for c in data.borrow_mut().iter_mut() {
[INFO] [stdout] 28 | |             if !c.is_alphanumeric() {
[INFO] [stdout] 29 | |                 *c = ' ';
[INFO] [stdout] ...  |
[INFO] [stdout] 34 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |       /// Scans data for words, filling the global variable words
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 37 | /     let scan = || {
[INFO] [stdout] 38 | |         let data_str: String = data.borrow().iter().collect();
[INFO] [stdout] 39 | |         words.borrow_mut().append(&mut data_str.split(' ').map(|s| s.to_string()).filter(|s| !s.is_empty()).collect());
[INFO] [stdout] 40 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |       /// Scans data for words, filling the global variable words
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 43 | /     let remove_stop_words = || {
[INFO] [stdout] 44 | |         let mut stop_words: HashSet<String> = BufReader::new(File::open("test-data/stop_words.txt").unwrap())
[INFO] [stdout] 45 | |             .split(b',').map(|b| String::from_utf8_lossy(&b.unwrap()).into()).collect();
[INFO] [stdout] 46 | |         for ascii_lowercase in b'a'..b'z' { stop_words.insert((ascii_lowercase as char).to_string()); }
[INFO] [stdout] ...  |
[INFO] [stdout] 59 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |       /// Creates a list of pairs associating words with frequencies
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 62 | /     let frequencies = || {
[INFO] [stdout] 63 | |         let mut word_freqs_mut = word_freqs.borrow_mut();
[INFO] [stdout] 64 | |         for w in words.borrow().iter() {
[INFO] [stdout] 65 | |             if let Some(index) = word_freqs_mut.iter().position(|pair| &pair.0 == w) {
[INFO] [stdout] ...  |
[INFO] [stdout] 71 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/bin/04-cookbook.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |       /// Sorts word_freqs by frequency
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 74 | /     let sort = || {
[INFO] [stdout] 75 | |         word_freqs.borrow_mut().sort_by_key(|p| 0 - p.1);
[INFO] [stdout] 76 | |     };
[INFO] [stdout]    | |______- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.68s
[INFO] running `Command { std: "docker" "inspect" "028b72130b3ab729b67480472b0a0af682438fa53665d8d78abcc967269b2069", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "028b72130b3ab729b67480472b0a0af682438fa53665d8d78abcc967269b2069", kill_on_drop: false }`
[INFO] [stdout] 028b72130b3ab729b67480472b0a0af682438fa53665d8d78abcc967269b2069
