[kill -a][4/4] kill `Config.analyzer`, deprecate `--analyzer`

Summary:
Keep `--analyzer` around for now for integrations that depend on it.

Also deprecate the `--infer-blacklist-path-regex`,
`--checkers-blacklist-path-regex`, etc. in favour of
`--report-blacklist-path-regex` which more accurately represents what these do
as of now.

Rely on the current subcommand instead of the analyzer where needed, as most of
the code already does.

Reviewed By: jeremydubreil

Differential Revision: D9942809

fbshipit-source-id: 9380e6036
master
Jules Villard 6 years ago committed by Facebook Github Bot
parent 16dd1ddfaf
commit bb037c39ee

@ -13,22 +13,6 @@ DESCRIPTION
OPTIONS OPTIONS
--analyzer,-a { checkers | infer | capture | compile | crashcontext |
linters }
Specify which analyzer to run (only one at a time is supported):
- biabduction: run the bi-abduction based checker only, in
particular to check for memory errors
- checkers: run the default checkers, including the bi-abduction
based checker for memory errors (default)
- infer: alias for biabduction
- linters: run linters based on the ast only (clang only,
activated by default)
- capture: similar to specifying the capture subcommand
(DEPRECATED)
- compile: similar to specifying the compile subcommand
(DEPRECATED)
- crashcontext: experimental (see --crashcontext)
--no-annotation-reachability --no-annotation-reachability
Deactivates: the annotation reachability checker. Given a pair of Deactivates: the annotation reachability checker. Given a pair of
source and sink annotation, e.g. @PerformanceCritical and source and sink annotation, e.g. @PerformanceCritical and

@ -54,35 +54,6 @@ OPTIONS
supported options. The following is a list of all the supported supported options. The following is a list of all the supported
options (see also --help-full for options reserved for internal use). options (see also --help-full for options reserved for internal use).
--analyzer,-a { checkers | infer | capture | compile | crashcontext |
linters }
Specify which analyzer to run (only one at a time is supported):
- biabduction: run the bi-abduction based checker only, in
particular to check for memory errors
- checkers: run the default checkers, including the bi-abduction
based checker for memory errors (default)
- infer: alias for biabduction
- linters: run linters based on the ast only (clang only,
activated by default)
- capture: similar to specifying the capture subcommand
(DEPRECATED)
- compile: similar to specifying the compile subcommand
(DEPRECATED)
- crashcontext: experimental (see --crashcontext)
See also infer-analyze(1) and infer-run(1).
--<analyzer>-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values) See also infer-report(1) and infer-run(1).
--<analyzer>-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex) See also infer-report(1) and infer-run(1).
--<analyzer>-suppress-errors +error_name
do not report a type of errors See also infer-report(1) and infer-run(1).
--no-annotation-reachability --no-annotation-reachability
Deactivates: the annotation reachability checker. Given a pair of Deactivates: the annotation reachability checker. Given a pair of
source and sink annotation, e.g. @PerformanceCritical and source and sink annotation, e.g. @PerformanceCritical and
@ -726,6 +697,15 @@ OPTIONS
Deactivates: Run the reporting phase once the analysis has Deactivates: Run the reporting phase once the analysis has
completed (Conversely: --report) See also infer-analyze(1) and infer-run(1). completed (Conversely: --report) See also infer-analyze(1) and infer-run(1).
--report-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values) See also infer-report(1) and infer-run(1).
--report-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex) See also infer-report(1) and infer-run(1).
--report-current path --report-current path
report of the latest revision See also infer-reportdiff(1). report of the latest revision See also infer-reportdiff(1).
@ -742,6 +722,9 @@ OPTIONS
--report-previous path --report-previous path
Report of the base revision to use for comparison See also infer-reportdiff(1). Report of the base revision to use for comparison See also infer-reportdiff(1).
--report-suppress-errors +error_name
do not report a type of errors See also infer-report(1) and infer-run(1).
--results-dir,-o dir --results-dir,-o dir
Write results and internal files in the specified directory Write results and internal files in the specified directory
(default: ./infer-out) See also infer-analyze(1), infer-capture(1), infer-explore(1), (default: ./infer-out) See also infer-analyze(1), infer-capture(1), infer-explore(1),
@ -921,21 +904,6 @@ INTERNAL OPTIONS
Activates: Issue a warning when the analysis stops (Conversely: Activates: Issue a warning when the analysis stops (Conversely:
--no-analysis-stops) --no-analysis-stops)
--<analyzer>-blacklist-files-containing-reset
Set --<analyzer>-blacklist-files-containing to the empty list.
--<analyzer>-blacklist-path-regex-reset
Set --<analyzer>-blacklist-path-regex to the empty list.
--analyzer-reset
Cancel the effect of --analyzer.
--<analyzer>-suppress-errors-reset
Set --<analyzer>-suppress-errors to the empty list.
--<analyzer>-whitelist-path-regex-reset
Set --<analyzer>-whitelist-path-regex to the empty list.
--append-buck-flavors-reset --append-buck-flavors-reset
Set --append-buck-flavors to the empty list. Set --append-buck-flavors to the empty list.
@ -976,21 +944,9 @@ INTERNAL OPTIONS
Deactivates: capture and translate source files into infer's Deactivates: capture and translate source files into infer's
intermediate language for analysis (Conversely: --capture) intermediate language for analysis (Conversely: --capture)
--capture-blacklist-files-containing-reset
Set --capture-blacklist-files-containing to the empty list.
--capture-blacklist-path-regex-reset
Set --capture-blacklist-path-regex to the empty list.
--capture-blacklist-reset --capture-blacklist-reset
Cancel the effect of --capture-blacklist. Cancel the effect of --capture-blacklist.
--capture-suppress-errors-reset
Set --capture-suppress-errors to the empty list.
--capture-whitelist-path-regex-reset
Set --capture-whitelist-path-regex to the empty list.
--changed-files-index-reset --changed-files-index-reset
Cancel the effect of --changed-files-index. Cancel the effect of --changed-files-index.
@ -1000,18 +956,6 @@ INTERNAL OPTIONS
--check-version-reset --check-version-reset
Cancel the effect of --check-version. Cancel the effect of --check-version.
--checkers-blacklist-files-containing-reset
Set --checkers-blacklist-files-containing to the empty list.
--checkers-blacklist-path-regex-reset
Set --checkers-blacklist-path-regex to the empty list.
--checkers-suppress-errors-reset
Set --checkers-suppress-errors to the empty list.
--checkers-whitelist-path-regex-reset
Set --checkers-whitelist-path-regex to the empty list.
--clang-biniou-file-reset --clang-biniou-file-reset
Cancel the effect of --clang-biniou-file. Cancel the effect of --clang-biniou-file.
@ -1046,18 +990,6 @@ INTERNAL OPTIONS
--compilation-database-reset --compilation-database-reset
Set --compilation-database to the empty list. Set --compilation-database to the empty list.
--compile-blacklist-files-containing-reset
Set --compile-blacklist-files-containing to the empty list.
--compile-blacklist-path-regex-reset
Set --compile-blacklist-path-regex to the empty list.
--compile-suppress-errors-reset
Set --compile-suppress-errors to the empty list.
--compile-whitelist-path-regex-reset
Set --compile-whitelist-path-regex to the empty list.
--costs-current-reset --costs-current-reset
Cancel the effect of --costs-current. Cancel the effect of --costs-current.
@ -1067,18 +999,6 @@ INTERNAL OPTIONS
--coverage --coverage
analysis mode to maximize coverage (can take longer) analysis mode to maximize coverage (can take longer)
--crashcontext-blacklist-files-containing-reset
Set --crashcontext-blacklist-files-containing to the empty list.
--crashcontext-blacklist-path-regex-reset
Set --crashcontext-blacklist-path-regex to the empty list.
--crashcontext-suppress-errors-reset
Set --crashcontext-suppress-errors to the empty list.
--crashcontext-whitelist-path-regex-reset
Set --crashcontext-whitelist-path-regex to the empty list.
--current-to-previous-script-reset --current-to-previous-script-reset
Cancel the effect of --current-to-previous-script. Cancel the effect of --current-to-previous-script.
@ -1205,18 +1125,6 @@ INTERNAL OPTIONS
Deactivates: Ignore traces whose length is at most 1 (Conversely: Deactivates: Ignore traces whose length is at most 1 (Conversely:
--ignore-trivial-traces) --ignore-trivial-traces)
--infer-blacklist-files-containing-reset
Set --infer-blacklist-files-containing to the empty list.
--infer-blacklist-path-regex-reset
Set --infer-blacklist-path-regex to the empty list.
--infer-suppress-errors-reset
Set --infer-suppress-errors to the empty list.
--infer-whitelist-path-regex-reset
Set --infer-whitelist-path-regex to the empty list.
--invariant-by-default --invariant-by-default
Activates: [Cost]Consider functions to be invariant by default Activates: [Cost]Consider functions to be invariant by default
(Conversely: --no-invariant-by-default) (Conversely: --no-invariant-by-default)
@ -1256,12 +1164,6 @@ INTERNAL OPTIONS
--linter-reset --linter-reset
Cancel the effect of --linter. Cancel the effect of --linter.
--linters-blacklist-files-containing-reset
Set --linters-blacklist-files-containing to the empty list.
--linters-blacklist-path-regex-reset
Set --linters-blacklist-path-regex to the empty list.
--linters-def-file-reset --linters-def-file-reset
Set --linters-def-file to the empty list. Set --linters-def-file to the empty list.
@ -1271,12 +1173,6 @@ INTERNAL OPTIONS
--linters-doc-url-reset --linters-doc-url-reset
Set --linters-doc-url to the empty list. Set --linters-doc-url to the empty list.
--linters-suppress-errors-reset
Set --linters-suppress-errors to the empty list.
--linters-whitelist-path-regex-reset
Set --linters-whitelist-path-regex to the empty list.
--load-average-reset --load-average-reset
Cancel the effect of --load-average. Cancel the effect of --load-average.
@ -1404,6 +1300,12 @@ INTERNAL OPTIONS
--reanalyze --reanalyze
Activates: Rerun the analysis (Conversely: --no-reanalyze) Activates: Rerun the analysis (Conversely: --no-reanalyze)
--report-blacklist-files-containing-reset
Set --report-blacklist-files-containing to the empty list.
--report-blacklist-path-regex-reset
Set --report-blacklist-path-regex to the empty list.
--report-current-reset --report-current-reset
Cancel the effect of --report-current. Cancel the effect of --report-current.
@ -1413,6 +1315,12 @@ INTERNAL OPTIONS
--report-previous-reset --report-previous-reset
Cancel the effect of --report-previous. Cancel the effect of --report-previous.
--report-suppress-errors-reset
Set --report-suppress-errors to the empty list.
--report-whitelist-path-regex-reset
Set --report-whitelist-path-regex to the empty list.
--reports-include-ml-loc --reports-include-ml-loc
Activates: Include the location in the Infer source code from Activates: Include the location in the Infer source code from
where reports are generated (Conversely: where reports are generated (Conversely:

@ -15,18 +15,6 @@ DESCRIPTION
OPTIONS OPTIONS
--<analyzer>-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values)
--<analyzer>-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex)
--<analyzer>-suppress-errors +error_name
do not report a type of errors
--debug,-g --debug,-g
Activates: Debug mode (also sets --debug-level 2, Activates: Debug mode (also sets --debug-level 2,
--developer-mode, --no-filtering, --print-buckets, --print-types, --developer-mode, --no-filtering, --print-buckets, --print-types,
@ -149,10 +137,22 @@ OPTIONS
Activates: Do not print specs on standard output (default: only Activates: Do not print specs on standard output (default: only
print for the report command) (Conversely: --no-quiet | -Q) print for the report command) (Conversely: --no-quiet | -Q)
--report-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values)
--report-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex)
--report-formatter { none | phabricator } --report-formatter { none | phabricator }
Which formatter to use when emitting the report (default: Which formatter to use when emitting the report (default:
phabricator) phabricator)
--report-suppress-errors +error_name
do not report a type of errors
--results-dir,-o dir --results-dir,-o dir
Write results and internal files in the specified directory Write results and internal files in the specified directory
(default: ./infer-out) (default: ./infer-out)

