From bc561d818a9acb5a8fec9370e2d8625bf5468025 Mon Sep 17 00:00:00 2001 From: Duyet Le Date: Mon, 14 Sep 2026 15:47:08 +0000 Subject: [PATCH] chore: fix baseline clippy warnings in src/ - help.rs: const thread_local initializer - spawn.rs: derive Default; use !contains_key; struct shorthand in tests - term.rs: div_ceil; writeln! instead of write with newline - tui/view.rs: to_string() instead of format! - upgrade.rs: unwrap_or_default() - http.rs: rename to snake_case - cmd/{config_tui,dispatch,keys,menu,models}.rs: &PathBuf -> &Path - cmd/dispatch.rs: match -> matches! Co-Authored-By: Claude Code --- src/cmd/config_tui.rs | 16 ++++++++-------- src/cmd/dispatch.rs | 16 ++++++++-------- src/cmd/keys.rs | 4 ++-- src/cmd/menu.rs | 28 ++++++++++++++-------------- src/cmd/models.rs | 14 +++++--------- src/help.rs | 2 +- src/http.rs | 4 ++-- src/spawn.rs | 30 ++++++++++-------------------- src/term.rs | 4 ++-- src/tui/view.rs | 2 +- src/upgrade.rs | 4 ++-- 11 files changed, 55 insertions(+), 69 deletions(-) diff --git a/src/cmd/config_tui.rs b/src/cmd/config_tui.rs index fe2374d..cb698b5 100644 --- a/src/cmd/config_tui.rs +++ b/src/cmd/config_tui.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::path::PathBuf; +use std::path::Path; use crate::config::{valid_account_name, write_config, Profile}; use crate::http::{fetch_credits, fetch_me}; @@ -35,7 +35,7 @@ use crate::cmd::usage::run_usage; pub(crate) fn print_config_status( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Result<(), String> { let cfg = load_config_if_present(path).unwrap_or_default(); let profile = cfg.profiles.get(&cfg.active_profile); @@ -207,7 +207,7 @@ pub(crate) fn settings_tab_names() -> Vec { pub(crate) fn config_settings_frame( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, online: bool, cache: &mut CreditsCache, tab: usize, @@ -280,7 +280,7 @@ pub(crate) fn config_settings_frame( pub(crate) fn fill_general_settings( rows: &mut Vec, kinds: &mut Vec>, - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, profile: Option<&Profile>, @@ -420,7 +420,7 @@ pub(crate) fn fill_general_settings( pub(crate) fn fill_agent_settings( rows: &mut Vec, kinds: &mut Vec>, - path: &PathBuf, + path: &Path, env: &BTreeMap, profile: Option<&Profile>, id: &'static str, @@ -711,7 +711,7 @@ pub(crate) fn slot_current_opt(profile: Option<&Profile>, slot: &str) -> String pub(crate) fn config_settings_loop( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Result { let mut cache = CreditsCache::fresh(); let mut tab = 0usize; @@ -758,7 +758,7 @@ pub(crate) fn config_settings_loop( pub(crate) fn config_edit_row( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, kind: SettingKind, ) -> Result { match kind { @@ -1133,7 +1133,7 @@ pub(crate) fn config_reset_row(path: &std::path::Path, kind: SettingKind) -> Res pub(crate) fn config_menu_loop_legacy( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Result { let items = vec![ "Switch key".into(), diff --git a/src/cmd/dispatch.rs b/src/cmd/dispatch.rs index d6fcfdd..6121e76 100644 --- a/src/cmd/dispatch.rs +++ b/src/cmd/dispatch.rs @@ -1,5 +1,5 @@ use std::collections::{BTreeMap, HashMap}; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::sync::{Arc, Mutex}; use crate::config::{resolve_config_path, write_config}; @@ -406,7 +406,7 @@ pub(crate) fn config_path(parsed: &ParsedArgs, env: &BTreeMap) - resolve_config_path(get_string_flag(&parsed.flags, "config").as_deref(), env) } -pub(crate) fn tool_command_for(path: &PathBuf, id: &str) -> String { +pub(crate) fn tool_command_for(path: &Path, id: &str) -> String { let cfg = load_config_if_present(path); resolve_tool(cfg.as_ref(), id) .map(|t| t.command) @@ -414,13 +414,13 @@ pub(crate) fn tool_command_for(path: &PathBuf, id: &str) -> String { } pub(crate) fn catalog_lookup_enabled(env: &BTreeMap) -> bool { - match env.get("ANYR_NO_CATALOG").map(|s| s.as_str()) { - Some("1" | "true" | "TRUE" | "yes") => false, - _ => true, - } + !matches!( + env.get("ANYR_NO_CATALOG").map(|s| s.as_str()), + Some("1" | "true" | "TRUE" | "yes") + ) } -pub(crate) fn persist_tool_command(path: &PathBuf, id: &str, command: &str) -> Result<(), String> { +pub(crate) fn persist_tool_command(path: &Path, id: &str, command: &str) -> Result<(), String> { let builtin = resolve_tool(None, id) .map(|t| t.command) .unwrap_or_else(|_| id.to_string()); @@ -435,7 +435,7 @@ pub(crate) fn persist_tool_command(path: &PathBuf, id: &str, command: &str) -> R } pub(crate) fn launcher_last_tool( - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, ) -> String { diff --git a/src/cmd/keys.rs b/src/cmd/keys.rs index 7c33b71..826cc4a 100644 --- a/src/cmd/keys.rs +++ b/src/cmd/keys.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::path::PathBuf; +use std::path::Path; use crate::config::write_config; use crate::http::{create_key, delete_key, fetch_keys, is_active_key_row, reveal_key}; @@ -276,7 +276,7 @@ pub(crate) fn key_pick_label(row: &crate::http::RemoteKey, current: bool) -> Str pub(crate) fn stored_api_key( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Option { let existing = load_config_if_present(path); let profile = existing diff --git a/src/cmd/menu.rs b/src/cmd/menu.rs index 51586fa..b7ae525 100644 --- a/src/cmd/menu.rs +++ b/src/cmd/menu.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::path::PathBuf; +use std::path::Path; use std::sync::{Arc, Mutex}; use crate::http::{fetch_keys, fetch_models, is_active_key_row, reveal_key}; @@ -86,7 +86,7 @@ pub(crate) fn agent_binding_detail( #[cfg(feature = "native")] pub(crate) fn launcher_palette( - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, credits: &mut CreditsCache, @@ -162,7 +162,7 @@ pub(crate) fn launcher_palette( #[cfg(not(feature = "native"))] pub(crate) fn launcher_palette( - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, _credits: &mut CreditsCache, @@ -379,7 +379,7 @@ pub(crate) fn run_menu(parsed: &ParsedArgs, env: &BTreeMap) -> R } pub(crate) fn launcher_hud( - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, credits: &mut CreditsCache, @@ -541,7 +541,7 @@ pub(crate) fn push_agent_configure_entries( } pub(crate) fn install_agent_dialog( - path: &PathBuf, + path: &Path, env: &BTreeMap, ) -> Result { let missing = missing_agents(env, |id| tool_command_for(path, id)); @@ -576,7 +576,7 @@ pub(crate) fn install_agent_dialog( } pub(crate) fn launcher_signed_in( - path: &PathBuf, + path: &Path, parsed: &ParsedArgs, env: &BTreeMap, ) -> bool { @@ -587,7 +587,7 @@ pub(crate) fn launcher_dispatch( action: &str, parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Result { if action == "Quit" || action.starts_with("Quit") { return Ok(LauncherNext::Exit(0)); @@ -715,7 +715,7 @@ pub(crate) fn launcher_dispatch( pub(crate) fn switch_agent_model( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, agent: &str, ) -> Result { if agent.is_empty() { @@ -736,7 +736,7 @@ pub(crate) fn switch_agent_model( pub(crate) fn bind_agent_model( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, agent: &str, ) -> Result { let existing = load_config_if_present(path); @@ -758,7 +758,7 @@ pub(crate) fn bind_agent_model( pub(crate) fn switch_agent_account( _parsed: &ParsedArgs, _env: &BTreeMap, - path: &PathBuf, + path: &Path, agent: &str, ) -> Result { if agent.is_empty() { @@ -772,7 +772,7 @@ pub(crate) fn switch_agent_account( Ok(LauncherNext::Continue) } -pub(crate) fn bind_agent_account(path: &PathBuf, agent: &str) -> Result { +pub(crate) fn bind_agent_account(path: &Path, agent: &str) -> Result { let cfg = load_config_if_present(path).unwrap_or_default(); let mut names: Vec = cfg.profiles.keys().cloned().collect(); names.sort(); @@ -807,7 +807,7 @@ pub(crate) fn bind_agent_account(path: &PathBuf, agent: &str) -> Result, - path: &PathBuf, + path: &Path, agent: &str, ) -> Result { if agent.is_empty() { @@ -828,7 +828,7 @@ pub(crate) fn switch_agent_key( pub(crate) fn bind_agent_key( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, agent: &str, ) -> Result { let (_keys_path, cfg, base, api_key) = keys_credential(parsed, env)?; @@ -871,7 +871,7 @@ pub(crate) fn bind_agent_key( pub(crate) fn launch_agent_picker( parsed: &ParsedArgs, env: &BTreeMap, - path: &PathBuf, + path: &Path, ) -> Result { if !launcher_signed_in(path, parsed, env) { eprintln!( diff --git a/src/cmd/models.rs b/src/cmd/models.rs index aced415..663c28b 100644 --- a/src/cmd/models.rs +++ b/src/cmd/models.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::path::PathBuf; +use std::path::Path; use crate::config::{write_config, Profile}; use crate::http::{fetch_credits, fetch_models, format_models_list, CatalogModel}; @@ -214,7 +214,7 @@ pub(crate) fn known_model_id(models: &[CatalogModel], id: &str) -> bool { pub(crate) fn save_model_slot( existing: Option, - path: &PathBuf, + path: &Path, slot: &str, id: &str, ) -> Result { @@ -256,7 +256,7 @@ pub(crate) fn known_agent(name: &str) -> Result { } } -pub(crate) fn save_agent_model(path: &PathBuf, agent: &str, id: &str) -> Result { +pub(crate) fn save_agent_model(path: &Path, agent: &str, id: &str) -> Result { let agent = known_agent(agent)?; let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?; let id = catalog_model_id(id); @@ -276,11 +276,7 @@ pub(crate) fn save_agent_model(path: &PathBuf, agent: &str, id: &str) -> Result< Ok(0) } -pub(crate) fn save_agent_account( - path: &PathBuf, - agent: &str, - profile: &str, -) -> Result { +pub(crate) fn save_agent_account(path: &Path, agent: &str, profile: &str) -> Result { let agent = known_agent(agent)?; let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?; if !cfg.profiles.contains_key(profile) { @@ -296,7 +292,7 @@ pub(crate) fn save_agent_account( Ok(0) } -pub(crate) fn save_agent_key(path: &PathBuf, agent: &str, key: &str) -> Result { +pub(crate) fn save_agent_key(path: &Path, agent: &str, key: &str) -> Result { let agent = known_agent(agent)?; let mut cfg = load_config_if_present(path).ok_or_else(no_key_error)?; cfg.agent_binding_mut(&agent).api_key = Some(key.to_string()); diff --git a/src/help.rs b/src/help.rs index 7370165..1554152 100644 --- a/src/help.rs +++ b/src/help.rs @@ -4,7 +4,7 @@ use std::path::Path; use crate::VERSION; thread_local! { - static INVOKED_BIN: RefCell = RefCell::new(String::new()); + static INVOKED_BIN: RefCell = const { RefCell::new(String::new()) }; } const LAUNCH_HELP_BODY: &str = "\ diff --git a/src/http.rs b/src/http.rs index 34fcb30..01f07fd 100644 --- a/src/http.rs +++ b/src/http.rs @@ -781,7 +781,7 @@ mod tests { Some("sk-ar-v1-DifferentTail00000000000000000000abcd") )); // A longer-head ASCII-dot mask matches on head AND literal tail. - let long = getKeyPrefixStyleMask("sk-ar-v1-abcd", "wxyz"); + let long = get_key_prefix_style_mask("sk-ar-v1-abcd", "wxyz"); assert!(is_active_key_row( &long, Some("sk-ar-v1-abcd-middle-secret-wxyz") @@ -790,7 +790,7 @@ mod tests { } /// Helper mirroring the server's getKeyPrefix() shape for tests. - fn getKeyPrefixStyleMask(head: &str, tail: &str) -> String { + fn get_key_prefix_style_mask(head: &str, tail: &str) -> String { format!("{head}...{tail}") } } diff --git a/src/spawn.rs b/src/spawn.rs index 7f9b141..2b7e126 100644 --- a/src/spawn.rs +++ b/src/spawn.rs @@ -27,7 +27,7 @@ const CLAUDE_EFFORT_TOKENS: &[(&str, i64)] = &[ ("max", 32000), ]; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Default)] pub struct ToolConfig { pub command: String, pub base_url_env: String, @@ -39,21 +39,6 @@ pub struct ToolConfig { pub extra: BTreeMap, } -impl Default for ToolConfig { - fn default() -> Self { - Self { - command: String::new(), - base_url_env: String::new(), - auth_env: String::new(), - model_env: None, - base_suffix: String::new(), - enable_gateway_model_discovery: false, - shadow_env: None, - extra: BTreeMap::new(), - } - } -} - impl ToolConfig { pub fn merge(&mut self, over: &ToolConfig) { if !over.command.is_empty() { @@ -878,7 +863,10 @@ mod tests { sanitize_model_id("\u{1b}[1mstealth/ox-alpha\u{1b}[0m"), "stealth/ox-alpha" ); - assert_eq!(sanitize_model_id("stealth/ox-alpha[2m]"), "stealth/ox-alpha"); + assert_eq!( + sanitize_model_id("stealth/ox-alpha[2m]"), + "stealth/ox-alpha" + ); assert_eq!( sanitize_model_id("stealth/ox-alpha[0;1m]"), "stealth/ox-alpha" @@ -1318,7 +1306,7 @@ mod tests { let mut env = BTreeMap::new(); let mut routing = crate::config::RoutingConstraints::default(); apply_routing_env(&mut env, &routing, "claude"); - assert!(env.get("CLAUDE_CODE_EXTRA_BODY").is_none()); + assert!(!env.contains_key("CLAUDE_CODE_EXTRA_BODY")); routing.set_exacto(true); routing.set_require_tools(true); routing.set_require_1m(true); @@ -1390,8 +1378,10 @@ mod tests { #[test] fn merge_command_only_overlay_keeps_codex_suffix() { let mut t = builtin("codex").unwrap(); - let mut over = ToolConfig::default(); - over.command = "/opt/codex".into(); + let over = ToolConfig { + command: "/opt/codex".into(), + ..Default::default() + }; t.merge(&over); assert_eq!(t.command, "/opt/codex"); assert_eq!(t.base_suffix, "/v1"); diff --git a/src/term.rs b/src/term.rs index 6c5bb4b..6aa159a 100644 --- a/src/term.rs +++ b/src/term.rs @@ -82,7 +82,7 @@ const MARK_PNG: &[u8] = include_bytes!("../assets/mark.png"); const B64: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; fn base64_encode(bytes: &[u8]) -> String { - let mut out = String::with_capacity((bytes.len() + 2) / 3 * 4); + let mut out = String::with_capacity(bytes.len().div_ceil(3) * 4); for chunk in bytes.chunks(3) { let a = chunk[0] as u32; let b = chunk.get(1).copied().unwrap_or(0) as u32; @@ -507,7 +507,7 @@ fn pick_inline_raw( ) .map_err(|e| e.to_string())?; } - write!(out, "{frame}\n").map_err(|e| e.to_string())?; + writeln!(out, "{frame}").map_err(|e| e.to_string())?; out.flush().map_err(|e| e.to_string())?; last_lines = n; diff --git a/src/tui/view.rs b/src/tui/view.rs index f6faf5d..15eb8b2 100644 --- a/src/tui/view.rs +++ b/src/tui/view.rs @@ -69,7 +69,7 @@ pub fn render_picker(frame: &mut Frame, state: &PickerState) { ListItem::new(Line::from(vec![ Span::styled(if i == state.cursor { "❯ " } else { " " }, theme::accent()), Span::styled(item_icon(label), item_icon_style(label)), - Span::styled(format!("{label}"), style), + Span::styled(label.to_string(), style), ])) }) .collect(); diff --git a/src/upgrade.rs b/src/upgrade.rs index 15b92a1..74cc6da 100644 --- a/src/upgrade.rs +++ b/src/upgrade.rs @@ -18,7 +18,7 @@ use crate::channel::{ select_latest_release_with_asset, Channel, Release, GITHUB_EXPANDED_ASSETS_PREFIX, GITHUB_RELEASES_API, GITHUB_RELEASES_HTML, }; -use crate::config::{resolve_config_path, write_config, Config}; +use crate::config::{resolve_config_path, write_config}; use crate::http::{http_get_github, http_get_web}; use crate::key::load_config_if_present; use crate::parse::{get_string_flag, ParsedArgs}; @@ -183,7 +183,7 @@ fn resolve_channel(parsed: &ParsedArgs, env: &BTreeMap) -> Resul /// Persist `channel:` so future auto-updates follow the switched track. fn persist_channel(channel: Channel, env: &BTreeMap) -> Result { let path = resolve_config_path(None, env); - let mut cfg = load_config_if_present(&path).unwrap_or_else(Config::default); + let mut cfg = load_config_if_present(&path).unwrap_or_default(); let next = channel.as_str().to_string(); let changed = cfg.channel.as_deref() != Some(next.as_str()); if !changed && cfg.channel.is_some() {