[INFO] cloning repository https://github.com/TClark1011/rs-ratatui-json-editor [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/TClark1011/rs-ratatui-json-editor" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTClark1011%2Frs-ratatui-json-editor", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTClark1011%2Frs-ratatui-json-editor'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5e1cc2300ca36ae0e197ec5715043b46cc0e2215 [INFO] linting TClark1011/rs-ratatui-json-editor against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FTClark1011%2Frs-ratatui-json-editor" "/workspace/builds/worker-7-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/TClark1011/rs-ratatui-json-editor [INFO] finished tweaking git repo https://github.com/TClark1011/rs-ratatui-json-editor [INFO] tweaked toml for git repo https://github.com/TClark1011/rs-ratatui-json-editor written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/TClark1011/rs-ratatui-json-editor on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/TClark1011/rs-ratatui-json-editor already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded clap_derive v4.5.18 [INFO] [stderr] Downloaded proc-macro2 v1.0.89 [INFO] [stderr] Downloaded unicode-truncate v1.1.0 [INFO] [stderr] Downloaded lru v0.12.5 [INFO] [stderr] Downloaded foldhash v0.1.3 [INFO] [stderr] Downloaded clap_lex v0.7.2 [INFO] [stderr] Downloaded cassowary v0.3.0 [INFO] [stderr] Downloaded castaway v0.2.3 [INFO] [stderr] Downloaded indoc v2.0.5 [INFO] [stderr] Downloaded redox_syscall v0.5.7 [INFO] [stderr] Downloaded clap v4.5.20 [INFO] [stderr] Downloaded compact_str v0.8.0 [INFO] [stderr] Downloaded mio v1.0.2 [INFO] [stderr] Downloaded indexmap v2.6.0 [INFO] [stderr] Downloaded crossterm v0.28.1 [INFO] [stderr] Downloaded clap_builder v4.5.20 [INFO] [stderr] Downloaded serde_json v1.0.132 [INFO] [stderr] Downloaded hashbrown v0.15.1 [INFO] [stderr] Downloaded unicode-width v0.2.0 [INFO] [stderr] Downloaded itertools v0.13.0 [INFO] [stderr] Downloaded syn v2.0.87 [INFO] [stderr] Downloaded serde_derive v1.0.214 [INFO] [stderr] Downloaded serde v1.0.214 [INFO] [stderr] Downloaded instability v0.3.2 [INFO] [stderr] Downloaded rustversion v1.0.18 [INFO] [stderr] Downloaded rustix v0.38.39 [INFO] [stderr] Downloaded ratatui v0.29.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] ece9215c2cb91ce0f1baf43243704882b5d7db40b9f8b691e72f26f0c208b630 [INFO] running `Command { std: "docker" "start" "-a" "ece9215c2cb91ce0f1baf43243704882b5d7db40b9f8b691e72f26f0c208b630", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "ece9215c2cb91ce0f1baf43243704882b5d7db40b9f8b691e72f26f0c208b630", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "ece9215c2cb91ce0f1baf43243704882b5d7db40b9f8b691e72f26f0c208b630", kill_on_drop: false }` [INFO] [stdout] ece9215c2cb91ce0f1baf43243704882b5d7db40b9f8b691e72f26f0c208b630 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 6595c3e592240d5f26ea2abefec52cf1160dd65d9baecd3051406422ca315a4b [INFO] running `Command { std: "docker" "start" "-a" "6595c3e592240d5f26ea2abefec52cf1160dd65d9baecd3051406422ca315a4b", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.89 [INFO] [stderr] Compiling unicode-ident v1.0.13 [INFO] [stderr] Compiling libc v0.2.161 [INFO] [stderr] Compiling rustversion v1.0.18 [INFO] [stderr] Compiling signal-hook v0.3.17 [INFO] [stderr] Checking smallvec v1.13.2 [INFO] [stderr] Checking allocator-api2 v0.2.18 [INFO] [stderr] Checking log v0.4.22 [INFO] [stderr] Checking foldhash v0.1.3 [INFO] [stderr] Compiling rustix v0.38.39 [INFO] [stderr] Compiling serde v1.0.214 [INFO] [stderr] Checking equivalent v1.0.1 [INFO] [stderr] Checking either v1.13.0 [INFO] [stderr] Checking bitflags v2.6.0 [INFO] [stderr] Checking itoa v1.0.11 [INFO] [stderr] Checking ryu v1.0.18 [INFO] [stderr] Checking linux-raw-sys v0.4.14 [INFO] [stderr] Compiling serde_json v1.0.132 [INFO] [stderr] Checking clap_lex v0.7.2 [INFO] [stderr] Checking unicode-width v0.1.14 [INFO] [stderr] Checking cassowary v0.3.0 [INFO] [stderr] Checking memchr v2.7.4 [INFO] [stderr] Compiling indoc v2.0.5 [INFO] [stderr] Checking unicode-width v0.2.0 [INFO] [stderr] Checking clap_builder v4.5.20 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking hashbrown v0.15.1 [INFO] [stderr] Checking castaway v0.2.3 [INFO] [stderr] Checking compact_str v0.8.0 [INFO] [stderr] Compiling quote v1.0.37 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Compiling syn v2.0.87 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Compiling serde_derive v1.0.214 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling clap_derive v4.5.18 [INFO] [stderr] Compiling instability v0.3.2 [INFO] [stderr] Checking clap v4.5.20 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking indexmap v2.6.0 [INFO] [stderr] Checking rs-ratatui-json-editor v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: called `unwrap` on `input_file_path` after checking its variant with `is_some` [INFO] [stdout] --> src/app.rs:46:52 [INFO] [stdout] | [INFO] [stdout] 45 | if input_file_path.is_some() && input_file_contents.is_none() { [INFO] [stdout] | ------------------------- the check is happening here [INFO] [stdout] 46 | return Err(AppError::InputFileNotFound(input_file_path.unwrap())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/app.rs:42:14 [INFO] [stdout] | [INFO] [stdout] 42 | .map(Result::ok) [INFO] [stdout] | ______________^ [INFO] [stdout] 43 | | .flatten(); [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(Result::ok)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/app.rs:51:14 [INFO] [stdout] | [INFO] [stdout] 51 | .map(Result::ok) [INFO] [stdout] | ______________^ [INFO] [stdout] 52 | | .flatten(); [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(Result::ok)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app.rs:156:43 [INFO] [stdout] | [INFO] [stdout] 156 | if self.type_list_open && !self.type_list_ui_state.selected().is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.type_list_ui_state.selected().is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app.rs:218:17 [INFO] [stdout] | [INFO] [stdout] 218 | / match self.exit_popup_focus { [INFO] [stdout] 219 | | Some(ExitFocus::Input) => { [INFO] [stdout] 220 | | result.push(( [INFO] [stdout] 221 | | Binding::Static(KeyCode::Backspace), [INFO] [stdout] ... | [INFO] [stdout] 229 | | _ => {} [INFO] [stdout] 230 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 218 ~ if let Some(ExitFocus::Input) = self.exit_popup_focus { [INFO] [stdout] 219 + result.push(( [INFO] [stdout] 220 + Binding::Static(KeyCode::Backspace), [INFO] [stdout] 221 + InputAction::BackspaceFieldText(TextField::OutputFile), [INFO] [stdout] 222 + )); [INFO] [stdout] 223 + result.push(( [INFO] [stdout] 224 + Binding::TextEntry, [INFO] [stdout] 225 + InputAction::EnterFieldText(TextField::OutputFile), [INFO] [stdout] 226 + )); [INFO] [stdout] 227 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / match &self.target_write_file { [INFO] [stdout] 306 | | Some(path) => { [INFO] [stdout] 307 | | let mut file = [INFO] [stdout] 308 | | File::create(path).map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] ... | [INFO] [stdout] 313 | | _ => {} [INFO] [stdout] 314 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 305 ~ if let Some(path) = &self.target_write_file { [INFO] [stdout] 306 + let mut file = [INFO] [stdout] 307 + File::create(path).map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] 308 + [INFO] [stdout] 309 + file.write_all(serialized.as_bytes()) [INFO] [stdout] 310 + .map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] 311 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 64 - return Ok(()); [INFO] [stdout] 64 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> src/ui.rs:88:18 [INFO] [stdout] | [INFO] [stdout] 88 | .filter_map(|(binding, action)| { [INFO] [stdout] | __________________^ [INFO] [stdout] 89 | | let key_label = match binding { [INFO] [stdout] 90 | | Binding::Static(KeyCode::Enter) => "Enter", [INFO] [stdout] 91 | | kc => &format!("{kc}"), [INFO] [stdout] ... | [INFO] [stdout] 94 | | return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] 95 | | }) [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:94:21 [INFO] [stdout] | [INFO] [stdout] 94 | return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 94 - return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] 94 + Some(format!("({}) {}", key_label, action.description()?)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 220 - return Ok(()); [INFO] [stdout] 220 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:265:13 [INFO] [stdout] | [INFO] [stdout] 265 | return Ok(text); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 265 - return Ok(text); [INFO] [stdout] 265 + Ok(text) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:268:13 [INFO] [stdout] | [INFO] [stdout] 268 | / return Err(io::Error::new( [INFO] [stdout] 269 | | io::ErrorKind::InvalidData, [INFO] [stdout] 270 | | format!("Failed to serialize JSON data: {}", e), [INFO] [stdout] 271 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 268 ~ Err(io::Error::new( [INFO] [stdout] 269 + io::ErrorKind::InvalidData, [INFO] [stdout] 270 + format!("Failed to serialize JSON data: {}", e), [INFO] [stdout] 271 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/ui.rs:326:37 [INFO] [stdout] | [INFO] [stdout] 326 | let input_text = Paragraph::new(match app.target_write_file.clone() { [INFO] [stdout] | _____________________________________^ [INFO] [stdout] 327 | | None => String::from(""), [INFO] [stdout] 328 | | Some(path) => path, [INFO] [stdout] 329 | | }) [INFO] [stdout] | |_____^ help: replace it with: `app.target_write_file.clone().unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:66:13 [INFO] [stdout] | [INFO] [stdout] 66 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return Ok(()); [INFO] [stdout] 66 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/main.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// indicates whether changes should be saved [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 99 | /// indicates whether changes should be saved [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/main.rs:127:35 [INFO] [stdout] | [INFO] [stdout] 127 | matching_action_binding_res = matching_action_binding_res.or_else(|| { [INFO] [stdout] | ___________________________________^ [INFO] [stdout] 128 | | if let Some(action) = text_entry_action { [INFO] [stdout] 129 | | Some((Binding::TextEntry, action)) [INFO] [stdout] 130 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 133 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `or` instead [INFO] [stdout] | [INFO] [stdout] 127 ~ matching_action_binding_res = matching_action_binding_res.or({ [INFO] [stdout] 128 + if let Some(action) = text_entry_action { [INFO] [stdout] 129 + Some((Binding::TextEntry, action)) [INFO] [stdout] 130 + } else { [INFO] [stdout] 131 + None [INFO] [stdout] 132 + } [INFO] [stdout] 133 ~ }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:128:9 [INFO] [stdout] | [INFO] [stdout] 128 | / if let Some(action) = text_entry_action { [INFO] [stdout] 129 | | Some((Binding::TextEntry, action)) [INFO] [stdout] 130 | | } else { [INFO] [stdout] 131 | | None [INFO] [stdout] 132 | | } [INFO] [stdout] | |_________^ help: try: `text_entry_action.map(|action| (Binding::TextEntry, action))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:262:21 [INFO] [stdout] | [INFO] [stdout] 262 | / match app.edit_popup_focus { [INFO] [stdout] 263 | | Some(EditFocus::Type) => { [INFO] [stdout] 264 | | app.edit_popup_focus = Some(EditFocus::Key); [INFO] [stdout] ... | [INFO] [stdout] 267 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 262 ~ if let Some(EditFocus::Type) = app.edit_popup_focus { [INFO] [stdout] 263 + app.edit_popup_focus = Some(EditFocus::Key); [INFO] [stdout] 264 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap` on `input_file_path` after checking its variant with `is_some` [INFO] [stdout] --> src/app.rs:46:52 [INFO] [stdout] | [INFO] [stdout] 45 | if input_file_path.is_some() && input_file_contents.is_none() { [INFO] [stdout] | ------------------------- the check is happening here [INFO] [stdout] 46 | return Err(AppError::InputFileNotFound(input_file_path.unwrap())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: try using `match` [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_unwrap [INFO] [stdout] = note: `#[warn(clippy::unnecessary_unwrap)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/app.rs:42:14 [INFO] [stdout] | [INFO] [stdout] 42 | .map(Result::ok) [INFO] [stdout] | ______________^ [INFO] [stdout] 43 | | .flatten(); [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(Result::ok)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] = note: `#[warn(clippy::map_flatten)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(..).flatten()` on `Option` [INFO] [stdout] --> src/app.rs:51:14 [INFO] [stdout] | [INFO] [stdout] 51 | .map(Result::ok) [INFO] [stdout] | ______________^ [INFO] [stdout] 52 | | .flatten(); [INFO] [stdout] | |______________________^ help: try replacing `map` with `and_then` and remove the `.flatten()`: `and_then(Result::ok)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_flatten [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app.rs:156:43 [INFO] [stdout] | [INFO] [stdout] 156 | if self.type_list_open && !self.type_list_ui_state.selected().is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.type_list_ui_state.selected().is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app.rs:218:17 [INFO] [stdout] | [INFO] [stdout] 218 | / match self.exit_popup_focus { [INFO] [stdout] 219 | | Some(ExitFocus::Input) => { [INFO] [stdout] 220 | | result.push(( [INFO] [stdout] 221 | | Binding::Static(KeyCode::Backspace), [INFO] [stdout] ... | [INFO] [stdout] 229 | | _ => {} [INFO] [stdout] 230 | | } [INFO] [stdout] | |_________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] = note: `#[warn(clippy::single_match)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 218 ~ if let Some(ExitFocus::Input) = self.exit_popup_focus { [INFO] [stdout] 219 + result.push(( [INFO] [stdout] 220 + Binding::Static(KeyCode::Backspace), [INFO] [stdout] 221 + InputAction::BackspaceFieldText(TextField::OutputFile), [INFO] [stdout] 222 + )); [INFO] [stdout] 223 + result.push(( [INFO] [stdout] 224 + Binding::TextEntry, [INFO] [stdout] 225 + InputAction::EnterFieldText(TextField::OutputFile), [INFO] [stdout] 226 + )); [INFO] [stdout] 227 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:289:46 [INFO] [stdout] | [INFO] [stdout] 289 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:299:46 [INFO] [stdout] | [INFO] [stdout] 299 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:309:40 [INFO] [stdout] | [INFO] [stdout] 309 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 310 | | Some(_) => Some(ExitFocus::Input), [INFO] [stdout] 311 | | None => None, [INFO] [stdout] 312 | | } [INFO] [stdout] | |_________________^ help: try: `app.exit_popup_focus.clone().map(|_| ExitFocus::Input)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:309:46 [INFO] [stdout] | [INFO] [stdout] 309 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:315:46 [INFO] [stdout] | [INFO] [stdout] 315 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/app.rs:305:9 [INFO] [stdout] | [INFO] [stdout] 305 | / match &self.target_write_file { [INFO] [stdout] 306 | | Some(path) => { [INFO] [stdout] 307 | | let mut file = [INFO] [stdout] 308 | | File::create(path).map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] ... | [INFO] [stdout] 313 | | _ => {} [INFO] [stdout] 314 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 305 ~ if let Some(path) = &self.target_write_file { [INFO] [stdout] 306 + let mut file = [INFO] [stdout] 307 + File::create(path).map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] 308 + [INFO] [stdout] 309 + file.write_all(serialized.as_bytes()) [INFO] [stdout] 310 + .map_err(|e| AppError::UnableToSave(AppWriteError::Io(e)))?; [INFO] [stdout] 311 ~ }; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:67:24 [INFO] [stdout] | [INFO] [stdout] 67 | fn compose_header(app: &App) -> Paragraph { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 67 | fn compose_header(app: &App) -> Paragraph<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:82:24 [INFO] [stdout] | [INFO] [stdout] 82 | fn compose_footer(app: &App) -> Paragraph { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 82 | fn compose_footer(app: &App) -> Paragraph<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:105:30 [INFO] [stdout] | [INFO] [stdout] 105 | fn compose_pairs_list(pairs: &JsonData) -> List { [INFO] [stdout] | ^^^^^^^^^ ^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 105 | fn compose_pairs_list(pairs: &JsonData) -> List<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:261:32 [INFO] [stdout] | [INFO] [stdout] 261 | fn compose_preview_screen(app: &App) -> Result { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 261 | fn compose_preview_screen(app: &App) -> Result, io::Error> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] = note: `#[warn(clippy::needless_return)]` on by default [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 64 - return Ok(()); [INFO] [stdout] 64 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `.filter_map(..)` can be written more simply using `.map(..)` [INFO] [stdout] --> src/ui.rs:88:18 [INFO] [stdout] | [INFO] [stdout] 88 | .filter_map(|(binding, action)| { [INFO] [stdout] | __________________^ [INFO] [stdout] 89 | | let key_label = match binding { [INFO] [stdout] 90 | | Binding::Static(KeyCode::Enter) => "Enter", [INFO] [stdout] 91 | | kc => &format!("{kc}"), [INFO] [stdout] ... | [INFO] [stdout] 94 | | return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] 95 | | }) [INFO] [stdout] | |__________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_filter_map [INFO] [stdout] = note: `#[warn(clippy::unnecessary_filter_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:94:21 [INFO] [stdout] | [INFO] [stdout] 94 | return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 94 - return Some(format!("({}) {}", key_label, action.description()?)); [INFO] [stdout] 94 + Some(format!("({}) {}", key_label, action.description()?)) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:220:5 [INFO] [stdout] | [INFO] [stdout] 220 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 220 - return Ok(()); [INFO] [stdout] 220 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:265:13 [INFO] [stdout] | [INFO] [stdout] 265 | return Ok(text); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 265 - return Ok(text); [INFO] [stdout] 265 + Ok(text) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/ui.rs:268:13 [INFO] [stdout] | [INFO] [stdout] 268 | / return Err(io::Error::new( [INFO] [stdout] 269 | | io::ErrorKind::InvalidData, [INFO] [stdout] 270 | | format!("Failed to serialize JSON data: {}", e), [INFO] [stdout] 271 | | )); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 268 ~ Err(io::Error::new( [INFO] [stdout] 269 + io::ErrorKind::InvalidData, [INFO] [stdout] 270 + format!("Failed to serialize JSON data: {}", e), [INFO] [stdout] 271 ~ )) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match can be simplified with `.unwrap_or_default()` [INFO] [stdout] --> src/ui.rs:326:37 [INFO] [stdout] | [INFO] [stdout] 326 | let input_text = Paragraph::new(match app.target_write_file.clone() { [INFO] [stdout] | _____________________________________^ [INFO] [stdout] 327 | | None => String::from(""), [INFO] [stdout] 328 | | Some(path) => path, [INFO] [stdout] 329 | | }) [INFO] [stdout] | |_____^ help: replace it with: `app.target_write_file.clone().unwrap_or_default()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default [INFO] [stdout] = note: `#[warn(clippy::manual_unwrap_or_default)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/main.rs:66:13 [INFO] [stdout] | [INFO] [stdout] 66 | return Ok(()); [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stdout] help: remove `return` [INFO] [stdout] | [INFO] [stdout] 66 - return Ok(()); [INFO] [stdout] 66 + Ok(()) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: doc list item without indentation [INFO] [stdout] --> src/main.rs:99:5 [INFO] [stdout] | [INFO] [stdout] 99 | /// indicates whether changes should be saved [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = help: if this is supposed to be its own paragraph, add a blank line [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation [INFO] [stdout] = note: `#[warn(clippy::doc_lazy_continuation)]` on by default [INFO] [stdout] help: indent this line [INFO] [stdout] | [INFO] [stdout] 99 | /// indicates whether changes should be saved [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary closure used to substitute value for `Option::None` [INFO] [stdout] --> src/main.rs:127:35 [INFO] [stdout] | [INFO] [stdout] 127 | matching_action_binding_res = matching_action_binding_res.or_else(|| { [INFO] [stdout] | ___________________________________^ [INFO] [stdout] 128 | | if let Some(action) = text_entry_action { [INFO] [stdout] 129 | | Some((Binding::TextEntry, action)) [INFO] [stdout] 130 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 133 | | }); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_lazy_evaluations [INFO] [stdout] = note: `#[warn(clippy::unnecessary_lazy_evaluations)]` on by default [INFO] [stdout] help: use `or` instead [INFO] [stdout] | [INFO] [stdout] 127 ~ matching_action_binding_res = matching_action_binding_res.or({ [INFO] [stdout] 128 + if let Some(action) = text_entry_action { [INFO] [stdout] 129 + Some((Binding::TextEntry, action)) [INFO] [stdout] 130 + } else { [INFO] [stdout] 131 + None [INFO] [stdout] 132 + } [INFO] [stdout] 133 ~ }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:128:9 [INFO] [stdout] | [INFO] [stdout] 128 | / if let Some(action) = text_entry_action { [INFO] [stdout] 129 | | Some((Binding::TextEntry, action)) [INFO] [stdout] 130 | | } else { [INFO] [stdout] 131 | | None [INFO] [stdout] 132 | | } [INFO] [stdout] | |_________^ help: try: `text_entry_action.map(|action| (Binding::TextEntry, action))` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] = note: `#[warn(clippy::manual_map)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `match` for destructuring a single pattern. Consider using `if let` [INFO] [stdout] --> src/main.rs:262:21 [INFO] [stdout] | [INFO] [stdout] 262 | / match app.edit_popup_focus { [INFO] [stdout] 263 | | Some(EditFocus::Type) => { [INFO] [stdout] 264 | | app.edit_popup_focus = Some(EditFocus::Key); [INFO] [stdout] ... | [INFO] [stdout] 267 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 262 ~ if let Some(EditFocus::Type) = app.edit_popup_focus { [INFO] [stdout] 263 + app.edit_popup_focus = Some(EditFocus::Key); [INFO] [stdout] 264 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:289:46 [INFO] [stdout] | [INFO] [stdout] 289 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] = note: `#[warn(clippy::clone_on_copy)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:299:46 [INFO] [stdout] | [INFO] [stdout] 299 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: manual implementation of `Option::map` [INFO] [stdout] --> src/main.rs:309:40 [INFO] [stdout] | [INFO] [stdout] 309 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ________________________________________^ [INFO] [stdout] 310 | | Some(_) => Some(ExitFocus::Input), [INFO] [stdout] 311 | | None => None, [INFO] [stdout] 312 | | } [INFO] [stdout] | |_________________^ help: try: `app.exit_popup_focus.clone().map(|_| ExitFocus::Input)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_map [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:309:46 [INFO] [stdout] | [INFO] [stdout] 309 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `Option` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:315:46 [INFO] [stdout] | [INFO] [stdout] 315 | app.exit_popup_focus = match app.exit_popup_focus.clone() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app.exit_popup_focus` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:67:24 [INFO] [stdout] | [INFO] [stdout] 67 | fn compose_header(app: &App) -> Paragraph { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 67 | fn compose_header(app: &App) -> Paragraph<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:82:24 [INFO] [stdout] | [INFO] [stdout] 82 | fn compose_footer(app: &App) -> Paragraph { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 82 | fn compose_footer(app: &App) -> Paragraph<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:105:30 [INFO] [stdout] | [INFO] [stdout] 105 | fn compose_pairs_list(pairs: &JsonData) -> List { [INFO] [stdout] | ^^^^^^^^^ ^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 105 | fn compose_pairs_list(pairs: &JsonData) -> List<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:261:32 [INFO] [stdout] | [INFO] [stdout] 261 | fn compose_preview_screen(app: &App) -> Result { [INFO] [stdout] | ^^^^ ^^^^^^^^^ the same lifetime is hidden here [INFO] [stdout] | | [INFO] [stdout] | the lifetime is elided here [INFO] [stdout] | [INFO] [stdout] = help: the same lifetime is referred to in inconsistent ways, making the signature confusing [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 261 | fn compose_preview_screen(app: &App) -> Result, io::Error> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 20.73s [INFO] running `Command { std: "docker" "inspect" "6595c3e592240d5f26ea2abefec52cf1160dd65d9baecd3051406422ca315a4b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "6595c3e592240d5f26ea2abefec52cf1160dd65d9baecd3051406422ca315a4b", kill_on_drop: false }` [INFO] [stdout] 6595c3e592240d5f26ea2abefec52cf1160dd65d9baecd3051406422ca315a4b