[INFO] cloning repository https://github.com/theAester/dftp [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/theAester/dftp" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FtheAester%2Fdftp", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FtheAester%2Fdftp'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5f50ce2cc5e4565799b4e9e82df6bddc6a3b5a73 [INFO] linting theAester/dftp against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FtheAester%2Fdftp" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/theAester/dftp [INFO] finished tweaking git repo https://github.com/theAester/dftp [INFO] tweaked toml for git repo https://github.com/theAester/dftp written to /workspace/builds/worker-1-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/theAester/dftp 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] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Locking 22 packages to latest compatible versions [INFO] [stderr] Adding generic-array v0.14.7 (available: v0.14.9) [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] [stderr] Downloading crates ... [INFO] [stderr] Downloaded net2 v0.2.39 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] 0c23f1b4812181e4f25022e1ad1c7792685cb78451f36d4d63655530c6d3fed7 [INFO] running `Command { std: "docker" "start" "-a" "0c23f1b4812181e4f25022e1ad1c7792685cb78451f36d4d63655530c6d3fed7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0c23f1b4812181e4f25022e1ad1c7792685cb78451f36d4d63655530c6d3fed7", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0c23f1b4812181e4f25022e1ad1c7792685cb78451f36d4d63655530c6d3fed7", kill_on_drop: false }` [INFO] [stdout] 0c23f1b4812181e4f25022e1ad1c7792685cb78451f36d4d63655530c6d3fed7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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] b3f21bba1b32703ed3b10bff579ddfcba7f562920e3e49f3ca8891cc1c129fd0 [INFO] running `Command { std: "docker" "start" "-a" "b3f21bba1b32703ed3b10bff579ddfcba7f562920e3e49f3ca8891cc1c129fd0", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.183 [INFO] [stderr] Checking simd-adler32 v0.3.8 [INFO] [stderr] Checking miniz_oxide v0.8.9 [INFO] [stderr] Checking flate2 v1.1.9 [INFO] [stderr] Checking net2 v0.2.39 [INFO] [stderr] Checking dftp v0.2.4 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused import: `std::fmt::Write as fWrite` [INFO] [stdout] --> src/protocol.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::fmt::Write as fWrite; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/protocol.rs:162:18 [INFO] [stdout] | [INFO] [stdout] 162 | buf[0] = ((len >> 56) ) as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(len >> 56)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] = note: `#[warn(clippy::double_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/protocol.rs:176:18 [INFO] [stdout] | [INFO] [stdout] 176 | buf[9] = ((len >> 24) ) as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(len >> 24)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `std::fmt::Write as fWrite` [INFO] [stdout] --> src/protocol.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 8 | use std::fmt::Write as fWrite; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/protocol.rs:162:18 [INFO] [stdout] | [INFO] [stdout] 162 | buf[0] = ((len >> 56) ) as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(len >> 56)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] = note: `#[warn(clippy::double_parens)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses [INFO] [stdout] --> src/protocol.rs:176:18 [INFO] [stdout] | [INFO] [stdout] 176 | buf[9] = ((len >> 24) ) as u8; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ help: remove them: `(len >> 24)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/protocol.rs:428:17 [INFO] [stdout] | [INFO] [stdout] 428 | fn compute_hash(file: &mut File) -> [u8; 32] { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/protocol.rs:466:9 [INFO] [stdout] | [INFO] [stdout] 466 | let mut s = String::new(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash` [INFO] [stdout] --> src/protocol.rs:465:19 [INFO] [stdout] | [INFO] [stdout] 465 | fn stringify_hash(hash: &[u8]) -> String { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Message` is never used [INFO] [stdout] --> src/protocol.rs:290:6 [INFO] [stdout] | [INFO] [stdout] 290 | enum Message { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/cmd.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 50 | if port < 1 || port > 65536 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(1..=65536).contains(&port)` [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: length comparison to one [INFO] [stdout] --> src/cmd.rs:61:38 [INFO] [stdout] | [INFO] [stdout] 61 | if matches.free.len() > 2 || matches.free.len() < 1{ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `matches.free.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against true are unnecessary [INFO] [stdout] --> src/cmd.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | if compress == true && direction == DIR_RECV { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `compress` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` 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/cmd.rs:97:37 [INFO] [stdout] | [INFO] [stdout] 97 | fn is_addr_string_valid(addrstring: &String) -> bool { [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] 97 - fn is_addr_string_valid(addrstring: &String) -> bool { [INFO] [stdout] 97 + fn is_addr_string_valid(addrstring: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/cmd.rs:172:5 [INFO] [stdout] | [INFO] [stdout] 172 | / match parsed { [INFO] [stdout] 173 | | Ok(_) => true, [INFO] [stdout] 174 | | Err(_) => false [INFO] [stdout] 175 | | } [INFO] [stdout] | |_____^ help: try: `parsed.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/network.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | return Ok(stream); [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] 26 - return Ok(stream); [INFO] [stdout] 26 + Ok(stream) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:14:86 [INFO] [stdout] | [INFO] [stdout] 14 | Err(m) => { return Err(format!("Cannot bind to port {}:\n {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:24:66 [INFO] [stdout] | [INFO] [stdout] 24 | Err(m) => { return Err(format!("connection failed: {}", m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:36:76 [INFO] [stdout] | [INFO] [stdout] 36 | Err(m) => {return Err(format!("Cannot bind to port {}: {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:40:82 [INFO] [stdout] | [INFO] [stdout] 40 | Err(m) => { return Err(format!("Listening on port {} failed: {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:44:67 [INFO] [stdout] | [INFO] [stdout] 44 | Err(m) => { return Err(format!("Cannot accept peer: {}", m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/files.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | return !(filename == "stdin"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `(filename != "stdin")` [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: unneeded `return` statement [INFO] [stdout] --> src/files.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | return !(filename == "stdin"); [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 6 - return !(filename == "stdin"); [INFO] [stdout] 6 + !(filename == "stdin") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/files.rs:15:92 [INFO] [stdout] | [INFO] [stdout] 15 | Err(m) => { return Err(format!("Error opening file {} for reading: {}", filename, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/files.rs:26:92 [INFO] [stdout] | [INFO] [stdout] 26 | Err(m) => { return Err(format!("Error opening file {} for writing: {}", filename, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | / match stream.write_all(&buf) { [INFO] [stdout] 72 | | Err(e) => { [INFO] [stdout] 73 | | match e.kind() { [INFO] [stdout] 74 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 78 | | Ok(_) => {}, [INFO] [stdout] 79 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 ~ if let Err(e) = stream.write_all(&buf) { [INFO] [stdout] 72 + match e.kind() { [INFO] [stdout] 73 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 74 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:84:9 [INFO] [stdout] | [INFO] [stdout] 84 | / match stream.read_exact(&mut buf) { [INFO] [stdout] 85 | | Err(e) => { [INFO] [stdout] 86 | | match e.kind() { [INFO] [stdout] 87 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 91 | | Ok(_) => {}, [INFO] [stdout] 92 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 84 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 85 + match e.kind() { [INFO] [stdout] 86 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 87 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 88 + } [INFO] [stdout] 89 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:119:9 [INFO] [stdout] | [INFO] [stdout] 119 | / match stream.write_all(&buf) { [INFO] [stdout] 120 | | Err(e) => { [INFO] [stdout] 121 | | match e.kind() { [INFO] [stdout] 122 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 126 | | Ok(_) => {}, [INFO] [stdout] 127 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 119 ~ if let Err(e) = stream.write_all(&buf) { [INFO] [stdout] 120 + match e.kind() { [INFO] [stdout] 121 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 122 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 123 + } [INFO] [stdout] 124 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:132:9 [INFO] [stdout] | [INFO] [stdout] 132 | / match stream.read_exact(&mut buf) { [INFO] [stdout] 133 | | Err(e) => { [INFO] [stdout] 134 | | match e.kind() { [INFO] [stdout] 135 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 139 | | Ok(_) => {}, [INFO] [stdout] 140 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 133 + match e.kind() { [INFO] [stdout] 134 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 135 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 136 + } [INFO] [stdout] 137 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | / match stream.write_all(buf){ [INFO] [stdout] 192 | | Err(e) => { [INFO] [stdout] 193 | | match e.kind() { [INFO] [stdout] 194 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 198 | | Ok(_) => {}, [INFO] [stdout] 199 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 191 ~ if let Err(e) = stream.write_all(buf) { [INFO] [stdout] 192 + match e.kind() { [INFO] [stdout] 193 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 194 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 195 + } [INFO] [stdout] 196 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:205:9 [INFO] [stdout] | [INFO] [stdout] 205 | / match stream.read_exact(&mut buf){ [INFO] [stdout] 206 | | Err(e) => { [INFO] [stdout] 207 | | match e.kind() { [INFO] [stdout] 208 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 212 | | Ok(_) => {}, [INFO] [stdout] 213 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 205 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 206 + match e.kind() { [INFO] [stdout] 207 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 208 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 209 + } [INFO] [stdout] 210 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:237:9 [INFO] [stdout] | [INFO] [stdout] 237 | / match stream.read_exact(&mut buf2[..]) { [INFO] [stdout] 238 | | Err(e) => { [INFO] [stdout] 239 | | match e.kind() { [INFO] [stdout] 240 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 244 | | Ok(_) => {}, [INFO] [stdout] 245 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 237 ~ if let Err(e) = stream.read_exact(&mut buf2[..]) { [INFO] [stdout] 238 + match e.kind() { [INFO] [stdout] 239 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 240 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 241 + } [INFO] [stdout] 242 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:249:9 [INFO] [stdout] | [INFO] [stdout] 249 | / match stream.read_exact(&mut hash){ [INFO] [stdout] 250 | | Err(e) => { [INFO] [stdout] 251 | | match e.kind() { [INFO] [stdout] 252 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 256 | | Ok(_) => {}, [INFO] [stdout] 257 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 249 ~ if let Err(e) = stream.read_exact(&mut hash) { [INFO] [stdout] 250 + match e.kind() { [INFO] [stdout] 251 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 252 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 253 + } [INFO] [stdout] 254 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/protocol.rs:368:77 [INFO] [stdout] | [INFO] [stdout] 368 | Err(m) => {return Err(format!("Error while opening file: {:}", m.to_string()));} [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/protocol.rs:385:49 [INFO] [stdout] | [INFO] [stdout] 385 | fn protocol_adjust_recv(mut peer: TcpStream) -> Result<(Box, [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 386 | | Option, [INFO] [stdout] 387 | | ProtocolTable), String>{ [INFO] [stdout] | |_______________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/protocol.rs:412:86 [INFO] [stdout] | [INFO] [stdout] 412 | Err(m) => {return Err(format!("Error while receiving file header: {:}", m.to_string()));} [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/protocol.rs:438:5 [INFO] [stdout] | [INFO] [stdout] 438 | return [0u8; 32]; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 438 - return [0u8; 32]; [INFO] [stdout] 438 + [0u8; 32] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/protocol.rs:446:16 [INFO] [stdout] | [INFO] [stdout] 446 | let size = file.metadata()?.len() as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `file.metadata()?.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/protocol.rs:470:5 [INFO] [stdout] | [INFO] [stdout] 470 | return s; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 470 - return s; [INFO] [stdout] 470 + s [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/protocol.rs:524:9 [INFO] [stdout] | [INFO] [stdout] 524 | / if counter == 0 { [INFO] [stdout] 525 | | if filename != "stdin" { [INFO] [stdout] 526 | | let micros = now.elapsed().unwrap().as_micros() as u64; [INFO] [stdout] 527 | | let speed = (bufflen_acc * 1_000_000) as f64 / micros as f64; [INFO] [stdout] ... | [INFO] [stdout] 534 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 524 ~ if counter == 0 [INFO] [stdout] 525 ~ && filename != "stdin" { [INFO] [stdout] 526 | let micros = now.elapsed().unwrap().as_micros() as u64; [INFO] [stdout] ... [INFO] [stdout] 532 | [INFO] [stdout] 533 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:535:9 [INFO] [stdout] | [INFO] [stdout] 535 | / match sender.write_all(&buff[0..bufflen]) { [INFO] [stdout] 536 | | Err(e) => { [INFO] [stdout] 537 | | match e.kind() { [INFO] [stdout] 538 | | WouldBlock | TimedOut | ConnectionReset => { [INFO] [stdout] ... | [INFO] [stdout] 545 | | Ok(_)=>{} [INFO] [stdout] 546 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 535 ~ if let Err(e) = sender.write_all(&buff[0..bufflen]) { [INFO] [stdout] 536 + match e.kind() { [INFO] [stdout] 537 + WouldBlock | TimedOut | ConnectionReset => { [INFO] [stdout] 538 + eprintln!("The sender has closed the connection. Aborting transfer."); [INFO] [stdout] 539 + break; [INFO] [stdout] 540 + } [INFO] [stdout] 541 + _ => { panic!("Unexpected network error. Aborting."); }, [INFO] [stdout] 542 + } [INFO] [stdout] 543 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `fileheader` after checking its variant with `is_some` [INFO] [stdout] --> src/protocol.rs:568:20 [INFO] [stdout] | [INFO] [stdout] 567 | if fileheader.is_some() && filename == "stdin" { [INFO] [stdout] | -------------------- the check is happening here [INFO] [stdout] 568 | filename = fileheader.as_ref().unwrap().name.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `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: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/protocol.rs:626:17 [INFO] [stdout] | [INFO] [stdout] 626 | let ratio = total as f32 / length as f32; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `total` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/protocol.rs:626:32 [INFO] [stdout] | [INFO] [stdout] 626 | let ratio = total as f32 / length as f32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `length` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `file` [INFO] [stdout] --> src/protocol.rs:428:17 [INFO] [stdout] | [INFO] [stdout] 428 | fn compute_hash(file: &mut File) -> [u8; 32] { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_file` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variable does not need to be mutable [INFO] [stdout] --> src/protocol.rs:466:9 [INFO] [stdout] | [INFO] [stdout] 466 | let mut s = String::new(); [INFO] [stdout] | ----^ [INFO] [stdout] | | [INFO] [stdout] | help: remove this `mut` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `hash` [INFO] [stdout] --> src/protocol.rs:465:19 [INFO] [stdout] | [INFO] [stdout] 465 | fn stringify_hash(hash: &[u8]) -> String { [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_hash` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Message` is never used [INFO] [stdout] --> src/protocol.rs:290:6 [INFO] [stdout] | [INFO] [stdout] 290 | enum Message { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual `!RangeInclusive::contains` implementation [INFO] [stdout] --> src/cmd.rs:50:12 [INFO] [stdout] | [INFO] [stdout] 50 | if port < 1 || port > 65536 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `!(1..=65536).contains(&port)` [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: length comparison to one [INFO] [stdout] --> src/cmd.rs:61:38 [INFO] [stdout] | [INFO] [stdout] 61 | if matches.free.len() > 2 || matches.free.len() < 1{ [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `matches.free.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: equality checks against true are unnecessary [INFO] [stdout] --> src/cmd.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | if compress == true && direction == DIR_RECV { [INFO] [stdout] | ^^^^^^^^^^^^^^^^ help: try: `compress` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stdout] = note: `#[warn(clippy::bool_comparison)]` 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/cmd.rs:97:37 [INFO] [stdout] | [INFO] [stdout] 97 | fn is_addr_string_valid(addrstring: &String) -> bool { [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] 97 - fn is_addr_string_valid(addrstring: &String) -> bool { [INFO] [stdout] 97 + fn is_addr_string_valid(addrstring: &str) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stdout] --> src/cmd.rs:172:5 [INFO] [stdout] | [INFO] [stdout] 172 | / match parsed { [INFO] [stdout] 173 | | Ok(_) => true, [INFO] [stdout] 174 | | Err(_) => false [INFO] [stdout] 175 | | } [INFO] [stdout] | |_____^ help: try: `parsed.is_ok()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stdout] = note: `#[warn(clippy::redundant_pattern_matching)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/network.rs:26:5 [INFO] [stdout] | [INFO] [stdout] 26 | return Ok(stream); [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] 26 - return Ok(stream); [INFO] [stdout] 26 + Ok(stream) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:14:86 [INFO] [stdout] | [INFO] [stdout] 14 | Err(m) => { return Err(format!("Cannot bind to port {}:\n {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] = note: `#[warn(clippy::to_string_in_format_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:24:66 [INFO] [stdout] | [INFO] [stdout] 24 | Err(m) => { return Err(format!("connection failed: {}", m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:36:76 [INFO] [stdout] | [INFO] [stdout] 36 | Err(m) => {return Err(format!("Cannot bind to port {}: {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:40:82 [INFO] [stdout] | [INFO] [stdout] 40 | Err(m) => { return Err(format!("Listening on port {} failed: {}", port, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/network.rs:44:67 [INFO] [stdout] | [INFO] [stdout] 44 | Err(m) => { return Err(format!("Cannot accept peer: {}", m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/files.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | return !(filename == "stdin"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: try: `(filename != "stdin")` [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: unneeded `return` statement [INFO] [stdout] --> src/files.rs:6:5 [INFO] [stdout] | [INFO] [stdout] 6 | return !(filename == "stdin"); [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 6 - return !(filename == "stdin"); [INFO] [stdout] 6 + !(filename == "stdin") [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/files.rs:15:92 [INFO] [stdout] | [INFO] [stdout] 15 | Err(m) => { return Err(format!("Error opening file {} for reading: {}", filename, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/files.rs:26:92 [INFO] [stdout] | [INFO] [stdout] 26 | Err(m) => { return Err(format!("Error opening file {} for writing: {}", filename, m.to_string())); } [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:71:9 [INFO] [stdout] | [INFO] [stdout] 71 | / match stream.write_all(&buf) { [INFO] [stdout] 72 | | Err(e) => { [INFO] [stdout] 73 | | match e.kind() { [INFO] [stdout] 74 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 78 | | Ok(_) => {}, [INFO] [stdout] 79 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 71 ~ if let Err(e) = stream.write_all(&buf) { [INFO] [stdout] 72 + match e.kind() { [INFO] [stdout] 73 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 74 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:84:9 [INFO] [stdout] | [INFO] [stdout] 84 | / match stream.read_exact(&mut buf) { [INFO] [stdout] 85 | | Err(e) => { [INFO] [stdout] 86 | | match e.kind() { [INFO] [stdout] 87 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 91 | | Ok(_) => {}, [INFO] [stdout] 92 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 84 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 85 + match e.kind() { [INFO] [stdout] 86 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 87 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 88 + } [INFO] [stdout] 89 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:119:9 [INFO] [stdout] | [INFO] [stdout] 119 | / match stream.write_all(&buf) { [INFO] [stdout] 120 | | Err(e) => { [INFO] [stdout] 121 | | match e.kind() { [INFO] [stdout] 122 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 126 | | Ok(_) => {}, [INFO] [stdout] 127 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 119 ~ if let Err(e) = stream.write_all(&buf) { [INFO] [stdout] 120 + match e.kind() { [INFO] [stdout] 121 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 122 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 123 + } [INFO] [stdout] 124 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:132:9 [INFO] [stdout] | [INFO] [stdout] 132 | / match stream.read_exact(&mut buf) { [INFO] [stdout] 133 | | Err(e) => { [INFO] [stdout] 134 | | match e.kind() { [INFO] [stdout] 135 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 139 | | Ok(_) => {}, [INFO] [stdout] 140 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 133 + match e.kind() { [INFO] [stdout] 134 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 135 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 136 + } [INFO] [stdout] 137 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:191:9 [INFO] [stdout] | [INFO] [stdout] 191 | / match stream.write_all(buf){ [INFO] [stdout] 192 | | Err(e) => { [INFO] [stdout] 193 | | match e.kind() { [INFO] [stdout] 194 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 198 | | Ok(_) => {}, [INFO] [stdout] 199 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 191 ~ if let Err(e) = stream.write_all(buf) { [INFO] [stdout] 192 + match e.kind() { [INFO] [stdout] 193 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 194 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 195 + } [INFO] [stdout] 196 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:205:9 [INFO] [stdout] | [INFO] [stdout] 205 | / match stream.read_exact(&mut buf){ [INFO] [stdout] 206 | | Err(e) => { [INFO] [stdout] 207 | | match e.kind() { [INFO] [stdout] 208 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 212 | | Ok(_) => {}, [INFO] [stdout] 213 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 205 ~ if let Err(e) = stream.read_exact(&mut buf) { [INFO] [stdout] 206 + match e.kind() { [INFO] [stdout] 207 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 208 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 209 + } [INFO] [stdout] 210 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:237:9 [INFO] [stdout] | [INFO] [stdout] 237 | / match stream.read_exact(&mut buf2[..]) { [INFO] [stdout] 238 | | Err(e) => { [INFO] [stdout] 239 | | match e.kind() { [INFO] [stdout] 240 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 244 | | Ok(_) => {}, [INFO] [stdout] 245 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 237 ~ if let Err(e) = stream.read_exact(&mut buf2[..]) { [INFO] [stdout] 238 + match e.kind() { [INFO] [stdout] 239 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 240 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 241 + } [INFO] [stdout] 242 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:249:9 [INFO] [stdout] | [INFO] [stdout] 249 | / match stream.read_exact(&mut hash){ [INFO] [stdout] 250 | | Err(e) => { [INFO] [stdout] 251 | | match e.kind() { [INFO] [stdout] 252 | | WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] ... | [INFO] [stdout] 256 | | Ok(_) => {}, [INFO] [stdout] 257 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 249 ~ if let Err(e) = stream.read_exact(&mut hash) { [INFO] [stdout] 250 + match e.kind() { [INFO] [stdout] 251 + WouldBlock | TimedOut => {return Err("requst timeout".to_string());} [INFO] [stdout] 252 + _ => { panic!("something is seriously wrong"); }, [INFO] [stdout] 253 + } [INFO] [stdout] 254 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/protocol.rs:368:77 [INFO] [stdout] | [INFO] [stdout] 368 | Err(m) => {return Err(format!("Error while opening file: {:}", m.to_string()));} [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: very complex type used. Consider factoring parts into `type` definitions [INFO] [stdout] --> src/protocol.rs:385:49 [INFO] [stdout] | [INFO] [stdout] 385 | fn protocol_adjust_recv(mut peer: TcpStream) -> Result<(Box, [INFO] [stdout] | _________________________________________________^ [INFO] [stdout] 386 | | Option, [INFO] [stdout] 387 | | ProtocolTable), String>{ [INFO] [stdout] | |_______________________________________________________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity [INFO] [stdout] = note: `#[warn(clippy::type_complexity)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: `to_string` applied to a type that implements `Display` in `format!` args [INFO] [stdout] --> src/protocol.rs:412:86 [INFO] [stdout] | [INFO] [stdout] 412 | Err(m) => {return Err(format!("Error while receiving file header: {:}", m.to_string()));} [INFO] [stdout] | ^^^^^^^^^^^^ help: remove this [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#to_string_in_format_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/protocol.rs:438:5 [INFO] [stdout] | [INFO] [stdout] 438 | return [0u8; 32]; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 438 - return [0u8; 32]; [INFO] [stdout] 438 + [0u8; 32] [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`u64` -> `u64`) [INFO] [stdout] --> src/protocol.rs:446:16 [INFO] [stdout] | [INFO] [stdout] 446 | let size = file.metadata()?.len() as u64; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `file.metadata()?.len()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] = note: `#[warn(clippy::unnecessary_cast)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/protocol.rs:470:5 [INFO] [stdout] | [INFO] [stdout] 470 | return s; [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] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 470 - return s; [INFO] [stdout] 470 + s [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/protocol.rs:524:9 [INFO] [stdout] | [INFO] [stdout] 524 | / if counter == 0 { [INFO] [stdout] 525 | | if filename != "stdin" { [INFO] [stdout] 526 | | let micros = now.elapsed().unwrap().as_micros() as u64; [INFO] [stdout] 527 | | let speed = (bufflen_acc * 1_000_000) as f64 / micros as f64; [INFO] [stdout] ... | [INFO] [stdout] 534 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 524 ~ if counter == 0 [INFO] [stdout] 525 ~ && filename != "stdin" { [INFO] [stdout] 526 | let micros = now.elapsed().unwrap().as_micros() as u64; [INFO] [stdout] ... [INFO] [stdout] 532 | [INFO] [stdout] 533 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/protocol.rs:535:9 [INFO] [stdout] | [INFO] [stdout] 535 | / match sender.write_all(&buff[0..bufflen]) { [INFO] [stdout] 536 | | Err(e) => { [INFO] [stdout] 537 | | match e.kind() { [INFO] [stdout] 538 | | WouldBlock | TimedOut | ConnectionReset => { [INFO] [stdout] ... | [INFO] [stdout] 545 | | Ok(_)=>{} [INFO] [stdout] 546 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 535 ~ if let Err(e) = sender.write_all(&buff[0..bufflen]) { [INFO] [stdout] 536 + match e.kind() { [INFO] [stdout] 537 + WouldBlock | TimedOut | ConnectionReset => { [INFO] [stdout] 538 + eprintln!("The sender has closed the connection. Aborting transfer."); [INFO] [stdout] 539 + break; [INFO] [stdout] 540 + } [INFO] [stdout] 541 + _ => { panic!("Unexpected network error. Aborting."); }, [INFO] [stdout] 542 + } [INFO] [stdout] 543 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `fileheader` after checking its variant with `is_some` [INFO] [stdout] --> src/protocol.rs:568:20 [INFO] [stdout] | [INFO] [stdout] 567 | if fileheader.is_some() && filename == "stdin" { [INFO] [stdout] | -------------------- the check is happening here [INFO] [stdout] 568 | filename = fileheader.as_ref().unwrap().name.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `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: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/protocol.rs:626:17 [INFO] [stdout] | [INFO] [stdout] 626 | let ratio = total as f32 / length as f32; [INFO] [stdout] | ^^^^^^^^^^^^ help: try: `total` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: casting to the same type is unnecessary (`f32` -> `f32`) [INFO] [stdout] --> src/protocol.rs:626:32 [INFO] [stdout] | [INFO] [stdout] 626 | let ratio = total as f32 / length as f32; [INFO] [stdout] | ^^^^^^^^^^^^^ help: try: `length` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 2.31s [INFO] running `Command { std: "docker" "inspect" "b3f21bba1b32703ed3b10bff579ddfcba7f562920e3e49f3ca8891cc1c129fd0", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "b3f21bba1b32703ed3b10bff579ddfcba7f562920e3e49f3ca8891cc1c129fd0", kill_on_drop: false }` [INFO] [stdout] b3f21bba1b32703ed3b10bff579ddfcba7f562920e3e49f3ca8891cc1c129fd0