From 550865bad4726948ca12af202d1075d118548afc Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Thu, 14 May 2026 16:33:34 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20resolve=20all=20clippy=20warnings=20?= =?UTF-8?q?=E2=80=94=20redundant=20closures,=20dead=20code,=20collapsible?= =?UTF-8?q?=5Fif,=20needless=20borrow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .githooks/pre-commit | 13 ++++++++ .../activitypub-base/src/activities.rs | 31 +++++++++---------- crates/adapters/activitypub-base/src/data.rs | 1 + .../adapters/activitypub-base/src/service.rs | 3 +- crates/adapters/activitypub-base/src/urls.rs | 1 + crates/adapters/activitypub/src/note.rs | 1 + crates/adapters/postgres-search/src/lib.rs | 2 +- crates/adapters/postgres/src/feed.rs | 2 +- crates/adapters/postgres/src/follow.rs | 2 +- crates/adapters/postgres/src/notification.rs | 2 +- crates/adapters/postgres/src/thought.rs | 2 +- crates/application/src/use_cases/thoughts.rs | 2 +- crates/domain/src/models/notification.rs | 2 +- crates/domain/src/models/social.rs | 2 +- crates/domain/src/models/thought.rs | 2 +- crates/presentation/src/handlers/users.rs | 2 +- 16 files changed, 43 insertions(+), 27 deletions(-) create mode 100755 .githooks/pre-commit diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000..478b1bd --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "→ cargo fmt" +if ! cargo fmt --all -- --check; then + echo " run 'cargo fmt --all' to fix formatting" + exit 1 +fi + +echo "→ cargo clippy" +if ! cargo clippy --workspace -- -D warnings; then + exit 1 +fi diff --git a/crates/adapters/activitypub-base/src/activities.rs b/crates/adapters/activitypub-base/src/activities.rs index ee2f369..c1c49cd 100644 --- a/crates/adapters/activitypub-base/src/activities.rs +++ b/crates/adapters/activitypub-base/src/activities.rs @@ -237,14 +237,13 @@ impl Activity for UndoActivity { match obj_type { "Follow" => { - if let Some(obj_url) = self.object.get("object").and_then(|o| o.as_str()) { - if let Ok(url) = Url::parse(obj_url) { - if let Some(user_id) = crate::urls::extract_user_id_from_url(&url) { - data.federation_repo - .remove_follower(user_id, self.actor.inner().as_str()) - .await?; - } - } + if let Some(obj_url) = self.object.get("object").and_then(|o| o.as_str()) + && let Ok(url) = Url::parse(obj_url) + && let Some(user_id) = crate::urls::extract_user_id_from_url(&url) + { + data.federation_repo + .remove_follower(user_id, self.actor.inner().as_str()) + .await?; } data.object_handler .on_actor_removed(self.actor.inner()) @@ -260,14 +259,14 @@ impl Activity for UndoActivity { .and_then(|id| id.as_str()) .or_else(|| self.object.get("id").and_then(|id| id.as_str())); - if let Some(ap_id_str) = ap_id_str { - if let Ok(ap_id) = Url::parse(ap_id_str) { - data.object_handler - .on_delete(&ap_id, self.actor.inner()) - .await - .map_err(|e| Error::from(anyhow::anyhow!(e)))?; - tracing::info!(ap_id = %ap_id_str, "undo Add (watchlist remove)"); - } + if let Some(ap_id_str) = ap_id_str + && let Ok(ap_id) = Url::parse(ap_id_str) + { + data.object_handler + .on_delete(&ap_id, self.actor.inner()) + .await + .map_err(|e| Error::from(anyhow::anyhow!(e)))?; + tracing::info!(ap_id = %ap_id_str, "undo Add (watchlist remove)"); } } other => { diff --git a/crates/adapters/activitypub-base/src/data.rs b/crates/adapters/activitypub-base/src/data.rs index a4079f6..2f3497c 100644 --- a/crates/adapters/activitypub-base/src/data.rs +++ b/crates/adapters/activitypub-base/src/data.rs @@ -14,6 +14,7 @@ pub struct FederationData { pub(crate) domain: String, pub(crate) allow_registration: bool, pub(crate) software_name: String, + #[allow(dead_code)] pub(crate) event_publisher: Option>, } diff --git a/crates/adapters/activitypub-base/src/service.rs b/crates/adapters/activitypub-base/src/service.rs index 139cbd2..8f5b4ec 100644 --- a/crates/adapters/activitypub-base/src/service.rs +++ b/crates/adapters/activitypub-base/src/service.rs @@ -107,6 +107,7 @@ pub struct ActivityPubService { } impl ActivityPubService { + #[allow(clippy::too_many_arguments)] pub async fn new( repo: Arc, user_repo: Arc, @@ -748,7 +749,7 @@ impl ActivityPubService { .await .map_err(|e| anyhow::anyhow!("{e}"))?; // Wrap with @context so Mastodon's JSON-LD processor can resolve field names. - let person_json = serde_json::to_value(&WithContext::new_default(person))?; + let person_json = serde_json::to_value(WithContext::new_default(person))?; let update_id = Url::parse(&format!( "{}/activities/update/{}", diff --git a/crates/adapters/activitypub-base/src/urls.rs b/crates/adapters/activitypub-base/src/urls.rs index 2f8f003..884897a 100644 --- a/crates/adapters/activitypub-base/src/urls.rs +++ b/crates/adapters/activitypub-base/src/urls.rs @@ -22,6 +22,7 @@ pub fn actor_url(base_url: &str, user_id: uuid::Uuid) -> Url { } /// Extract the username segment from a /users/:username URL. +#[allow(dead_code)] pub fn extract_username_from_url(url: &Url) -> Option { url.path() .strip_prefix("/users/") diff --git a/crates/adapters/activitypub/src/note.rs b/crates/adapters/activitypub/src/note.rs index 8411ef2..d0e2ab9 100644 --- a/crates/adapters/activitypub/src/note.rs +++ b/crates/adapters/activitypub/src/note.rs @@ -26,6 +26,7 @@ pub struct ThoughtNote { } impl ThoughtNote { + #[allow(clippy::too_many_arguments)] pub fn new_public( id: Url, actor_url: Url, diff --git a/crates/adapters/postgres-search/src/lib.rs b/crates/adapters/postgres-search/src/lib.rs index 4b95701..4eca11f 100644 --- a/crates/adapters/postgres-search/src/lib.rs +++ b/crates/adapters/postgres-search/src/lib.rs @@ -81,7 +81,7 @@ fn row_to_entry(r: FeedRow) -> FeedEntry { in_reply_to_id: r.in_reply_to_id.map(ThoughtId::from_uuid), in_reply_to_url: r.in_reply_to_url, ap_id: r.t_ap_id, - visibility: Visibility::from_str(&r.visibility), + visibility: Visibility::from_db_str(&r.visibility), content_warning: r.content_warning, sensitive: r.sensitive, local: r.t_local, diff --git a/crates/adapters/postgres/src/feed.rs b/crates/adapters/postgres/src/feed.rs index 5fd34e2..2710eb7 100644 --- a/crates/adapters/postgres/src/feed.rs +++ b/crates/adapters/postgres/src/feed.rs @@ -95,7 +95,7 @@ fn row_to_entry(r: FeedRow) -> FeedEntry { in_reply_to_id: r.in_reply_to_id.map(ThoughtId::from_uuid), in_reply_to_url: r.in_reply_to_url, ap_id: r.t_ap_id, - visibility: Visibility::from_str(&r.visibility), + visibility: Visibility::from_db_str(&r.visibility), content_warning: r.content_warning, sensitive: r.sensitive, local: r.t_local, diff --git a/crates/adapters/postgres/src/follow.rs b/crates/adapters/postgres/src/follow.rs index 281e00e..dcb7075 100644 --- a/crates/adapters/postgres/src/follow.rs +++ b/crates/adapters/postgres/src/follow.rs @@ -77,7 +77,7 @@ impl FollowRepository for PgFollowRepository { .map(|o| o.map(|r| Follow { follower_id: UserId::from_uuid(r.follower_id), following_id: UserId::from_uuid(r.following_id), - state: FollowState::from_str(&r.state), + state: FollowState::from_db_str(&r.state), ap_id: r.ap_id, created_at: r.created_at, })) diff --git a/crates/adapters/postgres/src/notification.rs b/crates/adapters/postgres/src/notification.rs index 3330862..4c4e199 100644 --- a/crates/adapters/postgres/src/notification.rs +++ b/crates/adapters/postgres/src/notification.rs @@ -62,7 +62,7 @@ impl NotificationRepository for PgNotificationRepository { .map(|r| Notification { id: NotificationId::from_uuid(r.id), user_id: UserId::from_uuid(r.user_id), - notification_type: NotificationType::from_str(&r.r#type), + notification_type: NotificationType::from_db_str(&r.r#type), from_user_id: r.from_user_id.map(UserId::from_uuid), thought_id: r.thought_id.map(ThoughtId::from_uuid), read: r.read, diff --git a/crates/adapters/postgres/src/thought.rs b/crates/adapters/postgres/src/thought.rs index b689a35..3e2b074 100644 --- a/crates/adapters/postgres/src/thought.rs +++ b/crates/adapters/postgres/src/thought.rs @@ -45,7 +45,7 @@ impl From for Thought { in_reply_to_id: r.in_reply_to_id.map(ThoughtId::from_uuid), in_reply_to_url: r.in_reply_to_url, ap_id: r.ap_id, - visibility: Visibility::from_str(&r.visibility), + visibility: Visibility::from_db_str(&r.visibility), content_warning: r.content_warning, sensitive: r.sensitive, local: r.local, diff --git a/crates/application/src/use_cases/thoughts.rs b/crates/application/src/use_cases/thoughts.rs index 6740323..9d2f3bc 100644 --- a/crates/application/src/use_cases/thoughts.rs +++ b/crates/application/src/use_cases/thoughts.rs @@ -35,7 +35,7 @@ pub async fn create_thought( let visibility = input .visibility .as_deref() - .map(Visibility::from_str) + .map(Visibility::from_db_str) .unwrap_or(Visibility::Public); let thought = Thought::new_local( ThoughtId::new(), diff --git a/crates/domain/src/models/notification.rs b/crates/domain/src/models/notification.rs index 82c82b5..4483d4e 100644 --- a/crates/domain/src/models/notification.rs +++ b/crates/domain/src/models/notification.rs @@ -10,7 +10,7 @@ pub enum NotificationType { Reply, } impl NotificationType { - pub fn from_str(s: &str) -> Self { + pub fn from_db_str(s: &str) -> Self { match s { "like" => Self::Like, "boost" => Self::Boost, diff --git a/crates/domain/src/models/social.rs b/crates/domain/src/models/social.rs index 15ee448..ac498d6 100644 --- a/crates/domain/src/models/social.rs +++ b/crates/domain/src/models/social.rs @@ -26,7 +26,7 @@ pub enum FollowState { Rejected, } impl FollowState { - pub fn from_str(s: &str) -> Self { + pub fn from_db_str(s: &str) -> Self { match s { "pending" => Self::Pending, "rejected" => Self::Rejected, diff --git a/crates/domain/src/models/thought.rs b/crates/domain/src/models/thought.rs index 4f8e42e..cc63238 100644 --- a/crates/domain/src/models/thought.rs +++ b/crates/domain/src/models/thought.rs @@ -9,7 +9,7 @@ pub enum Visibility { Direct, } impl Visibility { - pub fn from_str(s: &str) -> Self { + pub fn from_db_str(s: &str) -> Self { match s { "followers" => Self::Followers, "unlisted" => Self::Unlisted, diff --git a/crates/presentation/src/handlers/users.rs b/crates/presentation/src/handlers/users.rs index 16b95fd..13393f3 100644 --- a/crates/presentation/src/handlers/users.rs +++ b/crates/presentation/src/handlers/users.rs @@ -101,7 +101,7 @@ pub async fn get_users( let users: Vec<_> = result .items .iter() - .map(|u| crate::handlers::auth::to_user_response(u)) + .map(crate::handlers::auth::to_user_response) .collect(); return Ok(Json(serde_json::json!({ "items": users, "total": result.total, "page": result.page, "per_page": result.per_page