@@ -8,7 +8,7 @@ use crate::ast::{Path, PathSegment};
8
8
use crate :: ptr:: P ;
9
9
use crate :: token:: { self , CommentKind , Delimiter , Token } ;
10
10
use crate :: tokenstream:: { AttrAnnotatedTokenStream , AttrAnnotatedTokenTree } ;
11
- use crate :: tokenstream:: { DelimSpan , Spacing , TokenTree , TreeAndSpacing } ;
11
+ use crate :: tokenstream:: { DelimSpan , Spacing , TokenTree } ;
12
12
use crate :: tokenstream:: { LazyTokenStream , TokenStream } ;
13
13
use crate :: util:: comments;
14
14
@@ -388,20 +388,20 @@ pub fn list_contains_name(items: &[NestedMetaItem], name: Symbol) -> bool {
388
388
}
389
389
390
390
impl MetaItem {
391
- fn token_trees_and_spacings ( & self ) -> Vec < TreeAndSpacing > {
391
+ fn token_trees ( & self ) -> Vec < TokenTree > {
392
392
let mut idents = vec ! [ ] ;
393
393
let mut last_pos = BytePos ( 0_u32 ) ;
394
394
for ( i, segment) in self . path . segments . iter ( ) . enumerate ( ) {
395
395
let is_first = i == 0 ;
396
396
if !is_first {
397
397
let mod_sep_span =
398
398
Span :: new ( last_pos, segment. ident . span . lo ( ) , segment. ident . span . ctxt ( ) , None ) ;
399
- idents. push ( TokenTree :: token ( token:: ModSep , mod_sep_span) . into ( ) ) ;
399
+ idents. push ( TokenTree :: token_alone ( token:: ModSep , mod_sep_span) ) ;
400
400
}
401
- idents. push ( TokenTree :: Token ( Token :: from_ast_ident ( segment. ident ) ) . into ( ) ) ;
401
+ idents. push ( TokenTree :: Token ( Token :: from_ast_ident ( segment. ident ) , Spacing :: Alone ) ) ;
402
402
last_pos = segment. ident . span . hi ( ) ;
403
403
}
404
- idents. extend ( self . kind . token_trees_and_spacings ( self . span ) ) ;
404
+ idents. extend ( self . kind . token_trees ( self . span ) ) ;
405
405
idents
406
406
}
407
407
@@ -411,12 +411,13 @@ impl MetaItem {
411
411
{
412
412
// FIXME: Share code with `parse_path`.
413
413
let path = match tokens. next ( ) . map ( TokenTree :: uninterpolate) {
414
- Some ( TokenTree :: Token ( Token {
415
- kind : kind @ ( token:: Ident ( ..) | token:: ModSep ) ,
416
- span ,
417
- } ) ) => ' arm: {
414
+ Some ( TokenTree :: Token (
415
+ Token { kind : kind @ ( token:: Ident ( ..) | token:: ModSep ) , span } ,
416
+ _ ,
417
+ ) ) => ' arm: {
418
418
let mut segments = if let token:: Ident ( name, _) = kind {
419
- if let Some ( TokenTree :: Token ( Token { kind : token:: ModSep , .. } ) ) = tokens. peek ( )
419
+ if let Some ( TokenTree :: Token ( Token { kind : token:: ModSep , .. } , _) ) =
420
+ tokens. peek ( )
420
421
{
421
422
tokens. next ( ) ;
422
423
vec ! [ PathSegment :: from_ident( Ident :: new( name, span) ) ]
@@ -427,14 +428,15 @@ impl MetaItem {
427
428
vec ! [ PathSegment :: path_root( span) ]
428
429
} ;
429
430
loop {
430
- if let Some ( TokenTree :: Token ( Token { kind : token:: Ident ( name, _) , span } ) ) =
431
+ if let Some ( TokenTree :: Token ( Token { kind : token:: Ident ( name, _) , span } , _ ) ) =
431
432
tokens. next ( ) . map ( TokenTree :: uninterpolate)
432
433
{
433
434
segments. push ( PathSegment :: from_ident ( Ident :: new ( name, span) ) ) ;
434
435
} else {
435
436
return None ;
436
437
}
437
- if let Some ( TokenTree :: Token ( Token { kind : token:: ModSep , .. } ) ) = tokens. peek ( )
438
+ if let Some ( TokenTree :: Token ( Token { kind : token:: ModSep , .. } , _) ) =
439
+ tokens. peek ( )
438
440
{
439
441
tokens. next ( ) ;
440
442
} else {
@@ -444,7 +446,7 @@ impl MetaItem {
444
446
let span = span. with_hi ( segments. last ( ) . unwrap ( ) . ident . span . hi ( ) ) ;
445
447
Path { span, segments, tokens : None }
446
448
}
447
- Some ( TokenTree :: Token ( Token { kind : token:: Interpolated ( nt) , .. } ) ) => match * nt {
449
+ Some ( TokenTree :: Token ( Token { kind : token:: Interpolated ( nt) , .. } , _ ) ) => match * nt {
448
450
token:: Nonterminal :: NtMeta ( ref item) => return item. meta ( item. path . span ) ,
449
451
token:: Nonterminal :: NtPath ( ref path) => ( * * path) . clone ( ) ,
450
452
_ => return None ,
@@ -491,9 +493,9 @@ impl MetaItemKind {
491
493
let mut tts = Vec :: new ( ) ;
492
494
for ( i, item) in list. iter ( ) . enumerate ( ) {
493
495
if i > 0 {
494
- tts. push ( TokenTree :: token ( token:: Comma , span) . into ( ) ) ;
496
+ tts. push ( TokenTree :: token_alone ( token:: Comma , span) ) ;
495
497
}
496
- tts. extend ( item. token_trees_and_spacings ( ) )
498
+ tts. extend ( item. token_trees ( ) )
497
499
}
498
500
MacArgs :: Delimited (
499
501
DelimSpan :: from_single ( span) ,
@@ -504,31 +506,28 @@ impl MetaItemKind {
504
506
}
505
507
}
506
508
507
- fn token_trees_and_spacings ( & self , span : Span ) -> Vec < TreeAndSpacing > {
509
+ fn token_trees ( & self , span : Span ) -> Vec < TokenTree > {
508
510
match * self {
509
511
MetaItemKind :: Word => vec ! [ ] ,
510
512
MetaItemKind :: NameValue ( ref lit) => {
511
513
vec ! [
512
- TokenTree :: token ( token:: Eq , span) . into ( ) ,
513
- TokenTree :: Token ( lit. to_token( ) ) . into ( ) ,
514
+ TokenTree :: token_alone ( token:: Eq , span) ,
515
+ TokenTree :: Token ( lit. to_token( ) , Spacing :: Alone ) ,
514
516
]
515
517
}
516
518
MetaItemKind :: List ( ref list) => {
517
519
let mut tokens = Vec :: new ( ) ;
518
520
for ( i, item) in list. iter ( ) . enumerate ( ) {
519
521
if i > 0 {
520
- tokens. push ( TokenTree :: token ( token:: Comma , span) . into ( ) ) ;
522
+ tokens. push ( TokenTree :: token_alone ( token:: Comma , span) ) ;
521
523
}
522
- tokens. extend ( item. token_trees_and_spacings ( ) )
524
+ tokens. extend ( item. token_trees ( ) )
523
525
}
524
- vec ! [
525
- TokenTree :: Delimited (
526
- DelimSpan :: from_single( span) ,
527
- Delimiter :: Parenthesis ,
528
- TokenStream :: new( tokens) ,
529
- )
530
- . into( ) ,
531
- ]
526
+ vec ! [ TokenTree :: Delimited (
527
+ DelimSpan :: from_single( span) ,
528
+ Delimiter :: Parenthesis ,
529
+ TokenStream :: new( tokens) ,
530
+ ) ]
532
531
}
533
532
}
534
533
}
@@ -540,7 +539,7 @@ impl MetaItemKind {
540
539
let item = NestedMetaItem :: from_tokens ( & mut tokens) ?;
541
540
result. push ( item) ;
542
541
match tokens. next ( ) {
543
- None | Some ( TokenTree :: Token ( Token { kind : token:: Comma , .. } ) ) => { }
542
+ None | Some ( TokenTree :: Token ( Token { kind : token:: Comma , .. } , _ ) ) => { }
544
543
_ => return None ,
545
544
}
546
545
}
@@ -554,7 +553,7 @@ impl MetaItemKind {
554
553
Some ( TokenTree :: Delimited ( _, Delimiter :: Invisible , inner_tokens) ) => {
555
554
MetaItemKind :: name_value_from_tokens ( & mut inner_tokens. into_trees ( ) )
556
555
}
557
- Some ( TokenTree :: Token ( token) ) => {
556
+ Some ( TokenTree :: Token ( token, _ ) ) => {
558
557
Lit :: from_token ( & token) . ok ( ) . map ( MetaItemKind :: NameValue )
559
558
}
560
559
_ => None ,
@@ -586,7 +585,7 @@ impl MetaItemKind {
586
585
MetaItemKind :: list_from_tokens ( inner_tokens)
587
586
}
588
587
Some ( TokenTree :: Delimited ( ..) ) => None ,
589
- Some ( TokenTree :: Token ( Token { kind : token:: Eq , .. } ) ) => {
588
+ Some ( TokenTree :: Token ( Token { kind : token:: Eq , .. } , _ ) ) => {
590
589
tokens. next ( ) ;
591
590
MetaItemKind :: name_value_from_tokens ( tokens)
592
591
}
@@ -603,10 +602,12 @@ impl NestedMetaItem {
603
602
}
604
603
}
605
604
606
- fn token_trees_and_spacings ( & self ) -> Vec < TreeAndSpacing > {
605
+ fn token_trees ( & self ) -> Vec < TokenTree > {
607
606
match * self {
608
- NestedMetaItem :: MetaItem ( ref item) => item. token_trees_and_spacings ( ) ,
609
- NestedMetaItem :: Literal ( ref lit) => vec ! [ TokenTree :: Token ( lit. to_token( ) ) . into( ) ] ,
607
+ NestedMetaItem :: MetaItem ( ref item) => item. token_trees ( ) ,
608
+ NestedMetaItem :: Literal ( ref lit) => {
609
+ vec ! [ TokenTree :: Token ( lit. to_token( ) , Spacing :: Alone ) ]
610
+ }
610
611
}
611
612
}
612
613
@@ -615,7 +616,7 @@ impl NestedMetaItem {
615
616
I : Iterator < Item = TokenTree > ,
616
617
{
617
618
match tokens. peek ( ) {
618
- Some ( TokenTree :: Token ( token) )
619
+ Some ( TokenTree :: Token ( token, _ ) )
619
620
if let Ok ( lit) = Lit :: from_token ( token) =>
620
621
{
621
622
tokens. next ( ) ;
0 commit comments