Auto merge of #43933 - topecongiro:bad-span-for-attributes, r=petrochenkov
Fix bad span for attributes Closes #42641.
This commit is contained in:
commit
c7e3c7932c
3 changed files with 11 additions and 16 deletions
|
@ -1064,26 +1064,21 @@ impl MetaItem {
|
|||
},
|
||||
_ => return None,
|
||||
};
|
||||
let list_closing_paren_pos = tokens.peek().map(|tt| tt.span().hi);
|
||||
let node = match MetaItemKind::from_tokens(tokens) {
|
||||
Some(node) => node,
|
||||
_ => return None,
|
||||
};
|
||||
if let Some(last_span) = node.last_span() {
|
||||
span.hi = last_span.hi;
|
||||
}
|
||||
span.hi = match node {
|
||||
MetaItemKind::NameValue(ref lit) => lit.span.hi,
|
||||
MetaItemKind::List(..) => list_closing_paren_pos.unwrap_or(span.hi),
|
||||
_ => span.hi,
|
||||
};
|
||||
Some(MetaItem { name: name, span: span, node: node })
|
||||
}
|
||||
}
|
||||
|
||||
impl MetaItemKind {
|
||||
fn last_span(&self) -> Option<Span> {
|
||||
match *self {
|
||||
MetaItemKind::Word => None,
|
||||
MetaItemKind::List(ref list) => list.last().map(NestedMetaItem::span),
|
||||
MetaItemKind::NameValue(ref lit) => Some(lit.span),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn tokens(&self, span: Span) -> TokenStream {
|
||||
match *self {
|
||||
MetaItemKind::Word => TokenStream::empty(),
|
||||
|
@ -1130,7 +1125,7 @@ impl MetaItemKind {
|
|||
let mut result = Vec::new();
|
||||
while let Some(..) = tokens.peek() {
|
||||
match NestedMetaItemKind::from_tokens(&mut tokens) {
|
||||
Some(item) => result.push(Spanned { span: item.span(), node: item }),
|
||||
Some(item) => result.push(respan(item.span(), item)),
|
||||
None => return None,
|
||||
}
|
||||
match tokens.next() {
|
||||
|
@ -1163,7 +1158,7 @@ impl NestedMetaItemKind {
|
|||
if let Some(TokenTree::Token(span, token)) = tokens.peek().cloned() {
|
||||
if let Some(node) = LitKind::from_token(token) {
|
||||
tokens.next();
|
||||
return Some(NestedMetaItemKind::Literal(Spanned { node: node, span: span }));
|
||||
return Some(NestedMetaItemKind::Literal(respan(span, node)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1256,7 +1251,7 @@ pub trait HasAttrs: Sized {
|
|||
impl<T: HasAttrs> HasAttrs for Spanned<T> {
|
||||
fn attrs(&self) -> &[ast::Attribute] { self.node.attrs() }
|
||||
fn map_attrs<F: FnOnce(Vec<ast::Attribute>) -> Vec<ast::Attribute>>(self, f: F) -> Self {
|
||||
Spanned { node: self.node.map_attrs(f), span: self.span }
|
||||
respan(self.span, self.node.map_attrs(f))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ error[E0536]: expected 1 cfg-pattern
|
|||
--> $DIR/E0536.rs:11:7
|
||||
|
|
||||
11 | #[cfg(not())] //~ ERROR E0536
|
||||
| ^^^
|
||||
| ^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ error[E0537]: invalid predicate `unknown`
|
|||
--> $DIR/E0537.rs:11:7
|
||||
|
|
||||
11 | #[cfg(unknown())] //~ ERROR E0537
|
||||
| ^^^^^^^
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue