[INFO] crate dpt 0.3.1 is already in cache [INFO] extracting crate dpt 0.3.1 into work/ex/clippy-test-run/sources/stable/reg/dpt/0.3.1 [INFO] extracting crate dpt 0.3.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/dpt/0.3.1 [INFO] validating manifest of dpt-0.3.1 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 dpt-0.3.1 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 dpt-0.3.1 [INFO] finished frobbing dpt-0.3.1 [INFO] frobbed toml for dpt-0.3.1 written to work/ex/clippy-test-run/sources/stable/reg/dpt/0.3.1/Cargo.toml [INFO] started frobbing dpt-0.3.1 [INFO] finished frobbing dpt-0.3.1 [INFO] frobbed toml for dpt-0.3.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/dpt/0.3.1/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 dpt-0.3.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-0/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/dpt/0.3.1:/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" "-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] 0d435eabf13af068d9558a31b2a2a8d7e10ed1ca3521f5b2fab8291cad3b84e2 [INFO] running `"docker" "start" "-a" "0d435eabf13af068d9558a31b2a2a8d7e10ed1ca3521f5b2fab8291cad3b84e2"` [INFO] [stderr] Checking tokio-timer-plus v0.1.3 [INFO] [stderr] Checking ethereum-rlp v0.2.3 [INFO] [stderr] Checking ethereum-bigint v0.2.9 [INFO] [stderr] Checking dpt v0.3.1 (/opt/crater/workdir) [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `id2pk` [INFO] [stderr] --> src/proto.rs:1:30 [INFO] [stderr] | [INFO] [stderr] 1 | use util::{keccak256, pk2id, id2pk}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Ipv6Addr` [INFO] [stderr] --> src/message.rs:2:34 [INFO] [stderr] | [INFO] [stderr] 2 | use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::future` [INFO] [stderr] --> src/lib.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | use futures::future; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncWrite` [INFO] [stderr] --> src/lib.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Encoder`, `Framed` [INFO] [stderr] --> src/lib.rs:27:23 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Ipv4Addr`, `Ipv6Addr` [INFO] [stderr] --> src/lib.rs:30:36 [INFO] [stderr] | [INFO] [stderr] 30 | use std::net::{IpAddr, SocketAddr, Ipv4Addr, Ipv6Addr}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `keccak256` [INFO] [stderr] --> src/lib.rs:36:12 [INFO] [stderr] | [INFO] [stderr] 36 | use util::{keccak256, pk2id}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:170:9 [INFO] [stderr] | [INFO] [stderr] 170 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:419:17 [INFO] [stderr] | [INFO] [stderr] 419 | return Ok(AsyncSink::Ready); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(AsyncSink::Ready)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:431:17 [INFO] [stderr] | [INFO] [stderr] 431 | return Ok(AsyncSink::Ready); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(AsyncSink::Ready)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/lib.rs:27:23 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/lib.rs:10:1 [INFO] [stderr] | [INFO] [stderr] 10 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `id2pk` [INFO] [stderr] --> src/proto.rs:1:30 [INFO] [stderr] | [INFO] [stderr] 1 | use util::{keccak256, pk2id, id2pk}; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Ipv6Addr` [INFO] [stderr] --> src/message.rs:2:34 [INFO] [stderr] | [INFO] [stderr] 2 | use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `futures::future` [INFO] [stderr] --> src/lib.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | use futures::future; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncWrite` [INFO] [stderr] --> src/lib.rs:26:27 [INFO] [stderr] | [INFO] [stderr] 26 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Encoder`, `Framed` [INFO] [stderr] --> src/lib.rs:27:23 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^ ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Ipv4Addr`, `Ipv6Addr` [INFO] [stderr] --> src/lib.rs:30:36 [INFO] [stderr] | [INFO] [stderr] 30 | use std::net::{IpAddr, SocketAddr, Ipv4Addr, Ipv6Addr}; [INFO] [stderr] | ^^^^^^^^ ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `keccak256` [INFO] [stderr] --> src/lib.rs:36:12 [INFO] [stderr] | [INFO] [stderr] 36 | use util::{keccak256, pk2id}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:170:9 [INFO] [stderr] | [INFO] [stderr] 170 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:419:17 [INFO] [stderr] | [INFO] [stderr] 419 | return Ok(AsyncSink::Ready); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(AsyncSink::Ready)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/lib.rs:431:17 [INFO] [stderr] | [INFO] [stderr] 431 | return Ok(AsyncSink::Ready); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(AsyncSink::Ready)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'tokio_io::codec::Framed': Moved to tokio-codec [INFO] [stderr] --> src/lib.rs:27:23 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `AsyncRead` [INFO] [stderr] --> src/lib.rs:26:16 [INFO] [stderr] | [INFO] [stderr] 26 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decoder` [INFO] [stderr] --> src/lib.rs:27:40 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `pong_message` [INFO] [stderr] --> src/lib.rs:334:25 [INFO] [stderr] | [INFO] [stderr] 334 | let pong_message: PongMessage = match UntrustedRlp::new(&message.data).as_val() { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider using `_pong_message` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `id2pk` [INFO] [stderr] --> src/util.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn id2pk(id: H512) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `retain_mut` [INFO] [stderr] --> src/lib.rs:40:1 [INFO] [stderr] | [INFO] [stderr] 40 | / fn retain_mut(vec: &mut Vec, mut f: F) [INFO] [stderr] 41 | | where F: FnMut(&mut T) -> bool [INFO] [stderr] 42 | | { [INFO] [stderr] 43 | | let len = vec.len(); [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/proto.rs:54:22 [INFO] [stderr] | [INFO] [stderr] 54 | for i in 0..64 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `ret[..64].clone_from_slice(&buf[32..(64 + 32)])` [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: the loop variable `i` is only used to index `buf`. [INFO] [stderr] --> src/proto.rs:71:18 [INFO] [stderr] | [INFO] [stderr] 71 | for i in 98..buf.len() { [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] 71 | for in buf.iter().skip(98) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/proto.rs:75:42 [INFO] [stderr] | [INFO] [stderr] 75 | Ok(Some((DPTCodecMessage { addr: src.clone(), typ, data }, remote_id, hash))) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*src` [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: the loop variable `i` is only used to index `hash`. [INFO] [stderr] --> src/proto.rs:102:18 [INFO] [stderr] | [INFO] [stderr] 102 | for i in 0..32 { [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] 102 | for in hash.iter().take(32) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:15:38 [INFO] [stderr] | [INFO] [stderr] 15 | let address: Vec = match self.address.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.address` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:31:22 [INFO] [stderr] | [INFO] [stderr] 31 | for i in 0..4 { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `raw[..4].clone_from_slice(&address_raw[..4])` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:37:22 [INFO] [stderr] | [INFO] [stderr] 37 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `raw[..16].clone_from_slice(&address_raw[..16])` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:63:38 [INFO] [stderr] | [INFO] [stderr] 63 | let address: Vec = match self.address.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.address` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `raw[..16].clone_from_slice(&address_raw[..16])` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/util.rs:22:14 [INFO] [stderr] | [INFO] [stderr] 22 | for i in 0..64 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `sp[1..(64 + 1)].clone_from_slice(&s[..64])` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:144:22 [INFO] [stderr] | [INFO] [stderr] 144 | address: public_address.clone(), udp_port: addr.port(), tcp_port [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*public_address` [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: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/lib.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | / fn poll(&mut self) -> Poll, Self::Error> { [INFO] [stderr] 273 | | if !self.bootstrapped { [INFO] [stderr] 274 | | for node in self.connected.clone() { [INFO] [stderr] 275 | | self.send_ping(node.udp_addr(), node)?; [INFO] [stderr] ... | [INFO] [stderr] 389 | | } [INFO] [stderr] 390 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:305:24 [INFO] [stderr] | [INFO] [stderr] 305 | if self.incoming.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.incoming.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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:324:29 [INFO] [stderr] | [INFO] [stderr] 324 | let v = self.connected.iter().find(|v| v.id == remote_id).map(|v| v.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.connected.iter().find(|v| v.id == remote_id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:345:29 [INFO] [stderr] | [INFO] [stderr] 345 | let v = self.connected.iter().find(|v| v.id == remote_id).map(|v| v.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.connected.iter().find(|v| v.id == remote_id).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:386:16 [INFO] [stderr] | [INFO] [stderr] 386 | if self.incoming.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.incoming.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: length comparison to zero [INFO] [stderr] --> src/lib.rs:408:20 [INFO] [stderr] | [INFO] [stderr] 408 | if self.pingponged.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.pingponged.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: unused import: `AsyncRead` [INFO] [stderr] --> src/lib.rs:26:16 [INFO] [stderr] | [INFO] [stderr] 26 | use tokio_io::{AsyncRead, AsyncWrite}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decoder` [INFO] [stderr] --> src/lib.rs:27:40 [INFO] [stderr] | [INFO] [stderr] 27 | use tokio_io::codec::{Framed, Encoder, Decoder}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `pong_message` [INFO] [stderr] --> src/lib.rs:334:25 [INFO] [stderr] | [INFO] [stderr] 334 | let pong_message: PongMessage = match UntrustedRlp::new(&message.data).as_val() { [INFO] [stderr] | ^^^^^^^^^^^^ help: consider using `_pong_message` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `id2pk` [INFO] [stderr] --> src/util.rs:18:1 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn id2pk(id: H512) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `retain_mut` [INFO] [stderr] --> src/lib.rs:40:1 [INFO] [stderr] | [INFO] [stderr] 40 | / fn retain_mut(vec: &mut Vec, mut f: F) [INFO] [stderr] 41 | | where F: FnMut(&mut T) -> bool [INFO] [stderr] 42 | | { [INFO] [stderr] 43 | | let len = vec.len(); [INFO] [stderr] ... | [INFO] [stderr] 58 | | } [INFO] [stderr] 59 | | } [INFO] [stderr] | |_^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/proto.rs:54:22 [INFO] [stderr] | [INFO] [stderr] 54 | for i in 0..64 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `ret[..64].clone_from_slice(&buf[32..(64 + 32)])` [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: the loop variable `i` is only used to index `buf`. [INFO] [stderr] --> src/proto.rs:71:18 [INFO] [stderr] | [INFO] [stderr] 71 | for i in 98..buf.len() { [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] 71 | for in buf.iter().skip(98) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/proto.rs:75:42 [INFO] [stderr] | [INFO] [stderr] 75 | Ok(Some((DPTCodecMessage { addr: src.clone(), typ, data }, remote_id, hash))) [INFO] [stderr] | ^^^^^^^^^^^ help: try dereferencing it: `*src` [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: the loop variable `i` is only used to index `hash`. [INFO] [stderr] --> src/proto.rs:102:18 [INFO] [stderr] | [INFO] [stderr] 102 | for i in 0..32 { [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] 102 | for in hash.iter().take(32) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:15:38 [INFO] [stderr] | [INFO] [stderr] 15 | let address: Vec = match self.address.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.address` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:31:22 [INFO] [stderr] | [INFO] [stderr] 31 | for i in 0..4 { [INFO] [stderr] | ^^^^ help: try replacing the loop by: `raw[..4].clone_from_slice(&address_raw[..4])` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:37:22 [INFO] [stderr] | [INFO] [stderr] 37 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `raw[..16].clone_from_slice(&address_raw[..16])` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/message.rs:63:38 [INFO] [stderr] | [INFO] [stderr] 63 | let address: Vec = match self.address.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.address` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/message.rs:81:22 [INFO] [stderr] | [INFO] [stderr] 81 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `raw[..16].clone_from_slice(&address_raw[..16])` [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: it looks like you're manually copying between slices [INFO] [stderr] --> src/util.rs:22:14 [INFO] [stderr] | [INFO] [stderr] 22 | for i in 0..64 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `sp[1..(64 + 1)].clone_from_slice(&s[..64])` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/lib.rs:144:22 [INFO] [stderr] | [INFO] [stderr] 144 | address: public_address.clone(), udp_port: addr.port(), tcp_port [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*public_address` [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: the function has a cyclomatic complexity of 26 [INFO] [stderr] --> src/lib.rs:272:5 [INFO] [stderr] | [INFO] [stderr] 272 | / fn poll(&mut self) -> Poll, Self::Error> { [INFO] [stderr] 273 | | if !self.bootstrapped { [INFO] [stderr] 274 | | for node in self.connected.clone() { [INFO] [stderr] 275 | | self.send_ping(node.udp_addr(), node)?; [INFO] [stderr] ... | [INFO] [stderr] 389 | | } [INFO] [stderr] 390 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:305:24 [INFO] [stderr] | [INFO] [stderr] 305 | if self.incoming.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.incoming.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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:324:29 [INFO] [stderr] | [INFO] [stderr] 324 | let v = self.connected.iter().find(|v| v.id == remote_id).map(|v| v.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.connected.iter().find(|v| v.id == remote_id).cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/lib.rs:345:29 [INFO] [stderr] | [INFO] [stderr] 345 | let v = self.connected.iter().find(|v| v.id == remote_id).map(|v| v.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `self.connected.iter().find(|v| v.id == remote_id).cloned()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:386:16 [INFO] [stderr] | [INFO] [stderr] 386 | if self.incoming.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.incoming.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: length comparison to zero [INFO] [stderr] --> src/lib.rs:408:20 [INFO] [stderr] | [INFO] [stderr] 408 | if self.pingponged.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.pingponged.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: unused `#[macro_use]` import [INFO] [stderr] --> examples/local_connect.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> examples/local_connect.rs:15:1 [INFO] [stderr] | [INFO] [stderr] 15 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `bigint::H512` [INFO] [stderr] --> examples/local_connect.rs:19:5 [INFO] [stderr] | [INFO] [stderr] 19 | use bigint::H512; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Timeout` [INFO] [stderr] --> examples/local_connect.rs:20:33 [INFO] [stderr] | [INFO] [stderr] 20 | use tokio_core::reactor::{Core, Timeout}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `TimeoutStream` [INFO] [stderr] --> examples/local_connect.rs:21:26 [INFO] [stderr] | [INFO] [stderr] 21 | use tokio_timer::{wheel, TimeoutStream, TimeoutError}; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PublicKey` [INFO] [stderr] --> examples/local_connect.rs:22:17 [INFO] [stderr] | [INFO] [stderr] 22 | use secp256k1::{PublicKey, SecretKey}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::str::FromStr` [INFO] [stderr] --> examples/local_connect.rs:26:5 [INFO] [stderr] | [INFO] [stderr] 26 | use std::str::FromStr; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Instant` [INFO] [stderr] --> examples/local_connect.rs:29:17 [INFO] [stderr] | [INFO] [stderr] 29 | use std::time::{Instant, Duration}; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::io` [INFO] [stderr] --> examples/local_connect.rs:30:5 [INFO] [stderr] | [INFO] [stderr] 30 | use std::io; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/local_connect.rs:91:26 [INFO] [stderr] | [INFO] [stderr] 91 | .boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/local_connect.rs:99:28 [INFO] [stderr] | [INFO] [stderr] 99 | }).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/local_connect.rs:104:64 [INFO] [stderr] | [INFO] [stderr] 104 | Loop::Break(TimeoutError::Inner(err))).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/local_connect.rs:109:43 [INFO] [stderr] | [INFO] [stderr] 109 | Loop::Break(err)).boxed() [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> examples/local_connect.rs:93:54 [INFO] [stderr] | [INFO] [stderr] 93 | Err((TimeoutError::TimedOut(client), s)) => { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> examples/local_connect.rs:101:48 [INFO] [stderr] | [INFO] [stderr] 101 | Err((TimeoutError::Inner(err), s)) => { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `s` [INFO] [stderr] --> examples/local_connect.rs:106:27 [INFO] [stderr] | [INFO] [stderr] 106 | Err((err, s)) => { [INFO] [stderr] | ^ help: consider using `_s` instead [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> examples/local_connect.rs:70:5 [INFO] [stderr] | [INFO] [stderr] 70 | env_logger::init(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: constant `sec` should have an upper case name such as `SEC` [INFO] [stderr] --> examples/local_connect.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | const sec: u64 = 5; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(non_upper_case_globals)] on by default [INFO] [stderr] [INFO] [stderr] warning: constant `dur` should have an upper case name such as `DUR` [INFO] [stderr] --> examples/local_connect.rs:82:5 [INFO] [stderr] | [INFO] [stderr] 82 | const dur: u32 = 500; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 16.28s [INFO] running `"docker" "inspect" "0d435eabf13af068d9558a31b2a2a8d7e10ed1ca3521f5b2fab8291cad3b84e2"` [INFO] running `"docker" "rm" "-f" "0d435eabf13af068d9558a31b2a2a8d7e10ed1ca3521f5b2fab8291cad3b84e2"` [INFO] [stdout] 0d435eabf13af068d9558a31b2a2a8d7e10ed1ca3521f5b2fab8291cad3b84e2