@ -18,13 +18,8 @@ module F = Format
module CLOpt = CommandLineOption
module L = Die
type analyzer =
| CaptureOnly
| CompileOnly
| Checkers
| Crashcontext
| Linters
[ @@ deriving compare ]
type analyzer = CaptureOnly | CompileOnly | Checkers | Crashcontext | Linters
[ @@ deriving compare ]
let equal_analyzer = [ % compare . equal : analyzer ]
@ -83,7 +78,7 @@ type compilation_database_dependencies =
(* get the compilation database of the dependencies up to depth n
by [ Deps ( Some n ) ] , or all by [ Deps None ] * )
| NoDeps
[ @@ deriving compare ]
[ @@ deriving compare ]
type build_system =
| BAnalyze
@ -98,7 +93,7 @@ type build_system =
| BNdk
| BPython
| BXcode
[ @@ deriving compare ]
[ @@ deriving compare ]
let equal_build_system = [ % compare . equal : build_system ]
@ -131,8 +126,9 @@ let build_system_exe_assoc =
let build_system_of_exe_name name =
try List . Assoc . find_exn ~ equal : String . equal ( List . Assoc . inverse build_system_exe_assoc ) name
with Not_found -> L . ( die InternalError ) " Unsupported build command %s " name
try List . Assoc . find_exn ~ equal : String . equal ( List . Assoc . inverse build_system_exe_assoc ) name with
| Not_found_s _ | Caml . Not_found ->
L . ( die InternalError ) " Unsupported build command %s " name
let string_of_build_system build_system =
@ -606,7 +602,7 @@ and ( analysis_blacklist_files_containing_options
( let long = " <analyzer>- " ^ suffix in
CLOpt . mk_string_list ~ long ~ meta
~ f : ( fun _ -> raise ( Arg . Bad " invalid option " ) )
~ in_help : InferCommand . ( [( Report , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ; ( Run , manual_generic ) ]
help ) ;
List . map ~ f : ( fun ( name , analyzer ) -> ( analyzer , mk_option analyzer name ) ) string_to_analyzer
in
@ -614,11 +610,13 @@ and ( analysis_blacklist_files_containing_options
~ deprecated_suffix : [ " blacklist_files_containing " ]
~ help :
" blacklist files containing the specified string for the given analyzer (see \
$ ( b , - - analyzer ) for valid values ) " ~meta: " string "
$ ( b , - - analyzer ) for valid values ) "
~ meta : " string "
, mk_filtering_options ~ suffix : " blacklist-path-regex " ~ deprecated_suffix : [ " blacklist " ]
~ help :
" blacklist the analysis of files whose relative path matches the specified OCaml-style \
regex ( to whitelist : $ ( b , - - < analyzer > - whitelist - path - regex ) ) " ~meta: " path_regex "
regex ( to whitelist : $ ( b , - - < analyzer > - whitelist - path - regex ) ) "
~ meta : " path_regex "
, mk_filtering_options ~ suffix : " whitelist-path-regex " ~ deprecated_suffix : [ " whitelist " ] ~ help : " "
~ meta : " path_regex "
, mk_filtering_options ~ suffix : " suppress-errors " ~ deprecated_suffix : [ " suppress_errors " ]
@ -643,7 +641,7 @@ and analyzer =
()
in
CLOpt . mk_symbol_opt ~ deprecated : [ " analyzer " ] ~ long : " analyzer " ~ short : 'a'
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ; ( Run , manual_generic ) ]
{ | Specify which analyzer to run ( only one at a time is supported ) :
- $ ( b , biabduction ) : run the bi - abduction based checker only , in particular to check for memory errors
- $ ( b , checkers ) : run the default checkers , including the bi - abduction based checker for memory errors ( default )
@ -661,7 +659,8 @@ and analyzer =
CLOpt . warnf
" WARNING: The analyzer '%s' is deprecated, use the '%s' subcommand instead:@ \n \
@ \ n \
infer % s .. . " analyzer_str analyzer_str analyzer_str ;
infer % s .. . "
analyzer_str analyzer_str analyzer_str ;
x
| _ as x ->
x )
@ -692,7 +691,7 @@ and ( annotation_reachability
let mk_checker ? ( default = false ) ? ( deprecated = [] ) ~ long doc =
let var =
CLOpt . mk_bool ~ long
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
~ default ~ deprecated doc
in
all_checkers := ( var , long , doc , default ) :: ! all_checkers ;
@ -749,7 +748,7 @@ and ( annotation_reachability
let mk_only ( var , long , doc , _ ) =
let _ : bool ref =
CLOpt . mk_bool_group ~ long : ( long ^ " -only " )
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
~ f : ( fun b ->
disable_all_checkers () ;
var := b ;
@ -765,7 +764,7 @@ and ( annotation_reachability
List . iter ~ f : mk_only ! all_checkers ;
let _ default_checkers : bool ref =
CLOpt . mk_bool_group ~ long : " default-checkers "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
~ default : true
( " Default checkers: "
^ ( List . rev_filter_map
@ -807,7 +806,7 @@ and ( annotation_reachability
and annotation_reachability_custom_pairs =
CLOpt . mk_json ~ long : " annotation-reachability-custom-pairs "
~ in_help : InferCommand . ( [( Analyze , manual_java ) ] )
~ in_help : InferCommand . [( Analyze , manual_java ) ]
{ | Specify custom sources / sink for the annotation reachability checker
Example format : for custom annotations com . my . annotation . { Source1 , Source2 , Sink1 }
{ " sources " : [ " Source1 " , " Source2 " ] , " sink " : " Sink1 " } | }
@ -815,7 +814,7 @@ Example format: for custom annotations com.my.annotation.{Source1,Source2,Sink1}
and append_buck_flavors =
CLOpt . mk_string_list ~ long : " append-buck-flavors "
~ in_help : InferCommand . ( [( Capture , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_flavors ) ]
" Additional Buck flavors to append to targets discovered by the \
$ ( b , - - buck - compilation - database ) option . "
@ -831,13 +830,13 @@ and array_level =
and blacklist =
CLOpt . mk_string_opt ~ deprecated : [ " -blacklist-regex " ; " -blacklist " ] ~ long : " buck-blacklist "
~ in_help : InferCommand . ( [( Run , manual_buck_flavors ) ; ( Capture , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Run , manual_buck_flavors ) ; ( Capture , manual_buck_flavors ) ]
~ meta : " regex " " Skip analysis of files matched by the specified regular expression "
and bootclasspath =
CLOpt . mk_string_opt ~ long : " bootclasspath "
~ in_help : InferCommand . ( [( Capture , manual_java ) ] )
~ in_help : InferCommand . [( Capture , manual_java ) ]
" Specify the Java bootclasspath "
@ -846,27 +845,28 @@ and buck = CLOpt.mk_bool ~long:"buck" ""
and buck_build_args =
CLOpt . mk_string_list ~ long : " Xbuck "
~ in_help : InferCommand . ( [( Capture , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_flavors ) ]
" Pass values as command-line arguments to invocations of $(i,`buck build`) "
and buck_compilation_database_depth =
CLOpt . mk_int_opt ~ long : " buck-compilation-database-depth "
~ in_help : InferCommand . ( [( Capture , manual_buck_compilation_db ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_compilation_db ) ]
" Depth of dependencies used by the $(b,--buck-compilation-database deps) option. By default, \
all recursive dependencies are captured . " ~meta: " int "
all recursive dependencies are captured . "
~ meta : " int "
and buck_compilation_database =
CLOpt . mk_symbol_opt ~ long : " buck-compilation-database " ~ deprecated : [ " -use-compilation-database " ]
~ in_help : InferCommand . ( [( Capture , manual_buck_compilation_db ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_compilation_db ) ]
" Buck integration using the compilation database, with or without dependencies. "
~ symbols : [ ( " no-deps " , ` NoDeps ) ; ( " deps " , ` DepsTmp ) ]
and buck_out =
CLOpt . mk_path_opt ~ long : " buck-out "
~ in_help : InferCommand . ( [( Capture , manual_buck_java ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_java ) ]
~ meta : " dir " " Specify the root directory of buck-out "
@ -877,7 +877,7 @@ and capture =
and changed_files_index =
CLOpt . mk_path_opt ~ long : " changed-files-index "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ; ( Diff , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ; ( Diff , manual_generic ) ]
~ meta : " file "
" Specify the file containing the list of source files from which reactive analysis should \
start . Source files should be specified relative to project root or be absolute "
@ -890,7 +890,7 @@ and check_version =
and clang_biniou_file =
CLOpt . mk_path_opt ~ long : " clang-biniou-file "
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
~ meta : " file " " Specify a file containing the AST of the program, in biniou format "
@ -898,7 +898,7 @@ and clang_compilation_dbs = ref []
and clang_frontend_action =
CLOpt . mk_symbol_opt ~ long : " " ~ deprecated : [ " -clang-frontend-action " ]
~ in_help : InferCommand . ( [( Capture , manual_clang ) ; ( Run , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ; ( Run , manual_clang ) ]
(* doc only shows up in deprecation warnings *)
" use --capture and --linters instead " ~ symbols : clang_frontend_action_symbols
@ -927,21 +927,21 @@ and cluster =
and compilation_database =
CLOpt . mk_path_list ~ long : " compilation-database " ~ deprecated : [ " -clang-compilation-db-files " ]
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" File that contain compilation commands (can be specified multiple times) "
and compilation_database_escaped =
CLOpt . mk_path_list ~ long : " compilation-database-escaped "
~ deprecated : [ " -clang-compilation-db-files-escaped " ]
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" File that contain compilation commands where all entries are escaped for the shell, eg \
coming from Xcode ( can be specified multiple times ) "
and compute_analytics =
CLOpt . mk_bool ~ long : " compute-analytics " ~ default : false
~ in_help : InferCommand . ( [( Capture , manual_clang ) ; ( Run , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ; ( Run , manual_clang ) ]
" Emit analytics as info-level issues, like component kit line count and component kit file \
cyclomatic complexity "
@ -950,14 +950,14 @@ and compute_analytics =
If a procedure was changed beforehand , keep the changed marking . * )
and continue =
CLOpt . mk_bool ~ deprecated : [ " continue " ] ~ long : " continue "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
" Continue the capture for the reactive analysis, increasing the changed files/procedures. (If \
a procedure was changed beforehand , keep the changed marking . ) "
and current_to_previous_script =
CLOpt . mk_string_opt ~ long : " current-to-previous-script "
~ in_help : InferCommand . ( [( Diff , manual_generic ) ] )
~ in_help : InferCommand . [( Diff , manual_generic ) ]
~ meta : " shell "
" Specify a script to checkout a previous version of the project to compare against, assuming \
we are on the current version already . "
@ -965,7 +965,7 @@ and current_to_previous_script =
and cxx_infer_headers =
CLOpt . mk_bool ~ long : " cxx-infer-headers " ~ default : false
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Include C++ header models during compilation. Infer swaps some C++ headers for its own in \
order to get a better model of , eg , the standard library . This can sometimes cause \
compilation failures . "
@ -973,14 +973,14 @@ and cxx_infer_headers =
and cxx_scope_guards =
CLOpt . mk_json ~ long : " cxx-scope-guards "
~ in_help : InferCommand . ( [( Analyze , manual_clang ) ] )
~ in_help : InferCommand . [( Analyze , manual_clang ) ]
" Specify scope guard classes that can be read only by destructors without being reported as \
dead stores . "
and cxx =
CLOpt . mk_bool ~ long : " cxx " ~ default : true
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Analyze C++ methods "
@ -1012,7 +1012,7 @@ and ( bo_debug
in
let bo_debug =
CLOpt . mk_int ~ default : 0 ~ long : " bo-debug "
~ in_help : InferCommand . ( [( Analyze , manual_buffer_overrun ) ] )
~ in_help : InferCommand . [( Analyze , manual_buffer_overrun ) ]
" Debug level for buffer-overrun checker (0-4) "
and debug_level_analysis =
CLOpt . mk_int ~ long : " debug-level-analysis " ~ default : 0 ~ in_help : all_generic_manuals
@ -1030,7 +1030,7 @@ and ( bo_debug
" Show internal exceptions "
and filtering =
CLOpt . mk_bool ~ deprecated_no : [ " nf " ] ~ long : " filtering " ~ short : 'f' ~ default : true
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
" Do not show the experimental and blacklisted issue types "
and only_cheap_debug =
CLOpt . mk_bool ~ long : " only-cheap-debug " ~ default : true " Disable expensive debugging output "
@ -1041,7 +1041,7 @@ and ( bo_debug
CLOpt . mk_bool ~ long : " print-types " ~ default : false " Print types in symbolic heaps "
and keep_going =
CLOpt . mk_bool ~ deprecated_no : [ " -no-failures-allowed " ] ~ long : " keep-going "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
" Keep going when the analysis encounters a failure "
and reports_include_ml_loc =
CLOpt . mk_bool ~ deprecated : [ " with_infer_src_loc " ] ~ long : " reports-include-ml-loc "
@ -1090,32 +1090,33 @@ and ( bo_debug
CLOpt . mk_bool_group ~ long : " debug-exceptions "
" Generate lightweight debugging information: just print the internal exceptions during \
analysis ( also sets $ ( b , - - developer - mode ) , $ ( b , - - no - filtering ) , $ ( b , - - print - buckets ) , \
$ ( b , - - reports - include - ml - loc ) ) " [developer_mode; print_buckets; reports_include_ml_loc]
[ filtering; keep_going ]
$ ( b , - - reports - include - ml - loc ) ) "
[ developer_mode; print_buckets ; reports_include_ml_loc ] [ filtering; keep_going ]
and default_linters =
CLOpt . mk_bool ~ long : " default-linters "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
~ default : true " Use the default linters for the analysis. "
and frontend_tests =
CLOpt . mk_bool_group ~ long : " frontend-tests "
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Save filename.ext.test.dot with the cfg in dotty format for frontend tests (also sets \
$ ( b , - - print - types ) ) " [print_types] []
$ ( b , - - print - types ) ) "
[ print_types ] []
and models_mode =
CLOpt . mk_bool_group ~ long : " models-mode " " Mode for analyzing the models " [] [ keep_going ]
and print_logs =
CLOpt . mk_bool ~ long : " print-logs "
~ in_help :
InferCommand . (
InferCommand .
[ ( Analyze , manual_generic )
; ( Capture , manual_generic )
; ( Run , manual_generic )
; ( Report , manual_generic ) ] )
; ( Report , manual_generic ) ]
" Also log messages to stdout and stderr "
in
let linters_developer_mode =
CLOpt . mk_bool_group ~ long : " linters-developer-mode "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
" Debug mode for developing new linters. (Sets the analyzer to $(b,linters); also sets \
$ ( b , - - debug ) , $ ( b , - - debug - level - linters 2 ) , $ ( b , - - developer - mode ) , and unsets \
$ ( b , - - allowed - failures ) and $ ( b , - - default - linters ) . "
@ -1150,14 +1151,14 @@ and ( bo_debug
and dependencies =
CLOpt . mk_bool ~ deprecated : [ " dependencies " ] ~ long : " dependencies "
~ in_help : InferCommand . ( [( Capture , manual_java ) ] )
~ in_help : InferCommand . [( Capture , manual_java ) ]
" Translate all the dependencies during the capture. The classes in the given jar file will be \
translated . No sources needed . "
and differential_filter_files =
CLOpt . mk_string_opt ~ long : " differential-filter-files "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
" Specify the file containing the list of source files for which a differential report is \
desired . Source files should be specified relative to project root or be absolute "
@ -1179,7 +1180,7 @@ and () =
let issue = IssueType . from_string issue_id in
IssueType . set_enabled issue b ; issue_id )
? default ~ meta : " issue_type "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
doc
in
()
@ -1196,10 +1197,8 @@ and () =
issue types . This option provides fine - grained filtering over which types of issue should \
be reported once the checkers have run . In particular , note that disabling issue types \
does not make the corresponding checker not run . \ n \
By default , the following issue types are disabled : % s . \ n \
\ n \
See also $ ( b , - - report - issue - type ) . \ n \
"
By default , the following issue types are disabled : % s . \ n \ n \
See also $ ( b , - - report - issue - type ) . \ n "
( String . concat ~ sep : " , " disabled_issues_ids ) ) ;
mk true ~ long : " enable-issue-type " ~ deprecated : [ " enable_checks " ; " -enable-checks " ]
" Show reports coming from this type of issue. By default, all issue types are enabled except \
@ -1214,7 +1213,7 @@ and dotty_cfg_libs =
and dump_duplicate_symbols =
CLOpt . mk_bool ~ long : " dump-duplicate-symbols "
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Dump all symbols with the same name that are defined in more than one file. "
@ -1248,7 +1247,7 @@ and eradicate_verbose =
and external_java_packages =
CLOpt . mk_string_list ~ long : " external-java-packages "
~ in_help : InferCommand . ( [( Analyze , manual_java ) ] )
~ in_help : InferCommand . [( Analyze , manual_java ) ]
~ meta : " prefix "
" Specify a list of Java package prefixes for external Java packages. If set, the analysis \
will not report non - actionable warnings on those packages . "
@ -1256,7 +1255,7 @@ and external_java_packages =
and fail_on_bug =
CLOpt . mk_bool ~ deprecated : [ " -fail-on-bug " ] ~ long : " fail-on-issue " ~ default : false
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
( Printf . sprintf " Exit with error code %d if Infer found something to report "
fail_on_issue_exit_code )
@ -1269,7 +1268,7 @@ and fcp_syntax_only = CLOpt.mk_bool ~long:"fcp-syntax-only" "Skip creation of ob
and file_renamings =
CLOpt . mk_path_opt ~ long : " file-renamings "
~ in_help : InferCommand . ( [( ReportDiff , manual_generic ) ] )
~ in_help : InferCommand . [( ReportDiff , manual_generic ) ]
" JSON with a list of file renamings to use while computing differential reports "
@ -1279,7 +1278,7 @@ and filter_paths =
and filter_report =
CLOpt . mk_string_list ~ long : " filter-report "
~ in_help : InferCommand . ( [( Report , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ; ( Run , manual_generic ) ]
" Specify a filter for issues to report. If multiple filters are specified, they are applied \
in the order in which they are specified . Each filter is applied to each issue detected , and \
only issues which are accepted by all filters are reported . Each filter is of the form : \
@ -1294,7 +1293,7 @@ and filter_report =
and flavors =
CLOpt . mk_bool ~ deprecated : [ " -use-flavors " ] ~ long : " flavors "
~ in_help : InferCommand . ( [( Capture , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_flavors ) ]
" Buck integration using Buck flavors (clang only), eg $(i,`infer --flavors -- buck build \
// foo : bar # infer ` ) "
@ -1302,11 +1301,11 @@ and flavors =
and force_delete_results_dir =
CLOpt . mk_bool ~ long : " force-delete-results-dir " ~ default : false
~ in_help :
InferCommand . (
InferCommand .
[ ( Capture , manual_generic )
; ( Compile , manual_generic )
; ( Diff , manual_generic )
; ( Run , manual_generic ) ] )
; ( Run , manual_generic ) ]
" Do not refuse to delete the results directory if it doesn't look like an infer results \
directory . "
@ -1314,7 +1313,7 @@ and force_delete_results_dir =
and force_integration =
CLOpt . mk_symbol_opt ~ long : " force-integration " ~ meta : " command "
~ symbols : ( List . Assoc . inverse build_system_exe_assoc )
~ in_help : InferCommand . ( [( Capture , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Capture , manual_generic ) ; ( Run , manual_generic ) ]
( Printf . sprintf
" Proceed as if the first argument after $(b,--) was $(i,command). Possible values: %s. "
( List . map build_system_exe_assoc ~ f : ( fun ( _ , s ) -> Printf . sprintf " $(i,%s) " s )
@ -1323,7 +1322,7 @@ and force_integration =
and from_json_report =
CLOpt . mk_path_opt ~ long : " from-json-report "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ meta : " report.json "
" Load analysis results from a report file (default is to load the results from the specs \
files generated by the analysis ) . "
@ -1336,7 +1335,7 @@ and frontend_stats =
and gen_previous_build_command_script =
CLOpt . mk_string_opt ~ long : " gen-previous-build-command-script "
~ in_help : InferCommand . ( [( Diff , manual_generic ) ] )
~ in_help : InferCommand . [( Diff , manual_generic ) ]
~ meta : " shell "
" Specify a script that outputs the build command to capture in the previous version of the \
project . The script should output the command on stdout . For example \ " echo make \" . "
@ -1344,13 +1343,13 @@ and gen_previous_build_command_script =
and generated_classes =
CLOpt . mk_path_opt ~ long : " generated-classes "
~ in_help : InferCommand . ( [( Capture , manual_java ) ] )
~ in_help : InferCommand . [( Capture , manual_java ) ]
" Specify where to load the generated class files "
and headers =
CLOpt . mk_bool ~ deprecated : [ " headers " ; " hd " ] ~ deprecated_no : [ " no_headers " ; " nhd " ] ~ long : " headers "
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Analyze code in header files "
@ -1376,7 +1375,7 @@ and help_format =
and html =
CLOpt . mk_bool ~ long : " html "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Generate html report. "
@ -1398,20 +1397,20 @@ and infer_cache =
and iphoneos_target_sdk_version =
CLOpt . mk_string_opt ~ long : " iphoneos-target-sdk-version "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
" Specify the target SDK version to use for iphoneos "
and iphoneos_target_sdk_version_path_regex =
CLOpt . mk_string_list ~ long : " iphoneos-target-sdk-version-path-regex "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
" To pass a specific target SDK version to use for iphoneos in a particular path, with the \
format path : version ( can be specified multiple times ) "
and issues_fields =
CLOpt . mk_symbol_seq ~ long : " issues-fields "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ default :
[ ` Issue_field_file
; ` Issue_field_procedure
@ -1424,13 +1423,13 @@ and issues_fields =
and issues_tests =
CLOpt . mk_path_opt ~ long : " issues-tests "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ meta : " file " " Write a list of issues in a format suitable for tests to $(i,file) "
and issues_txt =
CLOpt . mk_path_opt ~ deprecated : [ " bugs_txt " ] ~ long : " issues-txt "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ meta : " file " " Write a list of issues in text format to $(i,file) (default: infer-out/bugs.txt) "
@ -1442,7 +1441,7 @@ and iterations =
and java_jar_compiler =
CLOpt . mk_path_opt ~ long : " java-jar-compiler "
~ in_help : InferCommand . ( [( Capture , manual_java ) ] )
~ in_help : InferCommand . [( Capture , manual_java ) ]
~ meta : " path " " Specify the Java compiler jar used to generate the bytecode "
@ -1450,7 +1449,7 @@ and job_id = CLOpt.mk_string_opt ~long:"job-id" "Specify the job ID of this Infe
and jobs =
CLOpt . mk_int ~ deprecated : [ " -multicore " ] ~ long : " jobs " ~ short : 'j' ~ default : ncpu
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
~ meta : " int " " Run the specified number of analysis jobs simultaneously "
@ -1464,7 +1463,7 @@ and join_cond =
and log_events =
CLOpt . mk_bool ~ long : " log-events "
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Turn on the feature that logs events in a machine-readable format "
@ -1475,21 +1474,21 @@ and log_file =
and linter =
CLOpt . mk_string_opt ~ long : " linter "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
" From the linters available, only run this one linter. (Useful together with \
$ ( b , - - linters - developer - mode ) ) "
and linters_def_file =
CLOpt . mk_path_list ~ default : [] ~ long : " linters-def-file "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
~ meta : " file " " Specify the file containing linters definition (e.g. 'linters.al') "
and linters_def_folder =
let linters_def_folder =
CLOpt . mk_path_list ~ default : [] ~ long : " linters-def-folder "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
~ meta : " dir " " Specify the folder containing linters files with extension .al "
in
let () =
@ -1502,7 +1501,7 @@ and linters_def_folder =
and linters_doc_url =
CLOpt . mk_string_list ~ long : " linters-doc-url "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
" Specify custom documentation URL for some linter that overrides the default one. Useful if \
your project has specific ways of fixing a lint error that is not true in general or public \
info . Format : linter_name : doc_url . "
@ -1510,20 +1509,20 @@ and linters_doc_url =
and linters_ignore_clang_failures =
CLOpt . mk_bool ~ long : " linters-ignore-clang-failures "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
~ default : false " Continue linting files even if some compilation fails. "
and linters_validate_syntax_only =
CLOpt . mk_bool ~ long : " linters-validate-syntax-only "
~ in_help : InferCommand . ( [( Capture , manual_clang_linters ) ] )
~ in_help : InferCommand . [( Capture , manual_clang_linters ) ]
~ default : false
" Validate syntax of AL files, then emit possible errors in JSON format to stdout "
and load_average =
CLOpt . mk_float_opt ~ long : " load-average " ~ short : 'l'
~ in_help : InferCommand . ( [( Capture , manual_generic ) ] )
~ in_help : InferCommand . [( Capture , manual_generic ) ]
~ meta : " float "
" Do not start new parallel jobs if the load average is greater than that specified (Buck and \
make only ) "
@ -1536,21 +1535,21 @@ and margin =
and max_nesting =
CLOpt . mk_int_opt ~ long : " max-nesting "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Level of nested procedure calls to show. Trace elements beyond the maximum nesting level are \
skipped . If omitted , all levels are shown . "
and merge =
CLOpt . mk_bool ~ deprecated : [ " merge " ] ~ long : " merge "
~ in_help : InferCommand . ( [( Analyze , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Analyze , manual_buck_flavors ) ]
" Merge the captured results directories specified in the dependency file "
and ml_buckets =
CLOpt . mk_symbol_seq ~ deprecated : [ " ml_buckets " ; " -ml_buckets " ] ~ long : " ml-buckets "
~ default : [ ` MLeak_cf ]
~ in_help : InferCommand . ( [( Analyze , manual_clang ) ] )
~ in_help : InferCommand . [( Analyze , manual_clang ) ]
{ | Specify the memory leak buckets to be checked in C + + :
- $ ( b , cpp ) from C + + code
| }
@ -1579,7 +1578,7 @@ and only_footprint =
and only_show =
CLOpt . mk_bool ~ long : " only-show "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Show the list of reports and exit "
@ -1626,7 +1625,7 @@ and per_procedure_parallelism =
and pmd_xml =
CLOpt . mk_bool ~ long : " pmd-xml "
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Output issues in (PMD) XML format "
@ -1637,7 +1636,7 @@ and precondition_stats =
and previous_to_current_script =
CLOpt . mk_string_opt ~ long : " previous-to-current-script "
~ in_help : InferCommand . ( [( Diff , manual_generic ) ] )
~ in_help : InferCommand . [( Diff , manual_generic ) ]
~ meta : " shell "
" Specify a script to checkout the current version of the project. The project is supposed to \
already be at that current version when running $ ( b , infer diff ) ; the script is used after \
@ -1647,7 +1646,7 @@ and previous_to_current_script =
and print_active_checkers =
CLOpt . mk_bool ~ long : " print-active-checkers "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
" Print the active checkers before starting the analysis "
@ -1658,7 +1657,7 @@ and print_builtins =
and print_log_identifier =
CLOpt . mk_bool ~ long : " print-log-identifier "
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Print the unique identifier that is common to all logged events "
@ -1669,19 +1668,19 @@ and print_using_diff =
and procedures =
CLOpt . mk_bool ~ long : " procedures "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Print functions and methods discovered by infer "
and procedures_attributes =
CLOpt . mk_bool ~ long : " procedures-attributes "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Print the attributes of each procedure in the output of $(b,--procedures) "
and procedures_definedness =
CLOpt . mk_bool ~ long : " procedures-definedness " ~ default : true
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Include procedures definedness in the output of $(b,--procedures), i.e. whether the \
procedure definition was found , or only the procedure declaration , or the procedure is an \
auto - generated Objective - C accessor "
@ -1689,7 +1688,7 @@ and procedures_definedness =
and procedures_filter =
CLOpt . mk_string_opt ~ long : " procedures-filter " ~ meta : " filter "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" With $(b,--procedures), only print functions and methods (procedures) matching the specified \
$ ( i , filter ) . A procedure filter is of the form $ ( i , path_pattern : procedure_name ) . Patterns \
are interpreted by SQLite : use $ ( b , _ ) to match any one character and $ ( b , % ) to match any \
@ -1699,7 +1698,7 @@ and procedures_filter =
and procedures_name =
CLOpt . mk_bool ~ long : " procedures-name "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Include procedures names in the output of $(b,--procedures) "
@ -1712,7 +1711,7 @@ and procedures_per_process =
and procedures_source_file =
CLOpt . mk_bool ~ long : " procedures-source-file " ~ default : true
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Include the source file in which the procedure definition or declaration was found in the \
output of $ ( b , - - procedures ) "
@ -1725,7 +1724,7 @@ and procs_csv =
and progress_bar =
CLOpt . mk_bool ~ deprecated : [ " pb " ] ~ deprecated_no : [ " no_progress_bar " ; " npb " ] ~ short : 'p'
~ long : " progress-bar " ~ default : true
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Show a progress bar "
@ -1733,41 +1732,41 @@ and project_root =
CLOpt . mk_path ~ deprecated : [ " project_root " ; " -project_root " ; " pr " ] ~ long : " project-root " ~ short : 'C'
~ default : CLOpt . init_work_dir
~ in_help :
InferCommand . (
InferCommand .
[ ( Analyze , manual_generic )
; ( Capture , manual_generic )
; ( Run , manual_generic )
; ( Report , manual_generic ) ] )
; ( Report , manual_generic ) ]
~ meta : " dir " " Specify the root directory of the project "
and quandary_endpoints =
CLOpt . mk_json ~ long : " quandary-endpoints "
~ in_help : InferCommand . ( [( Analyze , manual_quandary ) ] )
~ in_help : InferCommand . [( Analyze , manual_quandary ) ]
" Specify endpoint classes for Quandary "
and quandary_sanitizers =
CLOpt . mk_json ~ long : " quandary-sanitizers "
~ in_help : InferCommand . ( [( Analyze , manual_quandary ) ] )
~ in_help : InferCommand . [( Analyze , manual_quandary ) ]
" Specify custom sanitizers for Quandary "
and quandary_sources =
CLOpt . mk_json ~ long : " quandary-sources "
~ in_help : InferCommand . ( [( Analyze , manual_quandary ) ] )
~ in_help : InferCommand . [( Analyze , manual_quandary ) ]
" Specify custom sources for Quandary "
and quandary_sinks =
CLOpt . mk_json ~ long : " quandary-sinks "
~ in_help : InferCommand . ( [( Analyze , manual_quandary ) ] )
~ in_help : InferCommand . [( Analyze , manual_quandary ) ]
" Specify custom sinks for Quandary "
and quiet =
CLOpt . mk_bool ~ long : " quiet " ~ short : 'q' ~ default : false
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ; ( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ; ( Report , manual_generic ) ]
" Do not print specs on standard output (default: only print for the $(b,report) command) "
@ -1778,7 +1777,7 @@ and racerd_use_path_stability =
and reactive =
CLOpt . mk_bool ~ deprecated : [ " reactive " ] ~ long : " reactive " ~ short : 'r'
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
" Reactive mode: the analysis starts from the files captured since the $(i,infer) command \
started "
@ -1790,13 +1789,13 @@ and reactive_capture =
and report =
CLOpt . mk_bool ~ long : " report " ~ default : true
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ; ( Run , manual_generic ) ]
" Run the reporting phase once the analysis has completed "
and report_current =
CLOpt . mk_path_opt ~ long : " report-current "
~ in_help : InferCommand . ( [( ReportDiff , manual_generic ) ] )
~ in_help : InferCommand . [( ReportDiff , manual_generic ) ]
" report of the latest revision "
@ -1804,7 +1803,7 @@ and report_custom_error = CLOpt.mk_bool ~long:"report-custom-error" ""
and report_formatter =
CLOpt . mk_symbol ~ long : " report-formatter "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ default : ` Phabricator_formatter
~ symbols : [ ( " none " , ` No_formatter ) ; ( " phabricator " , ` Phabricator_formatter ) ]
~ eq : PolyVariantEqual . ( = ) " Which formatter to use when emitting the report "
@ -1812,7 +1811,7 @@ and report_formatter =
and report_hook =
CLOpt . mk_string_opt ~ long : " report-hook "
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ; ( Run , manual_generic ) ]
~ default : ( lib_dir ^/ " python " ^/ " report.py " )
~ meta : " script "
" Specify a script to be executed after the analysis results are written. This script will be \
@ -1822,13 +1821,13 @@ and report_hook =
and report_previous =
CLOpt . mk_path_opt ~ long : " report-previous "
~ in_help : InferCommand . ( [( ReportDiff , manual_generic ) ] )
~ in_help : InferCommand . [( ReportDiff , manual_generic ) ]
" Report of the base revision to use for comparison "
and rest =
CLOpt . mk_rest_actions
~ in_help : InferCommand . ( [( Capture , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Capture , manual_generic ) ; ( Run , manual_generic ) ]
" Stop argument processing, use remaining arguments as a build command " ~ usage : exe_usage
( fun build_exe ->
match Filename . basename build_exe with " java " | " javac " -> CLOpt . Javac | _ -> CLOpt . NoParse
@ -1839,12 +1838,12 @@ and results_dir =
CLOpt . mk_path ~ deprecated : [ " results_dir " ; " -out " ] ~ long : " results-dir " ~ short : 'o'
~ default : ( CLOpt . init_work_dir ^/ " infer-out " )
~ in_help :
InferCommand . (
InferCommand .
[ ( Analyze , manual_generic )
; ( Capture , manual_generic )
; ( Explore , manual_generic )
; ( Run , manual_generic )
; ( Report , manual_generic ) ] )
; ( Report , manual_generic ) ]
~ meta : " dir " " Write results and internal files in the specified directory "
@ -1855,45 +1854,45 @@ and seconds_per_iteration =
and select =
CLOpt . mk_int_opt ~ long : " select " ~ meta : " N "
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" Select bug number $(i,N). If omitted, prompt for input. "
and siof_safe_methods =
CLOpt . mk_string_list ~ long : " siof-safe-methods "
~ in_help : InferCommand . ( [( Analyze , manual_siof ) ] )
~ in_help : InferCommand . [( Analyze , manual_siof ) ]
" Methods that are SIOF-safe; \" foo::bar \" will match \" foo::bar() \" , \" foo<int>::bar() \" , \
etc . ( can be specified multiple times ) "
and skip_analysis_in_path =
CLOpt . mk_string_list ~ deprecated : [ " -skip-clang-analysis-in-path " ] ~ long : " skip-analysis-in-path "
~ in_help : InferCommand . ( [( Capture , manual_generic ) ; ( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Capture , manual_generic ) ; ( Run , manual_generic ) ]
~ meta : " path_prefix_OCaml_regex "
" Ignore files whose path matches the given prefix (can be specified multiple times) "
and skip_analysis_in_path_skips_compilation =
CLOpt . mk_bool ~ long : " skip-analysis-in-path-skips-compilation "
~ in_help : InferCommand . ( [( Report , manual_generic ) ] )
~ in_help : InferCommand . [( Report , manual_generic ) ]
~ default : false " Whether paths in --skip-analysis-in-path should be compiled or not "
and skip_duplicated_types =
CLOpt . mk_bool ~ long : " skip-duplicated-types " ~ default : true
~ in_help : InferCommand . ( [( ReportDiff , manual_generic ) ] )
~ in_help : InferCommand . [( ReportDiff , manual_generic ) ]
" Skip fixed-then-introduced duplicated types while computing differential reports "
and skip_translation_headers =
CLOpt . mk_string_list ~ deprecated : [ " skip_translation_headers " ] ~ long : " skip-translation-headers "
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
~ meta : " path_prefix " " Ignore headers whose path matches the given prefix "
and source_preview =
CLOpt . mk_bool ~ long : " source-preview " ~ default : true
~ in_help : InferCommand . ( [( Explore , manual_generic ) ] )
~ in_help : InferCommand . [( Explore , manual_generic ) ]
" print code excerpts around trace elements "
@ -1931,7 +1930,7 @@ and specs_library =
~ f : ( fun file ->
specs_library := read_specs_dir_list_file file @ ! specs_library ;
" " )
~ in_help : InferCommand . ( [( Analyze , manual_generic ) ] )
~ in_help : InferCommand . [( Analyze , manual_generic ) ]
~ meta : " file " " "
in
specs_library
@ -1952,7 +1951,7 @@ and sqlite_vfs =
and stacktrace =
CLOpt . mk_path_opt ~ deprecated : [ " st " ] ~ long : " stacktrace "
~ in_help : InferCommand . ( [( Analyze , manual_crashcontext ) ] )
~ in_help : InferCommand . [( Analyze , manual_crashcontext ) ]
~ meta : " file "
" File path containing a json-encoded Java crash stacktrace. Used to guide the analysis (only \
with ' - a crashcontext' ) . See tests / codetoanalyze / java / crashcontext /* . json for examples of \
@ -1961,7 +1960,7 @@ and stacktrace =
and stacktraces_dir =
CLOpt . mk_path_opt ~ long : " stacktraces-dir "
~ in_help : InferCommand . ( [( Analyze , manual_crashcontext ) ] )
~ in_help : InferCommand . [( Analyze , manual_crashcontext ) ]
~ meta : " dir "
" Directory path containing multiple json-encoded Java crash stacktraces. Used to guide the \
analysis ( only with ' - a crashcontext' ) . See tests / codetoanalyze / java / crashcontext /* . json \
@ -1996,7 +1995,7 @@ and testing_mode =
and threadsafe_aliases =
CLOpt . mk_json ~ long : " threadsafe-aliases "
~ in_help : InferCommand . ( [( Analyze , manual_racerd ) ] )
~ in_help : InferCommand . [( Analyze , manual_racerd ) ]
" Specify custom annotations that should be considered aliases of @ThreadSafe "
@ -2044,17 +2043,17 @@ and uninit_interproc =
and unsafe_malloc =
CLOpt . mk_bool ~ long : " unsafe-malloc "
~ in_help : InferCommand . ( [( Analyze , manual_clang ) ] )
~ in_help : InferCommand . [( Analyze , manual_clang ) ]
" Assume that malloc(3) never returns null. "
and version =
let var = ref ` None in
CLOpt . mk_set var ` Full ~ deprecated : [ " version " ] ~ long : " version "
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Print version information and exit " ;
CLOpt . mk_set var ` Json ~ deprecated : [ " version_json " ] ~ long : " version-json "
~ in_help : InferCommand . ( [( Run , manual_generic ) ] )
~ in_help : InferCommand . [( Run , manual_generic ) ]
" Print version information in json format and exit " ;
CLOpt . mk_set var ` Vcs ~ long : " version-vcs " " Print version control system commit and exit " ;
var
@ -2076,13 +2075,13 @@ and worklist_mode =
and xcode_developer_dir =
CLOpt . mk_path_opt ~ long : " xcode-developer-dir "
~ in_help : InferCommand . ( [( Capture , manual_buck_flavors ) ] )
~ in_help : InferCommand . [( Capture , manual_buck_flavors ) ]
~ meta : " XCODE_DEVELOPER_DIR " " Specify the path to Xcode developer directory "
and xcpretty =
CLOpt . mk_bool ~ long : " xcpretty " ~ default : false
~ in_help : InferCommand . ( [( Capture , manual_clang ) ] )
~ in_help : InferCommand . [( Capture , manual_clang ) ]
" Infer will use xcpretty together with xcodebuild to analyze an iOS app. xcpretty just needs \
to be in the path , infer command is still just $ ( i , ` infer - - < xcodebuild command > ` ) . "
@ -2258,9 +2257,9 @@ let post_parsing_initialization command_opt =
in
if is_none ! symops_per_iteration then symops_per_iteration := symops_timeout ;
if is_none ! seconds_per_iteration then seconds_per_iteration := seconds_timeout ;
clang_compilation_dbs
:= List . rev_map ~ f : ( fun x -> ` Raw x ) ! compilation_database
| > List . rev_map_append ~ f : ( fun x -> ` Escaped x ) ! compilation_database_escaped ;
clang_compilation_dbs :=
List . rev_map ~ f : ( fun x -> ` Raw x ) ! compilation_database
| > List . rev_map_append ~ f : ( fun x -> ` Escaped x ) ! compilation_database_escaped ;
(* set analyzer mode to linters in linters developer mode *)
if ! linters_developer_mode then linters := true ;
if ! default_linters then linters_def_file := linters_def_default_file :: ! linters_def_file ;
@ -2305,7 +2304,8 @@ let process_iphoneos_target_sdk_version_path_regex args =
| None ->
L . ( die UserError )
" Incorrect format for the option iphoneos-target-sdk_version-path-regex. The correct \
format is path : version but got % s " arg
format is path : version but got % s "
arg
in
List . map ~ f : process_iphoneos_target_sdk_version_path_regex args
@ -2320,7 +2320,8 @@ let process_linters_doc_url args =
| None ->
L . ( die UserError )
" Incorrect format for the option linters-doc-url. The correct format is linter:doc_url \
but got % s " arg
but got % s "
arg
in
List . map ~ f : linters_doc_url args
@ -2825,7 +2826,7 @@ let dynamic_dispatch =
a call to unknown code and true triggers lazy dynamic dispatch . The latter mode follows the \
JVM semantics and creates procedure descriptions during symbolic execution using the type \
information found in the abstract state "
~ in_help : InferCommand . ( [( Analyze , manual_java ) ] )
~ in_help : InferCommand . [( Analyze , manual_java ) ]
let dynamic_dispatch = ! dynamic_dispatch