Skip to content

Commit 501851b

Browse files
committed
Implement PartialEq for proc_macro::Ident == strings
1 parent e8cbaf2 commit 501851b

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

compiler/rustc_expand/src/proc_macro_server.rs

+3
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,9 @@ impl server::Ident for Rustc<'_> {
513513
fn new(&mut self, string: &str, span: Self::Span, is_raw: bool) -> Self::Ident {
514514
Ident::new(self.sess, Symbol::intern(string), is_raw, span)
515515
}
516+
fn eq(&mut self, ident: Self::Ident, rhs: &str) -> bool {
517+
ident.sym.as_str() == rhs
518+
}
516519
fn span(&mut self, ident: Self::Ident) -> Self::Span {
517520
ident.span
518521
}

library/proc_macro/src/bridge/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ macro_rules! with_api {
101101
},
102102
Ident {
103103
fn new(string: &str, span: $S::Span, is_raw: bool) -> $S::Ident;
104+
fn eq($self: $S::Ident, rhs: &str) -> bool;
104105
fn span($self: $S::Ident) -> $S::Span;
105106
fn with_span($self: $S::Ident, span: $S::Span) -> $S::Ident;
106107
},

library/proc_macro/src/lib.rs

+25
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,31 @@ impl fmt::Debug for Ident {
923923
}
924924
}
925925

926+
#[stable(feature = "proc_macro_ident_eq", since = "1.49.0")]
927+
impl PartialEq<str> for Ident {
928+
fn eq(&self, rhs: &str) -> bool {
929+
self.0.eq(rhs)
930+
}
931+
}
932+
933+
#[stable(feature = "proc_macro_ident_eq", since = "1.49.0")]
934+
impl PartialEq<String> for Ident {
935+
fn eq(&self, rhs: &String) -> bool {
936+
<Self as PartialEq<str>>::eq(self, rhs.as_str())
937+
}
938+
}
939+
940+
#[stable(feature = "proc_macro_ident_eq", since = "1.49.0")]
941+
impl<'a, T> PartialEq<&'a T> for Ident
942+
where
943+
T: ?Sized,
944+
Ident: PartialEq<T>,
945+
{
946+
fn eq(&self, rhs: &&T) -> bool {
947+
<Self as PartialEq<T>>::eq(self, *rhs)
948+
}
949+
}
950+
926951
/// A literal string (`"hello"`), byte string (`b"hello"`),
927952
/// character (`'a'`), byte character (`b'a'`), an integer or floating point number
928953
/// with or without a suffix (`1`, `1u8`, `2.3`, `2.3f32`).

0 commit comments

Comments
 (0)