[INFO] cloning repository https://github.com/foxsir/learn-rust [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/foxsir/learn-rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffoxsir%2Flearn-rust", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffoxsir%2Flearn-rust'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 569f433fd45daca00d23cc182a8b010e6e6131e5 [INFO] linting foxsir/learn-rust against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffoxsir%2Flearn-rust" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/foxsir/learn-rust [INFO] finished tweaking git repo https://github.com/foxsir/learn-rust [INFO] tweaked toml for git repo https://github.com/foxsir/learn-rust written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/foxsir/learn-rust on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/foxsir/learn-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" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 49290e6765e92732e929eb61231a5d8e5406d65c8e5cd58ed03a04214bbbb9f6 [INFO] running `Command { std: "docker" "start" "-a" "49290e6765e92732e929eb61231a5d8e5406d65c8e5cd58ed03a04214bbbb9f6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "49290e6765e92732e929eb61231a5d8e5406d65c8e5cd58ed03a04214bbbb9f6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "49290e6765e92732e929eb61231a5d8e5406d65c8e5cd58ed03a04214bbbb9f6", kill_on_drop: false }` [INFO] [stdout] 49290e6765e92732e929eb61231a5d8e5406d65c8e5cd58ed03a04214bbbb9f6 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] dfa04eabadc8cf9b0e61b8a9793113ad5f6ac709ec7cd648b9fa24296c961300 [INFO] running `Command { std: "docker" "start" "-a" "dfa04eabadc8cf9b0e61b8a9793113ad5f6ac709ec7cd648b9fa24296c961300", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Checking command-line v0.1.0 (/opt/rustwide/workdir/command-line) [INFO] [stderr] Checking getrandom v0.3.3 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking rand v0.9.2 [INFO] [stderr] Checking learn-rust v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::fs` [INFO] [stdout] --> src/chapter/errors.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::fs; [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 variable: `t` [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:24 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_t` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `u` [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:31 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_u` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:5:8 [INFO] [stdout] | [INFO] [stdout] 5 | V4(String), [INFO] [stdout] | -- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IpAddrKind` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 5 - V4(String), [INFO] [stdout] 5 + V4(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:6:8 [INFO] [stdout] | [INFO] [stdout] 6 | V6(String), [INFO] [stdout] | -- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IpAddrKind` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 6 - V6(String), [INFO] [stdout] 6 + V6(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `value` is never read [INFO] [stdout] --> src/chapter/errors.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 30 | struct Guess { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 31 | value: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Guess` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `value` is never used [INFO] [stdout] --> src/chapter/errors.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl Guess { [INFO] [stdout] | ---------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 43 | pub fn value(&self) -> u32 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `some_function` is never used [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:4 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `add` is never used [INFO] [stdout] --> src/tests/mod.rs:1:4 [INFO] [stdout] | [INFO] [stdout] 1 | fn add(left: u64, right: u64) -> u64 { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:28:25 [INFO] [stdout] | [INFO] [stdout] 28 | println!("\nℤ: {}", 'ℤ'); [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 28 - println!("\nℤ: {}", 'ℤ'); [INFO] [stdout] 28 + println!("\nℤ: ℤ"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:29:25 [INFO] [stdout] | [INFO] [stdout] 29 | println!("\n😊: {}", '😊'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 29 - println!("\n😊: {}", '😊'); [INFO] [stdout] 29 + println!("\n😊: 😊"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:30:25 [INFO] [stdout] | [INFO] [stdout] 30 | println!("\n你: {}", '你'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 30 - println!("\n你: {}", '你'); [INFO] [stdout] 30 + println!("\n你: 你"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:31:25 [INFO] [stdout] | [INFO] [stdout] 31 | println!("\n好: {}", '好'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 31 - println!("\n好: {}", '好'); [INFO] [stdout] 31 + println!("\n好: 好"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/chapter/control_flow.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 45 | for element in a { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider using: `for (i, element) in a.into_iter().enumerate()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/chapter/references_and_borrowing.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn calculate_length(s: &String) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 25 - fn calculate_length(s: &String) -> usize { [INFO] [stdout] 25 + fn calculate_length(s: &str) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | / match x { [INFO] [stdout] 33 | | Some(i) => Some(i + 1), [INFO] [stdout] 34 | | _ => { [INFO] [stdout] 35 | | None [INFO] [stdout] 36 | | } [INFO] [stdout] 37 | | } [INFO] [stdout] | |_____^ help: try: `x.map(|i| i + 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `get(&String::from("a")).is_some()` [INFO] [stdout] --> src/chapter/collections.rs:87:26 [INFO] [stdout] | [INFO] [stdout] 87 | println!("{:?}", map.get(&String::from("a")).is_some()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(&String::from("a"))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check [INFO] [stdout] = note: `#[warn(clippy::unnecessary_get_then_check)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` expression can be replaced with `?` [INFO] [stdout] --> src/chapter/errors.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | let mut username_file = match username_file_result { [INFO] [stdout] | _____________________________^ [INFO] [stdout] 11 | | Ok(file) => file, [INFO] [stdout] 12 | | Err(e) => return Err(e), [INFO] [stdout] 13 | | }; [INFO] [stdout] | |_____^ help: try instead: `username_file_result?` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fs` [INFO] [stdout] --> src/chapter/errors.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | use std::fs; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/chapter/errors.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | if value < 1 || value > 100 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(1..=100).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/chapter/errors.rs:52:8 [INFO] [stdout] | [INFO] [stdout] 52 | if !greeting_file_result.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `greeting_file_result.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `greeting_file_result` after checking its variant with `is_err` [INFO] [stdout] --> src/chapter/errors.rs:53:17 [INFO] [stdout] | [INFO] [stdout] 52 | if !greeting_file_result.is_err() { [INFO] [stdout] | ----------------------------- the check is happening here [INFO] [stdout] 53 | let f = greeting_file_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/chapter/errors.rs:54:46 [INFO] [stdout] | [INFO] [stdout] 54 | println!("File exists length: {:?}", f.bytes().count()); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] = note: `#[warn(clippy::unbuffered_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | return 100; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 50 - return 100; [INFO] [stdout] 50 + 100 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chapter/variables_and_mutability.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | let var = &*vec!["is a ", var].join(""); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["is a ", var]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `t` [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:24 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_t` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `u` [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:31 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^ help: if this is intentional, prefix it with an underscore: `_u` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:5:8 [INFO] [stdout] | [INFO] [stdout] 5 | V4(String), [INFO] [stdout] | -- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IpAddrKind` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 5 - V4(String), [INFO] [stdout] 5 + V4(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:6:8 [INFO] [stdout] | [INFO] [stdout] 6 | V6(String), [INFO] [stdout] | -- ^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `IpAddrKind` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 6 - V6(String), [INFO] [stdout] 6 + V6(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `value` is never read [INFO] [stdout] --> src/chapter/errors.rs:31:5 [INFO] [stdout] | [INFO] [stdout] 30 | struct Guess { [INFO] [stdout] | ----- field in this struct [INFO] [stdout] 31 | value: u32, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Guess` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `value` is never used [INFO] [stdout] --> src/chapter/errors.rs:43:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl Guess { [INFO] [stdout] | ---------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 43 | pub fn value(&self) -> u32 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `some_function` is never used [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:45:4 [INFO] [stdout] | [INFO] [stdout] 45 | fn some_function(t: &T, u: &U) -> i32 [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:28:25 [INFO] [stdout] | [INFO] [stdout] 28 | println!("\nℤ: {}", 'ℤ'); [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] = note: `#[warn(clippy::print_literal)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 28 - println!("\nℤ: {}", 'ℤ'); [INFO] [stdout] 28 + println!("\nℤ: ℤ"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:29:25 [INFO] [stdout] | [INFO] [stdout] 29 | println!("\n😊: {}", '😊'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 29 - println!("\n😊: {}", '😊'); [INFO] [stdout] 29 + println!("\n😊: 😊"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:30:25 [INFO] [stdout] | [INFO] [stdout] 30 | println!("\n你: {}", '你'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 30 - println!("\n你: {}", '你'); [INFO] [stdout] 30 + println!("\n你: 你"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: literal with an empty format string [INFO] [stdout] --> src/chapter/data_type.rs:31:25 [INFO] [stdout] | [INFO] [stdout] 31 | println!("\n好: {}", '好'); [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#print_literal [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 31 - println!("\n好: {}", '好'); [INFO] [stdout] 31 + println!("\n好: 好"); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the variable `i` is used as a loop counter [INFO] [stdout] --> src/chapter/control_flow.rs:45:5 [INFO] [stdout] | [INFO] [stdout] 45 | for element in a { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: consider using: `for (i, element) in a.into_iter().enumerate()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stdout] = note: `#[warn(clippy::explicit_counter_loop)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/chapter/references_and_borrowing.rs:25:24 [INFO] [stdout] | [INFO] [stdout] 25 | fn calculate_length(s: &String) -> usize { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 25 - fn calculate_length(s: &String) -> usize { [INFO] [stdout] 25 + fn calculate_length(s: &str) -> usize { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/chapter/enums_and_pattern.rs:32:5 [INFO] [stdout] | [INFO] [stdout] 32 | / match x { [INFO] [stdout] 33 | | Some(i) => Some(i + 1), [INFO] [stdout] 34 | | _ => { [INFO] [stdout] 35 | | None [INFO] [stdout] 36 | | } [INFO] [stdout] 37 | | } [INFO] [stdout] | |_____^ help: try: `x.map(|i| i + 1)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary use of `get(&String::from("a")).is_some()` [INFO] [stdout] --> src/chapter/collections.rs:87:26 [INFO] [stdout] | [INFO] [stdout] 87 | println!("{:?}", map.get(&String::from("a")).is_some()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains_key(&String::from("a"))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check [INFO] [stdout] = note: `#[warn(clippy::unnecessary_get_then_check)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `match` expression can be replaced with `?` [INFO] [stdout] --> src/chapter/errors.rs:10:29 [INFO] [stdout] | [INFO] [stdout] 10 | let mut username_file = match username_file_result { [INFO] [stdout] | _____________________________^ [INFO] [stdout] 11 | | Ok(file) => file, [INFO] [stdout] 12 | | Err(e) => return Err(e), [INFO] [stdout] 13 | | }; [INFO] [stdout] | |_____^ help: try instead: `username_file_result?` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/chapter/errors.rs:36:12 [INFO] [stdout] | [INFO] [stdout] 36 | if value < 1 || value > 100 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(1..=100).contains(&value)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_range_contains [INFO] [stdout] = note: `#[warn(clippy::manual_range_contains)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/chapter/errors.rs:52:8 [INFO] [stdout] | [INFO] [stdout] 52 | if !greeting_file_result.is_err() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `greeting_file_result.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `greeting_file_result` after checking its variant with `is_err` [INFO] [stdout] --> src/chapter/errors.rs:53:17 [INFO] [stdout] | [INFO] [stdout] 52 | if !greeting_file_result.is_err() { [INFO] [stdout] | ----------------------------- the check is happening here [INFO] [stdout] 53 | let f = greeting_file_result.unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `if let` or `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: calling .bytes() is very inefficient when data is not in memory [INFO] [stdout] --> src/chapter/errors.rs:54:46 [INFO] [stdout] | [INFO] [stdout] 54 | println!("File exists length: {:?}", f.bytes().count()); [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider using `BufReader` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unbuffered_bytes [INFO] [stdout] = note: `#[warn(clippy::unbuffered_bytes)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/chapter/generic_traits_lifetimes.rs:50:5 [INFO] [stdout] | [INFO] [stdout] 50 | return 100; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 50 - return 100; [INFO] [stdout] 50 + 100 [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/tests/mod.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | / mod tests { [INFO] [stdout] 11 | | use super::*; [INFO] [stdout] 12 | | [INFO] [stdout] 13 | | #[test] [INFO] [stdout] ... | [INFO] [stdout] 42 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this assertion is always `false` [INFO] [stdout] --> src/tests/mod.rs:22:9 [INFO] [stdout] | [INFO] [stdout] 22 | assert!(false, "Hello xx?"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: replace this with `panic!()` or `unreachable!()` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants [INFO] [stdout] = note: `#[warn(clippy::assertions_on_constants)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `vec!` [INFO] [stdout] --> src/chapter/variables_and_mutability.rs:8:17 [INFO] [stdout] | [INFO] [stdout] 8 | let var = &*vec!["is a ", var].join(""); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: you can use an array directly: `["is a ", var]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_vec [INFO] [stdout] = note: `#[warn(clippy::useless_vec)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.45s [INFO] running `Command { std: "docker" "inspect" "dfa04eabadc8cf9b0e61b8a9793113ad5f6ac709ec7cd648b9fa24296c961300", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dfa04eabadc8cf9b0e61b8a9793113ad5f6ac709ec7cd648b9fa24296c961300", kill_on_drop: false }` [INFO] [stdout] dfa04eabadc8cf9b0e61b8a9793113ad5f6ac709ec7cd648b9fa24296c961300