[INFO] crate etcommon-trie 0.4.0 is already in cache [INFO] extracting crate etcommon-trie 0.4.0 into work/ex/clippy-test-run/sources/stable/reg/etcommon-trie/0.4.0 [INFO] extracting crate etcommon-trie 0.4.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/etcommon-trie/0.4.0 [INFO] validating manifest of etcommon-trie-0.4.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of etcommon-trie-0.4.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing etcommon-trie-0.4.0 [INFO] finished frobbing etcommon-trie-0.4.0 [INFO] frobbed toml for etcommon-trie-0.4.0 written to work/ex/clippy-test-run/sources/stable/reg/etcommon-trie/0.4.0/Cargo.toml [INFO] started frobbing etcommon-trie-0.4.0 [INFO] finished frobbing etcommon-trie-0.4.0 [INFO] frobbed toml for etcommon-trie-0.4.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/etcommon-trie/0.4.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting etcommon-trie-0.4.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/etcommon-trie/0.4.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-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] 7e7eaf468885d531a6a91b81a5b25217fe115d4ffc97b967b3831710b0b3e360 [INFO] running `"docker" "start" "-a" "7e7eaf468885d531a6a91b81a5b25217fe115d4ffc97b967b3831710b0b3e360"` [INFO] [stderr] Checking etcommon-hexutil v0.2.4 [INFO] [stderr] Checking elastic-array-plus v0.10.0 [INFO] [stderr] Checking etcommon-rlp v0.2.4 [INFO] [stderr] Checking etcommon-bigint v0.2.10 [INFO] [stderr] Checking etcommon-trie v0.4.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused imports: `NibbleSlice`, `NibbleVec`, `Nibble` [INFO] [stderr] --> src/lib.rs:13:28 [INFO] [stderr] | [INFO] [stderr] 13 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Decodable`, `Encodable`, `Prototype` [INFO] [stderr] --> src/merkle/nibble.rs:3:22 [INFO] [stderr] | [INFO] [stderr] 3 | use rlp::{RlpStream, Encodable, Decodable, Rlp, Prototype}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/merkle/nibble.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Hash` [INFO] [stderr] --> src/merkle/nibble.rs:6:17 [INFO] [stderr] | [INFO] [stderr] 6 | use std::hash::{Hash, Hasher}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Debug`, `Formatter`, `self` [INFO] [stderr] --> src/merkle/nibble.rs:7:16 [INFO] [stderr] | [INFO] [stderr] 7 | use std::fmt::{self, Debug, Formatter}; [INFO] [stderr] | ^^^^ ^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:117:34 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:117:48 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:119:29 [INFO] [stderr] | [INFO] [stderr] 119 | let is_leaf = data[0] & 0b00100000 == 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:119:43 [INFO] [stderr] | [INFO] [stderr] 119 | let is_leaf = data[0] & 0b00100000 == 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:139:18 [INFO] [stderr] | [INFO] [stderr] 139 | ret.push(0b00000000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:152:18 [INFO] [stderr] | [INFO] [stderr] 152 | ret.push(0b00010000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:167:29 [INFO] [stderr] | [INFO] [stderr] 167 | NibbleType::Leaf => 0b00100000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:168:34 [INFO] [stderr] | [INFO] [stderr] 168 | NibbleType::Extension => 0b00000000 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble` [INFO] [stderr] --> src/merkle/node.rs:1:27 [INFO] [stderr] | [INFO] [stderr] 1 | use super::nibble::{self, Nibble, NibbleVec, NibbleSlice, NibbleType}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `NibbleType`, `NibbleVec`, `Nibble` [INFO] [stderr] --> src/merkle/mod.rs:6:20 [INFO] [stderr] | [INFO] [stderr] 6 | use self::nibble::{Nibble, NibbleVec, NibbleSlice, NibbleType}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble` [INFO] [stderr] --> src/ops/insert.rs:2:39 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/insert.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `self` [INFO] [stderr] --> src/ops/delete.rs:2:22 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/delete.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `NibbleSlice` [INFO] [stderr] --> src/ops/build.rs:2:39 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Rlp`, `self` [INFO] [stderr] --> src/ops/build.rs:7:11 [INFO] [stderr] | [INFO] [stderr] 7 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble`, `self` [INFO] [stderr] --> src/ops/get.rs:2:22 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^ ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Change` [INFO] [stderr] --> src/ops/get.rs:3:6 [INFO] [stderr] | [INFO] [stderr] 3 | use {Change, DatabaseHandle}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/get.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Rlp` [INFO] [stderr] --> src/mutable.rs:2:17 [INFO] [stderr] | [INFO] [stderr] 2 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `NibbleVec`, `Nibble` [INFO] [stderr] --> src/lib.rs:13:28 [INFO] [stderr] | [INFO] [stderr] 13 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Decodable`, `Encodable`, `Prototype` [INFO] [stderr] --> src/merkle/nibble.rs:3:22 [INFO] [stderr] | [INFO] [stderr] 3 | use rlp::{RlpStream, Encodable, Decodable, Rlp, Prototype}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::ops::Deref` [INFO] [stderr] --> src/merkle/nibble.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::ops::Deref; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Hash` [INFO] [stderr] --> src/merkle/nibble.rs:6:17 [INFO] [stderr] | [INFO] [stderr] 6 | use std::hash::{Hash, Hasher}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Debug`, `Formatter`, `self` [INFO] [stderr] --> src/merkle/nibble.rs:7:16 [INFO] [stderr] | [INFO] [stderr] 7 | use std::fmt::{self, Debug, Formatter}; [INFO] [stderr] | ^^^^ ^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:117:34 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:117:48 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:119:29 [INFO] [stderr] | [INFO] [stderr] 119 | let is_leaf = data[0] & 0b00100000 == 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:119:43 [INFO] [stderr] | [INFO] [stderr] 119 | let is_leaf = data[0] & 0b00100000 == 0b00100000; [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:139:18 [INFO] [stderr] | [INFO] [stderr] 139 | ret.push(0b00000000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:152:18 [INFO] [stderr] | [INFO] [stderr] 152 | ret.push(0b00010000); [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0001_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:167:29 [INFO] [stderr] | [INFO] [stderr] 167 | NibbleType::Leaf => 0b00100000, [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0010_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> src/merkle/nibble.rs:168:34 [INFO] [stderr] | [INFO] [stderr] 168 | NibbleType::Extension => 0b00000000 [INFO] [stderr] | ^^^^^^^^^^ help: consider: `0b0000_0000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble` [INFO] [stderr] --> src/merkle/node.rs:1:27 [INFO] [stderr] | [INFO] [stderr] 1 | use super::nibble::{self, Nibble, NibbleVec, NibbleSlice, NibbleType}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Keccak256` [INFO] [stderr] --> src/merkle/node.rs:162:24 [INFO] [stderr] | [INFO] [stderr] 162 | use sha3::{Digest, Keccak256}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `NibbleVec`, `Nibble` [INFO] [stderr] --> src/merkle/node.rs:163:32 [INFO] [stderr] | [INFO] [stderr] 163 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `NibbleType`, `NibbleVec`, `Nibble` [INFO] [stderr] --> src/merkle/mod.rs:6:20 [INFO] [stderr] | [INFO] [stderr] 6 | use self::nibble::{Nibble, NibbleVec, NibbleSlice, NibbleType}; [INFO] [stderr] | ^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble` [INFO] [stderr] --> src/ops/insert.rs:2:39 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/insert.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `self` [INFO] [stderr] --> src/ops/delete.rs:2:22 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^ ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/delete.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `NibbleSlice` [INFO] [stderr] --> src/ops/build.rs:2:39 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Rlp`, `self` [INFO] [stderr] --> src/ops/build.rs:7:11 [INFO] [stderr] | [INFO] [stderr] 7 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `NibbleSlice`, `Nibble`, `self` [INFO] [stderr] --> src/ops/get.rs:2:22 [INFO] [stderr] | [INFO] [stderr] 2 | use merkle::nibble::{self, NibbleVec, NibbleSlice, Nibble}; [INFO] [stderr] | ^^^^ ^^^^^^^^^^^ ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Change` [INFO] [stderr] --> src/ops/get.rs:3:6 [INFO] [stderr] | [INFO] [stderr] 3 | use {Change, DatabaseHandle}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self` [INFO] [stderr] --> src/ops/get.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `merkle::MerkleNode` [INFO] [stderr] --> src/memory.rs:102:9 [INFO] [stderr] | [INFO] [stderr] 102 | use merkle::MerkleNode; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `rlp::Rlp` [INFO] [stderr] --> src/memory.rs:103:9 [INFO] [stderr] | [INFO] [stderr] 103 | use rlp::Rlp; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::cell::UnsafeCell` [INFO] [stderr] --> src/memory.rs:107:9 [INFO] [stderr] | [INFO] [stderr] 107 | use std::cell::UnsafeCell; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Rlp` [INFO] [stderr] --> src/mutable.rs:2:17 [INFO] [stderr] | [INFO] [stderr] 2 | use rlp::{self, Rlp}; [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Hasher` [INFO] [stderr] --> src/merkle/nibble.rs:6:23 [INFO] [stderr] | [INFO] [stderr] 6 | use std::hash::{Hash, Hasher}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decodable` [INFO] [stderr] --> src/merkle/node.rs:3:39 [INFO] [stderr] | [INFO] [stderr] 3 | use rlp::{self, RlpStream, Encodable, Decodable, Rlp, Prototype}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `DatabaseHandle` [INFO] [stderr] --> src/ops/build.rs:3:14 [INFO] [stderr] | [INFO] [stderr] 3 | use {Change, DatabaseHandle}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Hasher` [INFO] [stderr] --> src/merkle/nibble.rs:6:23 [INFO] [stderr] | [INFO] [stderr] 6 | use std::hash::{Hash, Hasher}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decodable` [INFO] [stderr] --> src/merkle/node.rs:3:39 [INFO] [stderr] | [INFO] [stderr] 3 | use rlp::{self, RlpStream, Encodable, Decodable, Rlp, Prototype}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Digest` [INFO] [stderr] --> src/merkle/node.rs:162:16 [INFO] [stderr] | [INFO] [stderr] 162 | use sha3::{Digest, Keccak256}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `DatabaseHandle` [INFO] [stderr] --> src/ops/build.rs:3:14 [INFO] [stderr] | [INFO] [stderr] 3 | use {Change, DatabaseHandle}; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/merkle/nibble.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `data[0] & 0b00010000 == 0b00010000` [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: the loop variable `i` is used to index `vec` [INFO] [stderr] --> src/merkle/nibble.rs:141:18 [INFO] [stderr] | [INFO] [stderr] 141 | for i in 0..vec.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] 141 | for (i, ) in vec.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `vec` [INFO] [stderr] --> src/merkle/nibble.rs:154:18 [INFO] [stderr] | [INFO] [stderr] 154 | for i in 0..vec.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] 154 | for (i, ) in vec.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/merkle/node.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Branch([MerkleValue<'a>; 16], Option<&'a [u8]>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/merkle/node.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Branch([MerkleValue<'a>; 16], Option<&'a [u8]>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `nodes` [INFO] [stderr] --> src/merkle/node.rs:39:26 [INFO] [stderr] | [INFO] [stderr] 39 | for i in 0..16 { [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] 39 | for (i, ) in nodes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:61:9 [INFO] [stderr] | [INFO] [stderr] 61 | / match self { [INFO] [stderr] 62 | | &MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 63 | | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] 64 | | }, [INFO] [stderr] ... | [INFO] [stderr] 81 | | }, [INFO] [stderr] 82 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 61 | match *self { [INFO] [stderr] 62 | MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] 64 | }, [INFO] [stderr] 65 | MerkleNode::Extension(ref nibble, ref value) => { [INFO] [stderr] 66 | MerkleNode::Extension(nibble.clone(), value.clone()) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/merkle/node.rs:63:50 [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), &(*value).clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), &[u8]::clone(value)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/merkle/node.rs:77:26 [INFO] [stderr] | [INFO] [stderr] 77 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `cloned_nodes[..16].clone_from_slice(&nodes[..16])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: unused variable: `value` [INFO] [stderr] --> src/memory.rs:138:19 [INFO] [stderr] | [INFO] [stderr] 138 | for (key, value) in &map { [INFO] [stderr] | ^^^^^ help: consider using `_value` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/merkle/node.rs:80:50 [INFO] [stderr] | [INFO] [stderr] 80 | MerkleNode::Branch(cloned_nodes, additional.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*additional` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | / match self { [INFO] [stderr] 89 | | &MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 90 | | s.begin_list(2); [INFO] [stderr] 91 | | nibble::encode(nibble, NibbleType::Leaf, s); [INFO] [stderr] ... | [INFO] [stderr] 108 | | } [INFO] [stderr] 109 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 88 | match *self { [INFO] [stderr] 89 | MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 90 | s.begin_list(2); [INFO] [stderr] 91 | nibble::encode(nibble, NibbleType::Leaf, s); [INFO] [stderr] 92 | value.rlp_append(s); [INFO] [stderr] 93 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/merkle/node.rs:101:26 [INFO] [stderr] | [INFO] [stderr] 101 | for i in 0..16 { [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] 101 | for in nodes.iter().take(16) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:104:17 [INFO] [stderr] | [INFO] [stderr] 104 | / match value { [INFO] [stderr] 105 | | &Some(ref value) => { value.rlp_append(s); }, [INFO] [stderr] 106 | | &None => { s.append_empty_data(); }, [INFO] [stderr] 107 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 104 | match *value { [INFO] [stderr] 105 | Some(ref value) => { value.rlp_append(s); }, [INFO] [stderr] 106 | None => { s.append_empty_data(); }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:142:9 [INFO] [stderr] | [INFO] [stderr] 142 | / match self { [INFO] [stderr] 143 | | &MerkleValue::Empty => { [INFO] [stderr] 144 | | s.append_empty_data(); [INFO] [stderr] 145 | | }, [INFO] [stderr] ... | [INFO] [stderr] 153 | | }, [INFO] [stderr] 154 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 142 | match *self { [INFO] [stderr] 143 | MerkleValue::Empty => { [INFO] [stderr] 144 | s.append_empty_data(); [INFO] [stderr] 145 | }, [INFO] [stderr] 146 | MerkleValue::Full(ref node) => { [INFO] [stderr] 147 | debug_assert!(node.inlinable()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/insert.rs:10:19 [INFO] [stderr] | [INFO] [stderr] 10 | debug_assert!(anibble.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!anibble.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: length comparison to zero [INFO] [stderr] --> src/ops/insert.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if asub.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!asub.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/ops/insert.rs:26:8 [INFO] [stderr] | [INFO] [stderr] 26 | if bnibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:44:19 [INFO] [stderr] | [INFO] [stderr] 44 | debug_assert!(bnibble.len() == 0 || !anibble.starts_with(&bnibble)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:45:19 [INFO] [stderr] | [INFO] [stderr] 45 | debug_assert!(anibble.len() == 0 || !bnibble.starts_with(&anibble)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `anibble.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/ops/insert.rs:51:8 [INFO] [stderr] | [INFO] [stderr] 51 | if anibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `anibble.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/ops/insert.rs:60:8 [INFO] [stderr] | [INFO] [stderr] 60 | if bnibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:116:20 [INFO] [stderr] | [INFO] [stderr] 116 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/insert.rs:139:20 [INFO] [stderr] | [INFO] [stderr] 139 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/insert.rs:148:16 [INFO] [stderr] | [INFO] [stderr] 148 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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/ops/insert.rs:160:43 [INFO] [stderr] | [INFO] [stderr] 160 | MerkleNode::Branch(nodes, node_additional.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*node_additional` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/insert.rs:168:1 [INFO] [stderr] | [INFO] [stderr] 168 | / pub fn insert_by_empty<'a>( [INFO] [stderr] 169 | | nibble: NibbleVec, value: &'a [u8] [INFO] [stderr] 170 | | ) -> (MerkleNode<'a>, Change) { [INFO] [stderr] 171 | | let new = MerkleNode::Leaf(nibble, value); [INFO] [stderr] 172 | | (new, Change::default()) [INFO] [stderr] 173 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/delete.rs:25:1 [INFO] [stderr] | [INFO] [stderr] 25 | / fn collapse_extension<'a>( [INFO] [stderr] 26 | | node_nibble: NibbleVec, subnode: MerkleNode<'a> [INFO] [stderr] 27 | | ) -> (MerkleNode<'a>, Change) { [INFO] [stderr] 28 | | let mut change = Change::default(); [INFO] [stderr] ... | [INFO] [stderr] 49 | | (node, change) [INFO] [stderr] 50 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/ops/delete.rs:72:40 [INFO] [stderr] | [INFO] [stderr] 72 | let (subindex, subvalue) = node_nodes.iter().enumerate() [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 73 | | .filter(|&(_, v)| v != &MerkleValue::Empty).next() [INFO] [stderr] | |__________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&(_, v)| v != &MerkleValue::Empty).next()` with `find(|&(_, v)| v != &MerkleValue::Empty)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/delete.rs:174:16 [INFO] [stderr] | [INFO] [stderr] 174 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:14:49 [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), &(*value).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), &[u8]::clone(value)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/build.rs:19:1 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn build_value<'a>(node: MerkleNode<'a>) -> (MerkleValue<'a>, Change) { [INFO] [stderr] 20 | | let mut change = Change::default(); [INFO] [stderr] 21 | | let value = change.add_value(&node); [INFO] [stderr] 22 | | [INFO] [stderr] 23 | | (value, change) [INFO] [stderr] 24 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | assert!(map.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!map.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:32:47 [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), map.get(key).unwrap().clone()), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), &(*map.get(key).unwrap()).clone()), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), &[u8]::clone(map.get(key).unwrap())), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:38:8 [INFO] [stderr] | [INFO] [stderr] 38 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/build.rs:40:23 [INFO] [stderr] | [INFO] [stderr] 40 | debug_assert!(submap.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!submap.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: the loop variable `i` is used to index `nodes` [INFO] [stderr] --> src/ops/build.rs:52:18 [INFO] [stderr] | [INFO] [stderr] 52 | for i in 0..16 { [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] 52 | for (i, ) in nodes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:56:17 [INFO] [stderr] | [INFO] [stderr] 56 | key.len() > 0 && key[0] == nibble [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!key.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/ops/build.rs:59:16 [INFO] [stderr] | [INFO] [stderr] 59 | if submap.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!submap.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: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/ops/build.rs:70:26 [INFO] [stderr] | [INFO] [stderr] 70 | let additional = map.iter() [INFO] [stderr] | __________________________^ [INFO] [stderr] 71 | | .filter(|&(key, _value)| key.len() == 0).next() [INFO] [stderr] | |___________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&(key, _value)| key.len() == 0).next()` with `find(|&(key, _value)| key.len() == 0)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:71:38 [INFO] [stderr] | [INFO] [stderr] 71 | .filter(|&(key, _value)| key.len() == 0).next() [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:72:34 [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| &(*value).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| &[u8]::clone(value)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/get.rs:41:16 [INFO] [stderr] | [INFO] [stderr] 41 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/memory.rs:8:33 [INFO] [stderr] | [INFO] [stderr] 8 | impl<'a> DatabaseHandle for &'a HashMap> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 8 | impl<'a, S: ::std::hash::BuildHasher> DatabaseHandle for &'a HashMap, S> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:31:20 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:84:20 [INFO] [stderr] | [INFO] [stderr] 84 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:126:20 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:173:20 [INFO] [stderr] | [INFO] [stderr] 173 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:221:20 [INFO] [stderr] | [INFO] [stderr] 221 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:51:5 [INFO] [stderr] | [INFO] [stderr] 51 | fn get<'a>(&'a self, key: H256) -> &'a [u8]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn add_node<'a, 'b, 'c>(&'a mut self, node: &'c MerkleNode<'b>) { [INFO] [stderr] 80 | | let subnode = rlp::encode(node).to_vec(); [INFO] [stderr] 81 | | let hash = H256::from(Keccak256::digest(&subnode).as_slice()); [INFO] [stderr] 82 | | self.add_raw(hash, subnode); [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | / pub fn remove_node<'a, 'b, 'c>(&'a mut self, node: &'c MerkleNode<'b>) -> bool { [INFO] [stderr] 106 | | if node.inlinable() { [INFO] [stderr] 107 | | false [INFO] [stderr] 108 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 113 | | } [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/lib.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | pub fn build(map: &HashMap, Vec>) -> (H256, Change) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 202 | pub fn build(map: &HashMap, Vec, S>) -> (H256, Change) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:205:8 [INFO] [stderr] | [INFO] [stderr] 205 | if map.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `etcommon-trie`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/memory.rs:120:13 [INFO] [stderr] | [INFO] [stderr] 120 | let mut btrie = MemoryTrieMut::build(&map); [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/merkle/nibble.rs:117:21 [INFO] [stderr] | [INFO] [stderr] 117 | let start_odd = if data[0] & 0b00010000 == 0b00010000 { true } else { false }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `data[0] & 0b00010000 == 0b00010000` [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: the loop variable `i` is used to index `vec` [INFO] [stderr] --> src/merkle/nibble.rs:141:18 [INFO] [stderr] | [INFO] [stderr] 141 | for i in 0..vec.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] 141 | for (i, ) in vec.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `vec` [INFO] [stderr] --> src/merkle/nibble.rs:154:18 [INFO] [stderr] | [INFO] [stderr] 154 | for i in 0..vec.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] 154 | for (i, ) in vec.iter().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/merkle/node.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Branch([MerkleValue<'a>; 16], Option<&'a [u8]>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/merkle/node.rs:12:5 [INFO] [stderr] | [INFO] [stderr] 12 | Branch([MerkleValue<'a>; 16], Option<&'a [u8]>), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is used to index `nodes` [INFO] [stderr] --> src/merkle/node.rs:39:26 [INFO] [stderr] | [INFO] [stderr] 39 | for i in 0..16 { [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] 39 | for (i, ) in nodes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:61:9 [INFO] [stderr] | [INFO] [stderr] 61 | / match self { [INFO] [stderr] 62 | | &MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 63 | | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] 64 | | }, [INFO] [stderr] ... | [INFO] [stderr] 81 | | }, [INFO] [stderr] 82 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 61 | match *self { [INFO] [stderr] 62 | MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] 64 | }, [INFO] [stderr] 65 | MerkleNode::Extension(ref nibble, ref value) => { [INFO] [stderr] 66 | MerkleNode::Extension(nibble.clone(), value.clone()) [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/merkle/node.rs:63:50 [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), value.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), &(*value).clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 63 | MerkleNode::Leaf(nibble.clone(), &[u8]::clone(value)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/merkle/node.rs:77:26 [INFO] [stderr] | [INFO] [stderr] 77 | for i in 0..16 { [INFO] [stderr] | ^^^^^ help: try replacing the loop by: `cloned_nodes[..16].clone_from_slice(&nodes[..16])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::manual_memcpy)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_memcpy [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/merkle/node.rs:80:50 [INFO] [stderr] | [INFO] [stderr] 80 | MerkleNode::Branch(cloned_nodes, additional.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*additional` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:88:9 [INFO] [stderr] | [INFO] [stderr] 88 | / match self { [INFO] [stderr] 89 | | &MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 90 | | s.begin_list(2); [INFO] [stderr] 91 | | nibble::encode(nibble, NibbleType::Leaf, s); [INFO] [stderr] ... | [INFO] [stderr] 108 | | } [INFO] [stderr] 109 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 88 | match *self { [INFO] [stderr] 89 | MerkleNode::Leaf(ref nibble, ref value) => { [INFO] [stderr] 90 | s.begin_list(2); [INFO] [stderr] 91 | nibble::encode(nibble, NibbleType::Leaf, s); [INFO] [stderr] 92 | value.rlp_append(s); [INFO] [stderr] 93 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `nodes`. [INFO] [stderr] --> src/merkle/node.rs:101:26 [INFO] [stderr] | [INFO] [stderr] 101 | for i in 0..16 { [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] 101 | for in nodes.iter().take(16) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:104:17 [INFO] [stderr] | [INFO] [stderr] 104 | / match value { [INFO] [stderr] 105 | | &Some(ref value) => { value.rlp_append(s); }, [INFO] [stderr] 106 | | &None => { s.append_empty_data(); }, [INFO] [stderr] 107 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 104 | match *value { [INFO] [stderr] 105 | Some(ref value) => { value.rlp_append(s); }, [INFO] [stderr] 106 | None => { s.append_empty_data(); }, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/merkle/node.rs:142:9 [INFO] [stderr] | [INFO] [stderr] 142 | / match self { [INFO] [stderr] 143 | | &MerkleValue::Empty => { [INFO] [stderr] 144 | | s.append_empty_data(); [INFO] [stderr] 145 | | }, [INFO] [stderr] ... | [INFO] [stderr] 153 | | }, [INFO] [stderr] 154 | | } [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: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 142 | match *self { [INFO] [stderr] 143 | MerkleValue::Empty => { [INFO] [stderr] 144 | s.append_empty_data(); [INFO] [stderr] 145 | }, [INFO] [stderr] 146 | MerkleValue::Full(ref node) => { [INFO] [stderr] 147 | debug_assert!(node.inlinable()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/insert.rs:10:19 [INFO] [stderr] | [INFO] [stderr] 10 | debug_assert!(anibble.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!anibble.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: length comparison to zero [INFO] [stderr] --> src/ops/insert.rs:19:8 [INFO] [stderr] | [INFO] [stderr] 19 | if asub.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!asub.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/ops/insert.rs:26:8 [INFO] [stderr] | [INFO] [stderr] 26 | if bnibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:44:19 [INFO] [stderr] | [INFO] [stderr] 44 | debug_assert!(bnibble.len() == 0 || !anibble.starts_with(&bnibble)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:45:19 [INFO] [stderr] | [INFO] [stderr] 45 | debug_assert!(anibble.len() == 0 || !bnibble.starts_with(&anibble)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `anibble.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/ops/insert.rs:51:8 [INFO] [stderr] | [INFO] [stderr] 51 | if anibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `anibble.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/ops/insert.rs:60:8 [INFO] [stderr] | [INFO] [stderr] 60 | if bnibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `bnibble.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/ops/insert.rs:116:20 [INFO] [stderr] | [INFO] [stderr] 116 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/insert.rs:139:20 [INFO] [stderr] | [INFO] [stderr] 139 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/insert.rs:148:16 [INFO] [stderr] | [INFO] [stderr] 148 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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/ops/insert.rs:160:43 [INFO] [stderr] | [INFO] [stderr] 160 | MerkleNode::Branch(nodes, node_additional.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: try dereferencing it: `*node_additional` [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: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/insert.rs:168:1 [INFO] [stderr] | [INFO] [stderr] 168 | / pub fn insert_by_empty<'a>( [INFO] [stderr] 169 | | nibble: NibbleVec, value: &'a [u8] [INFO] [stderr] 170 | | ) -> (MerkleNode<'a>, Change) { [INFO] [stderr] 171 | | let new = MerkleNode::Leaf(nibble, value); [INFO] [stderr] 172 | | (new, Change::default()) [INFO] [stderr] 173 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/delete.rs:25:1 [INFO] [stderr] | [INFO] [stderr] 25 | / fn collapse_extension<'a>( [INFO] [stderr] 26 | | node_nibble: NibbleVec, subnode: MerkleNode<'a> [INFO] [stderr] 27 | | ) -> (MerkleNode<'a>, Change) { [INFO] [stderr] 28 | | let mut change = Change::default(); [INFO] [stderr] ... | [INFO] [stderr] 49 | | (node, change) [INFO] [stderr] 50 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/ops/delete.rs:72:40 [INFO] [stderr] | [INFO] [stderr] 72 | let (subindex, subvalue) = node_nodes.iter().enumerate() [INFO] [stderr] | ________________________________________^ [INFO] [stderr] 73 | | .filter(|&(_, v)| v != &MerkleValue::Empty).next() [INFO] [stderr] | |__________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&(_, v)| v != &MerkleValue::Empty).next()` with `find(|&(_, v)| v != &MerkleValue::Empty)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/delete.rs:174:16 [INFO] [stderr] | [INFO] [stderr] 174 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:14:49 [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), &(*value).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 14 | submap.insert(key[common_len..].into(), &[u8]::clone(value)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/ops/build.rs:19:1 [INFO] [stderr] | [INFO] [stderr] 19 | / pub fn build_value<'a>(node: MerkleNode<'a>) -> (MerkleValue<'a>, Change) { [INFO] [stderr] 20 | | let mut change = Change::default(); [INFO] [stderr] 21 | | let value = change.add_value(&node); [INFO] [stderr] 22 | | [INFO] [stderr] 23 | | (value, change) [INFO] [stderr] 24 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:29:13 [INFO] [stderr] | [INFO] [stderr] 29 | assert!(map.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!map.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:32:47 [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), map.get(key).unwrap().clone()), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), &(*map.get(key).unwrap()).clone()), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 32 | return (MerkleNode::Leaf(key.clone(), &[u8]::clone(map.get(key).unwrap())), change); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:38:8 [INFO] [stderr] | [INFO] [stderr] 38 | if common.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!common.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/ops/build.rs:40:23 [INFO] [stderr] | [INFO] [stderr] 40 | debug_assert!(submap.len() > 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!submap.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: the loop variable `i` is used to index `nodes` [INFO] [stderr] --> src/ops/build.rs:52:18 [INFO] [stderr] | [INFO] [stderr] 52 | for i in 0..16 { [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] 52 | for (i, ) in nodes.iter_mut().enumerate() { [INFO] [stderr] | ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:56:17 [INFO] [stderr] | [INFO] [stderr] 56 | key.len() > 0 && key[0] == nibble [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!key.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/ops/build.rs:59:16 [INFO] [stderr] | [INFO] [stderr] 59 | if submap.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!submap.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: called `filter(p).next()` on an `Iterator`. This is more succinctly expressed by calling `.find(p)` instead. [INFO] [stderr] --> src/ops/build.rs:70:26 [INFO] [stderr] | [INFO] [stderr] 70 | let additional = map.iter() [INFO] [stderr] | __________________________^ [INFO] [stderr] 71 | | .filter(|&(key, _value)| key.len() == 0).next() [INFO] [stderr] | |___________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: replace `filter(|&(key, _value)| key.len() == 0).next()` with `find(|&(key, _value)| key.len() == 0)` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/build.rs:71:38 [INFO] [stderr] | [INFO] [stderr] 71 | .filter(|&(key, _value)| key.len() == 0).next() [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `key.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] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/ops/build.rs:72:34 [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| value.clone()); [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| &(*value).clone()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 72 | .map(|(_key, value)| &[u8]::clone(value)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/ops/get.rs:41:16 [INFO] [stderr] | [INFO] [stderr] 41 | if nibble.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `nibble.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: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/memory.rs:8:33 [INFO] [stderr] | [INFO] [stderr] 8 | impl<'a> DatabaseHandle for &'a HashMap> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::implicit_hasher)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 8 | impl<'a, S: ::std::hash::BuildHasher> DatabaseHandle for &'a HashMap, S> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:113:20 [INFO] [stderr] | [INFO] [stderr] 113 | map.insert("key1aa".as_bytes().into(), "0123456789012345678901234567890123456789xxx".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key1aa"` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::string_lit_as_bytes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:113:48 [INFO] [stderr] | [INFO] [stderr] 113 | map.insert("key1aa".as_bytes().into(), "0123456789012345678901234567890123456789xxx".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0123456789012345678901234567890123456789xxx"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:114:20 [INFO] [stderr] | [INFO] [stderr] 114 | map.insert("key1".as_bytes().into(), "0123456789012345678901234567890123456789Very_Long".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key1"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:114:46 [INFO] [stderr] | [INFO] [stderr] 114 | map.insert("key1".as_bytes().into(), "0123456789012345678901234567890123456789Very_Long".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"0123456789012345678901234567890123456789Very_Long"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:115:20 [INFO] [stderr] | [INFO] [stderr] 115 | map.insert("key2bb".as_bytes().into(), "aval3".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:115:48 [INFO] [stderr] | [INFO] [stderr] 115 | map.insert("key2bb".as_bytes().into(), "aval3".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval3"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:116:20 [INFO] [stderr] | [INFO] [stderr] 116 | map.insert("key2".as_bytes().into(), "short".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:116:46 [INFO] [stderr] | [INFO] [stderr] 116 | map.insert("key2".as_bytes().into(), "short".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"short"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:117:20 [INFO] [stderr] | [INFO] [stderr] 117 | map.insert("key3cc".as_bytes().into(), "aval3".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key3cc"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:117:48 [INFO] [stderr] | [INFO] [stderr] 117 | map.insert("key3cc".as_bytes().into(), "aval3".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval3"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:118:20 [INFO] [stderr] | [INFO] [stderr] 118 | map.insert("key3".as_bytes().into(), "1234567890123456789012345678901".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key3"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:118:46 [INFO] [stderr] | [INFO] [stderr] 118 | map.insert("key3".as_bytes().into(), "1234567890123456789012345678901".as_bytes().into()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"1234567890123456789012345678901"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:123:30 [INFO] [stderr] | [INFO] [stderr] 123 | assert_eq!(btrie.get("key2bb".as_bytes()), Some("aval3".as_bytes().into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:123:57 [INFO] [stderr] | [INFO] [stderr] 123 | assert_eq!(btrie.get("key2bb".as_bytes()), Some("aval3".as_bytes().into())); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval3"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:124:30 [INFO] [stderr] | [INFO] [stderr] 124 | assert_eq!(btrie.get("key2bbb".as_bytes()), None); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bbb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:133:22 [INFO] [stderr] | [INFO] [stderr] 133 | mtrie.insert("key2bbb".as_bytes(), "aval4".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bbb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:133:44 [INFO] [stderr] | [INFO] [stderr] 133 | mtrie.insert("key2bbb".as_bytes(), "aval4".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval4"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:134:22 [INFO] [stderr] | [INFO] [stderr] 134 | mtrie.delete("key2bbb".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bbb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/memory.rs:142:17 [INFO] [stderr] | [INFO] [stderr] 142 | assert!(mtrie.database.len() == 0); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `mtrie.database.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: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:149:22 [INFO] [stderr] | [INFO] [stderr] 149 | mtrie.insert("key1".as_bytes(), "aval1".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key1"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:149:41 [INFO] [stderr] | [INFO] [stderr] 149 | mtrie.insert("key1".as_bytes(), "aval1".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval1"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:150:22 [INFO] [stderr] | [INFO] [stderr] 150 | mtrie.insert("key2bb".as_bytes(), "aval3".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:150:43 [INFO] [stderr] | [INFO] [stderr] 150 | mtrie.insert("key2bb".as_bytes(), "aval3".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval3"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:153:22 [INFO] [stderr] | [INFO] [stderr] 153 | mtrie.insert("key2bbb".as_bytes(), "aval4".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bbb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:153:44 [INFO] [stderr] | [INFO] [stderr] 153 | mtrie.insert("key2bbb".as_bytes(), "aval4".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"aval4"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: calling `as_bytes()` on a string literal [INFO] [stderr] --> src/memory.rs:154:22 [INFO] [stderr] | [INFO] [stderr] 154 | mtrie.delete("key2bbb".as_bytes()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: consider using a byte string literal instead: `b"key2bbb"` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#string_lit_as_bytes [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:31:20 [INFO] [stderr] | [INFO] [stderr] 31 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:84:20 [INFO] [stderr] | [INFO] [stderr] 84 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:126:20 [INFO] [stderr] | [INFO] [stderr] 126 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:173:20 [INFO] [stderr] | [INFO] [stderr] 173 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/mutable.rs:221:20 [INFO] [stderr] | [INFO] [stderr] 221 | pub fn to_trie(self) -> T { [INFO] [stderr] | ^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:51:5 [INFO] [stderr] | [INFO] [stderr] 51 | fn get<'a>(&'a self, key: H256) -> &'a [u8]; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:79:5 [INFO] [stderr] | [INFO] [stderr] 79 | / pub fn add_node<'a, 'b, 'c>(&'a mut self, node: &'c MerkleNode<'b>) { [INFO] [stderr] 80 | | let subnode = rlp::encode(node).to_vec(); [INFO] [stderr] 81 | | let hash = H256::from(Keccak256::digest(&subnode).as_slice()); [INFO] [stderr] 82 | | self.add_raw(hash, subnode); [INFO] [stderr] 83 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/lib.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | / pub fn remove_node<'a, 'b, 'c>(&'a mut self, node: &'c MerkleNode<'b>) -> bool { [INFO] [stderr] 106 | | if node.inlinable() { [INFO] [stderr] 107 | | false [INFO] [stderr] 108 | | } else { [INFO] [stderr] ... | [INFO] [stderr] 113 | | } [INFO] [stderr] 114 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes [INFO] [stderr] [INFO] [stderr] warning: parameter of type `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/lib.rs:202:20 [INFO] [stderr] | [INFO] [stderr] 202 | pub fn build(map: &HashMap, Vec>) -> (H256, Change) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_hasher [INFO] [stderr] help: consider adding a type parameter [INFO] [stderr] | [INFO] [stderr] 202 | pub fn build(map: &HashMap, Vec, S>) -> (H256, Change) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/lib.rs:205:8 [INFO] [stderr] | [INFO] [stderr] 205 | if map.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `map.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] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `etcommon-trie`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "7e7eaf468885d531a6a91b81a5b25217fe115d4ffc97b967b3831710b0b3e360"` [INFO] running `"docker" "rm" "-f" "7e7eaf468885d531a6a91b81a5b25217fe115d4ffc97b967b3831710b0b3e360"` [INFO] [stdout] 7e7eaf468885d531a6a91b81a5b25217fe115d4ffc97b967b3831710b0b3e360