From 991be977ace437da527245d7055c14fd04c710e9 Mon Sep 17 00:00:00 2001 From: ConnorSkees <39542938+ConnorSkees@users.noreply.github.com> Date: Tue, 23 Jun 2020 01:23:12 -0400 Subject: [PATCH] resolve regression related to equality of selectors --- src/selector/extend/extension.rs | 2 +- src/selector/extend/mod.rs | 2 +- src/selector/extend/rule.rs | 2 +- src/selector/list.rs | 17 ++++++++++++++++- 4 files changed, 19 insertions(+), 4 deletions(-) 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());