[INFO] crate grin_servers 0.4.2 is already in cache [INFO] extracting crate grin_servers 0.4.2 into work/ex/clippy-test-run/sources/stable/reg/grin_servers/0.4.2 [INFO] extracting crate grin_servers 0.4.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/grin_servers/0.4.2 [INFO] validating manifest of grin_servers-0.4.2 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 grin_servers-0.4.2 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 grin_servers-0.4.2 [INFO] finished frobbing grin_servers-0.4.2 [INFO] frobbed toml for grin_servers-0.4.2 written to work/ex/clippy-test-run/sources/stable/reg/grin_servers/0.4.2/Cargo.toml [INFO] started frobbing grin_servers-0.4.2 [INFO] finished frobbing grin_servers-0.4.2 [INFO] frobbed toml for grin_servers-0.4.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/grin_servers/0.4.2/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 grin_servers-0.4.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-1/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/grin_servers/0.4.2:/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] 97ae8531677efd67bed7f3ac11fa6ef7552ed9944a6027c83fb8f4064dc0c891 [INFO] running `"docker" "start" "-a" "97ae8531677efd67bed7f3ac11fa6ef7552ed9944a6027c83fb8f4064dc0c891"` [INFO] [stderr] Compiling grin_secp256k1zkp v0.7.4 [INFO] [stderr] Checking arrayvec v0.4.10 [INFO] [stderr] Compiling memchr v1.0.2 [INFO] [stderr] Compiling log v0.4.6 [INFO] [stderr] Checking want v0.0.6 [INFO] [stderr] Checking prettytable-rs v0.7.0 [INFO] [stderr] Checking rustls v0.13.1 [INFO] [stderr] Checking flate2 v1.0.6 [INFO] [stderr] Checking num-rational v0.2.1 [INFO] [stderr] Checking h2 v0.1.16 [INFO] [stderr] Checking env_logger v0.5.13 [INFO] [stderr] Checking jsonrpc-core v8.0.1 [INFO] [stderr] Compiling nom v3.2.1 [INFO] [stderr] Checking crossbeam-epoch v0.7.1 [INFO] [stderr] Checking blake2-rfc v0.2.18 [INFO] [stderr] Checking zip v0.4.2 [INFO] [stderr] Checking log4rs v0.8.1 [INFO] [stderr] Checking num v0.2.0 [INFO] [stderr] Checking crossbeam-deque v0.6.3 [INFO] [stderr] Checking tokio-reactor v0.1.8 [INFO] [stderr] Compiling cexpr v0.2.3 [INFO] [stderr] Checking crossbeam v0.6.0 [INFO] [stderr] Checking grin_util v0.4.2 [INFO] [stderr] Checking tokio-threadpool v0.1.11 [INFO] [stderr] Compiling bindgen v0.37.4 [INFO] [stderr] Checking tokio-udp v0.1.3 [INFO] [stderr] Checking tokio-uds v0.2.5 [INFO] [stderr] Checking tokio-tcp v0.1.3 [INFO] [stderr] Checking tokio-fs v0.1.5 [INFO] [stderr] Checking tokio v0.1.15 [INFO] [stderr] Checking grin_keychain v0.4.2 [INFO] [stderr] Checking tokio-rustls v0.7.2 [INFO] [stderr] Checking tokio-core v0.1.17 [INFO] [stderr] Checking hyper v0.12.23 [INFO] [stderr] Compiling croaring-sys v0.3.8 [INFO] [stderr] Checking tokio-retry v0.1.1 [INFO] [stderr] Checking hyper-rustls v0.14.0 [INFO] [stderr] Checking hyper-staticfile v0.3.0 [INFO] [stderr] Checking croaring v0.3.8 [INFO] [stderr] Checking grin_core v0.4.2 [INFO] [stderr] Checking grin_store v0.4.2 [INFO] [stderr] Checking grin_p2p v0.4.2 [INFO] [stderr] Checking grin_pool v0.4.2 [INFO] [stderr] Checking grin_chain v0.4.2 [INFO] [stderr] Checking grin_api v0.4.2 [INFO] [stderr] Checking grin_wallet v0.4.2 [INFO] [stderr] Checking grin_servers v0.4.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/common/adapters.rs:304:5 [INFO] [stderr] | [INFO] [stderr] 304 | kernel_index: kernel_index, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `kernel_index` [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/common/stats.rs:186:4 [INFO] [stderr] | [INFO] [stderr] 186 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [INFO] [stderr] | [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/grin/server.rs:422:4 [INFO] [stderr] | [INFO] [stderr] 422 | stratum_stats: stratum_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stratum_stats` [INFO] [stderr] | [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/grin/server.rs:423:4 [INFO] [stderr] | [INFO] [stderr] 423 | peer_stats: peer_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `peer_stats` [INFO] [stderr] | [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/grin/server.rs:424:4 [INFO] [stderr] | [INFO] [stderr] 424 | diff_stats: diff_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `diff_stats` [INFO] [stderr] | [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/grin/sync/body_sync.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | highest_height: highest_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `highest_height` [INFO] [stderr] | [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/grin/sync/header_sync.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | highest_height: highest_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `highest_height` [INFO] [stderr] | [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/mining/stratumserver.rs:161:4 [INFO] [stderr] | [INFO] [stderr] 161 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [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/mining/stratumserver.rs:164:4 [INFO] [stderr] | [INFO] [stderr] 164 | stream: stream, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `stream` [INFO] [stderr] | [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/common/adapters.rs:304:5 [INFO] [stderr] | [INFO] [stderr] 304 | kernel_index: kernel_index, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `kernel_index` [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/common/stats.rs:186:4 [INFO] [stderr] | [INFO] [stderr] 186 | addr: addr, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `addr` [INFO] [stderr] | [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/grin/server.rs:422:4 [INFO] [stderr] | [INFO] [stderr] 422 | stratum_stats: stratum_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `stratum_stats` [INFO] [stderr] | [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/grin/server.rs:423:4 [INFO] [stderr] | [INFO] [stderr] 423 | peer_stats: peer_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `peer_stats` [INFO] [stderr] | [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/grin/server.rs:424:4 [INFO] [stderr] | [INFO] [stderr] 424 | diff_stats: diff_stats, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `diff_stats` [INFO] [stderr] | [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/grin/sync/body_sync.rs:63:5 [INFO] [stderr] | [INFO] [stderr] 63 | highest_height: highest_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `highest_height` [INFO] [stderr] | [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/grin/sync/header_sync.rs:81:5 [INFO] [stderr] | [INFO] [stderr] 81 | highest_height: highest_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `highest_height` [INFO] [stderr] | [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/mining/stratumserver.rs:161:4 [INFO] [stderr] | [INFO] [stderr] 161 | id: id, [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [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/mining/stratumserver.rs:164:4 [INFO] [stderr] | [INFO] [stderr] 164 | stream: stream, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `stream` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/common/adapters.rs:142:6 [INFO] [stderr] | [INFO] [stderr] 142 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/common/adapters.rs:187:12 [INFO] [stderr] | [INFO] [stderr] 187 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 188 | | if self.sync_state.status() == SyncStatus::NoSync { [INFO] [stderr] 189 | | debug!("adapter: block invalid after hydration, requesting full block"); [INFO] [stderr] 190 | | self.request_block(&cb.header, &addr); [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 187 | } else if self.sync_state.status() == SyncStatus::NoSync { [INFO] [stderr] 188 | debug!("adapter: block invalid after hydration, requesting full block"); [INFO] [stderr] 189 | self.request_block(&cb.header, &addr); [INFO] [stderr] 190 | true [INFO] [stderr] 191 | } else { [INFO] [stderr] 192 | debug!("block invalid after hydration, ignoring it, cause still syncing"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/common/adapters.rs:594:3 [INFO] [stderr] | [INFO] [stderr] 594 | opts [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/common/adapters.rs:589:14 [INFO] [stderr] | [INFO] [stderr] 589 | let opts = if self.sync_state.is_syncing() { [INFO] [stderr] | ____________________^ [INFO] [stderr] 590 | | chain::Options::SYNC [INFO] [stderr] 591 | | } else { [INFO] [stderr] 592 | | chain::Options::NONE [INFO] [stderr] 593 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/grin/seed.rs:33:19 [INFO] [stderr] | [INFO] [stderr] 33 | const DNS_SEEDS: &'static [&'static str] = &[ [INFO] [stderr] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/grin/seed.rs:33:29 [INFO] [stderr] | [INFO] [stderr] 33 | const DNS_SEEDS: &'static [&'static str] = &[ [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/grin/sync/body_sync.rs:131:3 [INFO] [stderr] | [INFO] [stderr] 131 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/grin/sync/body_sync.rs:167:3 [INFO] [stderr] | [INFO] [stderr] 167 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/mining/mine_block.rs:85:2 [INFO] [stderr] | [INFO] [stderr] 85 | return result.unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `result.unwrap()` [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/mining/mine_block.rs:189:4 [INFO] [stderr] | [INFO] [stderr] 189 | return burn_reward(block_fees); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `burn_reward(block_fees)` [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/mining/mine_block.rs:205:4 [INFO] [stderr] | [INFO] [stderr] 205 | return Ok((output, kernel, block_fees)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok((output, kernel, block_fees))` [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/mining/stratumserver.rs:176:5 [INFO] [stderr] | [INFO] [stderr] 176 | return Some(line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(line)` [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/mining/stratumserver.rs:180:5 [INFO] [stderr] | [INFO] [stderr] 180 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [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/mining/stratumserver.rs:188:5 [INFO] [stderr] | [INFO] [stderr] 188 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [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/mining/stratumserver.rs:280:3 [INFO] [stderr] | [INFO] [stderr] 280 | return job_template; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `job_template` [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/mining/stratumserver.rs:398:3 [INFO] [stderr] | [INFO] [stderr] 398 | return Ok(response); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(response)` [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/mining/stratumserver.rs:410:3 [INFO] [stderr] | [INFO] [stderr] 410 | return Ok(response); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(response)` [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/mining/stratumserver.rs:415:3 [INFO] [stderr] | [INFO] [stderr] 415 | return Ok(serde_json::to_value("ok".to_string()).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(serde_json::to_value("ok".to_string()).unwrap())` [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/mining/stratumserver.rs:425:3 [INFO] [stderr] | [INFO] [stderr] 425 | return Ok(serde_json::to_value("ok".to_string()).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(serde_json::to_value("ok".to_string()).unwrap())` [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/mining/stratumserver.rs:563:3 [INFO] [stderr] | [INFO] [stderr] 563 | return Ok(( [INFO] [stderr] | _________^ [INFO] [stderr] 564 | | serde_json::to_value(submit_response).unwrap(), [INFO] [stderr] 565 | | share_is_block, [INFO] [stderr] 566 | | )); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 563 | Ok(( [INFO] [stderr] 564 | serde_json::to_value(submit_response).unwrap(), [INFO] [stderr] 565 | share_is_block, [INFO] [stderr] 566 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/common/adapters.rs:142:6 [INFO] [stderr] | [INFO] [stderr] 142 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/common/adapters.rs:187:12 [INFO] [stderr] | [INFO] [stderr] 187 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 188 | | if self.sync_state.status() == SyncStatus::NoSync { [INFO] [stderr] 189 | | debug!("adapter: block invalid after hydration, requesting full block"); [INFO] [stderr] 190 | | self.request_block(&cb.header, &addr); [INFO] [stderr] ... | [INFO] [stderr] 195 | | } [INFO] [stderr] 196 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 187 | } else if self.sync_state.status() == SyncStatus::NoSync { [INFO] [stderr] 188 | debug!("adapter: block invalid after hydration, requesting full block"); [INFO] [stderr] 189 | self.request_block(&cb.header, &addr); [INFO] [stderr] 190 | true [INFO] [stderr] 191 | } else { [INFO] [stderr] 192 | debug!("block invalid after hydration, ignoring it, cause still syncing"); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/common/adapters.rs:594:3 [INFO] [stderr] | [INFO] [stderr] 594 | opts [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/common/adapters.rs:589:14 [INFO] [stderr] | [INFO] [stderr] 589 | let opts = if self.sync_state.is_syncing() { [INFO] [stderr] | ____________________^ [INFO] [stderr] 590 | | chain::Options::SYNC [INFO] [stderr] 591 | | } else { [INFO] [stderr] 592 | | chain::Options::NONE [INFO] [stderr] 593 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/grin/seed.rs:33:19 [INFO] [stderr] | [INFO] [stderr] 33 | const DNS_SEEDS: &'static [&'static str] = &[ [INFO] [stderr] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [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: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/grin/seed.rs:33:29 [INFO] [stderr] | [INFO] [stderr] 33 | const DNS_SEEDS: &'static [&'static str] = &[ [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [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: unneeded return statement [INFO] [stderr] --> src/grin/sync/body_sync.rs:131:3 [INFO] [stderr] | [INFO] [stderr] 131 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/grin/sync/body_sync.rs:167:3 [INFO] [stderr] | [INFO] [stderr] 167 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [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/mining/mine_block.rs:85:2 [INFO] [stderr] | [INFO] [stderr] 85 | return result.unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `result.unwrap()` [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/mining/mine_block.rs:189:4 [INFO] [stderr] | [INFO] [stderr] 189 | return burn_reward(block_fees); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `burn_reward(block_fees)` [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/mining/mine_block.rs:205:4 [INFO] [stderr] | [INFO] [stderr] 205 | return Ok((output, kernel, block_fees)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok((output, kernel, block_fees))` [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/mining/stratumserver.rs:176:5 [INFO] [stderr] | [INFO] [stderr] 176 | return Some(line); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Some(line)` [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/mining/stratumserver.rs:180:5 [INFO] [stderr] | [INFO] [stderr] 180 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [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/mining/stratumserver.rs:188:5 [INFO] [stderr] | [INFO] [stderr] 188 | return None; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `None` [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/mining/stratumserver.rs:280:3 [INFO] [stderr] | [INFO] [stderr] 280 | return job_template; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `job_template` [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/mining/stratumserver.rs:398:3 [INFO] [stderr] | [INFO] [stderr] 398 | return Ok(response); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(response)` [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/mining/stratumserver.rs:410:3 [INFO] [stderr] | [INFO] [stderr] 410 | return Ok(response); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(response)` [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/mining/stratumserver.rs:415:3 [INFO] [stderr] | [INFO] [stderr] 415 | return Ok(serde_json::to_value("ok".to_string()).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(serde_json::to_value("ok".to_string()).unwrap())` [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/mining/stratumserver.rs:425:3 [INFO] [stderr] | [INFO] [stderr] 425 | return Ok(serde_json::to_value("ok".to_string()).unwrap()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(serde_json::to_value("ok".to_string()).unwrap())` [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/mining/stratumserver.rs:563:3 [INFO] [stderr] | [INFO] [stderr] 563 | return Ok(( [INFO] [stderr] | _________^ [INFO] [stderr] 564 | | serde_json::to_value(submit_response).unwrap(), [INFO] [stderr] 565 | | share_is_block, [INFO] [stderr] 566 | | )); [INFO] [stderr] | |___________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 563 | Ok(( [INFO] [stderr] 564 | serde_json::to_value(submit_response).unwrap(), [INFO] [stderr] 565 | share_is_block, [INFO] [stderr] 566 | )) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/common/adapters.rs:215:3 [INFO] [stderr] | [INFO] [stderr] 215 | if let &Err(ref e) = &res { [INFO] [stderr] | _________^ [INFO] [stderr] 216 | | debug!("Block header {} refused by chain: {:?}", bhash, e.kind()); [INFO] [stderr] 217 | | if e.is_bad_data() { [INFO] [stderr] 218 | | return false; [INFO] [stderr] ... | [INFO] [stderr] 223 | | } [INFO] [stderr] 224 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 215 | if let Err(ref e) = res { [INFO] [stderr] | ^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/common/adapters.rs:217:4 [INFO] [stderr] | [INFO] [stderr] 217 | if e.is_bad_data() { [INFO] [stderr] | _____________^ [INFO] [stderr] 218 | | return false; [INFO] [stderr] 219 | | } else { [INFO] [stderr] 220 | | // we got an error when trying to process the block header [INFO] [stderr] 221 | | // but nothing serious enough to need to ban the peer upstream [INFO] [stderr] 222 | | return true; [INFO] [stderr] 223 | | } [INFO] [stderr] | |_____________^ help: you can reduce it to: `return !e.is_bad_data()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/common/adapters.rs:241:6 [INFO] [stderr] | [INFO] [stderr] 241 | if bhs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bhs.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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/common/adapters.rs:247:3 [INFO] [stderr] | [INFO] [stderr] 247 | if let &Err(ref e) = &res { [INFO] [stderr] | _________^ [INFO] [stderr] 248 | | debug!("Block headers refused by chain: {:?}", e); [INFO] [stderr] 249 | | [INFO] [stderr] 250 | | if e.is_bad_data() { [INFO] [stderr] 251 | | return false; [INFO] [stderr] 252 | | } [INFO] [stderr] 253 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 247 | if let Err(ref e) = res { [INFO] [stderr] | ^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/common/adapters.rs:270:28 [INFO] [stderr] | [INFO] [stderr] 270 | for h in (hh + 1)..(hh + (p2p::MAX_BLOCK_HEADERS as u64)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(p2p::MAX_BLOCK_HEADERS)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/common/adapters.rs:301:37 [INFO] [stderr] | [INFO] [stderr] 301 | match self.chain().txhashset_read(h.clone()) { [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `h` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/common/adapters.rs:426:21 [INFO] [stderr] | [INFO] [stderr] 426 | .saturating_sub(global::cut_through_horizon() as u64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `common::adapters::PoolToNetAdapter` [INFO] [stderr] --> src/common/adapters.rs:719:2 [INFO] [stderr] | [INFO] [stderr] 719 | pub fn new() -> PoolToNetAdapter { [INFO] [stderr] | _____^ [INFO] [stderr] 720 | | PoolToNetAdapter { [INFO] [stderr] 721 | | peers: OneTime::new(), [INFO] [stderr] 722 | | } [INFO] [stderr] 723 | | } [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] 717 | impl Default for common::adapters::PoolToNetAdapter { [INFO] [stderr] 718 | fn default() -> Self { [INFO] [stderr] 719 | Self::new() [INFO] [stderr] 720 | } [INFO] [stderr] 721 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `common::adapters::PoolToChainAdapter` [INFO] [stderr] --> src/common/adapters.rs:748:2 [INFO] [stderr] | [INFO] [stderr] 748 | pub fn new() -> PoolToChainAdapter { [INFO] [stderr] | _____^ [INFO] [stderr] 749 | | PoolToChainAdapter { [INFO] [stderr] 750 | | chain: OneTime::new(), [INFO] [stderr] 751 | | } [INFO] [stderr] 752 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 746 | impl Default for common::adapters::PoolToChainAdapter { [INFO] [stderr] 747 | fn default() -> Self { [INFO] [stderr] 748 | Self::new() [INFO] [stderr] 749 | } [INFO] [stderr] 750 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:771:40 [INFO] [stderr] | [INFO] [stderr] 771 | .map_err(|_| pool::PoolError::Other(format!("failed to get head_header"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get head_header".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:777:40 [INFO] [stderr] | [INFO] [stderr] 777 | .map_err(|_| pool::PoolError::Other(format!("failed to get block_header"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get block_header".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:783:40 [INFO] [stderr] | [INFO] [stderr] 783 | .map_err(|_| pool::PoolError::Other(format!("failed to get block_sums"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get block_sums".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:789:40 [INFO] [stderr] | [INFO] [stderr] 789 | .map_err(|_| pool::PoolError::Other(format!("failed to validate tx"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to validate tx".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/common/stats.rs:172:3 [INFO] [stderr] | [INFO] [stderr] 172 | let mut state = "Disconnected"; [INFO] [stderr] | _________^ [INFO] [stderr] 173 | | if peer.is_connected() { [INFO] [stderr] 174 | | state = "Connected"; [INFO] [stderr] 175 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let state = if peer.is_connected() { "Connected" } else { "Disconnected" };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/common/stats.rs:187:13 [INFO] [stderr] | [INFO] [stderr] 187 | version: peer.info.version.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.info.version` [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: you should consider adding a `Default` implementation for `common::types::SyncState` [INFO] [stderr] --> src/common/types.rs:281:2 [INFO] [stderr] | [INFO] [stderr] 281 | pub fn new() -> SyncState { [INFO] [stderr] | _____^ [INFO] [stderr] 282 | | SyncState { [INFO] [stderr] 283 | | current: RwLock::new(SyncStatus::Initial), [INFO] [stderr] 284 | | sync_error: Arc::new(RwLock::new(None)), [INFO] [stderr] 285 | | } [INFO] [stderr] 286 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 279 | impl Default for common::types::SyncState { [INFO] [stderr] 280 | fn default() -> Self { [INFO] [stderr] 281 | Self::new() [INFO] [stderr] 282 | } [INFO] [stderr] 283 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/dandelion_monitor.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | if stem_txs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stem_txs.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/grin/dandelion_monitor.rs:156:5 [INFO] [stderr] | [INFO] [stderr] 156 | if stem_txs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stem_txs.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/grin/dandelion_monitor.rs:187:5 [INFO] [stderr] | [INFO] [stderr] 187 | if fresh_entries.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!fresh_entries.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/grin/dandelion_monitor.rs:227:5 [INFO] [stderr] | [INFO] [stderr] 227 | if expired_entries.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!expired_entries.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/grin/seed.rs:201:5 [INFO] [stderr] | [INFO] [stderr] 201 | if defuncts.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!defuncts.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/grin/seed.rs:267:5 [INFO] [stderr] | [INFO] [stderr] 267 | if peer_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `peer_addrs.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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/grin/server.rs:301:44 [INFO] [stderr] | [INFO] [stderr] 301 | stratum_server.run_loop(stratum_stats, edge_bits as u32, proof_size, sync_state); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(edge_bits)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/grin/sync/body_sync.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | !self.chain.get_block(x).is_ok() && !self.chain.is_orphan(x) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.chain.get_block(x).is_err() && !self.chain.is_orphan(x)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/body_sync.rs:104:6 [INFO] [stderr] | [INFO] [stderr] 104 | if hashes_to_get.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!hashes_to_get.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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/grin/sync/header_sync.rs:96:40 [INFO] [stderr] | [INFO] [stderr] 96 | header_head.height >= prev_height + (p2p::MAX_BLOCK_HEADERS as u64) - 4; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(p2p::MAX_BLOCK_HEADERS)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/header_sync.rs:156:6 [INFO] [stderr] | [INFO] [stderr] 156 | if self.history_locator.len() > 0 && tip.hash() != self.chain.header_head()?.hash() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.history_locator.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:168:20 [INFO] [stderr] | [INFO] [stderr] 168 | let last_loc = locator.last().unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*locator.last().unwrap()` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/grin/sync/header_sync.rs:188:26 [INFO] [stderr] | [INFO] [stderr] 188 | fn close_enough(locator: &Vec<(u64, Hash)>, height: u64) -> Option<(u64, Hash)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[(u64, Hash)]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/header_sync.rs:189:5 [INFO] [stderr] | [INFO] [stderr] 189 | if locator.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `locator.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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/grin/sync/header_sync.rs:194:10 [INFO] [stderr] | [INFO] [stderr] 194 | return locator.last().map(|l| l.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `locator.last().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:194:33 [INFO] [stderr] | [INFO] [stderr] 194 | return locator.last().map(|l| l.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:203:17 [INFO] [stderr] | [INFO] [stderr] 203 | return Some(hh[0].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `hh[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:205:17 [INFO] [stderr] | [INFO] [stderr] 205 | return Some(hh[1].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `hh[1]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:262:52 [INFO] [stderr] | [INFO] [stderr] 262 | let history_locator: Vec<(u64, Hash)> = vec![(0, zh.clone())]; [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:269:32 [INFO] [stderr] | [INFO] [stderr] 269 | assert_eq!(locator, vec![(0, zh.clone())]); [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:273:11 [INFO] [stderr] | [INFO] [stderr] 273 | (1000, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:274:10 [INFO] [stderr] | [INFO] [stderr] 274 | (500, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:275:10 [INFO] [stderr] | [INFO] [stderr] 275 | (250, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:276:10 [INFO] [stderr] | [INFO] [stderr] 276 | (125, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:291:11 [INFO] [stderr] | [INFO] [stderr] 291 | (2043, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:292:11 [INFO] [stderr] | [INFO] [stderr] 292 | (2041, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:293:11 [INFO] [stderr] | [INFO] [stderr] 293 | (2037, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:294:11 [INFO] [stderr] | [INFO] [stderr] 294 | (2029, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:295:11 [INFO] [stderr] | [INFO] [stderr] 295 | (2013, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:296:11 [INFO] [stderr] | [INFO] [stderr] 296 | (1981, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:297:11 [INFO] [stderr] | [INFO] [stderr] 297 | (1917, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:298:11 [INFO] [stderr] | [INFO] [stderr] 298 | (1789, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:299:11 [INFO] [stderr] | [INFO] [stderr] 299 | (1532, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:300:11 [INFO] [stderr] | [INFO] [stderr] 300 | (1021, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:301:8 [INFO] [stderr] | [INFO] [stderr] 301 | (0, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:312:16 [INFO] [stderr] | [INFO] [stderr] 312 | vec![(2043, zh.clone()), (1532, zh.clone()), (0, zh.clone()),] [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:312:36 [INFO] [stderr] | [INFO] [stderr] 312 | vec![(2043, zh.clone()), (1532, zh.clone()), (0, zh.clone()),] [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:312:53 [INFO] [stderr] | [INFO] [stderr] 312 | vec![(2043, zh.clone()), (1532, zh.clone()), (0, zh.clone()),] [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:320:11 [INFO] [stderr] | [INFO] [stderr] 320 | (4087, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:321:11 [INFO] [stderr] | [INFO] [stderr] 321 | (4085, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:322:11 [INFO] [stderr] | [INFO] [stderr] 322 | (4081, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:323:11 [INFO] [stderr] | [INFO] [stderr] 323 | (4073, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:324:11 [INFO] [stderr] | [INFO] [stderr] 324 | (4057, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:325:11 [INFO] [stderr] | [INFO] [stderr] 325 | (4025, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:326:11 [INFO] [stderr] | [INFO] [stderr] 326 | (3961, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:327:11 [INFO] [stderr] | [INFO] [stderr] 327 | (3833, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:328:11 [INFO] [stderr] | [INFO] [stderr] 328 | (3576, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:329:11 [INFO] [stderr] | [INFO] [stderr] 329 | (3065, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:330:11 [INFO] [stderr] | [INFO] [stderr] 330 | (1532, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:331:8 [INFO] [stderr] | [INFO] [stderr] 331 | (0, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:343:12 [INFO] [stderr] | [INFO] [stderr] 343 | (4087, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:344:12 [INFO] [stderr] | [INFO] [stderr] 344 | (3576, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:345:12 [INFO] [stderr] | [INFO] [stderr] 345 | (3065, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:346:9 [INFO] [stderr] | [INFO] [stderr] 346 | (0, zh.clone()), [INFO] [stderr] | ^^^^^^^^^^ help: try removing the `clone` call: `zh` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/grin/sync/state_sync.rs:159:19 [INFO] [stderr] | [INFO] [stderr] 159 | let threshold = global::state_sync_threshold() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::state_sync_threshold())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/syncer.rs:85:9 [INFO] [stderr] | [INFO] [stderr] 85 | || (wp.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `wp.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/syncer.rs:213:19 [INFO] [stderr] | [INFO] [stderr] 213 | if peer_diff > local_diff.clone() + threshold.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `local_diff` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/syncer.rs:213:40 [INFO] [stderr] | [INFO] [stderr] 213 | if peer_diff > local_diff.clone() + threshold.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `threshold` [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: manual implementation of an assign operation [INFO] [stderr] --> src/mining/stratumserver.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | worker_id = worker_id + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `worker_id += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/mining/stratumserver.rs:197:25 [INFO] [stderr] | [INFO] [stderr] 197 | if !message.ends_with("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `num` is only used to index `workers_l`. [INFO] [stderr] --> src/mining/stratumserver.rs:286:14 [INFO] [stderr] | [INFO] [stderr] 286 | for num in 0..workers_l.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] 286 | for in &mut workers_l { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/mining/stratumserver.rs:287:4 [INFO] [stderr] | [INFO] [stderr] 287 | match workers_l[num].read_message() { [INFO] [stderr] | _____________^ [INFO] [stderr] 288 | | Some(the_message) => { [INFO] [stderr] 289 | | // Decompose the request from the JSONRpc wrapper [INFO] [stderr] 290 | | let request: RpcRequest = match serde_json::from_str(&the_message) { [INFO] [stderr] ... | [INFO] [stderr] 381 | | None => {} // No message for us from this worker [INFO] [stderr] 382 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 287 | if let Some(the_message) = workers_l[num].read_message() { [INFO] [stderr] 288 | // Decompose the request from the JSONRpc wrapper [INFO] [stderr] 289 | let request: RpcRequest = match serde_json::from_str(&the_message) { [INFO] [stderr] 290 | Ok(request) => request, [INFO] [stderr] 291 | Err(e) => { [INFO] [stderr] 292 | // not a valid JSON RpcRequest - disconnect the worker [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/mining/stratumserver.rs:522:7 [INFO] [stderr] | [INFO] [stderr] 522 | if !pow::verify_size(&b.header).is_ok() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `pow::verify_size(&b.header).is_err()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/mining/stratumserver.rs:557:3 [INFO] [stderr] | [INFO] [stderr] 557 | let submit_response; [INFO] [stderr] | _________^ [INFO] [stderr] 558 | | if share_is_block { [INFO] [stderr] 559 | | submit_response = format!("blockfound - {}", b.hash().to_hex()); [INFO] [stderr] 560 | | } else { [INFO] [stderr] 561 | | submit_response = "ok".to_string(); [INFO] [stderr] 562 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let submit_response = if share_is_block { $ crate :: fmt :: format ( format_args ! ( $ ( $ arg ) * ) ) } else { "ok".to_string() };` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: attempt to mutate range bound within loop; note that the range of the loop is unchanged [INFO] [stderr] --> src/mining/stratumserver.rs:592:5 [INFO] [stderr] | [INFO] [stderr] 592 | start = num + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mut_range_bound)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_range_bound [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/mining/stratumserver.rs:575:8 [INFO] [stderr] | [INFO] [stderr] 575 | if workers_l[num].error == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `workers_l[num].error` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: the loop variable `num` is only used to index `workers_l`. [INFO] [stderr] --> src/mining/stratumserver.rs:625:14 [INFO] [stderr] | [INFO] [stderr] 625 | for num in 0..workers_l.len() { [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] 625 | for in &mut workers_l { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/mining/stratumserver.rs:705:5 [INFO] [stderr] | [INFO] [stderr] 705 | let mut wallet_listener_url: Option = None; [INFO] [stderr] | _________________^ [INFO] [stderr] 706 | | if !self.config.burn_reward { [INFO] [stderr] 707 | | wallet_listener_url = Some(self.config.wallet_listener_url.clone()); [INFO] [stderr] 708 | | } [INFO] [stderr] | |_________________^ help: it is more idiomatic to write: `let wallet_listener_url = if !self.config.burn_reward { Some(self.config.wallet_listener_url.clone()) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mining/stratumserver.rs:731:41 [INFO] [stderr] | [INFO] [stderr] 731 | deadline = Utc::now().timestamp() + attempt_time_per_block as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(attempt_time_per_block)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mining/test_miner.rs:83:43 [INFO] [stderr] | [INFO] [stderr] 83 | let deadline = Utc::now().timestamp() + attempt_time_per_block as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(attempt_time_per_block)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/webwallet/server.rs:31:2 [INFO] [stderr] | [INFO] [stderr] 31 | Static(StaticFuture), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 31 | Static(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/common/adapters.rs:215:3 [INFO] [stderr] | [INFO] [stderr] 215 | if let &Err(ref e) = &res { [INFO] [stderr] | _________^ [INFO] [stderr] 216 | | debug!("Block header {} refused by chain: {:?}", bhash, e.kind()); [INFO] [stderr] 217 | | if e.is_bad_data() { [INFO] [stderr] 218 | | return false; [INFO] [stderr] ... | [INFO] [stderr] 223 | | } [INFO] [stderr] 224 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 215 | if let Err(ref e) = res { [INFO] [stderr] | ^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/common/adapters.rs:217:4 [INFO] [stderr] | [INFO] [stderr] 217 | if e.is_bad_data() { [INFO] [stderr] | _____________^ [INFO] [stderr] 218 | | return false; [INFO] [stderr] 219 | | } else { [INFO] [stderr] 220 | | // we got an error when trying to process the block header [INFO] [stderr] 221 | | // but nothing serious enough to need to ban the peer upstream [INFO] [stderr] 222 | | return true; [INFO] [stderr] 223 | | } [INFO] [stderr] | |_____________^ help: you can reduce it to: `return !e.is_bad_data()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/common/adapters.rs:241:6 [INFO] [stderr] | [INFO] [stderr] 241 | if bhs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bhs.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 don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/common/adapters.rs:247:3 [INFO] [stderr] | [INFO] [stderr] 247 | if let &Err(ref e) = &res { [INFO] [stderr] | _________^ [INFO] [stderr] 248 | | debug!("Block headers refused by chain: {:?}", e); [INFO] [stderr] 249 | | [INFO] [stderr] 250 | | if e.is_bad_data() { [INFO] [stderr] 251 | | return false; [INFO] [stderr] 252 | | } [INFO] [stderr] 253 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 247 | if let Err(ref e) = res { [INFO] [stderr] | ^^^^^^^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/common/adapters.rs:270:28 [INFO] [stderr] | [INFO] [stderr] 270 | for h in (hh + 1)..(hh + (p2p::MAX_BLOCK_HEADERS as u64)) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(p2p::MAX_BLOCK_HEADERS)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/common/adapters.rs:301:37 [INFO] [stderr] | [INFO] [stderr] 301 | match self.chain().txhashset_read(h.clone()) { [INFO] [stderr] | ^^^^^^^^^ help: try removing the `clone` call: `h` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/common/adapters.rs:426:21 [INFO] [stderr] | [INFO] [stderr] 426 | .saturating_sub(global::cut_through_horizon() as u64); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `common::adapters::PoolToNetAdapter` [INFO] [stderr] --> src/common/adapters.rs:719:2 [INFO] [stderr] | [INFO] [stderr] 719 | pub fn new() -> PoolToNetAdapter { [INFO] [stderr] | _____^ [INFO] [stderr] 720 | | PoolToNetAdapter { [INFO] [stderr] 721 | | peers: OneTime::new(), [INFO] [stderr] 722 | | } [INFO] [stderr] 723 | | } [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] 717 | impl Default for common::adapters::PoolToNetAdapter { [INFO] [stderr] 718 | fn default() -> Self { [INFO] [stderr] 719 | Self::new() [INFO] [stderr] 720 | } [INFO] [stderr] 721 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you should consider adding a `Default` implementation for `common::adapters::PoolToChainAdapter` [INFO] [stderr] --> src/common/adapters.rs:748:2 [INFO] [stderr] | [INFO] [stderr] 748 | pub fn new() -> PoolToChainAdapter { [INFO] [stderr] | _____^ [INFO] [stderr] 749 | | PoolToChainAdapter { [INFO] [stderr] 750 | | chain: OneTime::new(), [INFO] [stderr] 751 | | } [INFO] [stderr] 752 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 746 | impl Default for common::adapters::PoolToChainAdapter { [INFO] [stderr] 747 | fn default() -> Self { [INFO] [stderr] 748 | Self::new() [INFO] [stderr] 749 | } [INFO] [stderr] 750 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:771:40 [INFO] [stderr] | [INFO] [stderr] 771 | .map_err(|_| pool::PoolError::Other(format!("failed to get head_header"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get head_header".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:777:40 [INFO] [stderr] | [INFO] [stderr] 777 | .map_err(|_| pool::PoolError::Other(format!("failed to get block_header"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get block_header".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:783:40 [INFO] [stderr] | [INFO] [stderr] 783 | .map_err(|_| pool::PoolError::Other(format!("failed to get block_sums"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to get block_sums".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> src/common/adapters.rs:789:40 [INFO] [stderr] | [INFO] [stderr] 789 | .map_err(|_| pool::PoolError::Other(format!("failed to validate tx"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"failed to validate tx".to_string()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/common/stats.rs:172:3 [INFO] [stderr] | [INFO] [stderr] 172 | let mut state = "Disconnected"; [INFO] [stderr] | _________^ [INFO] [stderr] 173 | | if peer.is_connected() { [INFO] [stderr] 174 | | state = "Connected"; [INFO] [stderr] 175 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let state = if peer.is_connected() { "Connected" } else { "Disconnected" };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/common/stats.rs:187:13 [INFO] [stderr] | [INFO] [stderr] 187 | version: peer.info.version.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `peer.info.version` [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: you should consider adding a `Default` implementation for `common::types::SyncState` [INFO] [stderr] --> src/common/types.rs:281:2 [INFO] [stderr] | [INFO] [stderr] 281 | pub fn new() -> SyncState { [INFO] [stderr] | _____^ [INFO] [stderr] 282 | | SyncState { [INFO] [stderr] 283 | | current: RwLock::new(SyncStatus::Initial), [INFO] [stderr] 284 | | sync_error: Arc::new(RwLock::new(None)), [INFO] [stderr] 285 | | } [INFO] [stderr] 286 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [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] 279 | impl Default for common::types::SyncState { [INFO] [stderr] 280 | fn default() -> Self { [INFO] [stderr] 281 | Self::new() [INFO] [stderr] 282 | } [INFO] [stderr] 283 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/dandelion_monitor.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | if stem_txs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stem_txs.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/grin/dandelion_monitor.rs:156:5 [INFO] [stderr] | [INFO] [stderr] 156 | if stem_txs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!stem_txs.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/grin/dandelion_monitor.rs:187:5 [INFO] [stderr] | [INFO] [stderr] 187 | if fresh_entries.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!fresh_entries.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/grin/dandelion_monitor.rs:227:5 [INFO] [stderr] | [INFO] [stderr] 227 | if expired_entries.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!expired_entries.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/grin/seed.rs:201:5 [INFO] [stderr] | [INFO] [stderr] 201 | if defuncts.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!defuncts.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/grin/seed.rs:267:5 [INFO] [stderr] | [INFO] [stderr] 267 | if peer_addrs.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `peer_addrs.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: casting u8 to u32 may become silently lossy if types change [INFO] [stderr] --> src/grin/server.rs:301:44 [INFO] [stderr] | [INFO] [stderr] 301 | stratum_server.run_loop(stratum_stats, edge_bits as u32, proof_size, sync_state); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try: `u32::from(edge_bits)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/grin/sync/body_sync.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | !self.chain.get_block(x).is_ok() && !self.chain.is_orphan(x) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.chain.get_block(x).is_err() && !self.chain.is_orphan(x)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::nonminimal_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/body_sync.rs:104:6 [INFO] [stderr] | [INFO] [stderr] 104 | if hashes_to_get.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!hashes_to_get.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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/grin/sync/header_sync.rs:96:40 [INFO] [stderr] | [INFO] [stderr] 96 | header_head.height >= prev_height + (p2p::MAX_BLOCK_HEADERS as u64) - 4; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(p2p::MAX_BLOCK_HEADERS)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/header_sync.rs:156:6 [INFO] [stderr] | [INFO] [stderr] 156 | if self.history_locator.len() > 0 && tip.hash() != self.chain.header_head()?.hash() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.history_locator.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:168:20 [INFO] [stderr] | [INFO] [stderr] 168 | let last_loc = locator.last().unwrap().clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*locator.last().unwrap()` [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: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> src/grin/sync/header_sync.rs:188:26 [INFO] [stderr] | [INFO] [stderr] 188 | fn close_enough(locator: &Vec<(u64, Hash)>, height: u64) -> Option<(u64, Hash)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: change this to: `&[(u64, Hash)]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/header_sync.rs:189:5 [INFO] [stderr] | [INFO] [stderr] 189 | if locator.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `locator.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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/grin/sync/header_sync.rs:194:10 [INFO] [stderr] | [INFO] [stderr] 194 | return locator.last().map(|l| l.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `locator.last().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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:194:33 [INFO] [stderr] | [INFO] [stderr] 194 | return locator.last().map(|l| l.clone()); [INFO] [stderr] | ^^^^^^^^^ help: try dereferencing it: `*l` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:203:17 [INFO] [stderr] | [INFO] [stderr] 203 | return Some(hh[0].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `hh[0]` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/header_sync.rs:205:17 [INFO] [stderr] | [INFO] [stderr] 205 | return Some(hh[1].clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try removing the `clone` call: `hh[1]` [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: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> src/grin/sync/state_sync.rs:159:19 [INFO] [stderr] | [INFO] [stderr] 159 | let threshold = global::state_sync_threshold() as u64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::state_sync_threshold())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/grin/sync/syncer.rs:85:9 [INFO] [stderr] | [INFO] [stderr] 85 | || (wp.len() == 0 [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `wp.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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/syncer.rs:213:19 [INFO] [stderr] | [INFO] [stderr] 213 | if peer_diff > local_diff.clone() + threshold.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `local_diff` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/grin/sync/syncer.rs:213:40 [INFO] [stderr] | [INFO] [stderr] 213 | if peer_diff > local_diff.clone() + threshold.clone() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `threshold` [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: manual implementation of an assign operation [INFO] [stderr] --> src/mining/stratumserver.rs:134:5 [INFO] [stderr] | [INFO] [stderr] 134 | worker_id = worker_id + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `worker_id += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/mining/stratumserver.rs:197:25 [INFO] [stderr] | [INFO] [stderr] 197 | if !message.ends_with("\n") { [INFO] [stderr] | ^^^^ help: try using a char instead: `'\n'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the loop variable `num` is only used to index `workers_l`. [INFO] [stderr] --> src/mining/stratumserver.rs:286:14 [INFO] [stderr] | [INFO] [stderr] 286 | for num in 0..workers_l.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] 286 | for in &mut workers_l { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/mining/stratumserver.rs:287:4 [INFO] [stderr] | [INFO] [stderr] 287 | match workers_l[num].read_message() { [INFO] [stderr] | _____________^ [INFO] [stderr] 288 | | Some(the_message) => { [INFO] [stderr] 289 | | // Decompose the request from the JSONRpc wrapper [INFO] [stderr] 290 | | let request: RpcRequest = match serde_json::from_str(&the_message) { [INFO] [stderr] ... | [INFO] [stderr] 381 | | None => {} // No message for us from this worker [INFO] [stderr] 382 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 287 | if let Some(the_message) = workers_l[num].read_message() { [INFO] [stderr] 288 | // Decompose the request from the JSONRpc wrapper [INFO] [stderr] 289 | let request: RpcRequest = match serde_json::from_str(&the_message) { [INFO] [stderr] 290 | Ok(request) => request, [INFO] [stderr] 291 | Err(e) => { [INFO] [stderr] 292 | // not a valid JSON RpcRequest - disconnect the worker [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this boolean expression can be simplified [INFO] [stderr] --> src/mining/stratumserver.rs:522:7 [INFO] [stderr] | [INFO] [stderr] 522 | if !pow::verify_size(&b.header).is_ok() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `pow::verify_size(&b.header).is_err()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/mining/stratumserver.rs:557:3 [INFO] [stderr] | [INFO] [stderr] 557 | let submit_response; [INFO] [stderr] | _________^ [INFO] [stderr] 558 | | if share_is_block { [INFO] [stderr] 559 | | submit_response = format!("blockfound - {}", b.hash().to_hex()); [INFO] [stderr] 560 | | } else { [INFO] [stderr] 561 | | submit_response = "ok".to_string(); [INFO] [stderr] 562 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let submit_response = if share_is_block { $ crate :: fmt :: format ( format_args ! ( $ ( $ arg ) * ) ) } else { "ok".to_string() };` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: attempt to mutate range bound within loop; note that the range of the loop is unchanged [INFO] [stderr] --> src/mining/stratumserver.rs:592:5 [INFO] [stderr] | [INFO] [stderr] 592 | start = num + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::mut_range_bound)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#mut_range_bound [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/mining/stratumserver.rs:575:8 [INFO] [stderr] | [INFO] [stderr] 575 | if workers_l[num].error == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `workers_l[num].error` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: the loop variable `num` is only used to index `workers_l`. [INFO] [stderr] --> src/mining/stratumserver.rs:625:14 [INFO] [stderr] | [INFO] [stderr] 625 | for num in 0..workers_l.len() { [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] 625 | for in &mut workers_l { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/mining/stratumserver.rs:705:5 [INFO] [stderr] | [INFO] [stderr] 705 | let mut wallet_listener_url: Option = None; [INFO] [stderr] | _________________^ [INFO] [stderr] 706 | | if !self.config.burn_reward { [INFO] [stderr] 707 | | wallet_listener_url = Some(self.config.wallet_listener_url.clone()); [INFO] [stderr] 708 | | } [INFO] [stderr] | |_________________^ help: it is more idiomatic to write: `let wallet_listener_url = if !self.config.burn_reward { Some(self.config.wallet_listener_url.clone()) } else { None };` [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mining/stratumserver.rs:731:41 [INFO] [stderr] | [INFO] [stderr] 731 | deadline = Utc::now().timestamp() + attempt_time_per_block as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(attempt_time_per_block)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to i64 may become silently lossy if types change [INFO] [stderr] --> src/mining/test_miner.rs:83:43 [INFO] [stderr] | [INFO] [stderr] 83 | let deadline = Utc::now().timestamp() + attempt_time_per_block as i64; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `i64::from(attempt_time_per_block)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/webwallet/server.rs:31:2 [INFO] [stderr] | [INFO] [stderr] 31 | Static(StaticFuture), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] | [INFO] [stderr] 31 | Static(Box>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> tests/framework/mod.rs:168:4 [INFO] [stderr] | [INFO] [stderr] 168 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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] --> tests/framework/mod.rs:174:4 [INFO] [stderr] | [INFO] [stderr] 174 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [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] --> tests/framework/mod.rs:176:4 [INFO] [stderr] | [INFO] [stderr] 176 | wallet_config: wallet_config, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `wallet_config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | seeding_type: seeding_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `seeding_type` [INFO] [stderr] | [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] --> tests/framework/mod.rs:451:4 [INFO] [stderr] | [INFO] [stderr] 451 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:168:4 [INFO] [stderr] | [INFO] [stderr] 168 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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] --> tests/framework/mod.rs:174:4 [INFO] [stderr] | [INFO] [stderr] 174 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [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] --> tests/framework/mod.rs:176:4 [INFO] [stderr] | [INFO] [stderr] 176 | wallet_config: wallet_config, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `wallet_config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | seeding_type: seeding_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `seeding_type` [INFO] [stderr] | [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] --> tests/framework/mod.rs:451:4 [INFO] [stderr] | [INFO] [stderr] 451 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:168:4 [INFO] [stderr] | [INFO] [stderr] 168 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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] --> tests/framework/mod.rs:174:4 [INFO] [stderr] | [INFO] [stderr] 174 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [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] --> tests/framework/mod.rs:176:4 [INFO] [stderr] | [INFO] [stderr] 176 | wallet_config: wallet_config, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `wallet_config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | seeding_type: seeding_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `seeding_type` [INFO] [stderr] | [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] --> tests/framework/mod.rs:451:4 [INFO] [stderr] | [INFO] [stderr] 451 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:168:4 [INFO] [stderr] | [INFO] [stderr] 168 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> tests/framework/mod.rs:168:4 [INFO] [stderr] | [INFO] [stderr] 168 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [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] --> tests/framework/mod.rs:174:4 [INFO] [stderr] | [INFO] [stderr] 174 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [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] --> tests/framework/mod.rs:176:4 [INFO] [stderr] | [INFO] [stderr] 176 | wallet_config: wallet_config, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `wallet_config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | seeding_type: seeding_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `seeding_type` [INFO] [stderr] | [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] --> tests/framework/mod.rs:451:4 [INFO] [stderr] | [INFO] [stderr] 451 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [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] --> tests/framework/mod.rs:174:4 [INFO] [stderr] | [INFO] [stderr] 174 | working_dir: working_dir, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `working_dir` [INFO] [stderr] | [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] --> tests/framework/mod.rs:176:4 [INFO] [stderr] | [INFO] [stderr] 176 | wallet_config: wallet_config, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `wallet_config` [INFO] [stderr] | [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] --> tests/framework/mod.rs:198:5 [INFO] [stderr] | [INFO] [stderr] 198 | seeding_type: seeding_type, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `seeding_type` [INFO] [stderr] | [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] --> tests/framework/mod.rs:451:4 [INFO] [stderr] | [INFO] [stderr] 451 | config: config, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `config` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] error[E0463]: can't find crate for `config` [INFO] [stderr] --> tests/wallet.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | extern crate grin_config as config; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0463`. [INFO] [stderr] error: Could not compile `grin_servers`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error[E0463]: can't find crate for `config` [INFO] [stderr] --> tests/api.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | extern crate grin_config as config; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0463`. [INFO] [stderr] error: Could not compile `grin_servers`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> tests/framework/mod.rs:301:3 [INFO] [stderr] | [INFO] [stderr] 301 | wallet_seed [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> tests/framework/mod.rs:300:4 [INFO] [stderr] | [INFO] [stderr] 300 | wallet::WalletSeed::from_file(config, "").expect("Failed to read wallet seed file."); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> tests/simulnet.rs:543:2 [INFO] [stderr] | [INFO] [stderr] 543 | return s; [INFO] [stderr] | ^^^^^^^^^ help: remove `return` as shown: `s` [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] error[E0463]: can't find crate for `config` [INFO] [stderr] --> tests/dandelion.rs:20:1 [INFO] [stderr] | [INFO] [stderr] 20 | extern crate grin_config as config; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0463`. [INFO] [stderr] error: Could not compile `grin_servers`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unused import: `WalletCommAdapter` [INFO] [stderr] --> tests/framework/mod.rs:33:66 [INFO] [stderr] | [INFO] [stderr] 33 | use wallet::{HTTPNodeClient, HTTPWalletCommAdapter, LMDBBackend, WalletCommAdapter, WalletConfig}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `WalletCommAdapter` [INFO] [stderr] --> tests/simulnet.rs:43:53 [INFO] [stderr] | [INFO] [stderr] 43 | use wallet::{HTTPNodeClient, HTTPWalletCommAdapter, WalletCommAdapter}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `wallet1_handle` [INFO] [stderr] --> tests/simulnet.rs:913:6 [INFO] [stderr] | [INFO] [stderr] 913 | let wallet1_handle = thread::spawn(move || { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_wallet1_handle` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `wallet2_handle` [INFO] [stderr] --> tests/simulnet.rs:921:6 [INFO] [stderr] | [INFO] [stderr] 921 | let wallet2_handle = thread::spawn(move || { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider using `_wallet2_handle` instead [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_wallet_seed` [INFO] [stderr] --> tests/framework/mod.rs:296:2 [INFO] [stderr] | [INFO] [stderr] 296 | pub fn get_wallet_seed(config: &WalletConfig) -> wallet::WalletSeed { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_wallet_info` [INFO] [stderr] --> tests/framework/mod.rs:304:2 [INFO] [stderr] | [INFO] [stderr] 304 | pub fn get_wallet_info( [INFO] [stderr] | _____^ [INFO] [stderr] 305 | | config: &WalletConfig, [INFO] [stderr] 306 | | wallet_seed: &wallet::WalletSeed, [INFO] [stderr] 307 | | ) -> wallet::WalletInfo { [INFO] [stderr] ... | [INFO] [stderr] 317 | | wallet::libwallet::internal::updater::retrieve_info(&mut wallet, &parent_id, 1).unwrap() [INFO] [stderr] 318 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `send_amount_to` [INFO] [stderr] --> tests/framework/mod.rs:320:2 [INFO] [stderr] | [INFO] [stderr] 320 | pub fn send_amount_to( [INFO] [stderr] | _____^ [INFO] [stderr] 321 | | config: &WalletConfig, [INFO] [stderr] 322 | | amount: &str, [INFO] [stderr] 323 | | minimum_confirmations: u64, [INFO] [stderr] ... | [INFO] [stderr] 367 | | }).unwrap_or_else(|e| panic!("Error creating wallet: {:?} Config: {:?}", e, config)); [INFO] [stderr] 368 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_peer` [INFO] [stderr] --> tests/framework/mod.rs:379:2 [INFO] [stderr] | [INFO] [stderr] 379 | pub fn add_peer(&mut self, addr: String) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `connect_all_peers` [INFO] [stderr] --> tests/framework/mod.rs:558:2 [INFO] [stderr] | [INFO] [stderr] 558 | pub fn connect_all_peers(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `stratum_config` [INFO] [stderr] --> tests/framework/mod.rs:604:1 [INFO] [stderr] | [INFO] [stderr] 604 | pub fn stratum_config() -> servers::common::types::StratumServerConfig { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `long_fork_test_case_6` [INFO] [stderr] --> tests/simulnet.rs:833:1 [INFO] [stderr] | [INFO] [stderr] 833 | fn long_fork_test_case_6(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> tests/framework/mod.rs:184:3 [INFO] [stderr] | [INFO] [stderr] 184 | let mut seeds = Vec::new(); [INFO] [stderr] | _________^ [INFO] [stderr] 185 | | [INFO] [stderr] 186 | | if self.config.seed_addr.len() > 0 { [INFO] [stderr] 187 | | seeding_type = p2p::Seeding::List; [INFO] [stderr] 188 | | seeds = vec![self.config.seed_addr.to_string()]; [INFO] [stderr] 189 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let seeds = if self.config.seed_addr.len() > 0 { ..; < [ _ ] > :: into_vec ( box [ $ ( $ x ) , * ] ) } else { Vec::new() };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> tests/framework/mod.rs:209:3 [INFO] [stderr] | [INFO] [stderr] 209 | let mut wallet_url = None; [INFO] [stderr] | _________^ [INFO] [stderr] 210 | | [INFO] [stderr] 211 | | if self.config.start_wallet == true { [INFO] [stderr] 212 | | self.run_wallet(duration_in_seconds + 5); [INFO] [stderr] ... | [INFO] [stderr] 218 | | )); [INFO] [stderr] 219 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 209 | let wallet_url = if self.config.start_wallet == true { ..; Some(format!( [INFO] [stderr] 210 | "http://{}:{}", [INFO] [stderr] 211 | self.config.base_addr, self.config.wallet_port [INFO] [stderr] 212 | )) } else { None }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> tests/framework/mod.rs:186:6 [INFO] [stderr] | [INFO] [stderr] 186 | if self.config.seed_addr.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.config.seed_addr.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: equality checks against true are unnecessary [INFO] [stderr] --> tests/framework/mod.rs:211:6 [INFO] [stderr] | [INFO] [stderr] 211 | if self.config.start_wallet == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.config.start_wallet` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> tests/framework/mod.rs:221:6 [INFO] [stderr] | [INFO] [stderr] 221 | if self.config.start_miner == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.config.start_miner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> tests/framework/mod.rs:249:14 [INFO] [stderr] | [INFO] [stderr] 249 | let seed = format!("{}", self.config.name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.config.name.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [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: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> tests/framework/mod.rs:347:3 [INFO] [stderr] | [INFO] [stderr] 347 | let _ = wallet::controller::owner_single_use(Arc::new(Mutex::new(wallet)), |api| { [INFO] [stderr] | _________^ [INFO] [stderr] 348 | | let (mut slate, lock_fn) = api.initiate_tx( [INFO] [stderr] 349 | | None, [INFO] [stderr] 350 | | amount, [INFO] [stderr] ... | [INFO] [stderr] 366 | | Ok(()) [INFO] [stderr] 367 | | }).unwrap_or_else(|e| panic!("Error creating wallet: {:?} Config: {:?}", e, config)); [INFO] [stderr] | |_____________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> tests/framework/mod.rs:469:24 [INFO] [stderr] | [INFO] [stderr] 469 | server_config.name = String::from(format!( [INFO] [stderr] | ______________________________^ [INFO] [stderr] 470 | | "{}/{}-{}", [INFO] [stderr] 471 | | self.config.base_name, self.config.base_name, server_config.p2p_server_port [INFO] [stderr] 472 | | )); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 469 | server_config.name = format!( [INFO] [stderr] 470 | "{}/{}-{}", [INFO] [stderr] 471 | self.config.base_name, self.config.base_name, server_config.p2p_server_port [INFO] [stderr] 472 | ); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> tests/framework/mod.rs:475:43 [INFO] [stderr] | [INFO] [stderr] 475 | server_config.coinbase_wallet_address = String::from(format!( [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 476 | | "http://{}:{}", [INFO] [stderr] 477 | | server_config.base_addr, server_config.wallet_port [INFO] [stderr] 478 | | )); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 475 | server_config.coinbase_wallet_address = format!( [INFO] [stderr] 476 | "http://{}:{}", [INFO] [stderr] 477 | server_config.base_addr, server_config.wallet_port [INFO] [stderr] 478 | ); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> tests/framework/mod.rs:524:20 [INFO] [stderr] | [INFO] [stderr] 524 | let is_seeding = self.is_seeding.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.is_seeding` [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 `n` is only used to index `servers`. [INFO] [stderr] --> tests/simulnet.rs:234:12 [INFO] [stderr] | [INFO] [stderr] 234 | for n in 0..5 { [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] 234 | for in servers.iter().take(5) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `n` is only used to index `servers`. [INFO] [stderr] --> tests/simulnet.rs:255:11 [INFO] [stderr] | [INFO] [stderr] 255 | for n in 0..5 { [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] 255 | for in servers.iter().take(5) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:469:29 [INFO] [stderr] | [INFO] [stderr] 469 | while s[0].head().height < global::cut_through_horizon() as u64 + 10 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:482:22 [INFO] [stderr] | [INFO] [stderr] 482 | s0_header.height - global::cut_through_horizon() as u64, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `s`. [INFO] [stderr] --> tests/simulnet.rs:510:12 [INFO] [stderr] | [INFO] [stderr] 510 | for i in 1..6 { [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] 510 | for in s.iter().take(6).skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:577:29 [INFO] [stderr] | [INFO] [stderr] 577 | fn long_fork_test_case_1(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:581:24 [INFO] [stderr] | [INFO] [stderr] 581 | long_fork_test_mining(global::state_sync_threshold() as u64 - 7, 0, &s[0]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::state_sync_threshold())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:584:24 [INFO] [stderr] | [INFO] [stderr] 584 | long_fork_test_mining(global::state_sync_threshold() as u64 - 1, 2, &s[2]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::state_sync_threshold())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:624:29 [INFO] [stderr] | [INFO] [stderr] 624 | fn long_fork_test_case_2(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:631:24 [INFO] [stderr] | [INFO] [stderr] 631 | long_fork_test_mining(global::cut_through_horizon() as u64 - 1, 3, &s[3]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:673:29 [INFO] [stderr] | [INFO] [stderr] 673 | fn long_fork_test_case_3(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:677:24 [INFO] [stderr] | [INFO] [stderr] 677 | long_fork_test_mining(global::cut_through_horizon() as u64 + 10, 4, &s[4]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:739:29 [INFO] [stderr] | [INFO] [stderr] 739 | fn long_fork_test_case_4(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:745:24 [INFO] [stderr] | [INFO] [stderr] 745 | long_fork_test_mining(global::cut_through_horizon() as u64 + 20, 5, &s[5]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:786:29 [INFO] [stderr] | [INFO] [stderr] 786 | fn long_fork_test_case_5(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:792:24 [INFO] [stderr] | [INFO] [stderr] 792 | long_fork_test_mining(global::cut_through_horizon() as u64 - 10, 5, &s[5]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&Vec<_>` instead of `&[_]` involves one more reference and cannot be used with non-Vec-based slices. [INFO] [stderr] --> tests/simulnet.rs:833:29 [INFO] [stderr] | [INFO] [stderr] 833 | fn long_fork_test_case_6(s: &Vec) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: change this to: `&[servers::Server]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: casting u32 to u64 may become silently lossy if types change [INFO] [stderr] --> tests/simulnet.rs:839:24 [INFO] [stderr] | [INFO] [stderr] 839 | long_fork_test_mining(global::cut_through_horizon() as u64 + 1, 5, &s[5]); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `u64::from(global::cut_through_horizon())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> tests/simulnet.rs:995:13 [INFO] [stderr] | [INFO] [stderr] 995 | base_addr: &String, [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> tests/framework/mod.rs:301:3 [INFO] [stderr] | [INFO] [stderr] 301 | wallet_seed [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> tests/framework/mod.rs:300:4 [INFO] [stderr] | [INFO] [stderr] 300 | wallet::WalletSeed::from_file(config, "").expect("Failed to read wallet seed file."); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: unused import: `WalletCommAdapter` [INFO] [stderr] --> tests/framework/mod.rs:33:66 [INFO] [stderr] | [INFO] [stderr] 33 | use wallet::{HTTPNodeClient, HTTPWalletCommAdapter, LMDBBackend, WalletCommAdapter, WalletConfig}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: struct is never constructed: `LocalServerContainer` [INFO] [stderr] --> tests/framework/mod.rs:124:1 [INFO] [stderr] | [INFO] [stderr] 124 | pub struct LocalServerContainer { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> tests/framework/mod.rs:160:2 [INFO] [stderr] | [INFO] [stderr] 160 | pub fn new(config: LocalServerContainerConfig) -> Result { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `run_server` [INFO] [stderr] --> tests/framework/mod.rs:180:2 [INFO] [stderr] | [INFO] [stderr] 180 | pub fn run_server(&mut self, duration_in_seconds: u64) -> servers::Server { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `run_wallet` [INFO] [stderr] --> tests/framework/mod.rs:244:2 [INFO] [stderr] | [INFO] [stderr] 244 | pub fn run_wallet(&mut self, _duration_in_mills: u64) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_wallet_seed` [INFO] [stderr] --> tests/framework/mod.rs:296:2 [INFO] [stderr] | [INFO] [stderr] 296 | pub fn get_wallet_seed(config: &WalletConfig) -> wallet::WalletSeed { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_wallet_info` [INFO] [stderr] --> tests/framework/mod.rs:304:2 [INFO] [stderr] | [INFO] [stderr] 304 | pub fn get_wallet_info( [INFO] [stderr] | _____^ [INFO] [stderr] 305 | | config: &WalletConfig, [INFO] [stderr] 306 | | wallet_seed: &wallet::WalletSeed, [INFO] [stderr] 307 | | ) -> wallet::WalletInfo { [INFO] [stderr] ... | [INFO] [stderr] 317 | | wallet::libwallet::internal::updater::retrieve_info(&mut wallet, &parent_id, 1).unwrap() [INFO] [stderr] 318 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `send_amount_to` [INFO] [stderr] --> tests/framework/mod.rs:320:2 [INFO] [stderr] | [INFO] [stderr] 320 | pub fn send_amount_to( [INFO] [stderr] | _____^ [INFO] [stderr] 321 | | config: &WalletConfig, [INFO] [stderr] 322 | | amount: &str, [INFO] [stderr] 323 | | minimum_confirmations: u64, [INFO] [stderr] ... | [INFO] [stderr] 367 | | }).unwrap_or_else(|e| panic!("Error creating wallet: {:?} Config: {:?}", e, config)); [INFO] [stderr] 368 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `stop_wallet` [INFO] [stderr] --> tests/framework/mod.rs:371:2 [INFO] [stderr] | [INFO] [stderr] 371 | pub fn stop_wallet(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `add_peer` [INFO] [stderr] --> tests/framework/mod.rs:379:2 [INFO] [stderr] | [INFO] [stderr] 379 | pub fn add_peer(&mut self, addr: String) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `config` [INFO] [stderr] --> tests/framework/mod.rs:429:2 [INFO] [stderr] | [INFO] [stderr] 429 | pub config: LocalServerContainerPoolConfig, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `server_containers` [INFO] [stderr] --> tests/framework/mod.rs:432:2 [INFO] [stderr] | [INFO] [stderr] 432 | server_containers: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `next_p2p_port` [INFO] [stderr] --> tests/framework/mod.rs:435:2 [INFO] [stderr] | [INFO] [stderr] 435 | next_p2p_port: u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `next_api_port` [INFO] [stderr] --> tests/framework/mod.rs:437:2 [INFO] [stderr] | [INFO] [stderr] 437 | next_api_port: u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `next_wallet_port` [INFO] [stderr] --> tests/framework/mod.rs:439:2 [INFO] [stderr] | [INFO] [stderr] 439 | next_wallet_port: u16, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `is_seeding` [INFO] [stderr] --> tests/framework/mod.rs:442:2 [INFO] [stderr] | [INFO] [stderr] 442 | is_seeding: bool, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> tests/framework/mod.rs:446:2 [INFO] [stderr] | [INFO] [stderr] 446 | pub fn new(config: LocalServerContainerPoolConfig) -> LocalServerContainerPool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `create_server` [INFO] [stderr] --> tests/framework/mod.rs:463:2 [INFO] [stderr] | [INFO] [stderr] 463 | pub fn create_server(&mut self, server_config: &mut LocalServerContainerConfig) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `run_all_servers` [INFO] [stderr] --> tests/framework/mod.rs:517:2 [INFO] [stderr] | [INFO] [stderr] 517 | pub fn run_all_servers(self) -> Arc>> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `connect_all_peers` [INFO] [stderr] --> tests/framework/mod.rs:558:2 [INFO] [stderr] | [INFO] [stderr] 558 | pub fn connect_all_peers(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `stop_all_servers` [INFO] [stderr] --> tests/framework/mod.rs:577:1 [INFO] [stderr] | [INFO] [stderr] 577 | pub fn stop_all_servers(servers: Arc>>) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> tests/framework/mod.rs:184:3 [INFO] [stderr] | [INFO] [stderr] 184 | let mut seeds = Vec::new(); [INFO] [stderr] | _________^ [INFO] [stderr] 185 | | [INFO] [stderr] 186 | | if self.config.seed_addr.len() > 0 { [INFO] [stderr] 187 | | seeding_type = p2p::Seeding::List; [INFO] [stderr] 188 | | seeds = vec![self.config.seed_addr.to_string()]; [INFO] [stderr] 189 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let seeds = if self.config.seed_addr.len() > 0 { ..; < [ _ ] > :: into_vec ( box [ $ ( $ x ) , * ] ) } else { Vec::new() };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> tests/framework/mod.rs:209:3 [INFO] [stderr] | [INFO] [stderr] 209 | let mut wallet_url = None; [INFO] [stderr] | _________^ [INFO] [stderr] 210 | | [INFO] [stderr] 211 | | if self.config.start_wallet == true { [INFO] [stderr] 212 | | self.run_wallet(duration_in_seconds + 5); [INFO] [stderr] ... | [INFO] [stderr] 218 | | )); [INFO] [stderr] 219 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] help: it is more idiomatic to write [INFO] [stderr] | [INFO] [stderr] 209 | let wallet_url = if self.config.start_wallet == true { ..; Some(format!( [INFO] [stderr] 210 | "http://{}:{}", [INFO] [stderr] 211 | self.config.base_addr, self.config.wallet_port [INFO] [stderr] 212 | )) } else { None }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> tests/framework/mod.rs:186:6 [INFO] [stderr] | [INFO] [stderr] 186 | if self.config.seed_addr.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!self.config.seed_addr.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: equality checks against true are unnecessary [INFO] [stderr] --> tests/framework/mod.rs:211:6 [INFO] [stderr] | [INFO] [stderr] 211 | if self.config.start_wallet == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.config.start_wallet` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> tests/framework/mod.rs:221:6 [INFO] [stderr] | [INFO] [stderr] 221 | if self.config.start_miner == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `self.config.start_miner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> tests/framework/mod.rs:249:14 [INFO] [stderr] | [INFO] [stderr] 249 | let seed = format!("{}", self.config.name); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `self.config.name.to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [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: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> tests/framework/mod.rs:347:3 [INFO] [stderr] | [INFO] [stderr] 347 | let _ = wallet::controller::owner_single_use(Arc::new(Mutex::new(wallet)), |api| { [INFO] [stderr] | _________^ [INFO] [stderr] 348 | | let (mut slate, lock_fn) = api.initiate_tx( [INFO] [stderr] 349 | | None, [INFO] [stderr] 350 | | amount, [INFO] [stderr] ... | [INFO] [stderr] 366 | | Ok(()) [INFO] [stderr] 367 | | }).unwrap_or_else(|e| panic!("Error creating wallet: {:?} Config: {:?}", e, config)); [INFO] [stderr] | |_____________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> tests/framework/mod.rs:469:24 [INFO] [stderr] | [INFO] [stderr] 469 | server_config.name = String::from(format!( [INFO] [stderr] | ______________________________^ [INFO] [stderr] 470 | | "{}/{}-{}", [INFO] [stderr] 471 | | self.config.base_name, self.config.base_name, server_config.p2p_server_port [INFO] [stderr] 472 | | )); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 469 | server_config.name = format!( [INFO] [stderr] 470 | "{}/{}-{}", [INFO] [stderr] 471 | self.config.base_name, self.config.base_name, server_config.p2p_server_port [INFO] [stderr] 472 | ); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> tests/framework/mod.rs:475:43 [INFO] [stderr] | [INFO] [stderr] 475 | server_config.coinbase_wallet_address = String::from(format!( [INFO] [stderr] | _________________________________________________^ [INFO] [stderr] 476 | | "http://{}:{}", [INFO] [stderr] 477 | | server_config.base_addr, server_config.wallet_port [INFO] [stderr] 478 | | )); [INFO] [stderr] | |__________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] help: consider removing `String::from()` [INFO] [stderr] | [INFO] [stderr] 475 | server_config.coinbase_wallet_address = format!( [INFO] [stderr] 476 | "http://{}:{}", [INFO] [stderr] 477 | server_config.base_addr, server_config.wallet_port [INFO] [stderr] 478 | ); [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> tests/framework/mod.rs:524:20 [INFO] [stderr] | [INFO] [stderr] 524 | let is_seeding = self.is_seeding.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.is_seeding` [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 function has a cyclomatic complexity of 28 [INFO] [stderr] --> tests/stratum.rs:49:1 [INFO] [stderr] | [INFO] [stderr] 49 | / fn basic_stratum_server() { [INFO] [stderr] 50 | | util::init_test_logger(); [INFO] [stderr] 51 | | global::set_mining_mode(ChainTypes::AutomatedTesting); [INFO] [stderr] 52 | | [INFO] [stderr] ... | [INFO] [stderr] 186 | | info!("basic_stratum_server test done and ok."); [INFO] [stderr] 187 | | } [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: the loop variable `n` is only used to index `workers`. [INFO] [stderr] --> tests/stratum.rs:99:11 [INFO] [stderr] | [INFO] [stderr] 99 | for n in 0..workers.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] 99 | for in &mut workers { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> tests/stratum.rs:107:2 [INFO] [stderr] | [INFO] [stderr] 107 | workers[2].write(job_req.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> tests/stratum.rs:126:2 [INFO] [stderr] | [INFO] [stderr] 126 | workers[2].write(job_req.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> tests/stratum.rs:137:2 [INFO] [stderr] | [INFO] [stderr] 137 | workers[3].write(job_req.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: aborting due to 3 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `grin_servers`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "97ae8531677efd67bed7f3ac11fa6ef7552ed9944a6027c83fb8f4064dc0c891"` [INFO] running `"docker" "rm" "-f" "97ae8531677efd67bed7f3ac11fa6ef7552ed9944a6027c83fb8f4064dc0c891"` [INFO] [stdout] 97ae8531677efd67bed7f3ac11fa6ef7552ed9944a6027c83fb8f4064dc0c891