[INFO] crate grin_api 0.4.2 is already in cache [INFO] extracting crate grin_api 0.4.2 into work/ex/clippy-test-run/sources/stable/reg/grin_api/0.4.2 [INFO] extracting crate grin_api 0.4.2 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/grin_api/0.4.2 [INFO] validating manifest of grin_api-0.4.2 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of grin_api-0.4.2 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing grin_api-0.4.2 [INFO] finished frobbing grin_api-0.4.2 [INFO] frobbed toml for grin_api-0.4.2 written to work/ex/clippy-test-run/sources/stable/reg/grin_api/0.4.2/Cargo.toml [INFO] started frobbing grin_api-0.4.2 [INFO] finished frobbing grin_api-0.4.2 [INFO] frobbed toml for grin_api-0.4.2 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/grin_api/0.4.2/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting grin_api-0.4.2 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-3/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/grin_api/0.4.2:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 6421b6c274b2bb4ce78fdb630ab6889f0bd2962597be5c1fbbcc8b08aff09ea1 [INFO] running `"docker" "start" "-a" "6421b6c274b2bb4ce78fdb630ab6889f0bd2962597be5c1fbbcc8b08aff09ea1"` [INFO] [stderr] Checking crossbeam-epoch v0.7.1 [INFO] [stderr] Checking want v0.0.6 [INFO] [stderr] Checking num-bigint v0.2.2 [INFO] [stderr] Checking ct-logs v0.4.0 [INFO] [stderr] Checking rustls v0.13.1 [INFO] [stderr] Checking h2 v0.1.16 [INFO] [stderr] Checking log4rs v0.8.1 [INFO] [stderr] Checking tokio-reactor v0.1.8 [INFO] [stderr] Checking crossbeam-deque v0.6.3 [INFO] [stderr] Checking crossbeam v0.6.0 [INFO] [stderr] Checking num-rational v0.2.1 [INFO] [stderr] Checking tokio-uds v0.2.5 [INFO] [stderr] Checking tokio-udp v0.1.3 [INFO] [stderr] Checking tokio-tcp v0.1.3 [INFO] [stderr] Checking grin_util v0.4.2 [INFO] [stderr] Checking num v0.2.0 [INFO] [stderr] Checking tokio-threadpool v0.1.11 [INFO] [stderr] Checking grin_keychain v0.4.2 [INFO] [stderr] Checking tokio-fs v0.1.5 [INFO] [stderr] Checking tokio v0.1.15 [INFO] [stderr] Checking grin_core v0.4.2 [INFO] [stderr] Checking tokio-rustls v0.7.2 [INFO] [stderr] Checking tokio-core v0.1.17 [INFO] [stderr] Checking hyper v0.12.23 [INFO] [stderr] Checking hyper-rustls v0.14.0 [INFO] [stderr] Checking grin_store v0.4.2 [INFO] [stderr] Checking grin_pool v0.4.2 [INFO] [stderr] Checking grin_p2p v0.4.2 [INFO] [stderr] Checking grin_chain v0.4.2 [INFO] [stderr] Checking grin_api v0.4.2 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/handlers/chain_api.rs:155:4 [INFO] [stderr] | [INFO] [stderr] 155 | outputs: outputs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `outputs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/rest.rs:89:11 [INFO] [stderr] | [INFO] [stderr] 89 | Error { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:79:4 [INFO] [stderr] | [INFO] [stderr] 79 | connections: connections, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `connections` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:170:4 [INFO] [stderr] | [INFO] [stderr] 170 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:427:6 [INFO] [stderr] | [INFO] [stderr] 427 | proof: proof, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `proof` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:429:6 [INFO] [stderr] | [INFO] [stderr] 429 | block_height: block_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `block_height` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:430:6 [INFO] [stderr] | [INFO] [stderr] 430 | merkle_proof: merkle_proof, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `merkle_proof` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:582:4 [INFO] [stderr] | [INFO] [stderr] 582 | inputs: inputs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `inputs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:583:4 [INFO] [stderr] | [INFO] [stderr] 583 | outputs: outputs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `outputs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:584:4 [INFO] [stderr] | [INFO] [stderr] 584 | kernels: kernels, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `kernels` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/handlers/chain_api.rs:155:4 [INFO] [stderr] | [INFO] [stderr] 155 | outputs: outputs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `outputs` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/rest.rs:89:11 [INFO] [stderr] | [INFO] [stderr] 89 | Error { inner: inner } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `inner` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:79:4 [INFO] [stderr] | [INFO] [stderr] 79 | connections: connections, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `connections` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:170:4 [INFO] [stderr] | [INFO] [stderr] 170 | height: height, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `height` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:427:6 [INFO] [stderr] | [INFO] [stderr] 427 | proof: proof, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `proof` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:429:6 [INFO] [stderr] | [INFO] [stderr] 429 | block_height: block_height, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `block_height` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:430:6 [INFO] [stderr] | [INFO] [stderr] 430 | merkle_proof: merkle_proof, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `merkle_proof` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:582:4 [INFO] [stderr] | [INFO] [stderr] 582 | inputs: inputs, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `inputs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:583:4 [INFO] [stderr] | [INFO] [stderr] 583 | outputs: outputs, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `outputs` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/types.rs:584:4 [INFO] [stderr] | [INFO] [stderr] 584 | kernels: kernels, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `kernels` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:63:18 [INFO] [stderr] | [INFO] [stderr] 63 | Ok(header) => return Ok(BlockHeaderPrintable::from_header(&header)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(BlockHeaderPrintable::from_header(&header))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | Err(_) => return Err(ErrorKind::NotFound)?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ErrorKind::NotFound)?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:128:2 [INFO] [stderr] | [INFO] [stderr] 128 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:435:18 [INFO] [stderr] | [INFO] [stderr] 435 | const FIELDS: &'static [&'static str] = [INFO] [stderr] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:435:28 [INFO] [stderr] | [INFO] [stderr] 435 | const FIELDS: &'static [&'static str] = [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:63:18 [INFO] [stderr] | [INFO] [stderr] 63 | Ok(header) => return Ok(BlockHeaderPrintable::from_header(&header)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(BlockHeaderPrintable::from_header(&header))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:64:14 [INFO] [stderr] | [INFO] [stderr] 64 | Err(_) => return Err(ErrorKind::NotFound)?, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `Err(ErrorKind::NotFound)?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/handlers/blocks_api.rs:128:2 [INFO] [stderr] | [INFO] [stderr] 128 | return Ok(()); [INFO] [stderr] | ^^^^^^^^^^^^^^ help: remove `return` as shown: `Ok(())` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:435:18 [INFO] [stderr] | [INFO] [stderr] 435 | const FIELDS: &'static [&'static str] = [INFO] [stderr] | -^^^^^^^--------------- help: consider removing `'static`: `&[&'static str]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::const_static_lifetime)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: Constants have by default a `'static` lifetime [INFO] [stderr] --> src/types.rs:435:28 [INFO] [stderr] | [INFO] [stderr] 435 | const FIELDS: &'static [&'static str] = [INFO] [stderr] | -^^^^^^^---- help: consider removing `'static`: `&str` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#const_static_lifetime [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/client.rs:37:1 [INFO] [stderr] | [INFO] [stderr] 37 | / pub fn get<'a, T>(url: &'a str, api_secret: Option) -> Result [INFO] [stderr] 38 | | where [INFO] [stderr] 39 | | for<'de> T: Deserialize<'de>, [INFO] [stderr] 40 | | { [INFO] [stderr] 41 | | handle_request(build_request(url, "GET", api_secret, None)?) [INFO] [stderr] 42 | | } [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/client.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | / pub fn get_async<'a, T>(url: &'a str, api_secret: Option) -> ClientResponseFuture [INFO] [stderr] 48 | | where [INFO] [stderr] 49 | | for<'de> T: Deserialize<'de> + Send + 'static, [INFO] [stderr] 50 | | { [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [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: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:71:66 [INFO] [stderr] | [INFO] [stderr] 71 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:71:54 [INFO] [stderr] | [INFO] [stderr] 71 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/handlers/blocks_api.rs:119:29 [INFO] [stderr] | [INFO] [stderr] 119 | fn check_block_param(input: &String) -> Result<(), Error> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:133:66 [INFO] [stderr] | [INFO] [stderr] 133 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:133:54 [INFO] [stderr] | [INFO] [stderr] 133 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:114:24 [INFO] [stderr] | [INFO] [stderr] 114 | for id in id.split(",") { [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/chain_api.rs:174:17 [INFO] [stderr] | [INFO] [stderr] 174 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:181:24 [INFO] [stderr] | [INFO] [stderr] 181 | for id in id.split(",") { [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/handlers/chain_api.rs:202:10 [INFO] [stderr] | [INFO] [stderr] 202 | if let Some(_) = params.get("include_rp") { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 203 | | include_rp = true; [INFO] [stderr] 204 | | } [INFO] [stderr] | |_________- help: try this: `if params.get("include_rp").is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/handlers/chain_api.rs:214:8 [INFO] [stderr] | [INFO] [stderr] 214 | if res.outputs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!res.outputs.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: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:226:71 [INFO] [stderr] | [INFO] [stderr] 226 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:226:59 [INFO] [stderr] | [INFO] [stderr] 226 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:59:71 [INFO] [stderr] | [INFO] [stderr] 59 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:59:59 [INFO] [stderr] | [INFO] [stderr] 59 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:76:72 [INFO] [stderr] | [INFO] [stderr] 76 | let mut path_elems = req.uri().path().trim_right_matches("/").rsplit("/"); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:76:60 [INFO] [stderr] | [INFO] [stderr] 76 | let mut path_elems = req.uri().path().trim_right_matches("/").rsplit("/"); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/pool_api.rs:68:18 [INFO] [stderr] | [INFO] [stderr] 68 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/transactions_api.rs:123:18 [INFO] [stderr] | [INFO] [stderr] 123 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/transactions_api.rs:158:12 [INFO] [stderr] | [INFO] [stderr] 158 | .rsplit("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/transactions_api.rs:157:24 [INFO] [stderr] | [INFO] [stderr] 157 | .trim_right_matches("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/handlers/utils.rs:52:10 [INFO] [stderr] | [INFO] [stderr] 52 | if let Ok(_) = w(chain).is_unspent(&x) { [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 53 | | let block_height = w(chain).get_header_for_output(&x).unwrap().height; [INFO] [stderr] 54 | | return Ok((Output::new(&commit, block_height), x.clone())); [INFO] [stderr] 55 | | } [INFO] [stderr] | |_________- help: try this: `if w(chain).is_unspent(&x).is_ok()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `rest::ApiServer` [INFO] [stderr] --> src/rest.rs:156:2 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn new() -> ApiServer { [INFO] [stderr] | _____^ [INFO] [stderr] 157 | | ApiServer { [INFO] [stderr] 158 | | shutdown_sender: None, [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 149 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/router.rs:73:3 [INFO] [stderr] | [INFO] [stderr] 73 | match req.method() { [INFO] [stderr] | _________^ [INFO] [stderr] 74 | | &Method::GET => self.get(req), [INFO] [stderr] 75 | | &Method::POST => self.post(req), [INFO] [stderr] 76 | | &Method::PUT => self.put(req), [INFO] [stderr] ... | [INFO] [stderr] 83 | | _ => not_found(), [INFO] [stderr] 84 | | } [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] 73 | match *req.method() { [INFO] [stderr] 74 | Method::GET => self.get(req), [INFO] [stderr] 75 | Method::POST => self.post(req), [INFO] [stderr] 76 | Method::PUT => self.put(req), [INFO] [stderr] 77 | Method::DELETE => self.delete(req), [INFO] [stderr] 78 | Method::PATCH => self.patch(req), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `router::Router` [INFO] [stderr] --> src/router.rs:120:2 [INFO] [stderr] | [INFO] [stderr] 120 | pub fn new() -> Router { [INFO] [stderr] | _____^ [INFO] [stderr] 121 | | let root = Node::new(calculate_hash(&""), None); [INFO] [stderr] 122 | | let mut nodes = vec![]; [INFO] [stderr] 123 | | nodes.push(root); [INFO] [stderr] 124 | | Router { nodes } [INFO] [stderr] 125 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 99 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/client.rs:37:1 [INFO] [stderr] | [INFO] [stderr] 37 | / pub fn get<'a, T>(url: &'a str, api_secret: Option) -> Result [INFO] [stderr] 38 | | where [INFO] [stderr] 39 | | for<'de> T: Deserialize<'de>, [INFO] [stderr] 40 | | { [INFO] [stderr] 41 | | handle_request(build_request(url, "GET", api_secret, None)?) [INFO] [stderr] 42 | | } [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/client.rs:47:1 [INFO] [stderr] | [INFO] [stderr] 47 | / pub fn get_async<'a, T>(url: &'a str, api_secret: Option) -> ClientResponseFuture [INFO] [stderr] 48 | | where [INFO] [stderr] 49 | | for<'de> T: Deserialize<'de> + Send + 'static, [INFO] [stderr] 50 | | { [INFO] [stderr] ... | [INFO] [stderr] 54 | | } [INFO] [stderr] 55 | | } [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: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:71:66 [INFO] [stderr] | [INFO] [stderr] 71 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:168:13 [INFO] [stderr] | [INFO] [stderr] 168 | commit: commit.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*commit` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:182:3 [INFO] [stderr] | [INFO] [stderr] 182 | self.commit.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.commit` [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] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:71:54 [INFO] [stderr] | [INFO] [stderr] 71 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/types.rs:265:22 [INFO] [stderr] | [INFO] [stderr] 265 | let block_height = match spent { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 266 | | true => None, [INFO] [stderr] 267 | | false => Some(chain.get_header_for_output(&out_id).unwrap().height), [INFO] [stderr] 268 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if spent { None } else { Some(chain.get_header_for_output(&out_id).unwrap().height) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:301:6 [INFO] [stderr] | [INFO] [stderr] 301 | Ok(self.commit.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.commit` [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: useless use of `format!` [INFO] [stderr] --> src/types.rs:308:40 [INFO] [stderr] | [INFO] [stderr] 308 | .ok_or_else(|| ser::Error::HexError(format!("output range_proof missing"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"output range_proof missing".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/types.rs:312:12 [INFO] [stderr] | [INFO] [stderr] 312 | for i in 0..p_bytes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try replacing the loop by: `p_bytes.clone_from_slice(&p_vec[..p_bytes.len()])` [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: writing `&String` instead of `&str` involves a new object where a slice will do. [INFO] [stderr] --> src/handlers/blocks_api.rs:119:29 [INFO] [stderr] | [INFO] [stderr] 119 | fn check_block_param(input: &String) -> Result<(), Error> { [INFO] [stderr] | ^^^^^^^ help: change this to: `&str` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::ptr_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:133:66 [INFO] [stderr] | [INFO] [stderr] 133 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/blocks_api.rs:133:54 [INFO] [stderr] | [INFO] [stderr] 133 | let el = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:114:24 [INFO] [stderr] | [INFO] [stderr] 114 | for id in id.split(",") { [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/chain_api.rs:174:17 [INFO] [stderr] | [INFO] [stderr] 174 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:181:24 [INFO] [stderr] | [INFO] [stderr] 181 | for id in id.split(",") { [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_some()` [INFO] [stderr] --> src/handlers/chain_api.rs:202:10 [INFO] [stderr] | [INFO] [stderr] 202 | if let Some(_) = params.get("include_rp") { [INFO] [stderr] | _________- ^^^^^^^ [INFO] [stderr] 203 | | include_rp = true; [INFO] [stderr] 204 | | } [INFO] [stderr] | |_________- help: try this: `if params.get("include_rp").is_some()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/handlers/chain_api.rs:214:8 [INFO] [stderr] | [INFO] [stderr] 214 | if res.outputs.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!res.outputs.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: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:226:71 [INFO] [stderr] | [INFO] [stderr] 226 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/chain_api.rs:226:59 [INFO] [stderr] | [INFO] [stderr] 226 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:59:71 [INFO] [stderr] | [INFO] [stderr] 59 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:59:59 [INFO] [stderr] | [INFO] [stderr] 59 | let command = match req.uri().path().trim_right_matches("/").rsplit("/").next() { [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:76:72 [INFO] [stderr] | [INFO] [stderr] 76 | let mut path_elems = req.uri().path().trim_right_matches("/").rsplit("/"); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/peers_api.rs:76:60 [INFO] [stderr] | [INFO] [stderr] 76 | let mut path_elems = req.uri().path().trim_right_matches("/").rsplit("/"); [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/pool_api.rs:68:18 [INFO] [stderr] | [INFO] [stderr] 68 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: use of `or_insert` followed by a function call [INFO] [stderr] --> src/handlers/transactions_api.rs:123:18 [INFO] [stderr] | [INFO] [stderr] 123 | hm.entry(k).or_insert(vec![]).push(v); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: try this: `or_insert_with(|| vec![])` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/transactions_api.rs:158:12 [INFO] [stderr] | [INFO] [stderr] 158 | .rsplit("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/handlers/transactions_api.rs:157:24 [INFO] [stderr] | [INFO] [stderr] 157 | .trim_right_matches("/") [INFO] [stderr] | ^^^ help: try using a char instead: `'/'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/handlers/utils.rs:52:10 [INFO] [stderr] | [INFO] [stderr] 52 | if let Ok(_) = w(chain).is_unspent(&x) { [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 53 | | let block_height = w(chain).get_header_for_output(&x).unwrap().height; [INFO] [stderr] 54 | | return Ok((Output::new(&commit, block_height), x.clone())); [INFO] [stderr] 55 | | } [INFO] [stderr] | |_________- help: try this: `if w(chain).is_unspent(&x).is_ok()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `rest::ApiServer` [INFO] [stderr] --> src/rest.rs:156:2 [INFO] [stderr] | [INFO] [stderr] 156 | pub fn new() -> ApiServer { [INFO] [stderr] | _____^ [INFO] [stderr] 157 | | ApiServer { [INFO] [stderr] 158 | | shutdown_sender: None, [INFO] [stderr] 159 | | } [INFO] [stderr] 160 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 149 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/router.rs:73:3 [INFO] [stderr] | [INFO] [stderr] 73 | match req.method() { [INFO] [stderr] | _________^ [INFO] [stderr] 74 | | &Method::GET => self.get(req), [INFO] [stderr] 75 | | &Method::POST => self.post(req), [INFO] [stderr] 76 | | &Method::PUT => self.put(req), [INFO] [stderr] ... | [INFO] [stderr] 83 | | _ => not_found(), [INFO] [stderr] 84 | | } [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] 73 | match *req.method() { [INFO] [stderr] 74 | Method::GET => self.get(req), [INFO] [stderr] 75 | Method::POST => self.post(req), [INFO] [stderr] 76 | Method::PUT => self.put(req), [INFO] [stderr] 77 | Method::DELETE => self.delete(req), [INFO] [stderr] 78 | Method::PATCH => self.patch(req), [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `router::Router` [INFO] [stderr] --> src/router.rs:120:2 [INFO] [stderr] | [INFO] [stderr] 120 | pub fn new() -> Router { [INFO] [stderr] | _____^ [INFO] [stderr] 121 | | let root = Node::new(calculate_hash(&""), None); [INFO] [stderr] 122 | | let mut nodes = vec![]; [INFO] [stderr] 123 | | nodes.push(root); [INFO] [stderr] 124 | | Router { nodes } [INFO] [stderr] 125 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 99 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:168:13 [INFO] [stderr] | [INFO] [stderr] 168 | commit: commit.clone(), [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try dereferencing it: `*commit` [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: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:182:3 [INFO] [stderr] | [INFO] [stderr] 182 | self.commit.clone() [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.commit` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to match on a boolean expression [INFO] [stderr] --> src/types.rs:265:22 [INFO] [stderr] | [INFO] [stderr] 265 | let block_height = match spent { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 266 | | true => None, [INFO] [stderr] 267 | | false => Some(chain.get_header_for_output(&out_id).unwrap().height), [INFO] [stderr] 268 | | }; [INFO] [stderr] | |_________^ help: consider using an if/else expression: `if spent { None } else { Some(chain.get_header_for_output(&out_id).unwrap().height) }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_bool [INFO] [stderr] [INFO] [stderr] warning: using `clone` on a `Copy` type [INFO] [stderr] --> src/types.rs:301:6 [INFO] [stderr] | [INFO] [stderr] 301 | Ok(self.commit.clone()) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.commit` [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: useless use of `format!` [INFO] [stderr] --> src/types.rs:308:40 [INFO] [stderr] | [INFO] [stderr] 308 | .ok_or_else(|| ser::Error::HexError(format!("output range_proof missing"))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"output range_proof missing".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: it looks like you're manually copying between slices [INFO] [stderr] --> src/types.rs:312:12 [INFO] [stderr] | [INFO] [stderr] 312 | for i in 0..p_bytes.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: try replacing the loop by: `p_bytes.clone_from_slice(&p_vec[..p_bytes.len()])` [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] Finished dev [unoptimized + debuginfo] target(s) in 1m 56s [INFO] running `"docker" "inspect" "6421b6c274b2bb4ce78fdb630ab6889f0bd2962597be5c1fbbcc8b08aff09ea1"` [INFO] running `"docker" "rm" "-f" "6421b6c274b2bb4ce78fdb630ab6889f0bd2962597be5c1fbbcc8b08aff09ea1"` [INFO] [stdout] 6421b6c274b2bb4ce78fdb630ab6889f0bd2962597be5c1fbbcc8b08aff09ea1