@ -16,34 +16,6 @@ DESCRIPTION
OPTIONS OPTIONS
--analyzer,-a { checkers | infer | capture | compile | crashcontext |
linters }
Specify which analyzer to run (only one at a time is supported):
- biabduction: run the bi-abduction based checker only, in
particular to check for memory errors
- checkers: run the default checkers, including the bi-abduction
based checker for memory errors (default)
- infer: alias for biabduction
- linters: run linters based on the ast only (clang only,
activated by default)
- capture: similar to specifying the capture subcommand
(DEPRECATED)
- compile: similar to specifying the compile subcommand
(DEPRECATED)
- crashcontext: experimental (see --crashcontext)
--<analyzer>-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values)
--<analyzer>-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex)
--<analyzer>-suppress-errors +error_name
do not report a type of errors
--debug,-g --debug,-g
Activates: Debug mode (also sets --debug-level 2, Activates: Debug mode (also sets --debug-level 2,
--developer-mode, --no-filtering, --print-buckets, --print-types, --developer-mode, --no-filtering, --print-buckets, --print-types,
@ -139,12 +111,24 @@ OPTIONS
Deactivates: Run the reporting phase once the analysis has Deactivates: Run the reporting phase once the analysis has
completed (Conversely: --report) completed (Conversely: --report)
--report-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values)
--report-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex)
--report-hook script --report-hook script
Specify a script to be executed after the analysis results are Specify a script to be executed after the analysis results are
written. This script will be passed, --issues-json, --issues-txt, written. This script will be passed, --issues-json, --issues-txt,
--issues-xml, --project-root, and --results-dir. (default: <infer --issues-xml, --project-root, and --results-dir. (default: <infer
installation directory>/lib/python/report.py) installation directory>/lib/python/report.py)
--report-suppress-errors +error_name
do not report a type of errors
--results-dir,-o dir --results-dir,-o dir
Write results and internal files in the specified directory Write results and internal files in the specified directory
(default: ./infer-out) (default: ./infer-out)

