[INFO] updating cached repository yiransheng/rust-toy-redis [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/yiransheng/rust-toy-redis [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/yiransheng/rust-toy-redis" "work/ex/clippy-test-run/sources/stable/gh/yiransheng/rust-toy-redis"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/yiransheng/rust-toy-redis'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/yiransheng/rust-toy-redis" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/yiransheng/rust-toy-redis"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/yiransheng/rust-toy-redis'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 16c8108179589cc5ebecb5c6b625c4acedfc26c9 [INFO] sha for GitHub repo yiransheng/rust-toy-redis: 16c8108179589cc5ebecb5c6b625c4acedfc26c9 [INFO] validating manifest of yiransheng/rust-toy-redis 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 yiransheng/rust-toy-redis 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 yiransheng/rust-toy-redis [INFO] finished frobbing yiransheng/rust-toy-redis [INFO] frobbed toml for yiransheng/rust-toy-redis written to work/ex/clippy-test-run/sources/stable/gh/yiransheng/rust-toy-redis/Cargo.toml [INFO] started frobbing yiransheng/rust-toy-redis [INFO] finished frobbing yiransheng/rust-toy-redis [INFO] frobbed toml for yiransheng/rust-toy-redis written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/yiransheng/rust-toy-redis/Cargo.toml [INFO] crate yiransheng/rust-toy-redis has a lockfile. skipping [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 yiransheng/rust-toy-redis against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-7/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/yiransheng/rust-toy-redis:/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] 34a0af1a73716cf80e28d15129e7b6f0ae27c9e95b2e09203112c5c8c7b7ef51 [INFO] running `"docker" "start" "-a" "34a0af1a73716cf80e28d15129e7b6f0ae27c9e95b2e09203112c5c8c7b7ef51"` [INFO] [stderr] Checking futures v0.1.21 [INFO] [stderr] Checking stringreader v0.1.1 [INFO] [stderr] Checking iovec v0.1.2 [INFO] [stderr] Checking num_cpus v1.8.0 [INFO] [stderr] Checking net2 v0.2.32 [INFO] [stderr] Checking bytes v0.4.6 [INFO] [stderr] Checking mio v0.6.14 [INFO] [stderr] Checking tokio-executor v0.1.2 [INFO] [stderr] Checking tokio-io v0.1.6 [INFO] [stderr] Checking tokio-service v0.1.0 [INFO] [stderr] Checking tokio-timer v0.2.1 [INFO] [stderr] Checking tokio-threadpool v0.1.2 [INFO] [stderr] Checking tokio-reactor v0.1.1 [INFO] [stderr] Checking tokio-tcp v0.1.0 [INFO] [stderr] Checking tokio-udp v0.1.0 [INFO] [stderr] Checking tokio v0.1.5 [INFO] [stderr] Checking tokio-core v0.1.16 [INFO] [stderr] Checking tokio-proto v0.1.1 [INFO] [stderr] Checking toy-redis v0.1.2 (/opt/crater/workdir) [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> src/main.rs:2:1 [INFO] [stderr] | [INFO] [stderr] 2 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &Value::SimpleString(ref x) => Value::SimpleString(x), [INFO] [stderr] 33 | | &Value::ErrorString(ref x) => Value::ErrorString(x), [INFO] [stderr] 34 | | &Value::IntegerString(ref x) => Value::IntegerString(x), [INFO] [stderr] 35 | | &Value::BulkString(ref x) => Value::BulkString(x), [INFO] [stderr] 36 | | _ => Value::Nil, [INFO] [stderr] 37 | | } [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] 31 | match *self { [INFO] [stderr] 32 | Value::SimpleString(ref x) => Value::SimpleString(x), [INFO] [stderr] 33 | Value::ErrorString(ref x) => Value::ErrorString(x), [INFO] [stderr] 34 | Value::IntegerString(ref x) => Value::IntegerString(x), [INFO] [stderr] 35 | Value::BulkString(ref x) => Value::BulkString(x), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | / match self { [INFO] [stderr] 78 | | &Value::SimpleString(ref v) => v.as_ref(), [INFO] [stderr] 79 | | &Value::ErrorString(ref v) => v.as_ref(), [INFO] [stderr] 80 | | &Value::IntegerString(ref v) => v.as_ref(), [INFO] [stderr] 81 | | &Value::BulkString(ref v) => v.as_ref(), [INFO] [stderr] 82 | | &Value::Nil => &EMPTY, [INFO] [stderr] 83 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 77 | match *self { [INFO] [stderr] 78 | Value::SimpleString(ref v) => v.as_ref(), [INFO] [stderr] 79 | Value::ErrorString(ref v) => v.as_ref(), [INFO] [stderr] 80 | Value::IntegerString(ref v) => v.as_ref(), [INFO] [stderr] 81 | Value::BulkString(ref v) => v.as_ref(), [INFO] [stderr] 82 | Value::Nil => &EMPTY, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/redis_value.rs:88:12 [INFO] [stderr] | [INFO] [stderr] 88 | if s.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:104:9 [INFO] [stderr] | [INFO] [stderr] 104 | / match self { [INFO] [stderr] 105 | | &Value::Nil => "$-1\r\n".len(), [INFO] [stderr] 106 | | // $ (1 byte) + usize_size(content_len) + \r\n (2) + contents + \r\n (2) [INFO] [stderr] 107 | | &Value::BulkString(_) => 1 + usize_string_size(content_len) + 2 + content_len + 2, [INFO] [stderr] 108 | | // + (1 byte) + content_len + \r\n (2 bytes) [INFO] [stderr] 109 | | _ => 1 + content_len + 2, [INFO] [stderr] 110 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 104 | match *self { [INFO] [stderr] 105 | Value::Nil => "$-1\r\n".len(), [INFO] [stderr] 106 | // $ (1 byte) + usize_size(content_len) + \r\n (2) + contents + \r\n (2) [INFO] [stderr] 107 | Value::BulkString(_) => 1 + usize_string_size(content_len) + 2 + content_len + 2, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | / match self { [INFO] [stderr] 115 | | &Value::Nil => { [INFO] [stderr] 116 | | buf.put("$-1\r\n"); [INFO] [stderr] 117 | | } [INFO] [stderr] ... | [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 114 | match *self { [INFO] [stderr] 115 | Value::Nil => { [INFO] [stderr] 116 | buf.put("$-1\r\n"); [INFO] [stderr] 117 | } [INFO] [stderr] 118 | Value::SimpleString(ref b) => { [INFO] [stderr] 119 | buf.put(b'+'); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:163:9 [INFO] [stderr] | [INFO] [stderr] 163 | / match self { [INFO] [stderr] 164 | | &Node::Leaf(ref x) => x.iter(), [INFO] [stderr] 165 | | _ => ValueIter { value: None }, [INFO] [stderr] 166 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 163 | match *self { [INFO] [stderr] 164 | Node::Leaf(ref x) => x.iter(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:189:17 [INFO] [stderr] | [INFO] [stderr] 189 | / match node { [INFO] [stderr] 190 | | &Node::Open(n) => usize_string_size(n) + 3, // '*' + | \r\n [INFO] [stderr] 191 | | &Node::Close => 0, [INFO] [stderr] 192 | | &Node::Leaf(ref v) => v.size(), [INFO] [stderr] 193 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 189 | match *node { [INFO] [stderr] 190 | Node::Open(n) => usize_string_size(n) + 3, // '*' + | \r\n [INFO] [stderr] 191 | Node::Close => 0, [INFO] [stderr] 192 | Node::Leaf(ref v) => v.size(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:253:13 [INFO] [stderr] | [INFO] [stderr] 253 | / match node { [INFO] [stderr] 254 | | &Node::Open(n) => { [INFO] [stderr] 255 | | buf.put(b'*'); [INFO] [stderr] 256 | | buf.put(format!("{}", n)); [INFO] [stderr] ... | [INFO] [stderr] 262 | | _ => {} [INFO] [stderr] 263 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 253 | match *node { [INFO] [stderr] 254 | Node::Open(n) => { [INFO] [stderr] 255 | buf.put(b'*'); [INFO] [stderr] 256 | buf.put(format!("{}", n)); [INFO] [stderr] 257 | buf.put("\r\n"); [INFO] [stderr] 258 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | / match self { [INFO] [stderr] 276 | | &Values::One(ref v) => v.iter().map(|r| r.end - r.start).sum(), [INFO] [stderr] 277 | | &Values::Many(ref nodes) => nodes [INFO] [stderr] 278 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 281 | | .sum(), [INFO] [stderr] 282 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 275 | match *self { [INFO] [stderr] 276 | Values::One(ref v) => v.iter().map(|r| r.end - r.start).sum(), [INFO] [stderr] 277 | Values::Many(ref nodes) => nodes [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/redis_value.rs:331:25 [INFO] [stderr] | [INFO] [stderr] 331 | index = index + consumed; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `index += consumed` [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: an inclusive range would be more readable [INFO] [stderr] --> src/redis_value.rs:392:59 [INFO] [stderr] | [INFO] [stderr] 392 | let value = Value::BulkString(n + 1..n + bulk_len + 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `n + 1..=n + bulk_len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/commands.rs:61:34 [INFO] [stderr] | [INFO] [stderr] 61 | ParseGET(Some(v)) => match &v { [INFO] [stderr] | __________________________________^ [INFO] [stderr] 62 | | &Value::Nil => Error(ParseError::NilError), [INFO] [stderr] 63 | | _ => match node { [INFO] [stderr] 64 | | Node::Close => Done(Cmd::GET { key: v }), [INFO] [stderr] 65 | | _ => Error(ParseError::ExtraValues), [INFO] [stderr] 66 | | }, [INFO] [stderr] 67 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 61 | ParseGET(Some(v)) => match v { [INFO] [stderr] 62 | Value::Nil => Error(ParseError::NilError), [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/commands.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | / match state { [INFO] [stderr] 115 | | ParserState::Error(e) => return Err(e), [INFO] [stderr] 116 | | _ => (), [INFO] [stderr] 117 | | } [INFO] [stderr] | |_________^ help: try this: `if let ParserState::Error(e) = state { return Err(e) }` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:31:9 [INFO] [stderr] | [INFO] [stderr] 31 | / match self { [INFO] [stderr] 32 | | &Value::SimpleString(ref x) => Value::SimpleString(x), [INFO] [stderr] 33 | | &Value::ErrorString(ref x) => Value::ErrorString(x), [INFO] [stderr] 34 | | &Value::IntegerString(ref x) => Value::IntegerString(x), [INFO] [stderr] 35 | | &Value::BulkString(ref x) => Value::BulkString(x), [INFO] [stderr] 36 | | _ => Value::Nil, [INFO] [stderr] 37 | | } [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] 31 | match *self { [INFO] [stderr] 32 | Value::SimpleString(ref x) => Value::SimpleString(x), [INFO] [stderr] 33 | Value::ErrorString(ref x) => Value::ErrorString(x), [INFO] [stderr] 34 | Value::IntegerString(ref x) => Value::IntegerString(x), [INFO] [stderr] 35 | Value::BulkString(ref x) => Value::BulkString(x), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:77:9 [INFO] [stderr] | [INFO] [stderr] 77 | / match self { [INFO] [stderr] 78 | | &Value::SimpleString(ref v) => v.as_ref(), [INFO] [stderr] 79 | | &Value::ErrorString(ref v) => v.as_ref(), [INFO] [stderr] 80 | | &Value::IntegerString(ref v) => v.as_ref(), [INFO] [stderr] 81 | | &Value::BulkString(ref v) => v.as_ref(), [INFO] [stderr] 82 | | &Value::Nil => &EMPTY, [INFO] [stderr] 83 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 77 | match *self { [INFO] [stderr] 78 | Value::SimpleString(ref v) => v.as_ref(), [INFO] [stderr] 79 | Value::ErrorString(ref v) => v.as_ref(), [INFO] [stderr] 80 | Value::IntegerString(ref v) => v.as_ref(), [INFO] [stderr] 81 | Value::BulkString(ref v) => v.as_ref(), [INFO] [stderr] 82 | Value::Nil => &EMPTY, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/redis_value.rs:88:12 [INFO] [stderr] | [INFO] [stderr] 88 | if s.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:104:9 [INFO] [stderr] | [INFO] [stderr] 104 | / match self { [INFO] [stderr] 105 | | &Value::Nil => "$-1\r\n".len(), [INFO] [stderr] 106 | | // $ (1 byte) + usize_size(content_len) + \r\n (2) + contents + \r\n (2) [INFO] [stderr] 107 | | &Value::BulkString(_) => 1 + usize_string_size(content_len) + 2 + content_len + 2, [INFO] [stderr] 108 | | // + (1 byte) + content_len + \r\n (2 bytes) [INFO] [stderr] 109 | | _ => 1 + content_len + 2, [INFO] [stderr] 110 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 104 | match *self { [INFO] [stderr] 105 | Value::Nil => "$-1\r\n".len(), [INFO] [stderr] 106 | // $ (1 byte) + usize_size(content_len) + \r\n (2) + contents + \r\n (2) [INFO] [stderr] 107 | Value::BulkString(_) => 1 + usize_string_size(content_len) + 2 + content_len + 2, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | / match self { [INFO] [stderr] 115 | | &Value::Nil => { [INFO] [stderr] 116 | | buf.put("$-1\r\n"); [INFO] [stderr] 117 | | } [INFO] [stderr] ... | [INFO] [stderr] 139 | | } [INFO] [stderr] 140 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 114 | match *self { [INFO] [stderr] 115 | Value::Nil => { [INFO] [stderr] 116 | buf.put("$-1\r\n"); [INFO] [stderr] 117 | } [INFO] [stderr] 118 | Value::SimpleString(ref b) => { [INFO] [stderr] 119 | buf.put(b'+'); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:163:9 [INFO] [stderr] | [INFO] [stderr] 163 | / match self { [INFO] [stderr] 164 | | &Node::Leaf(ref x) => x.iter(), [INFO] [stderr] 165 | | _ => ValueIter { value: None }, [INFO] [stderr] 166 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 163 | match *self { [INFO] [stderr] 164 | Node::Leaf(ref x) => x.iter(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:189:17 [INFO] [stderr] | [INFO] [stderr] 189 | / match node { [INFO] [stderr] 190 | | &Node::Open(n) => usize_string_size(n) + 3, // '*' + | \r\n [INFO] [stderr] 191 | | &Node::Close => 0, [INFO] [stderr] 192 | | &Node::Leaf(ref v) => v.size(), [INFO] [stderr] 193 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 189 | match *node { [INFO] [stderr] 190 | Node::Open(n) => usize_string_size(n) + 3, // '*' + | \r\n [INFO] [stderr] 191 | Node::Close => 0, [INFO] [stderr] 192 | Node::Leaf(ref v) => v.size(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:253:13 [INFO] [stderr] | [INFO] [stderr] 253 | / match node { [INFO] [stderr] 254 | | &Node::Open(n) => { [INFO] [stderr] 255 | | buf.put(b'*'); [INFO] [stderr] 256 | | buf.put(format!("{}", n)); [INFO] [stderr] ... | [INFO] [stderr] 262 | | _ => {} [INFO] [stderr] 263 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 253 | match *node { [INFO] [stderr] 254 | Node::Open(n) => { [INFO] [stderr] 255 | buf.put(b'*'); [INFO] [stderr] 256 | buf.put(format!("{}", n)); [INFO] [stderr] 257 | buf.put("\r\n"); [INFO] [stderr] 258 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/redis_value.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | / match self { [INFO] [stderr] 276 | | &Values::One(ref v) => v.iter().map(|r| r.end - r.start).sum(), [INFO] [stderr] 277 | | &Values::Many(ref nodes) => nodes [INFO] [stderr] 278 | | .iter() [INFO] [stderr] ... | [INFO] [stderr] 281 | | .sum(), [INFO] [stderr] 282 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 275 | match *self { [INFO] [stderr] 276 | Values::One(ref v) => v.iter().map(|r| r.end - r.start).sum(), [INFO] [stderr] 277 | Values::Many(ref nodes) => nodes [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/redis_value.rs:331:25 [INFO] [stderr] | [INFO] [stderr] 331 | index = index + consumed; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `index += consumed` [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: an inclusive range would be more readable [INFO] [stderr] --> src/redis_value.rs:392:59 [INFO] [stderr] | [INFO] [stderr] 392 | let value = Value::BulkString(n + 1..n + bulk_len + 1); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: use: `n + 1..=n + bulk_len` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::range_plus_one)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#range_plus_one [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to both the expression and the patterns [INFO] [stderr] --> src/commands.rs:61:34 [INFO] [stderr] | [INFO] [stderr] 61 | ParseGET(Some(v)) => match &v { [INFO] [stderr] | __________________________________^ [INFO] [stderr] 62 | | &Value::Nil => Error(ParseError::NilError), [INFO] [stderr] 63 | | _ => match node { [INFO] [stderr] 64 | | Node::Close => Done(Cmd::GET { key: v }), [INFO] [stderr] 65 | | _ => Error(ParseError::ExtraValues), [INFO] [stderr] 66 | | }, [INFO] [stderr] 67 | | }, [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 61 | ParseGET(Some(v)) => match v { [INFO] [stderr] 62 | Value::Nil => Error(ParseError::NilError), [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/commands.rs:114:9 [INFO] [stderr] | [INFO] [stderr] 114 | / match state { [INFO] [stderr] 115 | | ParserState::Error(e) => return Err(e), [INFO] [stderr] 116 | | _ => (), [INFO] [stderr] 117 | | } [INFO] [stderr] | |_________^ help: try this: `if let ParserState::Error(e) = state { return Err(e) }` [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] Finished dev [unoptimized + debuginfo] target(s) in 17.77s [INFO] running `"docker" "inspect" "34a0af1a73716cf80e28d15129e7b6f0ae27c9e95b2e09203112c5c8c7b7ef51"` [INFO] running `"docker" "rm" "-f" "34a0af1a73716cf80e28d15129e7b6f0ae27c9e95b2e09203112c5c8c7b7ef51"` [INFO] [stdout] 34a0af1a73716cf80e28d15129e7b6f0ae27c9e95b2e09203112c5c8c7b7ef51