Add some useful Path/PathSegment equality operations.
They will be used in a subsequent commit.
This commit is contained in:
@@ -97,12 +97,12 @@ pub struct Path {
|
|||||||
pub tokens: Option<LazyAttrTokenStream>,
|
pub tokens: Option<LazyAttrTokenStream>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Succeeds if the path has a single segment that is arg-free and matches the given symbol.
|
||||||
impl PartialEq<Symbol> for Path {
|
impl PartialEq<Symbol> for Path {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn eq(&self, name: &Symbol) -> bool {
|
fn eq(&self, name: &Symbol) -> bool {
|
||||||
if let [segment] = self.segments.as_ref()
|
if let [segment] = self.segments.as_ref()
|
||||||
&& segment.args.is_none()
|
&& segment == name
|
||||||
&& segment.ident.name == *name
|
|
||||||
{
|
{
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
@@ -111,6 +111,15 @@ impl PartialEq<Symbol> for Path {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Succeeds if the path has segments that are arg-free and match the given symbols.
|
||||||
|
impl PartialEq<&[Symbol]> for Path {
|
||||||
|
#[inline]
|
||||||
|
fn eq(&self, names: &&[Symbol]) -> bool {
|
||||||
|
self.segments.len() == names.len()
|
||||||
|
&& self.segments.iter().zip(names.iter()).all(|(s1, s2)| s1 == s2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<CTX: rustc_span::HashStableContext> HashStable<CTX> for Path {
|
impl<CTX: rustc_span::HashStableContext> HashStable<CTX> for Path {
|
||||||
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
||||||
self.segments.len().hash_stable(hcx, hasher);
|
self.segments.len().hash_stable(hcx, hasher);
|
||||||
@@ -166,6 +175,14 @@ pub struct PathSegment {
|
|||||||
pub args: Option<P<GenericArgs>>,
|
pub args: Option<P<GenericArgs>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Succeeds if the path segment is arg-free and matches the given symbol.
|
||||||
|
impl PartialEq<Symbol> for PathSegment {
|
||||||
|
#[inline]
|
||||||
|
fn eq(&self, name: &Symbol) -> bool {
|
||||||
|
self.args.is_none() && self.ident.name == *name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl PathSegment {
|
impl PathSegment {
|
||||||
pub fn from_ident(ident: Ident) -> Self {
|
pub fn from_ident(ident: Ident) -> Self {
|
||||||
PathSegment { ident, id: DUMMY_NODE_ID, args: None }
|
PathSegment { ident, id: DUMMY_NODE_ID, args: None }
|
||||||
|
|||||||
Reference in New Issue
Block a user