infer-report(1)
π 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 inreport.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 tofile. π--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 tofile. π--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 enabled1: verbose debugging enabled2: 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-levelfor accepted values. π§--debug-level-capture intβ debug level for the capture. see--debug-levelfor accepted values. πΈ--debug-level-report intβ debug level for the report. see--debug-levelfor 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-reportconfig-impact-report.json β load the costs analysis results from a config-impact-report file π«Ά--from-json-costs-reportcosts-report.json β load the costs analysis results from a costs-report file β¨--from-json-reportreport.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.automeans: if the env varTERMis"dumb"or straight-up undefined, you getplain; otherwise you getpagerπ¦--help-fullβ show this manual with all the internal options in the INTERNAL OPTIONS section π--issues-testsfile β 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 tostdoutandstderr(Conversely:--no-print-logs)--project-root,-Cdir β 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-specjson β 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-limitint β max number of issues shown on standard output. Unset it with--report-console-limit-resetto 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,-odir β write results and internal files into the specified directory ποΈ--skip-analysis-in-path-skips-compilationβ Activates: Whether paths in--skip-analysis-in-pathshould 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, asm: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-sourceas options to thereportsubcommand. 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 thereportcommand 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-sinkfor 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-sourceprocname β report data flows that originate at taint source procname π§--pulse-report-flows-to-taint-sinkprocname β 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 ofinfer(1)β¨
π FILES π
.inferconfigβ see the FILES section in the manual ofinfer(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
- nixpkgs unstable: infer 1.3.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms