[INFO] crate terminal_cli 0.2.0 is already in cache [INFO] extracting crate terminal_cli 0.2.0 into work/ex/clippy-test-run/sources/stable/reg/terminal_cli/0.2.0 [INFO] extracting crate terminal_cli 0.2.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/terminal_cli/0.2.0 [INFO] validating manifest of terminal_cli-0.2.0 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 terminal_cli-0.2.0 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 terminal_cli-0.2.0 [INFO] finished frobbing terminal_cli-0.2.0 [INFO] frobbed toml for terminal_cli-0.2.0 written to work/ex/clippy-test-run/sources/stable/reg/terminal_cli/0.2.0/Cargo.toml [INFO] started frobbing terminal_cli-0.2.0 [INFO] finished frobbing terminal_cli-0.2.0 [INFO] frobbed toml for terminal_cli-0.2.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/terminal_cli/0.2.0/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 terminal_cli-0.2.0 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-7/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/terminal_cli/0.2.0:/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] a8f976a1760d0b557886df1623e6c78e208ce647557736a710a04a144fb70076 [INFO] running `"docker" "start" "-a" "a8f976a1760d0b557886df1623e6c78e208ce647557736a710a04a144fb70076"` [INFO] [stderr] Checking terminal_cli v0.2.0 (/opt/crater/workdir) [INFO] [stderr] warning: redundant field names in struct initialization [INFO] [stderr] --> src/autocomplete.rs:90:4 [INFO] [stderr] | [INFO] [stderr] 90 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/autocomplete.rs:92:4 [INFO] [stderr] | [INFO] [stderr] 92 | mode: mode, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `mode` [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/autocomplete.rs:164:43 [INFO] [stderr] | [INFO] [stderr] 164 | self.state = LineBufferResult::Match { args: args }; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/autocomplete.rs:90:4 [INFO] [stderr] | [INFO] [stderr] 90 | line: line, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `line` [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/autocomplete.rs:92:4 [INFO] [stderr] | [INFO] [stderr] 92 | mode: mode, [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `mode` [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/autocomplete.rs:164:43 [INFO] [stderr] | [INFO] [stderr] 164 | self.state = LineBufferResult::Match { args: args }; [INFO] [stderr] | ^^^^^^^^^^ help: replace it with: `args` [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/autocomplete.rs:239:8 [INFO] [stderr] | [INFO] [stderr] 239 | full_new_line: full_new_line, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `full_new_line` [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/autocomplete.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | full_new_line: full_new_line, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `full_new_line` [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/autocomplete.rs:277:9 [INFO] [stderr] | [INFO] [stderr] 277 | display_range: display_range [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `display_range` [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/autocomplete.rs:312:46 [INFO] [stderr] | [INFO] [stderr] 312 | AutocompleteResult::MultipleMatches { lines: lines } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lines` [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/property.rs:113:23 [INFO] [stderr] | [INFO] [stderr] 113 | let min = ValueMin { min: min }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `min` [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/property.rs:114:23 [INFO] [stderr] | [INFO] [stderr] 114 | let max = ValueMax { max: max }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `max` [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/property.rs:116:83 [INFO] [stderr] | [INFO] [stderr] 116 | let input = ValueInputWithValidation { t: PhantomData, input: ValueInputFromStr, validate: validate }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `validate` [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/cli.rs:137:4 [INFO] [stderr] | [INFO] [stderr] 137 | matcher: matcher, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `matcher` [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/cli.rs:138:4 [INFO] [stderr] | [INFO] [stderr] 138 | strings: strings, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `strings` [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/cli.rs:139:4 [INFO] [stderr] | [INFO] [stderr] 139 | terminal: terminal [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `terminal` [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/prompt_buffer.rs:75:4 [INFO] [stderr] | [INFO] [stderr] 75 | options: options, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `options` [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/prompt_buffer.rs:193:14 [INFO] [stderr] | [INFO] [stderr] 193 | lines: lines [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lines` [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/autocomplete.rs:239:8 [INFO] [stderr] | [INFO] [stderr] 239 | full_new_line: full_new_line, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `full_new_line` [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/autocomplete.rs:275:9 [INFO] [stderr] | [INFO] [stderr] 275 | full_new_line: full_new_line, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `full_new_line` [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/autocomplete.rs:277:9 [INFO] [stderr] | [INFO] [stderr] 277 | display_range: display_range [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `display_range` [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/autocomplete.rs:312:46 [INFO] [stderr] | [INFO] [stderr] 312 | AutocompleteResult::MultipleMatches { lines: lines } [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lines` [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/property.rs:113:23 [INFO] [stderr] | [INFO] [stderr] 113 | let min = ValueMin { min: min }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `min` [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/property.rs:114:23 [INFO] [stderr] | [INFO] [stderr] 114 | let max = ValueMax { max: max }; [INFO] [stderr] | ^^^^^^^^ help: replace it with: `max` [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/property.rs:116:83 [INFO] [stderr] | [INFO] [stderr] 116 | let input = ValueInputWithValidation { t: PhantomData, input: ValueInputFromStr, validate: validate }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `validate` [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/cli.rs:137:4 [INFO] [stderr] | [INFO] [stderr] 137 | matcher: matcher, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `matcher` [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/cli.rs:138:4 [INFO] [stderr] | [INFO] [stderr] 138 | strings: strings, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `strings` [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/cli.rs:139:4 [INFO] [stderr] | [INFO] [stderr] 139 | terminal: terminal [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: replace it with: `terminal` [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/prompt_buffer.rs:75:4 [INFO] [stderr] | [INFO] [stderr] 75 | options: options, [INFO] [stderr] | ^^^^^^^^^^^^^^^^ help: replace it with: `options` [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/prompt_buffer.rs:193:14 [INFO] [stderr] | [INFO] [stderr] 193 | lines: lines [INFO] [stderr] | ^^^^^^^^^^^^ help: replace it with: `lines` [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: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/property.rs:117:2 [INFO] [stderr] | [INFO] [stderr] 117 | input [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/property.rs:116:14 [INFO] [stderr] | [INFO] [stderr] 116 | let input = ValueInputWithValidation { t: PhantomData, input: ValueInputFromStr, validate: validate }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/utils.rs:69:11 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: returning the result of a let binding from a block. Consider returning the expression directly. [INFO] [stderr] --> src/property.rs:117:2 [INFO] [stderr] | [INFO] [stderr] 117 | input [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::let_and_return)] on by default [INFO] [stderr] note: this expression can be directly returned [INFO] [stderr] --> src/property.rs:116:14 [INFO] [stderr] | [INFO] [stderr] 116 | let input = ValueInputWithValidation { t: PhantomData, input: ValueInputFromStr, validate: validate }; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#let_and_return [INFO] [stderr] [INFO] [stderr] warning: Consider removing unnecessary double parentheses [INFO] [stderr] --> src/utils.rs:69:11 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::double_parens)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_parens [INFO] [stderr] [INFO] [stderr] warning: unused import: `prelude::v1::*` [INFO] [stderr] --> src/utils.rs:103:6 [INFO] [stderr] | [INFO] [stderr] 103 | use prelude::v1::*; [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/utils.rs:88:10 [INFO] [stderr] | [INFO] [stderr] 88 | for i in 0..spaces { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `cmd` [INFO] [stderr] --> src/i18n.rs:23:67 [INFO] [stderr] | [INFO] [stderr] 23 | fn cmd_not_recognized(&self, f: &mut CharacterTerminalWriter, cmd: &str) -> Result<(), FmtError> { [INFO] [stderr] | ^^^ help: consider using `_cmd` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `prefix` [INFO] [stderr] --> src/autocomplete.rs:142:52 [INFO] [stderr] | [INFO] [stderr] 142 | pub fn match_cmd_str<'b>(&mut self, cmd: &'b str, prefix: Option<&'b str>) -> LineMatcherProgress { [INFO] [stderr] | ^^^^^^ help: consider using `_prefix` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `more_input_required` [INFO] [stderr] --> src/keys_terminal.rs:22:11 [INFO] [stderr] | [INFO] [stderr] 22 | let mut more_input_required = false; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using `_more_input_required` instead [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/keys_terminal.rs:22:7 [INFO] [stderr] | [INFO] [stderr] 22 | let mut more_input_required = false; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `i` [INFO] [stderr] --> src/utils.rs:88:10 [INFO] [stderr] | [INFO] [stderr] 88 | for i in 0..spaces { [INFO] [stderr] | ^ help: consider using `_i` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `cmd` [INFO] [stderr] --> src/i18n.rs:23:67 [INFO] [stderr] | [INFO] [stderr] 23 | fn cmd_not_recognized(&self, f: &mut CharacterTerminalWriter, cmd: &str) -> Result<(), FmtError> { [INFO] [stderr] | ^^^ help: consider using `_cmd` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `prefix` [INFO] [stderr] --> src/autocomplete.rs:142:52 [INFO] [stderr] | [INFO] [stderr] 142 | pub fn match_cmd_str<'b>(&mut self, cmd: &'b str, prefix: Option<&'b str>) -> LineMatcherProgress { [INFO] [stderr] | ^^^^^^ help: consider using `_prefix` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `more_input_required` [INFO] [stderr] --> src/keys_terminal.rs:22:11 [INFO] [stderr] | [INFO] [stderr] 22 | let mut more_input_required = false; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ help: consider using `_more_input_required` instead [INFO] [stderr] [INFO] [stderr] warning: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)` [INFO] [stderr] --> src/autocomplete.rs:155:16 [INFO] [stderr] | [INFO] [stderr] 155 | let at_sep = self.line.chars().skip(cmd.len()).next(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_skip_next)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | if strings.len() == 0 { return None; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `strings.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:10:6 [INFO] [stderr] | [INFO] [stderr] 10 | if s.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/utils.rs:17:6 [INFO] [stderr] | [INFO] [stderr] 17 | let ref first = strings[0].as_bytes(); [INFO] [stderr] | ----^^^^^^^^^------------------------- help: try: `let first = &strings[0].as_bytes();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `other` is only used to index `strings`. [INFO] [stderr] --> src/utils.rs:21:16 [INFO] [stderr] | [INFO] [stderr] 21 | for other in 1..strings.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 21 | for in strings.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | if strings[0].len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!strings[0].is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:64:5 [INFO] [stderr] | [INFO] [stderr] 64 | if strings.len() == 0 { return Ok(()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `strings.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f32::from(width)` [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 u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:69:28 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(max_len + spacing)` [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: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:78:37 [INFO] [stderr] | [INFO] [stderr] 78 | let rows = (strings.len() as f32 / columns as f32).ceil() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f32::from(columns)` [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: variable does not need to be mutable [INFO] [stderr] --> src/keys_terminal.rs:22:7 [INFO] [stderr] | [INFO] [stderr] 22 | let mut more_input_required = false; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:48:15 [INFO] [stderr] | [INFO] [stderr] 48 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 49 | | Some(args.clone()) [INFO] [stderr] 50 | | } else { [INFO] [stderr] 51 | | None [INFO] [stderr] 52 | | }; [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] 48 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:72:15 [INFO] [stderr] | [INFO] [stderr] 72 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 73 | | args.clone() [INFO] [stderr] 74 | | } else { [INFO] [stderr] 75 | | "".into() [INFO] [stderr] 76 | | }; [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] 72 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:91:15 [INFO] [stderr] | [INFO] [stderr] 91 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 92 | | args.trim() [INFO] [stderr] 93 | | } else { [INFO] [stderr] 94 | | "".into() [INFO] [stderr] 95 | | }; [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] 91 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/cli.rs:94:5 [INFO] [stderr] | [INFO] [stderr] 94 | "".into() [INFO] [stderr] | ^^^^^^^^^ help: consider removing `.into()`: `""` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:115:8 [INFO] [stderr] | [INFO] [stderr] 115 | self.strings.property_invalid_value(self.terminal, &property_id, &args); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:118:8 [INFO] [stderr] | [INFO] [stderr] 118 | self.strings.property_value_too_small(self.terminal, &property_id, &val, &min); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | self.strings.property_value_too_big(self.terminal, &property_id, &val, &max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli_property.rs:18:6 [INFO] [stderr] | [INFO] [stderr] 18 | match self { [INFO] [stderr] | _________^ [INFO] [stderr] 19 | | &mut PropertyContext::Get(ref mut get) => { [INFO] [stderr] 20 | | get.print_value_display(property_value); [INFO] [stderr] 21 | | }, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 18 | match *self { [INFO] [stderr] 19 | PropertyContext::Get(ref mut get) => { [INFO] [stderr] 20 | get.print_value_display(property_value); [INFO] [stderr] 21 | }, [INFO] [stderr] 22 | PropertyContext::Set(ref mut set) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli_property.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | set.common.strings.property_value_set(set.common.terminal, &set.common.id, &set.value); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `keys_terminal::TerminalKeyDecoder` [INFO] [stderr] --> src/keys_terminal.rs:11:2 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn new() -> TerminalKeyDecoder { [INFO] [stderr] | _____^ [INFO] [stderr] 12 | | TerminalKeyDecoder { [INFO] [stderr] 13 | | buffer: Vec::new() [INFO] [stderr] 14 | | } [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 5 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/terminal.rs:46:3 [INFO] [stderr] | [INFO] [stderr] 46 | io::stdout().write(bytes).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] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:88:8 [INFO] [stderr] | [INFO] [stderr] 88 | if self.current_path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.current_path.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/tests.rs:24:6 [INFO] [stderr] | [INFO] [stderr] 24 | let mut get_matcher = |l, m| { CliLineMatcher::new(l, m) }; [INFO] [stderr] | ----^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [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/prompt_buffer.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | match result { [INFO] [stderr] | _________________^ [INFO] [stderr] 142 | | LineBufferResult::NoMatchFound => { [INFO] [stderr] 143 | | if line.trim().len() > 0 { [INFO] [stderr] 144 | | // command not recognized [INFO] [stderr] ... | [INFO] [stderr] 149 | | _ => () [INFO] [stderr] 150 | | } [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] 141 | if let LineBufferResult::NoMatchFound = result { [INFO] [stderr] 142 | if line.trim().len() > 0 { [INFO] [stderr] 143 | // command not recognized [INFO] [stderr] 144 | self.strings.cmd_not_recognized(terminal, line.trim()); [INFO] [stderr] 145 | terminal.newline(); [INFO] [stderr] 146 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:143:10 [INFO] [stderr] | [INFO] [stderr] 143 | if line.trim().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!line.trim().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/prompt_buffer.rs:145:8 [INFO] [stderr] | [INFO] [stderr] 145 | self.strings.cmd_not_recognized(terminal, line.trim()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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/prompt_buffer.rs:175:9 [INFO] [stderr] | [INFO] [stderr] 175 | match result { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 176 | | LineBufferResult::Autocomplete { result } => { [INFO] [stderr] 177 | | match result { [INFO] [stderr] 178 | | AutocompleteResult::None => (), [INFO] [stderr] ... | [INFO] [stderr] 198 | | _ => () [INFO] [stderr] 199 | | } [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] 175 | if let LineBufferResult::Autocomplete { result } = result { [INFO] [stderr] 176 | match result { [INFO] [stderr] 177 | AutocompleteResult::None => (), [INFO] [stderr] 178 | AutocompleteResult::SingleMatch { line } => { [INFO] [stderr] 179 | // immediately send the new stuff [INFO] [stderr] 180 | terminal.print_str(line.get_additional_part()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/prompt_buffer.rs:218:8 [INFO] [stderr] | [INFO] [stderr] 218 | format_in_columns(suggestions.as_slice(), 80, 4, &self.options.newline, terminal); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | if self.line_buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.line_buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/prompt_buffer.rs:258:14 [INFO] [stderr] | [INFO] [stderr] 258 | if c != '\r' as u8 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/prompt_buffer.rs:269:6 [INFO] [stderr] | [INFO] [stderr] 269 | if handled_autocomplete == false { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!handled_autocomplete` [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: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: called `skip(x).next()` on an iterator. This is more succinctly expressed by calling `nth(x)` [INFO] [stderr] --> src/autocomplete.rs:155:16 [INFO] [stderr] | [INFO] [stderr] 155 | let at_sep = self.line.chars().skip(cmd.len()).next(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::iter_skip_next)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_skip_next [INFO] [stderr] [INFO] [stderr] error: Could not compile `terminal_cli`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:7:5 [INFO] [stderr] | [INFO] [stderr] 7 | if strings.len() == 0 { return None; } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `strings.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:10:6 [INFO] [stderr] | [INFO] [stderr] 10 | if s.len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!s.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: `ref` on an entire `let` pattern is discouraged, take a reference with `&` instead [INFO] [stderr] --> src/utils.rs:17:6 [INFO] [stderr] | [INFO] [stderr] 17 | let ref first = strings[0].as_bytes(); [INFO] [stderr] | ----^^^^^^^^^------------------------- help: try: `let first = &strings[0].as_bytes();` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::toplevel_ref_arg)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#toplevel_ref_arg [INFO] [stderr] [INFO] [stderr] warning: the loop variable `other` is only used to index `strings`. [INFO] [stderr] --> src/utils.rs:21:16 [INFO] [stderr] | [INFO] [stderr] 21 | for other in 1..strings.len() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 21 | for in strings.iter().skip(1) { [INFO] [stderr] | ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | if strings[0].len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!strings[0].is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/utils.rs:64:5 [INFO] [stderr] | [INFO] [stderr] 64 | if strings.len() == 0 { return Ok(()); } [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `strings.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^ help: try: `f32::from(width)` [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 u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:69:28 [INFO] [stderr] | [INFO] [stderr] 69 | let c = ((width as f32 / (max_len + spacing) as f32)).floor() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `f32::from(max_len + spacing)` [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: casting u16 to f32 may become silently lossy if types change [INFO] [stderr] --> src/utils.rs:78:37 [INFO] [stderr] | [INFO] [stderr] 78 | let rows = (strings.len() as f32 / columns as f32).ceil() as u16; [INFO] [stderr] | ^^^^^^^^^^^^^^ help: try: `f32::from(columns)` [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: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:48:15 [INFO] [stderr] | [INFO] [stderr] 48 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 49 | | Some(args.clone()) [INFO] [stderr] 50 | | } else { [INFO] [stderr] 51 | | None [INFO] [stderr] 52 | | }; [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] 48 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:72:15 [INFO] [stderr] | [INFO] [stderr] 72 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 73 | | args.clone() [INFO] [stderr] 74 | | } else { [INFO] [stderr] 75 | | "".into() [INFO] [stderr] 76 | | }; [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] 72 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli.rs:91:15 [INFO] [stderr] | [INFO] [stderr] 91 | let args = if let &LineBufferResult::Match { ref args, .. } = self.matcher.get_state() { [INFO] [stderr] | ________________________^ [INFO] [stderr] 92 | | args.trim() [INFO] [stderr] 93 | | } else { [INFO] [stderr] 94 | | "".into() [INFO] [stderr] 95 | | }; [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] 91 | let args = if let LineBufferResult::Match { ref args, .. } = *self.matcher.get_state() { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: identical conversion [INFO] [stderr] --> src/cli.rs:94:5 [INFO] [stderr] | [INFO] [stderr] 94 | "".into() [INFO] [stderr] | ^^^^^^^^^ help: consider removing `.into()`: `""` [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: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:115:8 [INFO] [stderr] | [INFO] [stderr] 115 | self.strings.property_invalid_value(self.terminal, &property_id, &args); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:118:8 [INFO] [stderr] | [INFO] [stderr] 118 | self.strings.property_value_too_small(self.terminal, &property_id, &val, &min); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli.rs:121:8 [INFO] [stderr] | [INFO] [stderr] 121 | self.strings.property_value_too_big(self.terminal, &property_id, &val, &max); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/cli_property.rs:18:6 [INFO] [stderr] | [INFO] [stderr] 18 | match self { [INFO] [stderr] | _________^ [INFO] [stderr] 19 | | &mut PropertyContext::Get(ref mut get) => { [INFO] [stderr] 20 | | get.print_value_display(property_value); [INFO] [stderr] 21 | | }, [INFO] [stderr] ... | [INFO] [stderr] 26 | | } [INFO] [stderr] 27 | | } [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] 18 | match *self { [INFO] [stderr] 19 | PropertyContext::Get(ref mut get) => { [INFO] [stderr] 20 | get.print_value_display(property_value); [INFO] [stderr] 21 | }, [INFO] [stderr] 22 | PropertyContext::Set(ref mut set) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/cli_property.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | set.common.strings.property_value_set(set.common.terminal, &set.common.id, &set.value); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: you should consider deriving a `Default` implementation for `keys_terminal::TerminalKeyDecoder` [INFO] [stderr] --> src/keys_terminal.rs:11:2 [INFO] [stderr] | [INFO] [stderr] 11 | pub fn new() -> TerminalKeyDecoder { [INFO] [stderr] | _____^ [INFO] [stderr] 12 | | TerminalKeyDecoder { [INFO] [stderr] 13 | | buffer: Vec::new() [INFO] [stderr] 14 | | } [INFO] [stderr] 15 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::new_without_default_derive)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#new_without_default_derive [INFO] [stderr] help: try this [INFO] [stderr] | [INFO] [stderr] 5 | #[derive(Default)] [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] error: handle written amount returned or use `Write::write_all` instead [INFO] [stderr] --> src/terminal.rs:46:3 [INFO] [stderr] | [INFO] [stderr] 46 | io::stdout().write(bytes).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] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:88:8 [INFO] [stderr] | [INFO] [stderr] 88 | if self.current_path.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.current_path.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: you seem to be trying to use match for destructuring a single pattern. Consider using `if let` [INFO] [stderr] --> src/prompt_buffer.rs:141:5 [INFO] [stderr] | [INFO] [stderr] 141 | match result { [INFO] [stderr] | _________________^ [INFO] [stderr] 142 | | LineBufferResult::NoMatchFound => { [INFO] [stderr] 143 | | if line.trim().len() > 0 { [INFO] [stderr] 144 | | // command not recognized [INFO] [stderr] ... | [INFO] [stderr] 149 | | _ => () [INFO] [stderr] 150 | | } [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] 141 | if let LineBufferResult::NoMatchFound = result { [INFO] [stderr] 142 | if line.trim().len() > 0 { [INFO] [stderr] 143 | // command not recognized [INFO] [stderr] 144 | self.strings.cmd_not_recognized(terminal, line.trim()); [INFO] [stderr] 145 | terminal.newline(); [INFO] [stderr] 146 | } [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:143:10 [INFO] [stderr] | [INFO] [stderr] 143 | if line.trim().len() > 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `!line.trim().is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/prompt_buffer.rs:145:8 [INFO] [stderr] | [INFO] [stderr] 145 | self.strings.cmd_not_recognized(terminal, line.trim()); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [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/prompt_buffer.rs:175:9 [INFO] [stderr] | [INFO] [stderr] 175 | match result { [INFO] [stderr] | _________________________________^ [INFO] [stderr] 176 | | LineBufferResult::Autocomplete { result } => { [INFO] [stderr] 177 | | match result { [INFO] [stderr] 178 | | AutocompleteResult::None => (), [INFO] [stderr] ... | [INFO] [stderr] 198 | | _ => () [INFO] [stderr] 199 | | } [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] 175 | if let LineBufferResult::Autocomplete { result } = result { [INFO] [stderr] 176 | match result { [INFO] [stderr] 177 | AutocompleteResult::None => (), [INFO] [stderr] 178 | AutocompleteResult::SingleMatch { line } => { [INFO] [stderr] 179 | // immediately send the new stuff [INFO] [stderr] 180 | terminal.print_str(line.get_additional_part()); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> src/prompt_buffer.rs:218:8 [INFO] [stderr] | [INFO] [stderr] 218 | format_in_columns(suggestions.as_slice(), 80, 4, &self.options.newline, terminal); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/prompt_buffer.rs:242:9 [INFO] [stderr] | [INFO] [stderr] 242 | if self.line_buffer.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `self.line_buffer.is_empty()` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: casting character literal to u8. `char`s are 4 bytes wide in rust, so casting to u8 truncates them [INFO] [stderr] --> src/prompt_buffer.rs:258:14 [INFO] [stderr] | [INFO] [stderr] 258 | if c != '\r' as u8 { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::char_lit_as_u8)] on by default [INFO] [stderr] = help: Consider using a byte literal instead: [INFO] [stderr] b'\r' [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#char_lit_as_u8 [INFO] [stderr] [INFO] [stderr] warning: equality checks against false can be replaced by a negation [INFO] [stderr] --> src/prompt_buffer.rs:269:6 [INFO] [stderr] | [INFO] [stderr] 269 | if handled_autocomplete == false { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try simplifying it as shown: `!handled_autocomplete` [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: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `terminal_cli`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "a8f976a1760d0b557886df1623e6c78e208ce647557736a710a04a144fb70076"` [INFO] running `"docker" "rm" "-f" "a8f976a1760d0b557886df1623e6c78e208ce647557736a710a04a144fb70076"` [INFO] [stdout] a8f976a1760d0b557886df1623e6c78e208ce647557736a710a04a144fb70076