Module Ppxlib.Ast_traverse

This module provides AST traversal classes, such as maps, iterations, folds, etc. on the Parsetree types.

For a detailed explanation on this module, refer to the relevant part of the manual.

API

To use these classes, inherit from them and override the methods corresponding to the types from Parsetree you want to process. For instance to collect all the string constants in a structure:

let string_constants_of =
  object
    inherit [string list] Ast_traverse.fold as super

    method! expression e acc =
      let acc = super#expression e acc in
      match e.pexp_desc with
      | Pexp_constant (Const_string (s, _)) -> s :: acc
      | _ -> acc

    method! pattern p acc =
      let acc = super#pattern p acc in
      match p.ppat_desc with
      | Ppat_constant (Const_string (s, _)) -> s :: acc
      | _ -> acc
  end

let string_constants_of_structure = string_constants_of#structure
class map : object ... end
class iter : object ... end
class 'acc fold : object ... end
class 'acc fold_map : object ... end
class 'ctx map_with_context : object ... end
val do_not_enter_value_binding : (Astlib.Ast_500.Parsetree.value_binding, unit) Attribute.t
val do_not_enter_value_description : (Astlib.Ast_500.Parsetree.value_description, unit) Attribute.t
val do_not_enter_module_binding : (Astlib.Ast_500.Parsetree.module_binding, unit) Attribute.t
val do_not_enter_module_declaration : (Astlib.Ast_500.Parsetree.module_declaration, unit) Attribute.t
val do_not_enter_module_type_declaration : (Astlib.Ast_500.Parsetree.module_type_declaration, unit) Attribute.t
val do_not_enter_let_module : (Astlib.Ast_500.Parsetree.expression, unit) Attribute.t
class virtual 'res lift : object ... end
class virtual ['ctx, 'res] lift_map_with_context : object ... end
class sexp_of : object ... end
val sexp_of : sexp_of