Adds static typing to JavaScript to improve developer productivity and code quality.
This report summarizes scanner evidence for facebook/flow, a Rust project with 22,304 GitHub stars. SynthScan examined 1,633,621 lines of code across 15104 source files, recording 815 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 0.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 791 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 273 finding(s).
Which changes need focused human review? 815 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 815 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | runtests.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/run_swebench.py | 261 | remaining = deadline - time.monotonic() | COMMENT |
| LOW | evals/graders/no_any.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/flow_check.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/no_tsc.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/file_modified.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/no_commonjs.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/ast_query.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/no_flowfixme.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/file_contains.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/contains_ast_node_type.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/no_extra_flow_errors.sh | 1 | #!/bin/bash | COMMENT |
| LOW | evals/graders/no_extra_flow_errors.sh | 21 | # `./flow check . | head` reports success even when Flow found errors. | COMMENT |
| LOW | evals/graders/file_not_modified.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tslib/lib.es2018.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2016.d.ts | 21 | /// <reference lib="es2016.array.include" /> | COMMENT |
| LOW | tslib/lib.es2020.d.ts | 21 | /// <reference lib="es2020.bigint" /> | COMMENT |
| LOW | tslib/lib.es2020.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2021.d.ts | 21 | /// <reference lib="es2021.promise" /> | COMMENT |
| LOW | tslib/lib.es2017.d.ts | 21 | /// <reference lib="es2017.arraybuffer" /> | COMMENT |
| LOW | tslib/lib.es2019.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2021.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es6.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.esnext.d.ts | 21 | /// <reference lib="esnext.intl" /> | COMMENT |
| LOW | tslib/lib.es2024.d.ts | 21 | /// <reference lib="es2024.arraybuffer" /> | COMMENT |
| LOW | tslib/lib.es2022.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2017.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2024.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2018.d.ts | 21 | /// <reference lib="es2018.asynciterable" /> | COMMENT |
| LOW | tslib/lib.esnext.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2023.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2022.d.ts | 21 | /// <reference lib="es2022.array" /> | COMMENT |
| LOW | tslib/lib.es2016.full.d.ts | 21 | /// <reference lib="dom" /> | COMMENT |
| LOW | tslib/lib.es2023.d.ts | 21 | /// <reference lib="es2023.array" /> | COMMENT |
| LOW | tslib/lib.es2019.d.ts | 21 | /// <reference lib="es2019.array" /> | COMMENT |
| LOW | tslib/lib.es2015.d.ts | 21 | /// <reference lib="es2015.core" /> | COMMENT |
| LOW | tests/fs.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/type_at_pos_types/recursive.js | 41 | // The following exhibits a use of the RemoveTopLevelTvarVisitor | COMMENT |
| LOW | tests/suppress_unused_lazy_3/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/recheck_commit_deadlock/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/import_typeof/import_typeof.js | 81 | (() => {}) as functionFoo4T; // Error: return types are not compatible | COMMENT |
| LOW | tests/rust_port_flowset_clear/test.js | 1 | // Regression test for FlowSet::clear() destroying speculation levels. | COMMENT |
| LOW | tests/jsx_pragma/invalid_jsx_unsupported.js | 1 | // @jsx (x)=>x | COMMENT |
| LOW | tests/jsx_pragma/invalid_no_expr.js | 1 | // @jsx | COMMENT |
| LOW | tests/lint_severity_vim/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/hook_syntax_compatibility/rules_of_hooks.js | 1041 | /* [classError('use')] */ | COMMENT |
| LOW | tests/hook_syntax_compatibility/rules_of_hooks.js | 1061 | // }, | COMMENT |
| LOW | tests/type_spread/inline.js | 21 | // Ensuring we still error in these cases when the RHS is a spread | COMMENT |
| LOW | tests/type_at_pos_statement/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/type_at_pos_match_pattern/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/lint_flag_redundant/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | …sts/saved_state_reinit_libdef_change_mergebase/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/suppress_unused_lazy_2/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/recheck_cancel_optional_chain/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/recheck_cancel_optional_chain/test.sh | 21 | # Generate a file whose check spends many seconds inside a SINGLE optional-chain | COMMENT |
| LOW | tests/spread_performance/type_spread.js | 1 | //@flow | COMMENT |
| LOW | tests/type_at_pos_template_literal/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/cli_renderer_not_all/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/type_at_pos_namespace/test.sh | 1 | #!/bin/bash | COMMENT |
| 445 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/run_swebench.py | 226 | def _registered_process_group(proc): | CODE |
| LOW | evals/compile_swebench.py | 407 | def compile_project_pattern_evals(project_dir, flow_version): | CODE |
| LOW | …01_error_fixing/error_008_indexer_access/input/main.js | 18 | function getOrDefault(dict: Map<string, number>, key: string, defaultVal: number): number { | CODE |
| LOW | …01_error_fixing/error_008_indexer_access/ideal/main.js | 21 | function getOrDefault(dict: Map<string, number>, key: string, defaultVal: number): number { | CODE |
| LOW | website/docusaurus.config.js | 39 | function polyfillNodeBuiltinsForFlowJS(context, options) { | CODE |
| LOW | website/docusaurus.config.js | 66 | function enableSomeEnvVarsAsBuildTimeConstants() { | CODE |
| LOW | website/libs/lz-string.js | 11 | declare export function decompressFromEncodedURIComponent(s: string): string; | CODE |
| LOW | website/libs/lz-string.js | 12 | declare export function compressToEncodedURIComponent(s: string): string; | CODE |
| LOW | website/src/try-flow/TryFlow.js | 94 | function getRecoverableStateFromStorage(): ?InitialStateFromHash { | CODE |
| LOW | website/src/try-flow/flow-loader.js | 251 | function normalizeFlowReleaseVersion(version: string): string { | CODE |
| LOW | website/src/try-flow/tokens-theme-provider.js | 52 | function generateTokensCSSForColorMap(colorMap) { | CODE |
| LOW | website/src/theme/Navbar/MobileSidebar/Header/index.js | 38 | export default function NavbarMobileSidebarHeader(): React.Node { | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/syntax_compatibility.js | 5 | export function useHooklikeAnnotatedFunction(): void { } | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/syntax_compatibility.js | 7 | function useHooklikeInferredFunction() { return 42; } | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/syntax_compatibility.js | 9 | declare export function useDeclaredHooklikeFunction(): number; | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/rules_of_hooks.js | 51 | function normalFunctionWithNormalFunction() { | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/rules_of_hooks.js | 56 | function normalFunctionWithConditionalFunction() { | CODE |
| LOW⚡ | tests/hook_syntax_compatibility/rules_of_hooks.js | 64 | function functionThatStartsWithUseButIsntAHook() { | CODE |
| LOW | tests/hook_syntax_compatibility/rules_of_hooks.js | 746 | function normalFunctionWithConditionalHook() { | CODE |
| LOW | tests/assertion_functions_lib/test.js | 29 | function refinesDiscriminantAgainstLocalConst(): boolean { | CODE |
| LOW | tests/assertion_functions_lib/test.js | 37 | function refinesDiscriminantAgainstImportedConst(): boolean { | CODE |
| LOW | tests/assertion_functions_lib/test.js | 108 | function reproSequentialMemberNull(field: {a: ?string, b: ?string, c: ?string}): string { | CODE |
| LOW | tests/invariant/arg_order.js | 4 | function laterArgReassignsRefinedBinding(y: unknown, z: number): void { | CODE |
| LOW⚡ | tests/invariant/arg_order.js | 16 | function laterArgReadUsesRefinedEnv(x: unknown): void { | CODE |
| LOW⚡ | tests/invariant/arg_order.js | 26 | function laterArgWritesValueReadEarlier(value: ?number): void { | CODE |
| LOW⚡ | tests/invariant/arg_order.js | 33 | function laterArgAssignsValueReadEarlier(): void { | CODE |
| LOW | tests/refinements/computed_string_literal.js | 29 | function testSwitchLiteralProperty(b: B) { | CODE |
| LOW | tests/refinements/typeof.js | 59 | function testInvalidTemplateLiteral(x: string | number) { | CODE |
| LOW | tests/refinements/typeof.js | 101 | function testAnyWithNumberPostConditional(x: any) { | CODE |
| LOW | tests/refinements/typeof.js | 132 | function testPolyClassCtorWithFunction() { | CODE |
| LOW⚡ | tests/assertion_functions_jest/test.js | 21 | function reproNeverReturnsInReturn(): empty { | CODE |
| LOW⚡ | tests/assertion_functions_jest/test.js | 27 | function reproNeverReturnsInReturnWithMessage(): string { | CODE |
| LOW⚡ | tests/assertion_functions_jest/test.js | 33 | function reproNeverReturnsInNestedTernary(level: string): string { | CODE |
| LOW⚡ | tests/assertion_functions_jest/test.js | 39 | function sequenceExpressionAsserts(value: ?number): number { | CODE |
| LOW | tests/assertion_functions_jest/test.js | 51 | function expressionPositionHavocsRefinements(object: {property: ?string}) { | CODE |
| LOW | tests/assertion_functions/consistency.js | 56 | function switchWithThrowingDefault(value: 'a' | 'b' | 'c'): asserts value is 'a' | 'b' { | CODE |
| LOW | tests/assertion_functions/local.js | 64 | function inferredAliasesAreAssertions( | CODE |
| LOW⚡ | tests/assertion_functions/local.js | 93 | function bareFalseStillChecksArgumentTypes(): void { | CODE |
| LOW⚡ | tests/assertion_functions/local.js | 97 | function bareFalseStillChecksArity(): void { | CODE |
| LOW⚡ | tests/assertion_functions/local.js | 101 | function bareMissingArgumentIsReachable(): number { | CODE |
| LOW⚡ | tests/assertion_functions/local.js | 106 | function bareDefaultedMissingArgumentIsReachable(): number { | CODE |
| LOW⚡ | tests/assertion_functions/local.js | 111 | function bareDefaultedMissingArgumentDoesNotEndSequence(): void { | CODE |
| LOW | tests/assertion_functions/local.js | 128 | function bareFalseClosesBranchInLoop(values: Array<?string>): void { | CODE |
| LOW | tests/assertion_functions/local.js | 143 | function expressionPositionDoesNotAssert(value: unknown) { | CODE |
| LOW | tests/assertion_functions/local.js | 191 | function unannotatedBodyLocalSilent(value: unknown) { | CODE |
| LOW | tests/assertion_functions/local.js | 206 | function assertionInLoopPreservesPreLoopNarrowing(input: unknown, c: boolean) { | CODE |
| LOW | tests/assertion_functions/local.js | 290 | function unannotatedParameterSilent(cb, value: unknown) { // error: missing annotation on cb | CODE |
| LOW | tests/assertion_functions/local.js | 319 | function bareFalseWithTargsIsAbrupt(): number { | CODE |
| LOW⚡ | tests/assertion_functions/imports.js | 84 | function importedAgreedUnionSilent(value: unknown) { | CODE |
| LOW⚡ | tests/assertion_functions/imports.js | 90 | function importedGenericApplication(value: unknown) { | CODE |
| LOW⚡ | tests/assertion_functions/imports.js | 96 | function inferredExportsAreAssertions( | CODE |
| LOW | tests/assertion_functions/arg_order.js | 10 | function laterArgReassignsAssertedBinding(x: unknown, y: number) { | CODE |
| LOW | tests/assertion_functions/arg_order.js | 27 | function laterArgHavocsAssertedBinding(): void { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 39 | function earlierArgWriteStillRefines(x: unknown, w: unknown) { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 45 | function laterArgReadUsesUnrefinedEnv(x: unknown) { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 53 | function laterArgMemberReadUsesUnrefinedEnv(x: {name: unknown}) { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 58 | function laterArgReadUsesUnrefinedEnvBare(x: string | null) { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 63 | function laterArgWritesOtherBindingFromAsserted(y: unknown, x: unknown) { | CODE |
| LOW⚡ | tests/assertion_functions/arg_order.js | 73 | function laterMessageReadsNullableValue(value: ?{name: string}): string { | CODE |
| LOW | tests/assertion_functions/arg_order.js | 87 | function laterMessageReadsUnrefinedDiscriminatedUnion(prop: JSXProp): boolean { | CODE |
| 199 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | evals/run_swebench.py | 208 | except subprocess.TimeoutExpired: | CODE |
| HIGH | evals/run_swebench.py | 433 | except Exception: | CODE |
| HIGH | evals/run_swebench.py | 257 | except subprocess.TimeoutExpired: | CODE |
| HIGH | evals/run_swebench.py | 304 | except (ProcessLookupError, PermissionError): | CODE |
| HIGH | evals/test_dry_run.py | 49 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/union_new/issue-1462-i.js | 21 | print(val.foo); // <--- foo could be an array | CODE |
| HIGH | tests/union_new/issue-1462-ii.js | 23 | print(val.foo); | CODE |
| HIGH | packages/flow-transform/src/transform/print.js | 79 | print( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …_port/crates/flow_typing_flow_common/src/flow_cache.rs | 63 | // corresponding typing rules are already sufficiently robust. | COMMENT |
| MEDIUM | …/crates/flow_env_builder_resolver/src/name_resolver.rs | 3710 | // possibly undefined variable. Essentially, we are treating var redeclaration as a | COMMENT |
| MEDIUM | packages/flow-parser/__tests__/runContractTests.sh | 39 | # same `$WASM_OUT` (the JS test harness `require()`s a hard-coded | COMMENT |
| MEDIUM | newtests/lsp/diagnostics/test.js | 29 | // To be robust against races: we'll wait up to 9s to get the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/run_swebench.py | 433 | except Exception: | CODE |
| MEDIUM | evals/run_swebench.py | 756 | print(f"Error: Flow binary not found at {args.flow_bin}", file=sys.stderr) | CODE |
| LOW | evals/run_swebench.py | 852 | except Exception as e: | CODE |
| MEDIUM | evals/run_swebench.py | 87 | def _register_proc(proc): | CODE |
| LOW | evals/test_dry_run.py | 49 | except Exception: | CODE |
| LOW | evals/test_dry_run.py | 85 | except Exception as exc: | CODE |
| MEDIUM | evals/compile_swebench.py | 624 | print(f"Error: {evals_dir} is not a directory", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | rust_port/crates/flow_env_builder/src/name_def.rs | 1688 | Def::TypeParam(data) => DefinitionReferenceKind::Name(data.tparam.1.name.name.dupe()), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | evals/run_swebench.py | 176 | # Create a wrapper script so `./flow` works in the temp dir | COMMENT |
| MEDIUM | tests/assertion_call_analysis_saved_state/test.sh | 7 | # Create a saved state without test.js, then restore the file without reporting | COMMENT |
| MEDIUM | packages/scripts/build.sh | 81 | # Create a new file with .js.flow extension | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | website/blog/2015-02-18-Import-Types.md | 67 | ### Wait, but what happens at runtime after I've added an `import type` declaration? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | evals/run_swebench.py | 322 | CODE | |
| LOW | evals/run_swebench.py | 482 | CODE | |
| LOW | evals/run_swebench.py | 649 | CODE | |
| LOW | evals/run_swebench.py | 814 | CODE | |
| LOW | evals/compile_swebench.py | 98 | CODE | |
| LOW | evals/compile_swebench.py | 152 | CODE | |
| LOW | evals/compile_swebench.py | 407 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | evals/compile_swebench.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | evals/compile_swebench.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …01_error_fixing/error_005_array_variance/input/main.js | 40 | addPlaceholder(videos, {id: 'placeholder', url: '/placeholder.png'}); | CODE |
| LOW | …01_error_fixing/error_005_array_variance/ideal/main.js | 41 | addPlaceholder(videos, {id: 'placeholder', url: '/placeholder.png'}); | CODE |
| LOW | tests/custom_errors/imported.js | 21 | const emailTest1: Email = "user@example.com"; // OK | CODE |
| LOW | tests/custom_errors/imported.js | 164 | email: "user@example.com", | CODE |
| LOW | rust_port/crates/flow_common_ty/src/ty_printer.rs | 529 | AnyKind::Placeholder => "placeholder", | CODE |
| LOW | rust_port/crates/flow_type_sig/src/type_sig_parse.rs | 3543 | def: tbls.lazy(Box::new(|_, _, _| unreachable!("placeholder"))), | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 76 | // Step 1: Build line-start byte offset table and parallel UTF-16 offset table. | COMMENT |
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 137 | // Step 2: Compute byte_offset for each position and sort. | COMMENT |
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 162 | // Step 3: Single-pass through source text computing UTF-16 offsets. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 76 | // Step 1: Build line-start byte offset table and parallel UTF-16 offset table. | COMMENT |
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 137 | // Step 2: Compute byte_offset for each position and sort. | COMMENT |
| LOW | rust_port/crates/flow_parser_wasm/src/position.rs | 162 | // Step 3: Single-pass through source text computing UTF-16 offsets. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …t_port/crates/flow_parser_utils/src/flow_ast_differ.rs | 2534 | // We keep this so that we don't forget to create handlers above when we add new AST nodes. | COMMENT |
| MEDIUM | newtests/tool_test_example/test.js | 31 | // And here is how you can assert that a step introduces new flow errors. I | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/hook_syntax_compatibility/rules_of_hooks.js | 12 | declare function doSomething(): void | CODE |
| LOW | tests/hook_syntax/rules_of_hooks.js | 12 | declare function doSomething(): void | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/scripts/build.sh | 79 | # Check if file contains flow annotation | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/scripts/runOxidizedJestTests.sh | 11 | # Usage: | COMMENT |