From 112f18582a90b3e78b61a8a38e0fbb9d06e404d9 Mon Sep 17 00:00:00 2001 From: Jamie Hewitt Date: Tue, 27 Jan 2026 23:58:18 +0000 Subject: [PATCH] Fix all 16 clippy warnings - Collapse else { if } blocks into else if (6 instances) - Replace map_or(false, ...) with is_some_and(...) (6 instances) - Replace iter().cloned().collect() with .to_vec() (2 instances) - Replace manual char comparison with array pattern (1 instance) - Replace useless vec! with array literal (1 instance) Co-Authored-By: Claude Opus 4.5 --- src/app/input_artists.rs | 62 ++++++++++++++++++-------------------- src/app/mouse.rs | 64 ++++++++++++++++++---------------------- src/ui/header.rs | 6 ++-- src/ui/pages/artists.rs | 2 +- src/ui/theme.rs | 4 +-- 5 files changed, 62 insertions(+), 76 deletions(-) diff --git a/src/app/input_artists.rs b/src/app/input_artists.rs index 7b21a61..3d91f7a 100644 --- a/src/app/input_artists.rs +++ b/src/app/input_artists.rs @@ -157,28 +157,26 @@ impl App { if was_expanded { state.artists.expanded.remove(&artist_id); - } else { - if !state.artists.albums_cache.contains_key(&artist_id) { - drop(state); - if let Some(ref client) = self.subsonic { - match client.get_artist(&artist_id).await { - Ok((_artist, albums)) => { - let mut state = self.state.write().await; - let count = albums.len(); - state.artists.albums_cache.insert(artist_id.clone(), albums); - state.artists.expanded.insert(artist_id); - info!("Loaded {} albums for {}", count, artist_name); - } - Err(e) => { - let mut state = self.state.write().await; - state.notify_error(format!("Failed to load: {}", e)); - } + } else if !state.artists.albums_cache.contains_key(&artist_id) { + drop(state); + if let Some(ref client) = self.subsonic { + match client.get_artist(&artist_id).await { + Ok((_artist, albums)) => { + let mut state = self.state.write().await; + let count = albums.len(); + state.artists.albums_cache.insert(artist_id.clone(), albums); + state.artists.expanded.insert(artist_id); + info!("Loaded {} albums for {}", count, artist_name); + } + Err(e) => { + let mut state = self.state.write().await; + state.notify_error(format!("Failed to load: {}", e)); } } - return Ok(()); - } else { - state.artists.expanded.insert(artist_id); } + return Ok(()); + } else { + state.artists.expanded.insert(artist_id); } } TreeItem::Album { album } => { @@ -296,13 +294,11 @@ impl App { state.notify(format!("Added to queue: {}", title)); } } - } else { - if !state.artists.songs.is_empty() { - let count = state.artists.songs.len(); - let songs = state.artists.songs.clone(); - state.queue.extend(songs); - state.notify(format!("Added {} songs to queue", count)); - } + } else if !state.artists.songs.is_empty() { + let count = state.artists.songs.len(); + let songs = state.artists.songs.clone(); + state.queue.extend(songs); + state.notify(format!("Added {} songs to queue", count)); } } KeyCode::Char('n') => { @@ -315,15 +311,13 @@ impl App { state.notify(format!("Playing next: {}", title)); } } - } else { - if !state.artists.songs.is_empty() { - let count = state.artists.songs.len(); - let songs: Vec<_> = state.artists.songs.iter().cloned().collect(); - for (i, song) in songs.into_iter().enumerate() { - state.queue.insert(insert_pos + i, song); - } - state.notify(format!("Playing {} songs next", count)); + } else if !state.artists.songs.is_empty() { + let count = state.artists.songs.len(); + let songs: Vec<_> = state.artists.songs.to_vec(); + for (i, song) in songs.into_iter().enumerate() { + state.queue.insert(insert_pos + i, song); } + state.notify(format!("Playing {} songs next", count)); } } _ => {} diff --git a/src/app/mouse.rs b/src/app/mouse.rs index 13b53c3..aa359dc 100644 --- a/src/app/mouse.rs +++ b/src/app/mouse.rs @@ -143,7 +143,7 @@ impl App { // Second click = activate (same as Enter) let is_second_click = was_selected - && self.last_click.map_or(false, |(lx, ly, t)| { + && self.last_click.is_some_and(|(lx, ly, t)| { lx == x && ly == y && t.elapsed().as_millis() < 500 }); @@ -157,29 +157,27 @@ impl App { if was_expanded { state.artists.expanded.remove(&artist_id); - } else { - if !state.artists.albums_cache.contains_key(&artist_id) { - drop(state); - if let Some(ref client) = self.subsonic { - match client.get_artist(&artist_id).await { - Ok((_artist, albums)) => { - let mut state = self.state.write().await; - let count = albums.len(); - state.artists.albums_cache.insert(artist_id.clone(), albums); - state.artists.expanded.insert(artist_id); - tracing::info!("Loaded {} albums for {}", count, artist_name); - } - Err(e) => { - let mut state = self.state.write().await; - state.notify_error(format!("Failed to load: {}", e)); - } + } else if !state.artists.albums_cache.contains_key(&artist_id) { + drop(state); + if let Some(ref client) = self.subsonic { + match client.get_artist(&artist_id).await { + Ok((_artist, albums)) => { + let mut state = self.state.write().await; + let count = albums.len(); + state.artists.albums_cache.insert(artist_id.clone(), albums); + state.artists.expanded.insert(artist_id); + tracing::info!("Loaded {} albums for {}", count, artist_name); + } + Err(e) => { + let mut state = self.state.write().await; + state.notify_error(format!("Failed to load: {}", e)); } } - self.last_click = Some((x, y, std::time::Instant::now())); - return Ok(()); - } else { - state.artists.expanded.insert(artist_id); } + self.last_click = Some((x, y, std::time::Instant::now())); + return Ok(()); + } else { + state.artists.expanded.insert(artist_id); } } TreeItem::Album { album } => { @@ -266,7 +264,7 @@ impl App { state.artists.selected_song = Some(item_index); let is_second_click = was_selected - && self.last_click.map_or(false, |(lx, ly, t)| { + && self.last_click.is_some_and(|(lx, ly, t)| { lx == x && ly == y && t.elapsed().as_millis() < 500 }); @@ -322,7 +320,7 @@ impl App { state.queue_state.selected = Some(item_index); let is_second_click = was_selected - && self.last_click.map_or(false, |(_, ly, t)| { + && self.last_click.is_some_and(|(_, ly, t)| { ly == y && t.elapsed().as_millis() < 500 }); @@ -359,7 +357,7 @@ impl App { state.playlists.selected_playlist = Some(item_index); let is_second_click = was_selected - && self.last_click.map_or(false, |(lx, ly, t)| { + && self.last_click.is_some_and(|(lx, ly, t)| { lx == x && ly == y && t.elapsed().as_millis() < 500 }); @@ -401,7 +399,7 @@ impl App { state.playlists.selected_song = Some(item_index); let is_second_click = was_selected - && self.last_click.map_or(false, |(lx, ly, t)| { + && self.last_click.is_some_and(|(lx, ly, t)| { lx == x && ly == y && t.elapsed().as_millis() < 500 }); @@ -432,11 +430,9 @@ impl App { state.artists.selected_index = Some(sel - 1); } } - } else { - if let Some(sel) = state.artists.selected_song { - if sel > 0 { - state.artists.selected_song = Some(sel - 1); - } + } else if let Some(sel) = state.artists.selected_song { + if sel > 0 { + state.artists.selected_song = Some(sel - 1); } } } @@ -456,11 +452,9 @@ impl App { state.playlists.selected_playlist = Some(sel - 1); } } - } else { - if let Some(sel) = state.playlists.selected_song { - if sel > 0 { - state.playlists.selected_song = Some(sel - 1); - } + } else if let Some(sel) = state.playlists.selected_song { + if sel > 0 { + state.playlists.selected_song = Some(sel - 1); } } } diff --git a/src/ui/header.rs b/src/ui/header.rs index cb1b6a8..21bcf93 100644 --- a/src/ui/header.rs +++ b/src/ui/header.rs @@ -38,13 +38,11 @@ impl Widget for Header { let chunks = Layout::horizontal([Constraint::Min(40), Constraint::Length(30)]).split(area); // Page tabs - let titles: Vec = vec![ - Page::Artists, + let titles: Vec = [Page::Artists, Page::Queue, Page::Playlists, Page::Server, - Page::Settings, - ] + Page::Settings] .iter() .map(|p: &Page| Line::from(format!("{} {}", p.shortcut(), p.label()))) .collect(); diff --git a/src/ui/pages/artists.rs b/src/ui/pages/artists.rs index 43e34ce..ab7df5c 100644 --- a/src/ui/pages/artists.rs +++ b/src/ui/pages/artists.rs @@ -47,7 +47,7 @@ pub fn build_tree_items(state: &AppState) -> Vec { // If expanded, add albums sorted by year (oldest first) if is_expanded { if let Some(albums) = artists.albums_cache.get(&artist.id) { - let mut sorted_albums: Vec = albums.iter().cloned().collect(); + let mut sorted_albums: Vec = albums.to_vec(); sorted_albums.sort_by(|a, b| { // Albums with no year go last match (a.year, b.year) { diff --git a/src/ui/theme.rs b/src/ui/theme.rs index 274a264..09f608c 100644 --- a/src/ui/theme.rs +++ b/src/ui/theme.rs @@ -215,7 +215,7 @@ pub fn load_themes() -> Vec { .filter(|e| { e.path() .extension() - .map_or(false, |ext| ext == "toml") + .is_some_and(|ext| ext == "toml") }) .collect(); entries.sort_by_key(|e| e.file_name()); @@ -248,7 +248,7 @@ pub fn load_themes() -> Vec { /// Convert a filename stem like "tokyo-night" or "rose_pine" to "Tokyo Night" or "Rose Pine" fn titlecase_filename(s: &str) -> String { - s.split(|c: char| c == '-' || c == '_') + s.split(['-', '_']) .filter(|w| !w.is_empty()) .map(|word| { let mut chars = word.chars();