[INFO] crate zmtp 0.6.0 is already in cache [INFO] extracting crate zmtp 0.6.0 into work/ex/clippy-test-run/sources/stable/reg/zmtp/0.6.0 [INFO] extracting crate zmtp 0.6.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/zmtp/0.6.0 [INFO] validating manifest of zmtp-0.6.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of zmtp-0.6.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing zmtp-0.6.0 [INFO] finished frobbing zmtp-0.6.0 [INFO] frobbed toml for zmtp-0.6.0 written to work/ex/clippy-test-run/sources/stable/reg/zmtp/0.6.0/Cargo.toml [INFO] started frobbing zmtp-0.6.0 [INFO] finished frobbing zmtp-0.6.0 [INFO] frobbed toml for zmtp-0.6.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/zmtp/0.6.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting zmtp-0.6.0 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-5/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/zmtp/0.6.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Dclippy::into_iter_on_array" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 94d1e5294fb8efa85414097079604e50c7308afe22184a5fbd7820cf30476cd7 [INFO] running `"docker" "start" "-a" "94d1e5294fb8efa85414097079604e50c7308afe22184a5fbd7820cf30476cd7"` [INFO] [stderr] Checking zmtp v0.6.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/peer.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/peer.rs:225:13 [INFO] [stderr] | [INFO] [stderr] 225 | source: source, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `source` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:22:28 [INFO] [stderr] | [INFO] [stderr] 22 | pub const NULL_MECHANISM: &'static [u8; 20] = // "NULL" as bytes, then [INFO] [stderr] | -^^^^^^^--------- help: consider removing `'static`: `&[u8; 20]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: patterns aren't allowed in methods without bodies [INFO] [stderr] --> src/types.rs:36:24 [INFO] [stderr] | [INFO] [stderr] 36 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(patterns_in_fns_without_body)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #35203 [INFO] [stderr] [INFO] [stderr] warning: this is a decimal constant [INFO] [stderr] --> src/peer.rs:153:26 [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 0000_0001 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_prefixed_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stderr] help: if you mean to use a decimal constant, remove the `0` to remove confusion [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 1 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^ [INFO] [stderr] help: if you mean to use an octal constant, use `0o` [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 0o1 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:22:28 [INFO] [stderr] | [INFO] [stderr] 22 | pub const NULL_MECHANISM: &'static [u8; 20] = // "NULL" as bytes, then [INFO] [stderr] | -^^^^^^^--------- help: consider removing `'static`: `&[u8; 20]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: patterns aren't allowed in methods without bodies [INFO] [stderr] --> src/types.rs:36:24 [INFO] [stderr] | [INFO] [stderr] 36 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(patterns_in_fns_without_body)] on by default [INFO] [stderr] = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! [INFO] [stderr] = note: for more information, see issue #35203 [INFO] [stderr] [INFO] [stderr] warning: this is a decimal constant [INFO] [stderr] --> src/peer.rs:153:26 [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 0000_0001 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::zero_prefixed_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#zero_prefixed_literal [INFO] [stderr] help: if you mean to use a decimal constant, remove the `0` to remove confusion [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 1 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^ [INFO] [stderr] help: if you mean to use an octal constant, use `0o` [INFO] [stderr] | [INFO] [stderr] 153 | if sig_rest[8] & 0o1 == 0 { // check the 10th byte's LSB [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `ReadBytesExt` [INFO] [stderr] --> src/reader.rs:4:34 [INFO] [stderr] | [INFO] [stderr] 4 | use self::byteorder::{ByteOrder, ReadBytesExt, BigEndian}; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/types.rs:40:24 [INFO] [stderr] | [INFO] [stderr] 40 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `ReadBytesExt` [INFO] [stderr] --> src/reader.rs:4:34 [INFO] [stderr] | [INFO] [stderr] 4 | use self::byteorder::{ByteOrder, ReadBytesExt, BigEndian}; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Read` [INFO] [stderr] --> src/lib.rs:17:19 [INFO] [stderr] | [INFO] [stderr] 17 | use std::io::{Read, Write}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Write` [INFO] [stderr] --> src/lib.rs:17:25 [INFO] [stderr] | [INFO] [stderr] 17 | use std::io::{Read, Write}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/peer.rs:364:24 [INFO] [stderr] | [INFO] [stderr] 364 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/types.rs:40:24 [INFO] [stderr] | [INFO] [stderr] 40 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/types.rs:41:12 [INFO] [stderr] | [INFO] [stderr] 41 | if self.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/types.rs:46:18 [INFO] [stderr] | [INFO] [stderr] 46 | for i in 0..end { buf[i] = self[i] } [INFO] [stderr] | ^^^^^^ help: try replacing the loop by: `buf[..end].clone_from_slice(&self[..end])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/types.rs:81:21 [INFO] [stderr] | [INFO] [stderr] 81 | pub fn as_bytes(&self) -> Vec { self.to_string().as_bytes().to_vec() } [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/types.rs:100:27 [INFO] [stderr] | [INFO] [stderr] 100 | pub fn can_connect_to(&self, t: SocketType) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `types::Frame` [INFO] [stderr] --> src/types.rs:163:5 [INFO] [stderr] | [INFO] [stderr] 163 | / pub fn new() -> Self { [INFO] [stderr] 164 | | Frame { [INFO] [stderr] 165 | | kind: FrameKind::Msg, [INFO] [stderr] 166 | | size: Size::Short(0), [INFO] [stderr] ... | [INFO] [stderr] 169 | | } [INFO] [stderr] 170 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 162 | impl Default for types::Frame { [INFO] [stderr] 163 | fn default() -> Self { [INFO] [stderr] 164 | Self::new() [INFO] [stderr] 165 | } [INFO] [stderr] 166 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:172:5 [INFO] [stderr] | [INFO] [stderr] 172 | pub fn from_str(s: &str) -> Frame { Self::from_bytes(s.as_bytes()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/types.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | pub fn view_body<'l>(&'l self) -> &'l [u8] { &self.body } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:195:20 [INFO] [stderr] | [INFO] [stderr] 195 | pub fn is_last(mut self, is_last: bool) -> Self { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Command` [INFO] [stderr] --> src/types.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | / pub fn new() -> Self { [INFO] [stderr] 236 | | Command { [INFO] [stderr] 237 | | name: vec![], [INFO] [stderr] 238 | | data: vec![], [INFO] [stderr] 239 | | metadata: HashMap::new(), [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 228 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/types.rs:265:5 [INFO] [stderr] | [INFO] [stderr] 265 | / pub fn get_name_str<'l>(&'l self) -> Cow<'l, str> { [INFO] [stderr] 266 | | String::from_utf8_lossy(self.get_name()) [INFO] [stderr] 267 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:337:5 [INFO] [stderr] | [INFO] [stderr] 337 | / pub fn from_str(string: &str) -> Self { [INFO] [stderr] 338 | | Message::new(Frame::new().extend_body(string.as_bytes())) [INFO] [stderr] 339 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:341:22 [INFO] [stderr] | [INFO] [stderr] 341 | pub fn as_string(self) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Greeting` [INFO] [stderr] --> src/types.rs:385:5 [INFO] [stderr] | [INFO] [stderr] 385 | / pub fn new() -> Self { [INFO] [stderr] 386 | | Greeting { [INFO] [stderr] 387 | | signature: [0xFF, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x1, 0x7F], [INFO] [stderr] 388 | | version: (0x3, 0x1), [INFO] [stderr] ... | [INFO] [stderr] 392 | | } [INFO] [stderr] 393 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 376 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/peer.rs:364:24 [INFO] [stderr] | [INFO] [stderr] 364 | fn peek(&mut self, mut buf: &mut [u8]) -> io::Result { [INFO] [stderr] | ----^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Traffic` [INFO] [stderr] --> src/types.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | pub fn new() -> Self { Traffic(vec![]) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 454 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:521:38 [INFO] [stderr] | [INFO] [stderr] 521 | pub fn is_upper(b: u8) -> bool { 'A' as u8 <= b && b <= 'Z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'A' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:521:61 [INFO] [stderr] | [INFO] [stderr] 521 | pub fn is_upper(b: u8) -> bool { 'A' as u8 <= b && b <= 'Z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'Z' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:523:38 [INFO] [stderr] | [INFO] [stderr] 523 | pub fn is_lower(b: u8) -> bool { 'a' as u8 <= b && b <= 'z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:523:61 [INFO] [stderr] | [INFO] [stderr] 523 | pub fn is_lower(b: u8) -> bool { 'a' as u8 <= b && b <= 'z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'z' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/types.rs:546:12 [INFO] [stderr] | [INFO] [stderr] 546 | if bytes.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bytes.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:20:16 [INFO] [stderr] | [INFO] [stderr] 20 | fn execute(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:26:23 [INFO] [stderr] | [INFO] [stderr] 26 | fn null_mechanism(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> src/peer.rs:36:17 [INFO] [stderr] | [INFO] [stderr] 36 | drop(peer); // Close the connection [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &mut peer::Peer [INFO] [stderr] --> src/peer.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | drop(peer); // Close the connection [INFO] [stderr] | ^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | fn validate_cmd(&self, cmd: &Command, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:71:23 [INFO] [stderr] | [INFO] [stderr] 71 | fn send_error_cmd(&self, reason: &str, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:93:20 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn execute(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:101:27 [INFO] [stderr] | [INFO] [stderr] 101 | fn demand_version_3_x(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer.rs:102:38 [INFO] [stderr] | [INFO] [stderr] 102 | try!{ GreetingWriter::write(&peer.local.greeting.clone(), peer) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.local.greeting` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:109:26 [INFO] [stderr] | [INFO] [stderr] 109 | fn negotiate_version(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer.rs:110:24 [INFO] [stderr] | [INFO] [stderr] 110 | let greeting = peer.local.greeting.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.local.greeting` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:147:23 [INFO] [stderr] | [INFO] [stderr] 147 | fn detect_version(&self, peer: &mut Peer) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: defining a method called `as_ref` on this type; consider implementing the `std::convert::AsRef` trait or choosing a less ambiguous name [INFO] [stderr] --> src/peer.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | pub fn as_ref(&self) -> &PeerSource { &self.source } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `buf` [INFO] [stderr] --> src/peer.rs:373:28 [INFO] [stderr] | [INFO] [stderr] 373 | for idx in 0..plen { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 373 | for (idx, ) in buf.iter_mut().enumerate().take(plen) { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/peer.rs:373:28 [INFO] [stderr] | [INFO] [stderr] 373 | for idx in 0..plen { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^ help: try replacing the loop by: `buf[..plen].clone_from_slice(&self.peeked_bytes[..plen])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `buf` [INFO] [stderr] --> src/peer.rs:379:29 [INFO] [stderr] | [INFO] [stderr] 379 | _ => for idx in 0..buf.len() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 379 | _ => for (idx, ) in buf.iter_mut().enumerate() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/peer.rs:379:29 [INFO] [stderr] | [INFO] [stderr] 379 | _ => for idx in 0..buf.len() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `buf.clone_from_slice(&self.peeked_bytes[..buf.len()])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/types.rs:41:12 [INFO] [stderr] | [INFO] [stderr] 41 | if self.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/types.rs:46:18 [INFO] [stderr] | [INFO] [stderr] 46 | for i in 0..end { buf[i] = self[i] } [INFO] [stderr] | ^^^^^^ help: try replacing the loop by: `buf[..end].clone_from_slice(&self[..end])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/types.rs:81:21 [INFO] [stderr] | [INFO] [stderr] 81 | pub fn as_bytes(&self) -> Vec { self.to_string().as_bytes().to_vec() } [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::trivially_copy_pass_by_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/types.rs:100:27 [INFO] [stderr] | [INFO] [stderr] 100 | pub fn can_connect_to(&self, t: SocketType) -> bool { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `types::Frame` [INFO] [stderr] --> src/types.rs:163:5 [INFO] [stderr] | [INFO] [stderr] 163 | / pub fn new() -> Self { [INFO] [stderr] 164 | | Frame { [INFO] [stderr] 165 | | kind: FrameKind::Msg, [INFO] [stderr] 166 | | size: Size::Short(0), [INFO] [stderr] ... | [INFO] [stderr] 169 | | } [INFO] [stderr] 170 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 162 | impl Default for types::Frame { [INFO] [stderr] 163 | fn default() -> Self { [INFO] [stderr] 164 | Self::new() [INFO] [stderr] 165 | } [INFO] [stderr] 166 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:172:5 [INFO] [stderr] | [INFO] [stderr] 172 | pub fn from_str(s: &str) -> Frame { Self::from_bytes(s.as_bytes()) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::should_implement_trait)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/types.rs:184:5 [INFO] [stderr] | [INFO] [stderr] 184 | pub fn view_body<'l>(&'l self) -> &'l [u8] { &self.body } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: methods called `is_*` usually take self by reference or no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:195:20 [INFO] [stderr] | [INFO] [stderr] 195 | pub fn is_last(mut self, is_last: bool) -> Self { [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/reader.rs:141:61 [INFO] [stderr] | [INFO] [stderr] 141 | .map(|b| CommandValidator::is_name_char(*b)) [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 142 | | .fold(true, |acc, elt| acc && elt); [INFO] [stderr] | |__________________________________________________^ help: try: `.all(|elt| elt)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Command` [INFO] [stderr] --> src/types.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | / pub fn new() -> Self { [INFO] [stderr] 236 | | Command { [INFO] [stderr] 237 | | name: vec![], [INFO] [stderr] 238 | | data: vec![], [INFO] [stderr] 239 | | metadata: HashMap::new(), [INFO] [stderr] 240 | | } [INFO] [stderr] 241 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 228 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/types.rs:265:5 [INFO] [stderr] | [INFO] [stderr] 265 | / pub fn get_name_str<'l>(&'l self) -> Cow<'l, str> { [INFO] [stderr] 266 | | String::from_utf8_lossy(self.get_name()) [INFO] [stderr] 267 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: defining a method called `from_str` on this type; consider implementing the `std::str::FromStr` trait or choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:337:5 [INFO] [stderr] | [INFO] [stderr] 337 | / pub fn from_str(string: &str) -> Self { [INFO] [stderr] 338 | | Message::new(Frame::new().extend_body(string.as_bytes())) [INFO] [stderr] 339 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: methods called `as_*` usually take self by reference or self by mutable reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/types.rs:341:22 [INFO] [stderr] | [INFO] [stderr] 341 | pub fn as_string(self) -> String { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Greeting` [INFO] [stderr] --> src/types.rs:385:5 [INFO] [stderr] | [INFO] [stderr] 385 | / pub fn new() -> Self { [INFO] [stderr] 386 | | Greeting { [INFO] [stderr] 387 | | signature: [0xFF, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x1, 0x7F], [INFO] [stderr] 388 | | version: (0x3, 0x1), [INFO] [stderr] ... | [INFO] [stderr] 392 | | } [INFO] [stderr] 393 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 376 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `types::Traffic` [INFO] [stderr] --> src/types.rs:457:5 [INFO] [stderr] | [INFO] [stderr] 457 | pub fn new() -> Self { Traffic(vec![]) } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 454 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:150:12 [INFO] [stderr] | [INFO] [stderr] 150 | Ok(assert_eq!(try!{ writer.flush() }, ())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | Ok(assert_eq!(try!{ writer.write(&g.signature) }, g.signature.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:159:12 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(assert_eq!(try!{ writer.write(&[major, minor]) }, 2)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:163:12 [INFO] [stderr] | [INFO] [stderr] 163 | Ok(assert_eq!(try!{ writer.write(&g.mechanism) }, g.mechanism.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:167:12 [INFO] [stderr] | [INFO] [stderr] 167 | Ok(assert_eq!(try!{ writer.write(&[g.as_server as u8]) }, 1)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:521:38 [INFO] [stderr] | [INFO] [stderr] 521 | pub fn is_upper(b: u8) -> bool { 'A' as u8 <= b && b <= 'Z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'A' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:521:61 [INFO] [stderr] | [INFO] [stderr] 521 | pub fn is_upper(b: u8) -> bool { 'A' as u8 <= b && b <= 'Z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'Z' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:523:38 [INFO] [stderr] | [INFO] [stderr] 523 | pub fn is_lower(b: u8) -> bool { 'a' as u8 <= b && b <= 'z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/types.rs:523:61 [INFO] [stderr] | [INFO] [stderr] 523 | pub fn is_lower(b: u8) -> bool { 'a' as u8 <= b && b <= 'z' as u8 } [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'z' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:171:12 [INFO] [stderr] | [INFO] [stderr] 171 | Ok(assert_eq!(try!{ writer.write(&g.filler) }, g.filler.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: length comparison to one [INFO] [stderr] --> src/types.rs:546:12 [INFO] [stderr] | [INFO] [stderr] 546 | if bytes.len() < 1 { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bytes.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:20:16 [INFO] [stderr] | [INFO] [stderr] 20 | fn execute(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:26:23 [INFO] [stderr] | [INFO] [stderr] 26 | fn null_mechanism(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. [INFO] [stderr] --> src/peer.rs:36:17 [INFO] [stderr] | [INFO] [stderr] 36 | drop(peer); // Close the connection [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::drop_ref)] on by default [INFO] [stderr] note: argument has type &mut peer::Peer [INFO] [stderr] --> src/peer.rs:36:22 [INFO] [stderr] | [INFO] [stderr] 36 | drop(peer); // Close the connection [INFO] [stderr] | ^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#drop_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:60:21 [INFO] [stderr] | [INFO] [stderr] 60 | fn validate_cmd(&self, cmd: &Command, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:71:23 [INFO] [stderr] | [INFO] [stderr] 71 | fn send_error_cmd(&self, reason: &str, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:93:20 [INFO] [stderr] | [INFO] [stderr] 93 | pub fn execute(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:101:27 [INFO] [stderr] | [INFO] [stderr] 101 | fn demand_version_3_x(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer.rs:102:38 [INFO] [stderr] | [INFO] [stderr] 102 | try!{ GreetingWriter::write(&peer.local.greeting.clone(), peer) }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.local.greeting` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::clone_on_copy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:109:26 [INFO] [stderr] | [INFO] [stderr] 109 | fn negotiate_version(&self, peer: &mut Peer) -> io::Result<()> { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/peer.rs:110:24 [INFO] [stderr] | [INFO] [stderr] 110 | let greeting = peer.local.greeting.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.local.greeting` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] error: Could not compile `zmtp`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: this argument is passed by reference, but would be more efficient if passed by value [INFO] [stderr] --> src/peer.rs:147:23 [INFO] [stderr] | [INFO] [stderr] 147 | fn detect_version(&self, peer: &mut Peer) { [INFO] [stderr] | ^^^^^ help: consider passing by value instead: `self` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#trivially_copy_pass_by_ref [INFO] [stderr] [INFO] [stderr] warning: defining a method called `as_ref` on this type; consider implementing the `std::convert::AsRef` trait or choosing a less ambiguous name [INFO] [stderr] --> src/peer.rs:235:5 [INFO] [stderr] | [INFO] [stderr] 235 | pub fn as_ref(&self) -> &PeerSource { &self.source } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#should_implement_trait [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `buf` [INFO] [stderr] --> src/peer.rs:373:28 [INFO] [stderr] | [INFO] [stderr] 373 | for idx in 0..plen { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 373 | for (idx, ) in buf.iter_mut().enumerate().take(plen) { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/peer.rs:373:28 [INFO] [stderr] | [INFO] [stderr] 373 | for idx in 0..plen { buf[idx] = self.peeked_bytes[idx]; } [INFO] [stderr] | ^^^^^^^ help: try replacing the loop by: `buf[..plen].clone_from_slice(&self.peeked_bytes[..plen])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: the loop variable `idx` is used to index `buf` [INFO] [stderr] --> src/peer.rs:379:29 [INFO] [stderr] | [INFO] [stderr] 379 | _ => for idx in 0..buf.len() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 379 | _ => for (idx, ) in buf.iter_mut().enumerate() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/peer.rs:379:29 [INFO] [stderr] | [INFO] [stderr] 379 | _ => for idx in 0..buf.len() { buf[idx] = self.peeked_bytes[idx] } [INFO] [stderr] | ^^^^^^^^^^^^ help: try replacing the loop by: `buf.clone_from_slice(&self.peeked_bytes[..buf.len()])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: this `.fold` can be written more succinctly using another method [INFO] [stderr] --> src/reader.rs:141:61 [INFO] [stderr] | [INFO] [stderr] 141 | .map(|b| CommandValidator::is_name_char(*b)) [INFO] [stderr] | _____________________________________________________________^ [INFO] [stderr] 142 | | .fold(true, |acc, elt| acc && elt); [INFO] [stderr] | |__________________________________________________^ help: try: `.all(|elt| elt)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unnecessary_fold)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_fold [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:150:12 [INFO] [stderr] | [INFO] [stderr] 150 | Ok(assert_eq!(try!{ writer.flush() }, ())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unit_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:154:12 [INFO] [stderr] | [INFO] [stderr] 154 | Ok(assert_eq!(try!{ writer.write(&g.signature) }, g.signature.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:159:12 [INFO] [stderr] | [INFO] [stderr] 159 | Ok(assert_eq!(try!{ writer.write(&[major, minor]) }, 2)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:163:12 [INFO] [stderr] | [INFO] [stderr] 163 | Ok(assert_eq!(try!{ writer.write(&g.mechanism) }, g.mechanism.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:167:12 [INFO] [stderr] | [INFO] [stderr] 167 | Ok(assert_eq!(try!{ writer.write(&[g.as_server as u8]) }, 1)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: passing a unit value to a function [INFO] [stderr] --> src/writer.rs:171:12 [INFO] [stderr] | [INFO] [stderr] 171 | Ok(assert_eq!(try!{ writer.write(&g.filler) }, g.filler.len())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unit_arg [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] warning: the variable `idx` is used as a loop counter. Consider using `for (idx, item) in bytes.enumerate()` or similar iterators [INFO] [stderr] --> src/lib.rs:26:18 [INFO] [stderr] | [INFO] [stderr] 26 | for b in bytes { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::explicit_counter_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#explicit_counter_loop [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:127:35 [INFO] [stderr] | [INFO] [stderr] 127 | .extend_body("hello world!".as_bytes())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"hello world!"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:347:32 [INFO] [stderr] | [INFO] [stderr] 347 | cmd = cmd.name("f*o".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"f*o"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:361:32 [INFO] [stderr] | [INFO] [stderr] 361 | cmd = cmd.name("fo0".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"fo0"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:375:32 [INFO] [stderr] | [INFO] [stderr] 375 | cmd = cmd.name("-fo".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"-fo"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/lib.rs:402:32 [INFO] [stderr] | [INFO] [stderr] 402 | cmd = cmd.name("".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b""` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/lib.rs:424:35 [INFO] [stderr] | [INFO] [stderr] 424 | .map(|cmd| cmd.name(&['a' as u8; 300])) [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'a' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `zmtp`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "94d1e5294fb8efa85414097079604e50c7308afe22184a5fbd7820cf30476cd7"` [INFO] running `"docker" "rm" "-f" "94d1e5294fb8efa85414097079604e50c7308afe22184a5fbd7820cf30476cd7"` [INFO] [stdout] 94d1e5294fb8efa85414097079604e50c7308afe22184a5fbd7820cf30476cd7