infer-report(1)

πŸ“¦ version 1.3.0, in nixpkgs unstable

πŸ’– infer-report(1) πŸ’–

okay so bestie, welcome to infer-report β€” the part of the Infer Reporting manual that's literally all about computing and manipulating infer reports. grab a strawberry drink πŸ“, we're going in.


✨ NAME ✨

infer-report β€” compute and manipulate infer reports. that's it. that's the whole vibe. πŸ‘‘


πŸ¦‹ SYNOPSIS πŸ¦‹

infer report
infer report --issues-tests
infer report --cost-issues-tests
infer report --config-impact-issues-tests
infer report --merge-report dir1 ... --merge-report dirN

🌸 DESCRIPTION 🌸

so if you run it with no parameters at all, it generates report output in Json. that's the default, no notes. ✨

add a --tests parameter and it writes out issues in a format suitable for tests β€” lowkey obsessed with how clean that is.

and with --merge-report? it merges multiple JSON reports into one. one report to rule them all, main character energy fr fr πŸ’…


πŸŽ€ OPTIONS πŸŽ€

  • --no-censor-report +issue_type_regex β€” for debugging/experimentation only, bestie: specify issues that should not be censored by --censor-report. just for science, don't ship it πŸ™ˆ
  • --censor-report +string β€” specify a filter for issues to be censored, by adding a 'censored_reason' field in the json report. here's the tea: Infer will not report censored issues on the console output and in report.txt, but tools that post-process the json report can totally still take them into account. if multiple filters are specified, they're applied in the order in which they're specified. each filter is applied to each issue detected, and only issues which are accepted by all filters get reported. each filter is of the form:
`<issue_type_regex>:<filename_regex>:<reason_string>`

the first two components are OCaml Str regular expressions, with an optional ! character prefix. if a regex has a ! prefix, the polarity is inverted, and the filter becomes a "block list" instead of a "allow list". each filter is interpreted as an implication: an issue matches if it does not match the issue_type_regex or if it does match the filename_regex. the filenames that are tested by the regex are relative to the --project-root directory. the <reason_string> is a non-empty string used to explain why the issue was filtered. receipts included, always 🧾

  • --config-impact-data-file file β€” [ConfigImpact] specify the file containing the config data. πŸ“
  • --config-impact-issues-tests file β€” write a list of config impact issues in a format suitable for config impact tests to file. πŸ’–
  • --config-impact-max-callees-to-print int β€” specify the maximum number of unchecked callees to print in the config impact checker. keeping the output cute and not chaotic ✨
  • --cost-issues-tests file β€” write a list of cost issues in a format suitable for cost tests to file. πŸŽ€
  • --debug, -g β€” activates: Debug mode. also sets --debug-level 2, --developer-mode, --print-buckets, --print-types, --reports-include-ml-loc, --no-only-cheap-debug, --trace-error, --write-html. (conversely: --no-debug | -G) πŸ”
  • --debug-level level β€” debug level. sets --bo-debug level, --debug-level-analysis level, --debug-level-capture level:
    • 0: only basic debugging enabled
    • 1: verbose debugging enabled
    • 2: very verbose debugging enabled

it goes 0, 1, 2 and then it goes FERAL 😭

  • --debug-level-analysis int β€” debug level for the analysis. see --debug-level for accepted values. 🧠
  • --debug-level-capture int β€” debug level for the capture. see --debug-level for accepted values. πŸ“Έ
  • --debug-level-report int β€” debug level for the report. see --debug-level for accepted values. πŸ“
  • --no-deduplicate β€” deactivates: Apply issue-specific deduplication during analysis and/or reporting. (conversely: --deduplicate) πŸ™…β€β™€οΈ
  • --deduplicate-by { location | trace } β€” controls a generic deduplication mechanism. issue description and issue type are always taken into account when deduplicating for reporting. in addition, one can also take into account the location OR the trace. using the trace to de-duplicate can result in multiple distinct traces being reported at the same location, which is not possible with the default deduplication by location. choose your fighter βš”οΈ
  • --differential-filter-files string β€” 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. πŸ“„
  • --disable-issue-type +issue_type β€” do not show reports coming from this type of issue. each checker can report a range of issue types, so this option provides fine-grained filtering over which types of issue should be reported once the checkers have run. important caveat, bestie: disabling issue types does not make the corresponding checker not run. πŸ™ˆ

