From 669bb4ccdfceba2fa3b2a71d7f1894d8947933e5 Mon Sep 17 00:00:00 2001 From: bkataru Date: Fri, 29 May 2026 21:43:48 +0000 Subject: [PATCH] fix: resolve all clippy -D warnings across workspace - pawan-core: remove unused imports, fix mut variables - pawan-cli: fix clamp, sort_by_key, checked_div, needless borrows - rename ExportFormat::from_str to parse to avoid std trait confusion - fix unused variables in tests with .. rest patterns --- crates/pawan-cli/src/tui/irc_panel.rs | 4 +- crates/pawan-cli/src/tui/model_catalog.rs | 3 +- crates/pawan-cli/src/tui/queue_panel.rs | 2 +- crates/pawan-cli/src/tui/render.rs | 4 +- crates/pawan-cli/src/tui/slash_handlers.rs | 10 ++--- crates/pawan-cli/src/tui/types.rs | 2 +- crates/pawan-cli/tests/tui_types_tests.rs | 46 +++++++++++----------- crates/pawan-core/src/agent/irc.rs | 2 +- crates/pawan-core/src/agent/mod.rs | 7 ++-- crates/pawan-core/src/subagent.rs | 2 +- crates/pawan-core/src/tools/task.rs | 1 + 11 files changed, 39 insertions(+), 44 deletions(-) diff --git a/crates/pawan-cli/src/tui/irc_panel.rs b/crates/pawan-cli/src/tui/irc_panel.rs index 25ed85b..548799b 100644 --- a/crates/pawan-cli/src/tui/irc_panel.rs +++ b/crates/pawan-cli/src/tui/irc_panel.rs @@ -304,7 +304,7 @@ mod tests { #[test] fn poll_irc_inbox_surfaces_formatted_line() { let hub = IrcHub::new(); - let mut worker = hub.join("worker"); + let worker = hub.join("worker"); let (mut app, _cmd_rx) = test_app_with_hub(&hub); worker.send("main", "ping").expect("deliver"); @@ -412,7 +412,7 @@ mod tests { #[test] fn poll_irc_inbox_drains_multiple_messages() { let hub = IrcHub::new(); - let mut worker = hub.join("worker"); + let worker = hub.join("worker"); let (mut app, _cmd_rx) = test_app_with_hub(&hub); worker.send("main", "one").expect("deliver"); diff --git a/crates/pawan-cli/src/tui/model_catalog.rs b/crates/pawan-cli/src/tui/model_catalog.rs index 81d7224..567efad 100644 --- a/crates/pawan-cli/src/tui/model_catalog.rs +++ b/crates/pawan-cli/src/tui/model_catalog.rs @@ -48,7 +48,7 @@ pub async fn fetch_live_models_from(endpoint_url: &str) -> Option if models.is_empty() { None } else { - models.sort_by(|a, b| b.quality_score.cmp(&a.quality_score)); + models.sort_by_key(|b| std::cmp::Reverse(b.quality_score)); Some(models) } } @@ -688,7 +688,6 @@ mod tests { #[cfg(test)] mod integration_tests { use super::*; - use serde_json; use wiremock::matchers::{method, path}; use wiremock::{Mock, MockServer, ResponseTemplate}; diff --git a/crates/pawan-cli/src/tui/queue_panel.rs b/crates/pawan-cli/src/tui/queue_panel.rs index 0e77772..1972bee 100644 --- a/crates/pawan-cli/src/tui/queue_panel.rs +++ b/crates/pawan-cli/src/tui/queue_panel.rs @@ -76,7 +76,7 @@ impl QueuePanel { .collect(); let mut lines: Vec> = vec![Vec::new()]; - let max_lines = (area.height as usize).min(3).max(1); + let max_lines = (area.height as usize).clamp(1, 3); let budget = area.width as usize; for piece in pieces { diff --git a/crates/pawan-cli/src/tui/render.rs b/crates/pawan-cli/src/tui/render.rs index 19522b1..5276ce2 100644 --- a/crates/pawan-cli/src/tui/render.rs +++ b/crates/pawan-cli/src/tui/render.rs @@ -1317,7 +1317,6 @@ mod tests { use super::super::fuzzy_search::{default_command_item_lines, FuzzySearchState}; use super::{markdown_to_lines, parse_inline_markdown}; - use insta; use pawan::agent::session::Session; use pawan::agent::ToolCallRecord; use ratatui::style::Modifier; @@ -2493,7 +2492,7 @@ mod tests { reset_theme_for_test(); for name in ["onedark", "gruvbox"] { let mut app = test_app(); - app.input.insert_str(&format!("/theme {name}")); + app.input.insert_str(format!("/theme {name}")); app.handle_event(Event::Key(crossterm::event::KeyEvent::new( KeyCode::Enter, KeyModifiers::NONE, @@ -4201,7 +4200,6 @@ mod tests { use super::FuzzySearchState; use super::super::super::app::PermissionDialog; use super::super::super::types::DisplayMessage; - use insta; use pawan::agent::Role; use ratatui::backend::TestBackend; use ratatui::Terminal; diff --git a/crates/pawan-cli/src/tui/slash_handlers.rs b/crates/pawan-cli/src/tui/slash_handlers.rs index 363d825..26565ad 100644 --- a/crates/pawan-cli/src/tui/slash_handlers.rs +++ b/crates/pawan-cli/src/tui/slash_handlers.rs @@ -112,13 +112,11 @@ impl<'a> App<'a> { s.to_string() } else { let mut end = 0usize; - let mut count = 0usize; - for (i, _) in s.char_indices() { + for (count, (i, _)) in s.char_indices().enumerate() { if count == max { break; } end = i + 1; - count += 1; } format!("{}…", &s[..end]) } @@ -225,7 +223,7 @@ impl<'a> App<'a> { let parts: Vec<&str> = arg.splitn(3, ' ').collect(); let format_str = parts.get(2).unwrap_or(&"md"); let path = parts.get(1).unwrap_or(&"pawan-session"); - (path.to_string(), ExportFormat::from_str(format_str)) + (path.to_string(), ExportFormat::parse(format_str)) } else if arg.is_empty() { ("pawan-session.md".to_string(), ExportFormat::Markdown) } else { @@ -617,7 +615,7 @@ impl<'a> App<'a> { self.messages = Self::messages_from_session(result.messages); let compacted = self.messages.len(); let pct = if original > 0 { - ((original.saturating_sub(compacted)) * 100) / original + ((original.saturating_sub(compacted)) * 100).checked_div(original).unwrap_or(0) } else { 0 }; @@ -638,7 +636,7 @@ impl<'a> App<'a> { .iter() .map(|c| format!("{} — {}", c.name, c.description)) .collect(); - lines.sort_by(|a, b| a.to_ascii_lowercase().cmp(&b.to_ascii_lowercase())); + lines.sort_by_key(|a| a.to_ascii_lowercase()); self.messages.push(DisplayMessage::new_text( Role::System, lines.join("\n"), diff --git a/crates/pawan-cli/src/tui/types.rs b/crates/pawan-cli/src/tui/types.rs index 4417a12..9a1c2ec 100644 --- a/crates/pawan-cli/src/tui/types.rs +++ b/crates/pawan-cli/src/tui/types.rs @@ -109,7 +109,7 @@ pub enum ExportFormat { impl ExportFormat { /// Parse format from string, defaulting to Markdown - pub fn from_str(s: &str) -> Self { + pub fn parse(s: &str) -> Self { match s.to_lowercase().as_str() { "html" => ExportFormat::Html, "json" => ExportFormat::Json, diff --git a/crates/pawan-cli/tests/tui_types_tests.rs b/crates/pawan-cli/tests/tui_types_tests.rs index 71a4922..0e132ca 100644 --- a/crates/pawan-cli/tests/tui_types_tests.rs +++ b/crates/pawan-cli/tests/tui_types_tests.rs @@ -16,39 +16,39 @@ use pawan::agent::{ToolCallRecord, ToolCallRequest}; #[test] fn test_export_format_from_str_lowercase() { - assert_eq!(ExportFormat::from_str("html"), ExportFormat::Html); - assert_eq!(ExportFormat::from_str("json"), ExportFormat::Json); - assert_eq!(ExportFormat::from_str("txt"), ExportFormat::Txt); - assert_eq!(ExportFormat::from_str("md"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("html"), ExportFormat::Html); + assert_eq!(ExportFormat::parse("json"), ExportFormat::Json); + assert_eq!(ExportFormat::parse("txt"), ExportFormat::Txt); + assert_eq!(ExportFormat::parse("md"), ExportFormat::Markdown); } #[test] fn test_export_format_from_str_uppercase() { - assert_eq!(ExportFormat::from_str("HTML"), ExportFormat::Html); - assert_eq!(ExportFormat::from_str("JSON"), ExportFormat::Json); - assert_eq!(ExportFormat::from_str("TXT"), ExportFormat::Txt); - assert_eq!(ExportFormat::from_str("MD"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("HTML"), ExportFormat::Html); + assert_eq!(ExportFormat::parse("JSON"), ExportFormat::Json); + assert_eq!(ExportFormat::parse("TXT"), ExportFormat::Txt); + assert_eq!(ExportFormat::parse("MD"), ExportFormat::Markdown); } #[test] fn test_export_format_from_str_mixed_case() { - assert_eq!(ExportFormat::from_str("Html"), ExportFormat::Html); - assert_eq!(ExportFormat::from_str("Json"), ExportFormat::Json); + assert_eq!(ExportFormat::parse("Html"), ExportFormat::Html); + assert_eq!(ExportFormat::parse("Json"), ExportFormat::Json); } #[test] fn test_export_format_from_str_full_words() { - assert_eq!(ExportFormat::from_str("markdown"), ExportFormat::Markdown); - assert_eq!(ExportFormat::from_str("MARKDOWN"), ExportFormat::Markdown); - assert_eq!(ExportFormat::from_str("text"), ExportFormat::Txt); - assert_eq!(ExportFormat::from_str("TEXT"), ExportFormat::Txt); + assert_eq!(ExportFormat::parse("markdown"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("MARKDOWN"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("text"), ExportFormat::Txt); + assert_eq!(ExportFormat::parse("TEXT"), ExportFormat::Txt); } #[test] fn test_export_format_from_str_unknown_defaults_to_markdown() { - assert_eq!(ExportFormat::from_str("pdf"), ExportFormat::Markdown); - assert_eq!(ExportFormat::from_str(""), ExportFormat::Markdown); - assert_eq!(ExportFormat::from_str("xyz"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("pdf"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse(""), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("xyz"), ExportFormat::Markdown); } #[test] @@ -285,7 +285,7 @@ fn test_content_block_text() { fn test_content_block_text_streaming() { let block = ContentBlock::Text { content: "streaming".to_string(), streaming: true }; match block { - ContentBlock::Text { content, streaming } => { + ContentBlock::Text { streaming, .. } => { assert!(streaming); } _ => panic!("expected Text variant"), @@ -301,7 +301,7 @@ fn test_content_block_tool_call() { state: Box::new(state), }; match block { - ContentBlock::ToolCall { name, args_summary, state } => { + ContentBlock::ToolCall { name, state, .. } => { assert_eq!(name, "bash"); assert!(matches!(*state, ToolBlockState::Running)); } @@ -531,10 +531,10 @@ fn test_tool_call_record_failed() { #[test] fn test_export_format_case_insensitive_all() { - assert_eq!(ExportFormat::from_str("hTmL"), ExportFormat::Html); - assert_eq!(ExportFormat::from_str("JsOn"), ExportFormat::Json); - assert_eq!(ExportFormat::from_str("TxT"), ExportFormat::Txt); - assert_eq!(ExportFormat::from_str("MaRkDoWn"), ExportFormat::Markdown); + assert_eq!(ExportFormat::parse("hTmL"), ExportFormat::Html); + assert_eq!(ExportFormat::parse("JsOn"), ExportFormat::Json); + assert_eq!(ExportFormat::parse("TxT"), ExportFormat::Txt); + assert_eq!(ExportFormat::parse("MaRkDoWn"), ExportFormat::Markdown); } #[test] diff --git a/crates/pawan-core/src/agent/irc.rs b/crates/pawan-core/src/agent/irc.rs index 44ef419..aad70f3 100644 --- a/crates/pawan-core/src/agent/irc.rs +++ b/crates/pawan-core/src/agent/irc.rs @@ -153,7 +153,7 @@ mod tests { #[test] fn routes_direct_message() { let hub = IrcHub::new(); - let mut main = hub.join("main"); + let main = hub.join("main"); let mut worker = hub.join("worker"); main.send("worker", "ping").expect("send"); diff --git a/crates/pawan-core/src/agent/mod.rs b/crates/pawan-core/src/agent/mod.rs index 8bc87a1..04caf3c 100644 --- a/crates/pawan-core/src/agent/mod.rs +++ b/crates/pawan-core/src/agent/mod.rs @@ -165,9 +165,9 @@ pub(crate) fn fence_external_system_messages_for_resume(history: &mut [Message]) } #[cfg(test)] -use construction::{get_api_key_with_secure_fallback, load_arch_context, probe_local_endpoint, scan_context_file}; +use construction::{load_arch_context, probe_local_endpoint, scan_context_file}; #[cfg(test)] -use execute::{summarize_args, truncate_tool_result}; +use execute::truncate_tool_result; #[cfg(test)] mod tests { @@ -1589,10 +1589,9 @@ This is malicious. #[cfg(test)] mod coordinator_tests { use super::*; - use crate::PawanError; use crate::agent::backend::mock::MockBackend; use crate::coordinator::{FinishReason, ToolCallingConfig}; - use serde_json::{json, Value}; + use serde_json::json; use std::sync::Arc; /// Test that config default has use_coordinator = false diff --git a/crates/pawan-core/src/subagent.rs b/crates/pawan-core/src/subagent.rs index a44970a..fc52c1d 100644 --- a/crates/pawan-core/src/subagent.rs +++ b/crates/pawan-core/src/subagent.rs @@ -112,7 +112,7 @@ pub fn snapshot_queue(max_age_ms: u64) -> Vec { age < max_age_ms }); let mut runs: Vec<_> = guard.values().cloned().collect(); - runs.sort_by(|a, b| a.started_at.cmp(&b.started_at)); + runs.sort_by_key(|a| a.started_at); runs } diff --git a/crates/pawan-core/src/tools/task.rs b/crates/pawan-core/src/tools/task.rs index 665c091..f85aabd 100644 --- a/crates/pawan-core/src/tools/task.rs +++ b/crates/pawan-core/src/tools/task.rs @@ -322,6 +322,7 @@ impl TaskTool { }) } + #[allow(clippy::too_many_arguments)] async fn run_subagent( &self, agent_type: &str,