mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
refactor(ast): simplify ContentEq trait definition. (#5468)
Addresses the concerns brought up in #5427
This commit is contained in:
parent
ccc8a27e4f
commit
9f6e0ed099
3 changed files with 4 additions and 88 deletions
|
|
@ -58,7 +58,7 @@ fn assert_generated_derives(attrs: &[syn::Attribute]) -> TokenStream2 {
|
||||||
} else if ident == "GetSpanMut" {
|
} else if ident == "GetSpanMut" {
|
||||||
(quote!(::oxc_span::GetSpanMut), TokenStream2::default())
|
(quote!(::oxc_span::GetSpanMut), TokenStream2::default())
|
||||||
} else if ident == "ContentEq" {
|
} else if ident == "ContentEq" {
|
||||||
(quote!(::oxc_span::cmp::ContentEq), quote!(<()>))
|
(quote!(::oxc_span::cmp::ContentEq), TokenStream2::default())
|
||||||
} else if ident == "ContentHash" {
|
} else if ident == "ContentHash" {
|
||||||
(quote!(::oxc_span::hash::ContentHash), TokenStream2::default())
|
(quote!(::oxc_span::hash::ContentHash), TokenStream2::default())
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -180,30 +180,6 @@ impl<'a> ContentEq for Atom<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ContentEq<Atom<'a>> for &str {
|
|
||||||
fn content_eq(&self, other: &Atom<'a>) -> bool {
|
|
||||||
self == other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ContentEq<str> for Atom<'a> {
|
|
||||||
fn content_eq(&self, other: &str) -> bool {
|
|
||||||
self == other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ContentEq<Atom<'a>> for Cow<'_, str> {
|
|
||||||
fn content_eq(&self, other: &Atom<'a>) -> bool {
|
|
||||||
self == other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ContentEq<&Atom<'a>> for Cow<'_, str> {
|
|
||||||
fn content_eq(&self, other: &&Atom<'a>) -> bool {
|
|
||||||
self == other
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ContentHash for Atom<'a> {
|
impl<'a> ContentHash for Atom<'a> {
|
||||||
fn content_hash<H: hash::Hasher>(&self, state: &mut H) {
|
fn content_hash<H: hash::Hasher>(&self, state: &mut H) {
|
||||||
hash::Hash::hash(self, state);
|
hash::Hash::hash(self, state);
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,17 @@
|
||||||
///
|
///
|
||||||
/// One should always prefer using the [PartialEq] over this since implementations of this trait
|
/// One should always prefer using the [PartialEq] over this since implementations of this trait
|
||||||
/// inherently are slower or in the best-case scenario as fast as the [PartialEq] comparison.
|
/// inherently are slower or in the best-case scenario as fast as the [PartialEq] comparison.
|
||||||
pub trait ContentEq<Rhs: ?Sized = Self> {
|
pub trait ContentEq {
|
||||||
/// This method tests for contents of `self` and `other` to be equal.
|
/// This method tests for contents of `self` and `other` to be equal.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
fn content_eq(&self, other: &Rhs) -> bool;
|
fn content_eq(&self, other: &Self) -> bool;
|
||||||
|
|
||||||
/// This method tests for contents of `self` and `other` not to be equal.
|
/// This method tests for contents of `self` and `other` not to be equal.
|
||||||
/// The default implementation is almost always
|
/// The default implementation is almost always
|
||||||
/// sufficient, and should not be overridden without very good reason.
|
/// sufficient, and should not be overridden without very good reason.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
fn content_ne(&self, other: &Rhs) -> bool {
|
fn content_ne(&self, other: &Self) -> bool {
|
||||||
!self.content_eq(other)
|
!self.content_eq(other)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -32,66 +32,6 @@ impl ContentEq for () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Blanket implementation for references
|
|
||||||
impl<A: ?Sized, B: ?Sized> ContentEq<&B> for &A
|
|
||||||
where
|
|
||||||
A: ContentEq<B>,
|
|
||||||
{
|
|
||||||
#[inline]
|
|
||||||
fn content_eq(&self, other: &&B) -> bool {
|
|
||||||
ContentEq::content_eq(*self, *other)
|
|
||||||
}
|
|
||||||
#[inline]
|
|
||||||
fn content_ne(&self, other: &&B) -> bool {
|
|
||||||
ContentEq::content_ne(*self, *other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Blanket implementation for mutable references
|
|
||||||
impl<A: ?Sized, B: ?Sized> ContentEq<&mut B> for &mut A
|
|
||||||
where
|
|
||||||
A: ContentEq<B>,
|
|
||||||
{
|
|
||||||
#[inline]
|
|
||||||
fn content_eq(&self, other: &&mut B) -> bool {
|
|
||||||
ContentEq::content_eq(*self, *other)
|
|
||||||
}
|
|
||||||
#[inline]
|
|
||||||
fn content_ne(&self, other: &&mut B) -> bool {
|
|
||||||
ContentEq::content_ne(*self, *other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Blanket implementation for mixed references
|
|
||||||
impl<A: ?Sized, B: ?Sized> ContentEq<&mut B> for &A
|
|
||||||
where
|
|
||||||
A: ContentEq<B>,
|
|
||||||
{
|
|
||||||
#[inline]
|
|
||||||
fn content_eq(&self, other: &&mut B) -> bool {
|
|
||||||
ContentEq::content_eq(*self, *other)
|
|
||||||
}
|
|
||||||
#[inline]
|
|
||||||
fn content_ne(&self, other: &&mut B) -> bool {
|
|
||||||
ContentEq::content_ne(*self, *other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Blanket implementation for mixed references
|
|
||||||
impl<A: ?Sized, B: ?Sized> ContentEq<&B> for &mut A
|
|
||||||
where
|
|
||||||
A: ContentEq<B>,
|
|
||||||
{
|
|
||||||
#[inline]
|
|
||||||
fn content_eq(&self, other: &&B) -> bool {
|
|
||||||
ContentEq::content_eq(*self, *other)
|
|
||||||
}
|
|
||||||
#[inline]
|
|
||||||
fn content_ne(&self, other: &&B) -> bool {
|
|
||||||
ContentEq::content_ne(*self, *other)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Blanket implementation for [Option] types
|
/// Blanket implementation for [Option] types
|
||||||
impl<T: ContentEq> ContentEq for Option<T> {
|
impl<T: ContentEq> ContentEq for Option<T> {
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue