@@ -1064,26 +1064,21 @@ impl MetaItem {
1064
1064
} ,
1065
1065
_ => return None ,
1066
1066
} ;
1067
+ let list_closing_paren_pos = tokens. peek ( ) . map ( |tt| tt. span ( ) . hi ) ;
1067
1068
let node = match MetaItemKind :: from_tokens ( tokens) {
1068
1069
Some ( node) => node,
1069
1070
_ => return None ,
1070
1071
} ;
1071
- if let Some ( last_span) = node. last_span ( ) {
1072
- span. hi = last_span. hi ;
1073
- }
1072
+ span. hi = match node {
1073
+ MetaItemKind :: NameValue ( ref lit) => lit. span . hi ,
1074
+ MetaItemKind :: List ( ..) => list_closing_paren_pos. unwrap_or ( span. hi ) ,
1075
+ _ => span. hi ,
1076
+ } ;
1074
1077
Some ( MetaItem { name : name, span : span, node : node } )
1075
1078
}
1076
1079
}
1077
1080
1078
1081
impl MetaItemKind {
1079
- fn last_span ( & self ) -> Option < Span > {
1080
- match * self {
1081
- MetaItemKind :: Word => None ,
1082
- MetaItemKind :: List ( ref list) => list. last ( ) . map ( NestedMetaItem :: span) ,
1083
- MetaItemKind :: NameValue ( ref lit) => Some ( lit. span ) ,
1084
- }
1085
- }
1086
-
1087
1082
pub fn tokens ( & self , span : Span ) -> TokenStream {
1088
1083
match * self {
1089
1084
MetaItemKind :: Word => TokenStream :: empty ( ) ,
@@ -1130,7 +1125,7 @@ impl MetaItemKind {
1130
1125
let mut result = Vec :: new ( ) ;
1131
1126
while let Some ( ..) = tokens. peek ( ) {
1132
1127
match NestedMetaItemKind :: from_tokens ( & mut tokens) {
1133
- Some ( item) => result. push ( Spanned { span : item. span ( ) , node : item } ) ,
1128
+ Some ( item) => result. push ( respan ( item. span ( ) , item) ) ,
1134
1129
None => return None ,
1135
1130
}
1136
1131
match tokens. next ( ) {
@@ -1163,7 +1158,7 @@ impl NestedMetaItemKind {
1163
1158
if let Some ( TokenTree :: Token ( span, token) ) = tokens. peek ( ) . cloned ( ) {
1164
1159
if let Some ( node) = LitKind :: from_token ( token) {
1165
1160
tokens. next ( ) ;
1166
- return Some ( NestedMetaItemKind :: Literal ( Spanned { node : node , span : span } ) ) ;
1161
+ return Some ( NestedMetaItemKind :: Literal ( respan ( span , node ) ) ) ;
1167
1162
}
1168
1163
}
1169
1164
@@ -1256,7 +1251,7 @@ pub trait HasAttrs: Sized {
1256
1251
impl < T : HasAttrs > HasAttrs for Spanned < T > {
1257
1252
fn attrs ( & self ) -> & [ ast:: Attribute ] { self . node . attrs ( ) }
1258
1253
fn map_attrs < F : FnOnce ( Vec < ast:: Attribute > ) -> Vec < ast:: Attribute > > ( self , f : F ) -> Self {
1259
- Spanned { node : self . node . map_attrs ( f) , span : self . span }
1254
+ respan ( self . span , self . node . map_attrs ( f) )
1260
1255
}
1261
1256
}
1262
1257
0 commit comments