available issue types are as follows:

  • ARBITRARY_CODE_EXECUTION_UNDER_LOCK (enabled by default)
  • BAD_ARG (enabled by default)
  • BAD_ARG_LATENT (disabled by default)
  • BAD_GENERATOR (enabled by default)
  • BAD_GENERATOR_LATENT (disabled by default)
  • BAD_KEY (enabled by default)
  • BAD_KEY_LATENT (disabled by default)
  • BAD_MAP (enabled by default)
  • BAD_MAP_LATENT (disabled by default)
  • BAD_RECORD (enabled by default)
  • BAD_RECORD_LATENT (disabled by default)
  • BAD_RETURN (enabled by default)
  • BAD_RETURN_LATENT (disabled by default)
  • BLOCK_PARAMETER_NOT_NULL_CHECKED (enabled by default)
  • BUFFER_OVERRUN_L1 (enabled by default)
  • BUFFER_OVERRUN_L2 (enabled by default)
  • BUFFER_OVERRUN_L3 (enabled by default)
  • BUFFER_OVERRUN_L4 (disabled by default)
  • BUFFER_OVERRUN_L5 (disabled by default)
  • BUFFER_OVERRUN_S2 (enabled by default)
  • BUFFER_OVERRUN_U5 (disabled by default)
  • CAPTURED_STRONG_SELF (enabled by default)
  • CHECKERS_ALLOCATES_MEMORY (enabled by default)
  • CHECKERS_ANNOTATION_REACHABILITY_ERROR (enabled by default)
  • CHECKERS_CALLS_EXPENSIVE_METHOD (enabled by default)
  • CHECKERS_EXPENSIVE_OVERRIDES_UNANNOTATED (enabled by default)
  • CHECKERS_FRAGMENT_RETAINS_VIEW (enabled by default)
  • COMPARED_TO_NULL_AND_DEREFERENCED (disabled by default)
  • CONDITION_ALWAYS_FALSE (disabled by default)
  • CONDITION_ALWAYS_TRUE (disabled by default)
  • CONFIG_GATED (enabled by default)
  • CONFIG_IMPACT (enabled by default)
  • CONFIG_IMPACT_STRICT (disabled by default)
  • CONFIG_UNGATED (enabled by default)
  • CONFIG_USAGE (disabled by default)
  • CONSTANT_ADDRESS_DEREFERENCE (disabled by default)
  • CONSTANT_ADDRESS_DEREFERENCE_LATENT (disabled by default)
  • CXX_REF_CAPTURED_IN_BLOCK (enabled by default)
  • CXX_STRING_CAPTURED_IN_BLOCK (disabled by default)
  • DATA_FLOW_TO_SINK (disabled by default)
  • DEADLOCK (enabled by default)
  • DEAD_STORE (enabled by default)
  • DO_NOT_REPORT (enabled by default)
  • EXECUTION_TIME_COMPLEXITY_INCREASE (enabled by default)
  • EXECUTION_TIME_COMPLEXITY_INCREASE_UI_THREAD (enabled by default)
  • EXECUTION_TIME_UNREACHABLE_AT_EXIT (disabled by default)
  • EXPENSIVE_EXECUTION_TIME (disabled by default)
  • EXPENSIVE_LOOP_INVARIANT_CALL (enabled by default)
  • GUARDEDBY_VIOLATION (enabled by default)
  • IMPURE_FUNCTION (enabled by default)
  • INEFFICIENT_KEYSET_ITERATOR (enabled by default)
  • INFERBO_ALLOC_IS_BIG (enabled by default)
  • INFERBO_ALLOC_IS_NEGATIVE (enabled by default)
  • INFERBO_ALLOC_IS_ZERO (enabled by default)
  • INFERBO_ALLOC_MAY_BE_BIG (enabled by default)
  • INFERBO_ALLOC_MAY_BE_NEGATIVE (enabled by default)
  • INFINITE_EXECUTION_TIME (disabled by default)
  • INFINITE_LOOP (disabled by default)
  • INFINITE_RECURSION (disabled by default)
  • INTEGER_OVERFLOW_L1 (enabled by default)
  • INTEGER_OVERFLOW_L2 (enabled by default)
  • INTEGER_OVERFLOW_L5 (disabled by default)
  • INTEGER_OVERFLOW_U5 (disabled by default)
  • INTERFACE_NOT_THREAD_SAFE (enabled by default)
  • INVALID_SIL (enabled by default)
  • INVARIANT_CALL (disabled by default)
  • IPC_ON_UI_THREAD (enabled by default)
  • LAB_RESOURCE_LEAK (enabled by default)
  • LINEAGE_FLOW (enabled by default)
  • LOCKLESS_VIOLATION (enabled by default)
  • LOCK_CONSISTENCY_VIOLATION (enabled by default)
  • LOCK_ON_UI_THREAD (disabled by default)
  • MEMORY_LEAK_C (enabled by default)
  • MEMORY_LEAK_CPP (disabled by default)
  • MISSING_NULLABILITY_ANNOTATION (enabled by default)
  • MISSING_NULLABILITY_ANNOTATION_PULSE (enabled by default)
  • MISSING_REQUIRED_PROP (enabled by default)
  • MIXED_SELF_WEAKSELF (enabled by default)
  • MODIFIES_IMMUTABLE (enabled by default)
  • MULTIPLE_WEAKSELF (enabled by default)
  • MUTUAL_RECURSION_CYCLE (disabled by default)
  • NIL_BLOCK_CALL (enabled by default)
  • NIL_BLOCK_CALL_LATENT (disabled by default)
  • NIL_INSERTION_INTO_COLLECTION (enabled by default)
  • NIL_INSERTION_INTO_COLLECTION_LATENT (disabled by default)
  • NIL_MESSAGING_TO_NON_POD (enabled by default)
  • NIL_MESSAGING_TO_NON_POD_LATENT (disabled by default)
  • NO_MATCHING_BRANCH_IN_TRY (enabled by default)
  • NO_MATCHING_BRANCH_IN_TRY_LATENT (disabled by default)
  • NO_MATCHING_CASE_CLAUSE (enabled by default)
  • NO_MATCHING_CASE_CLAUSE_LATENT (disabled by default)
  • NO_MATCHING_ELSE_CLAUSE (enabled by default)
  • NO_MATCHING_ELSE_CLAUSE_LATENT (disabled by default)
  • NO_MATCHING_FUNCTION_CLAUSE (enabled by default)
  • NO_MATCHING_FUNCTION_CLAUSE_LATENT (disabled by default)
  • NO_MATCH_OF_RHS (enabled by default)
  • NO_MATCH_OF_RHS_LATENT (disabled by default)
  • NO_TRUE_BRANCH_IN_IF (enabled by default)
  • NO_TRUE_BRANCH_IN_IF_LATENT β€” disabled by default 😴
  • NSSTRING_INTERNAL_PTR_CAPTURED_IN_BLOCK β€” disabled by default 😴
  • NULLPTR_DEREFERENCE β€” enabled by default πŸ”₯
  • NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS β€” enabled by default πŸ”₯
  • NULLPTR_DEREFERENCE_IN_NULLSAFE_CLASS_LATENT β€” disabled by default 😴
  • NULLPTR_DEREFERENCE_LATENT β€” disabled by default 😴
  • NULL_ARGUMENT β€” enabled by default πŸ”₯
  • NULL_ARGUMENT_LATENT β€” disabled by default 😴
  • OPTIONAL_EMPTY_ACCESS β€” enabled by default πŸ”₯
  • OPTIONAL_EMPTY_ACCESS_LATENT β€” disabled by default 😴
  • PULSE_ASSERTION_ERROR β€” disabled by default 😴
  • PULSE_CANNOT_INSTANTIATE_ABSTRACT_CLASS β€” disabled by default 😴
  • PULSE_CONST_REFABLE β€” enabled by default πŸ”₯
  • PULSE_DICT_MISSING_KEY β€” disabled by default 😴
  • PULSE_DYNAMIC_TYPE_MISMATCH β€” disabled by default 😴
  • PULSE_READONLY_SHARED_PTR_PARAM β€” enabled by default πŸ”₯
  • PULSE_REFERENCE_STABILITY β€” enabled by default πŸ”₯
  • PULSE_RESOURCE_LEAK β€” enabled by default πŸ”₯
  • PULSE_TRANSITIVE_ACCESS β€” enabled by default πŸ”₯
  • PULSE_UNAWAITED_AWAITABLE β€” enabled by default πŸ”₯
  • PULSE_UNFINISHED_BUILDER β€” disabled by default 😴
  • PULSE_UNINITIALIZED_CONST β€” disabled by default 😴
  • PULSE_UNINITIALIZED_METHOD β€” disabled by default 😴
  • PULSE_UNINITIALIZED_VALUE β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_ASSIGNMENT β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_ASSIGNMENT_CONST β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_ASSIGNMENT_MOVABLE β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_INTERMEDIATE β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_INTERMEDIATE_CONST β€” disabled by default 😴
  • PULSE_UNNECESSARY_COPY_MOVABLE β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_OPTIONAL β€” enabled by default πŸ”₯
  • PULSE_UNNECESSARY_COPY_OPTIONAL_CONST β€” disabled by default 😴
  • PULSE_UNNECESSARY_COPY_RETURN β€” disabled by default 😴
  • PULSE_UNNECESSARY_COPY_THRIFT_ASSIGNMENT β€” enabled by default πŸ”₯
  • PURE_FUNCTION β€” enabled by default πŸ”₯
  • REGEX_OP_ON_UI_THREAD β€” enabled by default πŸ”₯
  • RETAIN_CYCLE β€” enabled by default πŸ”₯
  • RETAIN_CYCLE_NO_WEAK_INFO β€” disabled by default 😴
  • SCOPE_LEAKAGE β€” enabled by default πŸ”₯
  • SELF_IN_BLOCK_PASSED_TO_INIT β€” enabled by default πŸ”₯
  • SENSITIVE_DATA_FLOW β€” disabled by default 😴
  • STACK_VARIABLE_ADDRESS_ESCAPE β€” enabled by default πŸ”₯
  • STARVATION β€” enabled by default πŸ”₯
  • STATIC_CONSTRUCTOR_STALL β€” disabled by default 😴
  • STATIC_INITIALIZATION_ORDER_FIASCO β€” enabled by default πŸ”₯
  • STRICT_MODE_VIOLATION β€” enabled by default πŸ”₯
  • STRONG_SELF_NOT_CHECKED β€” enabled by default πŸ”₯
  • TAINT_ERROR β€” enabled by default πŸ”₯
  • THREAD_SAFETY_VIOLATION β€” enabled by default πŸ”₯
  • TOPL_ERROR β€” enabled by default πŸ”₯
  • TOPL_ERROR_LATENT β€” disabled by default 😴
  • UNREACHABLE_CODE β€” enabled by default πŸ”₯
  • USE_AFTER_DELETE β€” enabled by default πŸ”₯
  • USE_AFTER_DELETE_LATENT β€” disabled by default 😴
  • USE_AFTER_FREE β€” enabled by default πŸ”₯
  • USE_AFTER_FREE_LATENT β€” disabled by default 😴
  • USE_AFTER_LIFETIME β€” enabled by default πŸ”₯
  • USE_AFTER_LIFETIME_LATENT β€” disabled by default 😴
  • VECTOR_INVALIDATION β€” enabled by default πŸ”₯
  • VECTOR_INVALIDATION_LATENT β€” disabled by default 😴
  • WEAK_SELF_IN_NO_ESCAPE_BLOCK β€” enabled by default πŸ”₯
  • --enable-issue-type +issue_type β€” okay so this one says "bestie, show me the reports from THIS issue type". By default every issue type is enabled except the ones chilling in --disable-issue-type. BIG caveat though: turning an issue type on does not make the matching checker actually run β€” for that you gotta go poke the individual checker options, iykyk πŸ’…
  • --no-filtering, -F β€” Deactivates: Do not show the experimental and block listed issue types (Conversely: --filtering | -f)
  • --from-json-config-impact-report config-impact-report.json β€” load the costs analysis results from a config-impact-report file 🫢
  • --from-json-costs-report costs-report.json β€” load the costs analysis results from a costs-report file ✨
  • --from-json-report report.json β€” load analysis results from a report file (default behaviour is to load them from the specs files that the analysis generated)
  • --help β€” show this manual, iconic behaviour honestly πŸŽ€
  • --help-format { auto | groff | pager | plain } β€” show this help in the format you picked. auto means: if the env var TERM is "dumb" or straight-up undefined, you get plain; otherwise you get pager πŸ¦‹
  • --help-full β€” show this manual with all the internal options in the INTERNAL OPTIONS section πŸ‘€
  • --issues-tests file β€” write a list of issues to file, formatted so tests can eat it πŸ“
  • --issues-tests-fields ,-separated sequence of { bug_type | bucket | qualifier | suggestion | severity | line | column | procedure | procedure_start_line | file | bug_trace | key | hash | line_offset | qualifier_contains_potential_exception_note | may_depend_on_an_unknown_value | taint_extra | transitive_callees_extra | suppressed | autofix } β€” the fields you want emitted alongside --issues-tests, comma-separated bestie 🌸
  • --merge-report +string β€” give it an Infer results directory. The reports stored in JSON files across all the results directories you list get merged together and deduplicated before landing in the main results directory 🌈
  • --merge-summaries +string β€” give it an Infer results directory. The summaries across all the listed results directories get merged and deduplicated before reporting happens πŸ’œ
  • --print-logs β€” Activates: Also log messages to stdout and stderr (Conversely: --no-print-logs)
  • --project-root, -C dir β€” specify the root directory of the project πŸ“
  • --quiet, -q β€” Activates: Do not print anything on standard output. (Conversely: --no-quiet | -Q) 🀫
  • --report-allow-list-path-regex +path_regex β€” only report issues on files whose relative path matches this OCaml regex (and that don't match --report-block-list-path-regex)
  • --report-block-list-files-containing +string β€” do not report any issues on files that contain this string πŸ™…β€β™€οΈ
  • --report-block-list-path-regex +path_regex β€” do not report any issues on files whose relative path matches this OCaml regex β€” even if they match the allow list from --report-allow-list-path-regex. yeah, block list wins, sorry bestie πŸ’€
  • --report-block-list-spec json β€” do not report the issues in this list. Example format:
"report-block-list-spec": [
    { "bug_type": "CXX_REF_CAPTURED_IN_BLOCK",
      "procedure_name": "foo",
      "file": "path/to/File.m"
      "comment": "This is a fp because..."
    },
    { "bug_type": "RETAIN_CYCLE",
      "class_name": "MyClass",
      "procedure_name": "my_method"
      "file": "path/to/File.m"
    }
]
  • --report-console-limit int β€” max number of issues shown on standard output. Unset it with --report-console-limit-reset to show all of them πŸ‘‘
  • --report-formatter { none | phabricator } β€” which formatter to use when emitting the report ✨
  • --report-suppress-errors +error_name β€” do not report a type of errors 🀐
  • --results-dir, -o dir β€” write results and internal files into the specified directory πŸ—‚οΈ
  • --skip-analysis-in-path-skips-compilation β€” Activates: Whether paths in --skip-analysis-in-path should be compiled or not (Conversely: --no-skip-analysis-in-path-skips-compilation)
  • --no-suppressions β€” Deactivates: Suppress infer issues on source lines matching the @infer-disable ISSUE_TYPE1, ISSUE_TYPE2, ... and @infer-disable-every ISSUE_TYPE1, ISSUE_TYPE2, ... keywords. (Conversely: --suppressions) πŸ™ˆ

🌸 HOISTING OPTIONS 🌸

  • --no-hoisting-report-only-expensive β€” Deactivates: [Hoisting] Report loop-invariant calls only when the function is expensive, i.e. at least linear (Conversely: --hoisting-report-only-expensive)

πŸ¦‹ LINEAGE OPTIONS πŸ¦‹

  • --lineage-sanitizers +string β€” [EXPERIMENTAL; UNSTABLE API] lineage sanitizers, comma-separated, as m:f/a
  • --lineage-sink +string β€” [EXPERIMENTAL; UNSTABLE API] lineage sinks for taint finding, format [module:]function/arity.{ret,argN}, comma-separated. You gotta use it together with --lineage-source as options to the report subcommand. It'll produce a graph materializing the flows between the sources and the sinks, plus a json issues file. That issues file contains one trace per sink, showing a shortest path from a source. And the report command prints the filesystem paths of the files holding those results πŸ”₯
  • --lineage-source +string β€” [EXPERIMENTAL; UNSTABLE API] lineage sources for taint finding, format [module:]function/arity.{ret,argN}, comma-separated. See --lineage-sink for the extra docs 🫢

πŸ’… PULSE CHECKER OPTIONS πŸ’…

  • --pulse-report-assert β€” Activates: Reports Assertion Error in a failed assertion. Used in C code. (Conversely: --no-pulse-report-assert)
  • --pulse-report-flows-from-taint-source procname β€” report data flows that originate at taint source procname πŸ’§
  • --pulse-report-flows-to-taint-sink procname β€” report data flows that pass through taint sink procname 🌊
  • --pulse-report-issues-reachable-from +regex β€” re-raise issues that Pulse managed to propagate all the way to procedures matching one of the given regexes πŸ‘‘

🌈 ENVIRONMENT 🌈

  • INFER_ARGS, INFERCONFIG, INFER_STRICT_MODE β€” see the ENVIRONMENT section in the manual of infer(1) ✨

πŸŽ€ FILES πŸŽ€

  • .inferconfig β€” see the FILES section in the manual of infer(1) πŸ—‚οΈ

⭐ SEE ALSO ⭐

infer-reportdiff(1), infer-run(1) 🫢


okay that's literally the whole page bestie, go forth and report responsibly πŸ’– this was infer-report(1), version v1.3.0-unknown, dated 2026-10-27 β€” no cap, that's the actual source/version and date at the bottom, slay πŸŽ€βœ¨

πŸ“¦ where this page comes from