[INFO] updating cached repository asyade/tinyssh [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/asyade/tinyssh [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/asyade/tinyssh" "work/ex/clippy-test-run/sources/stable/gh/asyade/tinyssh"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable/gh/asyade/tinyssh'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/asyade/tinyssh" "work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/asyade/tinyssh"` [INFO] [stderr] Cloning into 'work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/asyade/tinyssh'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 56ddf05b4ccf9e70acacd5b2e8312b744eb257cd [INFO] sha for GitHub repo asyade/tinyssh: 56ddf05b4ccf9e70acacd5b2e8312b744eb257cd [INFO] validating manifest of asyade/tinyssh 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 asyade/tinyssh 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 asyade/tinyssh [INFO] finished frobbing asyade/tinyssh [INFO] frobbed toml for asyade/tinyssh written to work/ex/clippy-test-run/sources/stable/gh/asyade/tinyssh/Cargo.toml [INFO] started frobbing asyade/tinyssh [INFO] finished frobbing asyade/tinyssh [INFO] frobbed toml for asyade/tinyssh written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/gh/asyade/tinyssh/Cargo.toml [INFO] crate asyade/tinyssh 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 asyade/tinyssh against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/gh/asyade/tinyssh:/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] b8f2af1703312c80a77034534cb39092ea90ec1f5a60ad632d2a54bf78c3d0bb [INFO] running `"docker" "start" "-a" "b8f2af1703312c80a77034534cb39092ea90ec1f5a60ad632d2a54bf78c3d0bb"` [INFO] [stderr] Checking tinyssh v0.0.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/messages.rs:49:45 [INFO] [stderr] | [INFO] [stderr] 49 | return Option::Some(MessageContainer { id: id, content: String::from_utf8(buf).unwrap() }); [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/messages.rs:51:37 [INFO] [stderr] | [INFO] [stderr] 51 | Option::Some(MessageContainer { id: id, content:String::new() }) [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/interpretor.rs:39:42 [INFO] [stderr] | [INFO] [stderr] 39 | stream.send_message(MessageContainer { id: id, content: cnt.clone() }) [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/messages.rs:49:45 [INFO] [stderr] | [INFO] [stderr] 49 | return Option::Some(MessageContainer { id: id, content: String::from_utf8(buf).unwrap() }); [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_field_names)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names [INFO] [stderr] [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/messages.rs:51:37 [INFO] [stderr] | [INFO] [stderr] 51 | Option::Some(MessageContainer { id: id, content:String::new() }) [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/interpretor.rs:39:42 [INFO] [stderr] | [INFO] [stderr] 39 | stream.send_message(MessageContainer { id: id, content: cnt.clone() }) [INFO] [stderr] | ^^^^^^ help: replace it with: `id` [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/server.rs:19:3 [INFO] [stderr] | [INFO] [stderr] 19 | return true [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `true` [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: unused import: `std::fs::remove_file` [INFO] [stderr] --> src/server_handlers.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::fs::remove_file; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `msg` [INFO] [stderr] --> src/server.rs:17:54 [INFO] [stderr] | [INFO] [stderr] 17 | fn server_check_identification(client: &mut Client, msg: MessageContainer) -> bool { [INFO] [stderr] | ^^^ help: consider using `_msg` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/server.rs:19:3 [INFO] [stderr] | [INFO] [stderr] 19 | return true [INFO] [stderr] | ^^^^^^^^^^^ help: remove `return` as shown: `true` [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: unused import: `std::fs::remove_file` [INFO] [stderr] --> src/server_handlers.rs:4:5 [INFO] [stderr] | [INFO] [stderr] 4 | use std::fs::remove_file; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `IdentificationFailure` [INFO] [stderr] --> src/messages.rs:9:2 [INFO] [stderr] | [INFO] [stderr] 9 | IdentificationFailure = 3 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `usage` [INFO] [stderr] --> src/main.rs:21:1 [INFO] [stderr] | [INFO] [stderr] 21 | fn usage() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/server.rs:25:2 [INFO] [stderr] | [INFO] [stderr] 25 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 26 | | match client.stream.read_message() { [INFO] [stderr] 27 | | Some(msg) => { [INFO] [stderr] 28 | | if msg.id == LoginMessages::Identification as i32 { [INFO] [stderr] ... | [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [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/server.rs:60:3 [INFO] [stderr] | [INFO] [stderr] 60 | match inco { [INFO] [stderr] | _________^ [INFO] [stderr] 61 | | Ok(_) => { [INFO] [stderr] 62 | | //println!("[info]Client accepted !"); [INFO] [stderr] 63 | | server_handle_connect(inco.unwrap()); [INFO] [stderr] ... | [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 60 | if let Ok(_) = inco { [INFO] [stderr] 61 | //println!("[info]Client accepted !"); [INFO] [stderr] 62 | server_handle_connect(inco.unwrap()); [INFO] [stderr] 63 | } [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/server.rs:75:2 [INFO] [stderr] | [INFO] [stderr] 75 | match listener { [INFO] [stderr] | _____^ [INFO] [stderr] 76 | | Ok(_) => { [INFO] [stderr] 77 | | //println!("[info]Server waiting for connections ..."); [INFO] [stderr] 78 | | server_wait_connect(listener.unwrap()); [INFO] [stderr] ... | [INFO] [stderr] 82 | | } [INFO] [stderr] 83 | | } [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] 75 | if let Ok(_) = listener { [INFO] [stderr] 76 | //println!("[info]Server waiting for connections ..."); [INFO] [stderr] 77 | server_wait_connect(listener.unwrap()); [INFO] [stderr] 78 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/client.rs:37:26 [INFO] [stderr] | [INFO] [stderr] 37 | if buf.len() >= 3 && parse_cmd(&mut stream, buf) == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `parse_cmd(&mut stream, buf)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/messages.rs:62:3 [INFO] [stderr] | [INFO] [stderr] 62 | self.writer.write(&buffer).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/messages.rs:63:3 [INFO] [stderr] | [INFO] [stderr] 63 | self.writer.write(msg.content.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:48:11 [INFO] [stderr] | [INFO] [stderr] 48 | else if quoted == true && ch == '"' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try simplifying it as shown: `quoted` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lexer.rs:75:3 [INFO] [stderr] | [INFO] [stderr] 75 | loop { [INFO] [stderr] | _________^ [INFO] [stderr] 76 | | match pk.peek() { [INFO] [stderr] 77 | | Some(&ch) => match ch { [INFO] [stderr] 78 | | ';' => { [INFO] [stderr] ... | [INFO] [stderr] 90 | | } [INFO] [stderr] 91 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(&ch) = pk.peek() { .. }` [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: length comparison to zero [INFO] [stderr] --> src/parser.rs:28:6 [INFO] [stderr] | [INFO] [stderr] 28 | if cmd.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!cmd.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] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server_handlers.rs:22:3 [INFO] [stderr] | [INFO] [stderr] 22 | f.write(msg.content.as_bytes()).expect("[server]Can't write tmp"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/server_handlers.rs:48:10 [INFO] [stderr] | [INFO] [stderr] 48 | if let Ok(_) = reader.read_to_string(&mut file_content) [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 49 | | { [INFO] [stderr] 50 | | client.stream.send_message(MessageContainer { id: Response::FileDumpResult as i32, content: file_content }); [INFO] [stderr] 51 | | } [INFO] [stderr] 52 | | else { [INFO] [stderr] 53 | | client.stream.send_message(MessageContainer { id: Response::RequestFailure as i32, content: String::from("Can't read system result !") }); [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________- help: try this: `if reader.read_to_string(&mut file_content).is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/server_handlers.rs:78:96 [INFO] [stderr] | [INFO] [stderr] 78 | client.stream.send_message(MessageContainer { id: Response::RequestFailure as i32, content: String::from(format!("File dosen't exist : \"{}\" !", msg.content))}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("File dosen't exist : \"{}\" !", msg.content)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server_handlers.rs:85:2 [INFO] [stderr] | [INFO] [stderr] 85 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 86 | | match client.stream.read_message() { [INFO] [stderr] 87 | | Some(msg) => { [INFO] [stderr] 88 | | if msg.id >= 0 && msg.id < HANDLERS.len() as i32 && HANDLERS[msg.id as usize](msg, &mut client) == false { [INFO] [stderr] ... | [INFO] [stderr] 93 | | } [INFO] [stderr] 94 | | } [INFO] [stderr] | |_____^ help: try: `while let Some(msg) = client.stream.read_message() { .. }` [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: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/server_handlers.rs:88:57 [INFO] [stderr] | [INFO] [stderr] 88 | if msg.id >= 0 && msg.id < HANDLERS.len() as i32 && HANDLERS[msg.id as usize](msg, &mut client) == false { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!HANDLERS[msg.id as usize](msg, &mut client)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/interpretor.rs:27:10 [INFO] [stderr] | [INFO] [stderr] 27 | if cnt.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cnt.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `tinyssh`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: unused variable: `msg` [INFO] [stderr] --> src/server.rs:17:54 [INFO] [stderr] | [INFO] [stderr] 17 | fn server_check_identification(client: &mut Client, msg: MessageContainer) -> bool { [INFO] [stderr] | ^^^ help: consider using `_msg` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `IdentificationFailure` [INFO] [stderr] --> src/messages.rs:9:2 [INFO] [stderr] | [INFO] [stderr] 9 | IdentificationFailure = 3 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: function is never used: `usage` [INFO] [stderr] --> src/main.rs:21:1 [INFO] [stderr] | [INFO] [stderr] 21 | fn usage() { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: this loop never actually loops [INFO] [stderr] --> src/server.rs:25:2 [INFO] [stderr] | [INFO] [stderr] 25 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 26 | | match client.stream.read_message() { [INFO] [stderr] 27 | | Some(msg) => { [INFO] [stderr] 28 | | if msg.id == LoginMessages::Identification as i32 { [INFO] [stderr] ... | [INFO] [stderr] 52 | | } [INFO] [stderr] 53 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::never_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#never_loop [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/server.rs:60:3 [INFO] [stderr] | [INFO] [stderr] 60 | match inco { [INFO] [stderr] | _________^ [INFO] [stderr] 61 | | Ok(_) => { [INFO] [stderr] 62 | | //println!("[info]Client accepted !"); [INFO] [stderr] 63 | | server_handle_connect(inco.unwrap()); [INFO] [stderr] ... | [INFO] [stderr] 67 | | } [INFO] [stderr] 68 | | } [INFO] [stderr] | |_________^ [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] help: try this [INFO] [stderr] | [INFO] [stderr] 60 | if let Ok(_) = inco { [INFO] [stderr] 61 | //println!("[info]Client accepted !"); [INFO] [stderr] 62 | server_handle_connect(inco.unwrap()); [INFO] [stderr] 63 | } [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/server.rs:75:2 [INFO] [stderr] | [INFO] [stderr] 75 | match listener { [INFO] [stderr] | _____^ [INFO] [stderr] 76 | | Ok(_) => { [INFO] [stderr] 77 | | //println!("[info]Server waiting for connections ..."); [INFO] [stderr] 78 | | server_wait_connect(listener.unwrap()); [INFO] [stderr] ... | [INFO] [stderr] 82 | | } [INFO] [stderr] 83 | | } [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] 75 | if let Ok(_) = listener { [INFO] [stderr] 76 | //println!("[info]Server waiting for connections ..."); [INFO] [stderr] 77 | server_wait_connect(listener.unwrap()); [INFO] [stderr] 78 | } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/client.rs:37:26 [INFO] [stderr] | [INFO] [stderr] 37 | if buf.len() >= 3 && parse_cmd(&mut stream, buf) == true { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `parse_cmd(&mut stream, buf)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::bool_comparison)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/messages.rs:62:3 [INFO] [stderr] | [INFO] [stderr] 62 | self.writer.write(&buffer).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[deny(clippy::unused_io_amount)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/messages.rs:63:3 [INFO] [stderr] | [INFO] [stderr] 63 | self.writer.write(msg.content.as_bytes()).unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: equality checks against true are unnecessary [INFO] [stderr] --> src/lexer.rs:48:11 [INFO] [stderr] | [INFO] [stderr] 48 | else if quoted == true && ch == '"' { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try simplifying it as shown: `quoted` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> src/lexer.rs:75:3 [INFO] [stderr] | [INFO] [stderr] 75 | loop { [INFO] [stderr] | _________^ [INFO] [stderr] 76 | | match pk.peek() { [INFO] [stderr] 77 | | Some(&ch) => match ch { [INFO] [stderr] 78 | | ';' => { [INFO] [stderr] ... | [INFO] [stderr] 90 | | } [INFO] [stderr] 91 | | } [INFO] [stderr] | |_________^ help: try: `while let Some(&ch) = pk.peek() { .. }` [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: length comparison to zero [INFO] [stderr] --> src/parser.rs:28:6 [INFO] [stderr] | [INFO] [stderr] 28 | if cmd.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!cmd.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] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/server_handlers.rs:22:3 [INFO] [stderr] | [INFO] [stderr] 22 | f.write(msg.content.as_bytes()).expect("[server]Can't write tmp"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_io_amount [INFO] [stderr] [INFO] [stderr] warning: redundant pattern matching, consider using `is_ok()` [INFO] [stderr] --> src/server_handlers.rs:48:10 [INFO] [stderr] | [INFO] [stderr] 48 | if let Ok(_) = reader.read_to_string(&mut file_content) [INFO] [stderr] | _________- ^^^^^ [INFO] [stderr] 49 | | { [INFO] [stderr] 50 | | client.stream.send_message(MessageContainer { id: Response::FileDumpResult as i32, content: file_content }); [INFO] [stderr] 51 | | } [INFO] [stderr] 52 | | else { [INFO] [stderr] 53 | | client.stream.send_message(MessageContainer { id: Response::RequestFailure as i32, content: String::from("Can't read system result !") }); [INFO] [stderr] 54 | | } [INFO] [stderr] | |_________- help: try this: `if reader.read_to_string(&mut file_content).is_ok()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_pattern_matching)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_pattern_matching [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/server_handlers.rs:78:96 [INFO] [stderr] | [INFO] [stderr] 78 | client.stream.send_message(MessageContainer { id: Response::RequestFailure as i32, content: String::from(format!("File dosen't exist : \"{}\" !", msg.content))}); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `String::from()`: `format!("File dosen't exist : \"{}\" !", msg.content)` [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: this loop could be written as a `while let` loop [INFO] [stderr] --> src/server_handlers.rs:85:2 [INFO] [stderr] | [INFO] [stderr] 85 | loop { [INFO] [stderr] | _____^ [INFO] [stderr] 86 | | match client.stream.read_message() { [INFO] [stderr] 87 | | Some(msg) => { [INFO] [stderr] 88 | | if msg.id >= 0 && msg.id < HANDLERS.len() as i32 && HANDLERS[msg.id as usize](msg, &mut client) == false { [INFO] [stderr] ... | [INFO] [stderr] 93 | | } [INFO] [stderr] 94 | | } [INFO] [stderr] | |_____^ help: try: `while let Some(msg) = client.stream.read_message() { .. }` [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: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/server_handlers.rs:88:57 [INFO] [stderr] | [INFO] [stderr] 88 | if msg.id >= 0 && msg.id < HANDLERS.len() as i32 && HANDLERS[msg.id as usize](msg, &mut client) == false { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!HANDLERS[msg.id as usize](msg, &mut client)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#bool_comparison [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/interpretor.rs:27:10 [INFO] [stderr] | [INFO] [stderr] 27 | if cnt.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `cnt.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] error: aborting due to 4 previous errors [INFO] [stderr] [INFO] [stderr] error: Could not compile `tinyssh`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "b8f2af1703312c80a77034534cb39092ea90ec1f5a60ad632d2a54bf78c3d0bb"` [INFO] running `"docker" "rm" "-f" "b8f2af1703312c80a77034534cb39092ea90ec1f5a60ad632d2a54bf78c3d0bb"` [INFO] [stdout] b8f2af1703312c80a77034534cb39092ea90ec1f5a60ad632d2a54bf78c3d0bb