Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file entry.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(** Helper module for command line interface *)moduleCLI=struct(* this part is primarily for the CLI *)letseed=refNoneletmut_rate=refNoneletgadt=refNoneletinvalid_raterate=rate<0||rate>100letset_seeds=(seed:=Somes)letset_raterate=ifinvalid_rateratethenraise(Arg.Bad(Printf.sprintf"Invalid mutation rate: %i"rate))elsemut_rate:=Somerateletset_gadts=(gadt:=Somes)letarg_spec=[("-seed",Arg.Intset_seed," Set randomness seed for mutaml's instrumentation");("-mut-rate",Arg.Intset_rate," Set probability in % of mutating a syntax tree node (default: 50%)");("-gadt",Arg.Boolset_gadt," Allow only pattern mutations compatible with GADTs (default: true)");]end(** Helper module for environment variables *)moduleEnv=struct(* select a CLI-arg, an environment variable, or a default value -- in that order *)letselect_paramcli_argenv_varconversioninit_default=letenv_opt=Option.mapconversion(Sys.getenv_optenv_var)inmatchcli_arg,env_optwith|Somev,_->v|None,Somes->s|None,None->init_default()letparse_seeds=matchint_of_string_optswith|None->Mutaml_common.fail_and_exit(Printf.sprintf"Invalid randomness seed: %s"s)|Somes->sletparse_mut_rater=matchint_of_string_optrwith|None->Mutaml_common.fail_and_exit(Printf.sprintf"Invalid mutation rate: %s"r)|Somer->ifCLI.invalid_raterthenMutaml_common.fail_and_exit(Printf.sprintf"Invalid mutation rate: %i"r)elserletparse_gadtg=matchbool_of_string_optgwith|None->Mutaml_common.fail_and_exit(Printf.sprintf"Invalid gadt string: %s"g)|Someb->bendlet()=List.iter(fun(opt,spec,doc)->Ppxlib.Driver.add_argoptspec~doc)(Arg.alignCLI.arg_spec)letinstrumentation=letimpl_mapperctxast=Mutaml_ppx.Options.seed:=Env.select_param!CLI.seed"MUTAML_SEED"Env.parse_seedRS.make_random_seed;Mutaml_ppx.Options.mut_rate:=Env.select_param!CLI.mut_rate"MUTAML_MUT_RATE"Env.parse_mut_rate(fun()->50);Mutaml_ppx.Options.gadt:=Env.select_param!CLI.gadt"MUTAML_GADT"Env.parse_gadt(fun()->true);letmapper_obj=newMutaml_ppx.mutate_mapper(RS.init!Mutaml_ppx.Options.seed)inmapper_obj#transform_impl_filectxastinPpxlib.Driver.Instrument.V2.make~position:Beforeimpl_mapperlet()=Ppxlib.Driver.V2.register_transformation~instrument:instrumentation"mutaml"