[INFO] crate redis 0.9.1 is already in cache [INFO] extracting crate redis 0.9.1 into work/ex/clippy-test-run/sources/stable/reg/redis/0.9.1 [INFO] extracting crate redis 0.9.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/redis/0.9.1 [INFO] validating manifest of redis-0.9.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of redis-0.9.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing redis-0.9.1 [INFO] finished frobbing redis-0.9.1 [INFO] frobbed toml for redis-0.9.1 written to work/ex/clippy-test-run/sources/stable/reg/redis/0.9.1/Cargo.toml [INFO] started frobbing redis-0.9.1 [INFO] finished frobbing redis-0.9.1 [INFO] frobbed toml for redis-0.9.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/redis/0.9.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting redis-0.9.1 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/redis/0.9.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 4d148e9126f8e37aa8a65fd90178cd14dc8470100b1e0298f81e085c3bfac19f [INFO] running `"docker" "start" "-a" "4d148e9126f8e37aa8a65fd90178cd14dc8470100b1e0298f81e085c3bfac19f"` [INFO] [stderr] Compiling redis v0.9.1 (/opt/crater/workdir) [INFO] [stderr] Checking partial-io v0.3.0 [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/async.rs:115:58 [INFO] [stderr] | [INFO] [stderr] 115 | Ok((con, value)) => Ok((Connection { con: con, db }, value)), [INFO] [stderr] | ^^^^^^^^ help: replace it with: `con` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cmd.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | write!(cmd, "*{}\r\n", args.len()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cmd.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | write!(cmd, "${}\r\n", item.len()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmd.rs:308:13 [INFO] [stderr] | [INFO] [stderr] 308 | batch: batch, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `batch` [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/cmd.rs:309:13 [INFO] [stderr] | [INFO] [stderr] 309 | cursor: cursor, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [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/cmd.rs:310:13 [INFO] [stderr] | [INFO] [stderr] 310 | con: con, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `con` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/commands.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | #![cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#![rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/connection.rs:630:17 [INFO] [stderr] | [INFO] [stderr] 630 | payload: payload, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `payload` [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/connection.rs:631:17 [INFO] [stderr] | [INFO] [stderr] 631 | channel: channel, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `channel` [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/connection.rs:632:17 [INFO] [stderr] | [INFO] [stderr] 632 | pattern: pattern, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `pattern` [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/parser.rs:296:18 [INFO] [stderr] | [INFO] [stderr] 296 | Parser { reader: reader } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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:392:20 [INFO] [stderr] | [INFO] [stderr] 392 | InfoDict { map: map } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [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/async.rs:115:58 [INFO] [stderr] | [INFO] [stderr] 115 | Ok((con, value)) => Ok((Connection { con: con, db }, value)), [INFO] [stderr] | ^^^^^^^^ help: replace it with: `con` [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: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cmd.rs:110:5 [INFO] [stderr] | [INFO] [stderr] 110 | write!(cmd, "*{}\r\n", args.len()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/cmd.rs:114:13 [INFO] [stderr] | [INFO] [stderr] 114 | write!(cmd, "${}\r\n", item.len()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/cmd.rs:308:13 [INFO] [stderr] | [INFO] [stderr] 308 | batch: batch, [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `batch` [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/cmd.rs:309:13 [INFO] [stderr] | [INFO] [stderr] 309 | cursor: cursor, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `cursor` [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/cmd.rs:310:13 [INFO] [stderr] | [INFO] [stderr] 310 | con: con, [INFO] [stderr] | ^^^^^^^^ help: replace it with: `con` [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: `cfg_attr` is deprecated for rustfmt and got replaced by tool_attributes [INFO] [stderr] --> src/commands.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | #![cfg_attr(rustfmt, rustfmt_skip)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `#![rustfmt::skip]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::deprecated_cfg_attr)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#deprecated_cfg_attr [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/connection.rs:630:17 [INFO] [stderr] | [INFO] [stderr] 630 | payload: payload, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `payload` [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/connection.rs:631:17 [INFO] [stderr] | [INFO] [stderr] 631 | channel: channel, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `channel` [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/connection.rs:632:17 [INFO] [stderr] | [INFO] [stderr] 632 | pattern: pattern, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `pattern` [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/parser.rs:296:18 [INFO] [stderr] | [INFO] [stderr] 296 | Parser { reader: reader } [INFO] [stderr] | ^^^^^^^^^^^^^^ help: replace it with: `reader` [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:392:20 [INFO] [stderr] | [INFO] [stderr] 392 | InfoDict { map: map } [INFO] [stderr] | ^^^^^^^^ help: replace it with: `map` [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/cmd.rs:94:5 [INFO] [stderr] | [INFO] [stderr] 94 | return 1 + countdigits(len) + 2 + len + 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `1 + countdigits(len) + 2 + len + 2` [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/types.rs:102:17 [INFO] [stderr] | [INFO] [stderr] 102 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [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/types.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/cmd.rs:94:5 [INFO] [stderr] | [INFO] [stderr] 94 | return 1 + countdigits(len) + 2 + len + 2; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove `return` as shown: `1 + countdigits(len) + 2 + len + 2` [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/types.rs:102:17 [INFO] [stderr] | [INFO] [stderr] 102 | return true; [INFO] [stderr] | ^^^^^^^^^^^^ help: remove `return` as shown: `true` [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/types.rs:105:17 [INFO] [stderr] | [INFO] [stderr] 105 | return false; [INFO] [stderr] | ^^^^^^^^^^^^^ help: remove `return` as shown: `false` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/async.rs:373:9 [INFO] [stderr] | [INFO] [stderr] 373 | / match sender.send(item) { [INFO] [stderr] 374 | | Ok(_) => (), [INFO] [stderr] 375 | | Err(_) => { [INFO] [stderr] 376 | | // `Err` means that the receiver was dropped in which case it does not [INFO] [stderr] ... | [INFO] [stderr] 379 | | } [INFO] [stderr] 380 | | } [INFO] [stderr] | |_________^ help: try this: `if let Ok(_) = sender.send(item) { () }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/client.rs:53:27 [INFO] [stderr] | [INFO] [stderr] 53 | .and_then(move |con| ::async::SharedConnection::new(con)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `::async::SharedConnection::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/cmd.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | / match self.batch.pop() { [INFO] [stderr] 47 | | Some(v) => { [INFO] [stderr] 48 | | return Some(v); [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | None => {} [INFO] [stderr] 51 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 46 | if let Some(v) = self.batch.pop() { [INFO] [stderr] 47 | return Some(v); [INFO] [stderr] 48 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cmd.rs:116:22 [INFO] [stderr] | [INFO] [stderr] 116 | cmd.push('\r' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cmd.rs:117:22 [INFO] [stderr] | [INFO] [stderr] 117 | cmd.push('\n' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\n' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cmd::Cmd` [INFO] [stderr] --> src/cmd.rs:175:5 [INFO] [stderr] | [INFO] [stderr] 175 | / pub fn new() -> Cmd { [INFO] [stderr] 176 | | Cmd { [INFO] [stderr] 177 | | args: vec![], [INFO] [stderr] 178 | | cursor: None, [INFO] [stderr] 179 | | is_ignored: false, [INFO] [stderr] 180 | | } [INFO] [stderr] 181 | | } [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] 16 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmd.rs:296:9 [INFO] [stderr] | [INFO] [stderr] 296 | / let mut cursor = 0; [INFO] [stderr] 297 | | [INFO] [stderr] 298 | | if rv.looks_like_cursor() { [INFO] [stderr] 299 | | let (next, b): (u64, Vec) = try!(from_redis_value(&rv)); [INFO] [stderr] ... | [INFO] [stderr] 303 | | batch = try!(from_redis_value(&rv)); [INFO] [stderr] 304 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let cursor = if rv.looks_like_cursor() { ..; next } else { ..; 0 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/cmd.rs:329:9 [INFO] [stderr] | [INFO] [stderr] 329 | let _: () = self.query(con).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cmd::Pipeline` [INFO] [stderr] --> src/cmd.rs:357:5 [INFO] [stderr] | [INFO] [stderr] 357 | / pub fn new() -> Pipeline { [INFO] [stderr] 358 | | Pipeline { [INFO] [stderr] 359 | | commands: vec![], [INFO] [stderr] 360 | | transaction_mode: false, [INFO] [stderr] 361 | | } [INFO] [stderr] 362 | | } [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] 23 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/cmd.rs:486:18 [INFO] [stderr] | [INFO] [stderr] 486 | &(if self.commands.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.commands.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/cmd.rs:535:25 [INFO] [stderr] | [INFO] [stderr] 535 | let future = if self.commands.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.commands.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/cmd.rs:559:9 [INFO] [stderr] | [INFO] [stderr] 559 | let _: () = self.query(con).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/cmd.rs:572:1 [INFO] [stderr] | [INFO] [stderr] 572 | / pub fn cmd<'a>(name: &'a str) -> Cmd { [INFO] [stderr] 573 | | let mut rv = Cmd::new(); [INFO] [stderr] 574 | | rv.arg(name); [INFO] [stderr] 575 | | rv [INFO] [stderr] 576 | | } [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] error: use of `#[inline]` on trait method `perform` which has no body [INFO] [stderr] --> src/commands.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | #[inline] [INFO] [stderr] | _____________-^^^^^^^^ [INFO] [stderr] 113 | | fn perform(&mut self, con: &Cmd) -> &mut Self; [INFO] [stderr] | |____________- help: remove [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::inline_fn_without_body)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inline_fn_without_body [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:118:26 [INFO] [stderr] | [INFO] [stderr] 118 | fn $name<'a $(, $tyargs: $ty)*>( [INFO] [stderr] | ^^ [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:118:26 [INFO] [stderr] | [INFO] [stderr] 118 | fn $name<'a $(, $tyargs: $ty)*>( [INFO] [stderr] | ^^ [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:791:18 [INFO] [stderr] | [INFO] [stderr] 791 | fn subscribe<'a, C, F, U>(&mut self, _: C, _: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:801:19 [INFO] [stderr] | [INFO] [stderr] 801 | fn psubscribe<'a, P, F, U>(&mut self, _: P, _: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:810:18 [INFO] [stderr] | [INFO] [stderr] 810 | fn subscribe<'a, C, F, U>(&mut self, channels: C, mut func: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:826:19 [INFO] [stderr] | [INFO] [stderr] 826 | fn psubscribe<'a, P, F, U>(&mut self, patterns: P, mut func: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_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/connection.rs:125:19 [INFO] [stderr] | [INFO] [stderr] 125 | db: match url.query_pairs() [INFO] [stderr] | ___________________^ [INFO] [stderr] 126 | | .into_iter() [INFO] [stderr] 127 | | .filter(|&(ref key, _)| key == "db") [INFO] [stderr] 128 | | .next() [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&(ref key, _)| key == "db").next()` with `find(|&(ref key, _)| key == "db")` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/connection.rs:125:19 [INFO] [stderr] | [INFO] [stderr] 125 | db: match url.query_pairs() [INFO] [stderr] | ___________________^ [INFO] [stderr] 126 | | .into_iter() [INFO] [stderr] | |________________________^ help: consider removing `.into_iter()`: `url.query_pairs()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/connection.rs:239:30 [INFO] [stderr] | [INFO] [stderr] 239 | .map_err(|e| RedisError::from(e)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `RedisError::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/connection.rs:256:30 [INFO] [stderr] | [INFO] [stderr] 256 | .map_err(|e| RedisError::from(e)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `RedisError::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/connection.rs:337:5 [INFO] [stderr] | [INFO] [stderr] 337 | / match connection_info.passwd { [INFO] [stderr] 338 | | Some(ref passwd) => match cmd("AUTH").arg(&**passwd).query::(&rv) { [INFO] [stderr] 339 | | Ok(Value::Okay) => {} [INFO] [stderr] 340 | | _ => { [INFO] [stderr] ... | [INFO] [stderr] 347 | | None => {} [INFO] [stderr] 348 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 337 | if let Some(ref passwd) = connection_info.passwd { match cmd("AUTH").arg(&**passwd).query::(&rv) { [INFO] [stderr] 338 | Ok(Value::Okay) => {} [INFO] [stderr] 339 | _ => { [INFO] [stderr] 340 | fail!(( [INFO] [stderr] 341 | ErrorKind::AuthenticationFailed, [INFO] [stderr] 342 | "Password authentication failed" [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/connection.rs:436:5 [INFO] [stderr] | [INFO] [stderr] 436 | / pub fn as_pubsub<'a>(&'a mut self) -> PubSub<'a> { [INFO] [stderr] 437 | | // NOTE: The pubsub flag is intentionally not raised at this time since running commands [INFO] [stderr] 438 | | // within the pubsub state should not try and exit from the pubsub state. [INFO] [stderr] 439 | | PubSub::new(self) [INFO] [stderr] 440 | | } [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/connection.rs:488:19 [INFO] [stderr] | [INFO] [stderr] 488 | match res.0.first().map(|v| *v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `res.0.first().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:581:9 [INFO] [stderr] | [INFO] [stderr] 581 | let _: () = cmd("SUBSCRIBE").arg(channel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:587:9 [INFO] [stderr] | [INFO] [stderr] 587 | let _: () = cmd("PSUBSCRIBE").arg(pchannel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:593:9 [INFO] [stderr] | [INFO] [stderr] 593 | let _: () = cmd("UNSUBSCRIBE").arg(channel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:599:9 [INFO] [stderr] | [INFO] [stderr] 599 | let _: () = cmd("PUNSUBSCRIBE").arg(pchannel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: methods called `from_*` usually take no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/connection.rs:689:25 [INFO] [stderr] | [INFO] [stderr] 689 | pub fn from_pattern(&self) -> bool { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:748:9 [INFO] [stderr] | [INFO] [stderr] 748 | let _: () = try!(cmd("WATCH").arg(keys).query(con)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:758:17 [INFO] [stderr] | [INFO] [stderr] 758 | let _: () = try!(cmd("UNWATCH").query(con)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / match self.0 { [INFO] [stderr] 41 | | Ok(ref mut elems) => elems.extend(iter.into_iter().scan((), |_, item| match item { [INFO] [stderr] 42 | | Ok(item) => Some(item), [INFO] [stderr] 43 | | Err(err) => { [INFO] [stderr] ... | [INFO] [stderr] 48 | | Err(_) => (), [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 40 | if let Ok(ref mut elems) = self.0 { elems.extend(iter.into_iter().scan((), |_, item| match item { [INFO] [stderr] 41 | Ok(item) => Some(item), [INFO] [stderr] 42 | Err(err) => { [INFO] [stderr] 43 | returned_err = Some(err); [INFO] [stderr] 44 | None [INFO] [stderr] 45 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:210:20 [INFO] [stderr] | [INFO] [stderr] 210 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:240:21 [INFO] [stderr] | [INFO] [stderr] 240 | removed = removed - remaining_data; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `removed -= remaining_data` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/script.rs:136:21 [INFO] [stderr] | [INFO] [stderr] 136 | / let _: () = try!( [INFO] [stderr] 137 | | cmd("SCRIPT") [INFO] [stderr] 138 | | .arg("LOAD") [INFO] [stderr] 139 | | .arg(self.script.code.as_bytes()) [INFO] [stderr] 140 | | .query(con) [INFO] [stderr] 141 | | ); [INFO] [stderr] | |______________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: item `types::InfoDict` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/types.rs:376:1 [INFO] [stderr] | [INFO] [stderr] 376 | / impl InfoDict { [INFO] [stderr] 377 | | /// Creates a new info dictionary from a string in the response of [INFO] [stderr] 378 | | /// the INFO command. Each line is a key, value pair with the [INFO] [stderr] 379 | | /// key and value separated by a colon (`:`). Lines starting with a [INFO] [stderr] ... | [INFO] [stderr] 414 | | } [INFO] [stderr] 415 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/types.rs:384:16 [INFO] [stderr] | [INFO] [stderr] 384 | if line.len() == 0 || line.starts_with("#") { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.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: single-character string constant used as pattern [INFO] [stderr] --> src/types.rs:384:52 [INFO] [stderr] | [INFO] [stderr] 384 | if line.len() == 0 || line.starts_with("#") { [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:575:9 [INFO] [stderr] | [INFO] [stderr] 575 | / match *self { [INFO] [stderr] 576 | | Some(ref x) => x.write_redis_args(out), [INFO] [stderr] 577 | | None => (), [INFO] [stderr] 578 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(ref x) = *self { x.write_redis_args(out) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:599:50 [INFO] [stderr] | [INFO] [stderr] 599 | impl ToRedisArgs for HashSet { [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] 599 | impl ToRedisArgs for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:733:13 [INFO] [stderr] | [INFO] [stderr] 733 | / match FromRedisValue::from_redis_value(item) { [INFO] [stderr] 734 | | Ok(val) => rv.push(val), [INFO] [stderr] 735 | | Err(_) => {} [INFO] [stderr] 736 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Ok(val) = FromRedisValue::from_redis_value(item) { rv.push(val) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:844:75 [INFO] [stderr] | [INFO] [stderr] 844 | impl FromRedisValue for HashMap { [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] 844 | impl FromRedisValue for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 848 | let mut rv = HashMap::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/types.rs:850:17 [INFO] [stderr] | [INFO] [stderr] 850 | / loop { [INFO] [stderr] 851 | | let k = unwrap_or!(iter.next(), break); [INFO] [stderr] 852 | | let v = unwrap_or!(iter.next(), break); [INFO] [stderr] 853 | | rv.insert(try!(from_redis_value(k)), try!(from_redis_value(v))); [INFO] [stderr] 854 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(x) = iter.next() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/types.rs:871:17 [INFO] [stderr] | [INFO] [stderr] 871 | / loop { [INFO] [stderr] 872 | | let k = unwrap_or!(iter.next(), break); [INFO] [stderr] 873 | | let v = unwrap_or!(iter.next(), break); [INFO] [stderr] 874 | | rv.insert(try!(from_redis_value(k)), try!(from_redis_value(v))); [INFO] [stderr] 875 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(x) = iter.next() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:883:56 [INFO] [stderr] | [INFO] [stderr] 883 | impl FromRedisValue for HashSet { [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] 883 | impl FromRedisValue for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 887 | let mut rv = HashSet::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:1016:9 [INFO] [stderr] | [INFO] [stderr] 1016 | / match *v { [INFO] [stderr] 1017 | | Value::Nil => { [INFO] [stderr] 1018 | | return Ok(None); [INFO] [stderr] 1019 | | } [INFO] [stderr] 1020 | | _ => {} [INFO] [stderr] 1021 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1016 | if let Value::Nil = *v { [INFO] [stderr] 1017 | return Ok(None); [INFO] [stderr] 1018 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `redis`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/async.rs:373:9 [INFO] [stderr] | [INFO] [stderr] 373 | / match sender.send(item) { [INFO] [stderr] 374 | | Ok(_) => (), [INFO] [stderr] 375 | | Err(_) => { [INFO] [stderr] 376 | | // `Err` means that the receiver was dropped in which case it does not [INFO] [stderr] ... | [INFO] [stderr] 379 | | } [INFO] [stderr] 380 | | } [INFO] [stderr] | |_________^ help: try this: `if let Ok(_) = sender.send(item) { () }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_match)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/client.rs:53:27 [INFO] [stderr] | [INFO] [stderr] 53 | .and_then(move |con| ::async::SharedConnection::new(con)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `::async::SharedConnection::new` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/cmd.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | / match self.batch.pop() { [INFO] [stderr] 47 | | Some(v) => { [INFO] [stderr] 48 | | return Some(v); [INFO] [stderr] 49 | | } [INFO] [stderr] 50 | | None => {} [INFO] [stderr] 51 | | }; [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 46 | if let Some(v) = self.batch.pop() { [INFO] [stderr] 47 | return Some(v); [INFO] [stderr] 48 | }; [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cmd.rs:116:22 [INFO] [stderr] | [INFO] [stderr] 116 | cmd.push('\r' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/cmd.rs:117:22 [INFO] [stderr] | [INFO] [stderr] 117 | cmd.push('\n' as u8); [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\n' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cmd::Cmd` [INFO] [stderr] --> src/cmd.rs:175:5 [INFO] [stderr] | [INFO] [stderr] 175 | / pub fn new() -> Cmd { [INFO] [stderr] 176 | | Cmd { [INFO] [stderr] 177 | | args: vec![], [INFO] [stderr] 178 | | cursor: None, [INFO] [stderr] 179 | | is_ignored: false, [INFO] [stderr] 180 | | } [INFO] [stderr] 181 | | } [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] 16 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: `if _ { .. } else { .. }` is an expression [INFO] [stderr] --> src/cmd.rs:296:9 [INFO] [stderr] | [INFO] [stderr] 296 | / let mut cursor = 0; [INFO] [stderr] 297 | | [INFO] [stderr] 298 | | if rv.looks_like_cursor() { [INFO] [stderr] 299 | | let (next, b): (u64, Vec) = try!(from_redis_value(&rv)); [INFO] [stderr] ... | [INFO] [stderr] 303 | | batch = try!(from_redis_value(&rv)); [INFO] [stderr] 304 | | } [INFO] [stderr] | |_________^ help: it is more idiomatic to write: `let cursor = if rv.looks_like_cursor() { ..; next } else { ..; 0 };` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_let_if_seq)] on by default [INFO] [stderr] = note: you might not need `mut` at all [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_let_if_seq [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/cmd.rs:329:9 [INFO] [stderr] | [INFO] [stderr] 329 | let _: () = self.query(con).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `cmd::Pipeline` [INFO] [stderr] --> src/cmd.rs:357:5 [INFO] [stderr] | [INFO] [stderr] 357 | / pub fn new() -> Pipeline { [INFO] [stderr] 358 | | Pipeline { [INFO] [stderr] 359 | | commands: vec![], [INFO] [stderr] 360 | | transaction_mode: false, [INFO] [stderr] 361 | | } [INFO] [stderr] 362 | | } [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] 23 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/cmd.rs:486:18 [INFO] [stderr] | [INFO] [stderr] 486 | &(if self.commands.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.commands.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/cmd.rs:535:25 [INFO] [stderr] | [INFO] [stderr] 535 | let future = if self.commands.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.commands.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/cmd.rs:559:9 [INFO] [stderr] | [INFO] [stderr] 559 | let _: () = self.query(con).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: explicit lifetimes given in parameter types where they could be elided (or replaced with `'_` if needed by type declaration) [INFO] [stderr] --> src/cmd.rs:572:1 [INFO] [stderr] | [INFO] [stderr] 572 | / pub fn cmd<'a>(name: &'a str) -> Cmd { [INFO] [stderr] 573 | | let mut rv = Cmd::new(); [INFO] [stderr] 574 | | rv.arg(name); [INFO] [stderr] 575 | | rv [INFO] [stderr] 576 | | } [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] error: use of `#[inline]` on trait method `perform` which has no body [INFO] [stderr] --> src/commands.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | #[inline] [INFO] [stderr] | _____________-^^^^^^^^ [INFO] [stderr] 113 | | fn perform(&mut self, con: &Cmd) -> &mut Self; [INFO] [stderr] | |____________- help: remove [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::inline_fn_without_body)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#inline_fn_without_body [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:118:26 [INFO] [stderr] | [INFO] [stderr] 118 | fn $name<'a $(, $tyargs: $ty)*>( [INFO] [stderr] | ^^ [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::extra_unused_lifetimes)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:118:26 [INFO] [stderr] | [INFO] [stderr] 118 | fn $name<'a $(, $tyargs: $ty)*>( [INFO] [stderr] | ^^ [INFO] [stderr] ... [INFO] [stderr] 126 | / implement_commands! { [INFO] [stderr] 127 | | // most common operations [INFO] [stderr] 128 | | [INFO] [stderr] 129 | | /// Get the value of a key. If key is a vec this becomes an `MGET`. [INFO] [stderr] ... | [INFO] [stderr] 739 | | } [INFO] [stderr] 740 | | } [INFO] [stderr] | |_- in this macro invocation [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:791:18 [INFO] [stderr] | [INFO] [stderr] 791 | fn subscribe<'a, C, F, U>(&mut self, _: C, _: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:801:19 [INFO] [stderr] | [INFO] [stderr] 801 | fn psubscribe<'a, P, F, U>(&mut self, _: P, _: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:810:18 [INFO] [stderr] | [INFO] [stderr] 810 | fn subscribe<'a, C, F, U>(&mut self, channels: C, mut func: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_lifetimes [INFO] [stderr] [INFO] [stderr] warning: this lifetime isn't used in the function definition [INFO] [stderr] --> src/commands.rs:826:19 [INFO] [stderr] | [INFO] [stderr] 826 | fn psubscribe<'a, P, F, U>(&mut self, patterns: P, mut func: F) -> RedisResult [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_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/connection.rs:125:19 [INFO] [stderr] | [INFO] [stderr] 125 | db: match url.query_pairs() [INFO] [stderr] | ___________________^ [INFO] [stderr] 126 | | .into_iter() [INFO] [stderr] 127 | | .filter(|&(ref key, _)| key == "db") [INFO] [stderr] 128 | | .next() [INFO] [stderr] | |___________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::filter_next)] on by default [INFO] [stderr] = note: replace `filter(|&(ref key, _)| key == "db").next()` with `find(|&(ref key, _)| key == "db")` [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#filter_next [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/connection.rs:125:19 [INFO] [stderr] | [INFO] [stderr] 125 | db: match url.query_pairs() [INFO] [stderr] | ___________________^ [INFO] [stderr] 126 | | .into_iter() [INFO] [stderr] | |________________________^ help: consider removing `.into_iter()`: `url.query_pairs()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::identity_conversion)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#identity_conversion [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/connection.rs:239:30 [INFO] [stderr] | [INFO] [stderr] 239 | .map_err(|e| RedisError::from(e)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `RedisError::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/connection.rs:256:30 [INFO] [stderr] | [INFO] [stderr] 256 | .map_err(|e| RedisError::from(e)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `RedisError::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/connection.rs:337:5 [INFO] [stderr] | [INFO] [stderr] 337 | / match connection_info.passwd { [INFO] [stderr] 338 | | Some(ref passwd) => match cmd("AUTH").arg(&**passwd).query::(&rv) { [INFO] [stderr] 339 | | Ok(Value::Okay) => {} [INFO] [stderr] 340 | | _ => { [INFO] [stderr] ... | [INFO] [stderr] 347 | | None => {} [INFO] [stderr] 348 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 337 | if let Some(ref passwd) = connection_info.passwd { match cmd("AUTH").arg(&**passwd).query::(&rv) { [INFO] [stderr] 338 | Ok(Value::Okay) => {} [INFO] [stderr] 339 | _ => { [INFO] [stderr] 340 | fail!(( [INFO] [stderr] 341 | ErrorKind::AuthenticationFailed, [INFO] [stderr] 342 | "Password authentication failed" [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/connection.rs:436:5 [INFO] [stderr] | [INFO] [stderr] 436 | / pub fn as_pubsub<'a>(&'a mut self) -> PubSub<'a> { [INFO] [stderr] 437 | | // NOTE: The pubsub flag is intentionally not raised at this time since running commands [INFO] [stderr] 438 | | // within the pubsub state should not try and exit from the pubsub state. [INFO] [stderr] 439 | | PubSub::new(self) [INFO] [stderr] 440 | | } [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: You are using an explicit closure for cloning elements [INFO] [stderr] --> src/connection.rs:488:19 [INFO] [stderr] | [INFO] [stderr] 488 | match res.0.first().map(|v| *v) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: Consider calling the dedicated `cloned` method: `res.0.first().cloned()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::map_clone)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:581:9 [INFO] [stderr] | [INFO] [stderr] 581 | let _: () = cmd("SUBSCRIBE").arg(channel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:587:9 [INFO] [stderr] | [INFO] [stderr] 587 | let _: () = cmd("PSUBSCRIBE").arg(pchannel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:593:9 [INFO] [stderr] | [INFO] [stderr] 593 | let _: () = cmd("UNSUBSCRIBE").arg(channel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:599:9 [INFO] [stderr] | [INFO] [stderr] 599 | let _: () = cmd("PUNSUBSCRIBE").arg(pchannel).query(self.con)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: methods called `from_*` usually take no self; consider choosing a less ambiguous name [INFO] [stderr] --> src/connection.rs:689:25 [INFO] [stderr] | [INFO] [stderr] 689 | pub fn from_pattern(&self) -> bool { [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:748:9 [INFO] [stderr] | [INFO] [stderr] 748 | let _: () = try!(cmd("WATCH").arg(keys).query(con)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/connection.rs:758:17 [INFO] [stderr] | [INFO] [stderr] 758 | let _: () = try!(cmd("UNWATCH").query(con)); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/parser.rs:40:9 [INFO] [stderr] | [INFO] [stderr] 40 | / match self.0 { [INFO] [stderr] 41 | | Ok(ref mut elems) => elems.extend(iter.into_iter().scan((), |_, item| match item { [INFO] [stderr] 42 | | Ok(item) => Some(item), [INFO] [stderr] 43 | | Err(err) => { [INFO] [stderr] ... | [INFO] [stderr] 48 | | Err(_) => (), [INFO] [stderr] 49 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 40 | if let Ok(ref mut elems) = self.0 { elems.extend(iter.into_iter().scan((), |_, item| match item { [INFO] [stderr] 41 | Ok(item) => Some(item), [INFO] [stderr] 42 | Err(err) => { [INFO] [stderr] 43 | returned_err = Some(err); [INFO] [stderr] 44 | None [INFO] [stderr] 45 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/parser.rs:210:20 [INFO] [stderr] | [INFO] [stderr] 210 | if buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `buffer.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: manual implementation of an assign operation [INFO] [stderr] --> src/parser.rs:240:21 [INFO] [stderr] | [INFO] [stderr] 240 | removed = removed - remaining_data; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `removed -= remaining_data` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> src/script.rs:136:21 [INFO] [stderr] | [INFO] [stderr] 136 | / let _: () = try!( [INFO] [stderr] 137 | | cmd("SCRIPT") [INFO] [stderr] 138 | | .arg("LOAD") [INFO] [stderr] 139 | | .arg(self.script.code.as_bytes()) [INFO] [stderr] 140 | | .query(con) [INFO] [stderr] 141 | | ); [INFO] [stderr] | |______________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: item `types::InfoDict` has a public `len` method but no corresponding `is_empty` method [INFO] [stderr] --> src/types.rs:376:1 [INFO] [stderr] | [INFO] [stderr] 376 | / impl InfoDict { [INFO] [stderr] 377 | | /// Creates a new info dictionary from a string in the response of [INFO] [stderr] 378 | | /// the INFO command. Each line is a key, value pair with the [INFO] [stderr] 379 | | /// key and value separated by a colon (`:`). Lines starting with a [INFO] [stderr] ... | [INFO] [stderr] 414 | | } [INFO] [stderr] 415 | | } [INFO] [stderr] | |_^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_without_is_empty)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_without_is_empty [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/types.rs:384:16 [INFO] [stderr] | [INFO] [stderr] 384 | if line.len() == 0 || line.starts_with("#") { [INFO] [stderr] | ^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `line.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: single-character string constant used as pattern [INFO] [stderr] --> src/types.rs:384:52 [INFO] [stderr] | [INFO] [stderr] 384 | if line.len() == 0 || line.starts_with("#") { [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: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:575:9 [INFO] [stderr] | [INFO] [stderr] 575 | / match *self { [INFO] [stderr] 576 | | Some(ref x) => x.write_redis_args(out), [INFO] [stderr] 577 | | None => (), [INFO] [stderr] 578 | | } [INFO] [stderr] | |_________^ help: try this: `if let Some(ref x) = *self { x.write_redis_args(out) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:599:50 [INFO] [stderr] | [INFO] [stderr] 599 | impl ToRedisArgs for HashSet { [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] 599 | impl ToRedisArgs for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:733:13 [INFO] [stderr] | [INFO] [stderr] 733 | / match FromRedisValue::from_redis_value(item) { [INFO] [stderr] 734 | | Ok(val) => rv.push(val), [INFO] [stderr] 735 | | Err(_) => {} [INFO] [stderr] 736 | | } [INFO] [stderr] | |_____________^ help: try this: `if let Ok(val) = FromRedisValue::from_redis_value(item) { rv.push(val) }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] [INFO] [stderr] warning: impl for `HashMap` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:844:75 [INFO] [stderr] | [INFO] [stderr] 844 | impl FromRedisValue for HashMap { [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] 844 | impl FromRedisValue for HashMap { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 848 | let mut rv = HashMap::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/types.rs:850:17 [INFO] [stderr] | [INFO] [stderr] 850 | / loop { [INFO] [stderr] 851 | | let k = unwrap_or!(iter.next(), break); [INFO] [stderr] 852 | | let v = unwrap_or!(iter.next(), break); [INFO] [stderr] 853 | | rv.insert(try!(from_redis_value(k)), try!(from_redis_value(v))); [INFO] [stderr] 854 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(x) = iter.next() { .. }` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/types.rs:871:17 [INFO] [stderr] | [INFO] [stderr] 871 | / loop { [INFO] [stderr] 872 | | let k = unwrap_or!(iter.next(), break); [INFO] [stderr] 873 | | let v = unwrap_or!(iter.next(), break); [INFO] [stderr] 874 | | rv.insert(try!(from_redis_value(k)), try!(from_redis_value(v))); [INFO] [stderr] 875 | | } [INFO] [stderr] | |_________________^ help: try: `while let Some(x) = iter.next() { .. }` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] [INFO] [stderr] warning: impl for `HashSet` should be generalized over different hashers [INFO] [stderr] --> src/types.rs:883:56 [INFO] [stderr] | [INFO] [stderr] 883 | impl FromRedisValue for HashSet { [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] 883 | impl FromRedisValue for HashSet { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ [INFO] [stderr] help: ...and use generic constructor [INFO] [stderr] | [INFO] [stderr] 887 | let mut rv = HashSet::default(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/types.rs:1016:9 [INFO] [stderr] | [INFO] [stderr] 1016 | / match *v { [INFO] [stderr] 1017 | | Value::Nil => { [INFO] [stderr] 1018 | | return Ok(None); [INFO] [stderr] 1019 | | } [INFO] [stderr] 1020 | | _ => {} [INFO] [stderr] 1021 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 1016 | if let Value::Nil = *v { [INFO] [stderr] 1017 | return Ok(None); [INFO] [stderr] 1018 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `redis`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "4d148e9126f8e37aa8a65fd90178cd14dc8470100b1e0298f81e085c3bfac19f"` [INFO] running `"docker" "rm" "-f" "4d148e9126f8e37aa8a65fd90178cd14dc8470100b1e0298f81e085c3bfac19f"` [INFO] [stdout] 4d148e9126f8e37aa8a65fd90178cd14dc8470100b1e0298f81e085c3bfac19f