Summary:
Needed to remove user_documentation for the new
CONFIG_CHECK_BETWEEN_MARKERS issue type otherwise it violated the
invariant that the corresponding checker should be documented too but
its development has just started.
Reviewed By: skcho
Differential Revision: D22065820
fbshipit-source-id: 4b3a58850
master
Jules Villard5 years agocommitted byFacebook GitHub Bot
@ -33,6 +33,95 @@ integer pointed to by `n` is nonzero (e.g., she may have meant to call an
accessor like `[n intValue]` instead). Infer will ask the programmer explicitly
accessor like `[n intValue]` instead). Infer will ask the programmer explicitly
compare `n` to `nil` or call an accessor to clarify her intention.
compare `n` to `nil` or call an accessor to clarify her intention.
## BUFFER_OVERRUN_L1
Reported as "Buffer Overrun L1" by [bufferoverrun](checker-bufferoverrun.md).
Buffer overrun reports fall into several "buckets" corresponding to the expected precision of the
report. The higher the number, the more likely it is to be a false positive.
* `L1`: The most faithful report, when it *must* be unsafe. For example, array size: `[5,5]`,
offset: `[3,3]`.
* `L2`: Less faithful report than `L1`, when it *may* be unsafe. For example, array size:`[5,5]`,
offset: `[0,5]`. Note that the offset may be a safe value in the real execution, i.e. 0, 1, 2,
3, 4.
* `L5`: The least faithful report, when there is an interval top. For example, array size:
`[5,5]`, offset: `[-oo,+oo]`.
* `L4`: More faithful report than `L5`, when there is an infinity value. For example, array size:
`[5,5]`, offset: `[0, +oo]`.
* `L3`: The reports that are not included in the above cases.
Other than them, there are some specific-purpose buffer overrun reports as follows.
* `R2`: An array access is unsafe by *risky* array values from `strndup`. For example, suppose
there is a `strndup` call as follows.
```c
char* s1 = (char*)malloc(sizeof(char) * size);
for (int i = 0; i <size;i++){
s1[i] = 'a';
}
s1[5] = '\0';
char* s2 = strndup(s1, size - 1);
s2[size - 1] = 'a';
```
Even if the second parameter of `strndup` is `size - 1`, the length of `s2` can be shorter than
`size` if there is the null character in the middle of `s1`.
* `S2`: An array access is unsafe by symbolic values. For example, array size: `[n,n]`, offset
`[n,+oo]`.
* `T1`: An array access is unsafe by tainted external values. This is experimental and will be
removed sooner or later.
* `U5`: An array access is unsafe by unknown values, which are usually from unknown function
calls.
## BUFFER_OVERRUN_L2
Reported as "Buffer Overrun L2" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_L3
Reported as "Buffer Overrun L3" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_L4
Reported as "Buffer Overrun L4" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_L5
Reported as "Buffer Overrun L5" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_R2
Reported as "Buffer Overrun R2" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_S2
Reported as "Buffer Overrun S2" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_T1
Reported as "Buffer Overrun T1" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## BUFFER_OVERRUN_U5
Reported as "Buffer Overrun U5" by [bufferoverrun](checker-bufferoverrun.md).
See [BUFFER_OVERRUN_L1](#buffer_overrun_l1)
## CAPTURED_STRONG_SELF
## CAPTURED_STRONG_SELF
Reported as "Captured strongSelf" by [self-in-block](checker-self-in-block.md).
Reported as "Captured strongSelf" by [self-in-block](checker-self-in-block.md).
@ -46,6 +135,68 @@ This will happen in one of two cases generally:
local variable to the block. If `strongSelf` is used in the inside block,
local variable to the block. If `strongSelf` is used in the inside block,
then it's not a local variable anymore, but a captured variable.
then it's not a local variable anymore, but a captured variable.
## CHECKERS_ALLOCATES_MEMORY
Reported as "Allocates Memory" by [annotation-reachability](checker-annotation-reachability.md).
A method annotated with `@NoAllocation` transitively calls `new`.
Example:
```java
class C implements I {
@NoAllocation
void directlyAllocatingMethod() {
new Object();
}
}
```
## CHECKERS_ANNOTATION_REACHABILITY_ERROR
Reported as "Annotation Reachability Error" by [annotation-reachability](checker-annotation-reachability.md).
A method annotated with an annotation `@A` transitively calls a method annotated `@B` where the combination of annotations is forbidden (for example, `@UiThread` calling `@WorkerThread`).
## CHECKERS_CALLS_EXPENSIVE_METHOD
Reported as "Expensive Method Called" by [annotation-reachability](checker-annotation-reachability.md).
A method annotated with `@PerformanceCritical` transitively calls a method annotated `@Expensive`.
Example:
```java
class C {
@PerformanceCritical
void perfCritical() {
expensive();
}
@Expensive
void expensive() {}
}
```
## CHECKERS_EXPENSIVE_OVERRIDES_UNANNOTATED
Reported as "Expensive Overrides Unannotated" by [annotation-reachability](checker-annotation-reachability.md).
A method annotated with `@Expensive` overrides an un-annotated method.
Example:
```java
interface I {
void foo();
}
class A implements I {
@Expensive
public void foo() {}
}
```
## CHECKERS_FRAGMENT_RETAINS_VIEW
## CHECKERS_FRAGMENT_RETAINS_VIEW
Reported as "Fragment Retains View" by [fragment-retains-view](checker-fragment-retains-view.md).
Reported as "Fragment Retains View" by [fragment-retains-view](checker-fragment-retains-view.md).
@ -80,6 +231,20 @@ list e.g. by adding elements.
Action: you can change the return type to be immutable, or make a copy of the
Action: you can change the return type to be immutable, or make a copy of the
collection so that it can be modified.
collection so that it can be modified.
## CHECKERS_PRINTF_ARGS
Reported as "Checkers Printf Args" by [printf-args](checker-printf-args.md).
This error is reported when the argument types to a `printf` method do not match the format string.
```java
void stringInsteadOfInteger(PrintStream out) {
out.printf("Hello %d", "world");
}
```
Action: fix the mismatch between format string and argument types.
## COMPONENT_FACTORY_FUNCTION
## COMPONENT_FACTORY_FUNCTION
Reported as "Component Factory Function" by [linters](checker-linters.md).
Reported as "Component Factory Function" by [linters](checker-linters.md).
@ -101,6 +266,37 @@ Reported as "Component With Unconventional Superclass" by [linters](checker-lint
[Doc in ComponentKit page](http://componentkit.org/docs/never-subclass-components)
[Doc in ComponentKit page](http://componentkit.org/docs/never-subclass-components)
## CONDITION_ALWAYS_FALSE
Reported as "Condition Always False" by [bufferoverrun](checker-bufferoverrun.md).
A condition expression is **always** evaluated to false.
## CONDITION_ALWAYS_TRUE
Reported as "Condition Always True" by [bufferoverrun](checker-bufferoverrun.md).
A condition expression is **always** evaluated to true.
## CONSTANT_ADDRESS_DEREFERENCE
Reported as "Constant Address Dereference" by [pulse](checker-pulse.md).
This is reported when an address obtained via a non-zero constant is
dereferenced. If the address is zero then
[`NULLPTR_DEREFERENCE`](#nullptr_dereference) is reported instead.
For example, `int *p = (int *) 123; *p = 42;` generates this issue
type.
## CREATE_INTENT_FROM_URI
Reported as "Create Intent From Uri" by [quandary](checker-quandary.md).
Create an intent/start a component using a (possibly user-controlled) URI. may or may not be an issue depending on where the URI comes from.
## CROSS_SITE_SCRIPTING
Reported as "Cross Site Scripting" by [quandary](checker-quandary.md).
Untrusted data flows into HTML; XSS risk.
## CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK
## CXX_REFERENCE_CAPTURED_IN_OBJC_BLOCK
Reported as "Cxx Reference Captured In Objc Block" by [linters](checker-linters.md).
Reported as "Cxx Reference Captured In Objc Block" by [linters](checker-linters.md).
@ -526,6 +722,60 @@ the annotations of any method called directly by the current method, if
relevant. If the annotations are correct, you can remove the @Nullable
relevant. If the annotations are correct, you can remove the @Nullable
annotation.
annotation.
## EXECUTION_TIME_COMPLEXITY_INCREASE
Reported as "Execution Time Complexity Increase" by [cost](checker-cost.md).
Infer reports this issue when the execution time complexity of a
program increases in degree: e.g. from constant to linear or from
logarithmic to quadratic. This issue type is only reported in
differential mode: i.e when we are comparing the analysis results of
two runs of infer on a file.
## EXECUTION_TIME_COMPLEXITY_INCREASE_UI_THREAD
Reported as "Execution Time Complexity Increase Ui Thread" by [cost](checker-cost.md).
Infer reports this issue when the execution time complexity of the procedure increases in degree **and** the procedure runs on the UI (main) thread.
Infer considers a method as running on the UI thread whenever:
- The method, one of its overrides, its class, or an ancestral class, is
annotated with `@UiThread`.
- The method, or one of its overrides is annotated with `@OnEvent`, `@OnClick`,
etc.
- The method or its callees call a `Litho.ThreadUtils` method such as
`assertMainThread`.
## EXECUTION_TIME_UNREACHABLE_AT_EXIT
Reported as "Execution Time Unreachable At Exit" by [cost](checker-cost.md).
This issue type indicates that the program's execution doesn't reach
the exit node. Hence, we cannot compute a static bound for the
procedure.
Examples:
```java
void exit_unreachable() {
exit(0); // modeled as unreachable
}
void infeasible_path_unreachable() {
Preconditions.checkState(false); // like assert false, state pruned to bottom
}
```
## EXPOSED_INSECURE_INTENT_HANDLING
Reported as "Exposed Insecure Intent Handling" by [quandary](checker-quandary.md).
Cost analysis statically estimates an upper bound on the worst-case execution cost of a program (WCET). This page gives an overview of how the analysis works for *Java* code. The analyser also has limited support for C/C++ and Objective-C.
To run the analysis, you can use run `infer --cost` (which will run cost analysis along with other
analyses that are run by default) or `infer --cost-only` (which will only run cost analysis).
For example, the command `infer --cost-only -- javac File.java` will run
cost analysis on File.java.
## How the analysis works
Most ideas behind this analysis is based on Stefan Bydge's PhD thesis [Static WCET Analysis based on Abstract Interpretation and Counting of Elements](https://www.semanticscholar.org/paper/Static-WCET-Analysis-Based-on-Abstract-and-Counting-Bygde/ee5157164d497725c1f42dc6c475a59a87c99957).
The analysis computes two things for each node in the CFG:
- the cost of its instructions, i.e. how much one execution of this node costs,
- how many times it can be executed.
The total cost of the node is the scalar product of these two vectors. Then, these are passed to a constraint solver that computes the execution cost of the procedure based on the incoming/outgoing edges.
At a high level, the analysis has three steps:
- Choose control variables that allude to "how many times a loop may iterate".
- Get abstract ranges of the control variables from [InferBO](checker-bufferoverrun) (a numerical analysis that infers symbolic intervals)
- Construct complexity polynomials for loops and functions by via a constraint solving algorithm.
## Examples
Infer’s cost analysis statically estimates the execution cost of a
program without running the code. For instance, assume that we had the
following program:
```java
void loop(ArrayList<Integer> list){
for (int i = 0; i <= list.size(); i++){
}
}
```
For this program, Infer statically infers a polynomial (e.g. `8|list|+16`) for the execution cost of this program by giving each instruction in Infer's intermediate language a symbolic cost (where `|.|` refers to the length of a list). Here---overlooking the actual constants---the analysis infers that this program’s asymptotic complexity is `O(|list|)`, that is loop is linear in the size of its input list. Then, at diff time, if a developer modifies this code to,
```java
void loop(ArrayList<Integer> list){
for (int i = 0; i <= list.size(); i++){
foo(i); // newly added function call
}
}
```
where `foo` has a linear cost in its parameter, then Infer automatically detects that the complexity of loop has increased from `O(|list|)` to `O(|list|^2)` and then reports an [`EXECUTION_TIME_COMPLEXITY_INCREASE`](execution_time_complexity_increase) issue.
Unlike other Infer analyses (which report found issues/bugs when running infer once), cost analysis only reports an issue for differential analysis (i.e. when comparing the analysis results on the original and the modified files). Instead, infer writes the execution cost of the program into `infer-out/costs-report.json` file. For each procedure, `costs-report.json` includes the actual polynomial (for the exection cost) along with the degree of the polynomial, the procedure name, line number etc.
Differential cost analysis in action:
- first run infer's cost analysis on `File.java` and rename `costs-report.json` (which is in `/infer-out`) to `previous-costs-report.json`
- modify the function as shown above
- re-run infer on `File.java` and rename `costs-report.json` to `current-costs-report.json`
- run `infer reportdiff --costs-current current-costs-report.json --costs-previous current-costs-report`.
- Inspect `infer-out/differential/introduced.json` to see the newly found complexity increase issue(s).
## Limitations
There are a number of known limitations to the design of the static cost analysis:
- InferBo's intervals are limited to affine expressions, not full-blown polynomials. Hence, we can automatically infer bounds involving square roots.
- We do not handle recursion.
- If the execution cost of a program depends on an unknown call (e.g. an unmodeled library calls), we can't compute a static upper bound and return T (unknown cost).
## List of Issue Types
The following issue types are reported by this checker:
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>CAddImplicitDeallocImpl (infer.ClangFrontend.CAddImplicitDeallocImpl)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">ClangFrontend</a>» CAddImplicitDeallocImpl</nav><h1>Module <code>ClangFrontend.CAddImplicitDeallocImpl</code></h1></header><dl><dtclass="spec value"id="val-process"><ahref="#val-process"class="anchor"></a><code><spanclass="keyword">val</span> process : <ahref="../../IR/Cfg/index.html#type-t">IR.Cfg.t</a><span>-></span><ahref="../../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span> unit</code></dt><dd><p>This models ARC implementation of dealloc, see https://clang.llvm.org/docs/AutomaticReferenceCounting.html#dealloc. Dealloc methods can be added to ObjC classes to free C memory for example, but the deallocation of the ObjC instance variables of the object is done automatically. So here we add this explicitely to Infer: we add calls to dealloc of the ObjC instance variables. Here we assume that every ObjC class has already a dealloc method, because if it doesn't exist we add an empty method in CFrontend_decl.create_and_process_dealloc_objc_impl TODO(T68411500): add calls to dealloc of the superclass.</p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>ClangFrontend__CAddImplicitDeallocImpl (infer.ClangFrontend__CAddImplicitDeallocImpl)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» ClangFrontend__CAddImplicitDeallocImpl</nav><h1>Module <code>ClangFrontend__CAddImplicitDeallocImpl</code></h1></header><dl><dtclass="spec value"id="val-process"><ahref="#val-process"class="anchor"></a><code><spanclass="keyword">val</span> process : <ahref="../IR/Cfg/index.html#type-t">IR.Cfg.t</a><span>-></span><ahref="../IR/Tenv/index.html#type-t">IR.Tenv.t</a><span>-></span> unit</code></dt><dd><p>This models ARC implementation of dealloc, see https://clang.llvm.org/docs/AutomaticReferenceCounting.html#dealloc. Dealloc methods can be added to ObjC classes to free C memory for example, but the deallocation of the ObjC instance variables of the object is done automatically. So here we add this explicitely to Infer: we add calls to dealloc of the ObjC instance variables. Here we assume that every ObjC class has already a dealloc method, because if it doesn't exist we add an empty method in CFrontend_decl.create_and_process_dealloc_objc_impl TODO(T68411500): add calls to dealloc of the superclass.</p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Help (infer.Integration.Help)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Integration</a>» Help</nav><h1>Module <code>Integration.Help</code></h1></header><dl><dtclass="spec value"id="val-list_checkers"><ahref="#val-list_checkers"class="anchor"></a><code><spanclass="keyword">val</span> list_checkers : unit <span>-></span> unit</code></dt><dd><p>print the list of all checkers</p></dd></dl><dl><dtclass="spec value"id="val-list_issue_types"><ahref="#val-list_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> list_issue_types : unit <span>-></span> unit</code></dt><dd><p>print the list of all known issue types</p></dd></dl><dl><dtclass="spec value"id="val-show_checkers"><ahref="#val-show_checkers"class="anchor"></a><code><spanclass="keyword">val</span> show_checkers : <span><ahref="../../IBase/Checker/index.html#type-t">IBase.Checker.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given checkers</p></dd></dl><dl><dtclass="spec value"id="val-show_issue_types"><ahref="#val-show_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> show_issue_types : <span><ahref="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given issue_types</p></dd></dl><dl><dtclass="spec value"id="val-write_website"><ahref="#val-write_website"class="anchor"></a><code><spanclass="keyword">val</span> write_website : <span>website_root:string</span><span>-></span> unit</code></dt><dd><p>generate files for the fbinfer.com website</p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Help (infer.Integration.Help)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Integration</a>» Help</nav><h1>Module <code>Integration.Help</code></h1></header><dl><dtclass="spec value"id="val-list_checkers"><ahref="#val-list_checkers"class="anchor"></a><code><spanclass="keyword">val</span> list_checkers : unit <span>-></span> unit</code></dt><dd><p>print the list of all checkers</p></dd></dl><dl><dtclass="spec value"id="val-list_issue_types"><ahref="#val-list_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> list_issue_types : unit <span>-></span> unit</code></dt><dd><p>print the list of all known issue types</p></dd></dl><dl><dtclass="spec value"id="val-show_checkers"><ahref="#val-show_checkers"class="anchor"></a><code><spanclass="keyword">val</span> show_checkers : <span><ahref="../../IBase/Checker/index.html#type-t">IBase.Checker.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given checkers</p></dd></dl><dl><dtclass="spec value"id="val-show_issue_types"><ahref="#val-show_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> show_issue_types : <span><ahref="../../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given issue_types</p></dd></dl><dl><dtclass="spec value"id="val-write_website"><ahref="#val-write_website"class="anchor"></a><code><spanclass="keyword">val</span> write_website : <span>website_root:string</span><span>-></span> unit</code></dt><dd><p>generate files for the fbinfer.com website</p></dd></dl><dl><dtclass="spec value"id="val-url_fragment_of_issue_type"><ahref="#val-url_fragment_of_issue_type"class="anchor"></a><code><spanclass="keyword">val</span> url_fragment_of_issue_type : string <span>-></span> string</code></dt><dd><p>given an issue type unique ID, return the URL fragment relative to the website documentation, e.g. <code>url_fragment_of_issue_type "NULL_DEREFERENCE"</code> is <code>"all-issue-types#null_dereference"</code></p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>XMLReport (infer.Integration.XMLReport)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Integration</a>» XMLReport</nav><h1>Module <code>Integration.XMLReport</code></h1></header><dl><dtclass="spec value"id="val-write"><ahref="#val-write"class="anchor"></a><code><spanclass="keyword">val</span> write : <span>xml_path:string</span><span>-></span><span>json_path:string</span><span>-></span> unit</code></dt><dd><p>read the JSON report at <code>json_path</code> and translates it to a PMD-style XML report in <code>xml_path</code></p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Integration__Help (infer.Integration__Help)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» Integration__Help</nav><h1>Module <code>Integration__Help</code></h1></header><dl><dtclass="spec value"id="val-list_checkers"><ahref="#val-list_checkers"class="anchor"></a><code><spanclass="keyword">val</span> list_checkers : unit <span>-></span> unit</code></dt><dd><p>print the list of all checkers</p></dd></dl><dl><dtclass="spec value"id="val-list_issue_types"><ahref="#val-list_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> list_issue_types : unit <span>-></span> unit</code></dt><dd><p>print the list of all known issue types</p></dd></dl><dl><dtclass="spec value"id="val-show_checkers"><ahref="#val-show_checkers"class="anchor"></a><code><spanclass="keyword">val</span> show_checkers : <span><ahref="../IBase/Checker/index.html#type-t">IBase.Checker.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given checkers</p></dd></dl><dl><dtclass="spec value"id="val-show_issue_types"><ahref="#val-show_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> show_issue_types : <span><ahref="../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given issue_types</p></dd></dl><dl><dtclass="spec value"id="val-write_website"><ahref="#val-write_website"class="anchor"></a><code><spanclass="keyword">val</span> write_website : <span>website_root:string</span><span>-></span> unit</code></dt><dd><p>generate files for the fbinfer.com website</p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Integration__Help (infer.Integration__Help)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» Integration__Help</nav><h1>Module <code>Integration__Help</code></h1></header><dl><dtclass="spec value"id="val-list_checkers"><ahref="#val-list_checkers"class="anchor"></a><code><spanclass="keyword">val</span> list_checkers : unit <span>-></span> unit</code></dt><dd><p>print the list of all checkers</p></dd></dl><dl><dtclass="spec value"id="val-list_issue_types"><ahref="#val-list_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> list_issue_types : unit <span>-></span> unit</code></dt><dd><p>print the list of all known issue types</p></dd></dl><dl><dtclass="spec value"id="val-show_checkers"><ahref="#val-show_checkers"class="anchor"></a><code><spanclass="keyword">val</span> show_checkers : <span><ahref="../IBase/Checker/index.html#type-t">IBase.Checker.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given checkers</p></dd></dl><dl><dtclass="spec value"id="val-show_issue_types"><ahref="#val-show_issue_types"class="anchor"></a><code><spanclass="keyword">val</span> show_issue_types : <span><ahref="../IBase/IssueType/index.html#type-t">IBase.IssueType.t</a> list</span><span>-></span> unit</code></dt><dd><p>show information about the given issue_types</p></dd></dl><dl><dtclass="spec value"id="val-write_website"><ahref="#val-write_website"class="anchor"></a><code><spanclass="keyword">val</span> write_website : <span>website_root:string</span><span>-></span> unit</code></dt><dd><p>generate files for the fbinfer.com website</p></dd></dl><dl><dtclass="spec value"id="val-url_fragment_of_issue_type"><ahref="#val-url_fragment_of_issue_type"class="anchor"></a><code><spanclass="keyword">val</span> url_fragment_of_issue_type : string <span>-></span> string</code></dt><dd><p>given an issue type unique ID, return the URL fragment relative to the website documentation, e.g. <code>url_fragment_of_issue_type "NULL_DEREFERENCE"</code> is <code>"all-issue-types#null_dereference"</code></p></dd></dl></div></body></html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Integration__XMLReport (infer.Integration__XMLReport)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» Integration__XMLReport</nav><h1>Module <code>Integration__XMLReport</code></h1></header><dl><dtclass="spec value"id="val-write"><ahref="#val-write"class="anchor"></a><code><spanclass="keyword">val</span> write : <span>xml_path:string</span><span>-></span><span>json_path:string</span><span>-></span> unit</code></dt><dd><p>read the JSON report at <code>json_path</code> and translates it to a PMD-style XML report in <code>xml_path</code></p></dd></dl></div></body></html>