#[derive(Copy, Clone, PartialEq, Eq)]
pub enum FnKind<'a> {
/// fn foo() or extern "Abi" fn foo()
- ItemFn(Ident, &'a Generics, Unsafety, Constness, Abi, Visibility),
+ ItemFn(Ident, &'a Generics, Unsafety, Constness, Abi, &'a Visibility),
/// fn foo(&self)
- Method(Ident, &'a MethodSig, Option<Visibility>),
+ Method(Ident, &'a MethodSig, Option<&'a Visibility>),
/// |x, y| {}
Closure,
fn visit_macro_def(&mut self, macro_def: &'v MacroDef) {
walk_macro_def(self, macro_def)
}
+ fn visit_vis(&mut self, vis: &'v Visibility) {
+ walk_vis(self, vis)
+ }
}
#[macro_export]
}
ItemKind::Fn(ref declaration, unsafety, constness, abi, ref generics, ref body) => {
visitor.visit_fn(FnKind::ItemFn(item.ident, generics, unsafety,
- constness, abi, item.vis),
+ constness, abi, &item.vis),
declaration,
body,
item.span,
FnKind::ItemFn(_, generics, _, _, _, _) => {
visitor.visit_generics(generics);
}
- FnKind::Method(_, sig, _) => {
+ FnKind::Method(_, ref sig, _) => {
visitor.visit_generics(&sig.generics);
visitor.visit_explicit_self(&sig.explicit_self);
}
visitor.visit_expr(expr);
}
ImplItemKind::Method(ref sig, ref body) => {
- visitor.visit_fn(FnKind::Method(impl_item.ident, sig, Some(impl_item.vis)), &sig.decl,
+ visitor.visit_fn(FnKind::Method(impl_item.ident, sig, Some(&impl_item.vis)), &sig.decl,
body, impl_item.span, impl_item.id);
}
ImplItemKind::Type(ref ty) => {
pub fn walk_struct_field<'v, V: Visitor<'v>>(visitor: &mut V,
struct_field: &'v StructField) {
- walk_opt_ident(visitor, struct_field.span, struct_field.node.ident());
- visitor.visit_ty(&struct_field.node.ty);
- walk_list!(visitor, visit_attribute, &struct_field.node.attrs);
+ walk_opt_ident(visitor, struct_field.span, struct_field.ident);
+ visitor.visit_ty(&struct_field.ty);
+ walk_list!(visitor, visit_attribute, &struct_field.attrs);
}
pub fn walk_block<'v, V: Visitor<'v>>(visitor: &mut V, block: &'v Block) {
visitor.visit_expr(main_expression);
visitor.visit_expr(index_expression)
}
- ExprKind::Range(ref start, ref end) => {
+ ExprKind::Range(ref start, ref end, _) => {
walk_list!(visitor, visit_expr, start);
walk_list!(visitor, visit_expr, end);
}
visitor.visit_expr(&output.expr)
}
}
+ ExprKind::Try(ref subexpression) => {
+ visitor.visit_expr(subexpression)
+ }
}
visitor.visit_expr_post(expression)
visitor.visit_expr(&arm.body);
walk_list!(visitor, visit_attribute, &arm.attrs);
}
+
+pub fn walk_vis<'v, V: Visitor<'v>>(visitor: &mut V, vis: &'v Visibility) {
+ match *vis {
+ Visibility::Restricted { ref path, id } => visitor.visit_path(path, id),
+ _ => {}
+ }
+}