[INFO] cloning repository https://github.com/sdkfz182/todo-rs [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sdkfz182/todo-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsdkfz182%2Ftodo-rs", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsdkfz182%2Ftodo-rs'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 056ab6aa36a6aeeb1ba367dfb8b8ee4b5a9d8d96 [INFO] linting sdkfz182/todo-rs against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsdkfz182%2Ftodo-rs" "/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/sdkfz182/todo-rs [INFO] finished tweaking git repo https://github.com/sdkfz182/todo-rs [INFO] tweaked toml for git repo https://github.com/sdkfz182/todo-rs written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/sdkfz182/todo-rs 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/sdkfz182/todo-rs 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] Downloading crates ... [INFO] [stderr] Downloaded ratatui-termwiz v0.1.0 [INFO] [stderr] Downloaded wezterm-dynamic-derive v0.1.1 [INFO] [stderr] Downloaded wezterm-dynamic v0.2.1 [INFO] [stderr] Downloaded time-core v0.1.7 [INFO] [stderr] Downloaded wezterm-color-types v0.3.0 [INFO] [stderr] Downloaded vtparse v0.6.2 [INFO] [stderr] Downloaded lab v0.11.0 [INFO] [stderr] Downloaded wezterm-input-types v0.1.0 [INFO] [stderr] Downloaded mac_address v1.1.8 [INFO] [stderr] Downloaded ratatui-crossterm v0.1.0 [INFO] [stderr] Downloaded ratatui-macros v0.7.0 [INFO] [stderr] Downloaded terminfo v0.9.0 [INFO] [stderr] Downloaded finl_unicode v1.4.0 [INFO] [stderr] Downloaded fancy-regex v0.11.0 [INFO] [stderr] Downloaded wezterm-bidi v0.2.3 [INFO] [stderr] Downloaded wezterm-blob-leases v0.1.1 [INFO] [stderr] Downloaded time v0.3.45 [INFO] [stderr] Downloaded termwiz v0.23.3 [INFO] [stderr] Downloaded deltae v0.3.2 [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] 2e4df5aea30bde6b568c5153b8dc0c8f73aa4d0cef250a1004cf2ef126dfec68 [INFO] running `Command { std: "docker" "start" "-a" "2e4df5aea30bde6b568c5153b8dc0c8f73aa4d0cef250a1004cf2ef126dfec68", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "2e4df5aea30bde6b568c5153b8dc0c8f73aa4d0cef250a1004cf2ef126dfec68", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "2e4df5aea30bde6b568c5153b8dc0c8f73aa4d0cef250a1004cf2ef126dfec68", kill_on_drop: false }` [INFO] [stdout] 2e4df5aea30bde6b568c5153b8dc0c8f73aa4d0cef250a1004cf2ef126dfec68 [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] 02e14214e131c3fc69ca146a6ba8b572896b59fdf684ee13ae15c99b774b7d77 [INFO] running `Command { std: "docker" "start" "-a" "02e14214e131c3fc69ca146a6ba8b572896b59fdf684ee13ae15c99b774b7d77", kill_on_drop: false }` [INFO] [stderr] Compiling thiserror v2.0.18 [INFO] [stderr] Checking hashbrown v0.16.1 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking ryu v1.0.22 [INFO] [stderr] Compiling quote v1.0.43 [INFO] [stderr] Checking num_threads v0.1.7 [INFO] [stderr] Compiling object v0.37.3 [INFO] [stderr] Checking time-core v0.1.7 [INFO] [stderr] Compiling owo-colors v4.2.3 [INFO] [stderr] Checking tracing v0.1.44 [INFO] [stderr] Checking tracing-subscriber v0.3.22 [INFO] [stderr] Checking line-clipping v0.3.5 [INFO] [stderr] Checking memchr v2.7.6 [INFO] [stderr] Checking gimli v0.32.3 [INFO] [stderr] Checking rustc-demangle v0.1.27 [INFO] [stderr] Checking indenter v0.3.4 [INFO] [stderr] Checking compact_str v0.9.0 [INFO] [stderr] Checking time v0.3.45 [INFO] [stderr] Checking eyre v0.6.12 [INFO] [stderr] Compiling syn v2.0.114 [INFO] [stderr] Checking lru v0.16.3 [INFO] [stderr] Checking unicode-truncate v2.0.1 [INFO] [stderr] Checking tracing-error v0.2.1 [INFO] [stderr] Checking color-spantrace v0.3.0 [INFO] [stderr] Checking addr2line v0.25.1 [INFO] [stderr] Compiling darling_core v0.23.0 [INFO] [stderr] Compiling thiserror-impl v2.0.18 [INFO] [stderr] Compiling strum_macros v0.27.2 [INFO] [stderr] Compiling derive_more-impl v2.1.1 [INFO] [stderr] Checking derive_more v2.1.1 [INFO] [stderr] Checking crossterm v0.29.0 [INFO] [stderr] Checking backtrace v0.3.76 [INFO] [stderr] Checking color-eyre v0.6.5 [INFO] [stderr] Checking kasuari v0.4.11 [INFO] [stderr] Compiling darling_macro v0.23.0 [INFO] [stderr] Checking strum v0.27.2 [INFO] [stderr] Checking ratatui-core v0.1.0 [INFO] [stderr] Compiling darling v0.23.0 [INFO] [stderr] Compiling instability v0.3.11 [INFO] [stderr] Checking ratatui-widgets v0.3.0 [INFO] [stderr] Checking ratatui-crossterm v0.1.0 [INFO] [stderr] Checking ratatui-macros v0.7.0 [INFO] [stderr] Checking ratatui v0.30.0 [INFO] [stderr] Checking todo_rs v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused variable: `inner2` [INFO] [stdout] --> src/main.rs:353:13 [INFO] [stdout] | [INFO] [stdout] 353 | let inner2 = main_chunks[1]; [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_inner2` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: irrefutable `if let` pattern [INFO] [stdout] --> src/main.rs:372:8 [INFO] [stdout] | [INFO] [stdout] 372 | if let page = &app_state.page_list[app_state.selected_page.unwrap()] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this pattern will always match, so the `if let` is useless [INFO] [stdout] = help: consider replacing the `if let` with a `let` [INFO] [stdout] = note: `#[warn(irrefutable_let_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `prefix_group` is never read [INFO] [stdout] --> src/main.rs:374:36 [INFO] [stdout] | [INFO] [stdout] 374 | let mut prefix_group = ""; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `prefix_todo` is never read [INFO] [stdout] --> src/main.rs:386:43 [INFO] [stdout] | [INFO] [stdout] 386 | let mut prefix_todo = ""; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app_state` [INFO] [stdout] --> src/main.rs:427:41 [INFO] [stdout] | [INFO] [stdout] 427 | fn render_add_select(frame: &mut Frame, app_state: &mut ApplicationState) { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_app_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Edit` is never constructed [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | enum TodoModes { [INFO] [stdout] | --------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 15 | Edit, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warning` and `Message` are never constructed [INFO] [stdout] --> src/main.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 27 | enum AlertMode { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 30 | Warning, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 31 | Message, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Failed` and `Late` are never constructed [INFO] [stdout] --> src/main.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | enum TodoState { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 36 | Done, [INFO] [stdout] 37 | Failed, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 38 | Late, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `id_counter` is never read [INFO] [stdout] --> src/main.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 42 | struct ApplicationState { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 48 | id_counter: u32, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `id` and `description` are never read [INFO] [stdout] --> src/main.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 66 | struct TodoItem { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 67 | id: u32, [INFO] [stdout] | ^^ [INFO] [stdout] 68 | title: String, [INFO] [stdout] 69 | description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `selected_page` is never used [INFO] [stdout] --> src/main.rs:114:8 [INFO] [stdout] | [INFO] [stdout] 84 | impl ApplicationState { [INFO] [stdout] | --------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 114 | fn selected_page(&self) -> Option<&TodoPage> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `clear_list`, `rename`, `move_todo_up`, and `move_todo_down` are never used [INFO] [stdout] --> src/main.rs:217:8 [INFO] [stdout] | [INFO] [stdout] 195 | impl TodoGroup { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 217 | fn clear_list(&mut self) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn rename(&mut self, _title: String) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 225 | fn move_todo_up(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 229 | fn move_todo_down(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `rename` is never used [INFO] [stdout] --> src/main.rs:244:8 [INFO] [stdout] | [INFO] [stdout] 234 | impl TodoItem { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 244 | fn rename(&mut self, _title: String) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | Some(self.page_list.get(p)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 116 - Some(self.page_list.get(p)?) [INFO] [stdout] 116 + self.page_list.get(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | Some(self.page_list.get(p)?.group_list.get(g)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 123 - Some(self.page_list.get(p)?.group_list.get(g)?) [INFO] [stdout] 123 + self.page_list.get(p)?.group_list.get(g) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:131:9 [INFO] [stdout] | [INFO] [stdout] 131 | Some(self.page_list.get(p)?.group_list.get(g)?.item_list.get(t)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 131 - Some(self.page_list.get(p)?.group_list.get(g)?.item_list.get(t)?) [INFO] [stdout] 131 + self.page_list.get(p)?.group_list.get(g)?.item_list.get(t) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:136:9 [INFO] [stdout] | [INFO] [stdout] 136 | Some(self.page_list.get_mut(p)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 136 - Some(self.page_list.get_mut(p)?) [INFO] [stdout] 136 + self.page_list.get_mut(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:143:9 [INFO] [stdout] | [INFO] [stdout] 143 | Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 143 - Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?) [INFO] [stdout] 143 + self.page_list.get_mut(p)?.group_list.get_mut(g) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 151 - Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t)?) [INFO] [stdout] 151 + self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `inner2` [INFO] [stdout] --> src/main.rs:353:13 [INFO] [stdout] | [INFO] [stdout] 353 | let inner2 = main_chunks[1]; [INFO] [stdout] | ^^^^^^ help: if this is intentional, prefix it with an underscore: `_inner2` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: irrefutable `if let` pattern [INFO] [stdout] --> src/main.rs:372:8 [INFO] [stdout] | [INFO] [stdout] 372 | if let page = &app_state.page_list[app_state.selected_page.unwrap()] { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this pattern will always match, so the `if let` is useless [INFO] [stdout] = help: consider replacing the `if let` with a `let` [INFO] [stdout] = note: `#[warn(irrefutable_let_patterns)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression assigns a bool literal [INFO] [stdout] --> src/main.rs:209:9 [INFO] [stdout] | [INFO] [stdout] 209 | / if self.show_items { [INFO] [stdout] 210 | | self.show_items = false; [INFO] [stdout] 211 | | } [INFO] [stdout] 212 | | else { [INFO] [stdout] 213 | | self.show_items = true; [INFO] [stdout] 214 | | } [INFO] [stdout] | |_________^ help: you can reduce it to: `self.show_items = !self.show_items;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool_assign [INFO] [stdout] = note: `#[warn(clippy::needless_bool_assign)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:276:9 [INFO] [stdout] | [INFO] [stdout] 276 | / if event::poll(Duration::from_millis(100))? { [INFO] [stdout] 277 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 278 | | handle_input(key, &mut app_state); [INFO] [stdout] 279 | | } [INFO] [stdout] 280 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 276 ~ if event::poll(Duration::from_millis(100))? [INFO] [stdout] 277 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 278 | handle_input(key, &mut app_state); [INFO] [stdout] 279 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:317:56 [INFO] [stdout] | [INFO] [stdout] 317 | render_alert_box(frame, &app_state.alert_mode, &app_state.alert_string_buffer.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `app_state.alert_string_buffer.as_str()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `prefix_group` is never read [INFO] [stdout] --> src/main.rs:374:36 [INFO] [stdout] | [INFO] [stdout] 374 | let mut prefix_group = ""; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: value assigned to `prefix_todo` is never read [INFO] [stdout] --> src/main.rs:386:43 [INFO] [stdout] | [INFO] [stdout] 386 | let mut prefix_todo = ""; [INFO] [stdout] | ^^ [INFO] [stdout] | [INFO] [stdout] = help: maybe it is overwritten before being read? [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app_state` [INFO] [stdout] --> src/main.rs:427:41 [INFO] [stdout] | [INFO] [stdout] 427 | fn render_add_select(frame: &mut Frame, app_state: &mut ApplicationState) { [INFO] [stdout] | ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_app_state` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `ListState` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:359:26 [INFO] [stdout] | [INFO] [stdout] 359 | let mut list_state = app_state.item_list_state.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app_state.item_list_state` [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: variant `Edit` is never constructed [INFO] [stdout] --> src/main.rs:15:5 [INFO] [stdout] | [INFO] [stdout] 11 | enum TodoModes { [INFO] [stdout] | --------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 15 | Edit, [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Warning` and `Message` are never constructed [INFO] [stdout] --> src/main.rs:30:5 [INFO] [stdout] | [INFO] [stdout] 27 | enum AlertMode { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 30 | Warning, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 31 | Message, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Failed` and `Late` are never constructed [INFO] [stdout] --> src/main.rs:37:5 [INFO] [stdout] | [INFO] [stdout] 35 | enum TodoState { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] 36 | Done, [INFO] [stdout] 37 | Failed, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 38 | Late, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `id_counter` is never read [INFO] [stdout] --> src/main.rs:48:5 [INFO] [stdout] | [INFO] [stdout] 42 | struct ApplicationState { [INFO] [stdout] | ---------------- field in this struct [INFO] [stdout] ... [INFO] [stdout] 48 | id_counter: u32, [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `id` and `description` are never read [INFO] [stdout] --> src/main.rs:67:5 [INFO] [stdout] | [INFO] [stdout] 66 | struct TodoItem { [INFO] [stdout] | -------- fields in this struct [INFO] [stdout] 67 | id: u32, [INFO] [stdout] | ^^ [INFO] [stdout] 68 | title: String, [INFO] [stdout] 69 | description: String, [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `selected_page` is never used [INFO] [stdout] --> src/main.rs:114:8 [INFO] [stdout] | [INFO] [stdout] 84 | impl ApplicationState { [INFO] [stdout] | --------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 114 | fn selected_page(&self) -> Option<&TodoPage> { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `clear_list`, `rename`, `move_todo_up`, and `move_todo_down` are never used [INFO] [stdout] --> src/main.rs:217:8 [INFO] [stdout] | [INFO] [stdout] 195 | impl TodoGroup { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 217 | fn clear_list(&mut self) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 221 | fn rename(&mut self, _title: String) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 225 | fn move_todo_up(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 229 | fn move_todo_down(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `rename` is never used [INFO] [stdout] --> src/main.rs:244:8 [INFO] [stdout] | [INFO] [stdout] 234 | impl TodoItem { [INFO] [stdout] | ------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 244 | fn rename(&mut self, _title: String) { [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:453:8 [INFO] [stdout] | [INFO] [stdout] 453 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:548:16 [INFO] [stdout] | [INFO] [stdout] 548 | if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `app_state.page_list_state.selected().is_some()` [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: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:524:13 [INFO] [stdout] | [INFO] [stdout] 524 | / if app_state.page_list.len() > 0 { [INFO] [stdout] 525 | | let up = match app_state.page_list_state.selected() { [INFO] [stdout] 526 | | Some(up) => { [INFO] [stdout] 527 | | if up == 0 {app_state.page_list.len() - 1} else {up - 1} [INFO] [stdout] ... | [INFO] [stdout] 532 | | app_state.selected_page = Some(up); [INFO] [stdout] 533 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 523 ~ KeyCode::Char('k') | KeyCode::Up [INFO] [stdout] 524 ~ if app_state.page_list.len() > 0 => { [INFO] [stdout] 525 | let up = match app_state.page_list_state.selected() { [INFO] [stdout] ... [INFO] [stdout] 532 | app_state.selected_page = Some(up); [INFO] [stdout] 533 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:536:13 [INFO] [stdout] | [INFO] [stdout] 536 | / if app_state.page_list.len() > 0 { [INFO] [stdout] 537 | | let down = match app_state.page_list_state.selected() { [INFO] [stdout] 538 | | Some(down) => { [INFO] [stdout] 539 | | if down == app_state.page_list.len() - 1 {0} else {down + 1} [INFO] [stdout] ... | [INFO] [stdout] 544 | | app_state.selected_page = Some(down); [INFO] [stdout] 545 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 535 ~ KeyCode::Char('j') | KeyCode::Down [INFO] [stdout] 536 ~ if app_state.page_list.len() > 0 => { [INFO] [stdout] 537 | let down = match app_state.page_list_state.selected() { [INFO] [stdout] ... [INFO] [stdout] 544 | app_state.selected_page = Some(down); [INFO] [stdout] 545 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:548:13 [INFO] [stdout] | [INFO] [stdout] 548 | / if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] 549 | | app_state.mode = TodoModes::Normal; [INFO] [stdout] 550 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 547 ~ KeyCode::Enter [INFO] [stdout] 548 ~ if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 => { [INFO] [stdout] 549 | app_state.mode = TodoModes::Normal; [INFO] [stdout] 550 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:524:16 [INFO] [stdout] | [INFO] [stdout] 524 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:536:16 [INFO] [stdout] | [INFO] [stdout] 536 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:548:67 [INFO] [stdout] | [INFO] [stdout] 548 | if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/main.rs:671:5 [INFO] [stdout] | [INFO] [stdout] 671 | / match key.code { [INFO] [stdout] 672 | | _ => { [INFO] [stdout] 673 | | match app_state.input_mode { [INFO] [stdout] 674 | | ActiveInput::AddPage | ActiveInput::None => { [INFO] [stdout] ... | [INFO] [stdout] 686 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using the match body instead [INFO] [stdout] | [INFO] [stdout] 671 ~ match app_state.input_mode { [INFO] [stdout] 672 + ActiveInput::AddPage | ActiveInput::None => { [INFO] [stdout] 673 + app_state.mode = TodoModes::PageSelect; [INFO] [stdout] 674 + app_state.input_mode = ActiveInput::None; [INFO] [stdout] 675 + app_state.has_popup = false; [INFO] [stdout] 676 + } [INFO] [stdout] 677 + ActiveInput::AddGroup | ActiveInput::AddTodo => { [INFO] [stdout] 678 + app_state.mode = TodoModes::Normal; [INFO] [stdout] 679 + app_state.input_mode = ActiveInput::None; [INFO] [stdout] 680 + app_state.has_popup = false; [INFO] [stdout] 681 + } [INFO] [stdout] 682 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:116:9 [INFO] [stdout] | [INFO] [stdout] 116 | Some(self.page_list.get(p)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] = note: `#[warn(clippy::needless_question_mark)]` on by default [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 116 - Some(self.page_list.get(p)?) [INFO] [stdout] 116 + self.page_list.get(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:123:9 [INFO] [stdout] | [INFO] [stdout] 123 | Some(self.page_list.get(p)?.group_list.get(g)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 123 - Some(self.page_list.get(p)?.group_list.get(g)?) [INFO] [stdout] 123 + self.page_list.get(p)?.group_list.get(g) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:131:9 [INFO] [stdout] | [INFO] [stdout] 131 | Some(self.page_list.get(p)?.group_list.get(g)?.item_list.get(t)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 131 - Some(self.page_list.get(p)?.group_list.get(g)?.item_list.get(t)?) [INFO] [stdout] 131 + self.page_list.get(p)?.group_list.get(g)?.item_list.get(t) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:136:9 [INFO] [stdout] | [INFO] [stdout] 136 | Some(self.page_list.get_mut(p)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 136 - Some(self.page_list.get_mut(p)?) [INFO] [stdout] 136 + self.page_list.get_mut(p) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:143:9 [INFO] [stdout] | [INFO] [stdout] 143 | Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 143 - Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?) [INFO] [stdout] 143 + self.page_list.get_mut(p)?.group_list.get_mut(g) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/main.rs:365:34 [INFO] [stdout] | [INFO] [stdout] 365 | fn block_content_list(app_state: &mut ApplicationState) -> 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] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 365 | fn block_content_list(app_state: &mut ApplicationState) -> List<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enclosing `Some` and `?` operator are unneeded [INFO] [stdout] --> src/main.rs:151:9 [INFO] [stdout] | [INFO] [stdout] 151 | Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t)?) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_question_mark [INFO] [stdout] help: remove the enclosing `Some` and `?` operator [INFO] [stdout] | [INFO] [stdout] 151 - Some(self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t)?) [INFO] [stdout] 151 + self.page_list.get_mut(p)?.group_list.get_mut(g)?.item_list.get_mut(t) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused return value of `core::str::::trim` that must be used [INFO] [stdout] --> src/main.rs:628:13 [INFO] [stdout] | [INFO] [stdout] 628 | app_state.buffer_string.trim(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this returns the trimmed string as a slice, without modifying the original [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 628 | let _ = app_state.buffer_string.trim(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this if-then-else expression assigns a bool literal [INFO] [stdout] --> src/main.rs:209:9 [INFO] [stdout] | [INFO] [stdout] 209 | / if self.show_items { [INFO] [stdout] 210 | | self.show_items = false; [INFO] [stdout] 211 | | } [INFO] [stdout] 212 | | else { [INFO] [stdout] 213 | | self.show_items = true; [INFO] [stdout] 214 | | } [INFO] [stdout] | |_________^ help: you can reduce it to: `self.show_items = !self.show_items;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool_assign [INFO] [stdout] = note: `#[warn(clippy::needless_bool_assign)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/main.rs:276:9 [INFO] [stdout] | [INFO] [stdout] 276 | / if event::poll(Duration::from_millis(100))? { [INFO] [stdout] 277 | | if let Event::Key(key) = event::read()? { [INFO] [stdout] 278 | | handle_input(key, &mut app_state); [INFO] [stdout] 279 | | } [INFO] [stdout] 280 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_if [INFO] [stdout] = note: `#[warn(clippy::collapsible_if)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 276 ~ if event::poll(Duration::from_millis(100))? [INFO] [stdout] 277 ~ && let Event::Key(key) = event::read()? { [INFO] [stdout] 278 | handle_input(key, &mut app_state); [INFO] [stdout] 279 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression creates a reference which is immediately dereferenced by the compiler [INFO] [stdout] --> src/main.rs:317:56 [INFO] [stdout] | [INFO] [stdout] 317 | render_alert_box(frame, &app_state.alert_mode, &app_state.alert_string_buffer.as_str()); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `app_state.alert_string_buffer.as_str()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow [INFO] [stdout] = note: `#[warn(clippy::needless_borrow)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: using `clone` on type `ListState` which implements the `Copy` trait [INFO] [stdout] --> src/main.rs:359:26 [INFO] [stdout] | [INFO] [stdout] 359 | let mut list_state = app_state.item_list_state.clone(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `app_state.item_list_state` [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: length comparison to zero [INFO] [stdout] --> src/main.rs:453:8 [INFO] [stdout] | [INFO] [stdout] 453 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] = note: `#[warn(clippy::len_zero)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/main.rs:548:16 [INFO] [stdout] | [INFO] [stdout] 548 | if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `app_state.page_list_state.selected().is_some()` [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: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:524:13 [INFO] [stdout] | [INFO] [stdout] 524 | / if app_state.page_list.len() > 0 { [INFO] [stdout] 525 | | let up = match app_state.page_list_state.selected() { [INFO] [stdout] 526 | | Some(up) => { [INFO] [stdout] 527 | | if up == 0 {app_state.page_list.len() - 1} else {up - 1} [INFO] [stdout] ... | [INFO] [stdout] 532 | | app_state.selected_page = Some(up); [INFO] [stdout] 533 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] = note: `#[warn(clippy::collapsible_match)]` on by default [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 523 ~ KeyCode::Char('k') | KeyCode::Up [INFO] [stdout] 524 ~ if app_state.page_list.len() > 0 => { [INFO] [stdout] 525 | let up = match app_state.page_list_state.selected() { [INFO] [stdout] ... [INFO] [stdout] 532 | app_state.selected_page = Some(up); [INFO] [stdout] 533 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:536:13 [INFO] [stdout] | [INFO] [stdout] 536 | / if app_state.page_list.len() > 0 { [INFO] [stdout] 537 | | let down = match app_state.page_list_state.selected() { [INFO] [stdout] 538 | | Some(down) => { [INFO] [stdout] 539 | | if down == app_state.page_list.len() - 1 {0} else {down + 1} [INFO] [stdout] ... | [INFO] [stdout] 544 | | app_state.selected_page = Some(down); [INFO] [stdout] 545 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 535 ~ KeyCode::Char('j') | KeyCode::Down [INFO] [stdout] 536 ~ if app_state.page_list.len() > 0 => { [INFO] [stdout] 537 | let down = match app_state.page_list_state.selected() { [INFO] [stdout] ... [INFO] [stdout] 544 | app_state.selected_page = Some(down); [INFO] [stdout] 545 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/main.rs:548:13 [INFO] [stdout] | [INFO] [stdout] 548 | / if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] 549 | | app_state.mode = TodoModes::Normal; [INFO] [stdout] 550 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_match [INFO] [stdout] help: collapse nested if block [INFO] [stdout] | [INFO] [stdout] 547 ~ KeyCode::Enter [INFO] [stdout] 548 ~ if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 => { [INFO] [stdout] 549 | app_state.mode = TodoModes::Normal; [INFO] [stdout] 550 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:524:16 [INFO] [stdout] | [INFO] [stdout] 524 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:536:16 [INFO] [stdout] | [INFO] [stdout] 536 | if app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/main.rs:548:67 [INFO] [stdout] | [INFO] [stdout] 548 | if !app_state.page_list_state.selected().is_none() && app_state.page_list.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!app_state.page_list.is_empty()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this match could be replaced by its body itself [INFO] [stdout] --> src/main.rs:671:5 [INFO] [stdout] | [INFO] [stdout] 671 | / match key.code { [INFO] [stdout] 672 | | _ => { [INFO] [stdout] 673 | | match app_state.input_mode { [INFO] [stdout] 674 | | ActiveInput::AddPage | ActiveInput::None => { [INFO] [stdout] ... | [INFO] [stdout] 686 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_single_binding [INFO] [stdout] = note: `#[warn(clippy::match_single_binding)]` on by default [INFO] [stdout] help: consider using the match body instead [INFO] [stdout] | [INFO] [stdout] 671 ~ match app_state.input_mode { [INFO] [stdout] 672 + ActiveInput::AddPage | ActiveInput::None => { [INFO] [stdout] 673 + app_state.mode = TodoModes::PageSelect; [INFO] [stdout] 674 + app_state.input_mode = ActiveInput::None; [INFO] [stdout] 675 + app_state.has_popup = false; [INFO] [stdout] 676 + } [INFO] [stdout] 677 + ActiveInput::AddGroup | ActiveInput::AddTodo => { [INFO] [stdout] 678 + app_state.mode = TodoModes::Normal; [INFO] [stdout] 679 + app_state.input_mode = ActiveInput::None; [INFO] [stdout] 680 + app_state.has_popup = false; [INFO] [stdout] 681 + } [INFO] [stdout] 682 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/main.rs:365:34 [INFO] [stdout] | [INFO] [stdout] 365 | fn block_content_list(app_state: &mut ApplicationState) -> 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] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: use `'_` for type paths [INFO] [stdout] | [INFO] [stdout] 365 | fn block_content_list(app_state: &mut ApplicationState) -> List<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused return value of `core::str::::trim` that must be used [INFO] [stdout] --> src/main.rs:628:13 [INFO] [stdout] | [INFO] [stdout] 628 | app_state.buffer_string.trim(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: this returns the trimmed string as a slice, without modifying the original [INFO] [stdout] = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 628 | let _ = app_state.buffer_string.trim(); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 16.83s [INFO] running `Command { std: "docker" "inspect" "02e14214e131c3fc69ca146a6ba8b572896b59fdf684ee13ae15c99b774b7d77", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "02e14214e131c3fc69ca146a6ba8b572896b59fdf684ee13ae15c99b774b7d77", kill_on_drop: false }` [INFO] [stdout] 02e14214e131c3fc69ca146a6ba8b572896b59fdf684ee13ae15c99b774b7d77