use crate::expand::{self, AstFragment, Invocation};
+use rustc_attr::{self as attr, Deprecation, HasAttrs, Stability};
use rustc_data_structures::fx::FxHashMap;
use rustc_data_structures::sync::{self, Lrc};
use rustc_errors::{DiagnosticBuilder, DiagnosticId};
use rustc_parse::{self, parser, DirectoryOwnership, MACRO_ARGUMENTS};
+use rustc_session::parse::ParseSess;
use rustc_span::edition::Edition;
use rustc_span::hygiene::{AstPass, ExpnData, ExpnId, ExpnKind};
use rustc_span::source_map::SourceMap;
use rustc_span::{FileName, MultiSpan, Span, DUMMY_SP};
use smallvec::{smallvec, SmallVec};
use syntax::ast::{self, Attribute, Name, NodeId, PatKind};
-use syntax::attr::{self, Deprecation, HasAttrs, Stability};
use syntax::mut_visit::{self, MutVisitor};
use syntax::ptr::P;
-use syntax::sess::ParseSess;
use syntax::token;
use syntax::tokenstream::{self, TokenStream};
-use syntax::visit::Visitor;
+use syntax::visit::{AssocCtxt, Visitor};
use std::default::Default;
use std::iter;
}
}
- fn visit_attrs<F: FnOnce(&mut Vec<Attribute>)>(&mut self, f: F) {
+ fn visit_attrs(&mut self, f: impl FnOnce(&mut Vec<Attribute>)) {
match self {
Annotatable::Item(item) => item.visit_attrs(f),
Annotatable::TraitItem(trait_item) => trait_item.visit_attrs(f),
pub fn visit_with<'a, V: Visitor<'a>>(&'a self, visitor: &mut V) {
match self {
Annotatable::Item(item) => visitor.visit_item(item),
- Annotatable::TraitItem(trait_item) => visitor.visit_trait_item(trait_item),
- Annotatable::ImplItem(impl_item) => visitor.visit_impl_item(impl_item),
+ Annotatable::TraitItem(item) => visitor.visit_assoc_item(item, AssocCtxt::Trait),
+ Annotatable::ImplItem(item) => visitor.visit_assoc_item(item, AssocCtxt::Impl),
Annotatable::ForeignItem(foreign_item) => visitor.visit_foreign_item(foreign_item),
Annotatable::Stmt(stmt) => visitor.visit_stmt(stmt),
Annotatable::Expr(expr) => visitor.visit_expr(expr),
}
}
- pub fn expect_trait_item(self) -> ast::AssocItem {
+ pub fn expect_trait_item(self) -> P<ast::AssocItem> {
match self {
- Annotatable::TraitItem(i) => i.into_inner(),
+ Annotatable::TraitItem(i) => i,
_ => panic!("expected Item"),
}
}
- pub fn expect_impl_item(self) -> ast::AssocItem {
+ pub fn expect_impl_item(self) -> P<ast::AssocItem> {
match self {
- Annotatable::ImplItem(i) => i.into_inner(),
+ Annotatable::ImplItem(i) => i,
_ => panic!("expected Item"),
}
}
- pub fn expect_foreign_item(self) -> ast::ForeignItem {
+ pub fn expect_foreign_item(self) -> P<ast::ForeignItem> {
match self {
- Annotatable::ForeignItem(i) => i.into_inner(),
+ Annotatable::ForeignItem(i) => i,
_ => panic!("expected foreign item"),
}
}
}
/// Creates zero or more impl items.
- fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
None
}
/// Creates zero or more trait items.
- fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
None
}
/// Creates zero or more items in an `extern {}` block
- fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> {
+ fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[P<ast::ForeignItem>; 1]>> {
None
}
expr: P<ast::Expr>,
pat: P<ast::Pat>,
items: SmallVec<[P<ast::Item>; 1]>,
- impl_items: SmallVec<[ast::AssocItem; 1]>,
- trait_items: SmallVec<[ast::AssocItem; 1]>,
- foreign_items: SmallVec<[ast::ForeignItem; 1]>,
+ impl_items: SmallVec<[P<ast::AssocItem>; 1]>,
+ trait_items: SmallVec<[P<ast::AssocItem>; 1]>,
+ foreign_items: SmallVec<[P<ast::ForeignItem>; 1]>,
stmts: SmallVec<[ast::Stmt; 1]>,
ty: P<ast::Ty>,
}
self.items
}
- fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
self.impl_items
}
- fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
self.trait_items
}
- fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> {
+ fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[P<ast::ForeignItem>; 1]>> {
self.foreign_items
}
Some(SmallVec::new())
}
- fn make_impl_items(self: Box<DummyResult>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_impl_items(self: Box<DummyResult>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
Some(SmallVec::new())
}
- fn make_trait_items(self: Box<DummyResult>) -> Option<SmallVec<[ast::AssocItem; 1]>> {
+ fn make_trait_items(self: Box<DummyResult>) -> Option<SmallVec<[P<ast::AssocItem>; 1]>> {
Some(SmallVec::new())
}
- fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> {
+ fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[P<ast::ForeignItem>; 1]>> {
Some(SmallVec::new())
}
err_msg: &str,
) -> Option<(Symbol, ast::StrStyle)> {
expr_to_spanned_string(cx, expr, err_msg)
- .map_err(|err| err.map(|mut err| err.emit()))
+ .map_err(|err| {
+ err.map(|mut err| {
+ err.emit();
+ })
+ })
.ok()
.map(|(symbol, style, _)| (symbol, style))
}