-// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
use std::cmp::max;
-use syntax::{
- ast, ptr,
- source_map::{self, Span},
-};
+use rustc_ast::{ast, ptr};
+use rustc_span::{source_map, Span};
use crate::macros::MacroArg;
use crate::utils::{mk_sp, outer_attributes};
/// Spanned returns a span including attributes, if available.
-pub trait Spanned {
+pub(crate) trait Spanned {
fn span(&self) -> Span;
}
}
// Implement `Spanned` for structs with `attrs` field.
+implement_spanned!(ast::AssocItem);
implement_spanned!(ast::Expr);
implement_spanned!(ast::Field);
implement_spanned!(ast::ForeignItem);
implement_spanned!(ast::Item);
implement_spanned!(ast::Local);
-implement_spanned!(ast::TraitItem);
-implement_spanned!(ast::ImplItem);
impl Spanned for ast::Stmt {
fn span(&self) -> Span {
- match self.node {
+ match self.kind {
ast::StmtKind::Local(ref local) => mk_sp(local.span().lo(), self.span.hi()),
ast::StmtKind::Item(ref item) => mk_sp(item.span().lo(), self.span.hi()),
ast::StmtKind::Expr(ref expr) | ast::StmtKind::Semi(ref expr) => {
mk_sp(expr.span().lo(), self.span.hi())
}
- ast::StmtKind::Mac(ref mac) => {
- let (_, _, ref attrs) = **mac;
- if attrs.is_empty() {
+ ast::StmtKind::MacCall(ref mac_stmt) => {
+ if mac_stmt.attrs.is_empty() {
self.span
} else {
- mk_sp(attrs[0].span.lo(), self.span.hi())
+ mk_sp(mac_stmt.attrs[0].span.lo(), self.span.hi())
}
}
+ ast::StmtKind::Empty => self.span,
}
}
}
impl Spanned for ast::Arm {
fn span(&self) -> Span {
let lo = if self.attrs.is_empty() {
- self.pats[0].span.lo()
+ self.pat.span.lo()
} else {
self.attrs[0].span.lo()
};
}
}
-impl Spanned for ast::Arg {
+impl Spanned for ast::Param {
fn span(&self) -> Span {
- if crate::items::is_named_arg(self) {
+ if crate::items::is_named_param(self) {
mk_sp(self.pat.span.lo(), self.ty.span.hi())
} else {
self.ty.span
}
}
-impl Spanned for ast::FunctionRetTy {
+impl Spanned for ast::FnRetTy {
fn span(&self) -> Span {
match *self {
- ast::FunctionRetTy::Default(span) => span,
- ast::FunctionRetTy::Ty(ref ty) => ty.span,
+ ast::FnRetTy::Default(span) => span,
+ ast::FnRetTy::Ty(ref ty) => ty.span,
}
}
}
match *self {
ast::GenericArg::Lifetime(ref lt) => lt.ident.span,
ast::GenericArg::Type(ref ty) => ty.span(),
- ast::GenericArg::Const(..) => unreachable!(), // FIXME(#3336)
+ ast::GenericArg::Const(ref _const) => _const.value.span(),
}
}
}
}
}
}
+
+impl Spanned for ast::NestedMetaItem {
+ fn span(&self) -> Span {
+ self.span()
+ }
+}