[infer][PR] Add some minor changes to the website

Summary:
|                                                                   Before                                                                   |                                                                   After                                                                    |
| :----------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------: |
| ![Screen Shot 2020-03-29 at 9 48 36](https://user-images.githubusercontent.com/38746192/77837299-85b39180-71a2-11ea-8638-9da71569670b.png) | ![Screen Shot 2020-03-29 at 9 47 20](https://user-images.githubusercontent.com/38746192/77837286-63ba0f00-71a2-11ea-9a68-8d500e9b65d5.png) |
Pull Request resolved: https://github.com/facebook/infer/pull/1245

Reviewed By: dulmarod

Differential Revision: D20766774

Pulled By: jvillard

fbshipit-source-id: d7ab17998
master
BSKY 5 years ago committed by Facebook GitHub Bot
parent 08e7a11edf
commit d080b7806c

@ -34,8 +34,7 @@ jobs:
uses: actions/cache@v1.1.2 uses: actions/cache@v1.1.2
with: with:
path: ${{ steps.yarn.outputs.dir }} path: ${{ steps.yarn.outputs.dir }}
# prettier-ignore key: ${{ runner.os }}-yarn-${{ hashFiles('website/yarn.lock') }}
key: ${{ runner.os }}-yarn-${{ hashFiles(format('{0}{1}', github.workspace, '/website/yarn.lock')) }}
- name: Install packages - name: Install packages
working-directory: ${{ env.working-directory }} working-directory: ${{ env.working-directory }}

@ -1,2 +1,3 @@
.docusaurus/ .docusaurus/
build/ build/
static/

@ -0,0 +1,3 @@
{
"proseWrap": "always"
}

@ -13,8 +13,7 @@ The Infer GitHub repo has seen a lot of activity since then:
- 339 [issues](https://github.com/facebook/infer/issues) opened - 339 [issues](https://github.com/facebook/infer/issues) opened
- 44 [pull requests](https://github.com/facebook/infer/pulls) by 15 contributors - 44 [pull requests](https://github.com/facebook/infer/pulls) by 15 contributors
- 10 [releases](https://github.com/facebook/infer/releases/) - 10 [releases](https://github.com/facebook/infer/releases/)
- 5 [external companies](/#who-uses-infer) officially using Infer (add - 5 [external companies](/#who-uses-infer) officially using Infer (add yourself
yourself
[here](https://github.com/facebook/infer/edit/master/website/src/pages/index.js)) [here](https://github.com/facebook/infer/edit/master/website/src/pages/index.js))
Infer was presented at 13 academic and tech international conferences, and at 8 Infer was presented at 13 academic and tech international conferences, and at 8
@ -22,10 +21,9 @@ universities around the world!
Amongst these was Amongst these was
[Mobile@Scale](https://code.facebook.com/posts/1566627733629653/mobile-scale-london-recap/) [Mobile@Scale](https://code.facebook.com/posts/1566627733629653/mobile-scale-london-recap/)
in March 2016, where we in March 2016, where we [announced](/blog/2016/03/17/collaboration-with-spotify)
[announced](/blog/2016/03/17/collaboration-with-spotify) our collaboration our collaboration with [Spotify](https://www.spotify.com/). Around the same
with [Spotify](https://www.spotify.com/). Around the same time, time, [Uber](https://www.uber.com/) presented at
[Uber](https://www.uber.com/) presented at
[Droidcon SF](http://sf.droidcon.com/) their [Droidcon SF](http://sf.droidcon.com/) their
[Rave](https://github.com/uber-common/rave) + Infer combo to [Rave](https://github.com/uber-common/rave) + Infer combo to
[help their developers move fast](https://speakerdeck.com/lukestclair/frameworks-for-coding-confidence), [help their developers move fast](https://speakerdeck.com/lukestclair/frameworks-for-coding-confidence),

@ -8,7 +8,8 @@ title: Getting started with Infer
You can use Homebrew (Mac only), our binary releases, build infer from source, You can use Homebrew (Mac only), our binary releases, build infer from source,
or use our Docker image. or use our Docker image.
On Mac, the simplest way is to use [Homebrew](http://brew.sh/). Type this into a terminal: On Mac, the simplest way is to use [Homebrew](http://brew.sh/). Type this into a
terminal:
```sh ```sh
brew install infer brew install infer

@ -6,8 +6,8 @@ title: Hello, World!
Follow the instructions in this page to try Infer on a few small examples. You Follow the instructions in this page to try Infer on a few small examples. You
should be able to see the bugs reported by Infer, fix the bugs and run Infer should be able to see the bugs reported by Infer, fix the bugs and run Infer
again to check that they are not reported anymore. This should give you a first again to check that they are not reported anymore. This should give you a first
idea of how Infer works. See the [User Guide](infer-workflow) for more idea of how Infer works. See the [User Guide](infer-workflow) for more details
details about the use of Infer. about the use of Infer.
All these examples can be found in the All these examples can be found in the
[`infer/examples`](https://github.com/facebook/infer/tree/master/examples) [`infer/examples`](https://github.com/facebook/infer/tree/master/examples)

@ -25,8 +25,8 @@ infer-out
- `captured/` contains information for each file analyzed by Infer. See - `captured/` contains information for each file analyzed by Infer. See
[below](advanced-features#captured-folder) for more information. [below](advanced-features#captured-folder) for more information.
- `specs/` contains the [specs](advanced-features#print-the-specs) of - `specs/` contains the [specs](advanced-features#print-the-specs) of each
each function that was analyzed, as inferred by Infer. function that was analyzed, as inferred by Infer.
- `log/` and toplevel.log contains logs - `log/` and toplevel.log contains logs
- `report.txt` and `report.json` contain the Infer reports in text and JSON - `report.txt` and `report.json` contain the Infer reports in text and JSON
formats formats

@ -10,8 +10,8 @@ based on Abstract Interpretation.
Current Infer.AI's which are in production include ThreadSafety, Current Infer.AI's which are in production include ThreadSafety,
AnnotationReachability (e.g., can an allocation be reached from a AnnotationReachability (e.g., can an allocation be reached from a
@PerformanceCritical method), and @PerformanceCritical method), and
[immutable cast](checkers-bug-types#CHECKERS_IMMUTABLE_CAST) for Java, [immutable cast](checkers-bug-types#CHECKERS_IMMUTABLE_CAST) for Java, as well
as well as Static Initialization Order Fiasco for C++. as Static Initialization Order Fiasco for C++.
The current checkers can be run by adding the option `-a checkers` to the The current checkers can be run by adding the option `-a checkers` to the
analysis command as in this example: analysis command as in this example:

@ -61,8 +61,8 @@ would be to run Infer on your code, fix the errors generated, and run it again
to find possibly more errors or to check that all the errors have been fixed. to find possibly more errors or to check that all the errors have been fixed.
The errors will be displayed in the standard output and also in a file The errors will be displayed in the standard output and also in a file
`infer-out/report.txt`. We filter the bugs and show the ones that are most likely `infer-out/report.txt`. We filter the bugs and show the ones that are most
to be real. likely to be real.
## Global (default) and differential workflows ## Global (default) and differential workflows

@ -6,9 +6,8 @@ title: "Infer : AL"
For C/C++ and Objective-C languages, we provide a linters framework. These are For C/C++ and Objective-C languages, we provide a linters framework. These are
checks about the syntax of the program; it could be about a property, or about checks about the syntax of the program; it could be about a property, or about
code inside one method, or that a class or method have certain properties. We code inside one method, or that a class or method have certain properties. We
provide [a few checks](/docs/linters-bug-types) and we have developed a provide [a few checks](/docs/linters-bug-types) and we have developed a domain
domain specific language (DSL) to make it easier to write checks. specific language (DSL) to make it easier to write checks.
## AL: A declarative language for writing linters in Infer ## AL: A declarative language for writing linters in Infer

@ -401,8 +401,8 @@ Facebook engineers.
[A separate blog post looked at 100 recent data race fixes](https://code.facebook.com/posts/1537144479682247/finding-inter-procedural-bugs-at-scale-with-infer-static-analyzer/) [A separate blog post looked at 100 recent data race fixes](https://code.facebook.com/posts/1537144479682247/finding-inter-procedural-bugs-at-scale-with-infer-static-analyzer/)
in Infer's deployment in various bug categories, and for data races observed in Infer's deployment in various bug categories, and for data races observed
that 53 of them were inter-file (and thus involving multiple classes). that 53 of them were inter-file (and thus involving multiple classes).
[See above](racerd#interprocedural) for an example [See above](racerd#interprocedural) for an example of RacerD's interprocedural
of RacerD's interprocedural capabilities. capabilities.
One reaction to the challenge of developing effective static race detectors has One reaction to the challenge of developing effective static race detectors has
been to ask the programmer to do more work to help the analyzer. Examples of been to ask the programmer to do more work to help the analyzer. Examples of

@ -26,12 +26,12 @@ limitations, which we describe in terms of bug types and language features.
## Bug types <a name="bugtypes"></a> ## Bug types <a name="bugtypes"></a>
At present Infer is reporting on a restricted collection of At present Infer is reporting on a restricted collection of
[bug types](/docs/checkers-bug-types), typically involving null pointers [bug types](/docs/checkers-bug-types), typically involving null pointers and
and memory or resource leaks. The initial set of bug types Infer has focused on memory or resource leaks. The initial set of bug types Infer has focused on was
was driven by the most pressing needs for serving the Facebook mobile driven by the most pressing needs for serving the Facebook mobile developers.
developers. Our approach has been to report less initially, to iterate with Our approach has been to report less initially, to iterate with developers and
developers and provide value to them, and gradually expand what we can do while provide value to them, and gradually expand what we can do while still providing
still providing value. value.
Some bug types we don't report as of yet include Some bug types we don't report as of yet include

@ -3,12 +3,9 @@ id: separation-logic-and-bi-abduction
title: Separation logic and bi-abduction title: Separation logic and bi-abduction
--- ---
export const Math = ({ code }) => ( export const Math = ({ code }) => ( <img
<img
src={`https://math.now.sh?from=${encodeURIComponent(code)}&color=mediumslateblue`} src={`https://math.now.sh?from=${encodeURIComponent(code)}&color=mediumslateblue`}
style={{ height: '100%', verticalAlign: "middle" }} style={{ height: '100%', verticalAlign: "middle" }} /> );
/>
);
- [Separation logic](separation-logic-and-bi-abduction#separation-logic) - [Separation logic](separation-logic-and-bi-abduction#separation-logic)
- [Bi-abduction](separation-logic-and-bi-abduction#bi-abduction) - [Bi-abduction](separation-logic-and-bi-abduction#bi-abduction)
@ -16,14 +13,17 @@ style={{ height: '100%', verticalAlign: "middle" }}
## Separation logic ## Separation logic
Separation logic is a novel kind of mathematical logic which facilitates reasoning about Separation logic is a novel kind of mathematical logic which facilitates
mutations to computer memory. It enables scalability by breaking reasoning into chunks reasoning about mutations to computer memory. It enables scalability by breaking
corresponding to local operations on memory, and then composing reasoning into chunks corresponding to local operations on memory, and then
the reasoning chunks together. composing the reasoning chunks together.
Separation logic is based on a logical connective <Math code="\\( * \\)" /> called the _separating conjunction_ and pronounced "and separately". Separation logic formulae are interpreted over program allocated heaps. The logical formula Separation logic is based on a logical connective <Math code="\\( * \\)" />
<Math code="\\( A*B \\)" /> holds of a piece of program heap (a heaplet) when it can be divided into two sub-heaplets described by <Math code="\\(A\\)" /> and <Math code="\\(B\\)" />. called the _separating conjunction_ and pronounced "and separately". Separation
For example, the formula logic formulae are interpreted over program allocated heaps. The logical formula
<Math code="\\( A*B \\)" /> holds of a piece of program heap (a heaplet) when it
can be divided into two sub-heaplets described by <Math code="\\(A\\)" /> and
<Math code="\\(B\\)" />. For example, the formula
--- ---
@ -31,19 +31,33 @@ For example, the formula
--- ---
can be read "<Math code="\\(x\\)" /> points to <Math code="\\(y\\)" /> and separately <Math code="\\(y\\)" /> points to <Math code="\\(x\\)" />". This formula describes precisely two allocated memory cells. The first cell is allocated at the address denoted by the pointer <Math code="\\(x\\)" /> and the content of this cell is the value of <Math code="\\(y\\)" />. can be read "<Math code="\\(x\\)" /> points to <Math code="\\(y\\)" /> and
The second cell is allocated at the address denoted by the pointer <Math code="\\(y\\)" /> and the content of this second cell is the value of <Math code="\\(x\\)" />. Crucially, we know that there are precisely two cells because <Math code="\\( * \\)" /> stipulates that they are separated and therefore the cells are allocated in two different parts of memory. In other words, <Math code="\\( * \\)" /> separately <Math code="\\(y\\)" /> points to <Math code="\\(x\\)" />". This
says that <Math code="\\(x\\)" /> and <Math code="\\(y\\)" /> do not hold the same value (i.e., these pointers are not aliased). formula describes precisely two allocated memory cells. The first cell is
The heaplet partitioning defined by the formula above can visualized like so: allocated at the address denoted by the pointer <Math code="\\(x\\)" /> and the
content of this cell is the value of <Math code="\\(y\\)" />. The second cell is
allocated at the address denoted by the pointer <Math code="\\(y\\)" /> and the
content of this second cell is the value of <Math code="\\(x\\)" />. Crucially,
we know that there are precisely two cells because <Math code="\\( * \\)" />
stipulates that they are separated and therefore the cells are allocated in two
different parts of memory. In other words, <Math code="\\( * \\)" /> says that
<Math code="\\(x\\)" /> and <Math code="\\(y\\)" /> do not hold the same value
(i.e., these pointers are not aliased). The heaplet partitioning defined by the
formula above can visualized like so:
![](/img/SepSplit.jpg) ![](/img/SepSplit.jpg)
The important thing about separating conjunction is The important thing about separating conjunction is the way that it fits
the way that it fits together with mutation to computer memory; reasoning about program commands together with mutation to computer memory; reasoning about program commands
tends to work by updating <Math code="\\(*\\)" />-conjuncts in-place, mimicking the operational in-place update of RAM. tends to work by updating <Math code="\\(*\\)" />-conjuncts in-place, mimicking
the operational in-place update of RAM.
Separation logic uses Hoare triples of the form <Math code="\\( \lbrace pre \rbrace prog \lbrace post \rbrace \\)" /> where <Math code="\\(pre\\)" /> is the precondition, <Math code="\\(prog\\)" /> a program part, and <Math code="\\(post\\)" /> Separation logic uses Hoare triples of the form
the postcondition. Triples are abstract specifications of the behavior of the program. For example, we could take <Math code="\\( \lbrace pre \rbrace prog \lbrace post \rbrace \\)" /> where
<Math code="\\(pre\\)" /> is the precondition, <Math code="\\(prog\\)" /> a
program part, and <Math code="\\(post\\)" /> the postcondition. Triples are
abstract specifications of the behavior of the program. For example, we could
take
--- ---
@ -51,11 +65,14 @@ the postcondition. Triples are abstract specifications of the behavior of the pr
--- ---
as a specification for a method which closes a resource given to it as a parameter. as a specification for a method which closes a resource given to it as a
parameter.
Now, suppose we have two resources <Math code="\\( r\_1 \\)" /> and <Math code="\\( r\_2 \\)" />, described by <Math code="\\(r\_1 \mapsto open * r\_2 \mapsto open\\)" /> Now, suppose we have two resources <Math code="\\( r\_1 \\)" /> and
and we close the first of them. We think operationally in terms of updating the memory in place, leaving \\(r_2 \mapsto open\\) alone, <Math code="\\( r\_2 \\)" />, described by
as described by this triple: <Math code="\\(r\_1 \mapsto open * r\_2 \mapsto open\\)" /> and we close the
first of them. We think operationally in terms of updating the memory in place,
leaving \\(r_2 \mapsto open\\) alone, as described by this triple:
--- ---
@ -63,12 +80,13 @@ as described by this triple:
--- ---
What we have here is the that specification (spec) described how <Math code="\\(closeResource()\\)" /> works by mentioning only one What we have here is the that specification (spec) described how
piece of state, what is sometimes called a small specification, <Math code="\\(closeResource()\\)" /> works by mentioning only one piece of
and in (use) we use that specification to update a larger precondition in place. state, what is sometimes called a small specification, and in (use) we use that
specification to update a larger precondition in place.
This is an instance of a general pattern. This is an instance of a general pattern. There is a rule that lets you go from
There is a rule that lets you go from smaller to bigger specifications smaller to bigger specifications
--- ---
@ -79,21 +97,24 @@ There is a rule that lets you go from smaller to bigger specifications
Our passage from (spec) to (use) is obtained by taking Our passage from (spec) to (use) is obtained by taking
- <Math code="\\(pre\\)" /> to be <Math code="\\(r\_1 \mapsto open\\)" /> - <Math code="\\(pre\\)" /> to be <Math code="\\(r\_1 \mapsto open\\)" />
- <Math code="\\(post\\)" /> to be <Math code="\\(r\_1 \mapsto closed \\)" />, and - <Math code="\\(post\\)" /> to be <Math code="\\(r\_1 \mapsto closed \\)" />,
and
- <Math code="\\(frame\\)" /> to be <Math code="\\(r\_2 \mapsto open \\)" /> - <Math code="\\(frame\\)" /> to be <Math code="\\(r\_2 \mapsto open \\)" />
This rule is called the _frame rule_ of separation logic. It is named after the frame problem, a classic problem in artificial intelligence. This rule is called the _frame rule_ of separation logic. It is named after the
Generally, the <Math code="\\(frame\\)" /> describes state that remains unchanged; the terminology comes from the analogy of frame problem, a classic problem in artificial intelligence. Generally, the
a background scene in an animation as unchanging while the objects and characters within the scene change. <Math code="\\(frame\\)" /> describes state that remains unchanged; the
terminology comes from the analogy of a background scene in an animation as
unchanging while the objects and characters within the scene change.
The frame rule is the key to the principle of local reasoning in separation logic: reasoning and specifications The frame rule is the key to the principle of local reasoning in separation
should concentrate on the resources that a program accesses (the footprint), without mentioning what logic: reasoning and specifications should concentrate on the resources that a
doesn't change. program accesses (the footprint), without mentioning what doesn't change.
## Bi-abduction ## Bi-abduction
Bi-abduction is a form of logical inference for separation logic which automates the key ideas about local Bi-abduction is a form of logical inference for separation logic which automates
reasoning. the key ideas about local reasoning.
Usually, logic works with validity or entailment statements like Usually, logic works with validity or entailment statements like
@ -103,9 +124,9 @@ Usually, logic works with validity or entailment statements like
--- ---
which says that <Math code="\\(A\\)" /> implies <Math code="\\(B\\)" />. Infer uses an extension of this inference question in an internal which says that <Math code="\\(A\\)" /> implies <Math code="\\(B\\)" />. Infer
theorem prover while it runs over program statements. uses an extension of this inference question in an internal theorem prover while
Infer's question it runs over program statements. Infer's question
--- ---
@ -113,17 +134,24 @@ Infer's question
--- ---
is called _bi-abduction_. The problem here is for the theorem prover to <i> discover </i> a pair of frame and antiframe formulae that make the entailment statement valid. is called _bi-abduction_. The problem here is for the theorem prover to <i>
discover </i> a pair of frame and antiframe formulae that make the entailment
statement valid.
Global analyses of large programs are normally computational untractable. However, Global analyses of large programs are normally computational untractable.
bi-abduction allows to break the large analysis of a large program in small independent analyses of its procedures. This gives Infer the ability to scale independently of the size of the analyzed code. Moreover, by breaking the analysis in small However, bi-abduction allows to break the large analysis of a large program in
independent parts, when the full program is analyzed again because small independent analyses of its procedures. This gives Infer the ability to
of a code change the analysis results of the unchanged part of the scale independently of the size of the analyzed code. Moreover, by breaking the
code can be reused and only the code change needs to be re-analyzed. This process is called incremental analysis and it analysis in small independent parts, when the full program is analyzed again
is very powerful when integrating a static analysis tool like infer in a development environment. because of a code change the analysis results of the unchanged part of the code
can be reused and only the code change needs to be re-analyzed. This process is
called incremental analysis and it is very powerful when integrating a static
analysis tool like infer in a development environment.
In order to be able to decompose a global analysis in small independent analyses, let's first consider how a function In order to be able to decompose a global analysis in small independent
call is analyzed in separation logic. Assume we have the following spec for a function <Math code="\\( f() \\)" />: analyses, let's first consider how a function call is analyzed in separation
logic. Assume we have the following spec for a function
<Math code="\\( f() \\)" />:
--- ---
@ -131,9 +159,10 @@ call is analyzed in separation logic. Assume we have the following spec for a fu
--- ---
and by analyzing the caller function, we compute that before and by analyzing the caller function, we compute that before the call of
the call of <Math code="\\( f \\)" />, the formula <Math code="\\( CallingState \\)" /> hold. Then <Math code="\\( f \\)" />, the formula <Math code="\\( CallingState \\)" />
to utilize the specification of <Math code="\\( f \\)" /> the following implication must holds: hold. Then to utilize the specification of <Math code="\\( f \\)" /> the
following implication must holds:
--- ---
@ -141,9 +170,10 @@ to utilize the specification of <Math code="\\( f \\)" /> the following implicat
--- ---
Given that, Given that, bi-abduction is used at procedure call sites for two reasons: to
bi-abduction is used at procedure call sites for two reasons: to discover missing state that is needed for the above implication to hold and allow the analysis discover missing state that is needed for the above implication to hold and
to proceed (the antiframe) as well as state that the procedure leaves unchanged (the frame). allow the analysis to proceed (the antiframe) as well as state that the
procedure leaves unchanged (the frame).
To see how this works suppose we have some bare code To see how this works suppose we have some bare code
@ -153,12 +183,10 @@ To see how this works suppose we have some bare code
--- ---
but no overall specification; but no overall specification; we are going to describe how to discover a
we are going to describe how to discover a pre/post spec for it. pre/post spec for it. Considering the first statement and the (spec) above, the
Considering the first statement and the (spec) above, the human might say: if only we had human might say: if only we had <Math code="\\(r1 \mapsto open\\)" /> in the
<Math code="\\(r1 \mapsto open\\)" /> in the precondition then we could proceed. precondition then we could proceed. Technically, we ask a bi-abduction question
Technically,
we ask a bi-abduction question
--- ---
@ -166,8 +194,11 @@ we ask a bi-abduction question
--- ---
and we can fill this in easily by picking <Math code="\\(antiframe = r1 \mapsto open\\)" /> and <Math code="\\(frame = emp\\)" />, and we can fill this in easily by picking
where emp means the empty state. The emp is recording that at the start we presume nothing. So we obtain the trivially true implication: <Math code="\\(antiframe = r1 \mapsto open\\)" /> and
<Math code="\\(frame = emp\\)" />, where emp means the empty state. The emp is
recording that at the start we presume nothing. So we obtain the trivially true
implication:
--- ---
@ -183,9 +214,9 @@ which, by applying logical rules, can be re-written equivalently to:
--- ---
Notice that this satisfy the (Function Call) requirement to correctly make the call. Notice that this satisfy the (Function Call) requirement to correctly make the
So let's add that information in the pre, and while we are at it call. So let's add that information in the pre, and while we are at it record
record the information in the post of the first statement that comes from (spec). the information in the post of the first statement that comes from (spec).
--- ---
@ -196,9 +227,12 @@ record the information in the post of the first statement that comes from (spec)
--- ---
Now, let's move to the second statement. Its precondition <Math code="\\(r1 \mapsto closed\\)" /> in the partial symbolic execution trace just given Now, let's move to the second statement. Its precondition
does not have the information needed by <Math code="\\(closeResource(r2)\\)" />, so we can fill that in and continue by <Math code="\\(r1 \mapsto closed\\)" /> in the partial symbolic execution trace
putting <Math code="\\(r2 \mapsto open\\)" /> in the pre. While we are at it we can thread this assertion back to the beginning. just given does not have the information needed by
<Math code="\\(closeResource(r2)\\)" />, so we can fill that in and continue by
putting <Math code="\\(r2 \mapsto open\\)" /> in the pre. While we are at it we
can thread this assertion back to the beginning.
--- ---
@ -209,7 +243,8 @@ putting <Math code="\\(r2 \mapsto open\\)" /> in the pre. While we are at it we
--- ---
This information on what to thread backwards can be obtained as the antiframe part of the bi-abduction question This information on what to thread backwards can be obtained as the antiframe
part of the bi-abduction question
--- ---
@ -219,9 +254,12 @@ This information on what to thread backwards can be obtained as the antiframe pa
where the solution picks where the solution picks
<Math code="\\(antiframe = r2 \mapsto open\\) and \\(frame = r1 \mapsto closed\\)" />. <Math code="\\(antiframe = r2 \mapsto open\\) and \\(frame = r1 \mapsto closed\\)" />.
Note that the antiframe is precisely the information missing from the precondition in order for <Math code="\\(closeResource(r2)\\)" /> to proceed. On the other hand, the frame <Math code="\\(r1 \mapsto closed\\)" /> is the portion of state not changed by <Math code="\\(closeResource(r2)\\)" />; Note that the antiframe is precisely the information missing from the
we can thread that through to the overall postconditon precondition in order for <Math code="\\(closeResource(r2)\\)" /> to proceed. On
(as justified by the frame rule), giving us the other hand, the frame <Math code="\\(r1 \mapsto closed\\)" /> is the portion
of state not changed by <Math code="\\(closeResource(r2)\\)" />; we can thread
that through to the overall postconditon (as justified by the frame rule),
giving us
--- ---
@ -233,39 +271,53 @@ we can thread that through to the overall postconditon
--- ---
Thus, we have obtained a pre and post for this code by symbolically executing it, using bi-abduction Thus, we have obtained a pre and post for this code by symbolically executing
to discover preconditions (abduction of antiframes) as well as untouched portions of memory (frames) as we go along. it, using bi-abduction to discover preconditions (abduction of antiframes) as
well as untouched portions of memory (frames) as we go along.
In general, bi-abduction
provides a way to infer a pre/post specs from bare code, as long as we know specs for the primitives at the base level of the code. The human does not need to write preconditions and postconditions for all the procedures, In general, bi-abduction provides a way to infer a pre/post specs from bare
which is the key to having a high level of automation. code, as long as we know specs for the primitives at the base level of the code.
This is the basis for how Infer works, why it can scale, and how it can analyze code changes incrementally. The human does not need to write preconditions and postconditions for all the
procedures, which is the key to having a high level of automation. This is the
Context: The logical terminology we have been using here comes from AI and philosophy of science. basis for how Infer works, why it can scale, and how it can analyze code changes
Abductive inference was introduced by the philosopher Charles Peirce, and described as the mechanism incrementally.
underpinning hypothesis formation (or, guessing what might be true about the world), the most
creative part of the scientific process. Context: The logical terminology we have been using here comes from AI and
Abduction and the frame problem have both attracted significant attention in AI. philosophy of science. Abductive inference was introduced by the philosopher
Infer uses an automated form of abduction to generate Charles Peirce, and described as the mechanism underpinning hypothesis formation
preconditions describing the memory that a program touches (the antiframe part above), and frame inference to (or, guessing what might be true about the world), the most creative part of the
discover what isn't touched. scientific process. Abduction and the frame problem have both attracted
Infer then uses deductive reasoning to significant attention in AI. Infer uses an automated form of abduction to
calculate a formula describing the effect of a program, starting from the preconditions. generate preconditions describing the memory that a program touches (the
In a sense, Infer approaches automated reasoning about programs by mimicking what a human might do when trying to understand a program: it abduces what the program needs, and deduces conclusions of that. antiframe part above), and frame inference to discover what isn't touched. Infer
It is when the reasoning goes wrong that Infer reports a potential bug. then uses deductive reasoning to calculate a formula describing the effect of a
program, starting from the preconditions. In a sense, Infer approaches automated
This description is by necessity simplified compared to what Infer actually does. reasoning about programs by mimicking what a human might do when trying to
More technical information can be found in the following papers. The descriptions in the papers are understand a program: it abduces what the program needs, and deduces conclusions
precise, but still simplified; there are many engineering decisions not recorded there. Finally, beyond the papers, of that. It is when the reasoning goes wrong that Infer reports a potential bug.
you can read the source code if you wish!
This description is by necessity simplified compared to what Infer actually
does. More technical information can be found in the following papers. The
descriptions in the papers are precise, but still simplified; there are many
engineering decisions not recorded there. Finally, beyond the papers, you can
read the source code if you wish!
## Technical papers ## Technical papers
The following papers contain some of the technical background on Infer and information on how it is used inside Facebook. The following papers contain some of the technical background on Infer and
information on how it is used inside Facebook.
- <a href="http://link.springer.com/chapter/10.1007%2F3-540-44802-0_1">Local Reasoning about Programs that Alter Data Structures.</a> An early separation logic paper which advanced ideas about local reasoning and the frame rule.
- <a href="http://link.springer.com/chapter/10.1007/11804192_6">Smallfoot: Modular Automatic Assertion Checking with Separation Logic.</a> First separation logic verification tool, introduced frame inference - <a href="http://link.springer.com/chapter/10.1007%2F3-540-44802-0_1">Local
- <a href="http://link.springer.com/chapter/10.1007%2F11691372_19">A Local Shape Analysis Based on Separation Logic.</a> Separation logic meets abstract interpretation; calculating loop invariants via a fixed-point computation. Reasoning about Programs that Alter Data Structures.</a> An early separation
- <a href="http://dl.acm.org/citation.cfm?id=2049700">Compositional Shape Analysis by Means of Bi-Abduction.</a> logic paper which advanced ideas about local reasoning and the frame rule.
The bi-abduction paper. - <a href="http://link.springer.com/chapter/10.1007/11804192_6">Smallfoot:
- <a href="https://research.facebook.com/publications/moving-fast-with-software-verification/">Moving Fast with Software Verification.</a> A paper about the way we use Infer at Facebook. Modular Automatic Assertion Checking with Separation Logic.</a> First
separation logic verification tool, introduced frame inference
- <a href="http://link.springer.com/chapter/10.1007%2F11691372_19">A Local Shape
Analysis Based on Separation Logic.</a> Separation logic meets abstract
interpretation; calculating loop invariants via a fixed-point computation.
- <a href="http://dl.acm.org/citation.cfm?id=2049700">Compositional Shape
Analysis by Means of Bi-Abduction.</a> The bi-abduction paper.
- <a href="https://research.facebook.com/publications/moving-fast-with-software-verification/">Moving
Fast with Software Verification.</a> A paper about the way we use Infer at
Facebook.

@ -5,15 +5,16 @@ title: Checkers bug types
Here is an overview of the types of bugs currently reported by Infer checkers. Here is an overview of the types of bugs currently reported by Infer checkers.
## Captured Strong Self
## Captured Strong Self This will happen in one of two cases generally:
This will happen in one of two cases generally:
1. One uses `weakSelf` but forgot to declare it weak first. 1. One uses `weakSelf` but forgot to declare it weak first.
2. One is using `strongSelf`, declared in a block, in another (inside) block. This changes the delicate balance of the 2. One is using `strongSelf`, declared in a block, in another (inside) block.
`weakSelf`/`strongSelf` use in the first block. The retain cycle is avoided there because `strongSelf` is a local variable This changes the delicate balance of the `weakSelf`/`strongSelf` use in the
to the block. If `strongSelf` is used in the inside block, then it's not a local variable anymore, but a captured variable. first block. The retain cycle is avoided there because `strongSelf` is a
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.
## Checkers immutable cast ## Checkers immutable cast
@ -33,7 +34,6 @@ 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.
## Deadlock ## Deadlock
This error is currently reported in Java. A deadlock occurs when two distinct This error is currently reported in Java. A deadlock occurs when two distinct
@ -97,13 +97,11 @@ To suppress reports of deadlocks in a method `m()` use the
} }
``` ```
## Dead store ## Dead store
This error is reported in C++. It fires when the value assigned to a variables This error is reported in C++. It fires when the value assigned to a variables
is never used (e.g., `int i = 1; i = 2; return i;`). is never used (e.g., `int i = 1; i = 2; return i;`).
## Empty vector access ## Empty vector access
This error type is reported only in C++, in versions >= C++11. This error type is reported only in C++, in versions >= C++11.
@ -119,7 +117,6 @@ int foo(){
} }
``` ```
## Field should be nullable ## Field should be nullable
This error type is reported in Java. It fires when a field is not marked This error type is reported in Java. It fires when a field is not marked
@ -169,7 +166,6 @@ Action:
... ...
``` ```
## Fragment retains view ## Fragment retains view
This error type is Android-specific. It fires when a `Fragment` type fails to This error type is Android-specific. It fires when a `Fragment` type fails to
@ -182,7 +178,6 @@ retain a useless reference to that `View` that will not be cleaned up until the
Action: Nullify the `View` in question in `onDestroyView`. Action: Nullify the `View` in question in `onDestroyView`.
## Interface not thread-safe ## Interface not thread-safe
This error indicates that you have invoked an interface method not annotated This error indicates that you have invoked an interface method not annotated
@ -192,7 +187,6 @@ interface or to the interface method. For background on why these annotations
are needed, see the detailed explanation are needed, see the detailed explanation
[here](racerd#interface-not-thread-safe). [here](racerd#interface-not-thread-safe).
## Ivar not null checked ## Ivar not null checked
This error type is only reported in Objective-C. This is similar to Null This error type is only reported in Objective-C. This is similar to Null
@ -210,7 +204,6 @@ parameter is `nil`. For example:
Possible solutions are adding a check for `nil`, or making sure that the method Possible solutions are adding a check for `nil`, or making sure that the method
is not called with `nil`. is not called with `nil`.
## Lock Consistency Violation ## Lock Consistency Violation
This is a C++ and Objective C error reported whenever: This is a C++ and Objective C error reported whenever:
@ -234,7 +227,6 @@ container (an array, a vector, etc).
Infer considers a method as private if it's not exported in the header-file Infer considers a method as private if it's not exported in the header-file
interface. interface.
## Mixed self weakSelf ## Mixed self weakSelf
This happens when an Objective-C block captures both `self` and `weakSelf`, a This happens when an Objective-C block captures both `self` and `weakSelf`, a
@ -242,11 +234,13 @@ weak pointer to `self`. Possibly the developer meant to capture only `weakSelf`
to avoid a retain cycle, but made a typo and used `self` as well in the block, to avoid a retain cycle, but made a typo and used `self` as well in the block,
instead of `strongSelf`. In this case, this could cause a retain cycle. instead of `strongSelf`. In this case, this could cause a retain cycle.
## Multiple weakSelf ## Multiple weakSelf
An Objective-C block uses `weakSelf` more than once. This could lead to unexpected behaviour. Even if `weakSelf` is not nil in the first use, it could be nil in the following uses since the object that `weakSelf` points to could be freed anytime. One should assign it to a strong pointer first, and then use it in the block. An Objective-C block uses `weakSelf` more than once. This could lead to
unexpected behaviour. Even if `weakSelf` is not nil in the first use, it could
be nil in the following uses since the object that `weakSelf` points to could be
freed anytime. One should assign it to a strong pointer first, and then use it
in the block.
## Memory leak ## Memory leak
@ -275,7 +269,6 @@ objects from Core Foundation or Core Graphics don't get released.
} }
``` ```
## Null Dereference ## Null Dereference
Infer reports null dereference bugs in C, Objective-C and Java. The issue is Infer reports null dereference bugs in C, Objective-C and Java. The issue is
@ -376,7 +369,6 @@ master. In the future we might include analysis directives (hey, analyzer, p is
not null!) like in Hack that tell the analyzer the information that you know, not null!) like in Hack that tell the analyzer the information that you know,
but that is for later. but that is for later.
## Parameter not null checked ## Parameter not null checked
This error type is reported only in Objective-C. It is similar to Null This error type is reported only in Objective-C. It is similar to Null
@ -404,7 +396,6 @@ is not called with `nil`. When an argument will never be `nil`, you can add the
annotation `nonnull` to the argument's type, to tell Infer (and the type annotation `nonnull` to the argument's type, to tell Infer (and the type
system), that the argument won't be `nil`. This will silence the warning. system), that the argument won't be `nil`. This will silence the warning.
## Premature nil termination argument ## Premature nil termination argument
This error type is reported in C and Objective-C. In many variadic methods, This error type is reported in C and Objective-C. In many variadic methods,
@ -423,7 +414,6 @@ An example of such variadic methods is
In this example, if `str` is `nil` then an array `@[@"aaa"]` of size 1 will be In this example, if `str` is `nil` then an array `@[@"aaa"]` of size 1 will be
created, and not an array `@[@"aaa", str, @"bbb"]` of size 3 as expected. created, and not an array `@[@"aaa", str, @"bbb"]` of size 3 as expected.
## Resource leak ## Resource leak
Infer reports resource leaks in C, Objective-C and Java. In general, resources Infer reports resource leaks in C, Objective-C and Java. In general, resources
@ -700,7 +690,6 @@ way. This just illustrates that, though you might hear people say that
try-with-resources "solves" the resource problem, it does not. It is very try-with-resources "solves" the resource problem, it does not. It is very
useful, but you cannot use it blindly when you see a resource-allocation site. useful, but you cannot use it blindly when you see a resource-allocation site.
## Retain cycle ## Retain cycle
A retain cycle is a situation when object A retains object B, and object B A retain cycle is a situation when object A retains object B, and object B
@ -734,7 +723,6 @@ hierarchy:
@end @end
``` ```
## Static initialization order fiasco ## Static initialization order fiasco
This error is reported in C++. It fires when the initialization of a static This error is reported in C++. It fires when the initialization of a static
@ -745,13 +733,12 @@ already initialized or not at that point.
For more technical definition and techniques to avoid/remediate, see the For more technical definition and techniques to avoid/remediate, see the
[FAQ](https://isocpp.org/wiki/faq/ctors#static-init-order). [FAQ](https://isocpp.org/wiki/faq/ctors#static-init-order).
## Thread-safety violation ## Thread-safety violation
This warning indicates a potential data race in Java. The analyser is called This warning indicates a potential data race in Java. The analyser is called
RacerD and this section gives brief but a mostly complete description of its RacerD and this section gives brief but a mostly complete description of its
features. See the [RacerD page](/docs/racerd) for more in-depth information features. See the [RacerD page](/docs/racerd) for more in-depth information and
and examples. examples.
NB this warning **is not related to @GuardedBy** and not issued by the same NB this warning **is not related to @GuardedBy** and not issued by the same
analysis. analysis.
@ -843,7 +830,6 @@ These annotations can be found at `com.facebook.infer.annotation.*`.
other threads. The main utility of this annotation is in interfaces, where other threads. The main utility of this annotation is in interfaces, where
Infer cannot look up the implementation and decide for itself. Infer cannot look up the implementation and decide for itself.
## UI Thread Starvation ## UI Thread Starvation
This error is reported in Java, and specifically on Android. These reports are This error is reported in Java, and specifically on Android. These reports are
@ -902,7 +888,6 @@ This instructs Infer to filter out any potentially blocking calls in `m()`
due to a call to `m()`. You will need to set up your class path appropriately to due to a call to `m()`. You will need to set up your class path appropriately to
include the JAR files in `infer/annotations` for this annotation to work. include the JAR files in `infer/annotations` for this annotation to work.
## Strict mode violation ## Strict mode violation
Android has a feature called Android has a feature called
@ -915,7 +900,6 @@ ability to statically detect such violations.
To suppress this warning, it's enough to annotate the offending method with To suppress this warning, it's enough to annotate the offending method with
`@SuppressLint("STRICT_MODE_VIOLATION")`. `@SuppressLint("STRICT_MODE_VIOLATION")`.
## StrongSelf Not Checked ## StrongSelf Not Checked
When a block captures `weakSelf` in the following pattern: When a block captures `weakSelf` in the following pattern:
@ -931,7 +915,6 @@ the variable `strongSelf` should be checked for `null` before being used,
otherwise this could cause a crash because the weak pointer `weakSelf` could be otherwise this could cause a crash because the weak pointer `weakSelf` could be
`null`. `null`.
## Unsafe GuardedBy Access ## Unsafe GuardedBy Access
Infer reports issues when a field or method is accessed when a lock is not held, Infer reports issues when a field or method is accessed when a lock is not held,
@ -1010,8 +993,9 @@ Outer.java:13: error: UNSAFE_GUARDED_BY_ACCESS
``` ```
## weakSelf In NOESCAPE Block ## weakSelf In NOESCAPE Block
In many methods that take a block as an argument, the block position is annotated with NS_NOESCAPE to mark that the block In many methods that take a block as an argument, the block position is
passed to this method won't be leaving the current scope. In those cases, there is no need to use `weakSelf` to avoid the block to capture `self`. This issue type flags this case. annotated with NS_NOESCAPE to mark that the block passed to this method won't be
leaving the current scope. In those cases, there is no need to use `weakSelf` to
avoid the block to capture `self`. This issue type flags this case.

@ -32,7 +32,6 @@ could originate in third party libraries which are not under your control, and
the best place to check for null is typically immediately after calling these the best place to check for null is typically immediately after calling these
library functions. library functions.
## Eradicate null method call ## Eradicate null method call
A method call x.m(...) where x could be null. A method call x.m(...) where x could be null.
@ -49,7 +48,6 @@ class C {
Action: Same as for Null field access. Action: Same as for Null field access.
## Eradicate field not nullable ## Eradicate field not nullable
An assignment x.f = v where v could be null and field f is not annotated with An assignment x.f = v where v could be null and field f is not annotated with

@ -5,14 +5,14 @@ title: Linters bug types
Here is an overview of the linter checks we provide in Infer: Here is an overview of the linter checks we provide in Infer:
## Assign pointer warning ## Assign pointer warning
This check fires when a pointer to an Obj-C object is tagged with an `assign` This check fires when a pointer to an Obj-C object is tagged with an `assign`
property (similar to the `-Warc-unsafe-retained-assign` compiler flag). Not property (similar to the `-Warc-unsafe-retained-assign` compiler flag). Not
holding a strong reference to the object makes it easy to accidentally create holding a strong reference to the object makes it easy to accidentally create
and use a dangling pointer. and use a dangling pointer.
## Bad pointer comparison ## Bad pointer comparison
Infer reports these warnings in Objective-C when a boxed primitive type such as Infer reports these warnings in Objective-C when a boxed primitive type such as
`NSNumber *` is coerced to a boolean in a comparison. For example, consider the `NSNumber *` is coerced to a boolean in a comparison. For example, consider the
@ -29,7 +29,7 @@ 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.
## C++ reference captured in Objective-C block ## C++ reference captured in Objective-C block
With this check, Infer detects C++ references captured in a block. Doing this is With this check, Infer detects C++ references captured in a block. Doing this is
almost always wrong. The reason is that C++ references are not managed pointers almost always wrong. The reason is that C++ references are not managed pointers
@ -46,7 +46,7 @@ const int copied_v = v;
}; };
``` ```
## Direct atomic property access ## Direct atomic property access
This check warns you when you are accessing an atomic property directly with an This check warns you when you are accessing an atomic property directly with an
ivar. This makes the atomic property not atomic anymore. So potentially you may ivar. This makes the atomic property not atomic anymore. So potentially you may
@ -54,14 +54,14 @@ get a race condition.
To fix the problem you need to access properties with their getter or setter. To fix the problem you need to access properties with their getter or setter.
## Global variable initialized with function or method call ## Global variable initialized with function or method call
This checker warns you when the initialization of global variable contain a This checker warns you when the initialization of global variable contain a
method or function call. The warning wants to make you aware that some functions method or function call. The warning wants to make you aware that some functions
are expensive. As the global variables are initialized before main() is called, are expensive. As the global variables are initialized before main() is called,
these initializations can slow down the start-up time of an app. these initializations can slow down the start-up time of an app.
## Registered observer being deallocated ## Registered observer being deallocated
Objects register with a notification center to receive notifications. This check Objects register with a notification center to receive notifications. This check
warns you when an object is registered as observer of a NSNotificationCenter but warns you when an object is registered as observer of a NSNotificationCenter but
@ -69,13 +69,13 @@ it is never unregistered. This is problematic as if the object is not
unregistered the notification center can still send notification even after the unregistered the notification center can still send notification even after the
object has been deallocated. In that case we would get a crash. object has been deallocated. In that case we would get a crash.
## Strong delegate warning ## Strong delegate warning
This check warns you when you have a property called delegate or variations This check warns you when you have a property called delegate or variations
thereof which is declared strong. The idea is that delegates should generally be thereof which is declared strong. The idea is that delegates should generally be
weak, otherwise this may cause retain cycles. weak, otherwise this may cause retain cycles.
## Unavailable api in supported ios sdk ## Unavailable api in supported ios sdk
This checks warns you when you are using an API (constant, method call, etc.) This checks warns you when you are using an API (constant, method call, etc.)
that is only defined in a version higher than the version that you support. To that is only defined in a version higher than the version that you support. To
@ -98,14 +98,14 @@ if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_9_0) {
} }
``` ```
## Pointer To const Objective-C Class ## Pointer To const Objective-C Class
In Objective-C, `const Class *` represents a mutable pointer pointing to an In Objective-C, `const Class *` represents a mutable pointer pointing to an
Objective-C class where the ivars cannot be changed. More useful is Objective-C class where the ivars cannot be changed. More useful is
`Class *const` instead, meaning the destination of the pointer cannot be `Class *const` instead, meaning the destination of the pointer cannot be
changed. changed.
## Objective-C Weak Property has Custom Setter ## Objective-C Weak Property has Custom Setter
This check warns you when you have a custom setter for a weak property. When This check warns you when you have a custom setter for a weak property. When
compiled with Automatic Reference Counting (ARC, `-fobj-arc`) ARC may set the compiled with Automatic Reference Counting (ARC, `-fobj-arc`) ARC may set the
@ -172,22 +172,22 @@ I work for (null)
Note that the custom setter was only invoked once. Note that the custom setter was only invoked once.
## Component factory function ## Component factory function
[Doc in ComponentKit page](http://componentkit.org/docs/break-out-composites) [Doc in ComponentKit page](http://componentkit.org/docs/break-out-composites)
## Component initializer with side effects ## Component initializer with side effects
[Doc in ComponentKit page](http://componentkit.org/docs/no-side-effects) [Doc in ComponentKit page](http://componentkit.org/docs/no-side-effects)
## Component with multiple factory methods ## Component with multiple factory methods
[Doc in ComponentKit page](http://componentkit.org/docs/avoid-overrides) [Doc in ComponentKit page](http://componentkit.org/docs/avoid-overrides)
## Component with unconventional superclass ## Component with unconventional superclass
[Doc in ComponentKit page](http://componentkit.org/docs/never-subclass-components) [Doc in ComponentKit page](http://componentkit.org/docs/never-subclass-components)
## Mutable local variable in component file ## Mutable local variable in component file
[Doc in ComponentKit page](http://componentkit.org/docs/avoid-local-variables) [Doc in ComponentKit page](http://componentkit.org/docs/avoid-local-variables)

@ -81,9 +81,8 @@ checkers
[here](https://github.com/facebook/infer/blob/master/infer/src/checkers/registerCheckers.ml#L42). [here](https://github.com/facebook/infer/blob/master/infer/src/checkers/registerCheckers.ml#L42).
you can then run `infer run -a checkers -- <your_build_command>` to run your you can then run `infer run -a checkers -- <your_build_command>` to run your
checker on real code. See checker on real code. See [here](/docs/analyzing-apps-or-projects) for more
[here](/docs/analyzing-apps-or-projects) for more details details on the build systems supported by Infer.
on the build systems supported by Infer.
Other examples of simple intraprocedural checkers are Other examples of simple intraprocedural checkers are
[addressTaken.ml](https://github.com/facebook/infer/blob/master/infer/src/checkers/addressTaken.ml) [addressTaken.ml](https://github.com/facebook/infer/blob/master/infer/src/checkers/addressTaken.ml)

@ -4,8 +4,8 @@ title: Infer Internal OCaml Modules API
--- ---
The generated OCaml documentation for the latest release of infer can be found The generated OCaml documentation for the latest release of infer can be found
[here](/odoc/latest/index.html). You can generate these pages from within [here](/odoc/latest/index.html). You can generate these pages from within an
an infer git checkout with `make doc`. infer git checkout with `make doc`.
You can also browse the following specific versions: You can also browse the following specific versions:

@ -43,8 +43,8 @@ infer run -- xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld
### "infer [options] -- \<build command\>" fails during a linking step ### "infer [options] -- \<build command\>" fails during a linking step
The linker will sometimes not work if files have been compiled using a different The linker will sometimes not work if files have been compiled using a different
compiler, such as the one Infer uses [under the hood](/docs/infer-workflow) compiler, such as the one Infer uses [under the hood](/docs/infer-workflow) to
to analyze your files. analyze your files.
A workaround consists in setting the `LD` environment variable to a dummy A workaround consists in setting the `LD` environment variable to a dummy
linker, for instance: linker, for instance:

@ -6,66 +6,66 @@
*/ */
module.exports = { module.exports = {
title: 'Infer', title: "Infer",
tagline: tagline:
'A tool to detect bugs in Java and C/C++/Objective-C code before it ships', "A tool to detect bugs in Java and C/C++/Objective-C code before it ships",
url: 'https://fbinfer.com', url: "https://fbinfer.com",
baseUrl: '/', baseUrl: "/",
favicon: 'img/favicon.png', favicon: "img/favicon.png",
organizationName: 'facebook', organizationName: "facebook",
projectName: 'infer', projectName: "infer",
themeConfig: { themeConfig: {
algolia: { algolia: {
apiKey: 'aac9e661e851db0d4b6e74802c3df9de', apiKey: "aac9e661e851db0d4b6e74802c3df9de",
indexName: 'fbinfer', indexName: "fbinfer",
}, },
navbar: { navbar: {
title: 'Infer', title: "Infer",
logo: { alt: 'Infer Logo', src: 'img/logo.png' }, logo: { alt: "Infer Logo", src: "img/logo.png" },
links: [ links: [
{ label: 'Docs', to: 'docs/getting-started' }, { label: "Docs", to: "docs/getting-started" },
{ label: 'Support', to: 'docs/support' }, { label: "Support", to: "docs/support" },
{ label: 'Blog', to: 'blog' }, { label: "Blog", to: "blog" },
{ {
href: 'https://twitter.com/fbinfer', href: "https://twitter.com/fbinfer",
label: 'Twitter', label: "Twitter",
position: 'right', position: "right",
}, },
{ {
href: 'https://www.facebook.com/inferstaticanalyzer', href: "https://www.facebook.com/inferstaticanalyzer",
label: 'Facebook', label: "Facebook",
position: 'right', position: "right",
}, },
{ {
href: 'https://github.com/facebook/infer', href: "https://github.com/facebook/infer",
label: 'GitHub', label: "GitHub",
position: 'right', position: "right",
}, },
], ],
}, },
footer: { footer: {
style: 'light', style: "light",
links: [ links: [
{ {
title: 'Docs', title: "Docs",
items: [ items: [
{ label: 'Quick Start', to: 'docs/getting-started' }, { label: "Quick Start", to: "docs/getting-started" },
{ label: 'User Guide', to: 'docs/infer-workflow' }, { label: "User Guide", to: "docs/infer-workflow" },
{ label: 'Foundations', to: 'docs/about-Infer' }, { label: "Foundations", to: "docs/about-Infer" },
{ label: 'Bug Types Reference', to: 'docs/checkers-bug-types' }, { label: "Bug Types Reference", to: "docs/checkers-bug-types" },
{ label: 'Contribute', to: 'docs/absint-framework' }, { label: "Contribute", to: "docs/absint-framework" },
], ],
}, },
{ {
title: 'Community', title: "Community",
items: [{ label: 'Support', to: 'docs/support' }], items: [{ label: "Support", to: "docs/support" }],
}, },
{ {
title: 'Social', title: "Social",
items: [ items: [
{ label: 'Blog', to: 'blog' }, { label: "Blog", to: "blog" },
{ label: 'GitHub', href: 'https://github.com/facebook/infer' }, { label: "GitHub", href: "https://github.com/facebook/infer" },
{ label: 'Twitter', href: 'https://twitter.com/fbinfer' }, { label: "Twitter", href: "https://twitter.com/fbinfer" },
], ],
}, },
], ],
@ -74,10 +74,10 @@ module.exports = {
}, },
presets: [ presets: [
[ [
'@docusaurus/preset-classic', "@docusaurus/preset-classic",
{ {
docs: { sidebarPath: require.resolve('./sidebars.js') }, docs: { sidebarPath: require.resolve("./sidebars.js") },
theme: { customCss: require.resolve('./src/css/custom.css') }, theme: { customCss: require.resolve("./src/css/custom.css") },
}, },
], ],
], ],

@ -2,21 +2,23 @@
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"scripts": { "scripts": {
"fmt:check": "prettier --check .",
"fmt": "prettier --write .",
"start": "docusaurus start", "start": "docusaurus start",
"build": "docusaurus build", "build": "docusaurus build",
"swizzle": "docusaurus swizzle", "swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy" "deploy": "docusaurus deploy"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "2.0.0-alpha.43", "@docusaurus/core": "2.0.0-alpha.48",
"@docusaurus/preset-classic": "2.0.0-alpha.43", "@docusaurus/preset-classic": "2.0.0-alpha.48",
"classnames": "2.2.6", "classnames": "2.2.6",
"react": "16.13.0", "react": "16.13.1",
"react-dom": "16.13.0", "react-dom": "16.13.1",
"react-github-btn": "1.1.1" "react-github-btn": "1.1.1"
}, },
"devDependencies": { "devDependencies": {
"prettier": "1.19.1" "prettier": "2.0.2"
}, },
"browserslist": { "browserslist": {
"production": [ "production": [

@ -19,18 +19,18 @@ module.exports = {
"experimental-checkers", "experimental-checkers",
"advanced-features", "advanced-features",
"adding-models", "adding-models",
"man-pages" "man-pages",
], ],
Foundations: [ Foundations: [
"about-Infer", "about-Infer",
"separation-logic-and-bi-abduction", "separation-logic-and-bi-abduction",
"limitations" "limitations",
], ],
"Bug Types Reference": [ "Bug Types Reference": [
"checkers-bug-types", "checkers-bug-types",
"eradicate-warnings", "eradicate-warnings",
"linters-bug-types" "linters-bug-types",
], ],
Contribute: ["absint-framework", "adding-checkers", "internal-API"] Contribute: ["absint-framework", "adding-checkers", "internal-API"],
} },
}; };

@ -24,7 +24,7 @@ const features = [
reachability, missing lock guards, and concurrency race conditions in reachability, missing lock guards, and concurrency race conditions in
Android and Java code. Android and Java code.
</> </>
) ),
}, },
{ {
title: <>C, C++, and iOS/Objective-C</>, title: <>C, C++, and iOS/Objective-C</>,
@ -33,8 +33,8 @@ const features = [
Infer checks for null pointer dereferences, memory leaks, coding Infer checks for null pointer dereferences, memory leaks, coding
conventions and unavailable APIs. conventions and unavailable APIs.
</> </>
) ),
} },
]; ];
const poweredByImages = [ const poweredByImages = [
@ -46,7 +46,7 @@ const poweredByImages = [
{ url: "https://www.oculus.com", image: "/img/who/oculus.png" }, { url: "https://www.oculus.com", image: "/img/who/oculus.png" },
{ {
url: "/blog/2016/03/17/collaboration-with-spotify", url: "/blog/2016/03/17/collaboration-with-spotify",
image: "/img/who/spotify.png" image: "/img/who/spotify.png",
}, },
{ url: "https://www.uber.com", image: "/img/who/uber.svg" }, { url: "https://www.uber.com", image: "/img/who/uber.svg" },
{ url: "https://www.whatsapp.com", image: "/img/who/whatsapp.svg" }, { url: "https://www.whatsapp.com", image: "/img/who/whatsapp.svg" },
@ -85,27 +85,40 @@ function Home() {
users, and help prevent crashes or poor performance. users, and help prevent crashes or poor performance.
</p> </p>
<div className={styles.buttons}> <div className={styles.buttons}>
<Link <div className="col col--2 margin-horiz--sm">
className={classnames( <Link
"button button--secondary button--lg", className={classnames(
styles.getStarted "button button--secondary button--lg",
)} styles.getStarted
to={useBaseUrl("docs/getting-started")} )}
> to={useBaseUrl("docs/getting-started")}
Get Started >
</Link> Get Started
<div className={styles.starCount}> </Link>
<GitHubButton </div>
href="https://github.com/facebook/infer" <div className="col col--2 margin-horiz--sm">
data-icon="octicon-star" <Link
data-size="large" className={classnames(
data-show-count="true" "button button--secondary button--lg",
aria-label="Star facebook/infer on GitHub" styles.getStarted
)}
to={useBaseUrl("docs/about-Infer")}
> >
Star Learn More
</GitHubButton> </Link>
</div> </div>
</div> </div>
<div className={styles.starCount}>
<GitHubButton
href="https://github.com/facebook/infer"
data-icon="octicon-star"
data-size="large"
data-show-count="true"
aria-label="Star facebook/infer on GitHub"
>
Star
</GitHubButton>
</div>
</div> </div>
</header> </header>
<main> <main>

@ -36,7 +36,7 @@
} }
.starCount { .starCount {
margin-left: 1rem; margin-top: 1rem;
} }
.features { .features {

@ -9,6 +9,13 @@
dependencies: dependencies:
"@babel/highlight" "^7.0.0" "@babel/highlight" "^7.0.0"
"@babel/code-frame@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
dependencies:
"@babel/highlight" "^7.8.3"
"@babel/core@7.6.2": "@babel/core@7.6.2":
version "7.6.2" version "7.6.2"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91"
@ -59,6 +66,16 @@
lodash "^4.17.13" lodash "^4.17.13"
source-map "^0.5.0" source-map "^0.5.0"
"@babel/generator@^7.9.0":
version "7.9.4"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce"
integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==
dependencies:
"@babel/types" "^7.9.0"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.7.4": "@babel/helper-annotate-as-pure@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce"
@ -91,6 +108,18 @@
"@babel/traverse" "^7.7.4" "@babel/traverse" "^7.7.4"
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-create-class-features-plugin@^7.8.3":
version "7.8.6"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0"
integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg==
dependencies:
"@babel/helper-function-name" "^7.8.3"
"@babel/helper-member-expression-to-functions" "^7.8.3"
"@babel/helper-optimise-call-expression" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/helper-replace-supers" "^7.8.6"
"@babel/helper-split-export-declaration" "^7.8.3"
"@babel/helper-create-regexp-features-plugin@^7.7.4": "@babel/helper-create-regexp-features-plugin@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59"
@ -125,6 +154,15 @@
"@babel/template" "^7.7.4" "@babel/template" "^7.7.4"
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-function-name@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
dependencies:
"@babel/helper-get-function-arity" "^7.8.3"
"@babel/template" "^7.8.3"
"@babel/types" "^7.8.3"
"@babel/helper-get-function-arity@^7.7.4": "@babel/helper-get-function-arity@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0"
@ -132,6 +170,13 @@
dependencies: dependencies:
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-get-function-arity@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-hoist-variables@^7.7.4": "@babel/helper-hoist-variables@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12"
@ -146,6 +191,13 @@
dependencies: dependencies:
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-member-expression-to-functions@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-module-imports@^7.7.4": "@babel/helper-module-imports@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91"
@ -172,11 +224,23 @@
dependencies: dependencies:
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-optimise-call-expression@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-plugin-utils@7.0.0", "@babel/helper-plugin-utils@^7.0.0": "@babel/helper-plugin-utils@7.0.0", "@babel/helper-plugin-utils@^7.0.0":
version "7.0.0" version "7.0.0"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
"@babel/helper-plugin-utils@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": "@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
version "7.5.5" version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
@ -205,6 +269,16 @@
"@babel/traverse" "^7.7.4" "@babel/traverse" "^7.7.4"
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-replace-supers@^7.8.6":
version "7.8.6"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==
dependencies:
"@babel/helper-member-expression-to-functions" "^7.8.3"
"@babel/helper-optimise-call-expression" "^7.8.3"
"@babel/traverse" "^7.8.6"
"@babel/types" "^7.8.6"
"@babel/helper-simple-access@^7.7.4": "@babel/helper-simple-access@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294"
@ -220,6 +294,18 @@
dependencies: dependencies:
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/helper-split-export-declaration@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
dependencies:
"@babel/types" "^7.8.3"
"@babel/helper-validator-identifier@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed"
integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==
"@babel/helper-wrap-function@^7.7.4": "@babel/helper-wrap-function@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace"
@ -248,11 +334,25 @@
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/highlight@^7.8.3":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
dependencies:
"@babel/helper-validator-identifier" "^7.9.0"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/parser@^7.6.2", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5": "@babel/parser@^7.6.2", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5":
version "7.7.5" version "7.7.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71"
integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==
"@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
version "7.9.4"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
"@babel/plugin-proposal-async-generator-functions@^7.7.4": "@babel/plugin-proposal-async-generator-functions@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d"
@ -373,6 +473,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-syntax-typescript@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.8.3.tgz#c1f659dda97711a569cef75275f7e15dcaa6cabc"
integrity sha512-GO1MQ/SGGGoiEXY0e0bSpHimJvxqB7lktLLIq2pv8xG7WZ8IMEle74jIe1FhprHBWjwjZtXHkycDLZXIWM5Wfg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-transform-arrow-functions@^7.7.4": "@babel/plugin-transform-arrow-functions@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12"
@ -651,6 +758,15 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0"
"@babel/plugin-transform-typescript@^7.9.0":
version "7.9.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359"
integrity sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w==
dependencies:
"@babel/helper-create-class-features-plugin" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-typescript" "^7.8.3"
"@babel/plugin-transform-unicode-regex@^7.7.4": "@babel/plugin-transform-unicode-regex@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae"
@ -727,6 +843,14 @@
"@babel/plugin-transform-react-jsx-self" "^7.7.4" "@babel/plugin-transform-react-jsx-self" "^7.7.4"
"@babel/plugin-transform-react-jsx-source" "^7.7.4" "@babel/plugin-transform-react-jsx-source" "^7.7.4"
"@babel/preset-typescript@^7.7.4":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192"
integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-transform-typescript" "^7.9.0"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.7.4": "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.7.4":
version "7.7.6" version "7.7.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f"
@ -743,6 +867,15 @@
"@babel/parser" "^7.7.4" "@babel/parser" "^7.7.4"
"@babel/types" "^7.7.4" "@babel/types" "^7.7.4"
"@babel/template@^7.8.3":
version "7.8.6"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/parser" "^7.8.6"
"@babel/types" "^7.8.6"
"@babel/traverse@^7.6.2", "@babel/traverse@^7.7.4": "@babel/traverse@^7.6.2", "@babel/traverse@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558"
@ -758,6 +891,21 @@
globals "^11.1.0" globals "^11.1.0"
lodash "^4.17.13" lodash "^4.17.13"
"@babel/traverse@^7.8.6":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892"
integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/generator" "^7.9.0"
"@babel/helper-function-name" "^7.8.3"
"@babel/helper-split-export-declaration" "^7.8.3"
"@babel/parser" "^7.9.0"
"@babel/types" "^7.9.0"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
"@babel/types@^7.6.0", "@babel/types@^7.7.4": "@babel/types@^7.6.0", "@babel/types@^7.7.4":
version "7.7.4" version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
@ -767,23 +915,33 @@
lodash "^4.17.13" lodash "^4.17.13"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5"
integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==
dependencies:
"@babel/helper-validator-identifier" "^7.9.0"
lodash "^4.17.13"
to-fast-properties "^2.0.0"
"@csstools/convert-colors@^1.4.0": "@csstools/convert-colors@^1.4.0":
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
"@docusaurus/core@2.0.0-alpha.43": "@docusaurus/core@2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.43.tgz#303ad77e7c948fcaccbc342f2be98b0124637afd" resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.48.tgz#b1561bc20650ca97a193c0c72fad5d1745504289"
integrity sha512-hHZP3gY6lJtvFhDJvl0sE4KExM81pAUkudHiGiRwevkM+SLxhe4if8ddYRPVyQ2yimbSkWHrMlY0uBr1znxzKA== integrity sha512-9PSjxopEkpb47ig0ZtuhurnH3Hokxi1prXWFFccmz86lDDgWxCctHqHdmItePbGqsIvihkNRUcG3uzGxXSQcGQ==
dependencies: dependencies:
"@babel/core" "^7.7.4" "@babel/core" "^7.7.4"
"@babel/plugin-syntax-dynamic-import" "^7.7.4" "@babel/plugin-syntax-dynamic-import" "^7.7.4"
"@babel/plugin-transform-runtime" "^7.7.4" "@babel/plugin-transform-runtime" "^7.7.4"
"@babel/preset-env" "^7.7.4" "@babel/preset-env" "^7.7.4"
"@babel/preset-react" "^7.7.4" "@babel/preset-react" "^7.7.4"
"@babel/preset-typescript" "^7.7.4"
"@babel/runtime" "^7.7.4" "@babel/runtime" "^7.7.4"
"@docusaurus/utils" "^2.0.0-alpha.43" "@docusaurus/utils" "^2.0.0-alpha.48"
"@endiliey/static-site-generator-webpack-plugin" "^4.0.0" "@endiliey/static-site-generator-webpack-plugin" "^4.0.0"
babel-loader "^8.0.6" babel-loader "^8.0.6"
babel-plugin-dynamic-import-node "^2.3.0" babel-plugin-dynamic-import-node "^2.3.0"
@ -830,10 +988,10 @@
webpack-merge "^4.2.2" webpack-merge "^4.2.2"
webpackbar "^4.0.0" webpackbar "^4.0.0"
"@docusaurus/mdx-loader@^2.0.0-alpha.43": "@docusaurus/mdx-loader@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.43.tgz#d8215aea2d9ad1e7edc90e8aee0e0a9848b7e57f" resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.48.tgz#b22443e2bd593c8218634b0923135376c6090dac"
integrity sha512-N3Hc3aKDnLLiklyfSwB20g4rgrwKymFCscCNz5AHvRliaCcO3zGTVIXcAeWTa2+B1weBqHao4Cj3Ftiv2/KaKw== integrity sha512-0Kzk6G7eoglrJJBj6mDVl0ZqGkCvw6wdFKTiLfMnHoc2hkT6tYR5CpBA8S8DJCmWKwY2vZUzY2f0lBZmqBVxWQ==
dependencies: dependencies:
"@babel/parser" "^7.7.4" "@babel/parser" "^7.7.4"
"@babel/traverse" "^7.7.4" "@babel/traverse" "^7.7.4"
@ -850,26 +1008,26 @@
stringify-object "^3.3.0" stringify-object "^3.3.0"
unist-util-visit "^2.0.1" unist-util-visit "^2.0.1"
"@docusaurus/plugin-content-blog@^2.0.0-alpha.43": "@docusaurus/plugin-content-blog@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.43.tgz#169f86939ed78ec1d3c4c39a131e7b6c12dec7f1" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.48.tgz#b90e023ba7969ca9fdf32a032f62ae58c46eedfb"
integrity sha512-bNzR4XFlU6Z8AzobZF7rB9oPnthHjzqe0Ty/fnqqnPMwiYiqjIaRk/GsxEsEQHv6dRRsJtGQZeEb4U5sAa681A== integrity sha512-+LdDTkySBO1FdPqJflUgY/OLi7444WtegIL60Wfz3v9QLJmqmcjyQ55USmICBtMO7a+y4HU4l8eT8cavVdAuoQ==
dependencies: dependencies:
"@docusaurus/mdx-loader" "^2.0.0-alpha.43" "@docusaurus/mdx-loader" "^2.0.0-alpha.48"
"@docusaurus/utils" "^2.0.0-alpha.43" "@docusaurus/utils" "^2.0.0-alpha.48"
feed "^4.0.0" feed "^4.0.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
globby "^10.0.1" globby "^10.0.1"
loader-utils "^1.2.3" loader-utils "^1.2.3"
lodash "^4.17.15" lodash "^4.17.15"
"@docusaurus/plugin-content-docs@^2.0.0-alpha.43": "@docusaurus/plugin-content-docs@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.43.tgz#0e9cdea7a484a79d171384f6c3fc8bf68412cfdb" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.48.tgz#e085a98da0444a913452d8c174925d06b60daba5"
integrity sha512-dT+TTRRtAU1HoCD3qD6vv4YRoBd91ItFJZU7BKYFa/UpkQy+lRm51I/eygvptZfx0+pwxwZvHDsw/RdVo0aeyA== integrity sha512-p9RRUKSwPTC6IBAnxFcE3ytHA3WhgKkN0X1xrf+utyiQ6q365dC60vNKBnKtBdYQWjPQGfYXqqlutAP/ERhtUw==
dependencies: dependencies:
"@docusaurus/mdx-loader" "^2.0.0-alpha.43" "@docusaurus/mdx-loader" "^2.0.0-alpha.48"
"@docusaurus/utils" "^2.0.0-alpha.43" "@docusaurus/utils" "^2.0.0-alpha.48"
execa "^3.4.0" execa "^3.4.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
globby "^10.0.1" globby "^10.0.1"
@ -878,85 +1036,86 @@
lodash "^4.17.15" lodash "^4.17.15"
shelljs "^0.8.3" shelljs "^0.8.3"
"@docusaurus/plugin-content-pages@^2.0.0-alpha.43": "@docusaurus/plugin-content-pages@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.43.tgz#a9ec8dfb8d9f79c32f83fc9cb37a2cf0febc26c0" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.48.tgz#c5cd92d37f4399c3e2accec5eb4ef1ade61d4278"
integrity sha512-TPcHHv6l1XuhvqiXTi6Kquogjys/6yabG59qNRNsaFwRQ20vKjYvDVaVXt94zEti3PeYVlszZwksnWbAa71pbg== integrity sha512-9jS2gvlkPxQcCgN8sUt7zAsgKlo9SuToIekKTRmdzrpVfVu2xEcN/Mw5Uak8HlBgi1dr+9+TyM7drRU+VeRGTg==
dependencies: dependencies:
"@docusaurus/types" "^2.0.0-alpha.43" "@docusaurus/types" "^2.0.0-alpha.48"
"@docusaurus/utils" "^2.0.0-alpha.43" "@docusaurus/utils" "^2.0.0-alpha.48"
globby "^10.0.1" globby "^10.0.1"
"@docusaurus/plugin-google-analytics@^2.0.0-alpha.43": "@docusaurus/plugin-google-analytics@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.43.tgz#1a28f2e084355c999872071f9c0305a6a599fa08" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.48.tgz#e3e21be77c3021bc69e6affd5b70f40d621b7652"
integrity sha512-5QvIhjqsAroxa5bPAsaI0j500MMRUWNqRZZ3g/1nrUCFTmvUS445NEqr+oG0g+IK17kRcTwBOzzfOqAkT5OUuQ== integrity sha512-/yUY5qPQA/ciwviv+ndpTSJRzZAUWHBpMKH8wk9WOzCdHsHv4IYt4boV47aZBNlaNMfGmCS5eUlj1NZ+KLTPsQ==
"@docusaurus/plugin-google-gtag@^2.0.0-alpha.43": "@docusaurus/plugin-google-gtag@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.43.tgz#13aa8d5009eea46ae366216d32095d1e348e8cda" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.48.tgz#c53ffca7bb52b381ed493f45473e9cbc5b2e19b4"
integrity sha512-9BDZTjn7GvIn8VoYGrN3XIiL4WJ7FryovTmHcft64oj/fCFt/buR+IFUhRzGCr1Pss+2LeBQtYB6rM+W1joNuA== integrity sha512-VwPgs7Y9Msv+orBR68HRrKlEi7Vj3FsKta92V6T6vi3QozUFNYYET0PBsMD4xWQT/TxCW3qUYaQlTwqSu/HYmA==
"@docusaurus/plugin-sitemap@^2.0.0-alpha.43": "@docusaurus/plugin-sitemap@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.43.tgz#cf7cc23eacfdfe825246ff6767ead8725c4daf21" resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.48.tgz#ddf7354b83025256dadbd3e389c56c9e96c9863a"
integrity sha512-YFuxfpSxhzz1Jpterx9xfvAOvE/m69e/A4q/mENIhPbdg0ldkmaeMRpbk1Ir7bfRz2jNhcAbLDzsKZjoJOJLdw== integrity sha512-nC5bZi1LDPrnB3d874AsvTE3vG6uI1GbzKYl5U4x3gQ/plA6OBg2SwLm/2gPnZ5viT9XYux+AVgA+ONwo43j2Q==
dependencies: dependencies:
"@docusaurus/types" "^2.0.0-alpha.43" "@docusaurus/types" "^2.0.0-alpha.48"
sitemap "^3.2.2" sitemap "^3.2.2"
"@docusaurus/preset-classic@2.0.0-alpha.43": "@docusaurus/preset-classic@2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.43.tgz#de996ed2432d272d8a99e63054900a44c7d36aec" resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.48.tgz#efce930fa2b5157a1a0c5c860374983eb7364a97"
integrity sha512-UF7GN/Xu1VzCGL0bbASaSe09Wwp0w/jJ04Iyn89zNK3cm5ld+fPWtxPHbZZWrEpn03UNQ57pXpSm0nj7SSuLmg== integrity sha512-MjYqvp/x40WNG3Z+ch9KyQ68Mpf3yyeo8oJnGLA7gT0I3hMMKX28N0kEq5YL6ehxZM7H0qOtyKjMUow6LBnygQ==
dependencies: dependencies:
"@docusaurus/plugin-content-blog" "^2.0.0-alpha.43" "@docusaurus/plugin-content-blog" "^2.0.0-alpha.48"
"@docusaurus/plugin-content-docs" "^2.0.0-alpha.43" "@docusaurus/plugin-content-docs" "^2.0.0-alpha.48"
"@docusaurus/plugin-content-pages" "^2.0.0-alpha.43" "@docusaurus/plugin-content-pages" "^2.0.0-alpha.48"
"@docusaurus/plugin-google-analytics" "^2.0.0-alpha.43" "@docusaurus/plugin-google-analytics" "^2.0.0-alpha.48"
"@docusaurus/plugin-google-gtag" "^2.0.0-alpha.43" "@docusaurus/plugin-google-gtag" "^2.0.0-alpha.48"
"@docusaurus/plugin-sitemap" "^2.0.0-alpha.43" "@docusaurus/plugin-sitemap" "^2.0.0-alpha.48"
"@docusaurus/theme-classic" "^2.0.0-alpha.43" "@docusaurus/theme-classic" "^2.0.0-alpha.48"
"@docusaurus/theme-search-algolia" "^2.0.0-alpha.43" "@docusaurus/theme-search-algolia" "^2.0.0-alpha.48"
remark-admonitions "^1.1.0" remark-admonitions "^1.1.0"
"@docusaurus/theme-classic@^2.0.0-alpha.43": "@docusaurus/theme-classic@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.43.tgz#e40ceaca75c73affd432070f18703b05db7015d3" resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.48.tgz#75d0e9343a7f54517086c6b586d8c57cdebf39d1"
integrity sha512-/Rc1Jkncn5yqoaehBVN6/UDRuj6zCTk/oD/VakhWV3FZ9BeEvGxQ27klr0c4x2YCF+iBWilbnr+Mm/XJqNqrEQ== integrity sha512-pDC2aVQ2lsaaxMifvA98LLPDZNRz+t9/4iZYj1DHd5J+jfYLZCplH3YlEKRp3pUiJRt6delDO2S04OIAvz9ftQ==
dependencies: dependencies:
"@mdx-js/mdx" "^1.5.1" "@mdx-js/mdx" "^1.5.1"
"@mdx-js/react" "^1.5.1" "@mdx-js/react" "^1.5.1"
classnames "^2.2.6" classnames "^2.2.6"
clipboard "^2.0.4" clipboard "^2.0.4"
infima "0.2.0-alpha.4" infima "0.2.0-alpha.5"
parse-numeric-range "^0.0.2" parse-numeric-range "^0.0.2"
prism-react-renderer "^1.0.2" prism-react-renderer "^1.0.2"
prismjs "^1.17.1"
react-router-dom "^5.1.2" react-router-dom "^5.1.2"
react-toggle "^4.1.1" react-toggle "^4.1.1"
remark-admonitions "^1.1.0" remark-admonitions "^1.2.0"
"@docusaurus/theme-search-algolia@^2.0.0-alpha.43": "@docusaurus/theme-search-algolia@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.43.tgz#9087cd727923ba774d3bb4dbb984d7e31e209555" resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.48.tgz#e1346f669845fc6259e92d581c652557163c7e5f"
integrity sha512-0OMWSOyBq1mW7EoBSNsF/aNBMsV09J7hho5Toy4Qom99edpCwk3DxkQV/3YVs30ADd3A+lKepdvSEsJJtvfpVg== integrity sha512-dDDc8FdX6BveRwtVowUGmn7ktwkO3INbrkj3umrNBecLNxO0uvEfRF1cfwsYIV2jScbhb9bCwoz0n/ndI2VDFQ==
dependencies: dependencies:
classnames "^2.2.6" classnames "^2.2.6"
docsearch.js "^2.6.3" docsearch.js "^2.6.3"
"@docusaurus/types@^2.0.0-alpha.43": "@docusaurus/types@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.43.tgz#7c64bd953d4ae8fec03b529901eafaab9dd78e1a" resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-alpha.48.tgz#2f4cc0e62fffabc24b77af2847788b14166e5edf"
integrity sha512-qyrhFMwFOp6Y46a0WW5Ijop3tzrvabh2uuTgE74Lg9JA/uqpnq+RpTmw9zv6kHPrZUl0q9FlwnhgtlxPFqjTMQ== integrity sha512-tXpUlTg+Z6pO3RrMIXMGVURzJ7j4AkNaHGhR04Z7H8r7NMIL2Ysx4edhNB+7HDNU85AIwbSGbqDg6WqexdCjIA==
dependencies: dependencies:
"@types/webpack" "^4.41.0" "@types/webpack" "^4.41.0"
commander "^4.0.1" commander "^4.0.1"
querystring "0.2.0" querystring "0.2.0"
"@docusaurus/utils@^2.0.0-alpha.43": "@docusaurus/utils@^2.0.0-alpha.48":
version "2.0.0-alpha.43" version "2.0.0-alpha.48"
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.43.tgz#869406dc2c41b96fe7b27a8a1d10b94225a26d66" resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.48.tgz#4025b323208411c2fa1c13847b00fe6d0ae7f396"
integrity sha512-6yyrlTUdYHOvSMR8N4gJztoaA3BwUznrDFcU1AnlGhSAJoWpzNPBGQaneXEA0RbiiCwYN5rOD1Fhtq2phei1BQ== integrity sha512-xrFhWPfFU9upAN1Sn3lIb9B9iNsnA6BLFy9Q6VmiSbPagmLlgvyW/Z6yBoSA0j4mDuAAuF4zl3m50d5MXYFKFA==
dependencies: dependencies:
escape-string-regexp "^2.0.0" escape-string-regexp "^2.0.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
@ -1331,9 +1490,9 @@ acorn-walk@^6.1.1:
integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
acorn@^6.0.7, acorn@^6.2.1: acorn@^6.0.7, acorn@^6.2.1:
version "6.4.1" version "6.4.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
address@1.1.2, address@^1.0.1: address@1.1.2, address@^1.0.1:
version "1.1.2" version "1.1.2"
@ -2278,6 +2437,15 @@ cli-width@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
clipboard@^2.0.0:
version "2.0.6"
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376"
integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==
dependencies:
good-listener "^1.2.2"
select "^1.1.2"
tiny-emitter "^2.0.0"
clipboard@^2.0.4: clipboard@^2.0.4:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d"
@ -4269,9 +4437,9 @@ html-minifier-terser@^5.0.1:
terser "^4.3.9" terser "^4.3.9"
html-minifier-terser@^5.0.2: html-minifier-terser@^5.0.2:
version "5.0.4" version "5.0.5"
resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.4.tgz#e8cc02748acb983bd7912ea9660bd31c0702ec32" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.5.tgz#8f12f639789f04faa9f5cf2ff9b9f65607f21f8b"
integrity sha512-fHwmKQ+GzhlqdxEtwrqLT7MSuheiA+rif5/dZgbz3GjoMXJzcRzy1L9NXoiiyxrnap+q5guSiv8Tz5lrh9g42g== integrity sha512-cBSFFghQh/uHcfSiL42KxxIRMF7A144+3E44xdlctIjxEmkEfCvouxNyFH2wysXk1fCGBPwtcr3hDWlGTfkDew==
dependencies: dependencies:
camel-case "^4.1.1" camel-case "^4.1.1"
clean-css "^4.2.3" clean-css "^4.2.3"
@ -4504,10 +4672,10 @@ infer-owner@^1.0.3, infer-owner@^1.0.4:
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
infima@0.2.0-alpha.4: infima@0.2.0-alpha.5:
version "0.2.0-alpha.4" version "0.2.0-alpha.5"
resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.4.tgz#0817cd5e74ff45aa5c3ba7b6352dfcb088f07143" resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.5.tgz#1b5c9c63b90c4b5449c481c6e12a72c0cbe64585"
integrity sha512-b2uwUMI40IAyGRG0IHZpQOPPEKB41y5U+ZKHZxhtLjLJ90FCCcUiMYUbNAf7gRXvNSmotymTeydLj10Et+X3sQ== integrity sha512-kG8ivgCIlV4aFU7kaq1IlSybLETN2dkQaFNwcJIr2uOY6ojz7qgc9RT+TRVx6a48VYNJTz821wHVtj22XukVYw==
inflight@^1.0.4: inflight@^1.0.4:
version "1.0.6" version "1.0.6"
@ -7086,10 +7254,10 @@ prepend-http@^1.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
prettier@1.19.1: prettier@2.0.2:
version "1.19.1" version "2.0.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.2.tgz#1ba8f3eb92231e769b7fcd7cb73ae1b6b74ade08"
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== integrity sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg==
pretty-error@^2.1.1: pretty-error@^2.1.1:
version "2.1.1" version "2.1.1"
@ -7109,6 +7277,13 @@ prism-react-renderer@^1.0.2:
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.0.2.tgz#3bb9a6a42f76fc049b03266298c7068fdd4b7ea9" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.0.2.tgz#3bb9a6a42f76fc049b03266298c7068fdd4b7ea9"
integrity sha512-0++pJyRfu4v2OxI/Us/5RLui9ESDkTiLkVCtKuPZYdpB8UQWJpnJQhPrWab053XtsKW3oM0sD69uJ6N9exm1Ag== integrity sha512-0++pJyRfu4v2OxI/Us/5RLui9ESDkTiLkVCtKuPZYdpB8UQWJpnJQhPrWab053XtsKW3oM0sD69uJ6N9exm1Ag==
prismjs@^1.17.1:
version "1.19.0"
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.19.0.tgz#713afbd45c3baca4b321569f2df39e17e729d4dc"
integrity sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==
optionalDependencies:
clipboard "^2.0.0"
private@^0.1.6: private@^0.1.6:
version "0.1.8" version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@ -7324,15 +7499,15 @@ react-dev-utils@^9.1.0:
strip-ansi "5.2.0" strip-ansi "5.2.0"
text-table "0.2.0" text-table "0.2.0"
react-dom@16.13.0: react-dom@16.13.1:
version "16.13.0" version "16.13.1"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.0.tgz#cdde54b48eb9e8a0ca1b3dc9943d9bb409b81866" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f"
integrity sha512-y09d2c4cG220DzdlFkPTnVvGTszVvNpC73v+AaLGLHbkpy3SSgvYq8x0rNwPJ/Rk/CicTNgk0hbHNw1gMEZAXg== integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"
prop-types "^15.6.2" prop-types "^15.6.2"
scheduler "^0.19.0" scheduler "^0.19.1"
react-error-overlay@^6.0.3: react-error-overlay@^6.0.3:
version "6.0.4" version "6.0.4"
@ -7428,10 +7603,10 @@ react-toggle@^4.1.1:
dependencies: dependencies:
classnames "^2.2.5" classnames "^2.2.5"
react@16.13.0: react@16.13.1:
version "16.13.0" version "16.13.1"
resolved "https://registry.yarnpkg.com/react/-/react-16.13.0.tgz#d046eabcdf64e457bbeed1e792e235e1b9934cf7" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
integrity sha512-TSavZz2iSLkq5/oiE7gnFzmURKZMltmi193rm5HEoUDAXpzT9Kzw6oNZnGoai/4+fUnm7FqS5dwgUL34TujcWQ== integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"
@ -7573,10 +7748,10 @@ relateurl@^0.2.7:
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
remark-admonitions@^1.1.0: remark-admonitions@^1.1.0, remark-admonitions@^1.2.0:
version "1.1.2" version "1.2.1"
resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.1.2.tgz#a923554a1c2a4828f684ea9b06c6252d06615090" resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870"
integrity sha512-qwgsjAi6jE+hJng332zgZbP6WeCtT/0uViLFuR8MiOtZ3NzzhdaoRven9rNeXS7m57zZOmm1rIYhBVe01xfyQA== integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==
dependencies: dependencies:
rehype-parse "^6.0.2" rehype-parse "^6.0.2"
unified "^8.4.2" unified "^8.4.2"
@ -7865,10 +8040,10 @@ sax@^1.2.4, sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
scheduler@^0.19.0: scheduler@^0.19.1:
version "0.19.0" version "0.19.1"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
integrity sha512-xowbVaTPe9r7y7RUejcK73/j8tt2jfiyTednOvHbA8JoClvMYCp+r8QegLwK/n8zWQAtZb1fFnER4XLBZXrCxA== integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
dependencies: dependencies:
loose-envify "^1.1.0" loose-envify "^1.1.0"
object-assign "^4.1.1" object-assign "^4.1.1"
@ -8554,9 +8729,9 @@ terser@^4.1.2, terser@^4.3.9, terser@^4.4.2:
source-map-support "~0.5.12" source-map-support "~0.5.12"
terser@^4.6.3: terser@^4.6.3:
version "4.6.6" version "4.6.7"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.6.tgz#da2382e6cafbdf86205e82fb9a115bd664d54863" resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72"
integrity sha512-4lYPyeNmstjIIESr/ysHg2vUPRGf2tzF9z2yYwnowXVuVzLEamPN1Gfrz7f8I9uEPuHcbFlW4PLIAsJoxXyJ1g== integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==
dependencies: dependencies:
commander "^2.20.0" commander "^2.20.0"
source-map "~0.6.1" source-map "~0.6.1"

Loading…
Cancel
Save