diff --git a/404.html b/404.html index 449f1523c90..208d84d92de 100644 --- a/404.html +++ b/404.html @@ -13,7 +13,7 @@ - + diff --git a/assets/js/06d8773d.9d2ad8fe.js b/assets/js/06d8773d.9d2ad8fe.js new file mode 100644 index 00000000000..45d2bbe9759 --- /dev/null +++ b/assets/js/06d8773d.9d2ad8fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8384],{3380:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var t=s(7624),o=s(2172);const r={title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components."},i=void 0,c={id:"checker-litho-required-props",title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components.",source:"@site/docs/checker-litho-required-props.md",sourceDirName:".",slug:"/checker-litho-required-props",permalink:"/docs/next/checker-litho-required-props",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components."},sidebar:"docs",previous:{title:"Lineage",permalink:"/docs/next/checker-lineage"},next:{title:"Liveness",permalink:"/docs/next/checker-liveness"}},p={},l=[{value:"What are required Props?",id:"what-are-required-props",level:2},{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function a(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.M)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.p,{children:["Checks that all non-optional ",(0,t.jsx)(n.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,t.jsxs)(n.p,{children:["Activate with ",(0,t.jsx)(n.code,{children:"--litho-required-props"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Supported languages:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"C/C++/ObjC: No"}),"\n",(0,t.jsx)(n.li,{children:"C#/.Net: No"}),"\n",(0,t.jsx)(n.li,{children:"Erlang: No"}),"\n",(0,t.jsx)(n.li,{children:"Hack: No"}),"\n",(0,t.jsx)(n.li,{children:"Java: Yes"}),"\n",(0,t.jsx)(n.li,{children:"Python: No"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["This analysis checks that all non-optional ",(0,t.jsx)(n.a,{href:"https://fblitho.com/docs/props",children:(0,t.jsx)(n.code,{children:"@Prop"})}),"`s have been specified when constructing Litho components. This is a ",(0,t.jsx)(n.a,{href:"https://fblitho.com/",children:"Litho"})," specific checker."]}),"\n",(0,t.jsx)(n.h2,{id:"what-are-required-props",children:"What are required Props?"}),"\n",(0,t.jsxs)(n.p,{children:["In a nutshell, a Litho Component is essentially a class that defines immutable inputs, called prop (annotated with ",(0,t.jsx)(n.code,{children:"@Prop"}),") in component hierarchy methods. For each Component there is a corresponding spec class which defines the required props:. E.g:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-java",children:"class MyComponentSpec {\n\n static void onCreate(\n ComponentContext c,\n @Prop(optional = true) String prop1, @Prop int prop2) {\n ...\n }\n ...\n}\n"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"MyComponentSpec"})," defines two props: a String prop called ",(0,t.jsx)(n.code,{children:"prop1"})," and an int prop named ",(0,t.jsx)(n.code,{children:"prop2"}),". For each prop defined on the spec, the annotation processor creates a builder pattern method that has the same name as the prop."]}),"\n",(0,t.jsx)(n.p,{children:"Developers pass down values for these props by calling the appropriate methods:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-java",children:'MyComponent.create(c)\n .prop1("My prop 1")\n .prop2(256)\n .build();\n'})}),"\n",(0,t.jsx)(n.p,{children:"If the required props are not called, then annotation processor throws an exception in run time. This is really bad and that's where this checker comes into play to detect such cases statically."}),"\n",(0,t.jsxs)(n.p,{children:["Note that, the functions ",(0,t.jsx)(n.code,{children:"create()"})," and ",(0,t.jsx)(n.code,{children:"build()"})," could be defined in different methods and there could be various function calls, aliasing, and control flow patterns in between. Hence, this checker is inter-procedural."]}),"\n",(0,t.jsxs)(n.p,{children:["Check out the examples defined in the issue type ",(0,t.jsx)(n.a,{href:"/docs/next/all-issue-types#missing_required_prop",children:"MISSING_REQUIRED_PROP"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,t.jsx)(n.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/next/all-issue-types#missing_required_prop",children:"MISSING_REQUIRED_PROP"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.M)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},2172:(e,n,s)=>{s.d(n,{I:()=>c,M:()=>i});var t=s(1504);const o={},r=t.createContext(o);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/06d8773d.b5758238.js b/assets/js/06d8773d.b5758238.js deleted file mode 100644 index f67b5aa2991..00000000000 --- a/assets/js/06d8773d.b5758238.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8384],{3380:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var s=t(7624),o=t(2172);const r={title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components."},i=void 0,c={id:"checker-litho-required-props",title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components.",source:"@site/docs/checker-litho-required-props.md",sourceDirName:".",slug:"/checker-litho-required-props",permalink:"/docs/next/checker-litho-required-props",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:'Litho "Required Props"',description:"Checks that all non-optional `@Prop`s have been specified when constructing Litho components."},sidebar:"docs",previous:{title:"Inefficient keySet Iterator",permalink:"/docs/next/checker-inefficient-keyset-iterator"},next:{title:"Liveness",permalink:"/docs/next/checker-liveness"}},p={},a=[{value:"What are required Props?",id:"what-are-required-props",level:2},{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function l(e){const n={a:"a",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.M)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["Checks that all non-optional ",(0,s.jsx)(n.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,s.jsxs)(n.p,{children:["Activate with ",(0,s.jsx)(n.code,{children:"--litho-required-props"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Supported languages:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"C/C++/ObjC: No"}),"\n",(0,s.jsx)(n.li,{children:"C#/.Net: No"}),"\n",(0,s.jsx)(n.li,{children:"Erlang: No"}),"\n",(0,s.jsx)(n.li,{children:"Hack: No"}),"\n",(0,s.jsx)(n.li,{children:"Java: Yes"}),"\n",(0,s.jsx)(n.li,{children:"Python: No"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This analysis checks that all non-optional ",(0,s.jsx)(n.a,{href:"https://fblitho.com/docs/props",children:(0,s.jsx)(n.code,{children:"@Prop"})}),"`s have been specified when constructing Litho components. This is a ",(0,s.jsx)(n.a,{href:"https://fblitho.com/",children:"Litho"})," specific checker."]}),"\n",(0,s.jsx)(n.h2,{id:"what-are-required-props",children:"What are required Props?"}),"\n",(0,s.jsxs)(n.p,{children:["In a nutshell, a Litho Component is essentially a class that defines immutable inputs, called prop (annotated with ",(0,s.jsx)(n.code,{children:"@Prop"}),") in component hierarchy methods. For each Component there is a corresponding spec class which defines the required props:. E.g:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:"class MyComponentSpec {\n\n static void onCreate(\n ComponentContext c,\n @Prop(optional = true) String prop1, @Prop int prop2) {\n ...\n }\n ...\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"MyComponentSpec"})," defines two props: a String prop called ",(0,s.jsx)(n.code,{children:"prop1"})," and an int prop named ",(0,s.jsx)(n.code,{children:"prop2"}),". For each prop defined on the spec, the annotation processor creates a builder pattern method that has the same name as the prop."]}),"\n",(0,s.jsx)(n.p,{children:"Developers pass down values for these props by calling the appropriate methods:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-java",children:'MyComponent.create(c)\n .prop1("My prop 1")\n .prop2(256)\n .build();\n'})}),"\n",(0,s.jsx)(n.p,{children:"If the required props are not called, then annotation processor throws an exception in run time. This is really bad and that's where this checker comes into play to detect such cases statically."}),"\n",(0,s.jsxs)(n.p,{children:["Note that, the functions ",(0,s.jsx)(n.code,{children:"create()"})," and ",(0,s.jsx)(n.code,{children:"build()"})," could be defined in different methods and there could be various function calls, aliasing, and control flow patterns in between. Hence, this checker is inter-procedural."]}),"\n",(0,s.jsxs)(n.p,{children:["Check out the examples defined in the issue type ",(0,s.jsx)(n.a,{href:"/docs/next/all-issue-types#missing_required_prop",children:"MISSING_REQUIRED_PROP"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,s.jsx)(n.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/next/all-issue-types#missing_required_prop",children:"MISSING_REQUIRED_PROP"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.M)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},2172:(e,n,t)=>{t.d(n,{I:()=>c,M:()=>i});var s=t(1504);const o={},r=s.createContext(o);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/556d04db.a7009f1b.js b/assets/js/556d04db.a7009f1b.js new file mode 100644 index 00000000000..11ef17e16ee --- /dev/null +++ b/assets/js/556d04db.a7009f1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8008],{8804:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>i,toc:()=>l});var o=s(7624),n=s(2172);const c={title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'},a=void 0,i={id:"checker-scope-leakage",title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).',source:"@site/docs/checker-scope-leakage.md",sourceDirName:".",slug:"/checker-scope-leakage",permalink:"/docs/next/checker-scope-leakage",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'},sidebar:"docs",previous:{title:"Static Initialization Order Fiasco",permalink:"/docs/next/checker-siof"},next:{title:"Self in Block",permalink:"/docs/next/checker-self-in-block"}},r={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,o.jsxs)(t.p,{children:["Activate with ",(0,o.jsx)(t.code,{children:"--scope-leakage"}),"."]}),"\n",(0,o.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"C/C++/ObjC: No"}),"\n",(0,o.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,o.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,o.jsx)(t.li,{children:"Hack: No"}),"\n",(0,o.jsx)(t.li,{children:"Java: Yes"}),"\n",(0,o.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,o.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/docs/next/all-issue-types#scope_leakage",children:"SCOPE_LEAKAGE"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,n.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},2172:(e,t,s)=>{s.d(t,{I:()=>i,M:()=>a});var o=s(1504);const n={},c=o.createContext(n);function a(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/556d04db.faf8a5ff.js b/assets/js/556d04db.faf8a5ff.js deleted file mode 100644 index ed24eb91ad4..00000000000 --- a/assets/js/556d04db.faf8a5ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8008],{8804:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>r,contentTitle:()=>a,default:()=>d,frontMatter:()=>c,metadata:()=>i,toc:()=>l});var o=s(7624),n=s(2172);const c={title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'},a=void 0,i={id:"checker-scope-leakage",title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).',source:"@site/docs/checker-scope-leakage.md",sourceDirName:".",slug:"/checker-scope-leakage",permalink:"/docs/next/checker-scope-leakage",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Scope Leakage",description:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'},sidebar:"docs",previous:{title:"Resource Leak Lab Exercise",permalink:"/docs/next/checker-resource-leak-lab"},next:{title:"Static Initialization Order Fiasco",permalink:"/docs/next/checker-siof"}},r={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function h(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.M)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,o.jsxs)(t.p,{children:["Activate with ",(0,o.jsx)(t.code,{children:"--scope-leakage"}),"."]}),"\n",(0,o.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"C/C++/ObjC: No"}),"\n",(0,o.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,o.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,o.jsx)(t.li,{children:"Hack: No"}),"\n",(0,o.jsx)(t.li,{children:"Java: Yes"}),"\n",(0,o.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,o.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:(0,o.jsx)(t.a,{href:"/docs/next/all-issue-types#scope_leakage",children:"SCOPE_LEAKAGE"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,n.M)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},2172:(e,t,s)=>{s.d(t,{I:()=>i,M:()=>a});var o=s(1504);const n={},c=o.createContext(n);function a(e){const t=o.useContext(c);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(c.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5bb07cf5.2d190a20.js b/assets/js/5bb07cf5.2d190a20.js deleted file mode 100644 index 1e77bca211c..00000000000 --- a/assets/js/5bb07cf5.2d190a20.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6576],{60:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>p,frontMatter:()=>c,metadata:()=>s,toc:()=>a});var i=t(7624),o=t(2172);const c={title:"Lineage",description:"Computes a dataflow graph"},r=void 0,s={id:"checker-lineage",title:"Lineage",description:"Computes a dataflow graph",source:"@site/docs/checker-lineage.md",sourceDirName:".",slug:"/checker-lineage",permalink:"/docs/next/checker-lineage",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Lineage",description:"Computes a dataflow graph"},sidebar:"docs",previous:{title:"SIL validation",permalink:"/docs/next/checker-sil-validation"},next:{title:"Self in Block",permalink:"/docs/next/checker-self-in-block"}},l={},a=[];function d(e){const n={code:"code",li:"li",p:"p",ul:"ul",...(0,o.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Computes a dataflow graph"}),"\n",(0,i.jsxs)(n.p,{children:["Activate with ",(0,i.jsx)(n.code,{children:"--lineage"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Supported languages:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"C/C++/ObjC: No"}),"\n",(0,i.jsx)(n.li,{children:"C#/.Net: No"}),"\n",(0,i.jsx)(n.li,{children:"Erlang: Yes"}),"\n",(0,i.jsx)(n.li,{children:"Hack: No"}),"\n",(0,i.jsx)(n.li,{children:"Java: No"}),"\n",(0,i.jsx)(n.li,{children:"Python: No"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.M)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2172:(e,n,t)=>{t.d(n,{I:()=>s,M:()=>r});var i=t(1504);const o={},c=i.createContext(o);function r(e){const n=i.useContext(c);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5bb07cf5.6e330cd8.js b/assets/js/5bb07cf5.6e330cd8.js new file mode 100644 index 00000000000..a5086c396c4 --- /dev/null +++ b/assets/js/5bb07cf5.6e330cd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6576],{60:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=t(7624),i=t(2172);const o={title:"Lineage",description:"Computes a dataflow graph"},c=void 0,s={id:"checker-lineage",title:"Lineage",description:"Computes a dataflow graph",source:"@site/docs/checker-lineage.md",sourceDirName:".",slug:"/checker-lineage",permalink:"/docs/next/checker-lineage",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Lineage",description:"Computes a dataflow graph"},sidebar:"docs",previous:{title:"Inefficient keySet Iterator",permalink:"/docs/next/checker-inefficient-keyset-iterator"},next:{title:'Litho "Required Props"',permalink:"/docs/next/checker-litho-required-props"}},a={},l=[];function d(e){const n={code:"code",li:"li",p:"p",ul:"ul",...(0,i.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.p,{children:"Computes a dataflow graph"}),"\n",(0,r.jsxs)(n.p,{children:["Activate with ",(0,r.jsx)(n.code,{children:"--lineage"}),"."]}),"\n",(0,r.jsx)(n.p,{children:"Supported languages:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"C/C++/ObjC: No"}),"\n",(0,r.jsx)(n.li,{children:"C#/.Net: No"}),"\n",(0,r.jsx)(n.li,{children:"Erlang: Yes"}),"\n",(0,r.jsx)(n.li,{children:"Hack: No"}),"\n",(0,r.jsx)(n.li,{children:"Java: No"}),"\n",(0,r.jsx)(n.li,{children:"Python: No"}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,i.M)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,n,t)=>{t.d(n,{I:()=>s,M:()=>c});var r=t(1504);const i={},o=r.createContext(i);function c(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.83266297.js b/assets/js/935f2afb.5632d148.js similarity index 89% rename from assets/js/935f2afb.83266297.js rename to assets/js/935f2afb.5632d148.js index 1f56888c5c4..ea15dbcee97 100644 --- a/assets/js/935f2afb.83266297.js +++ b/assets/js/935f2afb.5632d148.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5696],{5988:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"docs":[{"type":"category","label":"Quick Start","items":[{"type":"link","label":"Getting started with Infer","href":"/docs/next/getting-started","docId":"getting-started","unlisted":false},{"type":"link","label":"Hello, World!","href":"/docs/next/hello-world","docId":"hello-world","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"User Guide","items":[{"type":"link","label":"Infer workflow","href":"/docs/next/infer-workflow","docId":"infer-workflow","unlisted":false},{"type":"link","label":"Analyzing apps or projects","href":"/docs/next/analyzing-apps-or-projects","docId":"analyzing-apps-or-projects","unlisted":false},{"type":"link","label":"Recommended flow for CI","href":"/docs/next/steps-for-ci","docId":"steps-for-ci","unlisted":false},{"type":"category","label":"Infer Manuals","items":[{"type":"link","label":"infer","href":"/docs/next/man-infer","docId":"man-infer","unlisted":false},{"type":"link","label":"infer analyze","href":"/docs/next/man-infer-analyze","docId":"man-infer-analyze","unlisted":false},{"type":"link","label":"infer capture","href":"/docs/next/man-infer-capture","docId":"man-infer-capture","unlisted":false},{"type":"link","label":"infer compile","href":"/docs/next/man-infer-compile","docId":"man-infer-compile","unlisted":false},{"type":"link","label":"infer debug","href":"/docs/next/man-infer-debug","docId":"man-infer-debug","unlisted":false},{"type":"link","label":"infer explore","href":"/docs/next/man-infer-explore","docId":"man-infer-explore","unlisted":false},{"type":"link","label":"infer help","href":"/docs/next/man-infer-help","docId":"man-infer-help","unlisted":false},{"type":"link","label":"infer report","href":"/docs/next/man-infer-report","docId":"man-infer-report","unlisted":false},{"type":"link","label":"infer reportdiff","href":"/docs/next/man-infer-reportdiff","docId":"man-infer-reportdiff","unlisted":false},{"type":"link","label":"infer run","href":"/docs/next/man-infer-run","docId":"man-infer-run","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Analyses and Issue Types","items":[{"type":"link","label":"List of all checkers","href":"/docs/next/all-checkers","docId":"all-checkers","unlisted":false},{"type":"link","label":"List of all categories of issue types","href":"/docs/next/all-categories","docId":"all-categories","unlisted":false},{"type":"link","label":"List of all issue types","href":"/docs/next/all-issue-types","docId":"all-issue-types","unlisted":false},{"type":"link","label":"Annotation Reachability","href":"/docs/next/checker-annotation-reachability","docId":"checker-annotation-reachability","unlisted":false},{"type":"link","label":"Biabduction","href":"/docs/next/checker-biabduction","docId":"checker-biabduction","unlisted":false},{"type":"link","label":"Buffer Overrun Analysis (InferBO)","href":"/docs/next/checker-bufferoverrun","docId":"checker-bufferoverrun","unlisted":false},{"type":"link","label":"Config Impact Analysis","href":"/docs/next/checker-config-impact-analysis","docId":"checker-config-impact-analysis","unlisted":false},{"type":"link","label":"Cost: Complexity Analysis","href":"/docs/next/checker-cost","docId":"checker-cost","unlisted":false},{"type":"link","label":"Datalog-based points-to analysis","href":"/docs/next/checker-datalog","docId":"checker-datalog","unlisted":false},{"type":"link","label":"Fragment Retains View","href":"/docs/next/checker-fragment-retains-view","docId":"checker-fragment-retains-view","unlisted":false},{"type":"link","label":"Impurity","href":"/docs/next/checker-impurity","docId":"checker-impurity","unlisted":false},{"type":"link","label":"Inefficient keySet Iterator","href":"/docs/next/checker-inefficient-keyset-iterator","docId":"checker-inefficient-keyset-iterator","unlisted":false},{"type":"link","label":"Litho \\"Required Props\\"","href":"/docs/next/checker-litho-required-props","docId":"checker-litho-required-props","unlisted":false},{"type":"link","label":"Liveness","href":"/docs/next/checker-liveness","docId":"checker-liveness","unlisted":false},{"type":"link","label":"Loop Hoisting","href":"/docs/next/checker-loop-hoisting","docId":"checker-loop-hoisting","unlisted":false},{"type":"link","label":"Parameter Not Null Checked","href":"/docs/next/checker-parameter-not-null-checked","docId":"checker-parameter-not-null-checked","unlisted":false},{"type":"link","label":"`printf()` Argument Types","href":"/docs/next/checker-printf-args","docId":"checker-printf-args","unlisted":false},{"type":"link","label":"Pulse","href":"/docs/next/checker-pulse","docId":"checker-pulse","unlisted":false},{"type":"link","label":"Purity","href":"/docs/next/checker-purity","docId":"checker-purity","unlisted":false},{"type":"link","label":"Quandary","href":"/docs/next/checker-quandary","docId":"checker-quandary","unlisted":false},{"type":"link","label":"RacerD","href":"/docs/next/checker-racerd","docId":"checker-racerd","unlisted":false},{"type":"link","label":"Resource Leak Lab Exercise","href":"/docs/next/checker-resource-leak-lab","docId":"checker-resource-leak-lab","unlisted":false},{"type":"link","label":"Scope Leakage","href":"/docs/next/checker-scope-leakage","docId":"checker-scope-leakage","unlisted":false},{"type":"link","label":"Static Initialization Order Fiasco","href":"/docs/next/checker-siof","docId":"checker-siof","unlisted":false},{"type":"link","label":"SIL validation","href":"/docs/next/checker-sil-validation","docId":"checker-sil-validation","unlisted":false},{"type":"link","label":"Lineage","href":"/docs/next/checker-lineage","docId":"checker-lineage","unlisted":false},{"type":"link","label":"Self in Block","href":"/docs/next/checker-self-in-block","docId":"checker-self-in-block","unlisted":false},{"type":"link","label":"Starvation","href":"/docs/next/checker-starvation","docId":"checker-starvation","unlisted":false},{"type":"link","label":"Topl","href":"/docs/next/checker-topl","docId":"checker-topl","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Foundations","items":[{"type":"link","label":"About Infer","href":"/docs/next/about-Infer","docId":"about-Infer","unlisted":false},{"type":"link","label":"Separation logic and bi-abduction","href":"/docs/next/separation-logic-and-bi-abduction","docId":"separation-logic-and-bi-abduction","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contribute","items":[{"type":"link","label":"Building checkers with the Infer.AI framework","href":"/docs/next/absint-framework","docId":"absint-framework","unlisted":false},{"type":"link","label":"Infer Internal OCaml Modules API","href":"/docs/next/internal-API","docId":"internal-API","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Versions","items":[{"type":"link","label":"Documentation Versions","href":"/docs/next/versions","docId":"versions","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"about-Infer":{"id":"about-Infer","title":"About Infer","description":"Infer is a static program analyzer for Java, C, C++, Objective-C, and","sidebar":"docs"},"absint-framework":{"id":"absint-framework","title":"Building checkers with the Infer.AI framework","description":"Infer.AI is a framework for quickly developing abstract interpretation-based","sidebar":"docs"},"all-categories":{"id":"all-categories","title":"List of all categories of issue types","description":"Here are all the categories that issue types might belong to in Infer. Some issue types have no associated category at the moment. This usually indicates that the issue type is not yet mature enough to be used.","sidebar":"docs"},"all-checkers":{"id":"all-checkers","title":"List of all checkers","description":"Here is an overview of the checkers currently available in Infer.","sidebar":"docs"},"all-issue-types":{"id":"all-issue-types","title":"List of all issue types","description":"Here is an overview of the issue types currently reported by Infer.","sidebar":"docs"},"analyzing-apps-or-projects":{"id":"analyzing-apps-or-projects","title":"Analyzing apps or projects","description":"To analyze files with Infer you can use the compilers javac and clang. You","sidebar":"docs"},"checker-annotation-reachability":{"id":"checker-annotation-reachability","title":"Annotation Reachability","description":"Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. See flags starting with `--annotation-reachability`.","sidebar":"docs"},"checker-biabduction":{"id":"checker-biabduction","title":"Biabduction","description":"This analysis deals with a range of issues, many linked to memory safety.","sidebar":"docs"},"checker-bufferoverrun":{"id":"checker-bufferoverrun","title":"Buffer Overrun Analysis (InferBO)","description":"InferBO is a detector for out-of-bounds array accesses.","sidebar":"docs"},"checker-config-impact-analysis":{"id":"checker-config-impact-analysis","title":"Config Impact Analysis","description":"[EXPERIMENTAL] Collects function that are called without config checks.","sidebar":"docs"},"checker-cost":{"id":"checker-cost","title":"Cost: Complexity Analysis","description":"Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with `infer reportdiff`.","sidebar":"docs"},"checker-datalog":{"id":"checker-datalog","title":"Datalog-based points-to analysis","description":"Experimental datalog-based points-to analysis.","sidebar":"docs"},"checker-fragment-retains-view":{"id":"checker-fragment-retains-view","title":"Fragment Retains View","description":"Detects when Android fragments are not explicitly nullified before becoming unreachable.","sidebar":"docs"},"checker-impurity":{"id":"checker-impurity","title":"Impurity","description":"Detects functions with potential side-effects. Same as \\"purity\\", but implemented on top of Pulse.","sidebar":"docs"},"checker-inefficient-keyset-iterator":{"id":"checker-inefficient-keyset-iterator","title":"Inefficient keySet Iterator","description":"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.","sidebar":"docs"},"checker-lineage":{"id":"checker-lineage","title":"Lineage","description":"Computes a dataflow graph","sidebar":"docs"},"checker-litho-required-props":{"id":"checker-litho-required-props","title":"Litho \\"Required Props\\"","description":"Checks that all non-optional `@Prop`s have been specified when constructing Litho components.","sidebar":"docs"},"checker-liveness":{"id":"checker-liveness","title":"Liveness","description":"Detection of dead stores and unused variables.","sidebar":"docs"},"checker-loop-hoisting":{"id":"checker-loop-hoisting","title":"Loop Hoisting","description":"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency.","sidebar":"docs"},"checker-parameter-not-null-checked":{"id":"checker-parameter-not-null-checked","title":"Parameter Not Null Checked","description":"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first.","sidebar":"docs"},"checker-printf-args":{"id":"checker-printf-args","title":"`printf()` Argument Types","description":"Detect mismatches between the Java `printf` format strings and the argument types For example, this checker will warn about the type error in `printf(\\"Hello %d\\", \\"world\\")`","sidebar":"docs"},"checker-pulse":{"id":"checker-pulse","title":"Pulse","description":"General-purpose memory and value analysis engine.","sidebar":"docs"},"checker-purity":{"id":"checker-purity","title":"Purity","description":"Detects pure (side-effect-free) functions. A different implementation of \\"impurity\\".","sidebar":"docs"},"checker-quandary":{"id":"checker-quandary","title":"Quandary","description":"The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a \\"sanitizer\\". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.","sidebar":"docs"},"checker-racerd":{"id":"checker-racerd","title":"RacerD","description":"Thread safety analysis.","sidebar":"docs"},"checker-resource-leak-lab":{"id":"checker-resource-leak-lab","title":"Resource Leak Lab Exercise","description":"Toy checker for the \\"resource leak\\" write-your-own-checker exercise.","sidebar":"docs"},"checker-scope-leakage":{"id":"checker-scope-leakage","title":"Scope Leakage","description":"The Java/Kotlin checker takes into account a set of \\"scope\\" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).","sidebar":"docs"},"checker-self-in-block":{"id":"checker-self-in-block","title":"Self in Block","description":"An Objective-C-specific analysis to detect when a block captures `self`.","sidebar":"docs"},"checker-sil-validation":{"id":"checker-sil-validation","title":"SIL validation","description":"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL.","sidebar":"docs"},"checker-siof":{"id":"checker-siof","title":"Static Initialization Order Fiasco","description":"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.","sidebar":"docs"},"checker-starvation":{"id":"checker-starvation","title":"Starvation","description":"Detect various kinds of situations when no progress is being made because of concurrency errors.","sidebar":"docs"},"checker-topl":{"id":"checker-topl","title":"Topl","description":"Detect errors based on user-provided state machines describing temporal properties over multiple objects.","sidebar":"docs"},"getting-started":{"id":"getting-started","title":"Getting started with Infer","description":"Get Infer","sidebar":"docs"},"hello-world":{"id":"hello-world","title":"Hello, World!","description":"Follow the instructions in this page to try Infer on a few small examples. You","sidebar":"docs"},"infer-workflow":{"id":"infer-workflow","title":"Infer workflow","description":"This page documents several ways of running Infer, that you can adapt to your","sidebar":"docs"},"internal-API":{"id":"internal-API","title":"Infer Internal OCaml Modules API","description":"Browse the generated documentation for Infer\'s OCaml code here.","sidebar":"docs"},"man-infer":{"id":"man-infer","title":"infer","description":"","sidebar":"docs"},"man-infer-analyze":{"id":"man-infer-analyze","title":"infer analyze","description":"","sidebar":"docs"},"man-infer-capture":{"id":"man-infer-capture","title":"infer capture","description":"","sidebar":"docs"},"man-infer-compile":{"id":"man-infer-compile","title":"infer compile","description":"","sidebar":"docs"},"man-infer-debug":{"id":"man-infer-debug","title":"infer debug","description":"","sidebar":"docs"},"man-infer-explore":{"id":"man-infer-explore","title":"infer explore","description":"","sidebar":"docs"},"man-infer-help":{"id":"man-infer-help","title":"infer help","description":"","sidebar":"docs"},"man-infer-report":{"id":"man-infer-report","title":"infer report","description":"","sidebar":"docs"},"man-infer-reportdiff":{"id":"man-infer-reportdiff","title":"infer reportdiff","description":"","sidebar":"docs"},"man-infer-run":{"id":"man-infer-run","title":"infer run","description":"","sidebar":"docs"},"man-pages":{"id":"man-pages","title":"Infer Manuals","description":"Here are the man pages for all the infer commands:"},"separation-logic-and-bi-abduction":{"id":"separation-logic-and-bi-abduction","title":"Separation logic and bi-abduction","description":"- Separation logic","sidebar":"docs"},"steps-for-ci":{"id":"steps-for-ci","title":"Recommended flow for CI","description":"The recommended flow for CI integration is to determine the modified files, and","sidebar":"docs"},"support":{"id":"support","title":"Infer | Need help?","description":"Need help?"},"versions":{"id":"versions","title":"Documentation Versions","description":"Browse the documentation for different versions:","sidebar":"docs"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5696],{5988:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"docs":[{"type":"category","label":"Quick Start","items":[{"type":"link","label":"Getting started with Infer","href":"/docs/next/getting-started","docId":"getting-started","unlisted":false},{"type":"link","label":"Hello, World!","href":"/docs/next/hello-world","docId":"hello-world","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"User Guide","items":[{"type":"link","label":"Infer workflow","href":"/docs/next/infer-workflow","docId":"infer-workflow","unlisted":false},{"type":"link","label":"Analyzing apps or projects","href":"/docs/next/analyzing-apps-or-projects","docId":"analyzing-apps-or-projects","unlisted":false},{"type":"link","label":"Recommended flow for CI","href":"/docs/next/steps-for-ci","docId":"steps-for-ci","unlisted":false},{"type":"category","label":"Infer Manuals","items":[{"type":"link","label":"infer","href":"/docs/next/man-infer","docId":"man-infer","unlisted":false},{"type":"link","label":"infer analyze","href":"/docs/next/man-infer-analyze","docId":"man-infer-analyze","unlisted":false},{"type":"link","label":"infer capture","href":"/docs/next/man-infer-capture","docId":"man-infer-capture","unlisted":false},{"type":"link","label":"infer compile","href":"/docs/next/man-infer-compile","docId":"man-infer-compile","unlisted":false},{"type":"link","label":"infer debug","href":"/docs/next/man-infer-debug","docId":"man-infer-debug","unlisted":false},{"type":"link","label":"infer explore","href":"/docs/next/man-infer-explore","docId":"man-infer-explore","unlisted":false},{"type":"link","label":"infer help","href":"/docs/next/man-infer-help","docId":"man-infer-help","unlisted":false},{"type":"link","label":"infer report","href":"/docs/next/man-infer-report","docId":"man-infer-report","unlisted":false},{"type":"link","label":"infer reportdiff","href":"/docs/next/man-infer-reportdiff","docId":"man-infer-reportdiff","unlisted":false},{"type":"link","label":"infer run","href":"/docs/next/man-infer-run","docId":"man-infer-run","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Analyses and Issue Types","items":[{"type":"link","label":"List of all checkers","href":"/docs/next/all-checkers","docId":"all-checkers","unlisted":false},{"type":"link","label":"List of all categories of issue types","href":"/docs/next/all-categories","docId":"all-categories","unlisted":false},{"type":"link","label":"List of all issue types","href":"/docs/next/all-issue-types","docId":"all-issue-types","unlisted":false},{"type":"link","label":"Annotation Reachability","href":"/docs/next/checker-annotation-reachability","docId":"checker-annotation-reachability","unlisted":false},{"type":"link","label":"Biabduction","href":"/docs/next/checker-biabduction","docId":"checker-biabduction","unlisted":false},{"type":"link","label":"Buffer Overrun Analysis (InferBO)","href":"/docs/next/checker-bufferoverrun","docId":"checker-bufferoverrun","unlisted":false},{"type":"link","label":"Config Impact Analysis","href":"/docs/next/checker-config-impact-analysis","docId":"checker-config-impact-analysis","unlisted":false},{"type":"link","label":"Cost: Complexity Analysis","href":"/docs/next/checker-cost","docId":"checker-cost","unlisted":false},{"type":"link","label":"Datalog-based points-to analysis","href":"/docs/next/checker-datalog","docId":"checker-datalog","unlisted":false},{"type":"link","label":"Fragment Retains View","href":"/docs/next/checker-fragment-retains-view","docId":"checker-fragment-retains-view","unlisted":false},{"type":"link","label":"Impurity","href":"/docs/next/checker-impurity","docId":"checker-impurity","unlisted":false},{"type":"link","label":"Inefficient keySet Iterator","href":"/docs/next/checker-inefficient-keyset-iterator","docId":"checker-inefficient-keyset-iterator","unlisted":false},{"type":"link","label":"Lineage","href":"/docs/next/checker-lineage","docId":"checker-lineage","unlisted":false},{"type":"link","label":"Litho \\"Required Props\\"","href":"/docs/next/checker-litho-required-props","docId":"checker-litho-required-props","unlisted":false},{"type":"link","label":"Liveness","href":"/docs/next/checker-liveness","docId":"checker-liveness","unlisted":false},{"type":"link","label":"Loop Hoisting","href":"/docs/next/checker-loop-hoisting","docId":"checker-loop-hoisting","unlisted":false},{"type":"link","label":"Parameter Not Null Checked","href":"/docs/next/checker-parameter-not-null-checked","docId":"checker-parameter-not-null-checked","unlisted":false},{"type":"link","label":"`printf()` Argument Types","href":"/docs/next/checker-printf-args","docId":"checker-printf-args","unlisted":false},{"type":"link","label":"Pulse","href":"/docs/next/checker-pulse","docId":"checker-pulse","unlisted":false},{"type":"link","label":"Purity","href":"/docs/next/checker-purity","docId":"checker-purity","unlisted":false},{"type":"link","label":"Quandary","href":"/docs/next/checker-quandary","docId":"checker-quandary","unlisted":false},{"type":"link","label":"RacerD","href":"/docs/next/checker-racerd","docId":"checker-racerd","unlisted":false},{"type":"link","label":"Resource Leak Lab Exercise","href":"/docs/next/checker-resource-leak-lab","docId":"checker-resource-leak-lab","unlisted":false},{"type":"link","label":"SIL validation","href":"/docs/next/checker-sil-validation","docId":"checker-sil-validation","unlisted":false},{"type":"link","label":"Static Initialization Order Fiasco","href":"/docs/next/checker-siof","docId":"checker-siof","unlisted":false},{"type":"link","label":"Scope Leakage","href":"/docs/next/checker-scope-leakage","docId":"checker-scope-leakage","unlisted":false},{"type":"link","label":"Self in Block","href":"/docs/next/checker-self-in-block","docId":"checker-self-in-block","unlisted":false},{"type":"link","label":"Starvation","href":"/docs/next/checker-starvation","docId":"checker-starvation","unlisted":false},{"type":"link","label":"Topl","href":"/docs/next/checker-topl","docId":"checker-topl","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Foundations","items":[{"type":"link","label":"About Infer","href":"/docs/next/about-Infer","docId":"about-Infer","unlisted":false},{"type":"link","label":"Separation logic and bi-abduction","href":"/docs/next/separation-logic-and-bi-abduction","docId":"separation-logic-and-bi-abduction","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Contribute","items":[{"type":"link","label":"Building checkers with the Infer.AI framework","href":"/docs/next/absint-framework","docId":"absint-framework","unlisted":false},{"type":"link","label":"Infer Internal OCaml Modules API","href":"/docs/next/internal-API","docId":"internal-API","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Versions","items":[{"type":"link","label":"Documentation Versions","href":"/docs/next/versions","docId":"versions","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"about-Infer":{"id":"about-Infer","title":"About Infer","description":"Infer is a static program analyzer for Java, C, C++, Objective-C, and","sidebar":"docs"},"absint-framework":{"id":"absint-framework","title":"Building checkers with the Infer.AI framework","description":"Infer.AI is a framework for quickly developing abstract interpretation-based","sidebar":"docs"},"all-categories":{"id":"all-categories","title":"List of all categories of issue types","description":"Here are all the categories that issue types might belong to in Infer. Some issue types have no associated category at the moment. This usually indicates that the issue type is not yet mature enough to be used.","sidebar":"docs"},"all-checkers":{"id":"all-checkers","title":"List of all checkers","description":"Here is an overview of the checkers currently available in Infer.","sidebar":"docs"},"all-issue-types":{"id":"all-issue-types","title":"List of all issue types","description":"Here is an overview of the issue types currently reported by Infer.","sidebar":"docs"},"analyzing-apps-or-projects":{"id":"analyzing-apps-or-projects","title":"Analyzing apps or projects","description":"To analyze files with Infer you can use the compilers javac and clang. You","sidebar":"docs"},"checker-annotation-reachability":{"id":"checker-annotation-reachability","title":"Annotation Reachability","description":"Given pairs of source and sink annotations, e.g. `@A` and `@B`, this checker will warn whenever some method annotated with `@A` calls, directly or indirectly, another method annotated with `@B`. Besides the custom pairs, it is also possible to enable some built-in checks, such as `@PerformanceCritical` reaching `@Expensive` or `@NoAllocation` reaching `new`. See flags starting with `--annotation-reachability`.","sidebar":"docs"},"checker-biabduction":{"id":"checker-biabduction","title":"Biabduction","description":"This analysis deals with a range of issues, many linked to memory safety.","sidebar":"docs"},"checker-bufferoverrun":{"id":"checker-bufferoverrun","title":"Buffer Overrun Analysis (InferBO)","description":"InferBO is a detector for out-of-bounds array accesses.","sidebar":"docs"},"checker-config-impact-analysis":{"id":"checker-config-impact-analysis","title":"Config Impact Analysis","description":"[EXPERIMENTAL] Collects function that are called without config checks.","sidebar":"docs"},"checker-cost":{"id":"checker-cost","title":"Cost: Complexity Analysis","description":"Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with `infer reportdiff`.","sidebar":"docs"},"checker-datalog":{"id":"checker-datalog","title":"Datalog-based points-to analysis","description":"Experimental datalog-based points-to analysis.","sidebar":"docs"},"checker-fragment-retains-view":{"id":"checker-fragment-retains-view","title":"Fragment Retains View","description":"Detects when Android fragments are not explicitly nullified before becoming unreachable.","sidebar":"docs"},"checker-impurity":{"id":"checker-impurity","title":"Impurity","description":"Detects functions with potential side-effects. Same as \\"purity\\", but implemented on top of Pulse.","sidebar":"docs"},"checker-inefficient-keyset-iterator":{"id":"checker-inefficient-keyset-iterator","title":"Inefficient keySet Iterator","description":"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.","sidebar":"docs"},"checker-lineage":{"id":"checker-lineage","title":"Lineage","description":"Computes a dataflow graph","sidebar":"docs"},"checker-litho-required-props":{"id":"checker-litho-required-props","title":"Litho \\"Required Props\\"","description":"Checks that all non-optional `@Prop`s have been specified when constructing Litho components.","sidebar":"docs"},"checker-liveness":{"id":"checker-liveness","title":"Liveness","description":"Detection of dead stores and unused variables.","sidebar":"docs"},"checker-loop-hoisting":{"id":"checker-loop-hoisting","title":"Loop Hoisting","description":"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency.","sidebar":"docs"},"checker-parameter-not-null-checked":{"id":"checker-parameter-not-null-checked","title":"Parameter Not Null Checked","description":"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first.","sidebar":"docs"},"checker-printf-args":{"id":"checker-printf-args","title":"`printf()` Argument Types","description":"Detect mismatches between the Java `printf` format strings and the argument types For example, this checker will warn about the type error in `printf(\\"Hello %d\\", \\"world\\")`","sidebar":"docs"},"checker-pulse":{"id":"checker-pulse","title":"Pulse","description":"General-purpose memory and value analysis engine.","sidebar":"docs"},"checker-purity":{"id":"checker-purity","title":"Purity","description":"Detects pure (side-effect-free) functions. A different implementation of \\"impurity\\".","sidebar":"docs"},"checker-quandary":{"id":"checker-quandary","title":"Quandary","description":"The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a \\"sanitizer\\". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.","sidebar":"docs"},"checker-racerd":{"id":"checker-racerd","title":"RacerD","description":"Thread safety analysis.","sidebar":"docs"},"checker-resource-leak-lab":{"id":"checker-resource-leak-lab","title":"Resource Leak Lab Exercise","description":"Toy checker for the \\"resource leak\\" write-your-own-checker exercise.","sidebar":"docs"},"checker-scope-leakage":{"id":"checker-scope-leakage","title":"Scope Leakage","description":"The Java/Kotlin checker takes into account a set of \\"scope\\" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).","sidebar":"docs"},"checker-self-in-block":{"id":"checker-self-in-block","title":"Self in Block","description":"An Objective-C-specific analysis to detect when a block captures `self`.","sidebar":"docs"},"checker-sil-validation":{"id":"checker-sil-validation","title":"SIL validation","description":"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL.","sidebar":"docs"},"checker-siof":{"id":"checker-siof","title":"Static Initialization Order Fiasco","description":"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.","sidebar":"docs"},"checker-starvation":{"id":"checker-starvation","title":"Starvation","description":"Detect various kinds of situations when no progress is being made because of concurrency errors.","sidebar":"docs"},"checker-topl":{"id":"checker-topl","title":"Topl","description":"Detect errors based on user-provided state machines describing temporal properties over multiple objects.","sidebar":"docs"},"getting-started":{"id":"getting-started","title":"Getting started with Infer","description":"Get Infer","sidebar":"docs"},"hello-world":{"id":"hello-world","title":"Hello, World!","description":"Follow the instructions in this page to try Infer on a few small examples. You","sidebar":"docs"},"infer-workflow":{"id":"infer-workflow","title":"Infer workflow","description":"This page documents several ways of running Infer, that you can adapt to your","sidebar":"docs"},"internal-API":{"id":"internal-API","title":"Infer Internal OCaml Modules API","description":"Browse the generated documentation for Infer\'s OCaml code here.","sidebar":"docs"},"man-infer":{"id":"man-infer","title":"infer","description":"","sidebar":"docs"},"man-infer-analyze":{"id":"man-infer-analyze","title":"infer analyze","description":"","sidebar":"docs"},"man-infer-capture":{"id":"man-infer-capture","title":"infer capture","description":"","sidebar":"docs"},"man-infer-compile":{"id":"man-infer-compile","title":"infer compile","description":"","sidebar":"docs"},"man-infer-debug":{"id":"man-infer-debug","title":"infer debug","description":"","sidebar":"docs"},"man-infer-explore":{"id":"man-infer-explore","title":"infer explore","description":"","sidebar":"docs"},"man-infer-help":{"id":"man-infer-help","title":"infer help","description":"","sidebar":"docs"},"man-infer-report":{"id":"man-infer-report","title":"infer report","description":"","sidebar":"docs"},"man-infer-reportdiff":{"id":"man-infer-reportdiff","title":"infer reportdiff","description":"","sidebar":"docs"},"man-infer-run":{"id":"man-infer-run","title":"infer run","description":"","sidebar":"docs"},"man-pages":{"id":"man-pages","title":"Infer Manuals","description":"Here are the man pages for all the infer commands:"},"separation-logic-and-bi-abduction":{"id":"separation-logic-and-bi-abduction","title":"Separation logic and bi-abduction","description":"- Separation logic","sidebar":"docs"},"steps-for-ci":{"id":"steps-for-ci","title":"Recommended flow for CI","description":"The recommended flow for CI integration is to determine the modified files, and","sidebar":"docs"},"support":{"id":"support","title":"Infer | Need help?","description":"Need help?"},"versions":{"id":"versions","title":"Documentation Versions","description":"Browse the documentation for different versions:","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/assets/js/99c7964b.b3616e44.js b/assets/js/99c7964b.a6f83d36.js similarity index 93% rename from assets/js/99c7964b.b3616e44.js rename to assets/js/99c7964b.a6f83d36.js index 8ae7a7f0e6c..7a4661a8154 100644 --- a/assets/js/99c7964b.b3616e44.js +++ b/assets/js/99c7964b.a6f83d36.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3048],{7112:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var n=i(7624),s=i(2172);const r={title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."},o=void 0,c={id:"checker-siof",title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.",source:"@site/docs/checker-siof.md",sourceDirName:".",slug:"/checker-siof",permalink:"/docs/next/checker-siof",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."},sidebar:"docs",previous:{title:"Scope Leakage",permalink:"/docs/next/checker-scope-leakage"},next:{title:"SIL validation",permalink:"/docs/next/checker-sil-validation"}},a={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,n.jsxs)(t.p,{children:["Activate with ",(0,n.jsx)(t.code,{children:"--siof"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"C/C++/ObjC: Yes"}),"\n",(0,n.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,n.jsx)(t.li,{children:"Hack: No"}),"\n",(0,n.jsx)(t.li,{children:"Java: No"}),"\n",(0,n.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#static_initialization_order_fiasco",children:"STATIC_INITIALIZATION_ORDER_FIASCO"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>o});var n=i(1504);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3048],{7112:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var n=i(7624),s=i(2172);const r={title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."},o=void 0,c={id:"checker-siof",title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors.",source:"@site/docs/checker-siof.md",sourceDirName:".",slug:"/checker-siof",permalink:"/docs/next/checker-siof",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Static Initialization Order Fiasco",description:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."},sidebar:"docs",previous:{title:"SIL validation",permalink:"/docs/next/checker-sil-validation"},next:{title:"Scope Leakage",permalink:"/docs/next/checker-scope-leakage"}},a={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,n.jsxs)(t.p,{children:["Activate with ",(0,n.jsx)(t.code,{children:"--siof"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"C/C++/ObjC: Yes"}),"\n",(0,n.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,n.jsx)(t.li,{children:"Hack: No"}),"\n",(0,n.jsx)(t.li,{children:"Java: No"}),"\n",(0,n.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#static_initialization_order_fiasco",children:"STATIC_INITIALIZATION_ORDER_FIASCO"})}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>o});var n=i(1504);const s={},r=n.createContext(s);function o(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a373fd77.50ac0805.js b/assets/js/a373fd77.50ac0805.js deleted file mode 100644 index 3eccfd3d178..00000000000 --- a/assets/js/a373fd77.50ac0805.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4308],{6340:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var n=i(7624),r=i(2172);const s={title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."},o=void 0,c={id:"checker-inefficient-keyset-iterator",title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.",source:"@site/docs/checker-inefficient-keyset-iterator.md",sourceDirName:".",slug:"/checker-inefficient-keyset-iterator",permalink:"/docs/next/checker-inefficient-keyset-iterator",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."},sidebar:"docs",previous:{title:"Impurity",permalink:"/docs/next/checker-impurity"},next:{title:'Litho "Required Props"',permalink:"/docs/next/checker-litho-required-props"}},a={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function f(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,n.jsxs)(t.p,{children:["Activate with ",(0,n.jsx)(t.code,{children:"--inefficient-keyset-iterator"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"C/C++/ObjC: No"}),"\n",(0,n.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,n.jsx)(t.li,{children:"Hack: No"}),"\n",(0,n.jsx)(t.li,{children:"Java: Yes"}),"\n",(0,n.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#inefficient_keyset_iterator",children:"INEFFICIENT_KEYSET_ITERATOR"})}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(f,{...e})}):f(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>o});var n=i(1504);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a373fd77.e13e9aa9.js b/assets/js/a373fd77.e13e9aa9.js new file mode 100644 index 00000000000..b39e452c80c --- /dev/null +++ b/assets/js/a373fd77.e13e9aa9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4308],{6340:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>a,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var n=i(7624),r=i(2172);const s={title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."},o=void 0,c={id:"checker-inefficient-keyset-iterator",title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly.",source:"@site/docs/checker-inefficient-keyset-iterator.md",sourceDirName:".",slug:"/checker-inefficient-keyset-iterator",permalink:"/docs/next/checker-inefficient-keyset-iterator",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Inefficient keySet Iterator",description:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."},sidebar:"docs",previous:{title:"Impurity",permalink:"/docs/next/checker-impurity"},next:{title:"Lineage",permalink:"/docs/next/checker-lineage"}},a={},l=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function f(e){const t={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,r.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,n.jsxs)(t.p,{children:["Activate with ",(0,n.jsx)(t.code,{children:"--inefficient-keyset-iterator"}),"."]}),"\n",(0,n.jsx)(t.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"C/C++/ObjC: No"}),"\n",(0,n.jsx)(t.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(t.li,{children:"Erlang: No"}),"\n",(0,n.jsx)(t.li,{children:"Hack: No"}),"\n",(0,n.jsx)(t.li,{children:"Java: Yes"}),"\n",(0,n.jsx)(t.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(t.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"/docs/next/all-issue-types#inefficient_keyset_iterator",children:"INEFFICIENT_KEYSET_ITERATOR"})}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,r.M)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(f,{...e})}):f(e)}},2172:(e,t,i)=>{i.d(t,{I:()=>c,M:()=>o});var n=i(1504);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbdc39ec.2ba35945.js b/assets/js/bbdc39ec.2ba35945.js deleted file mode 100644 index f68b169717c..00000000000 --- a/assets/js/bbdc39ec.2ba35945.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3116],{1132:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var t=n(7624),s=n(2172);const o={title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."},c=void 0,r={id:"checker-sil-validation",title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL.",source:"@site/docs/checker-sil-validation.md",sourceDirName:".",slug:"/checker-sil-validation",permalink:"/docs/next/checker-sil-validation",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."},sidebar:"docs",previous:{title:"Static Initialization Order Fiasco",permalink:"/docs/next/checker-siof"},next:{title:"Lineage",permalink:"/docs/next/checker-lineage"}},l={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.M)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,t.jsxs)(i.p,{children:["Activate with ",(0,t.jsx)(i.code,{children:"--sil-validation"}),"."]}),"\n",(0,t.jsx)(i.p,{children:"Supported languages:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"C/C++/ObjC: No"}),"\n",(0,t.jsx)(i.li,{children:"C#/.Net: No"}),"\n",(0,t.jsx)(i.li,{children:"Erlang: No"}),"\n",(0,t.jsx)(i.li,{children:"Hack: No"}),"\n",(0,t.jsx)(i.li,{children:"Java: Yes"}),"\n",(0,t.jsx)(i.li,{children:"Python: No"}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,t.jsx)(i.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"/docs/next/all-issue-types#invalid_sil",children:"INVALID_SIL"})}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},2172:(e,i,n)=>{n.d(i,{I:()=>r,M:()=>c});var t=n(1504);const s={},o=t.createContext(s);function c(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbdc39ec.c4d6731a.js b/assets/js/bbdc39ec.c4d6731a.js new file mode 100644 index 00000000000..ea934c5c59d --- /dev/null +++ b/assets/js/bbdc39ec.c4d6731a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3116],{1132:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var n=t(7624),s=t(2172);const o={title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."},c=void 0,r={id:"checker-sil-validation",title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL.",source:"@site/docs/checker-sil-validation.md",sourceDirName:".",slug:"/checker-sil-validation",permalink:"/docs/next/checker-sil-validation",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"SIL validation",description:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."},sidebar:"docs",previous:{title:"Resource Leak Lab Exercise",permalink:"/docs/next/checker-resource-leak-lab"},next:{title:"Static Initialization Order Fiasco",permalink:"/docs/next/checker-siof"}},l={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,n.jsxs)(i.p,{children:["Activate with ",(0,n.jsx)(i.code,{children:"--sil-validation"}),"."]}),"\n",(0,n.jsx)(i.p,{children:"Supported languages:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"C/C++/ObjC: No"}),"\n",(0,n.jsx)(i.li,{children:"C#/.Net: No"}),"\n",(0,n.jsx)(i.li,{children:"Erlang: No"}),"\n",(0,n.jsx)(i.li,{children:"Hack: No"}),"\n",(0,n.jsx)(i.li,{children:"Java: Yes"}),"\n",(0,n.jsx)(i.li,{children:"Python: No"}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,n.jsx)(i.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:(0,n.jsx)(i.a,{href:"/docs/next/all-issue-types#invalid_sil",children:"INVALID_SIL"})}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},2172:(e,i,t)=>{t.d(i,{I:()=>r,M:()=>c});var n=t(1504);const s={},o=n.createContext(s);function c(e){const i=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),n.createElement(o.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd470307.b8b78b42.js b/assets/js/bd470307.b8b78b42.js deleted file mode 100644 index a92a97fb729..00000000000 --- a/assets/js/bd470307.b8b78b42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3612],{8488:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var c=n(7624),t=n(2172);const i={title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`."},l=void 0,r={id:"checker-self-in-block",title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`.",source:"@site/docs/checker-self-in-block.md",sourceDirName:".",slug:"/checker-self-in-block",permalink:"/docs/next/checker-self-in-block",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`."},sidebar:"docs",previous:{title:"Lineage",permalink:"/docs/next/checker-lineage"},next:{title:"Starvation",permalink:"/docs/next/checker-starvation"}},o={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.M)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(s.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,c.jsx)(s.code,{children:"self"}),"."]}),"\n",(0,c.jsxs)(s.p,{children:["Activate with ",(0,c.jsx)(s.code,{children:"--self-in-block"}),"."]}),"\n",(0,c.jsx)(s.p,{children:"Supported languages:"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsx)(s.li,{children:"C/C++/ObjC: Yes"}),"\n",(0,c.jsx)(s.li,{children:"C#/.Net: No"}),"\n",(0,c.jsx)(s.li,{children:"Erlang: No"}),"\n",(0,c.jsx)(s.li,{children:"Hack: No"}),"\n",(0,c.jsx)(s.li,{children:"Java: No"}),"\n",(0,c.jsx)(s.li,{children:"Python: No"}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,c.jsx)(s.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#captured_strong_self",children:"CAPTURED_STRONG_SELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#cxx_ref_captured_in_block",children:"CXX_REF_CAPTURED_IN_BLOCK"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#mixed_self_weakself",children:"MIXED_SELF_WEAKSELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#multiple_weakself",children:"MULTIPLE_WEAKSELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#strong_self_not_checked",children:"STRONG_SELF_NOT_CHECKED"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#weak_self_in_no_escape_block",children:"WEAK_SELF_IN_NO_ESCAPE_BLOCK"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.M)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(d,{...e})}):d(e)}},2172:(e,s,n)=>{n.d(s,{I:()=>r,M:()=>l});var c=n(1504);const t={},i=c.createContext(t);function l(e){const s=c.useContext(i);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),c.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bd470307.c33a28c8.js b/assets/js/bd470307.c33a28c8.js new file mode 100644 index 00000000000..a494a60e366 --- /dev/null +++ b/assets/js/bd470307.c33a28c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3612],{8488:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>a});var c=n(7624),t=n(2172);const i={title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`."},l=void 0,r={id:"checker-self-in-block",title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`.",source:"@site/docs/checker-self-in-block.md",sourceDirName:".",slug:"/checker-self-in-block",permalink:"/docs/next/checker-self-in-block",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Self in Block",description:"An Objective-C-specific analysis to detect when a block captures `self`."},sidebar:"docs",previous:{title:"Scope Leakage",permalink:"/docs/next/checker-scope-leakage"},next:{title:"Starvation",permalink:"/docs/next/checker-starvation"}},o={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function d(e){const s={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.M)(),...e.components};return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(s.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,c.jsx)(s.code,{children:"self"}),"."]}),"\n",(0,c.jsxs)(s.p,{children:["Activate with ",(0,c.jsx)(s.code,{children:"--self-in-block"}),"."]}),"\n",(0,c.jsx)(s.p,{children:"Supported languages:"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsx)(s.li,{children:"C/C++/ObjC: Yes"}),"\n",(0,c.jsx)(s.li,{children:"C#/.Net: No"}),"\n",(0,c.jsx)(s.li,{children:"Erlang: No"}),"\n",(0,c.jsx)(s.li,{children:"Hack: No"}),"\n",(0,c.jsx)(s.li,{children:"Java: No"}),"\n",(0,c.jsx)(s.li,{children:"Python: No"}),"\n"]}),"\n",(0,c.jsx)(s.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,c.jsx)(s.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,c.jsxs)(s.ul,{children:["\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#captured_strong_self",children:"CAPTURED_STRONG_SELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#cxx_ref_captured_in_block",children:"CXX_REF_CAPTURED_IN_BLOCK"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#mixed_self_weakself",children:"MIXED_SELF_WEAKSELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#multiple_weakself",children:"MULTIPLE_WEAKSELF"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#strong_self_not_checked",children:"STRONG_SELF_NOT_CHECKED"})}),"\n",(0,c.jsx)(s.li,{children:(0,c.jsx)(s.a,{href:"/docs/next/all-issue-types#weak_self_in_no_escape_block",children:"WEAK_SELF_IN_NO_ESCAPE_BLOCK"})}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.M)(),...e.components};return s?(0,c.jsx)(s,{...e,children:(0,c.jsx)(d,{...e})}):d(e)}},2172:(e,s,n)=>{n.d(s,{I:()=>r,M:()=>l});var c=n(1504);const t={},i=c.createContext(t);function l(e){const s=c.useContext(i);return c.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),c.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c222a988.44895a78.js b/assets/js/c222a988.44895a78.js new file mode 100644 index 00000000000..aa384a00536 --- /dev/null +++ b/assets/js/c222a988.44895a78.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7332],{3276:(e,r,c)=>{c.r(r),c.d(r,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=c(7624),n=c(2172);const t={title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.'},o=void 0,i={id:"checker-resource-leak-lab",title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.',source:"@site/docs/checker-resource-leak-lab.md",sourceDirName:".",slug:"/checker-resource-leak-lab",permalink:"/docs/next/checker-resource-leak-lab",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.'},sidebar:"docs",previous:{title:"RacerD",permalink:"/docs/next/checker-racerd"},next:{title:"SIL validation",permalink:"/docs/next/checker-sil-validation"}},l={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function u(e){const r={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.M)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,s.jsxs)(r.p,{children:["Activate with ",(0,s.jsx)(r.code,{children:"--resource-leak-lab"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"Supported languages:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"C/C++/ObjC: No"}),"\n",(0,s.jsx)(r.li,{children:"C#/.Net: Yes"}),"\n",(0,s.jsx)(r.li,{children:"Erlang: No"}),"\n",(0,s.jsx)(r.li,{children:"Hack: No"}),"\n",(0,s.jsx)(r.li,{children:"Java: Yes"}),"\n",(0,s.jsx)(r.li,{children:"Python: No"}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["This toy checker does nothing by default. Hack on it to make it report resource leaks! See the ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/infer/blob/main/infer/src/labs/README.md",children:"lab instructions"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,s.jsx)(r.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/next/all-issue-types#lab_resource_leak",children:"LAB_RESOURCE_LEAK"})}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,n.M)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},2172:(e,r,c)=>{c.d(r,{I:()=>i,M:()=>o});var s=c(1504);const n={},t=s.createContext(n);function o(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c222a988.c8e180b7.js b/assets/js/c222a988.c8e180b7.js deleted file mode 100644 index bb4c26878d3..00000000000 --- a/assets/js/c222a988.c8e180b7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7332],{3276:(e,r,c)=>{c.r(r),c.d(r,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>a});var s=c(7624),n=c(2172);const t={title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.'},o=void 0,i={id:"checker-resource-leak-lab",title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.',source:"@site/docs/checker-resource-leak-lab.md",sourceDirName:".",slug:"/checker-resource-leak-lab",permalink:"/docs/next/checker-resource-leak-lab",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"Resource Leak Lab Exercise",description:'Toy checker for the "resource leak" write-your-own-checker exercise.'},sidebar:"docs",previous:{title:"RacerD",permalink:"/docs/next/checker-racerd"},next:{title:"Scope Leakage",permalink:"/docs/next/checker-scope-leakage"}},l={},a=[{value:"List of Issue Types",id:"list-of-issue-types",level:2}];function u(e){const r={a:"a",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.M)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,s.jsxs)(r.p,{children:["Activate with ",(0,s.jsx)(r.code,{children:"--resource-leak-lab"}),"."]}),"\n",(0,s.jsx)(r.p,{children:"Supported languages:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"C/C++/ObjC: No"}),"\n",(0,s.jsx)(r.li,{children:"C#/.Net: Yes"}),"\n",(0,s.jsx)(r.li,{children:"Erlang: No"}),"\n",(0,s.jsx)(r.li,{children:"Hack: No"}),"\n",(0,s.jsx)(r.li,{children:"Java: Yes"}),"\n",(0,s.jsx)(r.li,{children:"Python: No"}),"\n"]}),"\n",(0,s.jsxs)(r.p,{children:["This toy checker does nothing by default. Hack on it to make it report resource leaks! See the ",(0,s.jsx)(r.a,{href:"https://github.com/facebook/infer/blob/main/infer/src/labs/README.md",children:"lab instructions"}),"."]}),"\n",(0,s.jsx)(r.h2,{id:"list-of-issue-types",children:"List of Issue Types"}),"\n",(0,s.jsx)(r.p,{children:"The following issue types are reported by this checker:"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:(0,s.jsx)(r.a,{href:"/docs/next/all-issue-types#lab_resource_leak",children:"LAB_RESOURCE_LEAK"})}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,n.M)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},2172:(e,r,c)=>{c.d(r,{I:()=>i,M:()=>o});var s=c(1504);const n={},t=s.createContext(n);function o(e){const r=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(t.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ca86781b.590bc618.js b/assets/js/ca86781b.5794cafa.js similarity index 56% rename from assets/js/ca86781b.590bc618.js rename to assets/js/ca86781b.5794cafa.js index 1a3aed655f9..2ebd3979131 100644 --- a/assets/js/ca86781b.590bc618.js +++ b/assets/js/ca86781b.5794cafa.js @@ -1 +1 @@ -"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4856],{3916:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=n(7624),s=n(2172);const t={title:"List of all checkers",hide_table_of_contents:!0},o=void 0,a={id:"all-checkers",title:"List of all checkers",description:"Here is an overview of the checkers currently available in Infer.",source:"@site/docs/all-checkers.md",sourceDirName:".",slug:"/all-checkers",permalink:"/docs/next/all-checkers",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"List of all checkers",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"infer run",permalink:"/docs/next/man-infer-run"},next:{title:"List of all categories of issue types",permalink:"/docs/next/all-categories"}},c={},l=[{value:"Annotation Reachability",id:"annotation-reachability",level:2},{value:"Biabduction",id:"biabduction",level:2},{value:"Buffer Overrun Analysis (InferBO)",id:"buffer-overrun-analysis-inferbo",level:2},{value:"Config Impact Analysis",id:"config-impact-analysis",level:2},{value:"Cost: Complexity Analysis",id:"cost-complexity-analysis",level:2},{value:"Datalog-based points-to analysis",id:"datalog-based-points-to-analysis",level:2},{value:"Fragment Retains View",id:"fragment-retains-view",level:2},{value:"Impurity",id:"impurity",level:2},{value:"Inefficient keySet Iterator",id:"inefficient-keyset-iterator",level:2},{value:"Litho "Required Props"",id:"litho-required-props",level:2},{value:"Liveness",id:"liveness",level:2},{value:"Loop Hoisting",id:"loop-hoisting",level:2},{value:"Parameter Not Null Checked",id:"parameter-not-null-checked",level:2},{value:"printf() Argument Types",id:"printf-argument-types",level:2},{value:"Pulse",id:"pulse",level:2},{value:"Purity",id:"purity",level:2},{value:"Quandary",id:"quandary",level:2},{value:"RacerD",id:"racerd",level:2},{value:"Resource Leak Lab Exercise",id:"resource-leak-lab-exercise",level:2},{value:"Scope Leakage",id:"scope-leakage",level:2},{value:"Static Initialization Order Fiasco",id:"static-initialization-order-fiasco",level:2},{value:"SIL validation",id:"sil-validation",level:2},{value:"Lineage",id:"lineage",level:2},{value:"Self in Block",id:"self-in-block",level:2},{value:"Starvation",id:"starvation",level:2},{value:"Topl",id:"topl",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",p:"p",strong:"strong",...(0,s.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"Here is an overview of the checkers currently available in Infer."}),"\n",(0,r.jsx)(i.h2,{id:"annotation-reachability",children:"Annotation Reachability"}),"\n",(0,r.jsxs)(i.p,{children:["Given pairs of source and sink annotations, e.g. ",(0,r.jsx)(i.code,{children:"@A"})," and ",(0,r.jsx)(i.code,{children:"@B"}),", this checker will warn whenever some method annotated with ",(0,r.jsx)(i.code,{children:"@A"})," calls, directly or indirectly, another method annotated with ",(0,r.jsx)(i.code,{children:"@B"}),". Besides the custom pairs, it is also possible to enable some built-in checks, such as ",(0,r.jsx)(i.code,{children:"@PerformanceCritical"})," reaching ",(0,r.jsx)(i.code,{children:"@Expensive"})," or ",(0,r.jsx)(i.code,{children:"@NoAllocation"})," reaching ",(0,r.jsx)(i.code,{children:"new"}),". See flags starting with ",(0,r.jsx)(i.code,{children:"--annotation-reachability"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-annotation-reachability",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"biabduction",children:"Biabduction"}),"\n",(0,r.jsx)(i.p,{children:"This analysis deals with a range of issues, many linked to memory safety."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," This has been replaced by Pulse and will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-biabduction",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"buffer-overrun-analysis-inferbo",children:"Buffer Overrun Analysis (InferBO)"}),"\n",(0,r.jsx)(i.p,{children:"InferBO is a detector for out-of-bounds array accesses."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-bufferoverrun",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"config-impact-analysis",children:"Config Impact Analysis"}),"\n",(0,r.jsx)(i.p,{children:"[EXPERIMENTAL] Collects function that are called without config checks."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-config-impact-analysis",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"cost-complexity-analysis",children:"Cost: Complexity Analysis"}),"\n",(0,r.jsxs)(i.p,{children:["Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with ",(0,r.jsx)(i.code,{children:"infer reportdiff"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-cost",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"datalog-based-points-to-analysis",children:"Datalog-based points-to analysis"}),"\n",(0,r.jsx)(i.p,{children:"Experimental datalog-based points-to analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-datalog",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"fragment-retains-view",children:"Fragment Retains View"}),"\n",(0,r.jsx)(i.p,{children:"Detects when Android fragments are not explicitly nullified before becoming unreachable."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained due to poor precision."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-fragment-retains-view",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"impurity",children:"Impurity"}),"\n",(0,r.jsx)(i.p,{children:'Detects functions with potential side-effects. Same as "purity", but implemented on top of Pulse.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-impurity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"inefficient-keyset-iterator",children:"Inefficient keySet Iterator"}),"\n",(0,r.jsx)(i.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-inefficient-keyset-iterator",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"litho-required-props",children:'Litho "Required Props"'}),"\n",(0,r.jsxs)(i.p,{children:["Checks that all non-optional ",(0,r.jsx)(i.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-litho-required-props",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"liveness",children:"Liveness"}),"\n",(0,r.jsx)(i.p,{children:"Detection of dead stores and unused variables."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-liveness",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"loop-hoisting",children:"Loop Hoisting"}),"\n",(0,r.jsx)(i.p,{children:"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-loop-hoisting",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"parameter-not-null-checked",children:"Parameter Not Null Checked"}),"\n",(0,r.jsx)(i.p,{children:"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-parameter-not-null-checked",children:"Visit here for more information."})}),"\n",(0,r.jsxs)(i.h2,{id:"printf-argument-types",children:[(0,r.jsx)(i.code,{children:"printf()"})," Argument Types"]}),"\n",(0,r.jsxs)(i.p,{children:["Detect mismatches between the Java ",(0,r.jsx)(i.code,{children:"printf"})," format strings and the argument types For example, this checker will warn about the type error in ",(0,r.jsx)(i.code,{children:'printf("Hello %d", "world")'})]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-printf-args",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"pulse",children:"Pulse"}),"\n",(0,r.jsx)(i.p,{children:"General-purpose memory and value analysis engine."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-pulse",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"purity",children:"Purity"}),"\n",(0,r.jsx)(i.p,{children:'Detects pure (side-effect-free) functions. A different implementation of "impurity".'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-purity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"quandary",children:"Quandary"}),"\n",(0,r.jsx)(i.p,{children:'The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.'}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Taint analysis is now supported by the Pulse checker and Quandary will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-quandary",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"racerd",children:"RacerD"}),"\n",(0,r.jsx)(i.p,{children:"Thread safety analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-racerd",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"resource-leak-lab-exercise",children:"Resource Leak Lab Exercise"}),"\n",(0,r.jsx)(i.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-resource-leak-lab",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"scope-leakage",children:"Scope Leakage"}),"\n",(0,r.jsx)(i.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-scope-leakage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"static-initialization-order-fiasco",children:"Static Initialization Order Fiasco"}),"\n",(0,r.jsx)(i.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-siof",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"sil-validation",children:"SIL validation"}),"\n",(0,r.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-sil-validation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"lineage",children:"Lineage"}),"\n",(0,r.jsx)(i.p,{children:"Computes a dataflow graph"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-lineage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"self-in-block",children:"Self in Block"}),"\n",(0,r.jsxs)(i.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,r.jsx)(i.code,{children:"self"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-self-in-block",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"starvation",children:"Starvation"}),"\n",(0,r.jsx)(i.p,{children:"Detect various kinds of situations when no progress is being made because of concurrency errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-starvation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"topl",children:"Topl"}),"\n",(0,r.jsx)(i.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-topl",children:"Visit here for more information."})})]})}function h(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,i,n)=>{n.d(i,{I:()=>a,M:()=>o});var r=n(1504);const s={},t=r.createContext(s);function o(e){const i=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4856],{3916:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var r=n(7624),s=n(2172);const t={title:"List of all checkers",hide_table_of_contents:!0},o=void 0,a={id:"all-checkers",title:"List of all checkers",description:"Here is an overview of the checkers currently available in Infer.",source:"@site/docs/all-checkers.md",sourceDirName:".",slug:"/all-checkers",permalink:"/docs/next/all-checkers",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{title:"List of all checkers",hide_table_of_contents:!0},sidebar:"docs",previous:{title:"infer run",permalink:"/docs/next/man-infer-run"},next:{title:"List of all categories of issue types",permalink:"/docs/next/all-categories"}},c={},l=[{value:"Annotation Reachability",id:"annotation-reachability",level:2},{value:"Biabduction",id:"biabduction",level:2},{value:"Buffer Overrun Analysis (InferBO)",id:"buffer-overrun-analysis-inferbo",level:2},{value:"Config Impact Analysis",id:"config-impact-analysis",level:2},{value:"Cost: Complexity Analysis",id:"cost-complexity-analysis",level:2},{value:"Datalog-based points-to analysis",id:"datalog-based-points-to-analysis",level:2},{value:"Fragment Retains View",id:"fragment-retains-view",level:2},{value:"Impurity",id:"impurity",level:2},{value:"Inefficient keySet Iterator",id:"inefficient-keyset-iterator",level:2},{value:"Lineage",id:"lineage",level:2},{value:"Litho "Required Props"",id:"litho-required-props",level:2},{value:"Liveness",id:"liveness",level:2},{value:"Loop Hoisting",id:"loop-hoisting",level:2},{value:"Parameter Not Null Checked",id:"parameter-not-null-checked",level:2},{value:"printf() Argument Types",id:"printf-argument-types",level:2},{value:"Pulse",id:"pulse",level:2},{value:"Purity",id:"purity",level:2},{value:"Quandary",id:"quandary",level:2},{value:"RacerD",id:"racerd",level:2},{value:"Resource Leak Lab Exercise",id:"resource-leak-lab-exercise",level:2},{value:"SIL validation",id:"sil-validation",level:2},{value:"Static Initialization Order Fiasco",id:"static-initialization-order-fiasco",level:2},{value:"Scope Leakage",id:"scope-leakage",level:2},{value:"Self in Block",id:"self-in-block",level:2},{value:"Starvation",id:"starvation",level:2},{value:"Topl",id:"topl",level:2}];function d(e){const i={a:"a",code:"code",h2:"h2",p:"p",strong:"strong",...(0,s.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.p,{children:"Here is an overview of the checkers currently available in Infer."}),"\n",(0,r.jsx)(i.h2,{id:"annotation-reachability",children:"Annotation Reachability"}),"\n",(0,r.jsxs)(i.p,{children:["Given pairs of source and sink annotations, e.g. ",(0,r.jsx)(i.code,{children:"@A"})," and ",(0,r.jsx)(i.code,{children:"@B"}),", this checker will warn whenever some method annotated with ",(0,r.jsx)(i.code,{children:"@A"})," calls, directly or indirectly, another method annotated with ",(0,r.jsx)(i.code,{children:"@B"}),". Besides the custom pairs, it is also possible to enable some built-in checks, such as ",(0,r.jsx)(i.code,{children:"@PerformanceCritical"})," reaching ",(0,r.jsx)(i.code,{children:"@Expensive"})," or ",(0,r.jsx)(i.code,{children:"@NoAllocation"})," reaching ",(0,r.jsx)(i.code,{children:"new"}),". See flags starting with ",(0,r.jsx)(i.code,{children:"--annotation-reachability"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-annotation-reachability",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"biabduction",children:"Biabduction"}),"\n",(0,r.jsx)(i.p,{children:"This analysis deals with a range of issues, many linked to memory safety."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," This has been replaced by Pulse and will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-biabduction",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"buffer-overrun-analysis-inferbo",children:"Buffer Overrun Analysis (InferBO)"}),"\n",(0,r.jsx)(i.p,{children:"InferBO is a detector for out-of-bounds array accesses."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-bufferoverrun",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"config-impact-analysis",children:"Config Impact Analysis"}),"\n",(0,r.jsx)(i.p,{children:"[EXPERIMENTAL] Collects function that are called without config checks."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-config-impact-analysis",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"cost-complexity-analysis",children:"Cost: Complexity Analysis"}),"\n",(0,r.jsxs)(i.p,{children:["Computes the asymptotic complexity of functions with respect to execution cost or other user defined resources. Can be used to detect changes in the complexity with ",(0,r.jsx)(i.code,{children:"infer reportdiff"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-cost",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"datalog-based-points-to-analysis",children:"Datalog-based points-to analysis"}),"\n",(0,r.jsx)(i.p,{children:"Experimental datalog-based points-to analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-datalog",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"fragment-retains-view",children:"Fragment Retains View"}),"\n",(0,r.jsx)(i.p,{children:"Detects when Android fragments are not explicitly nullified before becoming unreachable."}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained due to poor precision."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-fragment-retains-view",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"impurity",children:"Impurity"}),"\n",(0,r.jsx)(i.p,{children:'Detects functions with potential side-effects. Same as "purity", but implemented on top of Pulse.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-impurity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"inefficient-keyset-iterator",children:"Inefficient keySet Iterator"}),"\n",(0,r.jsx)(i.p,{children:"Check for inefficient uses of iterators that iterate on keys then lookup their values, instead of iterating on key-value pairs directly."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-inefficient-keyset-iterator",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"lineage",children:"Lineage"}),"\n",(0,r.jsx)(i.p,{children:"Computes a dataflow graph"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-lineage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"litho-required-props",children:'Litho "Required Props"'}),"\n",(0,r.jsxs)(i.p,{children:["Checks that all non-optional ",(0,r.jsx)(i.code,{children:"@Prop"}),"s have been specified when constructing Litho components."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-litho-required-props",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"liveness",children:"Liveness"}),"\n",(0,r.jsx)(i.p,{children:"Detection of dead stores and unused variables."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-liveness",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"loop-hoisting",children:"Loop Hoisting"}),"\n",(0,r.jsx)(i.p,{children:"Detect opportunities to hoist function calls that are invariant outside of loop bodies for efficiency."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-loop-hoisting",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"parameter-not-null-checked",children:"Parameter Not Null Checked"}),"\n",(0,r.jsx)(i.p,{children:"An Objective-C-specific analysis to detect when a block parameter is used before being checked for null first."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-parameter-not-null-checked",children:"Visit here for more information."})}),"\n",(0,r.jsxs)(i.h2,{id:"printf-argument-types",children:[(0,r.jsx)(i.code,{children:"printf()"})," Argument Types"]}),"\n",(0,r.jsxs)(i.p,{children:["Detect mismatches between the Java ",(0,r.jsx)(i.code,{children:"printf"})," format strings and the argument types For example, this checker will warn about the type error in ",(0,r.jsx)(i.code,{children:'printf("Hello %d", "world")'})]}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Unmaintained."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-printf-args",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"pulse",children:"Pulse"}),"\n",(0,r.jsx)(i.p,{children:"General-purpose memory and value analysis engine."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-pulse",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"purity",children:"Purity"}),"\n",(0,r.jsx)(i.p,{children:'Detects pure (side-effect-free) functions. A different implementation of "impurity".'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-purity",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"quandary",children:"Quandary"}),"\n",(0,r.jsx)(i.p,{children:'The Quandary taint analysis detects flows of values between sources and sinks, except if the value went through a "sanitizer". In addition to some defaults, users can specify their own sources, sinks, and sanitizers functions.'}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.strong,{children:"***DEPRECATED***"})," Taint analysis is now supported by the Pulse checker and Quandary will be removed in the next release."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-quandary",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"racerd",children:"RacerD"}),"\n",(0,r.jsx)(i.p,{children:"Thread safety analysis."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-racerd",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"resource-leak-lab-exercise",children:"Resource Leak Lab Exercise"}),"\n",(0,r.jsx)(i.p,{children:'Toy checker for the "resource leak" write-your-own-checker exercise.'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-resource-leak-lab",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"sil-validation",children:"SIL validation"}),"\n",(0,r.jsx)(i.p,{children:"This checker validates that all SIL instructions in all procedure bodies conform to a (front-end specific) subset of SIL."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-sil-validation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"static-initialization-order-fiasco",children:"Static Initialization Order Fiasco"}),"\n",(0,r.jsx)(i.p,{children:"Catches Static Initialization Order Fiascos in C++, that can lead to subtle, compiler-version-dependent errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-siof",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"scope-leakage",children:"Scope Leakage"}),"\n",(0,r.jsx)(i.p,{children:'The Java/Kotlin checker takes into account a set of "scope" annotations and a must-not-hold relation over the scopes. The checker raises an alarm if there exists a field access path from object A to object B, with respective scopes SA and SB, such that must-not-hold(SA, SB).'}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-scope-leakage",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"self-in-block",children:"Self in Block"}),"\n",(0,r.jsxs)(i.p,{children:["An Objective-C-specific analysis to detect when a block captures ",(0,r.jsx)(i.code,{children:"self"}),"."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-self-in-block",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"starvation",children:"Starvation"}),"\n",(0,r.jsx)(i.p,{children:"Detect various kinds of situations when no progress is being made because of concurrency errors."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-starvation",children:"Visit here for more information."})}),"\n",(0,r.jsx)(i.h2,{id:"topl",children:"Topl"}),"\n",(0,r.jsx)(i.p,{children:"Detect errors based on user-provided state machines describing temporal properties over multiple objects."}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.a,{href:"/docs/next/checker-topl",children:"Visit here for more information."})})]})}function h(e={}){const{wrapper:i}={...(0,s.M)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},2172:(e,i,n)=>{n.d(i,{I:()=>a,M:()=>o});var r=n(1504);const s={},t=r.createContext(s);function o(e){const i=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),r.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.ad199838.js b/assets/js/runtime~main.c94b7c00.js similarity index 77% rename from assets/js/runtime~main.ad199838.js rename to assets/js/runtime~main.c94b7c00.js index 76a08e84924..ca1a5bd5d84 100644 --- a/assets/js/runtime~main.ad199838.js +++ b/assets/js/runtime~main.c94b7c00.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,b={},c={};function r(e){var a=c[e];if(void 0!==a)return a.exports;var f=c[e]={exports:{}};return b[e].call(f.exports,f,f.exports,r),f.exports}r.m=b,e=[],r.O=(a,f,d,b)=>{if(!f){var c=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[f,d,b]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var c={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>c[a]=()=>e[a]));return c.default=()=>e,r.d(b,c),b},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({112:"e44e3f47",172:"21614072",188:"bab022f4",208:"184ad633",264:"3f2a1ecb",379:"9258f162",644:"3c741b47",724:"f5ff54f0",820:"58de4400",904:"3c653e3b",920:"16fe8a4c",956:"cd83de9e",980:"ceca19cd",1008:"1460e89b",1080:"9242256d",1085:"1fdfdeaa",1088:"219c4568",1116:"e2e89445",1200:"bc3f1a98",1240:"e15bcb33",1260:"5c9e12d1",1272:"b4e1da39",1292:"dc4598d0",1352:"0346afaa",1412:"7efbfa7e",1440:"c7401661",1624:"041e4035",1660:"70793eb2",1672:"21a9d6ed",1692:"f8092feb",1728:"d9e16301",1792:"671939c9",1912:"64f1f19c",2008:"9118549b",2012:"af0d8a1e",2068:"00d3276d",2096:"a5a260f1",2124:"c2d67624",2200:"45d37095",2356:"79263788",2416:"6baf1826",2448:"f5711d0d",2632:"c4f5d8e4",2708:"9d4bdb35",2728:"937dc5a6",2756:"3423820d",2760:"420497a2",2762:"413f2abb",2764:"c027c09e",2872:"9a49882e",2900:"be77d225",3016:"def5ef2c",3043:"3caf9b73",3044:"509dc7bf",3048:"99c7964b",3104:"ddb8503b",3116:"bbdc39ec",3128:"12577cfd",3132:"ae565638",3200:"f278ac2c",3280:"e6b9ef91",3292:"fa38ac94",3372:"fa9ab54d",3448:"cbb882cb",3596:"a33b6a74",3600:"e66621bc",3612:"bd470307",3796:"1dbe42a7",3840:"ab17452f",3876:"1db0afb7",4020:"fe661d8a",4072:"495e5e06",4152:"aae2c465",4156:"af0818da",4184:"9d221b96",4217:"6021085e",4220:"a78783ee",4304:"5e95c892",4308:"a373fd77",4440:"f769b3fd",4486:"64cca8ef",4616:"c14a26e3",4666:"a94703ab",4724:"4c2546f9",4824:"6297ff83",4856:"ca86781b",4976:"a6aa9e1f",5008:"5f403532",5048:"c26add1d",5192:"da41ed28",5244:"3eac2097",5336:"1d8647da",5388:"c71502c9",5505:"5a5dcc21",5512:"814f3328",5516:"c8a5dae5",5584:"8a061d83",5680:"acaf655c",5696:"935f2afb",5708:"7d50aa41",5752:"7f661f82",5761:"223037ba",5840:"71a2656f",5868:"c2f60cfc",5920:"eb0c92c1",6040:"7b1f0035",6068:"df12ff2a",6164:"8fdeae25",6180:"25a5a20c",6209:"49bfadd9",6292:"b2b675dd",6322:"15a3954c",6344:"ccc49370",6416:"92185360",6452:"0fe8a02a",6500:"a7bd4aaa",6576:"5bb07cf5",6608:"b784ffba",6680:"f5cfbeab",6714:"4dac5fec",6730:"57bcddd6",6732:"bf6aacca",6748:"bc318449",6752:"17896441",6828:"43455a69",6868:"31868bec",6880:"b2f554cd",6952:"ff0352e3",7012:"56ebd09a",7028:"9e4087bc",7136:"df53045f",7180:"99b7fc87",7192:"3d9729af",7208:"aaff9110",7296:"0ac93784",7332:"c222a988",7552:"a6f42423",7568:"cb9da62d",7664:"62e81aa6",7712:"6d752ef5",7724:"2ba1d2b8",7840:"128c6d36",7920:"3c055f5e",7948:"1df9637e",7952:"18328e9e",7996:"acb2d06a",8008:"556d04db",8012:"5bb3de56",8176:"aa0b35eb",8252:"b5b9c8e0",8263:"e305a15c",8372:"8919ea97",8384:"06d8773d",8392:"a2bed8f0",8444:"8db808e7",8448:"a9946d6a",8528:"0c0efcaa",8532:"a90afd08",8544:"c359af60",8601:"e6b91a21",8608:"c412bf64",8768:"491a3217",8808:"9702a600",8858:"a02168a2",8906:"33776668",8916:"4fefa35c",8928:"1906a68b",8934:"b065408b",8980:"abc9d724",9032:"e0f83a1d",9064:"62b182e9",9096:"879f7a7c",9198:"d47ba782",9258:"bd8da646",9396:"e436f9fb",9400:"3eb0a99f",9412:"c8131338",9456:"34fbd09a",9648:"1a4e3797",9656:"e9325e77",9700:"293e08e8",9728:"04f8d6af",9792:"1c7a9c9f",9808:"b9f8aa82"}[e]||e)+"."+{112:"ffbbd5a2",172:"3d6916df",188:"79e4a80e",208:"eea5a87b",264:"fccfb010",379:"0e4d7b0a",606:"027c6754",644:"dd600205",724:"ef4e73e6",820:"0d6348ab",904:"d8e59a5c",920:"9425a15e",956:"1cb8b261",980:"a309122e",1008:"725073a1",1080:"528a43fb",1085:"8a3c90e1",1088:"fc2e112f",1116:"0e7edc0d",1200:"390cae50",1240:"cc1b4e88",1260:"b3bb7e41",1272:"2099fa4d",1292:"6d320dd3",1352:"2a632c4a",1412:"40b6eb7f",1440:"be188dac",1624:"27c01a88",1660:"2305c43d",1672:"fef644e3",1676:"a0d9bd55",1692:"57dc7e74",1728:"32b3bbc5",1792:"7fe26650",1912:"aa3ea31b",2008:"591896b0",2012:"646cf20d",2068:"03674a6d",2096:"f47494d4",2124:"b332c10d",2200:"0ba3ee42",2356:"c00c6910",2416:"2e1ea009",2448:"f7fce5c6",2528:"2436a084",2632:"45587cbf",2708:"132887ba",2728:"7a7e0323",2756:"a542dc61",2760:"e97e3bca",2762:"a3457e4c",2764:"4fc4c65f",2872:"c1ef5e32",2900:"6d04e5db",3016:"240a2ea8",3043:"e8e1a67e",3044:"1f608ccf",3048:"b3616e44",3104:"8d473c1e",3116:"2ba35945",3128:"c2a8e39f",3132:"f2fe2dd6",3200:"124ee451",3280:"f3c9d5af",3292:"73f3b653",3372:"fd1aa6a5",3448:"141e3db8",3596:"2ef6d204",3600:"5479a356",3612:"b8b78b42",3796:"a018a53d",3840:"3d5798e8",3876:"966742a8",4020:"a783da53",4072:"1bf8fe81",4152:"76957a46",4156:"2b0ca4a0",4184:"2ce25209",4217:"454fc3dc",4220:"399d3336",4304:"84883c70",4308:"50ac0805",4440:"6f9bafa0",4486:"47a97907",4552:"a809afa9",4616:"a5d26616",4666:"15af1f33",4724:"aa757dad",4824:"ba2e3f26",4856:"590bc618",4976:"2123d972",5008:"e45b0829",5048:"64a8d6d6",5192:"18b098d4",5244:"20f274f3",5336:"913a6527",5388:"a515464f",5505:"0210552f",5512:"8f5f87e7",5516:"5dadb0ab",5584:"d6beed89",5680:"efd9713e",5696:"83266297",5708:"76d6ebf0",5752:"36188801",5761:"d86b0e22",5840:"d89b2af4",5868:"c2fd70a8",5920:"08bdd6e6",6040:"03e05687",6068:"2ada05aa",6164:"5abc684d",6180:"58d19b0c",6209:"8ce1a55c",6292:"1a619e45",6322:"da84e45e",6344:"79bdc319",6416:"62040dd7",6452:"9a882eef",6500:"ad11e11e",6576:"2d190a20",6608:"157cb050",6680:"8aceb2e0",6714:"4d9bde8d",6730:"5a4351c7",6732:"2067f847",6748:"0acbe71c",6752:"ff15626b",6828:"ef40ff61",6868:"a2757938",6880:"bf75ef81",6952:"452e946b",7012:"8d1bf24f",7028:"e5742792",7136:"d1effc72",7180:"fd1ec705",7192:"f3228e08",7208:"8ee7db0a",7296:"141b2ea4",7332:"c8e180b7",7552:"45269320",7568:"c7d307bc",7664:"0d34f5ce",7712:"08611302",7724:"ddfb9119",7840:"6a105ea1",7920:"104ed9fb",7948:"c9dfcd9d",7952:"d67c2c99",7996:"3da611ed",8008:"faf8a5ff",8012:"5e6c7cc5",8176:"f5d90ee0",8252:"f9249c3a",8263:"bd5a9ce2",8372:"9362dd44",8384:"b5758238",8392:"31624d4e",8444:"92e5af8b",8448:"081419be",8528:"993152bb",8532:"25cd3588",8544:"6ddf4c70",8601:"8a291491",8608:"b0e14a54",8768:"0ca8966a",8808:"1e2ebe76",8858:"dd051560",8879:"fbade3c5",8906:"599a6778",8916:"39c80c62",8928:"81f3f93c",8934:"2540184c",8980:"7b4df509",9032:"b75166be",9064:"de7ab418",9096:"312e269b",9116:"f0ae5377",9198:"b0e2468a",9258:"1266cf6c",9396:"644a2877",9400:"91186561",9412:"ca0da140",9456:"3daf123e",9648:"67f3f595",9656:"b0fe78fe",9700:"7411a2d9",9728:"1acbacea",9792:"ccb7e789",9808:"cc78e901"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var c,t;if(void 0!==f)for(var o=document.getElementsByTagName("script"),n=0;n{c.onerror=c.onload=null,clearTimeout(l);var b=d[e];if(delete d[e],c.parentNode&&c.parentNode.removeChild(c),b&&b.forEach((e=>e(f))),a)return a(f)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),t&&document.head.appendChild(c)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"6752",21614072:"172",33776668:"8906",79263788:"2356",92185360:"6416",e44e3f47:"112",bab022f4:"188","184ad633":"208","3f2a1ecb":"264","9258f162":"379","3c741b47":"644",f5ff54f0:"724","58de4400":"820","3c653e3b":"904","16fe8a4c":"920",cd83de9e:"956",ceca19cd:"980","1460e89b":"1008","9242256d":"1080","1fdfdeaa":"1085","219c4568":"1088",e2e89445:"1116",bc3f1a98:"1200",e15bcb33:"1240","5c9e12d1":"1260",b4e1da39:"1272",dc4598d0:"1292","0346afaa":"1352","7efbfa7e":"1412",c7401661:"1440","041e4035":"1624","70793eb2":"1660","21a9d6ed":"1672",f8092feb:"1692",d9e16301:"1728","671939c9":"1792","64f1f19c":"1912","9118549b":"2008",af0d8a1e:"2012","00d3276d":"2068",a5a260f1:"2096",c2d67624:"2124","45d37095":"2200","6baf1826":"2416",f5711d0d:"2448",c4f5d8e4:"2632","9d4bdb35":"2708","937dc5a6":"2728","3423820d":"2756","420497a2":"2760","413f2abb":"2762",c027c09e:"2764","9a49882e":"2872",be77d225:"2900",def5ef2c:"3016","3caf9b73":"3043","509dc7bf":"3044","99c7964b":"3048",ddb8503b:"3104",bbdc39ec:"3116","12577cfd":"3128",ae565638:"3132",f278ac2c:"3200",e6b9ef91:"3280",fa38ac94:"3292",fa9ab54d:"3372",cbb882cb:"3448",a33b6a74:"3596",e66621bc:"3600",bd470307:"3612","1dbe42a7":"3796",ab17452f:"3840","1db0afb7":"3876",fe661d8a:"4020","495e5e06":"4072",aae2c465:"4152",af0818da:"4156","9d221b96":"4184","6021085e":"4217",a78783ee:"4220","5e95c892":"4304",a373fd77:"4308",f769b3fd:"4440","64cca8ef":"4486",c14a26e3:"4616",a94703ab:"4666","4c2546f9":"4724","6297ff83":"4824",ca86781b:"4856",a6aa9e1f:"4976","5f403532":"5008",c26add1d:"5048",da41ed28:"5192","3eac2097":"5244","1d8647da":"5336",c71502c9:"5388","5a5dcc21":"5505","814f3328":"5512",c8a5dae5:"5516","8a061d83":"5584",acaf655c:"5680","935f2afb":"5696","7d50aa41":"5708","7f661f82":"5752","223037ba":"5761","71a2656f":"5840",c2f60cfc:"5868",eb0c92c1:"5920","7b1f0035":"6040",df12ff2a:"6068","8fdeae25":"6164","25a5a20c":"6180","49bfadd9":"6209",b2b675dd:"6292","15a3954c":"6322",ccc49370:"6344","0fe8a02a":"6452",a7bd4aaa:"6500","5bb07cf5":"6576",b784ffba:"6608",f5cfbeab:"6680","4dac5fec":"6714","57bcddd6":"6730",bf6aacca:"6732",bc318449:"6748","43455a69":"6828","31868bec":"6868",b2f554cd:"6880",ff0352e3:"6952","56ebd09a":"7012","9e4087bc":"7028",df53045f:"7136","99b7fc87":"7180","3d9729af":"7192",aaff9110:"7208","0ac93784":"7296",c222a988:"7332",a6f42423:"7552",cb9da62d:"7568","62e81aa6":"7664","6d752ef5":"7712","2ba1d2b8":"7724","128c6d36":"7840","3c055f5e":"7920","1df9637e":"7948","18328e9e":"7952",acb2d06a:"7996","556d04db":"8008","5bb3de56":"8012",aa0b35eb:"8176",b5b9c8e0:"8252",e305a15c:"8263","8919ea97":"8372","06d8773d":"8384",a2bed8f0:"8392","8db808e7":"8444",a9946d6a:"8448","0c0efcaa":"8528",a90afd08:"8532",c359af60:"8544",e6b91a21:"8601",c412bf64:"8608","491a3217":"8768","9702a600":"8808",a02168a2:"8858","4fefa35c":"8916","1906a68b":"8928",b065408b:"8934",abc9d724:"8980",e0f83a1d:"9032","62b182e9":"9064","879f7a7c":"9096",d47ba782:"9198",bd8da646:"9258",e436f9fb:"9396","3eb0a99f":"9400",c8131338:"9412","34fbd09a":"9456","1a4e3797":"9648",e9325e77:"9656","293e08e8":"9700","04f8d6af":"9728","1c7a9c9f":"9792",b9f8aa82:"9808"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^2(17|9)6$/.test(a))e[a]=0;else{var b=new Promise(((f,b)=>d=e[a]=[f,b]));f.push(d[2]=b);var c=r.p+r.u(a),t=new Error;r.l(c,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var b=f&&("load"===f.type?"missing":f.type),c=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+b+": "+c+")",t.name="ChunkLoadError",t.type=b,t.request=c,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,b,c=f[0],t=f[1],o=f[2],n=0;if(c.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,c={},b={};function r(e){var a=b[e];if(void 0!==a)return a.exports;var f=b[e]={exports:{}};return c[e].call(f.exports,f,f.exports,r),f.exports}r.m=c,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({112:"e44e3f47",172:"21614072",188:"bab022f4",208:"184ad633",264:"3f2a1ecb",379:"9258f162",644:"3c741b47",724:"f5ff54f0",820:"58de4400",904:"3c653e3b",920:"16fe8a4c",956:"cd83de9e",980:"ceca19cd",1008:"1460e89b",1080:"9242256d",1085:"1fdfdeaa",1088:"219c4568",1116:"e2e89445",1200:"bc3f1a98",1240:"e15bcb33",1260:"5c9e12d1",1272:"b4e1da39",1292:"dc4598d0",1352:"0346afaa",1412:"7efbfa7e",1440:"c7401661",1624:"041e4035",1660:"70793eb2",1672:"21a9d6ed",1692:"f8092feb",1728:"d9e16301",1792:"671939c9",1912:"64f1f19c",2008:"9118549b",2012:"af0d8a1e",2068:"00d3276d",2096:"a5a260f1",2124:"c2d67624",2200:"45d37095",2356:"79263788",2416:"6baf1826",2448:"f5711d0d",2632:"c4f5d8e4",2708:"9d4bdb35",2728:"937dc5a6",2756:"3423820d",2760:"420497a2",2762:"413f2abb",2764:"c027c09e",2872:"9a49882e",2900:"be77d225",3016:"def5ef2c",3043:"3caf9b73",3044:"509dc7bf",3048:"99c7964b",3104:"ddb8503b",3116:"bbdc39ec",3128:"12577cfd",3132:"ae565638",3200:"f278ac2c",3280:"e6b9ef91",3292:"fa38ac94",3372:"fa9ab54d",3448:"cbb882cb",3596:"a33b6a74",3600:"e66621bc",3612:"bd470307",3796:"1dbe42a7",3840:"ab17452f",3876:"1db0afb7",4020:"fe661d8a",4072:"495e5e06",4152:"aae2c465",4156:"af0818da",4184:"9d221b96",4217:"6021085e",4220:"a78783ee",4304:"5e95c892",4308:"a373fd77",4440:"f769b3fd",4486:"64cca8ef",4616:"c14a26e3",4666:"a94703ab",4724:"4c2546f9",4824:"6297ff83",4856:"ca86781b",4976:"a6aa9e1f",5008:"5f403532",5048:"c26add1d",5192:"da41ed28",5244:"3eac2097",5336:"1d8647da",5388:"c71502c9",5505:"5a5dcc21",5512:"814f3328",5516:"c8a5dae5",5584:"8a061d83",5680:"acaf655c",5696:"935f2afb",5708:"7d50aa41",5752:"7f661f82",5761:"223037ba",5840:"71a2656f",5868:"c2f60cfc",5920:"eb0c92c1",6040:"7b1f0035",6068:"df12ff2a",6164:"8fdeae25",6180:"25a5a20c",6209:"49bfadd9",6292:"b2b675dd",6322:"15a3954c",6344:"ccc49370",6416:"92185360",6452:"0fe8a02a",6500:"a7bd4aaa",6576:"5bb07cf5",6608:"b784ffba",6680:"f5cfbeab",6714:"4dac5fec",6730:"57bcddd6",6732:"bf6aacca",6748:"bc318449",6752:"17896441",6828:"43455a69",6868:"31868bec",6880:"b2f554cd",6952:"ff0352e3",7012:"56ebd09a",7028:"9e4087bc",7136:"df53045f",7180:"99b7fc87",7192:"3d9729af",7208:"aaff9110",7296:"0ac93784",7332:"c222a988",7552:"a6f42423",7568:"cb9da62d",7664:"62e81aa6",7712:"6d752ef5",7724:"2ba1d2b8",7840:"128c6d36",7920:"3c055f5e",7948:"1df9637e",7952:"18328e9e",7996:"acb2d06a",8008:"556d04db",8012:"5bb3de56",8176:"aa0b35eb",8252:"b5b9c8e0",8263:"e305a15c",8372:"8919ea97",8384:"06d8773d",8392:"a2bed8f0",8444:"8db808e7",8448:"a9946d6a",8528:"0c0efcaa",8532:"a90afd08",8544:"c359af60",8601:"e6b91a21",8608:"c412bf64",8768:"491a3217",8808:"9702a600",8858:"a02168a2",8906:"33776668",8916:"4fefa35c",8928:"1906a68b",8934:"b065408b",8980:"abc9d724",9032:"e0f83a1d",9064:"62b182e9",9096:"879f7a7c",9198:"d47ba782",9258:"bd8da646",9396:"e436f9fb",9400:"3eb0a99f",9412:"c8131338",9456:"34fbd09a",9648:"1a4e3797",9656:"e9325e77",9700:"293e08e8",9728:"04f8d6af",9792:"1c7a9c9f",9808:"b9f8aa82"}[e]||e)+"."+{112:"ffbbd5a2",172:"3d6916df",188:"79e4a80e",208:"eea5a87b",264:"fccfb010",379:"0e4d7b0a",606:"027c6754",644:"dd600205",724:"ef4e73e6",820:"0d6348ab",904:"d8e59a5c",920:"9425a15e",956:"1cb8b261",980:"a309122e",1008:"725073a1",1080:"528a43fb",1085:"8a3c90e1",1088:"fc2e112f",1116:"0e7edc0d",1200:"390cae50",1240:"cc1b4e88",1260:"b3bb7e41",1272:"2099fa4d",1292:"6d320dd3",1352:"2a632c4a",1412:"40b6eb7f",1440:"be188dac",1624:"27c01a88",1660:"2305c43d",1672:"fef644e3",1676:"a0d9bd55",1692:"57dc7e74",1728:"32b3bbc5",1792:"7fe26650",1912:"aa3ea31b",2008:"591896b0",2012:"646cf20d",2068:"03674a6d",2096:"f47494d4",2124:"b332c10d",2200:"0ba3ee42",2356:"c00c6910",2416:"2e1ea009",2448:"f7fce5c6",2528:"2436a084",2632:"45587cbf",2708:"132887ba",2728:"7a7e0323",2756:"a542dc61",2760:"e97e3bca",2762:"a3457e4c",2764:"4fc4c65f",2872:"c1ef5e32",2900:"6d04e5db",3016:"240a2ea8",3043:"e8e1a67e",3044:"1f608ccf",3048:"a6f83d36",3104:"8d473c1e",3116:"c4d6731a",3128:"c2a8e39f",3132:"f2fe2dd6",3200:"124ee451",3280:"f3c9d5af",3292:"73f3b653",3372:"fd1aa6a5",3448:"141e3db8",3596:"2ef6d204",3600:"5479a356",3612:"c33a28c8",3796:"a018a53d",3840:"3d5798e8",3876:"966742a8",4020:"a783da53",4072:"1bf8fe81",4152:"76957a46",4156:"2b0ca4a0",4184:"2ce25209",4217:"454fc3dc",4220:"399d3336",4304:"84883c70",4308:"e13e9aa9",4440:"6f9bafa0",4486:"47a97907",4552:"a809afa9",4616:"a5d26616",4666:"15af1f33",4724:"aa757dad",4824:"ba2e3f26",4856:"5794cafa",4976:"2123d972",5008:"e45b0829",5048:"64a8d6d6",5192:"18b098d4",5244:"20f274f3",5336:"913a6527",5388:"a515464f",5505:"0210552f",5512:"8f5f87e7",5516:"5dadb0ab",5584:"d6beed89",5680:"efd9713e",5696:"5632d148",5708:"76d6ebf0",5752:"36188801",5761:"d86b0e22",5840:"d89b2af4",5868:"c2fd70a8",5920:"08bdd6e6",6040:"03e05687",6068:"2ada05aa",6164:"5abc684d",6180:"58d19b0c",6209:"8ce1a55c",6292:"1a619e45",6322:"da84e45e",6344:"79bdc319",6416:"62040dd7",6452:"9a882eef",6500:"ad11e11e",6576:"6e330cd8",6608:"157cb050",6680:"8aceb2e0",6714:"4d9bde8d",6730:"5a4351c7",6732:"2067f847",6748:"0acbe71c",6752:"ff15626b",6828:"ef40ff61",6868:"a2757938",6880:"bf75ef81",6952:"452e946b",7012:"8d1bf24f",7028:"e5742792",7136:"d1effc72",7180:"fd1ec705",7192:"f3228e08",7208:"8ee7db0a",7296:"141b2ea4",7332:"44895a78",7552:"45269320",7568:"c7d307bc",7664:"0d34f5ce",7712:"08611302",7724:"ddfb9119",7840:"6a105ea1",7920:"104ed9fb",7948:"c9dfcd9d",7952:"d67c2c99",7996:"3da611ed",8008:"a7009f1b",8012:"5e6c7cc5",8176:"f5d90ee0",8252:"f9249c3a",8263:"bd5a9ce2",8372:"9362dd44",8384:"9d2ad8fe",8392:"31624d4e",8444:"92e5af8b",8448:"081419be",8528:"993152bb",8532:"25cd3588",8544:"6ddf4c70",8601:"8a291491",8608:"b0e14a54",8768:"0ca8966a",8808:"1e2ebe76",8858:"dd051560",8879:"fbade3c5",8906:"599a6778",8916:"39c80c62",8928:"81f3f93c",8934:"2540184c",8980:"7b4df509",9032:"b75166be",9064:"de7ab418",9096:"312e269b",9116:"f0ae5377",9198:"b0e2468a",9258:"1266cf6c",9396:"644a2877",9400:"91186561",9412:"ca0da140",9456:"3daf123e",9648:"67f3f595",9656:"b0fe78fe",9700:"7411a2d9",9728:"1acbacea",9792:"ccb7e789",9808:"cc78e901"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},r.l=(e,a,f,c)=>{if(d[e])d[e].push(a);else{var b,t;if(void 0!==f)for(var o=document.getElementsByTagName("script"),n=0;n{b.onerror=b.onload=null,clearTimeout(l);var c=d[e];if(delete d[e],b.parentNode&&b.parentNode.removeChild(b),c&&c.forEach((e=>e(f))),a)return a(f)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"6752",21614072:"172",33776668:"8906",79263788:"2356",92185360:"6416",e44e3f47:"112",bab022f4:"188","184ad633":"208","3f2a1ecb":"264","9258f162":"379","3c741b47":"644",f5ff54f0:"724","58de4400":"820","3c653e3b":"904","16fe8a4c":"920",cd83de9e:"956",ceca19cd:"980","1460e89b":"1008","9242256d":"1080","1fdfdeaa":"1085","219c4568":"1088",e2e89445:"1116",bc3f1a98:"1200",e15bcb33:"1240","5c9e12d1":"1260",b4e1da39:"1272",dc4598d0:"1292","0346afaa":"1352","7efbfa7e":"1412",c7401661:"1440","041e4035":"1624","70793eb2":"1660","21a9d6ed":"1672",f8092feb:"1692",d9e16301:"1728","671939c9":"1792","64f1f19c":"1912","9118549b":"2008",af0d8a1e:"2012","00d3276d":"2068",a5a260f1:"2096",c2d67624:"2124","45d37095":"2200","6baf1826":"2416",f5711d0d:"2448",c4f5d8e4:"2632","9d4bdb35":"2708","937dc5a6":"2728","3423820d":"2756","420497a2":"2760","413f2abb":"2762",c027c09e:"2764","9a49882e":"2872",be77d225:"2900",def5ef2c:"3016","3caf9b73":"3043","509dc7bf":"3044","99c7964b":"3048",ddb8503b:"3104",bbdc39ec:"3116","12577cfd":"3128",ae565638:"3132",f278ac2c:"3200",e6b9ef91:"3280",fa38ac94:"3292",fa9ab54d:"3372",cbb882cb:"3448",a33b6a74:"3596",e66621bc:"3600",bd470307:"3612","1dbe42a7":"3796",ab17452f:"3840","1db0afb7":"3876",fe661d8a:"4020","495e5e06":"4072",aae2c465:"4152",af0818da:"4156","9d221b96":"4184","6021085e":"4217",a78783ee:"4220","5e95c892":"4304",a373fd77:"4308",f769b3fd:"4440","64cca8ef":"4486",c14a26e3:"4616",a94703ab:"4666","4c2546f9":"4724","6297ff83":"4824",ca86781b:"4856",a6aa9e1f:"4976","5f403532":"5008",c26add1d:"5048",da41ed28:"5192","3eac2097":"5244","1d8647da":"5336",c71502c9:"5388","5a5dcc21":"5505","814f3328":"5512",c8a5dae5:"5516","8a061d83":"5584",acaf655c:"5680","935f2afb":"5696","7d50aa41":"5708","7f661f82":"5752","223037ba":"5761","71a2656f":"5840",c2f60cfc:"5868",eb0c92c1:"5920","7b1f0035":"6040",df12ff2a:"6068","8fdeae25":"6164","25a5a20c":"6180","49bfadd9":"6209",b2b675dd:"6292","15a3954c":"6322",ccc49370:"6344","0fe8a02a":"6452",a7bd4aaa:"6500","5bb07cf5":"6576",b784ffba:"6608",f5cfbeab:"6680","4dac5fec":"6714","57bcddd6":"6730",bf6aacca:"6732",bc318449:"6748","43455a69":"6828","31868bec":"6868",b2f554cd:"6880",ff0352e3:"6952","56ebd09a":"7012","9e4087bc":"7028",df53045f:"7136","99b7fc87":"7180","3d9729af":"7192",aaff9110:"7208","0ac93784":"7296",c222a988:"7332",a6f42423:"7552",cb9da62d:"7568","62e81aa6":"7664","6d752ef5":"7712","2ba1d2b8":"7724","128c6d36":"7840","3c055f5e":"7920","1df9637e":"7948","18328e9e":"7952",acb2d06a:"7996","556d04db":"8008","5bb3de56":"8012",aa0b35eb:"8176",b5b9c8e0:"8252",e305a15c:"8263","8919ea97":"8372","06d8773d":"8384",a2bed8f0:"8392","8db808e7":"8444",a9946d6a:"8448","0c0efcaa":"8528",a90afd08:"8532",c359af60:"8544",e6b91a21:"8601",c412bf64:"8608","491a3217":"8768","9702a600":"8808",a02168a2:"8858","4fefa35c":"8916","1906a68b":"8928",b065408b:"8934",abc9d724:"8980",e0f83a1d:"9032","62b182e9":"9064","879f7a7c":"9096",d47ba782:"9198",bd8da646:"9258",e436f9fb:"9396","3eb0a99f":"9400",c8131338:"9412","34fbd09a":"9456","1a4e3797":"9648",e9325e77:"9656","293e08e8":"9700","04f8d6af":"9728","1c7a9c9f":"9792",b9f8aa82:"9808"}[e]||e,r.p+r.u(e)},(()=>{var e={296:0,2176:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^2(17|9)6$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n