@ -54,35 +54,6 @@ OPTIONS
supported options. The following is a list of all the supported supported options. The following is a list of all the supported
options (see also --help-full for options reserved for internal use). options (see also --help-full for options reserved for internal use).
--analyzer,-a { checkers | infer | capture | compile | crashcontext |
linters }
Specify which analyzer to run (only one at a time is supported):
- biabduction: run the bi-abduction based checker only, in
particular to check for memory errors
- checkers: run the default checkers, including the bi-abduction
based checker for memory errors (default)
- infer: alias for biabduction
- linters: run linters based on the ast only (clang only,
activated by default)
- capture: similar to specifying the capture subcommand
(DEPRECATED)
- compile: similar to specifying the compile subcommand
(DEPRECATED)
- crashcontext: experimental (see --crashcontext)
See also infer-analyze(1) and infer-run(1).
--<analyzer>-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values) See also infer-report(1) and infer-run(1).
--<analyzer>-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex) See also infer-report(1) and infer-run(1).
--<analyzer>-suppress-errors +error_name
do not report a type of errors See also infer-report(1) and infer-run(1).
--no-annotation-reachability --no-annotation-reachability
Deactivates: the annotation reachability checker. Given a pair of Deactivates: the annotation reachability checker. Given a pair of
source and sink annotation, e.g. @PerformanceCritical and source and sink annotation, e.g. @PerformanceCritical and
@ -726,6 +697,15 @@ OPTIONS
Deactivates: Run the reporting phase once the analysis has Deactivates: Run the reporting phase once the analysis has
completed (Conversely: --report) See also infer-analyze(1) and infer-run(1). completed (Conversely: --report) See also infer-analyze(1) and infer-run(1).
--report-blacklist-files-containing +string
blacklist files containing the specified string for the given
analyzer (see --analyzer for valid values) See also infer-report(1) and infer-run(1).
--report-blacklist-path-regex +path_regex
blacklist the analysis of files whose relative path matches the
specified OCaml-style regex (to whitelist:
--<analyzer>-whitelist-path-regex) See also infer-report(1) and infer-run(1).
--report-current path --report-current path
report of the latest revision See also infer-reportdiff(1). report of the latest revision See also infer-reportdiff(1).
@ -742,6 +722,9 @@ OPTIONS
--report-previous path --report-previous path
Report of the base revision to use for comparison See also infer-reportdiff(1). Report of the base revision to use for comparison See also infer-reportdiff(1).
--report-suppress-errors +error_name
do not report a type of errors See also infer-report(1) and infer-run(1).
--results-dir,-o dir --results-dir,-o dir
Write results and internal files in the specified directory Write results and internal files in the specified directory
(default: ./infer-out) See also infer-analyze(1), infer-capture(1), infer-explore(1), (default: ./infer-out) See also infer-analyze(1), infer-capture(1), infer-explore(1),

