sig
  type extra = ..
  type config = {
    tool_name : string;
    include_dirs : string list;
    load_path : string list;
    debug : bool;
    for_package : string option;
    extras : Migrate_parsetree_driver.extra list;
  }
  val make_config :
    tool_name:string ->
    ?include_dirs:string list ->
    ?load_path:string list ->
    ?debug:bool ->
    ?for_package:string ->
    ?extras:Migrate_parsetree_driver.extra list ->
    unit -> Migrate_parsetree_driver.config
  type cookies
  val get_cookie :
    Migrate_parsetree_driver.cookies ->
    string ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_expression option
  val set_cookie :
    Migrate_parsetree_driver.cookies ->
    string ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_expression -> unit
  val set_global_cookie :
    string ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_expression -> unit
  type 'a rewriter =
      Migrate_parsetree_driver.config ->
      Migrate_parsetree_driver.cookies ->
      'Migrate_parsetree_versions.get_mapper
    constraint 'a =
      < case : 'b; core_type : 'c; expression : 'd;
        extension_constructor : 'e; mapper : 'f; out_class_type : 'g;
        out_module_type : 'h; out_phrase : 'i; out_sig_item : 'j;
        out_type : 'k; out_type_extension : 'l; out_value : 'm; pattern : 'n;
        signature : 'o; structure : 'p; toplevel_phrase : 'q;
        type_declaration : 'r; type_extension : 's >
  val register :
    name:string ->
    ?reset_args:(unit -> unit) ->
    ?args:(Arg.key * Arg.spec * Arg.doc) list ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_driver.rewriter -> unit
  val registered_args : unit -> (Arg.key * Arg.spec * Arg.doc) list
  val reset_args : unit -> unit
  val run_as_ast_mapper : string list -> Ast_mapper.mapper
  val run_as_ppx_rewriter : unit -> 'a
  val run_main : unit -> 'a
  type some_signature =
      Sig :
        (module Migrate_parsetree_versions.OCaml_version with type Ast.Parsetree.signature = 'concrete) *
        'concrete -> Migrate_parsetree_driver.some_signature
  type some_structure =
      Str :
        (module Migrate_parsetree_versions.OCaml_version with type Ast.Parsetree.structure = 'concrete) *
        'concrete -> Migrate_parsetree_driver.some_structure
  val migrate_some_signature :
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    Migrate_parsetree_driver.some_signature ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_signature
  val migrate_some_structure :
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    Migrate_parsetree_driver.some_structure ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_structure
  val rewrite_signature :
    Migrate_parsetree_driver.config ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_signature ->
    Migrate_parsetree_driver.some_signature
  val rewrite_structure :
    Migrate_parsetree_driver.config ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.ocaml_version ->
    < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
      mapper : 'e; out_class_type : 'f; out_module_type : 'g;
      out_phrase : 'h; out_sig_item : 'i; out_type : 'j;
      out_type_extension : 'k; out_value : 'l; pattern : 'm; signature : 'n;
      structure : 'o; toplevel_phrase : 'p; type_declaration : 'q;
      type_extension : 'r >
    Migrate_parsetree_versions.get_structure ->
    Migrate_parsetree_driver.some_structure
end