From 3e7cee48938cd83377582e4c4deab914435b1451 Mon Sep 17 00:00:00 2001 From: ReTeamSpeak Date: Tue, 12 May 2026 17:35:28 +0900 Subject: [PATCH] fix: resolve clippy warnings across all crates - Remove inherent to_string() methods shadowing Display (Command, CommandArgument) - Fix empty line after doc comment in shared/types.rs - Use sort_by_key with Reverse instead of sort_by in config.rs - Remove redundant closures in client.rs - Fix borrow patterns in ephemeral.rs and keys.rs - Use abs_diff in resend.rs - Fix needless Ok/? in tsdb/config.rs - Allow too_many_arguments for create_message in tsdb/message.rs - Allow dead_code on placeholder tsaudio structs --- src/shared/src/config.rs | 2 +- src/shared/src/types.rs | 2 +- src/tsaudio/src/capture.rs | 1 + src/tsaudio/src/codec.rs | 2 ++ src/tsaudio/src/playback.rs | 1 + src/tscore/src/connection/client.rs | 16 ++++++++-------- src/tscore/src/connection/resend.rs | 6 +----- src/tscore/src/connection/session.rs | 2 -- src/tscore/src/crypto/ephemeral.rs | 8 ++++---- src/tscore/src/crypto/keys.rs | 6 +++--- src/tscore/src/protocol/commands.rs | 23 +++++++++++------------ src/tsdb/src/config.rs | 2 +- src/tsdb/src/message.rs | 1 + 13 files changed, 35 insertions(+), 37 deletions(-) diff --git a/src/shared/src/config.rs b/src/shared/src/config.rs index 7bdf650..4bbec20 100644 --- a/src/shared/src/config.rs +++ b/src/shared/src/config.rs @@ -94,7 +94,7 @@ impl ConfigManager { }); } self.recent_servers - .sort_by(|a, b| b.last_connected.cmp(&a.last_connected)); + .sort_by_key(|b| std::cmp::Reverse(b.last_connected)); if self.recent_servers.len() > 20 { self.recent_servers.truncate(20); } diff --git a/src/shared/src/types.rs b/src/shared/src/types.rs index 56cc541..0c8c08c 100644 --- a/src/shared/src/types.rs +++ b/src/shared/src/types.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use std::fmt; /// TeamSpeak 核心类型定义 - +/// /// 客户端 ID #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] pub struct ClientId(pub u16); diff --git a/src/tsaudio/src/capture.rs b/src/tsaudio/src/capture.rs index 6eda79e..75ef557 100644 --- a/src/tsaudio/src/capture.rs +++ b/src/tsaudio/src/capture.rs @@ -2,6 +2,7 @@ use super::{AudioConfig, AudioError, AudioFrame, AudioResult}; +#[allow(dead_code)] pub struct AudioCapture { config: AudioConfig, } diff --git a/src/tsaudio/src/codec.rs b/src/tsaudio/src/codec.rs index 6734230..e744d9a 100644 --- a/src/tsaudio/src/codec.rs +++ b/src/tsaudio/src/codec.rs @@ -2,6 +2,7 @@ use super::{AudioError, AudioResult}; +#[allow(dead_code)] pub struct OpusEncoder { sample_rate: u32, channels: u16, @@ -24,6 +25,7 @@ impl OpusEncoder { } } +#[allow(dead_code)] pub struct OpusDecoder { sample_rate: u32, channels: u16, diff --git a/src/tsaudio/src/playback.rs b/src/tsaudio/src/playback.rs index 7371f3d..2569425 100644 --- a/src/tsaudio/src/playback.rs +++ b/src/tsaudio/src/playback.rs @@ -2,6 +2,7 @@ use super::{AudioConfig, AudioFrame, AudioResult}; +#[allow(dead_code)] pub struct AudioPlayback { config: AudioConfig, } diff --git a/src/tscore/src/connection/client.rs b/src/tscore/src/connection/client.rs index aaeb1ab..acb3de7 100644 --- a/src/tscore/src/connection/client.rs +++ b/src/tscore/src/connection/client.rs @@ -100,7 +100,7 @@ impl Client { pub fn start_handshake(&mut self) -> Result, ProtocolError> { self.state_machine .transition(ConnectionState::Connecting) - .map_err(|e| ProtocolError::PacketParse(e))?; + .map_err(ProtocolError::PacketParse)?; // 生成随机数 A0 let mut random0 = [0u8; 4]; @@ -209,7 +209,7 @@ impl Client { } self.state_machine .transition(ConnectionState::ChannelListFinished) - .map_err(|e| ProtocolError::PacketParse(e))?; + .map_err(ProtocolError::PacketParse)?; } "initivexpand" => { // 旧协议密钥交换 @@ -225,7 +225,7 @@ impl Client { "channellistfinished" => { self.state_machine .transition(ConnectionState::ChannelListFinished) - .map_err(|e| ProtocolError::PacketParse(e))?; + .map_err(ProtocolError::PacketParse)?; } "notifycliententerview" => { // 客户端进入视图 @@ -269,7 +269,7 @@ impl Client { self.state_machine .transition(ConnectionState::IdentityLevelIncreasing) - .map_err(|e| ProtocolError::PacketParse(e))?; + .map_err(ProtocolError::PacketParse)?; Ok(init.to_c2s_packet_bytes()) } @@ -323,7 +323,7 @@ impl Client { self.state_machine .transition(ConnectionState::Connected) - .map_err(|e| ProtocolError::PacketParse(e))?; + .map_err(ProtocolError::PacketParse)?; Ok(init.to_c2s_packet_bytes()) } @@ -359,7 +359,7 @@ impl Client { // 发送 clientek let ek = self.get_identity_omega()?; - let proof = self.generate_proof(&ek, &beta_b64); + let proof = self.generate_proof(&ek, beta_b64); let cmd = CommandBuilder::new("clientek") .arg("ek", &ek) @@ -507,14 +507,14 @@ impl Client { .config .channel_password .as_deref() - .map(|p| crypto::hash_password(p)) + .map(crypto::hash_password) .unwrap_or_default(); let server_password = self .config .server_password .as_deref() - .map(|p| crypto::hash_password(p)) + .map(crypto::hash_password) .unwrap_or_default(); let cmd = CommandBuilder::new("clientinit") diff --git a/src/tscore/src/connection/resend.rs b/src/tscore/src/connection/resend.rs index 2215037..3a90799 100644 --- a/src/tscore/src/connection/resend.rs +++ b/src/tscore/src/connection/resend.rs @@ -167,11 +167,7 @@ impl RttEstimator { let alpha = 0.125; let beta = 0.25; - let diff = if measured_rtt > self.srtt { - measured_rtt - self.srtt - } else { - self.srtt - measured_rtt - }; + let diff = measured_rtt.abs_diff(self.srtt); self.rtt_var = Duration::from_secs_f64( (1.0 - beta) * self.rtt_var.as_secs_f64() + beta * diff.as_secs_f64(), diff --git a/src/tscore/src/connection/session.rs b/src/tscore/src/connection/session.rs index 4f6fb02..9cc6604 100644 --- a/src/tscore/src/connection/session.rs +++ b/src/tscore/src/connection/session.rs @@ -1,11 +1,9 @@ -use std::net::SocketAddr; use std::time::Duration; use tokio::net::UdpSocket; use tokio::sync::mpsc; use super::client::{Client, ClientConfig}; use super::state::ConnectionState; -use crate::protocol::{Command, Direction, InPacket, PacketType}; use crate::ProtocolError; pub enum SessionCommand { diff --git a/src/tscore/src/crypto/ephemeral.rs b/src/tscore/src/crypto/ephemeral.rs index 6bcfcd6..2d727c8 100644 --- a/src/tscore/src/crypto/ephemeral.rs +++ b/src/tscore/src/crypto/ephemeral.rs @@ -14,13 +14,13 @@ impl EphemeralKey { let mut bytes = [0u8; 32]; rand::Rng::fill(&mut rand::thread_rng(), &mut bytes); let private = Scalar::from_bytes_mod_order(bytes); - let public = &X25519_BASEPOINT * &private; + let public = X25519_BASEPOINT * private; Self { private, public } } pub fn from_private_bytes(bytes: &[u8; 32]) -> Self { let private = Scalar::from_bytes_mod_order(*bytes); - let public = &X25519_BASEPOINT * &private; + let public = X25519_BASEPOINT * private; Self { private, public } } @@ -29,7 +29,7 @@ impl EphemeralKey { } pub fn compute_shared_secret(&self, other_public: &MontgomeryPoint) -> [u8; 32] { - let shared = other_public * &self.private; + let shared = other_public * self.private; shared.to_bytes() } @@ -58,7 +58,7 @@ pub fn compute_iv_mac( } let mut hasher = Sha1::new(); - hasher.update(&iv); + hasher.update(iv); let mac_hash = hasher.finalize(); let mut mac = [0u8; 8]; diff --git a/src/tscore/src/crypto/keys.rs b/src/tscore/src/crypto/keys.rs index ed452e0..300b0b2 100644 --- a/src/tscore/src/crypto/keys.rs +++ b/src/tscore/src/crypto/keys.rs @@ -46,7 +46,7 @@ impl SharedSecret { } let mut hasher = Sha1::new(); - hasher.update(&iv); + hasher.update(iv); let mac_hash = hasher.finalize(); let mut mac = [0u8; 8]; @@ -71,7 +71,7 @@ impl SharedSecret { } let mut hasher = Sha1::new(); - hasher.update(&iv); + hasher.update(iv); let mac_hash = hasher.finalize(); let mut mac = [0u8; 8]; @@ -181,7 +181,7 @@ pub fn create_key_nonce( temp[6..].copy_from_slice(iv); let mut hasher = Sha256::new(); - hasher.update(&temp); + hasher.update(temp); let hash = hasher.finalize(); let mut key = [0u8; 16]; diff --git a/src/tscore/src/protocol/commands.rs b/src/tscore/src/protocol/commands.rs index 493da63..20ab9fd 100644 --- a/src/tscore/src/protocol/commands.rs +++ b/src/tscore/src/protocol/commands.rs @@ -111,10 +111,13 @@ impl CommandArgument { } } - pub fn to_string(&self) -> String { +} + +impl fmt::Display for CommandArgument { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match &self.value { - Some(value) => format!("{}={}", escape::escape(&self.name), escape::escape(value)), - None => escape::escape(&self.name), + Some(value) => write!(f, "{}={}", escape::escape(&self.name), escape::escape(value)), + None => write!(f, "{}", escape::escape(&self.name)), } } } @@ -224,19 +227,15 @@ impl Command { .collect() } - pub fn to_string(&self) -> String { - let mut result = self.name.clone(); - for arg in &self.args { - result.push(' '); - result.push_str(&arg.to_string()); - } - result - } } impl fmt::Display for Command { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.to_string()) + write!(f, "{}", self.name)?; + for arg in &self.args { + write!(f, " {arg}")?; + } + Ok(()) } } diff --git a/src/tsdb/src/config.rs b/src/tsdb/src/config.rs index 21ffed9..2c9d98b 100644 --- a/src/tsdb/src/config.rs +++ b/src/tsdb/src/config.rs @@ -12,7 +12,7 @@ impl DatabaseManager { let mut stmt = conn.prepare("SELECT value FROM settings WHERE key = ?1")?; let result = stmt - .query_row(params![key], |row| Ok(row.get::<_, String>(0)?)) + .query_row(params![key], |row| row.get::<_, String>(0)) .optional()?; Ok(result) diff --git a/src/tsdb/src/message.rs b/src/tsdb/src/message.rs index 26e9918..c05b0f8 100644 --- a/src/tsdb/src/message.rs +++ b/src/tsdb/src/message.rs @@ -22,6 +22,7 @@ pub struct Message { impl DatabaseManager { /// 创建消息 + #[allow(clippy::too_many_arguments)] pub fn create_message( &self, server_address: &str,