[INFO] crate milstian-http 0.1.9 is already in cache [INFO] extracting crate milstian-http 0.1.9 into work/ex/clippy-test-run/sources/stable/reg/milstian-http/0.1.9 [INFO] extracting crate milstian-http 0.1.9 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/milstian-http/0.1.9 [INFO] validating manifest of milstian-http-0.1.9 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 milstian-http-0.1.9 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 milstian-http-0.1.9 [INFO] finished frobbing milstian-http-0.1.9 [INFO] frobbed toml for milstian-http-0.1.9 written to work/ex/clippy-test-run/sources/stable/reg/milstian-http/0.1.9/Cargo.toml [INFO] started frobbing milstian-http-0.1.9 [INFO] finished frobbing milstian-http-0.1.9 [INFO] frobbed toml for milstian-http-0.1.9 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/milstian-http/0.1.9/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 milstian-http-0.1.9 against stable+rustflags=-Dclippy::into_iter_on_array for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-6/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/milstian-http/0.1.9:/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 -Dclippy::into_iter_on_array" "-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] 23e96b7b9d1942020322c1c93305b4385869e46214e286db4338ccad1cfd84a2 [INFO] running `"docker" "start" "-a" "23e96b7b9d1942020322c1c93305b4385869e46214e286db4338ccad1cfd84a2"` [INFO] [stderr] Checking milstian-http v0.1.9 (/opt/crater/workdir) [INFO] [stderr] warning: consider choosing a more descriptive name [INFO] [stderr] --> src/request.rs:358:17 [INFO] [stderr] | [INFO] [stderr] 358 | __ => Method::Invalid, [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::just_underscores_and_digits)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#just_underscores_and_digits [INFO] [stderr] [INFO] [stderr] warning: consider choosing a more descriptive name [INFO] [stderr] --> src/request.rs:358:17 [INFO] [stderr] | [INFO] [stderr] 358 | __ => Method::Invalid, [INFO] [stderr] | ^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::just_underscores_and_digits)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#just_underscores_and_digits [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/request.rs:233:28 [INFO] [stderr] | [INFO] [stderr] 233 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 234 | | if let Some((header_key, header_value)) = [INFO] [stderr] 235 | | Message::get_header_field(utf8_line) [INFO] [stderr] 236 | | { [INFO] [stderr] 237 | | headers.insert(header_key, header_value); [INFO] [stderr] 238 | | } [INFO] [stderr] 239 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 233 | } else if let Some((header_key, header_value)) = [INFO] [stderr] 234 | Message::get_header_field(utf8_line) [INFO] [stderr] 235 | { [INFO] [stderr] 236 | headers.insert(header_key, header_value); [INFO] [stderr] 237 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/request.rs:739:24 [INFO] [stderr] | [INFO] [stderr] 739 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 740 | | if let Some((header_key, header_value)) = Message::get_header_field(line) { [INFO] [stderr] 741 | | message.headers.insert(header_key, header_value); [INFO] [stderr] 742 | | } [INFO] [stderr] 743 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 739 | } else if let Some((header_key, header_value)) = Message::get_header_field(line) { [INFO] [stderr] 740 | message.headers.insert(header_key, header_value); [INFO] [stderr] 741 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/request.rs:233:28 [INFO] [stderr] | [INFO] [stderr] 233 | } else { [INFO] [stderr] | ____________________________^ [INFO] [stderr] 234 | | if let Some((header_key, header_value)) = [INFO] [stderr] 235 | | Message::get_header_field(utf8_line) [INFO] [stderr] 236 | | { [INFO] [stderr] 237 | | headers.insert(header_key, header_value); [INFO] [stderr] 238 | | } [INFO] [stderr] 239 | | } [INFO] [stderr] | |_____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::collapsible_if)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 233 | } else if let Some((header_key, header_value)) = [INFO] [stderr] 234 | Message::get_header_field(utf8_line) [INFO] [stderr] 235 | { [INFO] [stderr] 236 | headers.insert(header_key, header_value); [INFO] [stderr] 237 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: this `else { if .. }` block can be collapsed [INFO] [stderr] --> src/request.rs:739:24 [INFO] [stderr] | [INFO] [stderr] 739 | } else { [INFO] [stderr] | ________________________^ [INFO] [stderr] 740 | | if let Some((header_key, header_value)) = Message::get_header_field(line) { [INFO] [stderr] 741 | | message.headers.insert(header_key, header_value); [INFO] [stderr] 742 | | } [INFO] [stderr] 743 | | } [INFO] [stderr] | |_________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 739 | } else if let Some((header_key, header_value)) = Message::get_header_field(line) { [INFO] [stderr] 740 | message.headers.insert(header_key, header_value); [INFO] [stderr] 741 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:95:17 [INFO] [stderr] | [INFO] [stderr] 95 | params_subblock_count = params_subblock_count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `params_subblock_count += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | params_block_count = params_block_count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `params_block_count += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:247:13 [INFO] [stderr] | [INFO] [stderr] 247 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:269:62 [INFO] [stderr] | [INFO] [stderr] 269 | let subject_arguments: Vec<&str> = subject.split("&").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:271:55 [INFO] [stderr] | [INFO] [stderr] 271 | let query_arg: Vec<&str> = item.split("=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/request.rs:279:12 [INFO] [stderr] | [INFO] [stderr] 279 | if args.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!args.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:306:51 [INFO] [stderr] | [INFO] [stderr] 306 | let parts: Vec<&str> = line.splitn(2, ":").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:312:67 [INFO] [stderr] | [INFO] [stderr] 312 | let params_blocks: Vec<&str> = header_value.split(";").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `';'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:315:74 [INFO] [stderr] | [INFO] [stderr] 315 | let params_subblocks: Vec<&str> = params_block.split(",").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/request.rs:317:53 [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = params_subblock.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = &(*params_subblock).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = &str::clone(params_subblock); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:319:61 [INFO] [stderr] | [INFO] [stderr] 319 | params_subblock_clone.splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:346:43 [INFO] [stderr] | [INFO] [stderr] 346 | let parts: Vec<&str> = line.split(" ").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/request.rs:348:32 [INFO] [stderr] | [INFO] [stderr] 348 | let method = match parts.get(0)?.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `parts.get(0)?` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_asref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:366:67 [INFO] [stderr] | [INFO] [stderr] 366 | let uri_parts: Vec<&str> = request_uri_copy.splitn(2, "?").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/request.rs:375:34 [INFO] [stderr] | [INFO] [stderr] 375 | let protocol = match parts.get(2)?.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `parts.get(2)?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:407:71 [INFO] [stderr] | [INFO] [stderr] 407 | let uri_parts: Vec<&str> = request_uri_copy.splitn(2, "?").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 42 [INFO] [stderr] --> src/request.rs:440:5 [INFO] [stderr] | [INFO] [stderr] 440 | / pub fn from_tcp_stream(request: &[u8]) -> Option { [INFO] [stderr] 441 | | // Temporary message [INFO] [stderr] 442 | | let mut message = Message { [INFO] [stderr] 443 | | body: BodyContentType::SinglePart(HashMap::new()), [INFO] [stderr] ... | [INFO] [stderr] 706 | | None [INFO] [stderr] 707 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:507:45 [INFO] [stderr] | [INFO] [stderr] 507 | start_boundary = start_boundary + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_boundary += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:624:45 [INFO] [stderr] | [INFO] [stderr] 624 | start_boundary = start_boundary + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_boundary += 1` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/request.rs:676:41 [INFO] [stderr] | [INFO] [stderr] 676 | let clean_end = match byte { [INFO] [stderr] | _________________________________________^ [INFO] [stderr] 677 | | &0 => end, [INFO] [stderr] 678 | | _ => end + 1, [INFO] [stderr] 679 | | }; [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] 676 | let clean_end = match *byte { [INFO] [stderr] 677 | 0 => end, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:696:13 [INFO] [stderr] | [INFO] [stderr] 696 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [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: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/response.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn to_string(&mut self) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/response.rs:108:21 [INFO] [stderr] | [INFO] [stderr] 108 | pub fn to_bytes(&mut self) -> Vec { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:63:39 [INFO] [stderr] | [INFO] [stderr] 63 | let parts: Vec<&str> = word.split("-").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'-'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `milstian-http`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:95:17 [INFO] [stderr] | [INFO] [stderr] 95 | params_subblock_count = params_subblock_count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `params_subblock_count += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:97:13 [INFO] [stderr] | [INFO] [stderr] 97 | params_block_count = params_block_count + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `params_block_count += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:247:13 [INFO] [stderr] | [INFO] [stderr] 247 | index = index + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ help: replace it with: `index += 1` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:269:62 [INFO] [stderr] | [INFO] [stderr] 269 | let subject_arguments: Vec<&str> = subject.split("&").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'&'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:271:55 [INFO] [stderr] | [INFO] [stderr] 271 | let query_arg: Vec<&str> = item.split("=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/request.rs:279:12 [INFO] [stderr] | [INFO] [stderr] 279 | if args.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!args.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:306:51 [INFO] [stderr] | [INFO] [stderr] 306 | let parts: Vec<&str> = line.splitn(2, ":").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:312:67 [INFO] [stderr] | [INFO] [stderr] 312 | let params_blocks: Vec<&str> = header_value.split(";").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `';'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:315:74 [INFO] [stderr] | [INFO] [stderr] 315 | let params_subblocks: Vec<&str> = params_block.split(",").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `','` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: using `clone` on a double-reference; this will copy the reference instead of cloning the inner type [INFO] [stderr] --> src/request.rs:317:53 [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = params_subblock.clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::clone_double_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_double_ref [INFO] [stderr] help: try dereferencing it [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = &(*params_subblock).clone(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] help: or try being explicit about what type to clone [INFO] [stderr] | [INFO] [stderr] 317 | let params_subblock_clone = &str::clone(params_subblock); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:319:61 [INFO] [stderr] | [INFO] [stderr] 319 | params_subblock_clone.splitn(2, "=").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'='` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:346:43 [INFO] [stderr] | [INFO] [stderr] 346 | let parts: Vec<&str> = line.split(" ").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `' '` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/request.rs:348:32 [INFO] [stderr] | [INFO] [stderr] 348 | let method = match parts.get(0)?.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `parts.get(0)?` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_asref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:366:67 [INFO] [stderr] | [INFO] [stderr] 366 | let uri_parts: Vec<&str> = request_uri_copy.splitn(2, "?").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/request.rs:375:34 [INFO] [stderr] | [INFO] [stderr] 375 | let protocol = match parts.get(2)?.as_ref() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ help: try this: `parts.get(2)?` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/request.rs:407:71 [INFO] [stderr] | [INFO] [stderr] 407 | let uri_parts: Vec<&str> = request_uri_copy.splitn(2, "?").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'?'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 42 [INFO] [stderr] --> src/request.rs:440:5 [INFO] [stderr] | [INFO] [stderr] 440 | / pub fn from_tcp_stream(request: &[u8]) -> Option { [INFO] [stderr] 441 | | // Temporary message [INFO] [stderr] 442 | | let mut message = Message { [INFO] [stderr] 443 | | body: BodyContentType::SinglePart(HashMap::new()), [INFO] [stderr] ... | [INFO] [stderr] 706 | | None [INFO] [stderr] 707 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cyclomatic_complexity)] on by default [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:507:45 [INFO] [stderr] | [INFO] [stderr] 507 | start_boundary = start_boundary + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_boundary += 1` [INFO] [stderr] | [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: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:624:45 [INFO] [stderr] | [INFO] [stderr] 624 | start_boundary = start_boundary + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `start_boundary += 1` [INFO] [stderr] | [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/request.rs:676:41 [INFO] [stderr] | [INFO] [stderr] 676 | let clean_end = match byte { [INFO] [stderr] | _________________________________________^ [INFO] [stderr] 677 | | &0 => end, [INFO] [stderr] 678 | | _ => end + 1, [INFO] [stderr] 679 | | }; [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] 676 | let clean_end = match *byte { [INFO] [stderr] 677 | 0 => end, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/request.rs:696:13 [INFO] [stderr] | [INFO] [stderr] 696 | end = end + 1; [INFO] [stderr] | ^^^^^^^^^^^^^ help: replace it with: `end += 1` [INFO] [stderr] | [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: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:768:17 [INFO] [stderr] | [INFO] [stderr] 768 | / response_unwrapped [INFO] [stderr] 769 | | .get(&"random".to_string()) [INFO] [stderr] 770 | | .unwrap() [INFO] [stderr] | |_____________________________^ help: try this: `&response_unwrapped[&"random".to_string()]` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::get_unwrap)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:775:17 [INFO] [stderr] | [INFO] [stderr] 775 | / response_unwrapped [INFO] [stderr] 776 | | .get(&"hej".to_string()) [INFO] [stderr] 777 | | .unwrap() [INFO] [stderr] | |_____________________________^ help: try this: `&response_unwrapped[&"hej".to_string()]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:782:17 [INFO] [stderr] | [INFO] [stderr] 782 | / response_unwrapped [INFO] [stderr] 783 | | .get(&"def".to_string()) [INFO] [stderr] 784 | | .unwrap() [INFO] [stderr] | |_____________________________^ help: try this: `&response_unwrapped[&"def".to_string()]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:804:17 [INFO] [stderr] | [INFO] [stderr] 804 | / query_value [INFO] [stderr] 805 | | .headers [INFO] [stderr] 806 | | .get("Content-Disposition") [INFO] [stderr] 807 | | .unwrap() [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 804 | &query_value [INFO] [stderr] 805 | .headers["Content-Disposition"] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:835:17 [INFO] [stderr] | [INFO] [stderr] 835 | / query_value [INFO] [stderr] 836 | | .headers [INFO] [stderr] 837 | | .get("Content-Disposition") [INFO] [stderr] 838 | | .unwrap() [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 835 | &query_value [INFO] [stderr] 836 | .headers["Content-Disposition"] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 27 [INFO] [stderr] --> src/request.rs:893:5 [INFO] [stderr] | [INFO] [stderr] 893 | / fn test_get_request_line() { [INFO] [stderr] 894 | | let response = Message::get_request_line("POST /random?abc=test HTTP/0.9\r\n"); [INFO] [stderr] 895 | | assert!(response.is_some()); [INFO] [stderr] 896 | | [INFO] [stderr] ... | [INFO] [stderr] 969 | | assert!(response.is_none()); [INFO] [stderr] 970 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:906:13 [INFO] [stderr] | [INFO] [stderr] 906 | / response_unpacked [INFO] [stderr] 907 | | .query_arguments [INFO] [stderr] 908 | | .get(&"abc".to_string()) [INFO] [stderr] 909 | | .unwrap() [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 906 | &response_unpacked [INFO] [stderr] 907 | .query_arguments[&"abc".to_string()] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:940:13 [INFO] [stderr] | [INFO] [stderr] 940 | / response_unpacked [INFO] [stderr] 941 | | .query_arguments [INFO] [stderr] 942 | | .get(&"test".to_string()) [INFO] [stderr] 943 | | .unwrap() [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 940 | &response_unpacked [INFO] [stderr] 941 | .query_arguments[&"test".to_string()] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:948:13 [INFO] [stderr] | [INFO] [stderr] 948 | / response_unpacked [INFO] [stderr] 949 | | .query_arguments [INFO] [stderr] 950 | | .get(&"abc".to_string()) [INFO] [stderr] 951 | | .unwrap() [INFO] [stderr] | |_________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 948 | &response_unpacked [INFO] [stderr] 949 | .query_arguments[&"abc".to_string()] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: the function has a cyclomatic complexity of 32 [INFO] [stderr] --> src/request.rs:973:5 [INFO] [stderr] | [INFO] [stderr] 973 | / fn test_from_tcp_stream() { [INFO] [stderr] 974 | | // GET request with no headers or body [INFO] [stderr] 975 | | let response = Message::from_tcp_stream(b"GET / HTTP/2.0\r\n"); [INFO] [stderr] 976 | | assert!(response.is_some()); [INFO] [stderr] ... | [INFO] [stderr] 1106 | | assert!(response.is_none()); [INFO] [stderr] 1107 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: you could split it up into multiple smaller functions [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cyclomatic_complexity [INFO] [stderr] [INFO] [stderr] warning: called `.get().unwrap()` on a HashMap. Using `[]` is more clear and more concise [INFO] [stderr] --> src/request.rs:1082:17 [INFO] [stderr] | [INFO] [stderr] 1082 | body.get(&"abc".to_string()).unwrap().to_string(), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `&body[&"abc".to_string()]` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#get_unwrap [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/response.rs:73:22 [INFO] [stderr] | [INFO] [stderr] 73 | pub fn to_string(&mut self) -> String { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::wrong_self_convention)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: methods called `to_*` usually take self by reference; consider choosing a less ambiguous name [INFO] [stderr] --> src/response.rs:108:21 [INFO] [stderr] | [INFO] [stderr] 108 | pub fn to_bytes(&mut self) -> Vec { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> src/lib.rs:63:39 [INFO] [stderr] | [INFO] [stderr] 63 | let parts: Vec<&str> = word.split("-").collect(); [INFO] [stderr] | ^^^ help: try using a char instead: `'-'` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `milstian-http`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "23e96b7b9d1942020322c1c93305b4385869e46214e286db4338ccad1cfd84a2"` [INFO] running `"docker" "rm" "-f" "23e96b7b9d1942020322c1c93305b4385869e46214e286db4338ccad1cfd84a2"` [INFO] [stdout] 23e96b7b9d1942020322c1c93305b4385869e46214e286db4338ccad1cfd84a2