[INFO] crate ftp 3.0.1 is already in cache [INFO] extracting crate ftp 3.0.1 into work/ex/clippy-test-run/sources/stable/reg/ftp/3.0.1 [INFO] extracting crate ftp 3.0.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ftp/3.0.1 [INFO] validating manifest of ftp-3.0.1 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of ftp-3.0.1 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing ftp-3.0.1 [INFO] finished frobbing ftp-3.0.1 [INFO] frobbed toml for ftp-3.0.1 written to work/ex/clippy-test-run/sources/stable/reg/ftp/3.0.1/Cargo.toml [INFO] started frobbing ftp-3.0.1 [INFO] finished frobbing ftp-3.0.1 [INFO] frobbed toml for ftp-3.0.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/ftp/3.0.1/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting ftp-3.0.1 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/reg/ftp/3.0.1:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] 50dd32cf79c63d0d613436ca3b91beca5d20b5c6643a76778b0effc33039a607 [INFO] running `"docker" "start" "-a" "50dd32cf79c63d0d613436ca3b91beca5d20b5c6643a76778b0effc33039a607"` [INFO] [stderr] Checking ftp v3.0.1 (/opt/crater/workdir) [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | .map_err(|e| FtpError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:154:18 [INFO] [stderr] | [INFO] [stderr] 154 | .map(|stream| DataStream::Tcp(stream)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `DataStream::Tcp` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:153:32 [INFO] [stderr] | [INFO] [stderr] 153 | .map_err(|e| FtpError::ConnectionError(e))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/ftp.rs:250:14 [INFO] [stderr] | [INFO] [stderr] 250 | .ok_or(FtpError::InvalidResponse(format!("Invalid PASV response: {}", line))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| FtpError::InvalidResponse(format!("Invalid PASV response: {}", line)))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ftp.rs:263:29 [INFO] [stderr] | [INFO] [stderr] 263 | let port = ((msb as u16) << 8) + lsb as u16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(msb)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ftp.rs:263:50 [INFO] [stderr] | [INFO] [stderr] 263 | let port = ((msb as u16) << 8) + lsb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(lsb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:266:30 [INFO] [stderr] | [INFO] [stderr] 266 | .map_err(|parse_err| FtpError::InvalidAddress(parse_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::InvalidAddress` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:354:16 [INFO] [stderr] | [INFO] [stderr] 354 | }).map(|buffer| Cursor::new(buffer)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Cursor::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:353:69 [INFO] [stderr] | [INFO] [stderr] 353 | reader.read_to_end(&mut buffer).map(|_| buffer).map_err(|read_err| FtpError::ConnectionError(read_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:374:22 [INFO] [stderr] | [INFO] [stderr] 374 | .map_err(|read_err| FtpError::ConnectionError(read_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:396:78 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| s.len() > 0)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ftp.rs:396:43 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| s.len() > 0)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `line.split("\r\n")` [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: length comparison to zero [INFO] [stderr] --> src/ftp.rs:396:110 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| 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: redundant closure found [INFO] [stderr] --> src/ftp.rs:466:22 [INFO] [stderr] | [INFO] [stderr] 466 | .map_err(|send_err| FtpError::ConnectionError(send_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:477:23 [INFO] [stderr] | [INFO] [stderr] 477 | .map_err(|read_err| FtpError::ConnectionError(read_err))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/ftp.rs:506:26 [INFO] [stderr] | [INFO] [stderr] 506 | if expected_code.into_iter().any(|ec| code == *ec) { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &DataStream::Tcp(ref stream) => stream, [INFO] [stderr] 39 | | #[cfg(feature = "secure")] [INFO] [stderr] 40 | | &DataStream::Ssl(ref stream) => stream.get_ref(), [INFO] [stderr] 41 | | } [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] 37 | match *self { [INFO] [stderr] 38 | DataStream::Tcp(ref stream) => stream, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:47:9 [INFO] [stderr] | [INFO] [stderr] 47 | / match self { [INFO] [stderr] 48 | | &mut DataStream::Tcp(ref mut stream) => stream.read(buf), [INFO] [stderr] 49 | | #[cfg(feature = "secure")] [INFO] [stderr] 50 | | &mut DataStream::Ssl(ref mut stream) => stream.read(buf), [INFO] [stderr] 51 | | } [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] 47 | match *self { [INFO] [stderr] 48 | DataStream::Tcp(ref mut stream) => stream.read(buf), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &mut DataStream::Tcp(ref mut stream) => stream.write(buf), [INFO] [stderr] 60 | | #[cfg(feature = "secure")] [INFO] [stderr] 61 | | &mut DataStream::Ssl(ref mut stream) => stream.write(buf), [INFO] [stderr] 62 | | } [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] 58 | match *self { [INFO] [stderr] 59 | DataStream::Tcp(ref mut stream) => stream.write(buf), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &mut DataStream::Tcp(ref mut stream) => stream.flush(), [INFO] [stderr] 68 | | #[cfg(feature = "secure")] [INFO] [stderr] 69 | | &mut DataStream::Ssl(ref mut stream) => stream.flush(), [INFO] [stderr] 70 | | } [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] 66 | match *self { [INFO] [stderr] 67 | DataStream::Tcp(ref mut stream) => stream.flush(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/types.rs:54:9 [INFO] [stderr] | [INFO] [stderr] 54 | / match self { [INFO] [stderr] 55 | | &FormatControl::Default | &FormatControl::NonPrint => String::from("N"), [INFO] [stderr] 56 | | &FormatControl::Telnet => String::from("T"), [INFO] [stderr] 57 | | &FormatControl::Asa => String::from("C"), [INFO] [stderr] 58 | | } [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] 54 | match *self { [INFO] [stderr] 55 | FormatControl::Default | FormatControl::NonPrint => String::from("N"), [INFO] [stderr] 56 | FormatControl::Telnet => String::from("T"), [INFO] [stderr] 57 | FormatControl::Asa => String::from("C"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:45:22 [INFO] [stderr] | [INFO] [stderr] 45 | .map_err(|e| FtpError::ConnectionError(e)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::redundant_closure)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/types.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | / match self { [INFO] [stderr] 65 | | &FileType::Ascii(ref fc) => format!("A {}", fc.to_string()), [INFO] [stderr] 66 | | &FileType::Ebcdic(ref fc) => format!("E {}", fc.to_string()), [INFO] [stderr] 67 | | &FileType::Image | &FileType::Binary => String::from("I"), [INFO] [stderr] 68 | | &FileType::Local(ref bits) => format!("L {}", bits), [INFO] [stderr] 69 | | } [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] 64 | match *self { [INFO] [stderr] 65 | FileType::Ascii(ref fc) => format!("A {}", fc.to_string()), [INFO] [stderr] 66 | FileType::Ebcdic(ref fc) => format!("E {}", fc.to_string()), [INFO] [stderr] 67 | FileType::Image | FileType::Binary => String::from("I"), [INFO] [stderr] 68 | FileType::Local(ref bits) => format!("L {}", bits), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:154:18 [INFO] [stderr] | [INFO] [stderr] 154 | .map(|stream| DataStream::Tcp(stream)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `DataStream::Tcp` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:153:32 [INFO] [stderr] | [INFO] [stderr] 153 | .map_err(|e| FtpError::ConnectionError(e))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: use of `ok_or` followed by a function call [INFO] [stderr] --> src/ftp.rs:250:14 [INFO] [stderr] | [INFO] [stderr] 250 | .ok_or(FtpError::InvalidResponse(format!("Invalid PASV response: {}", line))) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `ok_or_else(|| FtpError::InvalidResponse(format!("Invalid PASV response: {}", line)))` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::or_fun_call)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#or_fun_call [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ftp.rs:263:29 [INFO] [stderr] | [INFO] [stderr] 263 | let port = ((msb as u16) << 8) + lsb as u16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `u16::from(msb)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::cast_lossless)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: casting u8 to u16 may become silently lossy if types change [INFO] [stderr] --> src/ftp.rs:263:50 [INFO] [stderr] | [INFO] [stderr] 263 | let port = ((msb as u16) << 8) + lsb as u16; [INFO] [stderr] | ^^^^^^^^^^ help: try: `u16::from(lsb)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#cast_lossless [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:266:30 [INFO] [stderr] | [INFO] [stderr] 266 | .map_err(|parse_err| FtpError::InvalidAddress(parse_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::InvalidAddress` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:354:16 [INFO] [stderr] | [INFO] [stderr] 354 | }).map(|buffer| Cursor::new(buffer)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `Cursor::new` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:353:69 [INFO] [stderr] | [INFO] [stderr] 353 | reader.read_to_end(&mut buffer).map(|_| buffer).map_err(|read_err| FtpError::ConnectionError(read_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:374:22 [INFO] [stderr] | [INFO] [stderr] 374 | .map_err(|read_err| FtpError::ConnectionError(read_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:396:78 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| s.len() > 0)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `String::from` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/ftp.rs:396:43 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| s.len() > 0)), [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `line.split("\r\n")` [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: length comparison to zero [INFO] [stderr] --> src/ftp.rs:396:110 [INFO] [stderr] | [INFO] [stderr] 396 | Ok(_) => lines.extend(line.split("\r\n").into_iter().map(|s| String::from(s)).filter(|s| 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: redundant closure found [INFO] [stderr] --> src/ftp.rs:466:22 [INFO] [stderr] | [INFO] [stderr] 466 | .map_err(|send_err| FtpError::ConnectionError(send_err)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: redundant closure found [INFO] [stderr] --> src/ftp.rs:477:23 [INFO] [stderr] | [INFO] [stderr] 477 | .map_err(|read_err| FtpError::ConnectionError(read_err))); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove closure as shown: `FtpError::ConnectionError` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure [INFO] [stderr] [INFO] [stderr] warning: this .into_iter() call is equivalent to .iter() and will not move the slice [INFO] [stderr] --> src/ftp.rs:506:26 [INFO] [stderr] | [INFO] [stderr] 506 | if expected_code.into_iter().any(|ec| code == *ec) { [INFO] [stderr] | ^^^^^^^^^ help: call directly: `iter` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::into_iter_on_ref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#into_iter_on_ref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | / match self { [INFO] [stderr] 38 | | &DataStream::Tcp(ref stream) => stream, [INFO] [stderr] 39 | | #[cfg(feature = "secure")] [INFO] [stderr] 40 | | &DataStream::Ssl(ref stream) => stream.get_ref(), [INFO] [stderr] 41 | | } [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] 37 | match *self { [INFO] [stderr] 38 | DataStream::Tcp(ref stream) => stream, [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:47:9 [INFO] [stderr] | [INFO] [stderr] 47 | / match self { [INFO] [stderr] 48 | | &mut DataStream::Tcp(ref mut stream) => stream.read(buf), [INFO] [stderr] 49 | | #[cfg(feature = "secure")] [INFO] [stderr] 50 | | &mut DataStream::Ssl(ref mut stream) => stream.read(buf), [INFO] [stderr] 51 | | } [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] 47 | match *self { [INFO] [stderr] 48 | DataStream::Tcp(ref mut stream) => stream.read(buf), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:58:9 [INFO] [stderr] | [INFO] [stderr] 58 | / match self { [INFO] [stderr] 59 | | &mut DataStream::Tcp(ref mut stream) => stream.write(buf), [INFO] [stderr] 60 | | #[cfg(feature = "secure")] [INFO] [stderr] 61 | | &mut DataStream::Ssl(ref mut stream) => stream.write(buf), [INFO] [stderr] 62 | | } [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] 58 | match *self { [INFO] [stderr] 59 | DataStream::Tcp(ref mut stream) => stream.write(buf), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/data_stream.rs:66:9 [INFO] [stderr] | [INFO] [stderr] 66 | / match self { [INFO] [stderr] 67 | | &mut DataStream::Tcp(ref mut stream) => stream.flush(), [INFO] [stderr] 68 | | #[cfg(feature = "secure")] [INFO] [stderr] 69 | | &mut DataStream::Ssl(ref mut stream) => stream.flush(), [INFO] [stderr] 70 | | } [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] 66 | match *self { [INFO] [stderr] 67 | DataStream::Tcp(ref mut stream) => stream.flush(), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/types.rs:54:9 [INFO] [stderr] | [INFO] [stderr] 54 | / match self { [INFO] [stderr] 55 | | &FormatControl::Default | &FormatControl::NonPrint => String::from("N"), [INFO] [stderr] 56 | | &FormatControl::Telnet => String::from("T"), [INFO] [stderr] 57 | | &FormatControl::Asa => String::from("C"), [INFO] [stderr] 58 | | } [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] 54 | match *self { [INFO] [stderr] 55 | FormatControl::Default | FormatControl::NonPrint => String::from("N"), [INFO] [stderr] 56 | FormatControl::Telnet => String::from("T"), [INFO] [stderr] 57 | FormatControl::Asa => String::from("C"), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/types.rs:64:9 [INFO] [stderr] | [INFO] [stderr] 64 | / match self { [INFO] [stderr] 65 | | &FileType::Ascii(ref fc) => format!("A {}", fc.to_string()), [INFO] [stderr] 66 | | &FileType::Ebcdic(ref fc) => format!("E {}", fc.to_string()), [INFO] [stderr] 67 | | &FileType::Image | &FileType::Binary => String::from("I"), [INFO] [stderr] 68 | | &FileType::Local(ref bits) => format!("L {}", bits), [INFO] [stderr] 69 | | } [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] 64 | match *self { [INFO] [stderr] 65 | FileType::Ascii(ref fc) => format!("A {}", fc.to_string()), [INFO] [stderr] 66 | FileType::Ebcdic(ref fc) => format!("E {}", fc.to_string()), [INFO] [stderr] 67 | FileType::Image | FileType::Binary => String::from("I"), [INFO] [stderr] 68 | FileType::Local(ref bits) => format!("L {}", bits), [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: useless use of `format!` [INFO] [stderr] --> examples/connecting.rs:21:21 [INFO] [stderr] | [INFO] [stderr] 21 | let file_data = format!("Some awesome file data man!!"); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using .to_string(): `"Some awesome file data man!!".to_string()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_format)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stderr] [INFO] [stderr] warning: this let-binding has unit value. Consider omitting `let _ =` [INFO] [stderr] --> tests/lib.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | let _ = ftp_stream.login("Doe", "mumble").unwrap(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_unit_value)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_unit_value [INFO] [stderr] [INFO] [stderr] warning: in an 'if' condition, avoid complex blocks or closures with blocks; instead, move the block or closure higher and bind it with a 'let' [INFO] [stderr] --> tests/lib.rs:24:9 [INFO] [stderr] | [INFO] [stderr] 24 | assert_eq!(bytes.into_inner(), file_data.as_bytes())).is_ok()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::block_in_if_condition_stmt)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#block_in_if_condition_stmt [INFO] [stderr] = note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info) [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 3.51s [INFO] running `"docker" "inspect" "50dd32cf79c63d0d613436ca3b91beca5d20b5c6643a76778b0effc33039a607"` [INFO] running `"docker" "rm" "-f" "50dd32cf79c63d0d613436ca3b91beca5d20b5c6643a76778b0effc33039a607"` [INFO] [stdout] 50dd32cf79c63d0d613436ca3b91beca5d20b5c6643a76778b0effc33039a607