[INFO] fetching crate fpick 0.8.1... [INFO] linting fpick-0.8.1 against nightly for clippy-nonminimal_bool-denied [INFO] extracting crate fpick 0.8.1 into /workspace/builds/worker-7-tc1/source [INFO] started tweaking crates.io crate fpick 0.8.1 [INFO] finished tweaking crates.io crate fpick 0.8.1 [INFO] tweaked toml for crates.io crate fpick 0.8.1 written to /workspace/builds/worker-7-tc1/source/Cargo.toml [INFO] validating manifest of crates.io crate fpick 0.8.1 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 crates.io crate fpick 0.8.1 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] Downloading crates ... [INFO] [stderr] Downloaded instability v0.3.2 [INFO] [stderr] Downloaded anyhow v1.0.91 [INFO] [stderr] Downloaded compact_str v0.8.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] 1fe70c03ae8d328de333793442d6a76921104207d9d8fe472198e3e897bb6004 [INFO] running `Command { std: "docker" "start" "-a" "1fe70c03ae8d328de333793442d6a76921104207d9d8fe472198e3e897bb6004", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "1fe70c03ae8d328de333793442d6a76921104207d9d8fe472198e3e897bb6004", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "1fe70c03ae8d328de333793442d6a76921104207d9d8fe472198e3e897bb6004", kill_on_drop: false }` [INFO] [stdout] 1fe70c03ae8d328de333793442d6a76921104207d9d8fe472198e3e897bb6004 [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] e9ce1861ef1a6f5157663a3e3697394ae42b3ef0062de9aa843a8bcc04d79ad6 [INFO] running `Command { std: "docker" "start" "-a" "e9ce1861ef1a6f5157663a3e3697394ae42b3ef0062de9aa843a8bcc04d79ad6", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.161 [INFO] [stderr] Compiling proc-macro2 v1.0.89 [INFO] [stderr] Checking log v0.4.22 [INFO] [stderr] Compiling rustix v0.38.37 [INFO] [stderr] Checking either v1.13.0 [INFO] [stderr] Checking allocator-api2 v0.2.18 [INFO] [stderr] Checking linux-raw-sys v0.4.14 [INFO] [stderr] Checking bitflags v2.6.0 [INFO] [stderr] Checking foldhash v0.1.3 [INFO] [stderr] Checking castaway v0.2.3 [INFO] [stderr] Compiling anyhow v1.0.91 [INFO] [stderr] Checking smawk v0.3.2 [INFO] [stderr] Compiling indoc v2.0.5 [INFO] [stderr] Checking unicode-linebreak v0.1.5 [INFO] [stderr] Checking chrono v0.4.38 [INFO] [stderr] Checking relative-path v1.9.3 [INFO] [stderr] Checking compact_str v0.8.0 [INFO] [stderr] Checking textwrap v0.16.1 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking hashbrown v0.15.0 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking mio v1.0.2 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking signal-hook v0.3.17 [INFO] [stderr] Compiling quote v1.0.37 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Compiling syn v2.0.85 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling instability v0.3.2 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Checking fpick v0.8.1 (/opt/rustwide/workdir) [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/action_menu.rs:113:38 [INFO] [stdout] | [INFO] [stdout] 113 | pub fn execute_shell_operation(path: &String, command_template: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 113 - pub fn execute_shell_operation(path: &String, command_template: &str) -> Result<()> { [INFO] [stdout] 113 + pub fn execute_shell_operation(path: &str, command_template: &str) -> Result<()> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/action_menu.rs:119:11 [INFO] [stdout] | [INFO] [stdout] 119 | path: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 119 - path: &String, [INFO] [stdout] 119 + path: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/app.rs:79:13 [INFO] [stdout] | [INFO] [stdout] 79 | / signal_rx.try_recv().ok().map(|_| { [INFO] [stdout] 80 | | self.quit(); [INFO] [stdout] 81 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 79 - signal_rx.try_recv().ok().map(|_| { [INFO] [stdout] 80 - self.quit(); [INFO] [stdout] 81 - }); [INFO] [stdout] 79 + if let Some(_) = signal_rx.try_recv().ok() { self.quit(); } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/app.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | return rx; [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] 99 - return rx; [INFO] [stdout] 99 + rx [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/app.rs:92:40 [INFO] [stdout] | [INFO] [stdout] 92 | let mut signals = Signals::new(&[SIGINT, SIGTERM]).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `[SIGINT, SIGTERM]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/app_logic/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod app_logic; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/app_logic/app_logic.rs:36:15 [INFO] [stdout] | [INFO] [stdout] 36 | while args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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: called `unwrap_err` on `nodes_result` after checking its variant with `is_err` [INFO] [stdout] --> src/app_logic/app_logic.rs:157:61 [INFO] [stdout] | [INFO] [stdout] 156 | if nodes_result.is_err() { [INFO] [stdout] | ------------------------ help: try: `if let Err() = nodes_result` [INFO] [stdout] 157 | self.error_message = Some(contextualized_error(&nodes_result.unwrap_err())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [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: unneeded `return` statement [INFO] [stdout] --> src/app_logic/app_logic.rs:205:44 [INFO] [stdout] | [INFO] [stdout] 205 | TreeNodeType::SelfReference => return, [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: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 205 - TreeNodeType::SelfReference => return, [INFO] [stdout] 205 + TreeNodeType::SelfReference => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app_logic/app_logic.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | if !self.picked_path.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.picked_path.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 block may be rewritten with the `?` operator [INFO] [stdout] --> src/app_logic/app_logic.rs:324:9 [INFO] [stdout] | [INFO] [stdout] 324 | / if selected_node_o.is_none() { [INFO] [stdout] 325 | | return None; [INFO] [stdout] 326 | | } [INFO] [stdout] | |_________^ help: replace it with: `selected_node_o.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/app_logic/app_logic.rs:355:59 [INFO] [stdout] | [INFO] [stdout] 355 | let starting_path_abs: PathBuf = fs::canonicalize(&starting_path).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `starting_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app_logic/app_logic.rs:361:43 [INFO] [stdout] | [INFO] [stdout] 361 | self.error_message = Some(format!( [INFO] [stdout] | ___________________________________________^ [INFO] [stdout] 362 | | "Selected path is not relative to the starting directory" [INFO] [stdout] 363 | | )); [INFO] [stdout] | |_________________^ help: consider using `.to_string()`: `"Selected path is not relative to the starting directory".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/app_logic/app_logic.rs:377:50 [INFO] [stdout] | [INFO] [stdout] 377 | TreeNodeType::FileNode(file_node) => match file_node.file_type { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 378 | | FileType::Directory => true, [INFO] [stdout] 379 | | _ => false, [INFO] [stdout] 380 | | }, [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 377 - TreeNodeType::FileNode(file_node) => match file_node.file_type { [INFO] [stdout] 378 - FileType::Directory => true, [INFO] [stdout] 379 - _ => false, [INFO] [stdout] 380 - }, [INFO] [stdout] 377 + TreeNodeType::FileNode(file_node) => matches!(file_node.file_type, FileType::Directory), [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_logic/logic_action_menu.rs:47:17 [INFO] [stdout] | [INFO] [stdout] 47 | / match result { [INFO] [stdout] 48 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 49 | | _ => {} [INFO] [stdout] 50 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [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] [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_logic/logic_action_menu.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | / match result { [INFO] [stdout] 55 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 56 | | _ => {} [INFO] [stdout] 57 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:66:32 [INFO] [stdout] | [INFO] [stdout] 66 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 66 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 66 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [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_logic/logic_action_menu.rs:95:17 [INFO] [stdout] | [INFO] [stdout] 95 | / match result { [INFO] [stdout] 96 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 97 | | _ => {} [INFO] [stdout] 98 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | / match result { [INFO] [stdout] 106 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 107 | | _ => {} [INFO] [stdout] 108 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:155:17 [INFO] [stdout] | [INFO] [stdout] 155 | / match result { [INFO] [stdout] 156 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 157 | | _ => {} [INFO] [stdout] 158 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:166:17 [INFO] [stdout] | [INFO] [stdout] 166 | / match result { [INFO] [stdout] 167 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 168 | | _ => {} [INFO] [stdout] 169 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:174:17 [INFO] [stdout] | [INFO] [stdout] 174 | / match result { [INFO] [stdout] 175 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 176 | | _ => {} [INFO] [stdout] 177 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:182:17 [INFO] [stdout] | [INFO] [stdout] 182 | / match result { [INFO] [stdout] 183 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 184 | | _ => {} [INFO] [stdout] 185 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:219:24 [INFO] [stdout] | [INFO] [stdout] 219 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 219 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 219 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:229:24 [INFO] [stdout] | [INFO] [stdout] 229 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 229 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 229 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/appdata.rs:8:1 [INFO] [stdout] | [INFO] [stdout] 8 | / impl Default for WindowFocus { [INFO] [stdout] 9 | | fn default() -> Self { [INFO] [stdout] 10 | | WindowFocus::Tree [INFO] [stdout] 11 | | } [INFO] [stdout] 12 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 2 + #[derive(Default)] [INFO] [stdout] 3 | pub enum WindowFocus { [INFO] [stdout] 4 ~ #[default] [INFO] [stdout] 5 ~ Tree, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/background.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | / self.background_event_channel [INFO] [stdout] 12 | | .rx [INFO] [stdout] 13 | | .try_recv() [INFO] [stdout] 14 | | .ok() [INFO] [stdout] 15 | | .map(|event: BackgroundEvent| { [INFO] [stdout] 16 | | self.consume_background_event(event); [INFO] [stdout] 17 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 11 ~ if let Some(event) = self.background_event_channel [INFO] [stdout] 12 + .rx [INFO] [stdout] 13 + .try_recv() [INFO] [stdout] 14 + .ok() { self.consume_background_event(event); } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/action_menu.rs:113:38 [INFO] [stdout] | [INFO] [stdout] 113 | pub fn execute_shell_operation(path: &String, command_template: &str) -> Result<()> { [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 113 - pub fn execute_shell_operation(path: &String, command_template: &str) -> Result<()> { [INFO] [stdout] 113 + pub fn execute_shell_operation(path: &str, command_template: &str) -> Result<()> { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&String` instead of `&str` involves a new object where a slice will do [INFO] [stdout] --> src/action_menu.rs:119:11 [INFO] [stdout] | [INFO] [stdout] 119 | path: &String, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 119 - path: &String, [INFO] [stdout] 119 + path: &str, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/event.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | / ... if !Self::is_suspended(&suspended_store.clone()) { [INFO] [stdout] 63 | | ... if e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | | ... sender [INFO] [stdout] 65 | | ... .send(Event::Key(e)) [INFO] [stdout] ... | [INFO] [stdout] 68 | | ... } [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] 61 ~ CrosstermEvent::Key(e) [INFO] [stdout] 62 ~ if !Self::is_suspended(&suspended_store.clone()) => { [INFO] [stdout] 63 | if e.kind == event::KeyEventKind::Press { [INFO] [stdout] ... [INFO] [stdout] 67 | } [INFO] [stdout] 68 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/event.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | / ... if !Self::is_suspended(&suspended_store.clone()) { [INFO] [stdout] 63 | | ... if e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | | ... sender [INFO] [stdout] 65 | | ... .send(Event::Key(e)) [INFO] [stdout] ... | [INFO] [stdout] 68 | | ... } [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] 62 ~ if !Self::is_suspended(&suspended_store.clone()) [INFO] [stdout] 63 ~ && e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | sender [INFO] [stdout] 65 | .send(Event::Key(e)) [INFO] [stdout] 66 | .expect("failed to send key event"); [INFO] [stdout] 67 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/filesystem.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return Ok(files); [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] 64 - return Ok(files); [INFO] [stdout] 64 + Ok(files) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:114:35 [INFO] [stdout] | [INFO] [stdout] 114 | pub fn get_string_abs_path(nodes: &Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 114 - pub fn get_string_abs_path(nodes: &Vec) -> String { [INFO] [stdout] 114 + pub fn get_string_abs_path(nodes: &[FileNode]) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:126:32 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 126 - pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] 126 + pub fn nodes_start_with(nodes: &[FileNode], start: &Vec) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:126:55 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 126 - pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] 126 + pub fn nodes_start_with(nodes: &Vec, start: &[FileNode]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/app.rs:79:13 [INFO] [stdout] | [INFO] [stdout] 79 | / signal_rx.try_recv().ok().map(|_| { [INFO] [stdout] 80 | | self.quit(); [INFO] [stdout] 81 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] = note: `#[warn(clippy::option_map_unit_fn)]` on by default [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 79 - signal_rx.try_recv().ok().map(|_| { [INFO] [stdout] 80 - self.quit(); [INFO] [stdout] 81 - }); [INFO] [stdout] 79 + if let Some(_) = signal_rx.try_recv().ok() { self.quit(); } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/app.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | return rx; [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] 99 - return rx; [INFO] [stdout] 99 + rx [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/app.rs:92:40 [INFO] [stdout] | [INFO] [stdout] 92 | let mut signals = Signals::new(&[SIGINT, SIGTERM]).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ help: change this to: `[SIGINT, SIGTERM]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: module has the same name as its containing module [INFO] [stdout] --> src/app_logic/mod.rs:1:1 [INFO] [stdout] | [INFO] [stdout] 1 | mod app_logic; [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#module_inception [INFO] [stdout] = note: `#[warn(clippy::module_inception)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: length comparison to zero [INFO] [stdout] --> src/app_logic/app_logic.rs:36:15 [INFO] [stdout] | [INFO] [stdout] 36 | while args.len() > 0 { [INFO] [stdout] | ^^^^^^^^^^^^^^ help: using `!is_empty` is clearer and more explicit: `!args.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: methods called `into_*` usually take `self` by value [INFO] [stdout] --> src/numbers.rs:36:26 [INFO] [stdout] | [INFO] [stdout] 36 | fn into_intermediary(&self) -> i32; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `unwrap_err` on `nodes_result` after checking its variant with `is_err` [INFO] [stdout] --> src/app_logic/app_logic.rs:157:61 [INFO] [stdout] | [INFO] [stdout] 156 | if nodes_result.is_err() { [INFO] [stdout] | ------------------------ help: try: `if let Err() = nodes_result` [INFO] [stdout] 157 | self.error_message = Some(contextualized_error(&nodes_result.unwrap_err())); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [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: unneeded `return` statement [INFO] [stdout] --> src/app_logic/app_logic.rs:205:44 [INFO] [stdout] | [INFO] [stdout] 205 | TreeNodeType::SelfReference => return, [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: replace `return` with a unit value [INFO] [stdout] | [INFO] [stdout] 205 - TreeNodeType::SelfReference => return, [INFO] [stdout] 205 + TreeNodeType::SelfReference => (), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/app_logic/app_logic.rs:287:12 [INFO] [stdout] | [INFO] [stdout] 287 | if !self.picked_path.is_none() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `self.picked_path.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 block may be rewritten with the `?` operator [INFO] [stdout] --> src/app_logic/app_logic.rs:324:9 [INFO] [stdout] | [INFO] [stdout] 324 | / if selected_node_o.is_none() { [INFO] [stdout] 325 | | return None; [INFO] [stdout] 326 | | } [INFO] [stdout] | |_________^ help: replace it with: `selected_node_o.as_ref()?;` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#question_mark [INFO] [stdout] = note: `#[warn(clippy::question_mark)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/tree.rs:92:39 [INFO] [stdout] | [INFO] [stdout] 92 | pub fn render_tree_nodes(child_nodes: &Vec, filter_text: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 92 - pub fn render_tree_nodes(child_nodes: &Vec, filter_text: &str) -> Vec { [INFO] [stdout] 92 + pub fn render_tree_nodes(child_nodes: &[FileNode], filter_text: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/app_logic/app_logic.rs:355:59 [INFO] [stdout] | [INFO] [stdout] 355 | let starting_path_abs: PathBuf = fs::canonicalize(&starting_path).unwrap(); [INFO] [stdout] | ^^^^^^^^^^^^^^ help: change this to: `starting_path` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/app_logic/app_logic.rs:361:43 [INFO] [stdout] | [INFO] [stdout] 361 | self.error_message = Some(format!( [INFO] [stdout] | ___________________________________________^ [INFO] [stdout] 362 | | "Selected path is not relative to the starting directory" [INFO] [stdout] 363 | | )); [INFO] [stdout] | |_________________^ help: consider using `.to_string()`: `"Selected path is not relative to the starting directory".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: match expression looks like `matches!` macro [INFO] [stdout] --> src/app_logic/app_logic.rs:377:50 [INFO] [stdout] | [INFO] [stdout] 377 | TreeNodeType::FileNode(file_node) => match file_node.file_type { [INFO] [stdout] | __________________________________________________^ [INFO] [stdout] 378 | | FileType::Directory => true, [INFO] [stdout] 379 | | _ => false, [INFO] [stdout] 380 | | }, [INFO] [stdout] | |_____________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_like_matches_macro [INFO] [stdout] = note: `#[warn(clippy::match_like_matches_macro)]` on by default [INFO] [stdout] help: use `matches!` directly [INFO] [stdout] | [INFO] [stdout] 377 - TreeNodeType::FileNode(file_node) => match file_node.file_type { [INFO] [stdout] 378 - FileType::Directory => true, [INFO] [stdout] 379 - _ => false, [INFO] [stdout] 380 - }, [INFO] [stdout] 377 + TreeNodeType::FileNode(file_node) => matches!(file_node.file_type, FileType::Directory), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression can be written more simply using `.retain()` [INFO] [stdout] --> src/tree.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | / current_tree_nodes = current_tree_nodes [INFO] [stdout] 116 | | .into_iter() [INFO] [stdout] 117 | | .filter(|it| it.relevance > 0) [INFO] [stdout] 118 | | .collect(); [INFO] [stdout] | |______________________^ help: consider calling `.retain()` instead: `current_tree_nodes.retain(|it| it.relevance > 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_retain [INFO] [stdout] = note: `#[warn(clippy::manual_retain)]` 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_logic/logic_action_menu.rs:47:17 [INFO] [stdout] | [INFO] [stdout] 47 | / match result { [INFO] [stdout] 48 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 49 | | _ => {} [INFO] [stdout] 50 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [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] [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_logic/logic_action_menu.rs:54:17 [INFO] [stdout] | [INFO] [stdout] 54 | / match result { [INFO] [stdout] 55 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 56 | | _ => {} [INFO] [stdout] 57 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:66:32 [INFO] [stdout] | [INFO] [stdout] 66 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] = note: `#[warn(clippy::double_ended_iterator_last)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 66 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 66 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [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_logic/logic_action_menu.rs:95:17 [INFO] [stdout] | [INFO] [stdout] 95 | / match result { [INFO] [stdout] 96 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 97 | | _ => {} [INFO] [stdout] 98 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:105:17 [INFO] [stdout] | [INFO] [stdout] 105 | / match result { [INFO] [stdout] 106 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 107 | | _ => {} [INFO] [stdout] 108 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:155:17 [INFO] [stdout] | [INFO] [stdout] 155 | / match result { [INFO] [stdout] 156 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 157 | | _ => {} [INFO] [stdout] 158 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:166:17 [INFO] [stdout] | [INFO] [stdout] 166 | / match result { [INFO] [stdout] 167 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 168 | | _ => {} [INFO] [stdout] 169 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:174:17 [INFO] [stdout] | [INFO] [stdout] 174 | / match result { [INFO] [stdout] 175 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 176 | | _ => {} [INFO] [stdout] 177 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [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_logic/logic_action_menu.rs:182:17 [INFO] [stdout] | [INFO] [stdout] 182 | / match result { [INFO] [stdout] 183 | | Err(err) => self.show_error(err.to_string()), [INFO] [stdout] 184 | | _ => {} [INFO] [stdout] 185 | | } [INFO] [stdout] | |_________________^ help: try: `if let Err(err) = result { self.show_error(err.to_string()) }` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_match [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:219:24 [INFO] [stdout] | [INFO] [stdout] 219 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 219 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 219 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `Iterator::last` on a `DoubleEndedIterator`; this will needlessly iterate the entire iterator [INFO] [stdout] --> src/app_logic/logic_action_menu.rs:229:24 [INFO] [stdout] | [INFO] [stdout] 229 | let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#double_ended_iterator_last [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 229 - let filename = abs_path.split('/').last().unwrap().to_string(); [INFO] [stdout] 229 + let filename = abs_path.split('/').next_back().unwrap().to_string(); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `impl` can be derived [INFO] [stdout] --> src/appdata.rs:8:1 [INFO] [stdout] | [INFO] [stdout] 8 | / impl Default for WindowFocus { [INFO] [stdout] 9 | | fn default() -> Self { [INFO] [stdout] 10 | | WindowFocus::Tree [INFO] [stdout] 11 | | } [INFO] [stdout] 12 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls [INFO] [stdout] = note: `#[warn(clippy::derivable_impls)]` on by default [INFO] [stdout] help: replace the manual implementation with a derive attribute and mark the default variant [INFO] [stdout] | [INFO] [stdout] 2 + #[derive(Default)] [INFO] [stdout] 3 | pub enum WindowFocus { [INFO] [stdout] 4 ~ #[default] [INFO] [stdout] 5 ~ Tree, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: called `map(f)` on an `Option` value where `f` is a closure that returns the unit type `()` [INFO] [stdout] --> src/background.rs:11:9 [INFO] [stdout] | [INFO] [stdout] 11 | / self.background_event_channel [INFO] [stdout] 12 | | .rx [INFO] [stdout] 13 | | .try_recv() [INFO] [stdout] 14 | | .ok() [INFO] [stdout] 15 | | .map(|event: BackgroundEvent| { [INFO] [stdout] 16 | | self.consume_background_event(event); [INFO] [stdout] 17 | | }); [INFO] [stdout] | |______________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#option_map_unit_fn [INFO] [stdout] help: use `if let` instead [INFO] [stdout] | [INFO] [stdout] 11 ~ if let Some(event) = self.background_event_channel [INFO] [stdout] 12 + .rx [INFO] [stdout] 13 + .try_recv() [INFO] [stdout] 14 + .ok() { self.consume_background_event(event); } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/ui.rs:191:25 [INFO] [stdout] | [INFO] [stdout] 191 | let skipped_lines = wrapped_message [INFO] [stdout] | _________________________^ [INFO] [stdout] 192 | | .lines() [INFO] [stdout] 193 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 191 ~ let skipped_lines = wrapped_message [INFO] [stdout] 192 + .lines() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` can be collapsed into the outer `match` [INFO] [stdout] --> src/event.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | / ... if !Self::is_suspended(&suspended_store.clone()) { [INFO] [stdout] 63 | | ... if e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | | ... sender [INFO] [stdout] 65 | | ... .send(Event::Key(e)) [INFO] [stdout] ... | [INFO] [stdout] 68 | | ... } [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] 61 ~ CrosstermEvent::Key(e) [INFO] [stdout] 62 ~ if !Self::is_suspended(&suspended_store.clone()) => { [INFO] [stdout] 63 | if e.kind == event::KeyEventKind::Press { [INFO] [stdout] ... [INFO] [stdout] 67 | } [INFO] [stdout] 68 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this `if` statement can be collapsed [INFO] [stdout] --> src/event.rs:62:29 [INFO] [stdout] | [INFO] [stdout] 62 | / ... if !Self::is_suspended(&suspended_store.clone()) { [INFO] [stdout] 63 | | ... if e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | | ... sender [INFO] [stdout] 65 | | ... .send(Event::Key(e)) [INFO] [stdout] ... | [INFO] [stdout] 68 | | ... } [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] 62 ~ if !Self::is_suspended(&suspended_store.clone()) [INFO] [stdout] 63 ~ && e.kind == event::KeyEventKind::Press { [INFO] [stdout] 64 | sender [INFO] [stdout] 65 | .send(Event::Key(e)) [INFO] [stdout] 66 | .expect("failed to send key event"); [INFO] [stdout] 67 ~ } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unneeded `return` statement [INFO] [stdout] --> src/filesystem.rs:64:5 [INFO] [stdout] | [INFO] [stdout] 64 | return Ok(files); [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] 64 - return Ok(files); [INFO] [stdout] 64 + Ok(files) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:22:29 [INFO] [stdout] | [INFO] [stdout] 22 | pub fn render_list_item(&self) -> ListItem { [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] 22 | pub fn render_list_item(&self) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:50:29 [INFO] [stdout] | [INFO] [stdout] 50 | pub fn render_file_node(&self, file_node: &FileNode) -> ListItem { [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] 50 | pub fn render_file_node(&self, file_node: &FileNode) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:65:34 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn render_self_reference(&self) -> ListItem { [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] 65 | pub fn render_self_reference(&self) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:249:40 [INFO] [stdout] | [INFO] [stdout] 249 | fn render_action_popup_step2_line(app: &App) -> Line { [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] 249 | fn render_action_popup_step2_line(app: &App) -> Line<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:114:35 [INFO] [stdout] | [INFO] [stdout] 114 | pub fn get_string_abs_path(nodes: &Vec) -> String { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 114 - pub fn get_string_abs_path(nodes: &Vec) -> String { [INFO] [stdout] 114 + pub fn get_string_abs_path(nodes: &[FileNode]) -> String { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:126:32 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 126 - pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] 126 + pub fn nodes_start_with(nodes: &[FileNode], start: &Vec) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/filesystem.rs:126:55 [INFO] [stdout] | [INFO] [stdout] 126 | pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 126 - pub fn nodes_start_with(nodes: &Vec, start: &Vec) -> bool { [INFO] [stdout] 126 + pub fn nodes_start_with(nodes: &Vec, start: &[FileNode]) -> bool { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods called `into_*` usually take `self` by value [INFO] [stdout] --> src/numbers.rs:36:26 [INFO] [stdout] | [INFO] [stdout] 36 | fn into_intermediary(&self) -> i32; [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: consider choosing a less ambiguous name [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#wrong_self_convention [INFO] [stdout] = note: `#[warn(clippy::wrong_self_convention)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/tree.rs:92:39 [INFO] [stdout] | [INFO] [stdout] 92 | pub fn render_tree_nodes(child_nodes: &Vec, filter_text: &str) -> Vec { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 92 - pub fn render_tree_nodes(child_nodes: &Vec, filter_text: &str) -> Vec { [INFO] [stdout] 92 + pub fn render_tree_nodes(child_nodes: &[FileNode], filter_text: &str) -> Vec { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this expression can be written more simply using `.retain()` [INFO] [stdout] --> src/tree.rs:115:9 [INFO] [stdout] | [INFO] [stdout] 115 | / current_tree_nodes = current_tree_nodes [INFO] [stdout] 116 | | .into_iter() [INFO] [stdout] 117 | | .filter(|it| it.relevance > 0) [INFO] [stdout] 118 | | .collect(); [INFO] [stdout] | |______________________^ help: consider calling `.retain()` instead: `current_tree_nodes.retain(|it| it.relevance > 0)` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_retain [INFO] [stdout] = note: `#[warn(clippy::manual_retain)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless conversion to the same type: `std::str::Lines<'_>` [INFO] [stdout] --> src/ui.rs:191:25 [INFO] [stdout] | [INFO] [stdout] 191 | let skipped_lines = wrapped_message [INFO] [stdout] | _________________________^ [INFO] [stdout] 192 | | .lines() [INFO] [stdout] 193 | | .into_iter() [INFO] [stdout] | |____________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_conversion [INFO] [stdout] = note: `#[warn(clippy::useless_conversion)]` on by default [INFO] [stdout] help: consider removing `.into_iter()` [INFO] [stdout] | [INFO] [stdout] 191 ~ let skipped_lines = wrapped_message [INFO] [stdout] 192 + .lines() [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:22:29 [INFO] [stdout] | [INFO] [stdout] 22 | pub fn render_list_item(&self) -> ListItem { [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] 22 | pub fn render_list_item(&self) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:50:29 [INFO] [stdout] | [INFO] [stdout] 50 | pub fn render_file_node(&self, file_node: &FileNode) -> ListItem { [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] 50 | pub fn render_file_node(&self, file_node: &FileNode) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/tree.rs:65:34 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn render_self_reference(&self) -> ListItem { [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] 65 | pub fn render_self_reference(&self) -> ListItem<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing [INFO] [stdout] --> src/ui.rs:249:40 [INFO] [stdout] | [INFO] [stdout] 249 | fn render_action_popup_step2_line(app: &App) -> Line { [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] 249 | fn render_action_popup_step2_line(app: &App) -> Line<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 13.35s [INFO] running `Command { std: "docker" "inspect" "e9ce1861ef1a6f5157663a3e3697394ae42b3ef0062de9aa843a8bcc04d79ad6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e9ce1861ef1a6f5157663a3e3697394ae42b3ef0062de9aa843a8bcc04d79ad6", kill_on_drop: false }` [INFO] [stdout] e9ce1861ef1a6f5157663a3e3697394ae42b3ef0062de9aa843a8bcc04d79ad6