Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file Config.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181[@@@ocaml.text"/*"](** Copyright 2021-2024, Kakadu. *)(** SPDX-License-Identifier: LGPL-3.0-or-later *)[@@@ocaml.text"/*"]openStdlib.Formattypemode=|Unspecified|Dump_jsonofstring|Dump_text|Fileofstring|Dirofstring|Fixofstring|UnusedDeclsofstringtypet={mutableoutfile:stringoption;mutableoutgolint:stringoption;mutableout_rdjsonl:stringoption(* Spec: https://github.com/reviewdog/reviewdog/tree/master/proto/rdf#rdjson *);mutablemode:mode(* Below options to manage file paths. Not sure are they really required *);mutableprefix_to_cut:stringoption;mutableprefix_to_add:stringoption;mutableextra_includes:stringlist;mutableverbose:bool;mutablegen_replacements:bool;enabled_lints:stringBase.Hash_set.t;all_lints:stringBase.Hash_set.t;mutableskip_level_allow:bool;mutablecheck_filesystem:bool}letopts={outfile=None;outgolint=None;out_rdjsonl=None;mode=Unspecified;prefix_to_cut=Some"_build/default/";prefix_to_add=None;extra_includes=[];verbose=false;gen_replacements=false;enabled_lints=Base.Hash_set.create(moduleBase.String);all_lints=Base.Hash_set.create(moduleBase.String);skip_level_allow=true;check_filesystem=true};;(** Modes *)letmode()=opts.modeletset_modem=opts.mode<-mletset_dump_files=set_mode(Dump_jsons)letset_dump_text()=set_modeDump_textletset_in_files=set_mode(Files)letset_in_dirs=set_mode(Dirs)letset_in_unused_declss=set_mode(UnusedDeclss)(** Other switches *)letset_fixs=set_mode(Fixs)letadd_includes=opts.extra_includes<-s::opts.extra_includesletset_out_files=opts.outfile<-Somesletset_out_golints=opts.outgolint<-Somesletset_out_rdjsonls=opts.out_rdjsonl<-Somesletset_prefix_to_cuts=opts.prefix_to_cut<-Somesletset_prefix_to_adds=opts.prefix_to_add<-Somesletincludes()=opts.extra_includesletprefix_to_cut()=opts.prefix_to_cutletprefix_to_add()=opts.prefix_to_addletis_check_filesystem()=opts.check_filesystemletenabled_lints()=opts.enabled_lintsletall_lints()=opts.all_lintsletoutfile()=opts.outfileletout_golint()=opts.outgolintletout_rdjsonl()=opts.out_rdjsonlletunset_check_filesystem()=opts.check_filesystem<-falseletverbose()=opts.verboseletgen_replacements()=opts.gen_replacementsletset_verbose()=opts.verbose<-trueletset_skip_level_allowb=opts.skip_level_allow<-bletrecover_filepathfilepath=letfilepath=matchprefix_to_cut()with|SomeprefixwhenString.starts_withfilepath~prefix->Base.String.drop_prefixfilepath(String.lengthprefix)|Someprefixwhenverbose()->Caml.Format.eprintf"Can't cut prefix '%s' from '%s'\n%!"prefixfilepath;filepath|Some_|None->filepathinletfilepath=matchprefix_to_add()with|Somes->sprintf"%s%s"sfilepath|None->filepathinfilepath;;letis_enabled()=lethash=enabled_lints()infun(moduleM:LINT.GENERAL)->letans=matchM.levelwith|LINT.Allowwhenopts.skip_level_allow->false|_->Base.Hash_set.memhashM.lint_idin(* Format.printf "is_enabled of %s = %b\n%!" M.lint_id ans; *)ans;;letparse_args()=letopenCamlinletstandard_args=["-o",Arg.Stringset_out_file,"[FILE] Set Markdown output file";"-dump",Arg.Unitset_dump_text,"Dump info about available lints to terminal";("-dump-lints",Arg.Stringset_dump_file,"[FILE] Dump information about available lints to JSON");"-dir",Arg.Stringset_in_dir,"[FILE] Set root directory of dune project";("-unused-decls",Arg.Stringset_in_unused_decls,"[FILE] Look for unused definitions");"-ogolint",Arg.Stringset_out_golint,"Set output file in golint format";"-ordjsonl",Arg.Stringset_out_rdjsonl,"Set output file in rdjsonl format";("-del-prefix",Arg.Stringset_prefix_to_cut,"Set prefix to cut from pathes in OUTPUT file");("-add-prefix",Arg.Stringset_prefix_to_add,"Set prefix to prepend to pathes in OUTPUT file");"-I",Arg.Stringadd_include,"Add extra include path for type checking";("-skip-level-allow",Arg.Boolset_skip_level_allow,"[bool] Skip lints with level = Allow");"-v",Arg.Unitset_verbose,"More verbose output";("-version",Arg.Unit(fun()->letopenBuild_info.V1inPrintf.printf"version: %s\n"(Option.fold~none:"n/a"~some:Version.to_string(version())))," print version");("-diffs-with-fixes",Arg.Unit(fun()->opts.gen_replacements<-true)," Do generate DIFFs with replacements");"-fix",Arg.Stringset_fix,"Apply all found lints available for correction"]inletextra_args=Base.Hash_set.fold~init:[("-no-check-filesystem",Arg.Unitunset_check_filesystem," Disable checking structure of a project")]~f:(funaccx->assert(x<>"");(sprintf"-no-%s"x,Arg.Unit(fun()->Base.Hash_set.removeopts.enabled_lintsx)," Disable checking for this lint")::(sprintf"-with-%s"x,Arg.Unit(fun()->Base.Hash_set.addopts.enabled_lintsx)," Enable checking for this lint")::acc)opts.all_lints|>List.sort(fun(a,_,_)(b,_,_)->String.compareab)inArg.parse(standard_args@extra_args)set_in_file"Use -dir [PATH] to check dune-based project";;