diff --git a/src/selector/extend/extension.rs b/src/selector/extend/extension.rs index 54f188f..e4e5e12 100644 --- a/src/selector/extend/extension.rs +++ b/src/selector/extend/extension.rs @@ -2,7 +2,7 @@ use codemap::Span; use super::{ComplexSelector, CssMediaQuery, SimpleSelector}; -#[derive(Clone, Debug, Eq, PartialEq, Hash)] +#[derive(Clone, Debug)] pub(crate) struct Extension { /// The selector in which the `@extend` appeared. pub extender: ComplexSelector, diff --git a/src/selector/extend/mod.rs b/src/selector/extend/mod.rs index 68b236e..ee87a2a 100644 --- a/src/selector/extend/mod.rs +++ b/src/selector/extend/mod.rs @@ -55,7 +55,7 @@ impl Default for ExtendMode { } } -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug)] pub(crate) struct Extender { /// A map from all simple selectors in the stylesheet to the selector lists /// that contain them. diff --git a/src/selector/extend/rule.rs b/src/selector/extend/rule.rs index 8a1749e..f0d7a69 100644 --- a/src/selector/extend/rule.rs +++ b/src/selector/extend/rule.rs @@ -2,7 +2,7 @@ use codemap::Span; use crate::selector::Selector; -#[derive(Clone, Debug, Eq, PartialEq)] +#[derive(Clone, Debug)] pub(crate) struct ExtendRule { pub selector: Selector, pub is_optional: bool, diff --git a/src/selector/list.rs b/src/selector/list.rs index 7000fae..813c4f3 100644 --- a/src/selector/list.rs +++ b/src/selector/list.rs @@ -1,6 +1,7 @@ use std::{ collections::VecDeque, fmt::{self, Write}, + hash::{Hash, Hasher}, mem, }; @@ -18,7 +19,7 @@ use crate::{ /// /// A selector list is composed of `ComplexSelector`s. It matches an element /// that matches any of the component selectors. -#[derive(Clone, Debug, Eq, PartialEq, Hash)] +#[derive(Clone, Debug)] pub(crate) struct SelectorList { /// The components of this selector. /// @@ -27,6 +28,20 @@ pub(crate) struct SelectorList { pub span: Span, } +impl PartialEq for SelectorList { + fn eq(&self, other: &SelectorList) -> bool { + self.components == other.components + } +} + +impl Eq for SelectorList {} + +impl Hash for SelectorList { + fn hash(&self, state: &mut H) { + self.components.hash(state); + } +} + impl fmt::Display for SelectorList { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let complexes = self.components.iter().filter(|c| !c.is_invisible());