@@ -916,35 +916,43 @@ impl Span {
916916 }
917917
918918 /// Check if you can select metavar spans for the given spans to get matching contexts.
919- fn try_metavars ( a : SpanData , b : SpanData , a_orig : Span , b_orig : Span ) -> ( SpanData , SpanData ) {
920- match with_metavar_spans ( |mspans| ( mspans. get ( a_orig) , mspans. get ( b_orig) ) ) {
921- ( None , None ) => { }
922- ( Some ( meta_a) , None ) => {
923- let meta_a = meta_a. data ( ) ;
924- if meta_a. ctxt == b. ctxt {
925- return ( meta_a, b) ;
926- }
927- }
928- ( None , Some ( meta_b) ) => {
929- let meta_b = meta_b. data ( ) ;
930- if a. ctxt == meta_b. ctxt {
931- return ( a, meta_b) ;
932- }
933- }
934- ( Some ( meta_a) , Some ( meta_b) ) => {
935- let meta_b = meta_b. data ( ) ;
936- if a. ctxt == meta_b. ctxt {
937- return ( a, meta_b) ;
938- }
939- let meta_a = meta_a. data ( ) ;
940- if meta_a. ctxt == b. ctxt {
941- return ( meta_a, b) ;
942- } else if meta_a. ctxt == meta_b. ctxt {
943- return ( meta_a, meta_b) ;
944- }
945- }
919+ #[ tracing:: instrument( level = "trace" , ret) ]
920+ fn try_metavars (
921+ mut a : SpanData ,
922+ mut b : SpanData ,
923+ a_orig : Span ,
924+ b_orig : Span ,
925+ ) -> ( SpanData , SpanData ) {
926+ let a_parent = a. parent ;
927+ let b_parent = b. parent ;
928+
929+ let ( meta_a, meta_b) = with_metavar_spans ( |mspans| {
930+ ( mspans. get ( a_orig. with_parent ( None ) ) , mspans. get ( b_orig. with_parent ( None ) ) )
931+ } ) ;
932+
933+ let meta_a = meta_a. map ( Span :: data) ;
934+ let meta_b = meta_b. map ( Span :: data) ;
935+
936+ if let Some ( meta_b) = meta_b
937+ && meta_b. ctxt == a. ctxt
938+ {
939+ b = meta_b;
940+ }
941+ if let Some ( meta_a) = meta_a
942+ && meta_a. ctxt == b. ctxt
943+ {
944+ a = meta_a;
945+ }
946+ if let Some ( meta_a) = meta_a
947+ && let Some ( meta_b) = meta_b
948+ && meta_a. ctxt == meta_b. ctxt
949+ {
950+ a = meta_a;
951+ b = meta_b;
946952 }
947953
954+ a. parent = a_parent;
955+ b. parent = b_parent;
948956 ( a, b)
949957 }
950958
0 commit comments