@@ -282,11 +282,13 @@ pub(super) fn transcribe<'a>(
282
282
}
283
283
MatchedSingle ( ParseNtResult :: Ident ( ident, is_raw) ) => {
284
284
marker. visit_span ( & mut sp) ;
285
+ with_metavar_spans ( |mspans| mspans. insert ( ident. span , sp) ) ;
285
286
let kind = token:: NtIdent ( * ident, * is_raw) ;
286
287
TokenTree :: token_alone ( kind, sp)
287
288
}
288
289
MatchedSingle ( ParseNtResult :: Lifetime ( ident, is_raw) ) => {
289
290
marker. visit_span ( & mut sp) ;
291
+ with_metavar_spans ( |mspans| mspans. insert ( ident. span , sp) ) ;
290
292
let kind = token:: NtLifetime ( * ident, * is_raw) ;
291
293
TokenTree :: token_alone ( kind, sp)
292
294
}
@@ -295,6 +297,8 @@ pub(super) fn transcribe<'a>(
295
297
// `Delimiter::Invisible` to maintain parsing priorities.
296
298
// `Interpolated` is currently used for such groups in rustc parser.
297
299
marker. visit_span ( & mut sp) ;
300
+ let use_span = nt. use_span ( ) ;
301
+ with_metavar_spans ( |mspans| mspans. insert ( use_span, sp) ) ;
298
302
TokenTree :: token_alone ( token:: Interpolated ( Lrc :: clone ( nt) ) , sp)
299
303
}
300
304
MatchedSeq ( ..) => {
@@ -410,19 +414,15 @@ fn maybe_use_metavar_location(
410
414
return orig_tt. clone ( ) ;
411
415
}
412
416
413
- let insert = |mspans : & mut FxHashMap < _ , _ > , s, ms| match mspans. try_insert ( s, ms) {
414
- Ok ( _) => true ,
415
- Err ( err) => * err. entry . get ( ) == ms, // Tried to insert the same span, still success
416
- } ;
417
417
marker. visit_span ( & mut metavar_span) ;
418
418
let no_collision = match orig_tt {
419
419
TokenTree :: Token ( token, ..) => {
420
- with_metavar_spans ( |mspans| insert ( mspans , token. span , metavar_span) )
420
+ with_metavar_spans ( |mspans| mspans . insert ( token. span , metavar_span) )
421
421
}
422
422
TokenTree :: Delimited ( dspan, ..) => with_metavar_spans ( |mspans| {
423
- insert ( mspans , dspan. open , metavar_span)
424
- && insert ( mspans , dspan. close , metavar_span)
425
- && insert ( mspans , dspan. entire ( ) , metavar_span)
423
+ mspans . insert ( dspan. open , metavar_span)
424
+ && mspans . insert ( dspan. close , metavar_span)
425
+ && mspans . insert ( dspan. entire ( ) , metavar_span)
426
426
} ) ,
427
427
} ;
428
428
if no_collision || psess. source_map ( ) . is_imported ( metavar_span) {
@@ -434,14 +434,14 @@ fn maybe_use_metavar_location(
434
434
match orig_tt {
435
435
TokenTree :: Token ( Token { kind, span } , spacing) => {
436
436
let span = metavar_span. with_ctxt ( span. ctxt ( ) ) ;
437
- with_metavar_spans ( |mspans| insert ( mspans , span, metavar_span) ) ;
437
+ with_metavar_spans ( |mspans| mspans . insert ( span, metavar_span) ) ;
438
438
TokenTree :: Token ( Token { kind : kind. clone ( ) , span } , * spacing)
439
439
}
440
440
TokenTree :: Delimited ( dspan, dspacing, delimiter, tts) => {
441
441
let open = metavar_span. with_ctxt ( dspan. open . ctxt ( ) ) ;
442
442
let close = metavar_span. with_ctxt ( dspan. close . ctxt ( ) ) ;
443
443
with_metavar_spans ( |mspans| {
444
- insert ( mspans , open, metavar_span) && insert ( mspans , close, metavar_span)
444
+ mspans . insert ( open, metavar_span) && mspans . insert ( close, metavar_span)
445
445
} ) ;
446
446
let dspan = DelimSpan :: from_pair ( open, close) ;
447
447
TokenTree :: Delimited ( dspan, * dspacing, * delimiter, tts. clone ( ) )
0 commit comments