Remove largely unused context from Visitor.

This commit is contained in:
Eduard Burtescu 2014-09-12 13:10:30 +03:00
parent 22e749ded1
commit a09dbf28e6
48 changed files with 1449 additions and 1504 deletions

View file

@ -366,17 +366,16 @@ impl<'a, O: IdVisitingOperation> IdVisitor<'a, O> {
}
}
impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
impl<'a, O: IdVisitingOperation> Visitor for IdVisitor<'a, O> {
fn visit_mod(&mut self,
module: &Mod,
_: Span,
node_id: NodeId,
env: ()) {
node_id: NodeId) {
self.operation.visit_id(node_id);
visit::walk_mod(self, module, env)
visit::walk_mod(self, module)
}
fn visit_view_item(&mut self, view_item: &ViewItem, env: ()) {
fn visit_view_item(&mut self, view_item: &ViewItem) {
if !self.pass_through_items {
if self.visited_outermost {
return;
@ -403,16 +402,16 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
}
}
}
visit::walk_view_item(self, view_item, env);
visit::walk_view_item(self, view_item);
self.visited_outermost = false;
}
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem, env: ()) {
fn visit_foreign_item(&mut self, foreign_item: &ForeignItem) {
self.operation.visit_id(foreign_item.id);
visit::walk_foreign_item(self, foreign_item, env)
visit::walk_foreign_item(self, foreign_item)
}
fn visit_item(&mut self, item: &Item, env: ()) {
fn visit_item(&mut self, item: &Item) {
if !self.pass_through_items {
if self.visited_outermost {
return
@ -431,48 +430,48 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
_ => {}
}
visit::walk_item(self, item, env);
visit::walk_item(self, item);
self.visited_outermost = false
}
fn visit_local(&mut self, local: &Local, env: ()) {
fn visit_local(&mut self, local: &Local) {
self.operation.visit_id(local.id);
visit::walk_local(self, local, env)
visit::walk_local(self, local)
}
fn visit_block(&mut self, block: &Block, env: ()) {
fn visit_block(&mut self, block: &Block) {
self.operation.visit_id(block.id);
visit::walk_block(self, block, env)
visit::walk_block(self, block)
}
fn visit_stmt(&mut self, statement: &Stmt, env: ()) {
fn visit_stmt(&mut self, statement: &Stmt) {
self.operation.visit_id(ast_util::stmt_id(statement));
visit::walk_stmt(self, statement, env)
visit::walk_stmt(self, statement)
}
fn visit_pat(&mut self, pattern: &Pat, env: ()) {
fn visit_pat(&mut self, pattern: &Pat) {
self.operation.visit_id(pattern.id);
visit::walk_pat(self, pattern, env)
visit::walk_pat(self, pattern)
}
fn visit_expr(&mut self, expression: &Expr, env: ()) {
fn visit_expr(&mut self, expression: &Expr) {
self.operation.visit_id(expression.id);
visit::walk_expr(self, expression, env)
visit::walk_expr(self, expression)
}
fn visit_ty(&mut self, typ: &Ty, env: ()) {
fn visit_ty(&mut self, typ: &Ty) {
self.operation.visit_id(typ.id);
match typ.node {
TyPath(_, _, id) => self.operation.visit_id(id),
_ => {}
}
visit::walk_ty(self, typ, env)
visit::walk_ty(self, typ)
}
fn visit_generics(&mut self, generics: &Generics, env: ()) {
fn visit_generics(&mut self, generics: &Generics) {
self.visit_generics_helper(generics);
visit::walk_generics(self, generics, env)
visit::walk_generics(self, generics)
}
fn visit_fn(&mut self,
@ -480,8 +479,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
function_declaration: &FnDecl,
block: &Block,
span: Span,
node_id: NodeId,
env: ()) {
node_id: NodeId) {
if !self.pass_through_items {
match *function_kind {
visit::FkMethod(..) if self.visited_outermost => return,
@ -508,8 +506,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
function_kind,
function_declaration,
block,
span,
env);
span);
if !self.pass_through_items {
match *function_kind {
@ -519,28 +516,27 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
}
}
fn visit_struct_field(&mut self, struct_field: &StructField, env: ()) {
fn visit_struct_field(&mut self, struct_field: &StructField) {
self.operation.visit_id(struct_field.node.id);
visit::walk_struct_field(self, struct_field, env)
visit::walk_struct_field(self, struct_field)
}
fn visit_struct_def(&mut self,
struct_def: &StructDef,
_: ast::Ident,
_: &ast::Generics,
id: NodeId,
_: ()) {
id: NodeId) {
self.operation.visit_id(id);
struct_def.ctor_id.map(|ctor_id| self.operation.visit_id(ctor_id));
visit::walk_struct_def(self, struct_def, ());
visit::walk_struct_def(self, struct_def);
}
fn visit_trait_item(&mut self, tm: &ast::TraitItem, _: ()) {
fn visit_trait_item(&mut self, tm: &ast::TraitItem) {
match *tm {
ast::RequiredMethod(ref m) => self.operation.visit_id(m.id),
ast::ProvidedMethod(ref m) => self.operation.visit_id(m.id),
}
visit::walk_trait_item(self, tm, ());
visit::walk_trait_item(self, tm);
}
}
@ -552,7 +548,7 @@ pub fn visit_ids_for_inlined_item<O: IdVisitingOperation>(item: &InlinedItem,
visited_outermost: false,
};
visit::walk_inlined_item(&mut id_visitor, item, ());
visit::walk_inlined_item(&mut id_visitor, item);
}
struct IdRangeComputingVisitor {
@ -595,7 +591,7 @@ pub fn compute_id_range_for_fn_body(fk: &visit::FnKind,
pass_through_items: false,
visited_outermost: false,
};
id_visitor.visit_fn(fk, decl, body, sp, id, ());
id_visitor.visit_fn(fk, decl, body, sp, id);
visitor.result.get()
}
@ -643,8 +639,8 @@ struct EachViewItemData<'a> {
callback: |&ast::ViewItem|: 'a -> bool,
}
impl<'a> Visitor<()> for EachViewItemData<'a> {
fn visit_view_item(&mut self, view_item: &ast::ViewItem, _: ()) {
impl<'a> Visitor for EachViewItemData<'a> {
fn visit_view_item(&mut self, view_item: &ast::ViewItem) {
let _ = (self.callback)(view_item);
}
}
@ -654,7 +650,7 @@ impl EachViewItem for ast::Crate {
let mut visit = EachViewItemData {
callback: f,
};
visit::walk_crate(&mut visit, self, ());
visit::walk_crate(&mut visit, self);
true
}
}

View file

@ -648,29 +648,29 @@ fn expand_arm(arm: &ast::Arm, fld: &mut MacroExpander) -> ast::Arm {
/// array
#[deriving(Clone)]
struct PatIdentFinder {
ident_accumulator: Vec<ast::Ident> ,
ident_accumulator: Vec<ast::Ident>
}
impl Visitor<()> for PatIdentFinder {
fn visit_pat(&mut self, pattern: &ast::Pat, _: ()) {
impl Visitor for PatIdentFinder {
fn visit_pat(&mut self, pattern: &ast::Pat) {
match *pattern {
ast::Pat { id: _, node: ast::PatIdent(_, ref path1, ref inner), span: _ } => {
self.ident_accumulator.push(path1.node);
// visit optional subpattern of PatIdent:
for subpat in inner.iter() {
self.visit_pat(&**subpat, ())
self.visit_pat(&**subpat)
}
}
// use the default traversal for non-PatIdents
_ => visit::walk_pat(self, pattern, ())
_ => visit::walk_pat(self, pattern)
}
}
}
/// find the PatIdent paths in a pattern
fn pattern_bindings(pat : &ast::Pat) -> Vec<ast::Ident> {
fn pattern_bindings(pat: &ast::Pat) -> Vec<ast::Ident> {
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
name_finder.visit_pat(pat,());
name_finder.visit_pat(pat);
name_finder.ident_accumulator
}
@ -678,7 +678,7 @@ fn pattern_bindings(pat : &ast::Pat) -> Vec<ast::Ident> {
fn fn_decl_arg_bindings(fn_decl: &ast::FnDecl) -> Vec<ast::Ident> {
let mut pat_idents = PatIdentFinder{ident_accumulator:Vec::new()};
for arg in fn_decl.inputs.iter() {
pat_idents.visit_pat(&*arg.pat, ());
pat_idents.visit_pat(&*arg.pat);
}
pat_idents.ident_accumulator
}
@ -1099,7 +1099,7 @@ fn original_span(cx: &ExtCtxt) -> Gc<codemap::ExpnInfo> {
/// Check that there are no macro invocations left in the AST:
pub fn check_for_macros(sess: &parse::ParseSess, krate: &ast::Crate) {
visit::walk_crate(&mut MacroExterminator{sess:sess}, krate, ());
visit::walk_crate(&mut MacroExterminator{sess:sess}, krate);
}
/// A visitor that ensures that no macro invocations remain in an AST.
@ -1107,8 +1107,8 @@ struct MacroExterminator<'a>{
sess: &'a parse::ParseSess
}
impl<'a> visit::Visitor<()> for MacroExterminator<'a> {
fn visit_mac(&mut self, macro: &ast::Mac, _:()) {
impl<'a> Visitor for MacroExterminator<'a> {
fn visit_mac(&mut self, macro: &ast::Mac) {
self.sess.span_diagnostic.span_bug(macro.span,
"macro exterminator: expected AST \
with no macro invocations");
@ -1144,15 +1144,14 @@ mod test {
path_accumulator: Vec<ast::Path> ,
}
impl Visitor<()> for PathExprFinderContext {
fn visit_expr(&mut self, expr: &ast::Expr, _: ()) {
match *expr {
ast::Expr{id:_,span:_,node:ast::ExprPath(ref p)} => {
impl Visitor for PathExprFinderContext {
fn visit_expr(&mut self, expr: &ast::Expr) {
match expr.node {
ast::ExprPath(ref p) => {
self.path_accumulator.push(p.clone());
// not calling visit_path, but it should be fine.
}
_ => visit::walk_expr(self,expr,())
_ => visit::walk_expr(self, expr)
}
}
}
@ -1160,18 +1159,18 @@ mod test {
// find the variable references in a crate
fn crate_varrefs(the_crate : &ast::Crate) -> Vec<ast::Path> {
let mut path_finder = PathExprFinderContext{path_accumulator:Vec::new()};
visit::walk_crate(&mut path_finder, the_crate, ());
visit::walk_crate(&mut path_finder, the_crate);
path_finder.path_accumulator
}
/// A Visitor that extracts the identifiers from a thingy.
// as a side note, I'm starting to want to abstract over these....
struct IdentFinder{
struct IdentFinder {
ident_accumulator: Vec<ast::Ident>
}
impl Visitor<()> for IdentFinder {
fn visit_ident(&mut self, _: codemap::Span, id: ast::Ident, _: ()){
impl Visitor for IdentFinder {
fn visit_ident(&mut self, _: codemap::Span, id: ast::Ident){
self.ident_accumulator.push(id);
}
}
@ -1179,7 +1178,7 @@ mod test {
/// Find the idents in a crate
fn crate_idents(the_crate: &ast::Crate) -> Vec<ast::Ident> {
let mut ident_finder = IdentFinder{ident_accumulator: Vec::new()};
visit::walk_crate(&mut ident_finder, the_crate, ());
visit::walk_crate(&mut ident_finder, the_crate);
ident_finder.ident_accumulator
}
@ -1277,7 +1276,7 @@ mod test {
// find the pat_ident paths in a crate
fn crate_bindings(the_crate : &ast::Crate) -> Vec<ast::Ident> {
let mut name_finder = PatIdentFinder{ident_accumulator:Vec::new()};
visit::walk_crate(&mut name_finder, the_crate, ());
visit::walk_crate(&mut name_finder, the_crate);
name_finder.ident_accumulator
}

File diff suppressed because it is too large Load diff