@@ -22,7 +22,7 @@ pub use self::ReprAttr::*;
22
22
pub use self :: StabilityLevel :: * ;
23
23
24
24
use ast;
25
- use ast:: { AttrId , Attribute , AttrStyle , Name , Ident , Path , PathSegment } ;
25
+ use ast:: { AttrId , Attribute , AttrStyle , Name , Ident , MetaPath } ;
26
26
use ast:: { MetaItem , MetaItemKind , NestedMetaItem , NestedMetaItemKind } ;
27
27
use ast:: { Lit , LitKind , Expr , ExprKind , Item , Local , Stmt , StmtKind , GenericParam } ;
28
28
use source_map:: { BytePos , Spanned , respan, dummy_spanned} ;
@@ -166,8 +166,8 @@ impl NestedMetaItem {
166
166
}
167
167
}
168
168
169
- fn name_from_path ( path : & Path ) -> Name {
170
- path. segments . last ( ) . expect ( "empty path in attribute" ) . ident . name
169
+ fn name_from_path ( path : & MetaPath ) -> Name {
170
+ path. segments . last ( ) . expect ( "empty path in attribute" ) . name
171
171
}
172
172
173
173
impl Attribute {
@@ -270,7 +270,7 @@ impl MetaItem {
270
270
271
271
pub fn is_scoped ( & self ) -> Option < Ident > {
272
272
if self . path . segments . len ( ) > 1 {
273
- Some ( self . path . segments [ 0 ] . ident )
273
+ Some ( self . path . segments [ 0 ] )
274
274
} else {
275
275
None
276
276
}
@@ -366,15 +366,15 @@ pub fn mk_name_value_item_str(ident: Ident, value: Spanned<Symbol>) -> MetaItem
366
366
}
367
367
368
368
pub fn mk_name_value_item ( span : Span , ident : Ident , value : ast:: Lit ) -> MetaItem {
369
- MetaItem { path : Path :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
369
+ MetaItem { path : MetaPath :: from_ident ( ident) , span, node : MetaItemKind :: NameValue ( value) }
370
370
}
371
371
372
372
pub fn mk_list_item ( span : Span , ident : Ident , items : Vec < NestedMetaItem > ) -> MetaItem {
373
- MetaItem { path : Path :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
373
+ MetaItem { path : MetaPath :: from_ident ( ident) , span, node : MetaItemKind :: List ( items) }
374
374
}
375
375
376
376
pub fn mk_word_item ( ident : Ident ) -> MetaItem {
377
- MetaItem { path : Path :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
377
+ MetaItem { path : MetaPath :: from_ident ( ident) , span : ident. span , node : MetaItemKind :: Word }
378
378
}
379
379
380
380
pub fn mk_nested_word_item ( ident : Ident ) -> NestedMetaItem {
@@ -432,7 +432,7 @@ pub fn mk_sugared_doc_attr(id: AttrId, text: Symbol, span: Span) -> Attribute {
432
432
Attribute {
433
433
id,
434
434
style,
435
- path : Path :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
435
+ path : MetaPath :: from_ident ( Ident :: from_str ( "doc" ) . with_span_pos ( span) ) ,
436
436
tokens : MetaItemKind :: NameValue ( lit) . tokens ( span) ,
437
437
is_sugared_doc : true ,
438
438
span,
@@ -470,17 +470,17 @@ impl MetaItem {
470
470
fn tokens ( & self ) -> TokenStream {
471
471
let mut idents = vec ! [ ] ;
472
472
let mut last_pos = BytePos ( 0 as u32 ) ;
473
- for ( i, segment ) in self . path . segments . iter ( ) . enumerate ( ) {
473
+ for ( i, & ident ) in self . path . segments . iter ( ) . enumerate ( ) {
474
474
let is_first = i == 0 ;
475
475
if !is_first {
476
476
let mod_sep_span = Span :: new ( last_pos,
477
- segment . ident . span . lo ( ) ,
478
- segment . ident . span . ctxt ( ) ) ;
477
+ ident. span . lo ( ) ,
478
+ ident. span . ctxt ( ) ) ;
479
479
idents. push ( TokenTree :: Token ( mod_sep_span, Token :: ModSep ) . into ( ) ) ;
480
480
}
481
- idents. push ( TokenTree :: Token ( segment . ident . span ,
482
- Token :: from_ast_ident ( segment . ident ) ) . into ( ) ) ;
483
- last_pos = segment . ident . span . hi ( ) ;
481
+ idents. push ( TokenTree :: Token ( ident. span ,
482
+ Token :: from_ast_ident ( ident) ) . into ( ) ) ;
483
+ last_pos = ident. span . hi ( ) ;
484
484
}
485
485
idents. push ( self . node . tokens ( self . span ) ) ;
486
486
TokenStream :: concat ( idents)
@@ -493,12 +493,12 @@ impl MetaItem {
493
493
let path = match tokens. next ( ) {
494
494
Some ( TokenTree :: Token ( span, Token :: Ident ( ident, _) ) ) => {
495
495
if let Some ( TokenTree :: Token ( _, Token :: ModSep ) ) = tokens. peek ( ) {
496
- let mut segments = vec ! [ PathSegment :: from_ident ( ident. with_span_pos( span) ) ] ;
496
+ let mut segments = vec ! [ ident. with_span_pos( span) ] ;
497
497
tokens. next ( ) ;
498
498
loop {
499
499
if let Some ( TokenTree :: Token ( span,
500
500
Token :: Ident ( ident, _) ) ) = tokens. next ( ) {
501
- segments. push ( PathSegment :: from_ident ( ident. with_span_pos ( span) ) ) ;
501
+ segments. push ( ident. with_span_pos ( span) ) ;
502
502
} else {
503
503
return None ;
504
504
}
@@ -508,16 +508,18 @@ impl MetaItem {
508
508
break ;
509
509
}
510
510
}
511
- let span = span. with_hi ( segments. last ( ) . unwrap ( ) . ident . span . hi ( ) ) ;
512
- Path { span, segments }
511
+ let span = span. with_hi ( segments. last ( ) . unwrap ( ) . span . hi ( ) ) ;
512
+ MetaPath { span, segments }
513
513
} else {
514
- Path :: from_ident ( ident. with_span_pos ( span) )
514
+ MetaPath :: from_ident ( ident. with_span_pos ( span) )
515
515
}
516
516
}
517
517
Some ( TokenTree :: Token ( _, Token :: Interpolated ( ref nt) ) ) => match nt. 0 {
518
- token:: Nonterminal :: NtIdent ( ident, _) => Path :: from_ident ( ident) ,
518
+ token:: Nonterminal :: NtIdent ( ident, _) => MetaPath :: from_ident ( ident) ,
519
519
token:: Nonterminal :: NtMeta ( ref meta) => return Some ( meta. clone ( ) ) ,
520
- token:: Nonterminal :: NtPath ( ref path) => path. clone ( ) ,
520
+ token:: Nonterminal :: NtPath ( ref path) => {
521
+ ast:: MetaPath :: from_regular_path ( path) ?
522
+ }
521
523
_ => return None ,
522
524
} ,
523
525
_ => return None ,
0 commit comments