@ -1030,7 +1030,7 @@ let finalize_and_close_files format_list_by_kind (stats : Stats.t) =
let pp_summary_and_issues formats_by_report_kind issue_formats = let pp_summary_and_issues formats_by_report_kind issue_formats =
let stats = Stats.create () in let stats = Stats.create () in
let linereader = Printer.LineReader.create () in let linereader = Printer.LineReader.create () in
let filters = Inferconfig.create_filters Config.analyzer in let filters = Inferconfig.create_filters () in
let iterate_summaries = get_summary_iterator () in let iterate_summaries = get_summary_iterator () in
let all_issues = ref [] in let all_issues = ref [] in
iterate_summaries (fun summary -> iterate_summaries (fun summary ->

@ -35,7 +35,7 @@ val crashcontext_epilogue : in_buck_mode:bool -> unit
Runs crashcontext epilogue code, which takes the per-method summaries Runs crashcontext epilogue code, which takes the per-method summaries
produced by crashcontext related analysis (future: analyses) and stitches produced by crashcontext related analysis (future: analyses) and stitches
them together into a final crashcontext.json output file. them together into a final crashcontext.json output file.
This code should run after all checkers when running with '-a crashcontext'. This code should run after all checkers when running with '--crashcontext'.
When running with buck, summaries are stitched across multiple buck targets, When running with buck, summaries are stitched across multiple buck targets,
so this runs at the end of the parent buck infer process only. so this runs at the end of the parent buck infer process only.
TODO: Similar integration with build systems other than buck. TODO: Similar integration with build systems other than buck.

@ -288,11 +288,11 @@ let skip_implementation_matcher =
FileOrProcMatcher.load_matcher (patterns_of_json_with_key Config.patterns_skip_implementation) FileOrProcMatcher.load_matcher (patterns_of_json_with_key Config.patterns_skip_implementation)
let load_filters analyzer = let load_filters () =
{ whitelist= Config.analysis_path_regex_whitelist analyzer { whitelist= Config.analysis_path_regex_whitelist
; blacklist= Config.analysis_path_regex_blacklist analyzer ; blacklist= Config.analysis_path_regex_blacklist
; blacklist_files_containing= Config.analysis_blacklist_files_containing analyzer ; blacklist_files_containing= Config.analysis_blacklist_files_containing
; suppress_errors= Config.analysis_suppress_errors analyzer } ; suppress_errors= Config.analysis_suppress_errors }
let filters_from_inferconfig inferconfig : filters = let filters_from_inferconfig inferconfig : filters =
@ -321,32 +321,20 @@ let filters_from_inferconfig inferconfig : filters =
{path_filter; error_filter; proc_filter= default_proc_filter} {path_filter; error_filter; proc_filter= default_proc_filter}
(* Create filters based on .inferconfig *) (* Create filters based on configuration options *)
let create_filters analyzer = let create_filters () =
if not Config.filter_paths then do_not_filter if not Config.filter_paths then do_not_filter else filters_from_inferconfig (load_filters ())
else filters_from_inferconfig (load_filters analyzer)
(* This function loads and list the path that are being filtered by the analyzer. The results *) (** This function loads and list the path that are being filtered by the analyzer. The results are
(* are of the form: path/to/file.java -> {infer, checkers} meaning that analysis results will *) of the form: path/to/file.java -> true/false meaning that analysis results will be reported on
(* be reported on path/to/file.java both for infer and for the checkers *) path/to/file.java or not *)
let test () = let test () =
let filters = let filters = create_filters () in
List.map let matches path = filters.path_filter path in
~f:(fun (name, analyzer) -> (name, analyzer, create_filters analyzer)) Sys.getcwd ()
Config.string_to_analyzer |> Utils.directory_iter (fun path ->
in if DB.is_source_file path then
let matching_analyzers path = let source_file = SourceFile.from_abs_path path in
List.fold let matching = matches source_file in
~f:(fun l (n, a, f) -> if f.path_filter path then (n, a) :: l else l) L.result "%s -> %b@." (SourceFile.to_rel_path source_file) matching )
~init:[] filters
in
Utils.directory_iter
(fun path ->
if DB.is_source_file path then
let source_file = SourceFile.from_abs_path path in
let matching = matching_analyzers source_file in
if matching <> [] then
let matching_s = String.concat ~sep:", " (List.map ~f:fst matching) in
L.result "%s -> {%s}@." (SourceFile.to_rel_path source_file) matching_s )
(Sys.getcwd ())

@ -18,7 +18,7 @@ type proc_filter = Typ.Procname.t -> bool
type filters = {path_filter: path_filter; error_filter: error_filter; proc_filter: proc_filter} type filters = {path_filter: path_filter; error_filter: error_filter; proc_filter: proc_filter}
val create_filters : Config.analyzer -> filters val create_filters : unit -> filters
(** Create filters based on the config file *) (** Create filters based on the config file *)
val never_return_null_matcher : SourceFile.t -> Typ.Procname.t -> bool val never_return_null_matcher : SourceFile.t -> Typ.Procname.t -> bool

@ -16,22 +16,12 @@ module F = Format
module CLOpt = CommandLineOption module CLOpt = CommandLineOption
module L = Die module L = Die
type analyzer = CaptureOnly | CompileOnly | Checkers | Crashcontext | Linters type analyzer = Checkers | Crashcontext | Linters [@@deriving compare]
[@@deriving compare]
let equal_analyzer = [%compare.equal: analyzer] let equal_analyzer = [%compare.equal: analyzer]
let string_to_analyzer = let string_to_analyzer =
[ ("checkers", Checkers) [("checkers", Checkers); ("crashcontext", Crashcontext); ("linters", Linters)]
; ("infer", Checkers)
; ("capture", CaptureOnly)
; ("compile", CompileOnly)
; ("crashcontext", Crashcontext)
; ("linters", Linters) ]
let string_of_analyzer a =
List.find_exn ~f:(fun (_, a') -> equal_analyzer a a') string_to_analyzer |> fst
let clang_frontend_action_symbols = let clang_frontend_action_symbols =
@ -551,62 +541,32 @@ and allow_leak =
CLOpt.mk_bool ~deprecated:["leak"] ~long:"allow-leak" "Forget leaked memory during abstraction" CLOpt.mk_bool ~deprecated:["leak"] ~long:"allow-leak" "Forget leaked memory during abstraction"
and ( analysis_blacklist_files_containing_options and ( analysis_blacklist_files_containing
, analysis_path_regex_blacklist_options , analysis_path_regex_blacklist
, analysis_path_regex_whitelist_options , analysis_path_regex_whitelist
, analysis_suppress_errors_options ) = , analysis_suppress_errors ) =
let mk_filtering_options ~suffix ?(deprecated_suffix = []) ~help ~meta = let mk_filtering_option ~suffix ~help ~meta =
(* reuse the same config var for all the forms of the analyzer name (eg infer and biabduction let deprecated =
must map to the same filtering config)*) List.map ["checkers"; "infer"] ~f:(fun name -> Printf.sprintf "%s-%s" name suffix)
let config_vars = ref [] in
let mk_option analyzer analyzer_name =
let long = Printf.sprintf "%s-%s" analyzer_name suffix in
let deprecated = List.map ~f:(Printf.sprintf "%s_%s" analyzer_name) deprecated_suffix in
let source_of_truth =
List.find_map !config_vars ~f:(fun (a, v) ->
if equal_analyzer a analyzer then Some v else None )
in
(* if the analyzer already has a variable associated to it, make the new name update the same
variable *)
let mirror opt =
Option.iter source_of_truth ~f:(fun var -> var := opt :: !var) ;
opt
in
(* empty doc to hide the options from --help since there are many redundant ones *)
let var = CLOpt.mk_string_list ~deprecated ~long ~meta ~f:mirror "" in
match source_of_truth with
| Some var ->
(* if the analyzer already has a variable associated to it, use it *)
var
| None ->
(* record the variable associated to the analyzer if this is the first time we see this
analyzer *)
config_vars := (analyzer, var) :: !config_vars ;
var
in in
ignore let long = Printf.sprintf "report-%s" suffix in
(let long = "<analyzer>-" ^ suffix in CLOpt.mk_string_list ~deprecated ~long ~meta
CLOpt.mk_string_list ~long ~meta ~in_help:InferCommand.[(Report, manual_generic); (Run, manual_generic)]
~f:(fun _ -> raise (Arg.Bad "invalid option")) help
~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 in
( mk_filtering_options ~suffix:"blacklist-files-containing" ( mk_filtering_option ~suffix:"blacklist-files-containing"
~deprecated_suffix:["blacklist_files_containing"]
~help: ~help:
"blacklist files containing the specified string for the given analyzer (see \ "blacklist files containing the specified string for the given analyzer (see \
$(b,--analyzer) for valid values)" $(b,--analyzer) for valid values)"
~meta:"string" ~meta:"string"
, mk_filtering_options ~suffix:"blacklist-path-regex" ~deprecated_suffix:["blacklist"] , mk_filtering_option ~suffix:"blacklist-path-regex"
~help: ~help:
"blacklist the analysis of files whose relative path matches the specified OCaml-style \ "blacklist the analysis of files whose relative path matches the specified OCaml-style \
regex (to whitelist: $(b,--<analyzer>-whitelist-path-regex))" regex (to whitelist: $(b,--<analyzer>-whitelist-path-regex))"
~meta:"path_regex" ~meta:"path_regex"
, mk_filtering_options ~suffix:"whitelist-path-regex" ~deprecated_suffix:["whitelist"] ~help:"" , mk_filtering_option ~suffix:"whitelist-path-regex" ~help:"" ~meta:"path_regex"
~meta:"path_regex" , mk_filtering_option ~suffix:"suppress-errors" ~help:"do not report a type of errors"
, mk_filtering_options ~suffix:"suppress-errors" ~deprecated_suffix:["suppress_errors"] ~meta:"error_name" )
~help:"do not report a type of errors" ~meta:"error_name" )
and analysis_stops = and analysis_stops =
@ -615,38 +575,10 @@ and analysis_stops =
and analyzer = and analyzer =
let () = CLOpt.mk_symbol ~deprecated:["analyzer"; "-analyzer"; "a"] ~long:"" ~default:Checkers
match Checkers with ~eq:equal_analyzer ~symbols:string_to_analyzer
(* NOTE: if compilation fails here, it means you have added a new analyzer without updating the "DEPRECATED: To enable and disable individual analyses, use the various checkers options. For \
documentation of this option *) instance, to enable only the biabduction analysis, run with $(b,--biabduction-only)."
| CaptureOnly | CompileOnly | Checkers | Crashcontext | Linters ->
()
in
CLOpt.mk_symbol_opt ~deprecated:["analyzer"] ~long:"analyzer" ~short:'a'
~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)
- $(b,infer): alias for $(b,biabduction)
- $(b,linters): run linters based on the ast only (clang only, activated by default)
- $(b,capture): similar to specifying the $(b,capture) subcommand (DEPRECATED)
- $(b,compile): similar to specifying the $(b,compile) subcommand (DEPRECATED)
- $(b,crashcontext): experimental (see $(b,--crashcontext))|}
~f:(function
| (CaptureOnly | CompileOnly) as x ->
let analyzer_str =
List.find_map_exn string_to_analyzer ~f:(fun (s, y) ->
if equal_analyzer x y then Some s else None )
in
CLOpt.warnf
"WARNING: The analyzer '%s' is deprecated, use the '%s' subcommand instead:@\n\
@\n \
infer %s ..."
analyzer_str analyzer_str analyzer_str ;
x
| _ as x ->
x)
~symbols:string_to_analyzer
and ( annotation_reachability and ( annotation_reachability
@ -2320,11 +2252,6 @@ let post_parsing_initialization command_opt =
print_endline version_string ; prerr_endline version_string print_endline version_string ; prerr_endline version_string
| `Javac when !buck -> | `Javac when !buck ->
(* print buck key *) (* print buck key *)
let analyzer_name =
List.Assoc.find_exn ~equal:equal_analyzer
(List.map ~f:(fun (n, a) -> (a, n)) string_to_analyzer)
(match !analyzer with Some a -> a | None -> Checkers)
in
let infer_version = let infer_version =
match inferconfig_file with match inferconfig_file with
| Some inferconfig -> | Some inferconfig ->
@ -2333,8 +2260,8 @@ let post_parsing_initialization command_opt =
| None -> | None ->
Version.commit Version.commit
in in
F.printf "%s/%s@." analyzer_name infer_version ; F.printf "infer/%s@." infer_version ;
F.eprintf "%s/%s@." analyzer_name infer_version F.eprintf "infer/%s@." infer_version
| `Full -> | `Full ->
print_endline version_string print_endline version_string
| `Javac -> | `Javac ->
@ -2421,23 +2348,15 @@ let post_parsing_initialization command_opt =
(* set analyzer mode to linters in linters developer mode *) (* set analyzer mode to linters in linters developer mode *)
if !linters_developer_mode then linters := true ; if !linters_developer_mode then linters := true ;
if !default_linters then linters_def_file := linters_def_default_file :: !linters_def_file ; if !default_linters then linters_def_file := linters_def_default_file :: !linters_def_file ;
( if Option.is_none !analyzer then
match (command_opt : InferCommand.t option) with
| Some Compile ->
analyzer := Some CompileOnly
| Some Capture ->
analyzer := Some CaptureOnly
| _ ->
() ) ;
( match !analyzer with ( match !analyzer with
| Some Crashcontext -> | Crashcontext ->
disable_all_checkers () ; disable_all_checkers () ;
crashcontext := true crashcontext := true
| Some Linters -> | Linters ->
disable_all_checkers () ; disable_all_checkers () ;
capture := false ; capture := false ;
linters := true linters := true
| Some (CaptureOnly | Checkers | CompileOnly) | None -> | Checkers ->
() ) ; () ) ;
Option.value ~default:InferCommand.Run command_opt Option.value ~default:InferCommand.Run command_opt
@ -2495,21 +2414,13 @@ and abs_val = !abs_val
and allow_leak = !allow_leak and allow_leak = !allow_leak
and analysis_path_regex_whitelist_options = and analysis_path_regex_whitelist = !analysis_path_regex_whitelist
List.map ~f:(fun (a, b) -> (a, !b)) analysis_path_regex_whitelist_options
and analysis_path_regex_blacklist_options = and analysis_path_regex_blacklist = !analysis_path_regex_blacklist
List.map ~f:(fun (a, b) -> (a, !b)) analysis_path_regex_blacklist_options
and analysis_blacklist_files_containing = !analysis_blacklist_files_containing
and analysis_blacklist_files_containing_options = and analysis_suppress_errors = !analysis_suppress_errors
List.map ~f:(fun (a, b) -> (a, !b)) analysis_blacklist_files_containing_options
and analysis_suppress_errors_options =
List.map ~f:(fun (a, b) -> (a, !b)) analysis_suppress_errors_options
and analysis_stops = !analysis_stops and analysis_stops = !analysis_stops
@ -3012,26 +2923,8 @@ and xcpretty = !xcpretty
(** Configuration values derived from command-line options *) (** Configuration values derived from command-line options *)
let analysis_path_regex_whitelist analyzer =
List.Assoc.find_exn ~equal:equal_analyzer analysis_path_regex_whitelist_options analyzer
and analysis_path_regex_blacklist analyzer =
List.Assoc.find_exn ~equal:equal_analyzer analysis_path_regex_blacklist_options analyzer
and analysis_blacklist_files_containing analyzer =
List.Assoc.find_exn ~equal:equal_analyzer analysis_blacklist_files_containing_options analyzer
and analysis_suppress_errors analyzer =
List.Assoc.find_exn ~equal:equal_analyzer analysis_suppress_errors_options analyzer
let captured_dir = results_dir ^/ captured_dir_name let captured_dir = results_dir ^/ captured_dir_name
let analyzer = match !analyzer with Some a -> a | None -> Checkers
let clang_frontend_action_string = let clang_frontend_action_string =
String.concat ~sep:" and " String.concat ~sep:" and "
((if capture then ["translating"] else []) @ if linters then ["linting"] else []) ((if capture then ["translating"] else []) @ if linters then ["linting"] else [])

@ -11,13 +11,6 @@ open! IStd
(** Configuration values: either constant, determined at compile time, or set at startup (** Configuration values: either constant, determined at compile time, or set at startup
time by system calls, environment variables, or command line options *) time by system calls, environment variables, or command line options *)
type analyzer = CaptureOnly | CompileOnly | Checkers | Crashcontext | Linters
val string_to_analyzer : (string * analyzer) list
(** Association list of analyzers and their names *)
val string_of_analyzer : analyzer -> string
type os_type = Unix | Win32 | Cygwin type os_type = Unix | Win32 | Cygwin
type compilation_database_dependencies = type compilation_database_dependencies =
@ -220,17 +213,15 @@ val abs_val : int
val allow_leak : bool val allow_leak : bool
val analysis_path_regex_whitelist : analyzer -> string list val analysis_path_regex_whitelist : string list
val analysis_path_regex_blacklist : analyzer -> string list val analysis_path_regex_blacklist : string list
val analysis_blacklist_files_containing : analyzer -> string list val analysis_blacklist_files_containing : string list
val analysis_stops : bool val analysis_stops : bool
val analysis_suppress_errors : analyzer -> string list val analysis_suppress_errors : string list
val analyzer : analyzer
val annotation_reachability : bool val annotation_reachability : bool

@ -56,9 +56,6 @@ let setup () =
let print_active_checkers () = let print_active_checkers () =
(if Config.print_active_checkers && CLOpt.is_originator then L.result else L.environment_info)
"Analyzer: %s@."
Config.(string_of_analyzer analyzer) ;
(if Config.print_active_checkers && CLOpt.is_originator then L.result else L.environment_info) (if Config.print_active_checkers && CLOpt.is_originator then L.result else L.environment_info)
"Active checkers: %a@." "Active checkers: %a@."
(Pp.seq ~sep:", " RegisterCheckers.pp_checker) (Pp.seq ~sep:", " RegisterCheckers.pp_checker)

@ -11,7 +11,7 @@
"method": "get" "method": "get"
} }
], ],
"checkers-blacklist-files-containing": [ "report-blacklist-files-containing": [
"@generated" "@generated"
], ],
"enable-issue-type": [ "enable-issue-type": [

@ -11,7 +11,7 @@
"method": "get" "method": "get"
} }
], ],
"checkers-blacklist-files-containing": [ "report-blacklist-files-containing": [
"@generated" "@generated"
], ],
"skip-translation": [ "skip-translation": [

@ -11,7 +11,7 @@
"method": "get" "method": "get"
} }
], ],
"checkers-blacklist-files-containing": [ "report-blacklist-files-containing": [
"@generated" "@generated"
], ],
"skip-translation": [ "skip-translation": [

Loading…
Cancel
Save