diff --git a/crates/language/src/toolchain.rs b/crates/language/src/toolchain.rs index 13703d81a7cd9736969f2089ee1b2b5645e524dd..5b48157f0f3ec8c5b6fb77b0b162d7db32cc01b7 100644 --- a/crates/language/src/toolchain.rs +++ b/crates/language/src/toolchain.rs @@ -14,7 +14,7 @@ use settings::WorktreeId; use crate::LanguageName; /// Represents a single toolchain. -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug)] pub struct Toolchain { /// User-facing label pub name: SharedString, @@ -24,6 +24,18 @@ pub struct Toolchain { pub as_json: serde_json::Value, } +impl PartialEq for Toolchain { + fn eq(&self, other: &Self) -> bool { + // Do not use as_json for comparisons; it shouldn't impact equality, as it's not user-surfaced. + // Thus, there could be multiple entries that look the same in the UI. + (&self.name, &self.path, &self.language_name).eq(&( + &other.name, + &other.path, + &other.language_name, + )) + } +} + #[async_trait] pub trait ToolchainLister: Send + Sync { async fn list(