@@ -94,19 +94,19 @@ pub fn in_constant(cx: &LateContext<'_, '_>, id: HirId) -> bool {
9494
9595/// Returns `true` if this `expn_info` was expanded by any macro or desugaring
9696pub fn in_macro_or_desugar ( span : Span ) -> bool {
97- span. ctxt ( ) . outer_expn_info ( ) . is_some ( )
97+ span. from_expansion ( )
9898}
9999
100100/// Returns `true` if this `expn_info` was expanded by any macro.
101101pub fn in_macro ( span : Span ) -> bool {
102- if let Some ( info) = span. ctxt ( ) . outer_expn_info ( ) {
103- if let ExpnKind :: Desugaring ( ..) = info. kind {
104- false
105- } else {
106- true
107- }
108- } else {
102+ let expn_data = span. ctxt ( ) . outer_expn_data ( ) ;
103+ if expn_data. is_root ( ) {
104+ return false ;
105+ }
106+ if let ExpnKind :: Desugaring ( ..) = expn_data. kind {
109107 false
108+ } else {
109+ true
110110 }
111111}
112112// If the snippet is empty, it's an attribute that was inserted during macro
@@ -686,13 +686,14 @@ pub fn is_adjusted(cx: &LateContext<'_, '_>, e: &Expr) -> bool {
686686/// See also `is_direct_expn_of`.
687687pub fn is_expn_of ( mut span : Span , name : & str ) -> Option < Span > {
688688 loop {
689- let span_name_span = span. ctxt ( ) . outer_expn_info ( ) . map ( |ei| ( ei. kind . descr ( ) , ei. call_site ) ) ;
689+ let expn_data = span. ctxt ( ) . outer_expn_data ( ) ;
690+ let ( mac_name, new_span) = ( expn_data. kind . descr ( ) , expn_data. call_site ) ;
690691
691- match span_name_span {
692- Some ( ( mac_name, new_span) ) if mac_name. as_str ( ) == name => return Some ( new_span) ,
693- None => return None ,
694- Some ( ( _, new_span) ) => span = new_span,
692+ if mac_name. as_str ( ) == name {
693+ return Some ( new_span) ;
695694 }
695+
696+ span = new_span;
696697 }
697698}
698699
@@ -706,12 +707,13 @@ pub fn is_expn_of(mut span: Span, name: &str) -> Option<Span> {
706707/// `bar!` by
707708/// `is_direct_expn_of`.
708709pub fn is_direct_expn_of ( span : Span , name : & str ) -> Option < Span > {
709- let span_name_span = span. ctxt ( ) . outer_expn_info ( ) . map ( |ei| ( ei. kind . descr ( ) , ei. call_site ) ) ;
710+ let expn_data = span. ctxt ( ) . outer_expn_data ( ) ;
711+ let ( mac_name, new_span) = ( expn_data. kind . descr ( ) , expn_data. call_site ) ;
710712
711- match span_name_span {
712- Some ( ( mac_name, new_span) ) if mac_name. as_str ( ) == name => Some ( new_span) ,
713- _ => None ,
713+ if mac_name. as_str ( ) == name {
714+ return Some ( new_span) ;
714715 }
716+ None
715717}
716718
717719/// Convenience function to get the return type of a function.
0 commit comments