Copy disabled (too large)
Download .txt
Showing preview only (28,072K chars total). Download the full file to get everything.
Repository: facebook/react
Branch: main
Commit: 80b1cab39776
Files: 6660
Total size: 25.0 MB
Directory structure:
gitextract_j2mop8l5/
├── .claude/
│ ├── instructions.md
│ ├── settings.json
│ └── skills/
│ ├── extract-errors/
│ │ └── SKILL.md
│ ├── feature-flags/
│ │ └── SKILL.md
│ ├── fix/
│ │ └── SKILL.md
│ ├── flags/
│ │ └── SKILL.md
│ ├── flow/
│ │ └── SKILL.md
│ ├── test/
│ │ └── SKILL.md
│ └── verify/
│ └── SKILL.md
├── .codesandbox/
│ └── ci.json
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── compiler_bug_report.yml
│ │ ├── config.yml
│ │ └── devtools_bug_report.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── compiler_discord_notify.yml
│ ├── compiler_playground.yml
│ ├── compiler_prereleases.yml
│ ├── compiler_prereleases_manual.yml
│ ├── compiler_prereleases_nightly.yml
│ ├── compiler_typescript.yml
│ ├── devtools_discord_notify.yml
│ ├── devtools_regression_tests.yml
│ ├── runtime_build_and_test.yml
│ ├── runtime_commit_artifacts.yml
│ ├── runtime_discord_notify.yml
│ ├── runtime_eslint_plugin_e2e.yml
│ ├── runtime_fuzz_tests.yml
│ ├── runtime_prereleases.yml
│ ├── runtime_prereleases_manual.yml
│ ├── runtime_prereleases_nightly.yml
│ ├── runtime_releases_from_npm_manual.yml
│ ├── shared_check_maintainer.yml
│ ├── shared_cleanup_merged_branch_caches.yml
│ ├── shared_cleanup_stale_branch_caches.yml
│ ├── shared_close_direct_sync_branch_prs.yml
│ ├── shared_label_core_team_prs.yml
│ ├── shared_lint.yml
│ └── shared_stale.yml
├── .gitignore
├── .mailmap
├── .nvmrc
├── .prettierignore
├── .prettierrc.js
├── .watchmanconfig
├── CHANGELOG.md
├── CLAUDE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── MAINTAINERS
├── README.md
├── ReactVersions.js
├── SECURITY.md
├── babel.config-react-compiler.js
├── babel.config-ts.js
├── babel.config.js
├── compiler/
│ ├── .claude/
│ │ ├── agents/
│ │ │ └── investigate-error.md
│ │ └── settings.json
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── CLAUDE.md
│ ├── README.md
│ ├── apps/
│ │ └── playground/
│ │ ├── .eslintrc.json
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── __tests__/
│ │ │ ├── e2e/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── page.spec.ts/
│ │ │ │ │ ├── 01-user-output.txt
│ │ │ │ │ ├── 02-default-output.txt
│ │ │ │ │ ├── compilationMode-all-output.txt
│ │ │ │ │ ├── compilationMode-infer-output.txt
│ │ │ │ │ ├── default-config.txt
│ │ │ │ │ ├── function-scope-beats-module-scope-output.txt
│ │ │ │ │ ├── module-scope-use-memo-output.txt
│ │ │ │ │ ├── module-scope-use-no-memo-output.txt
│ │ │ │ │ ├── parse-flow-output.txt
│ │ │ │ │ ├── parse-typescript-output.txt
│ │ │ │ │ ├── todo-function-scope-does-not-beat-module-scope-output.txt
│ │ │ │ │ ├── use-memo-output.txt
│ │ │ │ │ └── use-no-memo-output.txt
│ │ │ │ └── page.spec.ts
│ │ │ └── parseConfigOverrides.test.mjs
│ │ ├── app/
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── colors.js
│ │ ├── components/
│ │ │ ├── AccordionWindow.tsx
│ │ │ ├── Editor/
│ │ │ │ ├── ConfigEditor.tsx
│ │ │ │ ├── EditorImpl.tsx
│ │ │ │ ├── Input.tsx
│ │ │ │ ├── Output.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── monacoOptions.ts
│ │ │ ├── Header.tsx
│ │ │ ├── Icons/
│ │ │ │ ├── IconChevron.tsx
│ │ │ │ └── IconGitHub.tsx
│ │ │ ├── Logo.tsx
│ │ │ ├── Message.tsx
│ │ │ ├── StoreContext.tsx
│ │ │ ├── TabbedWindow.tsx
│ │ │ └── index.ts
│ │ ├── hooks/
│ │ │ ├── index.ts
│ │ │ └── useMountEffect.ts
│ │ ├── lib/
│ │ │ ├── compilation.ts
│ │ │ ├── createContext.ts
│ │ │ ├── defaultStore.ts
│ │ │ ├── reactCompilerMonacoDiagnostics.ts
│ │ │ ├── stores/
│ │ │ │ ├── index.ts
│ │ │ │ ├── messages.ts
│ │ │ │ └── store.ts
│ │ │ ├── transitionTypes.ts
│ │ │ └── types.d.ts
│ │ ├── next.config.js
│ │ ├── package.json
│ │ ├── playwright.config.js
│ │ ├── postcss.config.js
│ │ ├── public/
│ │ │ ├── graphvizlib.wasm
│ │ │ └── site.webmanifest
│ │ ├── scripts/
│ │ │ ├── downloadFonts.js
│ │ │ └── link-compiler.sh
│ │ ├── styles/
│ │ │ └── globals.css
│ │ ├── tailwind.config.js
│ │ ├── tsconfig.json
│ │ └── vercel.json
│ ├── docs/
│ │ ├── DESIGN_GOALS.md
│ │ └── DEVELOPMENT_GUIDE.md
│ ├── fixtures/
│ │ └── .gitkeep
│ ├── package.json
│ ├── packages/
│ │ ├── babel-plugin-react-compiler/
│ │ │ ├── README.md
│ │ │ ├── docs/
│ │ │ │ └── passes/
│ │ │ │ ├── 01-lower.md
│ │ │ │ ├── 02-enterSSA.md
│ │ │ │ ├── 03-eliminateRedundantPhi.md
│ │ │ │ ├── 04-constantPropagation.md
│ │ │ │ ├── 05-deadCodeElimination.md
│ │ │ │ ├── 06-inferTypes.md
│ │ │ │ ├── 07-analyseFunctions.md
│ │ │ │ ├── 08-inferMutationAliasingEffects.md
│ │ │ │ ├── 09-inferMutationAliasingRanges.md
│ │ │ │ ├── 10-inferReactivePlaces.md
│ │ │ │ ├── 11-inferReactiveScopeVariables.md
│ │ │ │ ├── 12-rewriteInstructionKindsBasedOnReassignment.md
│ │ │ │ ├── 13-alignMethodCallScopes.md
│ │ │ │ ├── 14-alignObjectMethodScopes.md
│ │ │ │ ├── 15-alignReactiveScopesToBlockScopesHIR.md
│ │ │ │ ├── 16-mergeOverlappingReactiveScopesHIR.md
│ │ │ │ ├── 17-buildReactiveScopeTerminalsHIR.md
│ │ │ │ ├── 18-flattenReactiveLoopsHIR.md
│ │ │ │ ├── 19-flattenScopesWithHooksOrUseHIR.md
│ │ │ │ ├── 20-propagateScopeDependenciesHIR.md
│ │ │ │ ├── 21-buildReactiveFunction.md
│ │ │ │ ├── 22-pruneUnusedLabels.md
│ │ │ │ ├── 23-pruneNonEscapingScopes.md
│ │ │ │ ├── 24-pruneNonReactiveDependencies.md
│ │ │ │ ├── 25-pruneUnusedScopes.md
│ │ │ │ ├── 26-mergeReactiveScopesThatInvalidateTogether.md
│ │ │ │ ├── 27-pruneAlwaysInvalidatingScopes.md
│ │ │ │ ├── 28-propagateEarlyReturns.md
│ │ │ │ ├── 29-promoteUsedTemporaries.md
│ │ │ │ ├── 30-renameVariables.md
│ │ │ │ ├── 31-codegenReactiveFunction.md
│ │ │ │ ├── 34-optimizePropsMethodCalls.md
│ │ │ │ ├── 35-optimizeForSSR.md
│ │ │ │ ├── 36-outlineJSX.md
│ │ │ │ ├── 37-outlineFunctions.md
│ │ │ │ ├── 38-memoizeFbtAndMacroOperandsInSameScope.md
│ │ │ │ ├── 39-validateContextVariableLValues.md
│ │ │ │ ├── 40-validateUseMemo.md
│ │ │ │ ├── 41-validateHooksUsage.md
│ │ │ │ ├── 42-validateNoCapitalizedCalls.md
│ │ │ │ ├── 43-validateLocalsNotReassignedAfterRender.md
│ │ │ │ ├── 44-validateNoSetStateInRender.md
│ │ │ │ ├── 45-validateNoDerivedComputationsInEffects.md
│ │ │ │ ├── 46-validateNoSetStateInEffects.md
│ │ │ │ ├── 47-validateNoJSXInTryStatement.md
│ │ │ │ ├── 48-validateNoImpureValuesInRender.md
│ │ │ │ ├── 49-validateNoRefAccessInRender.md
│ │ │ │ ├── 50-validateNoFreezingKnownMutableFunctions.md
│ │ │ │ ├── 51-validateExhaustiveDependencies.md
│ │ │ │ ├── 53-validatePreservedManualMemoization.md
│ │ │ │ ├── 54-validateStaticComponents.md
│ │ │ │ ├── 55-validateSourceLocations.md
│ │ │ │ └── README.md
│ │ │ ├── jest.config.js
│ │ │ ├── package.json
│ │ │ ├── scripts/
│ │ │ │ ├── babel-plugin-annotate-react-code.ts
│ │ │ │ ├── build-react-hooks-fixures.js
│ │ │ │ ├── eslint-plugin-react-hooks-test-cases.js
│ │ │ │ ├── jest/
│ │ │ │ │ ├── e2e-classic.config.js
│ │ │ │ │ ├── e2e-forget.config.js
│ │ │ │ │ ├── main.config.js
│ │ │ │ │ ├── makeE2EConfig.js
│ │ │ │ │ ├── makeSnapshotResolver.js
│ │ │ │ │ ├── makeTransform.ts
│ │ │ │ │ ├── snapshot-resolver-no-forget.js
│ │ │ │ │ ├── snapshot-resolver-with-forget.js
│ │ │ │ │ ├── transform-no-forget.js
│ │ │ │ │ └── transform-with-forget.js
│ │ │ │ ├── link-react-compiler-runtime.sh
│ │ │ │ └── ts-analyze-trace.sh
│ │ │ ├── src/
│ │ │ │ ├── Babel/
│ │ │ │ │ ├── BabelPlugin.ts
│ │ │ │ │ └── RunReactCompilerBabelPlugin.ts
│ │ │ │ ├── CompilerError.ts
│ │ │ │ ├── Entrypoint/
│ │ │ │ │ ├── Gating.ts
│ │ │ │ │ ├── Imports.ts
│ │ │ │ │ ├── Options.ts
│ │ │ │ │ ├── Pipeline.ts
│ │ │ │ │ ├── Program.ts
│ │ │ │ │ ├── Reanimated.ts
│ │ │ │ │ ├── Suppression.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Flood/
│ │ │ │ │ ├── FlowTypes.ts
│ │ │ │ │ ├── TypeErrors.ts
│ │ │ │ │ ├── TypeUtils.ts
│ │ │ │ │ └── Types.ts
│ │ │ │ ├── HIR/
│ │ │ │ │ ├── AssertConsistentIdentifiers.ts
│ │ │ │ │ ├── AssertTerminalBlocksExist.ts
│ │ │ │ │ ├── AssertValidBlockNesting.ts
│ │ │ │ │ ├── AssertValidMutableRanges.ts
│ │ │ │ │ ├── BuildHIR.ts
│ │ │ │ │ ├── BuildReactiveScopeTerminalsHIR.ts
│ │ │ │ │ ├── CollectHoistablePropertyLoads.ts
│ │ │ │ │ ├── CollectOptionalChainDependencies.ts
│ │ │ │ │ ├── ComputeUnconditionalBlocks.ts
│ │ │ │ │ ├── DefaultModuleTypeProvider.ts
│ │ │ │ │ ├── DeriveMinimalDependenciesHIR.ts
│ │ │ │ │ ├── Dominator.ts
│ │ │ │ │ ├── Environment.ts
│ │ │ │ │ ├── FindContextIdentifiers.ts
│ │ │ │ │ ├── Globals.ts
│ │ │ │ │ ├── HIR.ts
│ │ │ │ │ ├── HIRBuilder.ts
│ │ │ │ │ ├── MergeConsecutiveBlocks.ts
│ │ │ │ │ ├── MergeOverlappingReactiveScopesHIR.ts
│ │ │ │ │ ├── ObjectShape.ts
│ │ │ │ │ ├── PrintHIR.ts
│ │ │ │ │ ├── PropagateScopeDependenciesHIR.ts
│ │ │ │ │ ├── PruneUnusedLabelsHIR.ts
│ │ │ │ │ ├── ScopeDependencyUtils.ts
│ │ │ │ │ ├── TypeSchema.ts
│ │ │ │ │ ├── Types.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors.ts
│ │ │ │ ├── Inference/
│ │ │ │ │ ├── AliasingEffects.ts
│ │ │ │ │ ├── AnalyseFunctions.ts
│ │ │ │ │ ├── ControlDominators.ts
│ │ │ │ │ ├── DropManualMemoization.ts
│ │ │ │ │ ├── InferMutationAliasingEffects.ts
│ │ │ │ │ ├── InferMutationAliasingRanges.ts
│ │ │ │ │ ├── InferReactivePlaces.ts
│ │ │ │ │ ├── InlineImmediatelyInvokedFunctionExpressions.ts
│ │ │ │ │ ├── MUTABILITY_ALIASING_MODEL.md
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Optimization/
│ │ │ │ │ ├── ConstantPropagation.ts
│ │ │ │ │ ├── DeadCodeElimination.ts
│ │ │ │ │ ├── OptimizeForSSR.ts
│ │ │ │ │ ├── OptimizePropsMethodCalls.ts
│ │ │ │ │ ├── OutlineFunctions.ts
│ │ │ │ │ ├── OutlineJsx.ts
│ │ │ │ │ ├── PruneMaybeThrows.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── ReactiveScopes/
│ │ │ │ │ ├── AlignMethodCallScopes.ts
│ │ │ │ │ ├── AlignObjectMethodScopes.ts
│ │ │ │ │ ├── AlignReactiveScopesToBlockScopesHIR.ts
│ │ │ │ │ ├── AssertScopeInstructionsWithinScope.ts
│ │ │ │ │ ├── AssertWellFormedBreakTargets.ts
│ │ │ │ │ ├── BuildReactiveFunction.ts
│ │ │ │ │ ├── CodegenReactiveFunction.ts
│ │ │ │ │ ├── CollectReactiveIdentifiers.ts
│ │ │ │ │ ├── CollectReferencedGlobals.ts
│ │ │ │ │ ├── ExtractScopeDeclarationsFromDestructuring.ts
│ │ │ │ │ ├── FlattenReactiveLoopsHIR.ts
│ │ │ │ │ ├── FlattenScopesWithHooksOrUseHIR.ts
│ │ │ │ │ ├── InferReactiveScopeVariables.ts
│ │ │ │ │ ├── MemoizeFbtAndMacroOperandsInSameScope.ts
│ │ │ │ │ ├── MergeReactiveScopesThatInvalidateTogether.ts
│ │ │ │ │ ├── PrintReactiveFunction.ts
│ │ │ │ │ ├── PromoteUsedTemporaries.ts
│ │ │ │ │ ├── PropagateEarlyReturns.ts
│ │ │ │ │ ├── PruneAllReactiveScopes.ts
│ │ │ │ │ ├── PruneAlwaysInvalidatingScopes.ts
│ │ │ │ │ ├── PruneHoistedContexts.ts
│ │ │ │ │ ├── PruneNonEscapingScopes.ts
│ │ │ │ │ ├── PruneNonReactiveDependencies.ts
│ │ │ │ │ ├── PruneTemporaryLValues.ts
│ │ │ │ │ ├── PruneUnusedLabels.ts
│ │ │ │ │ ├── PruneUnusedScopes.ts
│ │ │ │ │ ├── RenameVariables.ts
│ │ │ │ │ ├── StabilizeBlockIds.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── visitors.ts
│ │ │ │ ├── SSA/
│ │ │ │ │ ├── EliminateRedundantPhi.ts
│ │ │ │ │ ├── EnterSSA.ts
│ │ │ │ │ ├── RewriteInstructionKindsBasedOnReassignment.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Transform/
│ │ │ │ │ ├── NameAnonymousFunctions.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── TypeInference/
│ │ │ │ │ ├── InferTypes.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── Utils/
│ │ │ │ │ ├── ComponentDeclaration.ts
│ │ │ │ │ ├── DisjointSet.ts
│ │ │ │ │ ├── HookDeclaration.ts
│ │ │ │ │ ├── Keyword.ts
│ │ │ │ │ ├── Result.ts
│ │ │ │ │ ├── RuntimeDiagnosticConstants.ts
│ │ │ │ │ ├── Stack.ts
│ │ │ │ │ ├── TestUtils.ts
│ │ │ │ │ ├── todo.ts
│ │ │ │ │ ├── types.d.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── Validation/
│ │ │ │ │ ├── ValidateContextVariableLValues.ts
│ │ │ │ │ ├── ValidateExhaustiveDependencies.ts
│ │ │ │ │ ├── ValidateHooksUsage.ts
│ │ │ │ │ ├── ValidateLocalsNotReassignedAfterRender.ts
│ │ │ │ │ ├── ValidateNoCapitalizedCalls.ts
│ │ │ │ │ ├── ValidateNoDerivedComputationsInEffects.ts
│ │ │ │ │ ├── ValidateNoDerivedComputationsInEffects_exp.ts
│ │ │ │ │ ├── ValidateNoFreezingKnownMutableFunctions.ts
│ │ │ │ │ ├── ValidateNoImpureFunctionsInRender.ts
│ │ │ │ │ ├── ValidateNoJSXInTryStatement.ts
│ │ │ │ │ ├── ValidateNoRefAccessInRender.ts
│ │ │ │ │ ├── ValidateNoSetStateInEffects.ts
│ │ │ │ │ ├── ValidateNoSetStateInRender.ts
│ │ │ │ │ ├── ValidatePreservedManualMemoization.ts
│ │ │ │ │ ├── ValidateSourceLocations.ts
│ │ │ │ │ ├── ValidateStaticComponents.ts
│ │ │ │ │ ├── ValidateUseMemo.ts
│ │ │ │ │ └── index.ts
│ │ │ │ ├── __tests__/
│ │ │ │ │ ├── DisjointSet-test.ts
│ │ │ │ │ ├── Logger-test.ts
│ │ │ │ │ ├── Result-test.ts
│ │ │ │ │ ├── e2e/
│ │ │ │ │ │ ├── constant-prop.e2e.js
│ │ │ │ │ │ ├── expectLogs.js
│ │ │ │ │ │ ├── hello.e2e.js
│ │ │ │ │ │ ├── update-button.e2e.js
│ │ │ │ │ │ ├── update-expressions.e2e.js
│ │ │ │ │ │ └── use-state.e2e.js
│ │ │ │ │ ├── envConfig-test.ts
│ │ │ │ │ ├── fixtures/
│ │ │ │ │ │ ├── compiler/
│ │ │ │ │ │ │ ├── alias-capture-in-method-receiver-and-mutate.expect.md
│ │ │ │ │ │ │ ├── alias-capture-in-method-receiver-and-mutate.js
│ │ │ │ │ │ │ ├── alias-capture-in-method-receiver.expect.md
│ │ │ │ │ │ │ ├── alias-capture-in-method-receiver.js
│ │ │ │ │ │ │ ├── alias-computed-load.expect.md
│ │ │ │ │ │ │ ├── alias-computed-load.js
│ │ │ │ │ │ │ ├── alias-nested-member-path-mutate.expect.md
│ │ │ │ │ │ │ ├── alias-nested-member-path-mutate.js
│ │ │ │ │ │ │ ├── alias-nested-member-path.expect.md
│ │ │ │ │ │ │ ├── alias-nested-member-path.js
│ │ │ │ │ │ │ ├── alias-while.expect.md
│ │ │ │ │ │ │ ├── alias-while.js
│ │ │ │ │ │ │ ├── aliased-nested-scope-fn-expr.expect.md
│ │ │ │ │ │ │ ├── aliased-nested-scope-fn-expr.tsx
│ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.expect.md
│ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.tsx
│ │ │ │ │ │ │ ├── align-scope-starts-within-cond.expect.md
│ │ │ │ │ │ │ ├── align-scope-starts-within-cond.ts
│ │ │ │ │ │ │ ├── align-scopes-iife-return-modified-later-logical.expect.md
│ │ │ │ │ │ │ ├── align-scopes-iife-return-modified-later-logical.ts
│ │ │ │ │ │ │ ├── align-scopes-nested-block-structure.expect.md
│ │ │ │ │ │ │ ├── align-scopes-nested-block-structure.ts
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-if.expect.md
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-if.ts
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-label.expect.md
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-label.ts
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-try.expect.md
│ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-try.ts
│ │ │ │ │ │ │ ├── align-scopes-trycatch-nested-overlapping-range.expect.md
│ │ │ │ │ │ │ ├── align-scopes-trycatch-nested-overlapping-range.ts
│ │ │ │ │ │ │ ├── align-scopes-within-nested-valueblock-in-array.expect.md
│ │ │ │ │ │ │ ├── align-scopes-within-nested-valueblock-in-array.tsx
│ │ │ │ │ │ │ ├── allocating-logical-expression-instruction-scope.expect.md
│ │ │ │ │ │ │ ├── allocating-logical-expression-instruction-scope.ts
│ │ │ │ │ │ │ ├── allocating-primitive-as-dep-nested-scope.expect.md
│ │ │ │ │ │ │ ├── allocating-primitive-as-dep-nested-scope.js
│ │ │ │ │ │ │ ├── allocating-primitive-as-dep.expect.md
│ │ │ │ │ │ │ ├── allocating-primitive-as-dep.js
│ │ │ │ │ │ │ ├── allow-assigning-ref-accessing-function-to-object-property-if-not-mutated.expect.md
│ │ │ │ │ │ │ ├── allow-assigning-ref-accessing-function-to-object-property-if-not-mutated.js
│ │ │ │ │ │ │ ├── allow-assigning-to-global-in-function-spread-as-jsx.expect.md
│ │ │ │ │ │ │ ├── allow-assigning-to-global-in-function-spread-as-jsx.js
│ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect-usecallback.expect.md
│ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect-usecallback.js
│ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect.expect.md
│ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect.js
│ │ │ │ │ │ │ ├── allow-global-mutation-unused-usecallback.expect.md
│ │ │ │ │ │ │ ├── allow-global-mutation-unused-usecallback.js
│ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect-indirect.expect.md
│ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect-indirect.js
│ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect.expect.md
│ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect.js
│ │ │ │ │ │ │ ├── allow-merge-refs-pattern.expect.md
│ │ │ │ │ │ │ ├── allow-merge-refs-pattern.js
│ │ │ │ │ │ │ ├── allow-modify-global-in-callback-jsx.expect.md
│ │ │ │ │ │ │ ├── allow-modify-global-in-callback-jsx.js
│ │ │ │ │ │ │ ├── allow-mutate-global-in-effect-fixpoint.expect.md
│ │ │ │ │ │ │ ├── allow-mutate-global-in-effect-fixpoint.js
│ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx-indirect.expect.md
│ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx-indirect.tsx
│ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx.expect.md
│ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx.tsx
│ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx-indirect.expect.md
│ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx-indirect.tsx
│ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx.expect.md
│ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx.tsx
│ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper-props-object.expect.md
│ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper-props-object.js
│ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper.expect.md
│ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper.js
│ │ │ │ │ │ │ ├── allow-passing-refs-as-props.expect.md
│ │ │ │ │ │ │ ├── allow-passing-refs-as-props.js
│ │ │ │ │ │ │ ├── allow-reassignment-to-global-function-jsx-prop.expect.md
│ │ │ │ │ │ │ ├── allow-reassignment-to-global-function-jsx-prop.js
│ │ │ │ │ │ │ ├── allow-ref-access-in-effect-indirect.expect.md
│ │ │ │ │ │ │ ├── allow-ref-access-in-effect-indirect.js
│ │ │ │ │ │ │ ├── allow-ref-access-in-effect.expect.md
│ │ │ │ │ │ │ ├── allow-ref-access-in-effect.js
│ │ │ │ │ │ │ ├── allow-ref-access-in-unused-callback-nested.expect.md
│ │ │ │ │ │ │ ├── allow-ref-access-in-unused-callback-nested.js
│ │ │ │ │ │ │ ├── allow-ref-initialization-undefined.expect.md
│ │ │ │ │ │ │ ├── allow-ref-initialization-undefined.js
│ │ │ │ │ │ │ ├── allow-ref-initialization.expect.md
│ │ │ │ │ │ │ ├── allow-ref-initialization.js
│ │ │ │ │ │ │ ├── allow-ref-lazy-initialization-with-logical.expect.md
│ │ │ │ │ │ │ ├── allow-ref-lazy-initialization-with-logical.js
│ │ │ │ │ │ │ ├── allow-ref-type-cast-in-render.expect.md
│ │ │ │ │ │ │ ├── allow-ref-type-cast-in-render.js
│ │ │ │ │ │ │ ├── array-access-assignment.expect.md
│ │ │ │ │ │ │ ├── array-access-assignment.js
│ │ │ │ │ │ │ ├── array-at-closure.expect.md
│ │ │ │ │ │ │ ├── array-at-closure.js
│ │ │ │ │ │ │ ├── array-at-effect.expect.md
│ │ │ │ │ │ │ ├── array-at-effect.js
│ │ │ │ │ │ │ ├── array-at-mutate-after-capture.expect.md
│ │ │ │ │ │ │ ├── array-at-mutate-after-capture.js
│ │ │ │ │ │ │ ├── array-concat-should-capture.expect.md
│ │ │ │ │ │ │ ├── array-concat-should-capture.ts
│ │ │ │ │ │ │ ├── array-expression-spread.expect.md
│ │ │ │ │ │ │ ├── array-expression-spread.js
│ │ │ │ │ │ │ ├── array-from-arg1-captures-arg0.expect.md
│ │ │ │ │ │ │ ├── array-from-arg1-captures-arg0.js
│ │ │ │ │ │ │ ├── array-from-captures-arg0.expect.md
│ │ │ │ │ │ │ ├── array-from-captures-arg0.js
│ │ │ │ │ │ │ ├── array-from-maybemutates-arg0.expect.md
│ │ │ │ │ │ │ ├── array-from-maybemutates-arg0.js
│ │ │ │ │ │ │ ├── array-join.expect.md
│ │ │ │ │ │ │ ├── array-join.js
│ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.expect.md
│ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.js
│ │ │ │ │ │ │ ├── array-map-frozen-array-noAlias.expect.md
│ │ │ │ │ │ │ ├── array-map-frozen-array-noAlias.js
│ │ │ │ │ │ │ ├── array-map-frozen-array.expect.md
│ │ │ │ │ │ │ ├── array-map-frozen-array.js
│ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda-noAlias.expect.md
│ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda-noAlias.js
│ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda.expect.md
│ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda.js
│ │ │ │ │ │ │ ├── array-map-mutable-array-non-mutating-lambda-mutated-result.expect.md
│ │ │ │ │ │ │ ├── array-map-mutable-array-non-mutating-lambda-mutated-result.js
│ │ │ │ │ │ │ ├── array-map-noAlias-escaping-function.expect.md
│ │ │ │ │ │ │ ├── array-map-noAlias-escaping-function.js
│ │ │ │ │ │ │ ├── array-pattern-params.expect.md
│ │ │ │ │ │ │ ├── array-pattern-params.js
│ │ │ │ │ │ │ ├── array-pattern-spread-creates-array.expect.md
│ │ │ │ │ │ │ ├── array-pattern-spread-creates-array.js
│ │ │ │ │ │ │ ├── array-properties.expect.md
│ │ │ │ │ │ │ ├── array-properties.js
│ │ │ │ │ │ │ ├── array-property-call.expect.md
│ │ │ │ │ │ │ ├── array-property-call.js
│ │ │ │ │ │ │ ├── array-push-effect.expect.md
│ │ │ │ │ │ │ ├── array-push-effect.js
│ │ │ │ │ │ │ ├── array-spread-later-mutated.expect.md
│ │ │ │ │ │ │ ├── array-spread-later-mutated.js
│ │ │ │ │ │ │ ├── array-spread-mutable-iterator.expect.md
│ │ │ │ │ │ │ ├── array-spread-mutable-iterator.js
│ │ │ │ │ │ │ ├── arrow-expr-directive.expect.md
│ │ │ │ │ │ │ ├── arrow-expr-directive.js
│ │ │ │ │ │ │ ├── arrow-function-one-line-directive.expect.md
│ │ │ │ │ │ │ ├── arrow-function-one-line-directive.js
│ │ │ │ │ │ │ ├── arrow-function-with-implicit-return.expect.md
│ │ │ │ │ │ │ ├── arrow-function-with-implicit-return.js
│ │ │ │ │ │ │ ├── assignment-expression-computed.expect.md
│ │ │ │ │ │ │ ├── assignment-expression-computed.js
│ │ │ │ │ │ │ ├── assignment-expression-nested-path.expect.md
│ │ │ │ │ │ │ ├── assignment-expression-nested-path.js
│ │ │ │ │ │ │ ├── assignment-in-nested-if.expect.md
│ │ │ │ │ │ │ ├── assignment-in-nested-if.js
│ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue-array.expect.md
│ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue-array.js
│ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue.expect.md
│ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue.js
│ │ │ │ │ │ │ ├── assignment-variations.expect.md
│ │ │ │ │ │ │ ├── assignment-variations.js
│ │ │ │ │ │ │ ├── await-side-effecting-promise.expect.md
│ │ │ │ │ │ │ ├── await-side-effecting-promise.js
│ │ │ │ │ │ │ ├── await.expect.md
│ │ │ │ │ │ │ ├── await.js
│ │ │ │ │ │ │ ├── babel-existing-react-import.expect.md
│ │ │ │ │ │ │ ├── babel-existing-react-import.js
│ │ │ │ │ │ │ ├── babel-existing-react-kitchensink-import.expect.md
│ │ │ │ │ │ │ ├── babel-existing-react-kitchensink-import.js
│ │ │ │ │ │ │ ├── babel-existing-react-namespace-import.expect.md
│ │ │ │ │ │ │ ├── babel-existing-react-namespace-import.js
│ │ │ │ │ │ │ ├── babel-existing-react-runtime-import.expect.md
│ │ │ │ │ │ │ ├── babel-existing-react-runtime-import.js
│ │ │ │ │ │ │ ├── babel-repro-compact-negative-number.expect.md
│ │ │ │ │ │ │ ├── babel-repro-compact-negative-number.js
│ │ │ │ │ │ │ ├── block-scoping-switch-dead-code.expect.md
│ │ │ │ │ │ │ ├── block-scoping-switch-dead-code.js
│ │ │ │ │ │ │ ├── block-scoping-switch-variable-scoping.expect.md
│ │ │ │ │ │ │ ├── block-scoping-switch-variable-scoping.js
│ │ │ │ │ │ │ ├── bug-capturing-func-maybealias-captured-mutate.expect.md
│ │ │ │ │ │ │ ├── bug-capturing-func-maybealias-captured-mutate.ts
│ │ │ │ │ │ │ ├── bug-ref-prefix-postfix-operator.expect.md
│ │ │ │ │ │ │ ├── bug-ref-prefix-postfix-operator.js
│ │ │ │ │ │ │ ├── bug-separate-memoization-due-to-callback-capturing.expect.md
│ │ │ │ │ │ │ ├── bug-separate-memoization-due-to-callback-capturing.js
│ │ │ │ │ │ │ ├── bug-type-inference-control-flow.expect.md
│ │ │ │ │ │ │ ├── bug-type-inference-control-flow.ts
│ │ │ │ │ │ │ ├── builtin-jsx-tag-lowered-between-mutations.expect.md
│ │ │ │ │ │ │ ├── builtin-jsx-tag-lowered-between-mutations.js
│ │ │ │ │ │ │ ├── call-args-assignment.expect.md
│ │ │ │ │ │ │ ├── call-args-assignment.js
│ │ │ │ │ │ │ ├── call-args-destructuring-assignment.expect.md
│ │ │ │ │ │ │ ├── call-args-destructuring-assignment.js
│ │ │ │ │ │ │ ├── call-spread-argument-mutable-iterator.expect.md
│ │ │ │ │ │ │ ├── call-spread-argument-mutable-iterator.js
│ │ │ │ │ │ │ ├── call-spread.expect.md
│ │ │ │ │ │ │ ├── call-spread.js
│ │ │ │ │ │ │ ├── call-with-independently-memoizable-arg.expect.md
│ │ │ │ │ │ │ ├── call-with-independently-memoizable-arg.js
│ │ │ │ │ │ │ ├── call.expect.md
│ │ │ │ │ │ │ ├── call.js
│ │ │ │ │ │ │ ├── capture-indirect-mutate-alias-iife.expect.md
│ │ │ │ │ │ │ ├── capture-indirect-mutate-alias-iife.js
│ │ │ │ │ │ │ ├── capture-indirect-mutate-alias.expect.md
│ │ │ │ │ │ │ ├── capture-indirect-mutate-alias.js
│ │ │ │ │ │ │ ├── capture-param-mutate.expect.md
│ │ │ │ │ │ │ ├── capture-param-mutate.js
│ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.expect.md
│ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.tsx
│ │ │ │ │ │ │ ├── capture_mutate-across-fns-iife.expect.md
│ │ │ │ │ │ │ ├── capture_mutate-across-fns-iife.js
│ │ │ │ │ │ │ ├── capture_mutate-across-fns.expect.md
│ │ │ │ │ │ │ ├── capture_mutate-across-fns.js
│ │ │ │ │ │ │ ├── capturing-arrow-function-1.expect.md
│ │ │ │ │ │ │ ├── capturing-arrow-function-1.js
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2-iife.js
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2.expect.md
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2.js
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2-iife.js
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2.expect.md
│ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2.js
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr.js
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-alias-mutate-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-mutate-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate-iife.js
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-mutate-2.expect.md
│ │ │ │ │ │ │ ├── capturing-func-mutate-2.js
│ │ │ │ │ │ │ ├── capturing-func-mutate-3.expect.md
│ │ │ │ │ │ │ ├── capturing-func-mutate-3.js
│ │ │ │ │ │ │ ├── capturing-func-mutate-nested.expect.md
│ │ │ │ │ │ │ ├── capturing-func-mutate-nested.js
│ │ │ │ │ │ │ ├── capturing-func-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-no-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-func-no-mutate.js
│ │ │ │ │ │ │ ├── capturing-func-simple-alias-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-func-simple-alias-iife.js
│ │ │ │ │ │ │ ├── capturing-func-simple-alias.expect.md
│ │ │ │ │ │ │ ├── capturing-func-simple-alias.js
│ │ │ │ │ │ │ ├── capturing-function-1.expect.md
│ │ │ │ │ │ │ ├── capturing-function-1.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.js
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load.expect.md
│ │ │ │ │ │ │ ├── capturing-function-alias-computed-load.js
│ │ │ │ │ │ │ ├── capturing-function-capture-ref-before-rename.expect.md
│ │ │ │ │ │ │ ├── capturing-function-capture-ref-before-rename.js
│ │ │ │ │ │ │ ├── capturing-function-conditional-capture-mutate.expect.md
│ │ │ │ │ │ │ ├── capturing-function-conditional-capture-mutate.js
│ │ │ │ │ │ │ ├── capturing-function-decl.expect.md
│ │ │ │ │ │ │ ├── capturing-function-decl.js
│ │ │ │ │ │ │ ├── capturing-function-member-expr-arguments.expect.md
│ │ │ │ │ │ │ ├── capturing-function-member-expr-arguments.js
│ │ │ │ │ │ │ ├── capturing-function-member-expr-call.expect.md
│ │ │ │ │ │ │ ├── capturing-function-member-expr-call.js
│ │ │ │ │ │ │ ├── capturing-function-renamed-ref.expect.md
│ │ │ │ │ │ │ ├── capturing-function-renamed-ref.js
│ │ │ │ │ │ │ ├── capturing-function-runs-inference.expect.md
│ │ │ │ │ │ │ ├── capturing-function-runs-inference.js
│ │ │ │ │ │ │ ├── capturing-function-shadow-captured.expect.md
│ │ │ │ │ │ │ ├── capturing-function-shadow-captured.js
│ │ │ │ │ │ │ ├── capturing-function-skip-computed-path.expect.md
│ │ │ │ │ │ │ ├── capturing-function-skip-computed-path.js
│ │ │ │ │ │ │ ├── capturing-function-within-block.expect.md
│ │ │ │ │ │ │ ├── capturing-function-within-block.js
│ │ │ │ │ │ │ ├── capturing-member-expr.expect.md
│ │ │ │ │ │ │ ├── capturing-member-expr.js
│ │ │ │ │ │ │ ├── capturing-nested-member-call.expect.md
│ │ │ │ │ │ │ ├── capturing-nested-member-call.js
│ │ │ │ │ │ │ ├── capturing-nested-member-expr-in-nested-func.expect.md
│ │ │ │ │ │ │ ├── capturing-nested-member-expr-in-nested-func.js
│ │ │ │ │ │ │ ├── capturing-nested-member-expr.expect.md
│ │ │ │ │ │ │ ├── capturing-nested-member-expr.js
│ │ │ │ │ │ │ ├── capturing-reference-changes-type.expect.md
│ │ │ │ │ │ │ ├── capturing-reference-changes-type.js
│ │ │ │ │ │ │ ├── capturing-variable-in-nested-block.expect.md
│ │ │ │ │ │ │ ├── capturing-variable-in-nested-block.js
│ │ │ │ │ │ │ ├── capturing-variable-in-nested-function.expect.md
│ │ │ │ │ │ │ ├── capturing-variable-in-nested-function.js
│ │ │ │ │ │ │ ├── chained-assignment-context-variable.expect.md
│ │ │ │ │ │ │ ├── chained-assignment-context-variable.js
│ │ │ │ │ │ │ ├── chained-assignment-expressions.expect.md
│ │ │ │ │ │ │ ├── chained-assignment-expressions.js
│ │ │ │ │ │ │ ├── class-component-with-render-helper.expect.md
│ │ │ │ │ │ │ ├── class-component-with-render-helper.js
│ │ │ │ │ │ │ ├── codegen-inline-iife-reassign.expect.md
│ │ │ │ │ │ │ ├── codegen-inline-iife-reassign.ts
│ │ │ │ │ │ │ ├── codegen-inline-iife-storeprop.expect.md
│ │ │ │ │ │ │ ├── codegen-inline-iife-storeprop.ts
│ │ │ │ │ │ │ ├── codegen-inline-iife.expect.md
│ │ │ │ │ │ │ ├── codegen-inline-iife.ts
│ │ │ │ │ │ │ ├── codegen-instrument-forget-test.expect.md
│ │ │ │ │ │ │ ├── codegen-instrument-forget-test.js
│ │ │ │ │ │ │ ├── complex-while.expect.md
│ │ │ │ │ │ │ ├── complex-while.js
│ │ │ │ │ │ │ ├── component-declaration-basic.flow.expect.md
│ │ │ │ │ │ │ ├── component-declaration-basic.flow.js
│ │ │ │ │ │ │ ├── component-inner-function-with-many-args.expect.md
│ │ │ │ │ │ │ ├── component-inner-function-with-many-args.tsx
│ │ │ │ │ │ │ ├── component.expect.md
│ │ │ │ │ │ │ ├── component.js
│ │ │ │ │ │ │ ├── computed-call-evaluation-order.expect.md
│ │ │ │ │ │ │ ├── computed-call-evaluation-order.js
│ │ │ │ │ │ │ ├── computed-call-spread.expect.md
│ │ │ │ │ │ │ ├── computed-call-spread.js
│ │ │ │ │ │ │ ├── computed-load-primitive-as-dependency.expect.md
│ │ │ │ │ │ │ ├── computed-load-primitive-as-dependency.js
│ │ │ │ │ │ │ ├── computed-store-alias.expect.md
│ │ │ │ │ │ │ ├── computed-store-alias.js
│ │ │ │ │ │ │ ├── concise-arrow-expr.expect.md
│ │ │ │ │ │ │ ├── concise-arrow-expr.js
│ │ │ │ │ │ │ ├── conditional-break-labeled.expect.md
│ │ │ │ │ │ │ ├── conditional-break-labeled.js
│ │ │ │ │ │ │ ├── conditional-early-return.expect.md
│ │ │ │ │ │ │ ├── conditional-early-return.js
│ │ │ │ │ │ │ ├── conditional-on-mutable.expect.md
│ │ │ │ │ │ │ ├── conditional-on-mutable.js
│ │ │ │ │ │ │ ├── conditional-set-state-in-render.expect.md
│ │ │ │ │ │ │ ├── conditional-set-state-in-render.js
│ │ │ │ │ │ │ ├── conflict-codegen-instrument-forget.expect.md
│ │ │ │ │ │ │ ├── conflict-codegen-instrument-forget.js
│ │ │ │ │ │ │ ├── conflicting-dollar-sign-variable.expect.md
│ │ │ │ │ │ │ ├── conflicting-dollar-sign-variable.js
│ │ │ │ │ │ │ ├── consecutive-use-memo.expect.md
│ │ │ │ │ │ │ ├── consecutive-use-memo.ts
│ │ │ │ │ │ │ ├── console-readonly.expect.md
│ │ │ │ │ │ │ ├── console-readonly.js
│ │ │ │ │ │ │ ├── const-propagation-into-function-expression-global.expect.md
│ │ │ │ │ │ │ ├── const-propagation-into-function-expression-global.js
│ │ │ │ │ │ │ ├── const-propagation-into-function-expression-primitive.expect.md
│ │ │ │ │ │ │ ├── const-propagation-into-function-expression-primitive.js
│ │ │ │ │ │ │ ├── const-propagation-phi-nodes.expect.md
│ │ │ │ │ │ │ ├── const-propagation-phi-nodes.ts
│ │ │ │ │ │ │ ├── constant-computed.expect.md
│ │ │ │ │ │ │ ├── constant-computed.js
│ │ │ │ │ │ │ ├── constant-prop-across-objectmethod-def.expect.md
│ │ │ │ │ │ │ ├── constant-prop-across-objectmethod-def.js
│ │ │ │ │ │ │ ├── constant-prop-colliding-identifier.expect.md
│ │ │ │ │ │ │ ├── constant-prop-colliding-identifier.js
│ │ │ │ │ │ │ ├── constant-prop-to-object-method.expect.md
│ │ │ │ │ │ │ ├── constant-prop-to-object-method.js
│ │ │ │ │ │ │ ├── constant-propagate-global-phis-constant.expect.md
│ │ │ │ │ │ │ ├── constant-propagate-global-phis-constant.js
│ │ │ │ │ │ │ ├── constant-propagate-global-phis.expect.md
│ │ │ │ │ │ │ ├── constant-propagate-global-phis.js
│ │ │ │ │ │ │ ├── constant-propagation-bit-ops.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-bit-ops.js
│ │ │ │ │ │ │ ├── constant-propagation-for.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-for.js
│ │ │ │ │ │ │ ├── constant-propagation-into-function-expressions.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-into-function-expressions.js
│ │ │ │ │ │ │ ├── constant-propagation-phi.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-phi.js
│ │ │ │ │ │ │ ├── constant-propagation-string-concat.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-string-concat.js
│ │ │ │ │ │ │ ├── constant-propagation-template-literal.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-template-literal.js
│ │ │ │ │ │ │ ├── constant-propagation-unary-number.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-unary-number.js
│ │ │ │ │ │ │ ├── constant-propagation-unary.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-unary.js
│ │ │ │ │ │ │ ├── constant-propagation-while.expect.md
│ │ │ │ │ │ │ ├── constant-propagation-while.js
│ │ │ │ │ │ │ ├── constant-propagation.expect.md
│ │ │ │ │ │ │ ├── constant-propagation.js
│ │ │ │ │ │ │ ├── constructor.expect.md
│ │ │ │ │ │ │ ├── constructor.js
│ │ │ │ │ │ │ ├── context-variable-as-jsx-element-tag.expect.md
│ │ │ │ │ │ │ ├── context-variable-as-jsx-element-tag.js
│ │ │ │ │ │ │ ├── context-variable-reactive-explicit-control-flow.expect.md
│ │ │ │ │ │ │ ├── context-variable-reactive-explicit-control-flow.js
│ │ │ │ │ │ │ ├── context-variable-reactive-implicit-control-flow.expect.md
│ │ │ │ │ │ │ ├── context-variable-reactive-implicit-control-flow.js
│ │ │ │ │ │ │ ├── context-variable-reassigned-objectmethod.expect.md
│ │ │ │ │ │ │ ├── context-variable-reassigned-objectmethod.js
│ │ │ │ │ │ │ ├── context-variable-reassigned-outside-of-lambda.expect.md
│ │ │ │ │ │ │ ├── context-variable-reassigned-outside-of-lambda.js
│ │ │ │ │ │ │ ├── context-variable-reassigned-reactive-capture.expect.md
│ │ │ │ │ │ │ ├── context-variable-reassigned-reactive-capture.js
│ │ │ │ │ │ │ ├── context-variable-reassigned-two-lambdas.expect.md
│ │ │ │ │ │ │ ├── context-variable-reassigned-two-lambdas.js
│ │ │ │ │ │ │ ├── controlled-input.expect.md
│ │ │ │ │ │ │ ├── controlled-input.js
│ │ │ │ │ │ │ ├── createElement-freeze.expect.md
│ │ │ │ │ │ │ ├── createElement-freeze.js
│ │ │ │ │ │ │ ├── custom-opt-out-directive.expect.md
│ │ │ │ │ │ │ ├── custom-opt-out-directive.tsx
│ │ │ │ │ │ │ ├── dce-loop.expect.md
│ │ │ │ │ │ │ ├── dce-loop.js
│ │ │ │ │ │ │ ├── dce-unused-const.expect.md
│ │ │ │ │ │ │ ├── dce-unused-const.js
│ │ │ │ │ │ │ ├── dce-unused-postfix-update.expect.md
│ │ │ │ │ │ │ ├── dce-unused-postfix-update.js
│ │ │ │ │ │ │ ├── dce-unused-prefix-update.expect.md
│ │ │ │ │ │ │ ├── dce-unused-prefix-update.js
│ │ │ │ │ │ │ ├── debugger-memoized.expect.md
│ │ │ │ │ │ │ ├── debugger-memoized.js
│ │ │ │ │ │ │ ├── debugger.expect.md
│ │ │ │ │ │ │ ├── debugger.js
│ │ │ │ │ │ │ ├── declare-reassign-variable-in-closure.expect.md
│ │ │ │ │ │ │ ├── declare-reassign-variable-in-closure.js
│ │ │ │ │ │ │ ├── deeply-nested-function-expressions-with-params.expect.md
│ │ │ │ │ │ │ ├── deeply-nested-function-expressions-with-params.js
│ │ │ │ │ │ │ ├── default-param-array-with-unary.expect.md
│ │ │ │ │ │ │ ├── default-param-array-with-unary.js
│ │ │ │ │ │ │ ├── default-param-calls-global-function.expect.md
│ │ │ │ │ │ │ ├── default-param-calls-global-function.js
│ │ │ │ │ │ │ ├── default-param-with-empty-callback.expect.md
│ │ │ │ │ │ │ ├── default-param-with-empty-callback.js
│ │ │ │ │ │ │ ├── default-param-with-reorderable-callback.expect.md
│ │ │ │ │ │ │ ├── default-param-with-reorderable-callback.js
│ │ │ │ │ │ │ ├── delete-computed-property.expect.md
│ │ │ │ │ │ │ ├── delete-computed-property.js
│ │ │ │ │ │ │ ├── delete-property.expect.md
│ │ │ │ │ │ │ ├── delete-property.js
│ │ │ │ │ │ │ ├── dependencies-outputs.expect.md
│ │ │ │ │ │ │ ├── dependencies-outputs.js
│ │ │ │ │ │ │ ├── dependencies.expect.md
│ │ │ │ │ │ │ ├── dependencies.js
│ │ │ │ │ │ │ ├── destructure-array-assignment-to-context-var.expect.md
│ │ │ │ │ │ │ ├── destructure-array-assignment-to-context-var.js
│ │ │ │ │ │ │ ├── destructure-array-declaration-to-context-var.expect.md
│ │ │ │ │ │ │ ├── destructure-array-declaration-to-context-var.js
│ │ │ │ │ │ │ ├── destructure-capture-global.expect.md
│ │ │ │ │ │ │ ├── destructure-capture-global.js
│ │ │ │ │ │ │ ├── destructure-default-array-with-unary.expect.md
│ │ │ │ │ │ │ ├── destructure-default-array-with-unary.js
│ │ │ │ │ │ │ ├── destructure-direct-reassignment.expect.md
│ │ │ │ │ │ │ ├── destructure-direct-reassignment.js
│ │ │ │ │ │ │ ├── destructure-in-branch-ssa.expect.md
│ │ │ │ │ │ │ ├── destructure-in-branch-ssa.ts
│ │ │ │ │ │ │ ├── destructure-mixed-property-key-types.expect.md
│ │ │ │ │ │ │ ├── destructure-mixed-property-key-types.js
│ │ │ │ │ │ │ ├── destructure-object-assignment-to-context-var.expect.md
│ │ │ │ │ │ │ ├── destructure-object-assignment-to-context-var.js
│ │ │ │ │ │ │ ├── destructure-object-declaration-to-context-var.expect.md
│ │ │ │ │ │ │ ├── destructure-object-declaration-to-context-var.js
│ │ │ │ │ │ │ ├── destructure-param-string-literal-key-invalid-identifier.expect.md
│ │ │ │ │ │ │ ├── destructure-param-string-literal-key-invalid-identifier.js
│ │ │ │ │ │ │ ├── destructure-param-string-literal-key.expect.md
│ │ │ │ │ │ │ ├── destructure-param-string-literal-key.js
│ │ │ │ │ │ │ ├── destructure-string-literal-invalid-identifier-property-key.expect.md
│ │ │ │ │ │ │ ├── destructure-string-literal-invalid-identifier-property-key.js
│ │ │ │ │ │ │ ├── destructure-string-literal-property-key.expect.md
│ │ │ │ │ │ │ ├── destructure-string-literal-property-key.js
│ │ │ │ │ │ │ ├── destructuring-array-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-array-default.js
│ │ │ │ │ │ │ ├── destructuring-array-param-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-array-param-default.js
│ │ │ │ │ │ │ ├── destructuring-assignment-array-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-assignment-array-default.js
│ │ │ │ │ │ │ ├── destructuring-assignment.expect.md
│ │ │ │ │ │ │ ├── destructuring-assignment.js
│ │ │ │ │ │ │ ├── destructuring-default-at-array-hole.expect.md
│ │ │ │ │ │ │ ├── destructuring-default-at-array-hole.js
│ │ │ │ │ │ │ ├── destructuring-default-at-explicit-null.expect.md
│ │ │ │ │ │ │ ├── destructuring-default-at-explicit-null.js
│ │ │ │ │ │ │ ├── destructuring-default-at-explicit-undefined.expect.md
│ │ │ │ │ │ │ ├── destructuring-default-at-explicit-undefined.js
│ │ │ │ │ │ │ ├── destructuring-default-past-end-of-array.expect.md
│ │ │ │ │ │ │ ├── destructuring-default-past-end-of-array.js
│ │ │ │ │ │ │ ├── destructuring-mixed-scope-and-local-variables-with-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-mixed-scope-and-local-variables-with-default.js
│ │ │ │ │ │ │ ├── destructuring-mixed-scope-declarations-and-locals.expect.md
│ │ │ │ │ │ │ ├── destructuring-mixed-scope-declarations-and-locals.js
│ │ │ │ │ │ │ ├── destructuring-object-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-object-default.js
│ │ │ │ │ │ │ ├── destructuring-object-param-default.expect.md
│ │ │ │ │ │ │ ├── destructuring-object-param-default.js
│ │ │ │ │ │ │ ├── destructuring-object-pattern-within-rest.expect.md
│ │ │ │ │ │ │ ├── destructuring-object-pattern-within-rest.js
│ │ │ │ │ │ │ ├── destructuring-property-inference.expect.md
│ │ │ │ │ │ │ ├── destructuring-property-inference.js
│ │ │ │ │ │ │ ├── destructuring-same-property-identifier-names.expect.md
│ │ │ │ │ │ │ ├── destructuring-same-property-identifier-names.js
│ │ │ │ │ │ │ ├── destructuring-with-conditional-as-default-value.expect.md
│ │ │ │ │ │ │ ├── destructuring-with-conditional-as-default-value.js
│ │ │ │ │ │ │ ├── destructuring-with-typecast-as-default-value.flow.expect.md
│ │ │ │ │ │ │ ├── destructuring-with-typecast-as-default-value.flow.js
│ │ │ │ │ │ │ ├── destructuring.expect.md
│ │ │ │ │ │ │ ├── destructuring.js
│ │ │ │ │ │ │ ├── do-while-break.expect.md
│ │ │ │ │ │ │ ├── do-while-break.js
│ │ │ │ │ │ │ ├── do-while-compound-test.expect.md
│ │ │ │ │ │ │ ├── do-while-compound-test.js
│ │ │ │ │ │ │ ├── do-while-conditional-break.expect.md
│ │ │ │ │ │ │ ├── do-while-conditional-break.js
│ │ │ │ │ │ │ ├── do-while-continue.expect.md
│ │ │ │ │ │ │ ├── do-while-continue.js
│ │ │ │ │ │ │ ├── do-while-early-unconditional-break.expect.md
│ │ │ │ │ │ │ ├── do-while-early-unconditional-break.js
│ │ │ │ │ │ │ ├── do-while-simple.expect.md
│ │ │ │ │ │ │ ├── do-while-simple.js
│ │ │ │ │ │ │ ├── dominator.expect.md
│ │ │ │ │ │ │ ├── dominator.js
│ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping-useMemo.expect.md
│ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping-useMemo.js
│ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping.expect.md
│ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping.js
│ │ │ │ │ │ │ ├── dont-merge-if-dep-is-inner-declaration-of-previous-scope.expect.md
│ │ │ │ │ │ │ ├── dont-merge-if-dep-is-inner-declaration-of-previous-scope.js
│ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-store-const-used-later.expect.md
│ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-store-const-used-later.js
│ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-with-intermediate-reassignment.expect.md
│ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-with-intermediate-reassignment.js
│ │ │ │ │ │ │ ├── drop-methodcall-usecallback.expect.md
│ │ │ │ │ │ │ ├── drop-methodcall-usecallback.js
│ │ │ │ │ │ │ ├── drop-methodcall-usememo.expect.md
│ │ │ │ │ │ │ ├── drop-methodcall-usememo.js
│ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.js
│ │ │ │ │ │ │ ├── early-return-no-declarations-reassignments-dependencies.expect.md
│ │ │ │ │ │ │ ├── early-return-no-declarations-reassignments-dependencies.js
│ │ │ │ │ │ │ ├── early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ ├── early-return-within-reactive-scope.js
│ │ │ │ │ │ │ ├── early-return.expect.md
│ │ │ │ │ │ │ ├── early-return.js
│ │ │ │ │ │ │ ├── ecma/
│ │ │ │ │ │ │ │ ├── error.reserved-words.expect.md
│ │ │ │ │ │ │ │ └── error.reserved-words.ts
│ │ │ │ │ │ │ ├── effect-derived-computations/
│ │ │ │ │ │ │ │ ├── derived-state-conditionally-in-effect.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-conditionally-in-effect.js
│ │ │ │ │ │ │ │ ├── derived-state-from-default-props.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-default-props.js
│ │ │ │ │ │ │ │ ├── derived-state-from-local-state-in-effect.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-local-state-in-effect.js
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-local-state-and-component-scope.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-local-state-and-component-scope.js
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-call-outside-effect-no-error.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-call-outside-effect-no-error.js
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-ternary.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-ternary.js
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-used-outside-effect-no-error.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-used-outside-effect-no-error.js
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-with-side-effect.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-prop-with-side-effect.js
│ │ │ │ │ │ │ │ ├── derived-state-from-ref-and-state-no-error.expect.md
│ │ │ │ │ │ │ │ ├── derived-state-from-ref-and-state-no-error.js
│ │ │ │ │ │ │ │ ├── effect-contains-local-function-call.expect.md
│ │ │ │ │ │ │ │ ├── effect-contains-local-function-call.js
│ │ │ │ │ │ │ │ ├── effect-contains-prop-function-call-no-error.expect.md
│ │ │ │ │ │ │ │ ├── effect-contains-prop-function-call-no-error.js
│ │ │ │ │ │ │ │ ├── effect-used-in-dep-array-still-errors.expect.md
│ │ │ │ │ │ │ │ ├── effect-used-in-dep-array-still-errors.js
│ │ │ │ │ │ │ │ ├── effect-with-cleanup-function-depending-on-derived-computation-value.expect.md
│ │ │ │ │ │ │ │ ├── effect-with-cleanup-function-depending-on-derived-computation-value.js
│ │ │ │ │ │ │ │ ├── effect-with-global-function-call-no-error.expect.md
│ │ │ │ │ │ │ │ ├── effect-with-global-function-call-no-error.js
│ │ │ │ │ │ │ │ ├── from-props-setstate-in-effect-no-error.expect.md
│ │ │ │ │ │ │ │ ├── from-props-setstate-in-effect-no-error.js
│ │ │ │ │ │ │ │ ├── function-expression-mutation-edge-case.expect.md
│ │ │ │ │ │ │ │ ├── function-expression-mutation-edge-case.js
│ │ │ │ │ │ │ │ ├── invalid-derived-computation-in-effect.expect.md
│ │ │ │ │ │ │ │ ├── invalid-derived-computation-in-effect.js
│ │ │ │ │ │ │ │ ├── invalid-derived-state-from-computed-props.expect.md
│ │ │ │ │ │ │ │ ├── invalid-derived-state-from-computed-props.js
│ │ │ │ │ │ │ │ ├── invalid-derived-state-from-destructured-props.expect.md
│ │ │ │ │ │ │ │ ├── invalid-derived-state-from-destructured-props.js
│ │ │ │ │ │ │ │ ├── ref-conditional-in-effect-no-error.expect.md
│ │ │ │ │ │ │ │ ├── ref-conditional-in-effect-no-error.js
│ │ │ │ │ │ │ │ ├── usestate-derived-from-prop-no-show-in-data-flow-tree.expect.md
│ │ │ │ │ │ │ │ └── usestate-derived-from-prop-no-show-in-data-flow-tree.js
│ │ │ │ │ │ │ ├── empty-catch-statement.expect.md
│ │ │ │ │ │ │ ├── empty-catch-statement.ts
│ │ │ │ │ │ │ ├── empty-eslint-suppressions-config.expect.md
│ │ │ │ │ │ │ ├── empty-eslint-suppressions-config.js
│ │ │ │ │ │ │ ├── error._todo.computed-lval-in-destructure.expect.md
│ │ │ │ │ │ │ ├── error._todo.computed-lval-in-destructure.js
│ │ │ │ │ │ │ ├── error.assign-global-in-component-tag-function.expect.md
│ │ │ │ │ │ │ ├── error.assign-global-in-component-tag-function.js
│ │ │ │ │ │ │ ├── error.assign-global-in-jsx-children.expect.md
│ │ │ │ │ │ │ ├── error.assign-global-in-jsx-children.js
│ │ │ │ │ │ │ ├── error.assign-ref-in-effect-hint.expect.md
│ │ │ │ │ │ │ ├── error.assign-ref-in-effect-hint.js
│ │ │ │ │ │ │ ├── error.bailout-on-flow-suppression.expect.md
│ │ │ │ │ │ │ ├── error.bailout-on-flow-suppression.js
│ │ │ │ │ │ │ ├── error.bailout-on-suppression-of-custom-rule.expect.md
│ │ │ │ │ │ │ ├── error.bailout-on-suppression-of-custom-rule.js
│ │ │ │ │ │ │ ├── error.bug-infer-mutation-aliasing-effects.expect.md
│ │ │ │ │ │ │ ├── error.bug-infer-mutation-aliasing-effects.js
│ │ │ │ │ │ │ ├── error.bug-invariant-codegen-methodcall.expect.md
│ │ │ │ │ │ │ ├── error.bug-invariant-codegen-methodcall.js
│ │ │ │ │ │ │ ├── error.bug-invariant-couldnt-find-binding-for-decl.expect.md
│ │ │ │ │ │ │ ├── error.bug-invariant-couldnt-find-binding-for-decl.js
│ │ │ │ │ │ │ ├── error.bug-invariant-expected-consistent-destructuring.expect.md
│ │ │ │ │ │ │ ├── error.bug-invariant-expected-consistent-destructuring.js
│ │ │ │ │ │ │ ├── error.bug-invariant-local-or-context-references.expect.md
│ │ │ │ │ │ │ ├── error.bug-invariant-local-or-context-references.js
│ │ │ │ │ │ │ ├── error.bug-invariant-unnamed-temporary.expect.md
│ │ │ │ │ │ │ ├── error.bug-invariant-unnamed-temporary.js
│ │ │ │ │ │ │ ├── error.call-args-destructuring-asignment-complex.expect.md
│ │ │ │ │ │ │ ├── error.call-args-destructuring-asignment-complex.js
│ │ │ │ │ │ │ ├── error.capitalized-function-call-aliased.expect.md
│ │ │ │ │ │ │ ├── error.capitalized-function-call-aliased.js
│ │ │ │ │ │ │ ├── error.capitalized-function-call.expect.md
│ │ │ │ │ │ │ ├── error.capitalized-function-call.js
│ │ │ │ │ │ │ ├── error.capitalized-method-call.expect.md
│ │ │ │ │ │ │ ├── error.capitalized-method-call.js
│ │ │ │ │ │ │ ├── error.capture-ref-for-mutation.expect.md
│ │ │ │ │ │ │ ├── error.capture-ref-for-mutation.tsx
│ │ │ │ │ │ │ ├── error.conditional-hook-unknown-hook-react-namespace.expect.md
│ │ │ │ │ │ │ ├── error.conditional-hook-unknown-hook-react-namespace.js
│ │ │ │ │ │ │ ├── error.conditional-hooks-as-method-call.expect.md
│ │ │ │ │ │ │ ├── error.conditional-hooks-as-method-call.js
│ │ │ │ │ │ │ ├── error.context-variable-only-chained-assign.expect.md
│ │ │ │ │ │ │ ├── error.context-variable-only-chained-assign.js
│ │ │ │ │ │ │ ├── error.declare-reassign-variable-in-function-declaration.expect.md
│ │ │ │ │ │ │ ├── error.declare-reassign-variable-in-function-declaration.js
│ │ │ │ │ │ │ ├── error.default-param-accesses-local.expect.md
│ │ │ │ │ │ │ ├── error.default-param-accesses-local.js
│ │ │ │ │ │ │ ├── error.dont-hoist-inline-reference.expect.md
│ │ │ │ │ │ │ ├── error.dont-hoist-inline-reference.js
│ │ │ │ │ │ │ ├── error.fault-tolerance-reports-multiple-errors.expect.md
│ │ │ │ │ │ │ ├── error.fault-tolerance-reports-multiple-errors.js
│ │ │ │ │ │ │ ├── error.function-expression-references-variable-its-assigned-to.expect.md
│ │ │ │ │ │ │ ├── error.function-expression-references-variable-its-assigned-to.js
│ │ │ │ │ │ │ ├── error.handle-unexpected-exception-pipeline.expect.md
│ │ │ │ │ │ │ ├── error.handle-unexpected-exception-pipeline.ts
│ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional-optional.expect.md
│ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional-optional.js
│ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional.expect.md
│ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional.js
│ │ │ │ │ │ │ ├── error.hoisting-simple-function-declaration.expect.md
│ │ │ │ │ │ │ ├── error.hoisting-simple-function-declaration.js
│ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-identifier.expect.md
│ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-identifier.tsx
│ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-memberexpr.expect.md
│ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-memberexpr.jsx
│ │ │ │ │ │ │ ├── error.hook-property-load-local-hook.expect.md
│ │ │ │ │ │ │ ├── error.hook-property-load-local-hook.js
│ │ │ │ │ │ │ ├── error.hook-ref-value.expect.md
│ │ │ │ │ │ │ ├── error.hook-ref-value.js
│ │ │ │ │ │ │ ├── error.invalid-ReactUseMemo-async-callback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ReactUseMemo-async-callback.js
│ │ │ │ │ │ │ ├── error.invalid-access-ref-during-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-access-ref-during-render.js
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer-init.expect.md
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer-init.js
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer.expect.md
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer.js
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-render-mutate-object-with-ref-function.expect.md
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-render-mutate-object-with-ref-function.js
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-state-initializer.expect.md
│ │ │ │ │ │ │ ├── error.invalid-access-ref-in-state-initializer.js
│ │ │ │ │ │ │ ├── error.invalid-aliased-ref-in-callback-invoked-during-render-.expect.md
│ │ │ │ │ │ │ ├── error.invalid-aliased-ref-in-callback-invoked-during-render-.js
│ │ │ │ │ │ │ ├── error.invalid-array-push-frozen.expect.md
│ │ │ │ │ │ │ ├── error.invalid-array-push-frozen.js
│ │ │ │ │ │ │ ├── error.invalid-assign-current-inferred-ref-during-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-assign-current-inferred-ref-during-render.js
│ │ │ │ │ │ │ ├── error.invalid-assign-hook-to-local.expect.md
│ │ │ │ │ │ │ ├── error.invalid-assign-hook-to-local.js
│ │ │ │ │ │ │ ├── error.invalid-assing-to-ref-current-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-assing-to-ref-current-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-computed-store-to-frozen-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-computed-store-to-frozen-value.js
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-hook-import.expect.md
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-hook-import.js
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-react-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-react-hook.js
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-non-hook-imported-as-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-conditional-call-non-hook-imported-as-hook.js
│ │ │ │ │ │ │ ├── error.invalid-conditional-setState-in-useMemo.expect.md
│ │ │ │ │ │ │ ├── error.invalid-conditional-setState-in-useMemo.js
│ │ │ │ │ │ │ ├── error.invalid-delete-computed-property-of-frozen-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-delete-computed-property-of-frozen-value.js
│ │ │ │ │ │ │ ├── error.invalid-delete-property-of-frozen-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-delete-property-of-frozen-value.js
│ │ │ │ │ │ │ ├── error.invalid-derived-computation-in-effect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-derived-computation-in-effect.js
│ │ │ │ │ │ │ ├── error.invalid-destructure-assignment-to-global.expect.md
│ │ │ │ │ │ │ ├── error.invalid-destructure-assignment-to-global.js
│ │ │ │ │ │ │ ├── error.invalid-destructure-to-local-global-variables.expect.md
│ │ │ │ │ │ │ ├── error.invalid-destructure-to-local-global-variables.js
│ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-ref-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-ref-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-refs-in-render-transitive.expect.md
│ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-refs-in-render-transitive.js
│ │ │ │ │ │ │ ├── error.invalid-eval-unsupported.expect.md
│ │ │ │ │ │ │ ├── error.invalid-eval-unsupported.js
│ │ │ │ │ │ │ ├── error.invalid-function-expression-mutates-immutable-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-function-expression-mutates-immutable-value.js
│ │ │ │ │ │ │ ├── error.invalid-global-reassignment-indirect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-global-reassignment-indirect.js
│ │ │ │ │ │ │ ├── error.invalid-hoisting-setstate.expect.md
│ │ │ │ │ │ │ ├── error.invalid-hoisting-setstate.js
│ │ │ │ │ │ │ ├── error.invalid-hook-function-argument-mutates-local-variable.expect.md
│ │ │ │ │ │ │ ├── error.invalid-hook-function-argument-mutates-local-variable.js
│ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-jsx-captures-context-variable.expect.md
│ │ │ │ │ │ │ ├── error.invalid-jsx-captures-context-variable.js
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-function.expect.md
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-function.js
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook-return-property.expect.md
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook-return-property.js
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-after-aliased-freeze.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-after-aliased-freeze.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-after-freeze.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-after-freeze.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-context-in-callback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-context-in-callback.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-context.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-context.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-phi-return-prop.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-phi-return-prop.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-prop.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-prop.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-phi-which-could-be-frozen.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-phi-which-could-be-frozen.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-props-in-effect-fixpoint.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-props-in-effect-fixpoint.js
│ │ │ │ │ │ │ ├── error.invalid-mutate-props-via-for-of-iterator.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutate-props-via-for-of-iterator.js
│ │ │ │ │ │ │ ├── error.invalid-mutation-in-closure.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutation-in-closure.js
│ │ │ │ │ │ │ ├── error.invalid-mutation-of-possible-props-phi-indirect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-mutation-of-possible-props-phi-indirect.js
│ │ │ │ │ │ │ ├── error.invalid-nested-function-reassign-local-variable-in-effect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-nested-function-reassign-local-variable-in-effect.js
│ │ │ │ │ │ │ ├── error.invalid-non-imported-reanimated-shared-value-writes.expect.md
│ │ │ │ │ │ │ ├── error.invalid-non-imported-reanimated-shared-value-writes.jsx
│ │ │ │ │ │ │ ├── error.invalid-optional-member-expression-as-memo-dep-non-optional-in-body.expect.md
│ │ │ │ │ │ │ ├── error.invalid-optional-member-expression-as-memo-dep-non-optional-in-body.js
│ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-call-arg.expect.md
│ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-call-arg.js
│ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-prop.expect.md
│ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-prop.js
│ │ │ │ │ │ │ ├── error.invalid-pass-mutable-function-as-prop.expect.md
│ │ │ │ │ │ │ ├── error.invalid-pass-mutable-function-as-prop.js
│ │ │ │ │ │ │ ├── error.invalid-pass-ref-to-function.expect.md
│ │ │ │ │ │ │ ├── error.invalid-pass-ref-to-function.js
│ │ │ │ │ │ │ ├── error.invalid-prop-mutation-indirect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-prop-mutation-indirect.js
│ │ │ │ │ │ │ ├── error.invalid-property-store-to-frozen-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-property-store-to-frozen-value.js
│ │ │ │ │ │ │ ├── error.invalid-props-mutation-in-effect-indirect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-props-mutation-in-effect-indirect.js
│ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-destructure.expect.md
│ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-destructure.js
│ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-property-load.expect.md
│ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-property-load.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-const.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-const.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-in-hook-return-value.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-in-hook-return-value.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-async-callback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-async-callback.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-effect.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-effect.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-hook-argument.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-hook-argument.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.js
│ │ │ │ │ │ │ ├── error.invalid-reassign-variable-in-usememo.expect.md
│ │ │ │ │ │ │ ├── error.invalid-reassign-variable-in-usememo.js
│ │ │ │ │ │ │ ├── error.invalid-ref-access-render-unary.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ref-access-render-unary.js
│ │ │ │ │ │ │ ├── error.invalid-ref-in-callback-invoked-during-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ref-in-callback-invoked-during-render.js
│ │ │ │ │ │ │ ├── error.invalid-ref-initialization-unary-not.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ref-initialization-unary-not.js
│ │ │ │ │ │ │ ├── error.invalid-ref-value-as-props.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ref-value-as-props.js
│ │ │ │ │ │ │ ├── error.invalid-return-mutable-function-from-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-return-mutable-function-from-hook.js
│ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-during-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-during-render.js
│ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-nested-property-during-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-nested-property-during-render.js
│ │ │ │ │ │ │ ├── error.invalid-setState-in-render-unbound-state.expect.md
│ │ │ │ │ │ │ ├── error.invalid-setState-in-render-unbound-state.js
│ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo-indirect-useCallback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo-indirect-useCallback.js
│ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo.expect.md
│ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo.js
│ │ │ │ │ │ │ ├── error.invalid-setstate-unconditional-with-keyed-state.expect.md
│ │ │ │ │ │ │ ├── error.invalid-setstate-unconditional-with-keyed-state.js
│ │ │ │ │ │ │ ├── error.invalid-sketchy-code-use-forget.expect.md
│ │ │ │ │ │ │ ├── error.invalid-sketchy-code-use-forget.js
│ │ │ │ │ │ │ ├── error.invalid-ternary-with-hook-values.expect.md
│ │ │ │ │ │ │ ├── error.invalid-ternary-with-hook-values.js
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook-namespace.expect.md
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook-namespace.js
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook.js
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hooklike-module-default-not-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-type-provider-hooklike-module-default-not-hook.js
│ │ │ │ │ │ │ ├── error.invalid-type-provider-nonhook-name-typed-as-hook.expect.md
│ │ │ │ │ │ │ ├── error.invalid-type-provider-nonhook-name-typed-as-hook.js
│ │ │ │ │ │ │ ├── error.invalid-uncalled-function-capturing-mutable-values-memoizes-with-captures-values.expect.md
│ │ │ │ │ │ │ ├── error.invalid-uncalled-function-capturing-mutable-values-memoizes-with-captures-values.js
│ │ │ │ │ │ │ ├── error.invalid-unclosed-eslint-suppression.expect.md
│ │ │ │ │ │ │ ├── error.invalid-unclosed-eslint-suppression.js
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-hook-return-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-hook-return-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-prop-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-prop-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-use-ref-added-to-dep-without-type-info.expect.md
│ │ │ │ │ │ │ ├── error.invalid-use-ref-added-to-dep-without-type-info.js
│ │ │ │ │ │ │ ├── error.invalid-useMemo-async-callback.expect.md
│ │ │ │ │ │ │ ├── error.invalid-useMemo-async-callback.js
│ │ │ │ │ │ │ ├── error.invalid-useMemo-callback-args.expect.md
│ │ │ │ │ │ │ ├── error.invalid-useMemo-callback-args.js
│ │ │ │ │ │ │ ├── error.invalid-write-but-dont-read-ref-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-write-but-dont-read-ref-in-render.js
│ │ │ │ │ │ │ ├── error.invalid-write-ref-prop-in-render.expect.md
│ │ │ │ │ │ │ ├── error.invalid-write-ref-prop-in-render.js
│ │ │ │ │ │ │ ├── error.modify-state-2.expect.md
│ │ │ │ │ │ │ ├── error.modify-state-2.js
│ │ │ │ │ │ │ ├── error.modify-state.expect.md
│ │ │ │ │ │ │ ├── error.modify-state.js
│ │ │ │ │ │ │ ├── error.modify-useReducer-state.expect.md
│ │ │ │ │ │ │ ├── error.modify-useReducer-state.js
│ │ │ │ │ │ │ ├── error.mutable-range-shared-inner-outer-function.expect.md
│ │ │ │ │ │ │ ├── error.mutable-range-shared-inner-outer-function.js
│ │ │ │ │ │ │ ├── error.mutate-function-property.expect.md
│ │ │ │ │ │ │ ├── error.mutate-function-property.js
│ │ │ │ │ │ │ ├── error.mutate-global-increment-op-invalid-react.expect.md
│ │ │ │ │ │ │ ├── error.mutate-global-increment-op-invalid-react.js
│ │ │ │ │ │ │ ├── error.mutate-hook-argument.expect.md
│ │ │ │ │ │ │ ├── error.mutate-hook-argument.js
│ │ │ │ │ │ │ ├── error.mutate-property-from-global.expect.md
│ │ │ │ │ │ │ ├── error.mutate-property-from-global.js
│ │ │ │ │ │ │ ├── error.mutate-props.expect.md
│ │ │ │ │ │ │ ├── error.mutate-props.js
│ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.expect.md
│ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.js
│ │ │ │ │ │ │ ├── error.propertyload-hook.expect.md
│ │ │ │ │ │ │ ├── error.propertyload-hook.js
│ │ │ │ │ │ │ ├── error.reassign-global-fn-arg.expect.md
│ │ │ │ │ │ │ ├── error.reassign-global-fn-arg.js
│ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.expect.md
│ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.js
│ │ │ │ │ │ │ ├── error.reassignment-to-global.expect.md
│ │ │ │ │ │ │ ├── error.reassignment-to-global.js
│ │ │ │ │ │ │ ├── error.ref-initialization-arbitrary.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-arbitrary.js
│ │ │ │ │ │ │ ├── error.ref-initialization-call-2.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-call-2.js
│ │ │ │ │ │ │ ├── error.ref-initialization-call.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-call.js
│ │ │ │ │ │ │ ├── error.ref-initialization-linear.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-linear.js
│ │ │ │ │ │ │ ├── error.ref-initialization-nonif.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-nonif.js
│ │ │ │ │ │ │ ├── error.ref-initialization-other.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-other.js
│ │ │ │ │ │ │ ├── error.ref-initialization-post-access-2.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-post-access-2.js
│ │ │ │ │ │ │ ├── error.ref-initialization-post-access.expect.md
│ │ │ │ │ │ │ ├── error.ref-initialization-post-access.js
│ │ │ │ │ │ │ ├── error.ref-like-name-not-Ref.expect.md
│ │ │ │ │ │ │ ├── error.ref-like-name-not-Ref.js
│ │ │ │ │ │ │ ├── error.ref-like-name-not-a-ref.expect.md
│ │ │ │ │ │ │ ├── error.ref-like-name-not-a-ref.js
│ │ │ │ │ │ │ ├── error.ref-optional.expect.md
│ │ │ │ │ │ │ ├── error.ref-optional.js
│ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.expect.md
│ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.js
│ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-mutated-dep.expect.md
│ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-mutated-dep.js
│ │ │ │ │ │ │ ├── error.sketchy-code-rules-of-hooks.expect.md
│ │ │ │ │ │ │ ├── error.sketchy-code-rules-of-hooks.js
│ │ │ │ │ │ │ ├── error.store-property-in-global.expect.md
│ │ │ │ │ │ │ ├── error.store-property-in-global.js
│ │ │ │ │ │ │ ├── error.todo-allow-assigning-to-inferred-ref-prop-in-callback.expect.md
│ │ │ │ │ │ │ ├── error.todo-allow-assigning-to-inferred-ref-prop-in-callback.js
│ │ │ │ │ │ │ ├── error.todo-for-await-loops.expect.md
│ │ │ │ │ │ │ ├── error.todo-for-await-loops.js
│ │ │ │ │ │ │ ├── error.todo-for-in-loop-with-context-variable-iterator.expect.md
│ │ │ │ │ │ │ ├── error.todo-for-in-loop-with-context-variable-iterator.js
│ │ │ │ │ │ │ ├── error.todo-for-loop-with-context-variable-iterator.expect.md
│ │ │ │ │ │ │ ├── error.todo-for-loop-with-context-variable-iterator.js
│ │ │ │ │ │ │ ├── error.todo-for-of-loop-with-context-variable-iterator.expect.md
│ │ │ │ │ │ │ ├── error.todo-for-of-loop-with-context-variable-iterator.js
│ │ │ │ │ │ │ ├── error.todo-function-expression-references-later-variable-declaration.expect.md
│ │ │ │ │ │ │ ├── error.todo-function-expression-references-later-variable-declaration.js
│ │ │ │ │ │ │ ├── error.todo-functiondecl-hoisting.expect.md
│ │ │ │ │ │ │ ├── error.todo-functiondecl-hoisting.tsx
│ │ │ │ │ │ │ ├── error.todo-handle-update-context-identifiers.expect.md
│ │ │ │ │ │ │ ├── error.todo-handle-update-context-identifiers.js
│ │ │ │ │ │ │ ├── error.todo-hoist-function-decls.expect.md
│ │ │ │ │ │ │ ├── error.todo-hoist-function-decls.js
│ │ │ │ │ │ │ ├── error.todo-hoisted-function-in-unreachable-code.expect.md
│ │ │ │ │ │ │ ├── error.todo-hoisted-function-in-unreachable-code.js
│ │ │ │ │ │ │ ├── error.todo-hoisting-simple-var-declaration.expect.md
│ │ │ │ │ │ │ ├── error.todo-hoisting-simple-var-declaration.js
│ │ │ │ │ │ │ ├── error.todo-hook-call-spreads-mutable-iterator.expect.md
│ │ │ │ │ │ │ ├── error.todo-hook-call-spreads-mutable-iterator.js
│ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-catch-in-outer-try-with-finally.expect.md
│ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-catch-in-outer-try-with-finally.js
│ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-try-with-finally.expect.md
│ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-try-with-finally.js
│ │ │ │ │ │ │ ├── error.todo-kitchensink.expect.md
│ │ │ │ │ │ │ ├── error.todo-kitchensink.js
│ │ │ │ │ │ │ ├── error.todo-missing-source-locations.expect.md
│ │ │ │ │ │ │ ├── error.todo-missing-source-locations.js
│ │ │ │ │ │ │ ├── error.todo-nested-method-calls-lower-property-load-into-temporary.expect.md
│ │ │ │ │ │ │ ├── error.todo-nested-method-calls-lower-property-load-into-temporary.js
│ │ │ │ │ │ │ ├── error.todo-new-target-meta-property.expect.md
│ │ │ │ │ │ │ ├── error.todo-new-target-meta-property.js
│ │ │ │ │ │ │ ├── error.todo-object-expression-get-syntax.expect.md
│ │ │ │ │ │ │ ├── error.todo-object-expression-get-syntax.js
│ │ │ │ │ │ │ ├── error.todo-object-expression-set-syntax.expect.md
│ │ │ │ │ │ │ ├── error.todo-object-expression-set-syntax.js
│ │ │ │ │ │ │ ├── error.todo-preserve-memo-deps-mixed-optional-nonoptional-property-chain.expect.md
│ │ │ │ │ │ │ ├── error.todo-preserve-memo-deps-mixed-optional-nonoptional-property-chain.js
│ │ │ │ │ │ │ ├── error.todo-reassign-const.expect.md
│ │ │ │ │ │ │ ├── error.todo-reassign-const.js
│ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-capture-in-invoked-function-inferred-as-mutation.expect.md
│ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-capture-in-invoked-function-inferred-as-mutation.js
│ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.expect.md
│ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.js
│ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.expect.md
│ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.js
│ │ │ │ │ │ │ ├── error.todo-repro-unmemoized-callback-captured-in-context-variable.expect.md
│ │ │ │ │ │ │ ├── error.todo-repro-unmemoized-callback-captured-in-context-variable.tsx
│ │ │ │ │ │ │ ├── error.todo-useCallback-set-ref-nested-property-ref-modified-later-preserve-memoization.expect.md
│ │ │ │ │ │ │ ├── error.todo-useCallback-set-ref-nested-property-ref-modified-later-preserve-memoization.js
│ │ │ │ │ │ │ ├── error.todo-valid-functiondecl-hoisting.expect.md
│ │ │ │ │ │ │ ├── error.todo-valid-functiondecl-hoisting.tsx
│ │ │ │ │ │ │ ├── error.todo.try-catch-with-throw.expect.md
│ │ │ │ │ │ │ ├── error.todo.try-catch-with-throw.js
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop-break.expect.md
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop-break.js
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop.expect.md
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop.js
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-with-loop-throw.expect.md
│ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-with-loop-throw.js
│ │ │ │ │ │ │ ├── error.unconditional-set-state-lambda.expect.md
│ │ │ │ │ │ │ ├── error.unconditional-set-state-lambda.js
│ │ │ │ │ │ │ ├── error.unconditional-set-state-nested-function-expressions.expect.md
│ │ │ │ │ │ │ ├── error.unconditional-set-state-nested-function-expressions.js
│ │ │ │ │ │ │ ├── error.update-global-should-bailout.expect.md
│ │ │ │ │ │ │ ├── error.update-global-should-bailout.tsx
│ │ │ │ │ │ │ ├── error.useCallback-accesses-ref-mutated-later-via-function-preserve-memoization.expect.md
│ │ │ │ │ │ │ ├── error.useCallback-accesses-ref-mutated-later-via-function-preserve-memoization.js
│ │ │ │ │ │ │ ├── error.useCallback-set-ref-nested-property-dont-preserve-memoization.expect.md
│ │ │ │ │ │ │ ├── error.useCallback-set-ref-nested-property-dont-preserve-memoization.js
│ │ │ │ │ │ │ ├── error.useMemo-callback-generator.expect.md
│ │ │ │ │ │ │ ├── error.useMemo-callback-generator.js
│ │ │ │ │ │ │ ├── error.useMemo-non-literal-depslist.expect.md
│ │ │ │ │ │ │ ├── error.useMemo-non-literal-depslist.ts
│ │ │ │ │ │ │ ├── error.validate-blocklisted-imports.expect.md
│ │ │ │ │ │ │ ├── error.validate-blocklisted-imports.ts
│ │ │ │ │ │ │ ├── error.validate-mutate-ref-arg-in-render.expect.md
│ │ │ │ │ │ │ ├── error.validate-mutate-ref-arg-in-render.js
│ │ │ │ │ │ │ ├── error.validate-object-entries-mutation.expect.md
│ │ │ │ │ │ │ ├── error.validate-object-entries-mutation.js
│ │ │ │ │ │ │ ├── error.validate-object-values-mutation.expect.md
│ │ │ │ │ │ │ ├── error.validate-object-values-mutation.js
│ │ │ │ │ │ │ ├── escape-analysis-destructured-rest-element.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-destructured-rest-element.js
│ │ │ │ │ │ │ ├── escape-analysis-jsx-child.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-jsx-child.js
│ │ │ │ │ │ │ ├── escape-analysis-logical.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-logical.js
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-dependency.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-dependency.js
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-nested-dependency.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-nested-dependency.js
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-primitive-dependency.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-primitive-dependency.js
│ │ │ │ │ │ │ ├── escape-analysis-not-conditional-test.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-not-conditional-test.js
│ │ │ │ │ │ │ ├── escape-analysis-not-if-test.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-not-if-test.js
│ │ │ │ │ │ │ ├── escape-analysis-not-switch-case.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-not-switch-case.js
│ │ │ │ │ │ │ ├── escape-analysis-not-switch-test.expect.md
│ │ │ │ │ │ │ ├── escape-analysis-not-switch-test.js
│ │ │ │ │ │ │ ├── evaluation-order-mutate-call-after-dependency-load.expect.md
│ │ │ │ │ │ │ ├── evaluation-order-mutate-call-after-dependency-load.ts
│ │ │ │ │ │ │ ├── evaluation-order-mutate-store-after-dependency-load.expect.md
│ │ │ │ │ │ │ ├── evaluation-order-mutate-store-after-dependency-load.ts
│ │ │ │ │ │ │ ├── exhaustive-deps/
│ │ │ │ │ │ │ │ ├── compile-files-with-exhaustive-deps-violation-in-effects.expect.md
│ │ │ │ │ │ │ │ ├── compile-files-with-exhaustive-deps-violation-in-effects.js
│ │ │ │ │ │ │ │ ├── error.exhaustive-deps-effect-events.expect.md
│ │ │ │ │ │ │ │ ├── error.exhaustive-deps-effect-events.js
│ │ │ │ │ │ │ │ ├── error.invalid-dep-on-ref-current-value.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-dep-on-ref-current-value.js
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps-disallow-unused-stable-types.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps-disallow-unused-stable-types.js
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps.js
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-extra-only.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-extra-only.js
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-missing-only.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-missing-only.js
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps.js
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-inner-function.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-inner-function.js
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-unmemoized.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-unmemoized.js
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep.js
│ │ │ │ │ │ │ │ ├── error.sketchy-code-exhaustive-deps.expect.md
│ │ │ │ │ │ │ │ ├── error.sketchy-code-exhaustive-deps.js
│ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-constant-folded-values.expect.md
│ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-constant-folded-values.js
│ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-nonreactive-stable-types-as-extra-deps.expect.md
│ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-nonreactive-stable-types-as-extra-deps.js
│ │ │ │ │ │ │ │ ├── exhaustive-deps-effect-events.expect.md
│ │ │ │ │ │ │ │ ├── exhaustive-deps-effect-events.js
│ │ │ │ │ │ │ │ ├── exhaustive-deps.expect.md
│ │ │ │ │ │ │ │ └── exhaustive-deps.js
│ │ │ │ │ │ │ ├── existing-variables-with-c-name.expect.md
│ │ │ │ │ │ │ ├── existing-variables-with-c-name.js
│ │ │ │ │ │ │ ├── expression-with-assignment-dynamic.expect.md
│ │ │ │ │ │ │ ├── expression-with-assignment-dynamic.js
│ │ │ │ │ │ │ ├── expression-with-assignment.expect.md
│ │ │ │ │ │ │ ├── expression-with-assignment.js
│ │ │ │ │ │ │ ├── extend-scopes-if.expect.md
│ │ │ │ │ │ │ ├── extend-scopes-if.js
│ │ │ │ │ │ │ ├── fast-refresh-dont-refresh-const-changes-prod.expect.md
│ │ │ │ │ │ │ ├── fast-refresh-dont-refresh-const-changes-prod.js
│ │ │ │ │ │ │ ├── fast-refresh-refresh-on-const-changes-dev.expect.md
│ │ │ │ │ │ │ ├── fast-refresh-refresh-on-const-changes-dev.js
│ │ │ │ │ │ │ ├── fast-refresh-reloading.expect.md
│ │ │ │ │ │ │ ├── fast-refresh-reloading.js
│ │ │ │ │ │ │ ├── fault-tolerance/
│ │ │ │ │ │ │ │ ├── error.try-finally-and-mutation-of-props.expect.md
│ │ │ │ │ │ │ │ ├── error.try-finally-and-mutation-of-props.js
│ │ │ │ │ │ │ │ ├── error.try-finally-and-ref-access.expect.md
│ │ │ │ │ │ │ │ ├── error.try-finally-and-ref-access.js
│ │ │ │ │ │ │ │ ├── error.try-finally-ref-access-and-mutation.expect.md
│ │ │ │ │ │ │ │ ├── error.try-finally-ref-access-and-mutation.js
│ │ │ │ │ │ │ │ ├── error.var-declaration-and-mutation-of-props.expect.md
│ │ │ │ │ │ │ │ ├── error.var-declaration-and-mutation-of-props.js
│ │ │ │ │ │ │ │ ├── error.var-declaration-and-ref-access.expect.md
│ │ │ │ │ │ │ │ └── error.var-declaration-and-ref-access.js
│ │ │ │ │ │ │ ├── fbt/
│ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-function-calls.expect.md
│ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-function-calls.ts
│ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-mixed-call-tag.expect.md
│ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-mixed-call-tag.tsx
│ │ │ │ │ │ │ │ ├── error.todo-fbt-as-local.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-fbt-as-local.js
│ │ │ │ │ │ │ │ ├── error.todo-fbt-unknown-enum-value.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-fbt-unknown-enum-value.js
│ │ │ │ │ │ │ │ ├── error.todo-locally-require-fbt.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-locally-require-fbt.js
│ │ │ │ │ │ │ │ ├── error.todo-multiple-fbt-plural.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-multiple-fbt-plural.tsx
│ │ │ │ │ │ │ │ ├── fbs-params.expect.md
│ │ │ │ │ │ │ │ ├── fbs-params.js
│ │ │ │ │ │ │ │ ├── fbt-call-complex-param-value.expect.md
│ │ │ │ │ │ │ │ ├── fbt-call-complex-param-value.js
│ │ │ │ │ │ │ │ ├── fbt-call.expect.md
│ │ │ │ │ │ │ │ ├── fbt-call.js
│ │ │ │ │ │ │ │ ├── fbt-no-whitespace-btw-text-and-param.expect.md
│ │ │ │ │ │ │ │ ├── fbt-no-whitespace-btw-text-and-param.tsx
│ │ │ │ │ │ │ │ ├── fbt-param-with-leading-whitespace.expect.md
│ │ │ │ │ │ │ │ ├── fbt-param-with-leading-whitespace.js
│ │ │ │ │ │ │ │ ├── fbt-param-with-newline.expect.md
│ │ │ │ │ │ │ │ ├── fbt-param-with-newline.js
│ │ │ │ │ │ │ │ ├── fbt-param-with-quotes.expect.md
│ │ │ │ │ │ │ │ ├── fbt-param-with-quotes.js
│ │ │ │ │ │ │ │ ├── fbt-param-with-trailing-whitespace.expect.md
│ │ │ │ │ │ │ │ ├── fbt-param-with-trailing-whitespace.js
│ │ │ │ │ │ │ │ ├── fbt-param-with-unicode.expect.md
│ │ │ │ │ │ │ │ ├── fbt-param-with-unicode.js
│ │ │ │ │ │ │ │ ├── fbt-params-complex-param-value.expect.md
│ │ │ │ │ │ │ │ ├── fbt-params-complex-param-value.js
│ │ │ │ │ │ │ │ ├── fbt-params.expect.md
│ │ │ │ │ │ │ │ ├── fbt-params.js
│ │ │ │ │ │ │ │ ├── fbt-preserve-jsxtext.expect.md
│ │ │ │ │ │ │ │ ├── fbt-preserve-jsxtext.js
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-subtree.expect.md
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-subtree.tsx
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-two-subtrees.expect.md
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-two-subtrees.tsx
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace.expect.md
│ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace.tsx
│ │ │ │ │ │ │ │ ├── fbt-repro-invalid-mutable-range-destructured-prop.expect.md
│ │ │ │ │ │ │ │ ├── fbt-repro-invalid-mutable-range-destructured-prop.js
│ │ │ │ │ │ │ │ ├── fbt-single-space-btw-param-and-text.expect.md
│ │ │ │ │ │ │ │ ├── fbt-single-space-btw-param-and-text.tsx
│ │ │ │ │ │ │ │ ├── fbt-template-string-same-scope.expect.md
│ │ │ │ │ │ │ │ ├── fbt-template-string-same-scope.js
│ │ │ │ │ │ │ │ ├── fbt-to-string.expect.md
│ │ │ │ │ │ │ │ ├── fbt-to-string.js
│ │ │ │ │ │ │ │ ├── fbt-whitespace-around-param-value.expect.md
│ │ │ │ │ │ │ │ ├── fbt-whitespace-around-param-value.tsx
│ │ │ │ │ │ │ │ ├── fbt-whitespace-within-text.expect.md
│ │ │ │ │ │ │ │ ├── fbt-whitespace-within-text.tsx
│ │ │ │ │ │ │ │ ├── fbtparam-text-must-use-expression-container.expect.md
│ │ │ │ │ │ │ │ ├── fbtparam-text-must-use-expression-container.js
│ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-element-content.expect.md
│ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-element-content.js
│ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-fragment-value.expect.md
│ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-fragment-value.js
│ │ │ │ │ │ │ │ ├── lambda-with-fbt.expect.md
│ │ │ │ │ │ │ │ ├── lambda-with-fbt.js
│ │ │ │ │ │ │ │ ├── recursively-merge-scopes-jsx.expect.md
│ │ │ │ │ │ │ │ ├── recursively-merge-scopes-jsx.js
│ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt-jsx.expect.md
│ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt-jsx.js
│ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt.expect.md
│ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt.js
│ │ │ │ │ │ │ │ ├── repro-macro-property-not-handled.expect.md
│ │ │ │ │ │ │ │ ├── repro-macro-property-not-handled.tsx
│ │ │ │ │ │ │ │ ├── repro-separately-memoized-fbt-param.expect.md
│ │ │ │ │ │ │ │ └── repro-separately-memoized-fbt-param.js
│ │ │ │ │ │ │ ├── flag-enable-emit-hook-guards.expect.md
│ │ │ │ │ │ │ ├── flag-enable-emit-hook-guards.ts
│ │ │ │ │ │ │ ├── flatten-scopes-with-methodcall-hook.expect.md
│ │ │ │ │ │ │ ├── flatten-scopes-with-methodcall-hook.js
│ │ │ │ │ │ │ ├── flow-enum-inline.expect.md
│ │ │ │ │ │ │ ├── flow-enum-inline.js
│ │ │ │ │ │ │ ├── for-empty-update-with-continue.expect.md
│ │ │ │ │ │ │ ├── for-empty-update-with-continue.js
│ │ │ │ │ │ │ ├── for-empty-update.expect.md
│ │ │ │ │ │ │ ├── for-empty-update.js
│ │ │ │ │ │ │ ├── for-in-statement-body-always-returns.expect.md
│ │ │ │ │ │ │ ├── for-in-statement-body-always-returns.js
│ │ │ │ │ │ │ ├── for-in-statement-break.expect.md
│ │ │ │ │ │ │ ├── for-in-statement-break.js
│ │ │ │ │ │ │ ├── for-in-statement-continue.expect.md
│ │ │ │ │ │ │ ├── for-in-statement-continue.js
│ │ │ │ │ │ │ ├── for-in-statement-empty-body.expect.md
│ │ │ │ │ │ │ ├── for-in-statement-empty-body.js
│ │ │ │ │ │ │ ├── for-in-statement-type-inference.expect.md
│ │ │ │ │ │ │ ├── for-in-statement-type-inference.js
│ │ │ │ │ │ │ ├── for-in-statement.expect.md
│ │ │ │ │ │ │ ├── for-in-statement.js
│ │ │ │ │ │ │ ├── for-logical.expect.md
│ │ │ │ │ │ │ ├── for-logical.js
│ │ │ │ │ │ │ ├── for-loop-let-undefined-decl.expect.md
│ │ │ │ │ │ │ ├── for-loop-let-undefined-decl.js
│ │ │ │ │ │ │ ├── for-loop-with-value-block-initializer.expect.md
│ │ │ │ │ │ │ ├── for-loop-with-value-block-initializer.js
│ │ │ │ │ │ │ ├── for-multiple-variable-declarations-in-initializer.expect.md
│ │ │ │ │ │ │ ├── for-multiple-variable-declarations-in-initializer.js
│ │ │ │ │ │ │ ├── for-of-break.expect.md
│ │ │ │ │ │ │ ├── for-of-break.js
│ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later-value-initially-null.expect.md
│ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later-value-initially-null.js
│ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later.expect.md
│ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later.js
│ │ │ │ │ │ │ ├── for-of-conditional-break.expect.md
│ │ │ │ │ │ │ ├── for-of-conditional-break.js
│ │ │ │ │ │ │ ├── for-of-continue.expect.md
│ │ │ │ │ │ │ ├── for-of-continue.js
│ │ │ │ │ │ │ ├── for-of-destructure.expect.md
│ │ │ │ │ │ │ ├── for-of-destructure.js
│ │ │ │ │ │ │ ├── for-of-immutable-collection.expect.md
│ │ │ │ │ │ │ ├── for-of-immutable-collection.js
│ │ │ │ │ │ │ ├── for-of-iterator-of-immutable-collection.expect.md
│ │ │ │ │ │ │ ├── for-of-iterator-of-immutable-collection.js
│ │ │ │ │ │ │ ├── for-of-mutate-item-of-local-collection.expect.md
│ │ │ │ │ │ │ ├── for-of-mutate-item-of-local-collection.js
│ │ │ │ │ │ │ ├── for-of-mutate.expect.md
│ │ │ │ │ │ │ ├── for-of-mutate.tsx
│ │ │ │ │ │ │ ├── for-of-nonmutating-loop-local-collection.expect.md
│ │ │ │ │ │ │ ├── for-of-nonmutating-loop-local-collection.js
│ │ │ │ │ │ │ ├── for-of-simple.expect.md
│ │ │ │ │ │ │ ├── for-of-simple.js
│ │ │ │ │ │ │ ├── for-return.expect.md
│ │ │ │ │ │ │ ├── for-return.js
│ │ │ │ │ │ │ ├── for-with-assignment-as-update.expect.md
│ │ │ │ │ │ │ ├── for-with-assignment-as-update.js
│ │ │ │ │ │ │ ├── frozen-after-alias.expect.md
│ │ │ │ │ │ │ ├── frozen-after-alias.js
│ │ │ │ │ │ │ ├── function-declaration-reassign.expect.md
│ │ │ │ │ │ │ ├── function-declaration-reassign.js
│ │ │ │ │ │ │ ├── function-declaration-redeclare.expect.md
│ │ │ │ │ │ │ ├── function-declaration-redeclare.js
│ │ │ │ │ │ │ ├── function-declaration-simple.expect.md
│ │ │ │ │ │ │ ├── function-declaration-simple.js
│ │ │ │ │ │ │ ├── function-expr-directive.expect.md
│ │ │ │ │ │ │ ├── function-expr-directive.js
│ │ │ │ │ │ │ ├── function-expression-captures-value-later-frozen-jsx.expect.md
│ │ │ │ │ │ │ ├── function-expression-captures-value-later-frozen-jsx.js
│ │ │ │ │ │ │ ├── function-expression-maybe-mutates-hook-return-value.expect.md
│ │ │ │ │ │ │ ├── function-expression-maybe-mutates-hook-return-value.js
│ │ │ │ │ │ │ ├── function-expression-prototype-call-mutating.expect.md
│ │ │ │ │ │ │ ├── function-expression-prototype-call-mutating.js
│ │ │ │ │ │ │ ├── function-expression-prototype-call.expect.md
│ │ │ │ │ │ │ ├── function-expression-prototype-call.js
│ │ │ │ │ │ │ ├── function-expression-with-store-to-parameter.expect.md
│ │ │ │ │ │ │ ├── function-expression-with-store-to-parameter.js
│ │ │ │ │ │ │ ├── function-param-assignment-pattern.expect.md
│ │ │ │ │ │ │ ├── function-param-assignment-pattern.js
│ │ │ │ │ │ │ ├── gating/
│ │ │ │ │ │ │ │ ├── arrow-function-expr-gating-test.expect.md
│ │ │ │ │ │ │ │ ├── arrow-function-expr-gating-test.js
│ │ │ │ │ │ │ │ ├── codegen-instrument-forget-gating-test.expect.md
│ │ │ │ │ │ │ │ ├── codegen-instrument-forget-gating-test.js
│ │ │ │ │ │ │ │ ├── component-syntax-ref-gating.flow.expect.md
│ │ │ │ │ │ │ │ ├── component-syntax-ref-gating.flow.js
│ │ │ │ │ │ │ │ ├── conflicting-gating-fn.expect.md
│ │ │ │ │ │ │ │ ├── conflicting-gating-fn.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-annotation.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-annotation.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-bailout-nopanic.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-bailout-nopanic.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-disabled.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-disabled.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-enabled.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-enabled.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-identifier-nopanic.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-identifier-nopanic.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-multiple.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-multiple.js
│ │ │ │ │ │ │ │ ├── dynamic-gating-noemit.expect.md
│ │ │ │ │ │ │ │ ├── dynamic-gating-noemit.js
│ │ │ │ │ │ │ │ ├── error.dynamic-gating-invalid-identifier.expect.md
│ │ │ │ │ │ │ │ ├── error.dynamic-gating-invalid-identifier.js
│ │ │ │ │ │ │ │ ├── gating-access-function-name-in-component.expect.md
│ │ │ │ │ │ │ │ ├── gating-access-function-name-in-component.js
│ │ │ │ │ │ │ │ ├── gating-nonreferenced-identifier-collision.expect.md
│ │ │ │ │ │ │ │ ├── gating-nonreferenced-identifier-collision.js
│ │ │ │ │ │ │ │ ├── gating-preserves-function-properties.expect.md
│ │ │ │ │ │ │ │ ├── gating-preserves-function-properties.tsx
│ │ │ │ │ │ │ │ ├── gating-test-export-default-function.expect.md
│ │ │ │ │ │ │ │ ├── gating-test-export-default-function.js
│ │ │ │ │ │ │ │ ├── gating-test-export-function-and-default.expect.md
│ │ │ │ │ │ │ │ ├── gating-test-export-function-and-default.js
│ │ │ │ │ │ │ │ ├── gating-test-export-function.expect.md
│ │ │ │ │ │ │ │ ├── gating-test-export-function.js
│ │ │ │ │ │ │ │ ├── gating-test.expect.md
│ │ │ │ │ │ │ │ ├── gating-test.js
│ │ │ │ │ │ │ │ ├── gating-use-before-decl-ref.expect.md
│ │ │ │ │ │ │ │ ├── gating-use-before-decl-ref.js
│ │ │ │ │ │ │ │ ├── gating-use-before-decl.expect.md
│ │ │ │ │ │ │ │ ├── gating-use-before-decl.js
│ │ │ │ │ │ │ │ ├── gating-with-hoisted-type-reference.flow.expect.md
│ │ │ │ │ │ │ │ ├── gating-with-hoisted-type-reference.flow.js
│ │ │ │ │ │ │ │ ├── infer-function-expression-React-memo-gating.expect.md
│ │ │ │ │ │ │ │ ├── infer-function-expression-React-memo-gating.js
│ │ │ │ │ │ │ │ ├── invalid-fnexpr-reference.expect.md
│ │ │ │ │ │ │ │ ├── invalid-fnexpr-reference.js
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-default-gating-test.expect.md
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-default-gating-test.js
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-gating-test.expect.md
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-gating-test.js
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-gating-test.expect.md
│ │ │ │ │ │ │ │ ├── multi-arrow-expr-gating-test.js
│ │ │ │ │ │ │ │ ├── reassigned-fnexpr-variable.expect.md
│ │ │ │ │ │ │ │ ├── reassigned-fnexpr-variable.js
│ │ │ │ │ │ │ │ ├── repro-no-gating-import-without-compiled-functions.expect.md
│ │ │ │ │ │ │ │ └── repro-no-gating-import-without-compiled-functions.js
│ │ │ │ │ │ │ ├── global-jsx-tag-lowered-between-mutations.expect.md
│ │ │ │ │ │ │ ├── global-jsx-tag-lowered-between-mutations.js
│ │ │ │ │ │ │ ├── global-types/
│ │ │ │ │ │ │ │ ├── call-spread-argument-set.expect.md
│ │ │ │ │ │ │ │ ├── call-spread-argument-set.ts
│ │ │ │ │ │ │ │ ├── map-constructor.expect.md
│ │ │ │ │ │ │ │ ├── map-constructor.ts
│ │ │ │ │ │ │ │ ├── repro-array-filter-capture-mutate-bug.expect.md
│ │ │ │ │ │ │ │ ├── repro-array-filter-capture-mutate-bug.tsx
│ │ │ │ │ │ │ │ ├── repro-array-filter-known-nonmutate-Boolean.expect.md
│ │ │ │ │ │ │ │ ├── repro-array-filter-known-nonmutate-Boolean.tsx
│ │ │ │ │ │ │ │ ├── repro-array-map-capture-mutate-bug.expect.md
│ │ │ │ │ │ │ │ ├── repro-array-map-capture-mutate-bug.tsx
│ │ │ │ │ │ │ │ ├── repro-array-map-known-mutate-shape.expect.md
│ │ │ │ │ │ │ │ ├── repro-array-map-known-mutate-shape.tsx
│ │ │ │ │ │ │ │ ├── set-add-mutate.expect.md
│ │ │ │ │ │ │ │ ├── set-add-mutate.ts
│ │ │ │ │ │ │ │ ├── set-constructor-arg.expect.md
│ │ │ │ │ │ │ │ ├── set-constructor-arg.ts
│ │ │ │ │ │ │ │ ├── set-constructor.expect.md
│ │ │ │ │ │ │ │ ├── set-constructor.ts
│ │ │ │ │ │ │ │ ├── set-copy-constructor-mutate.expect.md
│ │ │ │ │ │ │ │ ├── set-copy-constructor-mutate.ts
│ │ │ │ │ │ │ │ ├── set-for-of-iterate-values.expect.md
│ │ │ │ │ │ │ │ ├── set-for-of-iterate-values.ts
│ │ │ │ │ │ │ │ ├── set-foreach-mutate.expect.md
│ │ │ │ │ │ │ │ └── set-foreach-mutate.tsx
│ │ │ │ │ │ │ ├── globals-Boolean.expect.md
│ │ │ │ │ │ │ ├── globals-Boolean.js
│ │ │ │ │ │ │ ├── globals-Number.expect.md
│ │ │ │ │ │ │ ├── globals-Number.js
│ │ │ │ │ │ │ ├── globals-String.expect.md
│ │ │ │ │ │ │ ├── globals-String.js
│ │ │ │ │ │ │ ├── globals-dont-resolve-local-useState.expect.md
│ │ │ │ │ │ │ ├── globals-dont-resolve-local-useState.js
│ │ │ │ │ │ │ ├── hoist-destruct.expect.md
│ │ │ │ │ │ │ ├── hoist-destruct.js
│ │ │ │ │ │ │ ├── hoisted-context-variable-in-outlined-fn.expect.md
│ │ │ │ │ │ │ ├── hoisted-context-variable-in-outlined-fn.js
│ │ │ │ │ │ │ ├── hoisted-declaration-with-scope.expect.md
│ │ │ │ │ │ │ ├── hoisted-declaration-with-scope.tsx
│ │ │ │ │ │ │ ├── hoisted-function-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisted-function-declaration.js
│ │ │ │ │ │ │ ├── hoisting-computed-member-expression.expect.md
│ │ │ │ │ │ │ ├── hoisting-computed-member-expression.js
│ │ │ │ │ │ │ ├── hoisting-functionexpr-conditional-dep.expect.md
│ │ │ │ │ │ │ ├── hoisting-functionexpr-conditional-dep.tsx
│ │ │ │ │ │ │ ├── hoisting-invalid-tdz-let.expect.md
│ │ │ │ │ │ │ ├── hoisting-invalid-tdz-let.js
│ │ │ │ │ │ │ ├── hoisting-let-declaration-without-initialization.expect.md
│ │ │ │ │ │ │ ├── hoisting-let-declaration-without-initialization.js
│ │ │ │ │ │ │ ├── hoisting-member-expression.expect.md
│ │ │ │ │ │ │ ├── hoisting-member-expression.js
│ │ │ │ │ │ │ ├── hoisting-nested-block-statements.expect.md
│ │ │ │ │ │ │ ├── hoisting-nested-block-statements.js
│ │ │ │ │ │ │ ├── hoisting-nested-const-declaration-2.expect.md
│ │ │ │ │ │ │ ├── hoisting-nested-const-declaration-2.js
│ │ │ │ │ │ │ ├── hoisting-nested-const-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-nested-const-declaration.js
│ │ │ │ │ │ │ ├── hoisting-nested-let-declaration-2.expect.md
│ │ │ │ │ │ │ ├── hoisting-nested-let-declaration-2.js
│ │ │ │ │ │ │ ├── hoisting-nested-let-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-nested-let-declaration.js
│ │ │ │ │ │ │ ├── hoisting-object-method.expect.md
│ │ │ │ │ │ │ ├── hoisting-object-method.js
│ │ │ │ │ │ │ ├── hoisting-reassigned-let-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-reassigned-let-declaration.js
│ │ │ │ │ │ │ ├── hoisting-reassigned-twice-let-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-reassigned-twice-let-declaration.js
│ │ │ │ │ │ │ ├── hoisting-recursive-call-within-lambda.expect.md
│ │ │ │ │ │ │ ├── hoisting-recursive-call-within-lambda.js
│ │ │ │ │ │ │ ├── hoisting-recursive-call.expect.md
│ │ │ │ │ │ │ ├── hoisting-recursive-call.ts
│ │ │ │ │ │ │ ├── hoisting-repro-variable-used-in-assignment.expect.md
│ │ │ │ │ │ │ ├── hoisting-repro-variable-used-in-assignment.js
│ │ │ │ │ │ │ ├── hoisting-setstate-captured-indirectly-jsx.expect.md
│ │ │ │ │ │ │ ├── hoisting-setstate-captured-indirectly-jsx.js
│ │ │ │ │ │ │ ├── hoisting-simple-const-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-simple-const-declaration.js
│ │ │ │ │ │ │ ├── hoisting-simple-function-expression.expect.md
│ │ │ │ │ │ │ ├── hoisting-simple-function-expression.js
│ │ │ │ │ │ │ ├── hoisting-simple-let-declaration.expect.md
│ │ │ │ │ │ │ ├── hoisting-simple-let-declaration.js
│ │ │ │ │ │ │ ├── hoisting-within-lambda.expect.md
│ │ │ │ │ │ │ ├── hoisting-within-lambda.js
│ │ │ │ │ │ │ ├── holey-array-expr.expect.md
│ │ │ │ │ │ │ ├── holey-array-expr.js
│ │ │ │ │ │ │ ├── holey-array-pattern-dce-2.expect.md
│ │ │ │ │ │ │ ├── holey-array-pattern-dce-2.js
│ │ │ │ │ │ │ ├── holey-array-pattern-dce.expect.md
│ │ │ │ │ │ │ ├── holey-array-pattern-dce.js
│ │ │ │ │ │ │ ├── hook-call-freezes-captured-memberexpr.expect.md
│ │ │ │ │ │ │ ├── hook-call-freezes-captured-memberexpr.tsx
│ │ │ │ │ │ │ ├── hook-call.expect.md
│ │ │ │ │ │ │ ├── hook-call.js
│ │ │ │ │ │ │ ├── hook-declaration-basic.flow.expect.md
│ │ │ │ │ │ │ ├── hook-declaration-basic.flow.js
│ │ │ │ │ │ │ ├── hook-inside-logical-expression.expect.md
│ │ │ │ │ │ │ ├── hook-inside-logical-expression.js
│ │ │ │ │ │ │ ├── hook-noAlias.expect.md
│ │ │ │ │ │ │ ├── hook-noAlias.js
│ │ │ │ │ │ │ ├── hook-property-load-local.expect.md
│ │ │ │ │ │ │ ├── hook-property-load-local.js
│ │ │ │ │ │ │ ├── hook-ref-callback.expect.md
│ │ │ │ │ │ │ ├── hook-ref-callback.js
│ │ │ │ │ │ │ ├── hooks-freeze-arguments.expect.md
│ │ │ │ │ │ │ ├── hooks-freeze-arguments.js
│ │ │ │ │ │ │ ├── hooks-freeze-possibly-mutable-arguments.expect.md
│ │ │ │ │ │ │ ├── hooks-freeze-possibly-mutable-arguments.js
│ │ │ │ │ │ │ ├── hooks-with-React-namespace.expect.md
│ │ │ │ │ │ │ ├── hooks-with-React-namespace.js
│ │ │ │ │ │ │ ├── idx-method-no-outlining-wildcard.expect.md
│ │ │ │ │ │ │ ├── idx-method-no-outlining-wildcard.js
│ │ │ │ │ │ │ ├── idx-method-no-outlining.expect.md
│ │ │ │ │ │ │ ├── idx-method-no-outlining.js
│ │ │ │ │ │ │ ├── idx-no-outlining.expect.md
│ │ │ │ │ │ │ ├── idx-no-outlining.js
│ │ │ │ │ │ │ ├── ignore-inner-interface-types.expect.md
│ │ │ │ │ │ │ ├── ignore-inner-interface-types.ts
│ │ │ │ │ │ │ ├── ignore-use-no-forget.expect.md
│ │ │ │ │ │ │ ├── ignore-use-no-forget.js
│ │ │ │ │ │ │ ├── iife-inline-ternary.expect.md
│ │ │ │ │ │ │ ├── iife-inline-ternary.js
│ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md
│ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js
│ │ │ │ │ │ │ ├── iife-return-modified-later.expect.md
│ │ │ │ │ │ │ ├── iife-return-modified-later.js
│ │ │ │ │ │ │ ├── immutable-hooks.expect.md
│ │ │ │ │ │ │ ├── immutable-hooks.js
│ │ │ │ │ │ │ ├── import-as-local.expect.md
│ │ │ │ │ │ │ ├── import-as-local.tsx
│ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-class.expect.md
│ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-class.js
│ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-lambda.expect.md
│ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-lambda.js
│ │ │ │ │ │ │ ├── incompatible-destructuring-kinds.expect.md
│ │ │ │ │ │ │ ├── incompatible-destructuring-kinds.js
│ │ │ │ │ │ │ ├── independent-across-if.expect.md
│ │ │ │ │ │ │ ├── independent-across-if.js
│ │ │ │ │ │ │ ├── independent.expect.md
│ │ │ │ │ │ │ ├── independent.js
│ │ │ │ │ │ │ ├── independently-memoize-object-property.expect.md
│ │ │ │ │ │ │ ├── independently-memoize-object-property.js
│ │ │ │ │ │ │ ├── infer-compile-hooks-with-multiple-params.expect.md
│ │ │ │ │ │ │ ├── infer-compile-hooks-with-multiple-params.js
│ │ │ │ │ │ │ ├── infer-computed-delete.expect.md
│ │ │ │ │ │ │ ├── infer-computed-delete.js
│ │ │ │ │ │ │ ├── infer-dont-compile-components-with-multiple-params.expect.md
│ │ │ │ │ │ │ ├── infer-dont-compile-components-with-multiple-params.js
│ │ │ │ │ │ │ ├── infer-function-React-memo.expect.md
│ │ │ │ │ │ │ ├── infer-function-React-memo.js
│ │ │ │ │ │ │ ├── infer-function-assignment.expect.md
│ │ │ │ │ │ │ ├── infer-function-assignment.js
│ │ │ │ │ │ │ ├── infer-function-expression-component.expect.md
│ │ │ │ │ │ │ ├── infer-function-expression-component.js
│ │ │ │ │ │ │ ├── infer-function-forwardRef.expect.md
│ │ │ │ │ │ │ ├── infer-function-forwardRef.js
│ │ │ │ │ │ │ ├── infer-functions-component-with-hook-call.expect.md
│ │ │ │ │ │ │ ├── infer-functions-component-with-hook-call.js
│ │ │ │ │ │ │ ├── infer-functions-component-with-jsx.expect.md
│ │ │ │ │ │ │ ├── infer-functions-component-with-jsx.js
│ │ │ │ │ │ │ ├── infer-functions-component-with-ref-arg.expect.md
│ │ │ │ │ │ │ ├── infer-functions-component-with-ref-arg.js
│ │ │ │ │ │ │ ├── infer-functions-hook-with-hook-call.expect.md
│ │ │ │ │ │ │ ├── infer-functions-hook-with-hook-call.js
│ │ │ │ │ │ │ ├── infer-functions-hook-with-jsx.expect.md
│ │ │ │ │ │ │ ├── infer-functions-hook-with-jsx.js
│ │ │ │ │ │ │ ├── infer-global-object.expect.md
│ │ │ │ │ │ │ ├── infer-global-object.js
│ │ │ │ │ │ │ ├── infer-nested-object-method.expect.md
│ │ │ │ │ │ │ ├── infer-nested-object-method.jsx
│ │ │ │ │ │ │ ├── infer-no-component-annot.expect.md
│ │ │ │ │ │ │ ├── infer-no-component-annot.ts
│ │ │ │ │ │ │ ├── infer-no-component-nested-jsx.expect.md
│ │ │ │ │ │ │ ├── infer-no-component-nested-jsx.js
│ │ │ │ │ │ │ ├── infer-no-component-obj-return.expect.md
│ │ │ │ │ │ │ ├── infer-no-component-obj-return.js
│ │ │ │ │ │ │ ├── infer-phi-primitive.expect.md
│ │ │ │ │ │ │ ├── infer-phi-primitive.js
│ │ │ │ │ │ │ ├── infer-property-delete.expect.md
│ │ │ │ │ │ │ ├── infer-property-delete.js
│ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.expect.md
│ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.ts
│ │ │ │ │ │ │ ├── infer-skip-components-without-hooks-or-jsx.expect.md
│ │ │ │ │ │ │ ├── infer-skip-components-without-hooks-or-jsx.js
│ │ │ │ │ │ │ ├── infer-types-through-type-cast.flow.expect.md
│ │ │ │ │ │ │ ├── infer-types-through-type-cast.flow.js
│ │ │ │ │ │ │ ├── inner-function/
│ │ │ │ │ │ │ │ └── nullable-objects/
│ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.expect.md
│ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.js
│ │ │ │ │ │ │ │ ├── array-map-named-callback.expect.md
│ │ │ │ │ │ │ │ ├── array-map-named-callback.js
│ │ │ │ │ │ │ │ ├── array-map-named-chained-callbacks.expect.md
│ │ │ │ │ │ │ │ ├── array-map-named-chained-callbacks.js
│ │ │ │ │ │ │ │ ├── array-map-simple.expect.md
│ │ │ │ │ │ │ │ ├── array-map-simple.js
│ │ │ │ │ │ │ │ ├── assume-invoked/
│ │ │ │ │ │ │ │ │ ├── conditional-call-chain.expect.md
│ │ │ │ │ │ │ │ │ ├── conditional-call-chain.tsx
│ │ │ │ │ │ │ │ │ ├── conditional-call.expect.md
│ │ │ │ │ │ │ │ │ ├── conditional-call.ts
│ │ │ │ │ │ │ │ │ ├── conditionally-return-fn.expect.md
│ │ │ │ │ │ │ │ │ ├── conditionally-return-fn.ts
│ │ │ │ │ │ │ │ │ ├── direct-call.expect.md
│ │ │ │ │ │ │ │ │ ├── direct-call.ts
│ │ │ │ │ │ │ │ │ ├── function-with-conditional-callsite-in-another-function.expect.md
│ │ │ │ │ │ │ │ │ ├── function-with-conditional-callsite-in-another-function.ts
│ │ │ │ │ │ │ │ │ ├── hook-call.expect.md
│ │ │ │ │ │ │ │ │ ├── hook-call.ts
│ │ │ │ │ │ │ │ │ ├── jsx-and-passed.expect.md
│ │ │ │ │ │ │ │ │ ├── jsx-and-passed.ts
│ │ │ │ │ │ │ │ │ ├── jsx-function.expect.md
│ │ │ │ │ │ │ │ │ ├── jsx-function.tsx
│ │ │ │ │ │ │ │ │ ├── return-function.expect.md
│ │ │ │ │ │ │ │ │ ├── return-function.ts
│ │ │ │ │ │ │ │ │ ├── use-memo-returned.expect.md
│ │ │ │ │ │ │ │ │ └── use-memo-returned.ts
│ │ │ │ │ │ │ │ ├── bug-invalid-array-map-manual.expect.md
│ │ │ │ │ │ │ │ ├── bug-invalid-array-map-manual.js
│ │ │ │ │ │ │ │ ├── return-object-of-functions.expect.md
│ │ │ │ │ │ │ │ └── return-object-of-functions.js
│ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-dynamic.expect.md
│ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-dynamic.js
│ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-static.expect.md
│ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-static.js
│ │ │ │ │ │ │ ├── interdependent-across-if.expect.md
│ │ │ │ │ │ │ ├── interdependent-across-if.js
│ │ │ │ │ │ │ ├── interdependent.expect.md
│ │ │ │ │ │ │ ├── interdependent.js
│ │ │ │ │ │ │ ├── invalid-jsx-in-catch-in-outer-try-with-catch.expect.md
│ │ │ │ │ │ │ ├── invalid-jsx-in-catch-in-outer-try-with-catch.js
│ │ │ │ │ │ │ ├── invalid-jsx-in-try-with-catch.expect.md
│ │ │ │ │ │ │ ├── invalid-jsx-in-try-with-catch.js
│ │ │ │ │ │ │ ├── invalid-jsx-lowercase-localvar.expect.md
│ │ │ │ │ │ │ ├── invalid-jsx-lowercase-localvar.jsx
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-derived-event.expect.md
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-derived-event.js
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-force-update.expect.md
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-force-update.js
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-non-local-derived.expect.md
│ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-non-local-derived.js
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-namespace.expect.md
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-namespace.js
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-transitive.expect.md
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-transitive.js
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-via-useEffectEvent.expect.md
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-via-useEffectEvent.js
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect.expect.md
│ │ │ │ │ │ │ ├── invalid-setState-in-useEffect.js
│ │ │ │ │ │ │ ├── invalid-unused-usememo.expect.md
│ │ │ │ │ │ │ ├── invalid-unused-usememo.js
│ │ │ │ │ │ │ ├── invalid-useMemo-no-return-value.expect.md
│ │ │ │ │ │ │ ├── invalid-useMemo-no-return-value.js
│ │ │ │ │ │ │ ├── invalid-useMemo-return-empty.expect.md
│ │ │ │ │ │ │ ├── invalid-useMemo-return-empty.js
│ │ │ │ │ │ │ ├── inverted-if-else.expect.md
│ │ │ │ │ │ │ ├── inverted-if-else.js
│ │ │ │ │ │ │ ├── inverted-if.expect.md
│ │ │ │ │ │ │ ├── inverted-if.js
│ │ │ │ │ │ │ ├── issue852.expect.md
│ │ │ │ │ │ │ ├── issue852.js
│ │ │ │ │ │ │ ├── issue933-disjoint-set-infinite-loop.expect.md
│ │ │ │ │ │ │ ├── issue933-disjoint-set-infinite-loop.js
│ │ │ │ │ │ │ ├── jsx-attribute-default-to-true.expect.md
│ │ │ │ │ │ │ ├── jsx-attribute-default-to-true.tsx
│ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-element-value.expect.md
│ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-element-value.js
│ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-fragment-value.flow.expect.md
│ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-fragment-value.flow.js
│ │ │ │ │ │ │ ├── jsx-bracket-in-text.expect.md
│ │ │ │ │ │ │ ├── jsx-bracket-in-text.jsx
│ │ │ │ │ │ │ ├── jsx-empty-expression.expect.md
│ │ │ │ │ │ │ ├── jsx-empty-expression.js
│ │ │ │ │ │ │ ├── jsx-fragment.expect.md
│ │ │ │ │ │ │ ├── jsx-fragment.js
│ │ │ │ │ │ │ ├── jsx-freeze.expect.md
│ │ │ │ │ │ │ ├── jsx-freeze.js
│ │ │ │ │ │ │ ├── jsx-html-entity.expect.md
│ │ │ │ │ │ │ ├── jsx-html-entity.js
│ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag-conditional.expect.md
│ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag-conditional.js
│ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag.expect.md
│ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag.js
│ │ │ │ │ │ │ ├── jsx-local-tag-in-lambda.expect.md
│ │ │ │ │ │ │ ├── jsx-local-tag-in-lambda.js
│ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr-in-lambda.expect.md
│ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr-in-lambda.jsx
│ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr.expect.md
│ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr.jsx
│ │ │ │ │ │ │ ├── jsx-lowercase-memberexpr.expect.md
│ │ │ │ │ │ │ ├── jsx-lowercase-memberexpr.jsx
│ │ │ │ │ │ │ ├── jsx-member-expression-tag-grouping.expect.md
│ │ │ │ │ │ │ ├── jsx-member-expression-tag-grouping.js
│ │ │ │ │ │ │ ├── jsx-member-expression.expect.md
│ │ │ │ │ │ │ ├── jsx-member-expression.js
│ │ │ │ │ │ │ ├── jsx-memberexpr-tag-in-lambda.expect.md
│ │ │ │ │ │ │ ├── jsx-memberexpr-tag-in-lambda.js
│ │ │ │ │ │ │ ├── jsx-namespaced-name.expect.md
│ │ │ │ │ │ │ ├── jsx-namespaced-name.js
│ │ │ │ │ │ │ ├── jsx-outlining-child-stored-in-id.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-child-stored-in-id.js
│ │ │ │ │ │ │ ├── jsx-outlining-dup-key-diff-value.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-dup-key-diff-value.js
│ │ │ │ │ │ │ ├── jsx-outlining-dupe-attr-after-rename.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-dupe-attr-after-rename.js
│ │ │ │ │ │ │ ├── jsx-outlining-dupe-key-dupe-component.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-dupe-key-dupe-component.js
│ │ │ │ │ │ │ ├── jsx-outlining-duplicate-prop.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-duplicate-prop.js
│ │ │ │ │ │ │ ├── jsx-outlining-jsx-stored-in-id.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-jsx-stored-in-id.js
│ │ │ │ │ │ │ ├── jsx-outlining-separate-nested.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-separate-nested.js
│ │ │ │ │ │ │ ├── jsx-outlining-simple.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-simple.js
│ │ │ │ │ │ │ ├── jsx-outlining-with-non-jsx-children.expect.md
│ │ │ │ │ │ │ ├── jsx-outlining-with-non-jsx-children.js
│ │ │ │ │ │ │ ├── jsx-preserve-escape-character.expect.md
│ │ │ │ │ │ │ ├── jsx-preserve-escape-character.js
│ │ │ │ │ │ │ ├── jsx-preserve-whitespace.expect.md
│ │ │ │ │ │ │ ├── jsx-preserve-whitespace.tsx
│ │ │ │ │ │ │ ├── jsx-reactive-local-variable-member-expr.expect.md
│ │ │ │ │ │ │ ├── jsx-reactive-local-variable-member-expr.tsx
│ │ │ │ │ │ │ ├── jsx-spread.expect.md
│ │ │ │ │ │ │ ├── jsx-spread.js
│ │ │ │ │ │ │ ├── jsx-string-attribute-expression-container.expect.md
│ │ │ │ │ │ │ ├── jsx-string-attribute-expression-container.js
│ │ │ │ │ │ │ ├── jsx-string-attribute-non-ascii.expect.md
│ │ │ │ │ │ │ ├── jsx-string-attribute-non-ascii.js
│ │ │ │ │ │ │ ├── jsx-tag-evaluation-order-non-global.expect.md
│ │ │ │ │ │ │ ├── jsx-tag-evaluation-order-non-global.js
│ │ │ │ │ │ │ ├── jsx-tag-evaluation-order.expect.md
│ │ │ │ │ │ │ ├── jsx-tag-evaluation-order.tsx
│ │ │ │ │ │ │ ├── jsx-ternary-local-variable.expect.md
│ │ │ │ │ │ │ ├── jsx-ternary-local-variable.tsx
│ │ │ │ │ │ │ ├── labeled-break-within-label-loop.expect.md
│ │ │ │ │ │ │ ├── labeled-break-within-label-loop.ts
│ │ │ │ │ │ │ ├── labeled-break-within-label-switch.expect.md
│ │ │ │ │ │ │ ├── labeled-break-within-label-switch.ts
│ │ │ │ │ │ │ ├── lambda-array-access-member-expr-captured.expect.md
│ │ │ │ │ │ │ ├── lambda-array-access-member-expr-captured.ts
│ │ │ │ │ │ │ ├── lambda-array-access-member-expr-param.expect.md
│ │ │ │ │ │ │ ├── lambda-array-access-member-expr-param.ts
│ │ │ │ │ │ │ ├── lambda-capture-returned-alias.expect.md
│ │ │ │ │ │ │ ├── lambda-capture-returned-alias.js
│ │ │ │ │ │ │ ├── lambda-mutate-shadowed-object.expect.md
│ │ │ │ │ │ │ ├── lambda-mutate-shadowed-object.js
│ │ │ │ │ │ │ ├── lambda-mutated-non-reactive-to-reactive.expect.md
│ │ │ │ │ │ │ ├── lambda-mutated-non-reactive-to-reactive.js
│ │ │ │ │ │ │ ├── lambda-mutated-ref-non-reactive.expect.md
│ │ │ │ │ │ │ ├── lambda-mutated-ref-non-reactive.js
│ │ │ │ │ │ │ ├── lambda-reassign-primitive.expect.md
│ │ │ │ │ │ │ ├── lambda-reassign-primitive.js
│ │ │ │ │ │ │ ├── lambda-reassign-shadowed-primitive.expect.md
│ │ │ │ │ │ │ ├── lambda-reassign-shadowed-primitive.js
│ │ │ │ │ │ │ ├── lambda-return-expression.expect.md
│ │ │ │ │ │ │ ├── lambda-return-expression.ts
│ │ │ │ │ │ │ ├── log-pruned-memoization.expect.md
│ │ │ │ │ │ │ ├── log-pruned-memoization.js
│ │ │ │ │ │ │ ├── logical-expression-object.expect.md
│ │ │ │ │ │ │ ├── logical-expression-object.js
│ │ │ │ │ │ │ ├── logical-expression.expect.md
│ │ │ │ │ │ │ ├── logical-expression.js
│ │ │ │ │ │ │ ├── logical-reorder.flow.expect.md
│ │ │ │ │ │ │ ├── logical-reorder.flow.js
│ │ │ │ │ │ │ ├── loop-unused-let.expect.md
│ │ │ │ │ │ │ ├── loop-unused-let.js
│ │ │ │ │ │ │ ├── maybe-mutate-object-in-callback.expect.md
│ │ │ │ │ │ │ ├── maybe-mutate-object-in-callback.js
│ │ │ │ │ │ │ ├── mege-consecutive-scopes-dont-merge-with-different-deps.expect.md
│ │ │ │ │ │ │ ├── mege-consecutive-scopes-dont-merge-with-different-deps.js
│ │ │ │ │ │ │ ├── member-inc.expect.md
│ │ │ │ │ │ │ ├── member-inc.js
│ │ │ │ │ │ │ ├── memoize-primitive-function-calls.expect.md
│ │ │ │ │ │ │ ├── memoize-primitive-function-calls.js
│ │ │ │ │ │ │ ├── memoize-value-block-value-conditional.expect.md
│ │ │ │ │ │ │ ├── memoize-value-block-value-conditional.js
│ │ │ │ │ │ │ ├── memoize-value-block-value-logical-no-sequence.expect.md
│ │ │ │ │ │ │ ├── memoize-value-block-value-logical-no-sequence.js
│ │ │ │ │ │ │ ├── memoize-value-block-value-logical.expect.md
│ │ │ │ │ │ │ ├── memoize-value-block-value-logical.js
│ │ │ │ │ │ │ ├── memoize-value-block-value-sequence.expect.md
│ │ │ │ │ │ │ ├── memoize-value-block-value-sequence.js
│ │ │ │ │ │ │ ├── merge-consecutive-nested-scopes.expect.md
│ │ │ │ │ │ │ ├── merge-consecutive-nested-scopes.js
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-deps-subset-of-decls.expect.md
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-deps-subset-of-decls.js
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-no-deps.expect.md
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-no-deps.js
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-objects.expect.md
│ │ │ │ │ │ │ ├── merge-consecutive-scopes-objects.js
│ │ │ │ │ │ │ ├── merge-consecutive-scopes.expect.md
│ │ │ │ │ │ │ ├── merge-consecutive-scopes.js
│ │ │ │ │ │ │ ├── merge-nested-scopes-with-same-inputs.expect.md
│ │ │ │ │ │ │ ├── merge-nested-scopes-with-same-inputs.js
│ │ │ │ │ │ │ ├── meta-isms/
│ │ │ │ │ │ │ │ ├── repro-cx-assigned-to-temporary.expect.md
│ │ │ │ │ │ │ │ ├── repro-cx-assigned-to-temporary.js
│ │ │ │ │ │ │ │ ├── repro-cx-namespace-assigned-to-temporary.expect.md
│ │ │ │ │ │ │ │ ├── repro-cx-namespace-assigned-to-temporary.js
│ │ │ │ │ │ │ │ ├── repro-cx-namespace-nesting.expect.md
│ │ │ │ │ │ │ │ └── repro-cx-namespace-nesting.js
│ │ │ │ │ │ │ ├── meta-property.expect.md
│ │ │ │ │ │ │ ├── meta-property.mjs
│ │ │ │ │ │ │ ├── method-call-computed.expect.md
│ │ │ │ │ │ │ ├── method-call-computed.js
│ │ │ │ │ │ │ ├── method-call-fn-call.expect.md
│ │ │ │ │ │ │ ├── method-call-fn-call.js
│ │ │ │ │ │ │ ├── method-call.expect.md
│ │ │ │ │ │ │ ├── method-call.js
│ │ │ │ │ │ │ ├── mixedreadonly-mutating-map.expect.md
│ │ │ │ │ │ │ ├── mixedreadonly-mutating-map.js
│ │ │ │ │ │ │ ├── module-scoped-bindings.expect.md
│ │ │ │ │ │ │ ├── module-scoped-bindings.js
│ │ │ │ │ │ │ ├── multi-directive.expect.md
│ │ │ │ │ │ │ ├── multi-directive.js
│ │ │ │ │ │ │ ├── multiple-calls-to-hoisted-callback-from-other-callback.expect.md
│ │ │ │ │ │ │ ├── multiple-calls-to-hoisted-callback-from-other-callback.js
│ │ │ │ │ │ │ ├── multiple-components-first-is-invalid.expect.md
│ │ │ │ │ │ │ ├── multiple-components-first-is-invalid.js
│ │ │ │ │ │ │ ├── mutable-lifetime-loops.expect.md
│ │ │ │ │ │ │ ├── mutable-lifetime-loops.js
│ │ │ │ │ │ │ ├── mutable-lifetime-with-aliasing.expect.md
│ │ │ │ │ │ │ ├── mutable-lifetime-with-aliasing.js
│ │ │ │ │ │ │ ├── mutable-liverange-loop.expect.md
│ │ │ │ │ │ │ ├── mutable-liverange-loop.js
│ │ │ │ │ │ │ ├── mutate-captured-arg-separately.expect.md
│ │ │ │ │ │ │ ├── mutate-captured-arg-separately.js
│ │ │ │ │ │ │ ├── mutate-outer-scope-within-value-block.expect.md
│ │ │ │ │ │ │ ├── mutate-outer-scope-within-value-block.ts
│ │ │ │ │ │ │ ├── mutation-during-jsx-construction.expect.md
│ │ │ │ │ │ │ ├── mutation-during-jsx-construction.js
│ │ │ │ │ │ │ ├── mutation-within-capture-and-mutablerange.expect.md
│ │ │ │ │ │ │ ├── mutation-within-capture-and-mutablerange.tsx
│ │ │ │ │ │ │ ├── mutation-within-jsx-and-break.expect.md
│ │ │ │ │ │ │ ├── mutation-within-jsx-and-break.tsx
│ │ │ │ │ │ │ ├── mutation-within-jsx.expect.md
│ │ │ │ │ │ │ ├── mutation-within-jsx.tsx
│ │ │ │ │ │ │ ├── name-anonymous-functions-outline.expect.md
│ │ │ │ │ │ │ ├── name-anonymous-functions-outline.js
│ │ │ │ │ │ │ ├── name-anonymous-functions.expect.md
│ │ │ │ │ │ │ ├── name-anonymous-functions.js
│ │ │ │ │ │ │ ├── nested-function-shadowed-identifiers.expect.md
│ │ │ │ │ │ │ ├── nested-function-shadowed-identifiers.js
│ │ │ │ │ │ │ ├── nested-function-with-param-as-captured-dep.expect.md
│ │ │ │ │ │ │ ├── nested-function-with-param-as-captured-dep.ts
│ │ │ │ │ │ │ ├── nested-optional-chains.expect.md
│ │ │ │ │ │ │ ├── nested-optional-chains.ts
│ │ │ │ │ │ │ ├── nested-optional-member-expr.expect.md
│ │ │ │ │ │ │ ├── nested-optional-member-expr.js
│ │ │ │ │ │ │ ├── nested-scopes-begin-same-instr-valueblock.expect.md
│ │ │ │ │ │ │ ├── nested-scopes-begin-same-instr-valueblock.ts
│ │ │ │ │ │ │ ├── nested-scopes-hook-call.expect.md
│ │ │ │ │ │ │ ├── nested-scopes-hook-call.js
│ │ │ │ │ │ │ ├── new-does-not-mutate-class.expect.md
│ │ │ │ │ │ │ ├── new-does-not-mutate-class.ts
│ │ │ │ │ │ │ ├── new-mutability/
│ │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.expect.md
│ │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.tsx
│ │ │ │ │ │ │ │ ├── array-filter.expect.md
│ │ │ │ │ │ │ │ ├── array-filter.js
│ │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.expect.md
│ │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.js
│ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.expect.md
│ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.js
│ │ │ │ │ │ │ │ ├── array-push.expect.md
│ │ │ │ │ │ │ │ ├── array-push.js
│ │ │ │ │ │ │ │ ├── basic-mutation-via-function-expression.expect.md
│ │ │ │ │ │ │ │ ├── basic-mutation-via-function-expression.js
│ │ │ │ │ │ │ │ ├── basic-mutation.expect.md
│ │ │ │ │ │ │ │ ├── basic-mutation.js
│ │ │ │ │ │ │ │ ├── capture-backedge-phi-with-later-mutation.expect.md
│ │ │ │ │ │ │ │ ├── capture-backedge-phi-with-later-mutation.js
│ │ │ │ │ │ │ │ ├── capture-in-function-expression-indirect.expect.md
│ │ │ │ │ │ │ │ ├── capture-in-function-expression-indirect.js
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.expect.md
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.js
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.expect.md
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.js
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.expect.md
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.js
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.expect.md
│ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.js
│ │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.js
│ │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.js
│ │ │ │ │ │ │ │ ├── error.invalid-referencing-frozen-hoisted-storecontext-const.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-referencing-frozen-hoisted-storecontext-const.js
│ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.js
│ │ │ │ │ │ │ │ ├── error.mutate-frozen-value.expect.md
│ │ │ │ │ │ │ │ ├── error.mutate-frozen-value.js
│ │ │ │ │ │ │ │ ├── error.mutate-hook-argument.expect.md
│ │ │ │ │ │ │ │ ├── error.mutate-hook-argument.js
│ │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.expect.md
│ │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.js
│ │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.expect.md
│ │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.js
│ │ │ │ │ │ │ │ ├── error.reassignment-to-global.expect.md
│ │ │ │ │ │ │ │ ├── error.reassignment-to-global.js
│ │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.js
│ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md
│ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections-2.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections-2.js
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections.js
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-indirections.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-indirections.js
│ │ │ │ │ │ │ │ ├── mutate-through-identity-function-expression.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-identity-function-expression.js
│ │ │ │ │ │ │ │ ├── mutate-through-identity.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-identity.js
│ │ │ │ │ │ │ │ ├── mutate-through-propertyload.expect.md
│ │ │ │ │ │ │ │ ├── mutate-through-propertyload.js
│ │ │ │ │ │ │ │ ├── nullable-objects-assume-invoked-direct-call.expect.md
│ │ │ │ │ │ │ │ ├── nullable-objects-assume-invoked-direct-call.js
│ │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.expect.md
│ │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.js
│ │ │ │ │ │ │ │ ├── object-expression-computed-member.expect.md
│ │ │ │ │ │ │ │ ├── object-expression-computed-member.js
│ │ │ │ │ │ │ │ ├── potential-mutation-in-function-expression.expect.md
│ │ │ │ │ │ │ │ ├── potential-mutation-in-function-expression.js
│ │ │ │ │ │ │ │ ├── reactive-ref.expect.md
│ │ │ │ │ │ │ │ ├── reactive-ref.js
│ │ │ │ │ │ │ │ ├── repro-compiler-infinite-loop.expect.md
│ │ │ │ │ │ │ │ ├── repro-compiler-infinite-loop.js
│ │ │ │ │ │ │ │ ├── repro-destructure-from-prop-with-default-value.expect.md
│ │ │ │ │ │ │ │ ├── repro-destructure-from-prop-with-default-value.js
│ │ │ │ │ │ │ │ ├── repro-function-expression-effects-stack-overflow.expect.md
│ │ │ │ │ │ │ │ ├── repro-function-expression-effects-stack-overflow.js
│ │ │ │ │ │ │ │ ├── repro-internal-compiler-shared-mutablerange-bug.expect.md
│ │ │ │ │ │ │ │ ├── repro-internal-compiler-shared-mutablerange-bug.js
│ │ │ │ │ │ │ │ ├── repro-invalid-function-expression-effects-phi.expect.md
│ │ │ │ │ │ │ │ ├── repro-invalid-function-expression-effects-phi.js
│ │ │ │ │ │ │ │ ├── repro-jsx-captures-value-mutated-later.expect.md
│ │ │ │ │ │ │ │ ├── repro-jsx-captures-value-mutated-later.js
│ │ │ │ │ │ │ │ ├── repro-mutate-new-set-of-frozen-items-in-callback.expect.md
│ │ │ │ │ │ │ │ ├── repro-mutate-new-set-of-frozen-items-in-callback.js
│ │ │ │ │ │ │ │ ├── set-add-mutate.expect.md
│ │ │ │ │ │ │ │ ├── set-add-mutate.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.js
│ │ │ │ │ │ │ │ ├── todo-control-flow-sensitive-mutation.expect.md
│ │ │ │ │ │ │ │ ├── todo-control-flow-sensitive-mutation.tsx
│ │ │ │ │ │ │ │ ├── todo-transitivity-createfrom-capture-lambda.expect.md
│ │ │ │ │ │ │ │ ├── todo-transitivity-createfrom-capture-lambda.tsx
│ │ │ │ │ │ │ │ ├── transitive-mutation-before-capturing-value-created-earlier.expect.md
│ │ │ │ │ │ │ │ ├── transitive-mutation-before-capturing-value-created-earlier.js
│ │ │ │ │ │ │ │ ├── transitivity-add-captured-array-to-itself.expect.md
│ │ │ │ │ │ │ │ ├── transitivity-add-captured-array-to-itself.tsx
│ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom-lambda.expect.md
│ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom-lambda.tsx
│ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom.expect.md
│ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom.tsx
│ │ │ │ │ │ │ │ ├── transitivity-createfrom-capture.expect.md
│ │ │ │ │ │ │ │ ├── transitivity-createfrom-capture.tsx
│ │ │ │ │ │ │ │ ├── transitivity-phi-assign-or-capture.expect.md
│ │ │ │ │ │ │ │ ├── transitivity-phi-assign-or-capture.tsx
│ │ │ │ │ │ │ │ ├── typed-identity-function-frozen-input.expect.md
│ │ │ │ │ │ │ │ ├── typed-identity-function-frozen-input.js
│ │ │ │ │ │ │ │ ├── typed-identity-function-mutable-input.expect.md
│ │ │ │ │ │ │ │ ├── typed-identity-function-mutable-input.js
│ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.tsx
│ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.tsx
│ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.expect.md
│ │ │ │ │ │ │ │ └── useMemo-reordering-depslist-assignment.ts
│ │ │ │ │ │ │ ├── new-spread.expect.md
│ │ │ │ │ │ │ ├── new-spread.js
│ │ │ │ │ │ │ ├── no-flow-bailout-unrelated.expect.md
│ │ │ │ │ │ │ ├── no-flow-bailout-unrelated.js
│ │ │ │ │ │ │ ├── noAlias-filter-on-array-prop.expect.md
│ │ │ │ │ │ │ ├── noAlias-filter-on-array-prop.js
│ │ │ │ │ │ │ ├── non-null-assertion.expect.md
│ │ │ │ │ │ │ ├── non-null-assertion.ts
│ │ │ │ │ │ │ ├── nonmutated-spread-hook-return.expect.md
│ │ │ │ │ │ │ ├── nonmutated-spread-hook-return.js
│ │ │ │ │ │ │ ├── nonmutated-spread-props-jsx.expect.md
│ │ │ │ │ │ │ ├── nonmutated-spread-props-jsx.js
│ │ │ │ │ │ │ ├── nonmutated-spread-props-local-indirection.expect.md
│ │ │ │ │ │ │ ├── nonmutated-spread-props-local-indirection.js
│ │ │ │ │ │ │ ├── nonmutated-spread-props.expect.md
│ │ │ │ │ │ │ ├── nonmutated-spread-props.js
│ │ │ │ │ │ │ ├── nonmutating-capture-in-unsplittable-memo-block.expect.md
│ │ │ │ │ │ │ ├── nonmutating-capture-in-unsplittable-memo-block.ts
│ │ │ │ │ │ │ ├── nonoptional-load-from-optional-memberexpr.expect.md
│ │ │ │ │ │ │ ├── nonoptional-load-from-optional-memberexpr.js
│ │ │ │ │ │ │ ├── nonreactive-noescaping-dependency-can-inline-into-consuming-scope.expect.md
│ │ │ │ │ │ │ ├── nonreactive-noescaping-dependency-can-inline-into-consuming-scope.js
│ │ │ │ │ │ │ ├── numeric-literal-as-object-property-key.expect.md
│ │ │ │ │ │ │ ├── numeric-literal-as-object-property-key.js
│ │ │ │ │ │ │ ├── obj-literal-cached-in-if-else.expect.md
│ │ │ │ │ │ │ ├── obj-literal-cached-in-if-else.js
│ │ │ │ │ │ │ ├── obj-literal-mutated-after-if-else.expect.md
│ │ │ │ │ │ │ ├── obj-literal-mutated-after-if-else.js
│ │ │ │ │ │ │ ├── obj-mutated-after-if-else-with-alias.expect.md
│ │ │ │ │ │ │ ├── obj-mutated-after-if-else-with-alias.js
│ │ │ │ │ │ │ ├── obj-mutated-after-if-else.expect.md
│ │ │ │ │ │ │ ├── obj-mutated-after-if-else.js
│ │ │ │ │ │ │ ├── obj-mutated-after-nested-if-else-with-alias.expect.md
│ │ │ │ │ │ │ ├── obj-mutated-after-nested-if-else-with-alias.js
│ │ │ │ │ │ │ ├── object-access-assignment.expect.md
│ │ │ │ │ │ │ ├── object-access-assignment.js
│ │ │ │ │ │ │ ├── object-computed-access-assignment.expect.md
│ │ │ │ │ │ │ ├── object-computed-access-assignment.js
│ │ │ │ │ │ │ ├── object-entries-mutation.expect.md
│ │ │ │ │ │ │ ├── object-entries-mutation.js
│ │ │ │ │ │ │ ├── object-expression-captures-function-with-global-mutation.expect.md
│ │ │ │ │ │ │ ├── object-expression-captures-function-with-global-mutation.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-constant-number.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-constant-number.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-constant-string.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-constant-string.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction-sequence-expr.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction-sequence-expr.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-mutate-key-while-constructing-object.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-mutate-key-while-constructing-object.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-non-reactive.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-non-reactive.js
│ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.js
│ │ │ │ │ │ │ ├── object-expression-computed-key.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-key.js
│ │ │ │ │ │ │ ├── object-expression-computed-member.expect.md
│ │ │ │ │ │ │ ├── object-expression-computed-member.js
│ │ │ │ │ │ │ ├── object-expression-member-expr-call.expect.md
│ │ │ │ │ │ │ ├── object-expression-member-expr-call.js
│ │ │ │ │ │ │ ├── object-expression-string-literal-key.expect.md
│ │ │ │ │ │ │ ├── object-expression-string-literal-key.js
│ │ │ │ │ │ │ ├── object-keys.expect.md
│ │ │ │ │ │ │ ├── object-keys.js
│ │ │ │ │ │ │ ├── object-literal-method-call-in-ternary-test.expect.md
│ │ │ │ │ │ │ ├── object-literal-method-call-in-ternary-test.js
│ │ │ │ │ │ │ ├── object-literal-method-derived-in-ternary-consequent.expect.md
│ │ │ │ │ │ │ ├── object-literal-method-derived-in-ternary-consequent.js
│ │ │ │ │ │ │ ├── object-literal-method-in-ternary-consequent.expect.md
│ │ │ │ │ │ │ ├── object-literal-method-in-ternary-consequent.js
│ │ │ │ │ │ │ ├── object-literal-method-in-ternary-test.expect.md
│ │ │ │ │ │ │ ├── object-literal-method-in-ternary-test.js
│ │ │ │ │ │ │ ├── object-literal-spread-element.expect.md
│ │ │ │ │ │ │ ├── object-literal-spread-element.js
│ │ │ │ │ │ │ ├── object-method-maybe-alias.expect.md
│ │ │ │ │ │ │ ├── object-method-maybe-alias.js
│ │ │ │ │ │ │ ├── object-method-shorthand-3.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand-3.js
│ │ │ │ │ │ │ ├── object-method-shorthand-aliased-mutate-after.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand-aliased-mutate-after.js
│ │ │ │ │ │ │ ├── object-method-shorthand-derived-value.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand-derived-value.js
│ │ │ │ │ │ │ ├── object-method-shorthand-hook-dep.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand-hook-dep.js
│ │ │ │ │ │ │ ├── object-method-shorthand-mutated-after.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand-mutated-after.js
│ │ │ │ │ │ │ ├── object-method-shorthand.expect.md
│ │ │ │ │ │ │ ├── object-method-shorthand.js
│ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.expect.md
│ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.js
│ │ │ │ │ │ │ ├── object-pattern-params.expect.md
│ │ │ │ │ │ │ ├── object-pattern-params.js
│ │ │ │ │ │ │ ├── object-properties.expect.md
│ │ │ │ │ │ │ ├── object-properties.js
│ │ │ │ │ │ │ ├── object-shorthand-method-1.expect.md
│ │ │ │ │ │ │ ├── object-shorthand-method-1.js
│ │ │ │ │ │ │ ├── object-shorthand-method-2.expect.md
│ │ │ │ │ │ │ ├── object-shorthand-method-2.js
│ │ │ │ │ │ │ ├── object-shorthand-method-nested.expect.md
│ │ │ │ │ │ │ ├── object-shorthand-method-nested.js
│ │ │ │ │ │ │ ├── object-values-mutation.expect.md
│ │ │ │ │ │ │ ├── object-values-mutation.js
│ │ │ │ │ │ │ ├── object-values.expect.md
│ │ │ │ │ │ │ ├── object-values.js
│ │ │ │ │ │ │ ├── optional-call-chain-in-logical-expr.expect.md
│ │ │ │ │ │ │ ├── optional-call-chain-in-logical-expr.ts
│ │ │ │ │ │ │ ├── optional-call-chain-in-ternary.expect.md
│ │ │ │ │ │ │ ├── optional-call-chain-in-ternary.ts
│ │ │ │ │ │ │ ├── optional-call-chained.expect.md
│ │ │ │ │ │ │ ├── optional-call-chained.js
│ │ │ │ │ │ │ ├── optional-call-logical.expect.md
│ │ │ │ │ │ │ ├── optional-call-logical.js
│ │ │ │ │ │ │ ├── optional-call-simple.expect.md
│ │ │ │ │ │ │ ├── optional-call-simple.js
│ │ │ │ │ │ │ ├── optional-call-with-independently-memoizable-arg.expect.md
│ │ │ │ │ │ │ ├── optional-call-with-independently-memoizable-arg.js
│ │ │ │ │ │ │ ├── optional-call-with-optional-property-load.expect.md
│ │ │ │ │ │ │ ├── optional-call-with-optional-property-load.js
│ │ │ │ │ │ │ ├── optional-call.expect.md
│ │ │ │ │ │ │ ├── optional-call.js
│ │ │ │ │ │ │ ├── optional-computed-load-static.expect.md
│ │ │ │ │ │ │ ├── optional-computed-load-static.js
│ │ │ │ │ │ │ ├── optional-computed-member-expression.expect.md
│ │ │ │ │ │ │ ├── optional-computed-member-expression.js
│ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.js
│ │ │ │ │ │ │ ├── optional-member-expression-call-as-property.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-call-as-property.js
│ │ │ │ │ │ │ ├── optional-member-expression-chain.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-chain.js
│ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.js
│ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.js
│ │ │ │ │ │ │ ├── optional-member-expression-single.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-single.js
│ │ │ │ │ │ │ ├── optional-member-expression-with-optional-member-expr-as-property.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression-with-optional-member-expr-as-property.js
│ │ │ │ │ │ │ ├── optional-member-expression.expect.md
│ │ │ │ │ │ │ ├── optional-member-expression.js
│ │ │ │ │ │ │ ├── optional-method-call.expect.md
│ │ │ │ │ │ │ ├── optional-method-call.js
│ │ │ │ │ │ │ ├── optional-receiver-method-call.expect.md
│ │ │ │ │ │ │ ├── optional-receiver-method-call.js
│ │ │ │ │ │ │ ├── optional-receiver-optional-method.expect.md
│ │ │ │ │ │ │ ├── optional-receiver-optional-method.js
│ │ │ │ │ │ │ ├── original-reactive-scopes-fork/
│ │ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.expect.md
│ │ │ │ │ │ │ │ └── capture-ref-for-later-mutation.tsx
│ │ │ │ │ │ │ ├── outlined-destructured-params.expect.md
│ │ │ │ │ │ │ ├── outlined-destructured-params.js
│ │ │ │ │ │ │ ├── outlined-helper.expect.md
│ │ │ │ │ │ │ ├── outlined-helper.js
│ │ │ │ │ │ │ ├── outlining-in-func-expr.expect.md
│ │ │ │ │ │ │ ├── outlining-in-func-expr.js
│ │ │ │ │ │ │ ├── outlining-in-react-memo.expect.md
│ │ │ │ │ │ │ ├── outlining-in-react-memo.js
│ │ │ │ │ │ │ ├── overlapping-scopes-interleaved-by-terminal.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-interleaved-by-terminal.js
│ │ │ │ │ │ │ ├── overlapping-scopes-interleaved.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-interleaved.js
│ │ │ │ │ │ │ ├── overlapping-scopes-shadowed.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-shadowed.js
│ │ │ │ │ │ │ ├── overlapping-scopes-shadowing-within-block.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-shadowing-within-block.js
│ │ │ │ │ │ │ ├── overlapping-scopes-while.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-while.js
│ │ │ │ │ │ │ ├── overlapping-scopes-within-block.expect.md
│ │ │ │ │ │ │ ├── overlapping-scopes-within-block.js
│ │ │ │ │ │ │ ├── panresponder-ref-in-callback.expect.md
│ │ │ │ │ │ │ ├── panresponder-ref-in-callback.js
│ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.js
│ │ │ │ │ │ │ ├── phi-reference-effects.expect.md
│ │ │ │ │ │ │ ├── phi-reference-effects.ts
│ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.expect.md
│ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.js
│ │ │ │ │ │ │ ├── phi-type-inference-array-push.expect.md
│ │ │ │ │ │ │ ├── phi-type-inference-array-push.js
│ │ │ │ │ │ │ ├── phi-type-inference-property-store.expect.md
│ │ │ │ │ │ │ ├── phi-type-inference-property-store.js
│ │ │ │ │ │ │ ├── preserve-existing-memoization-guarantees/
│ │ │ │ │ │ │ │ ├── lambda-with-fbt-preserve-memoization.expect.md
│ │ │ │ │ │ │ │ └── lambda-with-fbt-preserve-memoization.js
│ │ │ │ │ │ │ ├── preserve-jsxtext-stringliteral-distinction.expect.md
│ │ │ │ │ │ │ ├── preserve-jsxtext-stringliteral-distinction.js
│ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain-less-precise-deps.expect.md
│ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain-less-precise-deps.js
│ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain.expect.md
│ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain.js
│ │ │ │ │ │ │ ├── preserve-memo-deps-optional-property-chain.expect.md
│ │ │ │ │ │ │ ├── preserve-memo-deps-optional-property-chain.js
│ │ │ │ │ │ │ ├── preserve-memo-validation/
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-dropped-infer-always-invalidating.expect.md
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-dropped-infer-always-invalidating.ts
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-infer-mutate-deps.expect.md
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-infer-mutate-deps.ts
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-overlap-scopes.expect.md
│ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-overlap-scopes.ts
│ │ │ │ │ │ │ │ ├── error.hoist-useCallback-conditional-access-own-scope.expect.md
│ │ │ │ │ │ │ │ ├── error.hoist-useCallback-conditional-access-own-scope.ts
│ │ │ │ │ │ │ │ ├── error.hoist-useCallback-infer-conditional-value-block.expect.md
│ │ │ │ │ │ │ │ ├── error.hoist-useCallback-infer-conditional-value-block.ts
│ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.expect.md
│ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.ts
│ │ │ │ │ │ │ │ ├── error.maybe-mutable-ref-not-preserved.expect.md
│ │ │ │ │ │ │ │ ├── error.maybe-mutable-ref-not-preserved.ts
│ │ │ │ │ │ │ │ ├── error.preserve-use-memo-ref-missing-reactive.expect.md
│ │ │ │ │ │ │ │ ├── error.preserve-use-memo-ref-missing-reactive.ts
│ │ │ │ │ │ │ │ ├── error.todo-useCallback-captures-invalidating-value.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-useCallback-captures-invalidating-value.ts
│ │ │ │ │ │ │ │ ├── error.useCallback-aliased-var.expect.md
│ │ │ │ │ │ │ │ ├── error.useCallback-aliased-var.ts
│ │ │ │ │ │ │ │ ├── error.useCallback-conditional-access-noAlloc.expect.md
│ │ │ │ │ │ │ │ ├── error.useCallback-conditional-access-noAlloc.ts
│ │ │ │ │ │ │ │ ├── error.useCallback-infer-less-specific-conditional-access.expect.md
│ │ │ │ │ │ │ │ ├── error.useCallback-infer-less-specific-conditional-access.ts
│ │ │ │ │ │ │ │ ├── error.useCallback-property-call-dep.expect.md
│ │ │ │ │ │ │ │ ├── error.useCallback-property-call-dep.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-aliased-var.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-aliased-var.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-access.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-access.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-value-block.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-value-block.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-property-call-chained-object.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-property-call-chained-object.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-property-call-dep.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-property-call-dep.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-unrelated-mutation-in-depslist.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-unrelated-mutation-in-depslist.ts
│ │ │ │ │ │ │ │ ├── error.useMemo-with-refs.flow.expect.md
│ │ │ │ │ │ │ │ ├── error.useMemo-with-refs.flow.js
│ │ │ │ │ │ │ │ ├── error.validate-useMemo-named-function.expect.md
│ │ │ │ │ │ │ │ ├── error.validate-useMemo-named-function.js
│ │ │ │ │ │ │ │ ├── maybe-invalid-useMemo-no-memoblock-sideeffect.expect.md
│ │ │ │ │ │ │ │ ├── maybe-invalid-useMemo-no-memoblock-sideeffect.ts
│ │ │ │ │ │ │ │ ├── preserve-use-callback-stable-built-ins.expect.md
│ │ │ │ │ │ │ │ ├── preserve-use-callback-stable-built-ins.ts
│ │ │ │ │ │ │ │ ├── preserve-use-memo-ref-missing-ok.expect.md
│ │ │ │ │ │ │ │ ├── preserve-use-memo-ref-missing-ok.ts
│ │ │ │ │ │ │ │ ├── preserve-use-memo-transition.expect.md
│ │ │ │ │ │ │ │ ├── preserve-use-memo-transition.ts
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns-primitive.expect.md
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns-primitive.ts
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns.expect.md
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns.ts
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo.expect.md
│ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo.ts
│ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useCallback-read-maybeRef.expect.md
│ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useCallback-read-maybeRef.ts
│ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useMemo-read-maybeRef.expect.md
│ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useMemo-read-maybeRef.ts
│ │ │ │ │ │ │ │ ├── todo-ensure-constant-prop-decls-get-removed.expect.md
│ │ │ │ │ │ │ │ ├── todo-ensure-constant-prop-decls-get-removed.ts
│ │ │ │ │ │ │ │ ├── useCallback-alias-property-load-dep.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-alias-property-load-dep.ts
│ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context-property.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context-property.tsx
│ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context.ts
│ │ │ │ │ │ │ │ ├── useCallback-dep-scope-pruned.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-dep-scope-pruned.ts
│ │ │ │ │ │ │ │ ├── useCallback-extended-contextvar-scope.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-extended-contextvar-scope.tsx
│ │ │ │ │ │ │ │ ├── useCallback-in-other-reactive-block.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-in-other-reactive-block.ts
│ │ │ │ │ │ │ │ ├── useCallback-infer-fewer-deps.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-infer-fewer-deps.ts
│ │ │ │ │ │ │ │ ├── useCallback-infer-more-specific.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-infer-more-specific.ts
│ │ │ │ │ │ │ │ ├── useCallback-infer-read-dep.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-infer-read-dep.ts
│ │ │ │ │ │ │ │ ├── useCallback-infer-scope-global.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-infer-scope-global.ts
│ │ │ │ │ │ │ │ ├── useCallback-nonescaping-invoked-callback-escaping-return.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-nonescaping-invoked-callback-escaping-return.js
│ │ │ │ │ │ │ │ ├── useCallback-nonescaping.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-nonescaping.js
│ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.tsx
│ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.tsx
│ │ │ │ │ │ │ │ ├── useCallback-with-no-depslist.expect.md
│ │ │ │ │ │ │ │ ├── useCallback-with-no-depslist.ts
│ │ │ │ │ │ │ │ ├── useMemo-alias-property-load-dep.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-alias-property-load-dep.ts
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-alloc.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-alloc.ts
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-noAlloc.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-noAlloc.ts
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-own-scope.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-conditional-access-own-scope.ts
│ │ │ │ │ │ │ │ ├── useMemo-constant-prop.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-constant-prop.ts
│ │ │ │ │ │ │ │ ├── useMemo-dep-array-literal-access.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-dep-array-literal-access.ts
│ │ │ │ │ │ │ │ ├── useMemo-in-other-reactive-block.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-in-other-reactive-block.ts
│ │ │ │ │ │ │ │ ├── useMemo-infer-fewer-deps.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-infer-fewer-deps.ts
│ │ │ │ │ │ │ │ ├── useMemo-infer-more-specific.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-infer-more-specific.ts
│ │ │ │ │ │ │ │ ├── useMemo-infer-nonallocating.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-infer-nonallocating.ts
│ │ │ │ │ │ │ │ ├── useMemo-infer-scope-global.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-infer-scope-global.ts
│ │ │ │ │ │ │ │ ├── useMemo-inner-decl.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-inner-decl.ts
│ │ │ │ │ │ │ │ ├── useMemo-invoke-prop.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-invoke-prop.ts
│ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.ts
│ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-controlflow.expect.md
│ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-controlflow.tsx
│ │ │ │ │ │ │ │ ├── useMemo-with-no-depslist.expect.md
│ │ │ │ │ │ │ │ └── useMemo-with-no-depslist.ts
│ │ │ │ │ │ │ ├── preserve-use-memo-transition-no-ispending.expect.md
│ │ │ │ │ │ │ ├── preserve-use-memo-transition-no-ispending.js
│ │ │ │ │ │ │ ├── preserve-use-memo-unused-state.expect.md
│ │ │ │ │ │ │ ├── preserve-use-memo-unused-state.js
│ │ │ │ │ │ │ ├── primitive-alias-mutate.expect.md
│ │ │ │ │ │ │ ├── primitive-alias-mutate.js
│ │ │ │ │ │ │ ├── primitive-as-dep-nested-scope.expect.md
│ │ │ │ │ │ │ ├── primitive-as-dep-nested-scope.js
│ │ │ │ │ │ │ ├── primitive-as-dep.expect.md
│ │ │ │ │ │ │ ├── primitive-as-dep.js
│ │ │ │ │ │ │ ├── primitive-reassigned-loop-force-scopes-enabled.expect.md
│ │ │ │ │ │ │ ├── primitive-reassigned-loop-force-scopes-enabled.js
│ │ │ │ │ │ │ ├── prop-capturing-function-1.expect.md
│ │ │ │ │ │ │ ├── prop-capturing-function-1.js
│ │ │ │ │ │ │ ├── propagate-scope-deps-hir-fork/
│ │ │ │ │ │ │ │ ├── conditional-break-labeled.expect.md
│ │ │ │ │ │ │ │ ├── conditional-break-labeled.js
│ │ │ │ │ │ │ │ ├── conditional-early-return.expect.md
│ │ │ │ │ │ │ │ ├── conditional-early-return.js
│ │ │ │ │ │ │ │ ├── conditional-on-mutable.expect.md
│ │ │ │ │ │ │ │ ├── conditional-on-mutable.js
│ │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.js
│ │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.js
│ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional-optional.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional-optional.js
│ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional.expect.md
│ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional.js
│ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md
│ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js
│ │ │ │ │ │ │ │ ├── infer-component-props-non-null.expect.md
│ │ │ │ │ │ │ │ ├── infer-component-props-non-null.tsx
│ │ │ │ │ │ │ │ ├── infer-non-null-destructure.expect.md
│ │ │ │ │ │ │ │ ├── infer-non-null-destructure.ts
│ │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.expect.md
│ │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.ts
│ │ │ │ │ │ │ │ ├── nested-optional-chains.expect.md
│ │ │ │ │ │ │ │ ├── nested-optional-chains.ts
│ │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.expect.md
│ │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.js
│ │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.expect.md
│ │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.js
│ │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.expect.md
│ │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.js
│ │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.expect.md
│ │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.js
│ │ │ │ │ │ │ │ ├── optional-member-expression-single.expect.md
│ │ │ │ │ │ │ │ ├── optional-member-expression-single.js
│ │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.expect.md
│ │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.js
│ │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.expect.md
│ │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.js
│ │ │ │ │ │ │ │ ├── phi-type-inference-array-push.expect.md
│ │ │ │ │ │ │ │ ├── phi-type-inference-array-push.js
│ │ │ │ │ │ │ │ ├── phi-type-inference-property-store.expect.md
│ │ │ │ │ │ │ │ ├── phi-type-inference-property-store.js
│ │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md
│ │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.js
│ │ │ │ │ │ │ │ ├── reduce-reactive-deps/
│ │ │ │ │ │ │ │ │ ├── conditional-member-expr.expect.md
│ │ │ │ │ │ │ │ │ ├── conditional-member-expr.js
│ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-local-var.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-local-var.tsx
│ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-not-hoisted.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-not-hoisted.tsx
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoisted.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoisted.tsx
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoists-other-dep.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoists-other-dep.tsx
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-local-var.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-local-var.tsx
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-optional-hoists-other-dep.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-function-uncond-optional-hoists-other-dep.tsx
│ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access-local-var.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access-local-var.tsx
│ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access.tsx
│ │ │ │ │ │ │ │ │ ├── infer-object-method-uncond-access.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-object-method-uncond-access.tsx
│ │ │ │ │ │ │ │ │ ├── infer-objectmethod-cond-access.expect.md
│ │ │ │ │ │ │ │ │ ├── infer-objectmethod-cond-access.js
│ │ │ │ │ │ │ │ │ ├── join-uncond-scopes-cond-deps.expect.md
│ │ │ │ │ │ │ │ │ ├── join-uncond-scopes-cond-deps.js
│ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain.expect.md
│ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain.ts
│ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain2.expect.md
│ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain2.ts
│ │ │ │ │ │ │ │ │ ├── merge-uncond-optional-chain-and-cond.expect.md
│ │ │ │ │ │ │ │ │ ├── merge-uncond-optional-chain-and-cond.ts
│ │ │ │ │ │ │ │ │ ├── promote-uncond.expect.md
│ │ │ │ │ │ │ │ │ ├── promote-uncond.js
│ │ │ │ │ │ │ │ │ ├── todo-infer-function-uncond-optionals-hoisted.expect.md
│ │ │ │ │ │ │ │ │ └── todo-infer-function-uncond-optionals-hoisted.tsx
│ │ │ │ │ │ │ │ ├── repro-invariant.expect.md
│ │ │ │ │ │ │ │ ├── repro-invariant.tsx
│ │ │ │ │ │ │ │ ├── repro-scope-missing-mutable-range.expect.md
│ │ │ │ │ │ │ │ ├── repro-scope-missing-mutable-range.js
│ │ │ │ │ │ │ │ ├── ssa-cascading-eliminated-phis.expect.md
│ │ │ │ │ │ │ │ ├── ssa-cascading-eliminated-phis.js
│ │ │ │ │ │ │ │ ├── ssa-leave-case.expect.md
│ │ │ │ │ │ │ │ ├── ssa-leave-case.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction-with-mutation.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-with-mutation.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-ternary.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary-with-mutation.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-with-mutation.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-via-destructuring-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-via-destructuring-with-mutation.js
│ │ │ │ │ │ │ │ ├── ssa-renaming-with-mutation.expect.md
│ │ │ │ │ │ │ │ ├── ssa-renaming-with-mutation.js
│ │ │ │ │ │ │ │ ├── switch-non-final-default.expect.md
│ │ │ │ │ │ │ │ ├── switch-non-final-default.js
│ │ │ │ │ │ │ │ ├── switch.expect.md
│ │ │ │ │ │ │ │ ├── switch.js
│ │ │ │ │ │ │ │ ├── todo-optional-call-chain-in-optional.expect.md
│ │ │ │ │ │ │ │ ├── todo-optional-call-chain-in-optional.ts
│ │ │ │ │ │ │ │ ├── try-catch-maybe-null-dependency.expect.md
│ │ │ │ │ │ │ │ ├── try-catch-maybe-null-dependency.ts
│ │ │ │ │ │ │ │ ├── try-catch-mutate-outer-value.expect.md
│ │ │ │ │ │ │ │ ├── try-catch-mutate-outer-value.js
│ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch-escaping.expect.md
│ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch-escaping.js
│ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch.expect.md
│ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch.js
│ │ │ │ │ │ │ │ ├── useMemo-multiple-if-else.expect.md
│ │ │ │ │ │ │ │ └── useMemo-multiple-if-else.js
│ │ │ │ │ │ │ ├── property-assignment.expect.md
│ │ │ │ │ │ │ ├── property-assignment.js
│ │ │ │ │ │ │ ├── property-call-evaluation-order.expect.md
│ │ │ │ │ │ │ ├── property-call-evaluation-order.js
│ │ │ │ │ │ │ ├── property-call-spread.expect.md
│ │ │ │ │ │ │ ├── property-call-spread.js
│ │ │ │ │ │ │ ├── props-method-dependency.expect.md
│ │ │ │ │ │ │ ├── props-method-dependency.js
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-array.expect.md
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-array.js
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-jsx.expect.md
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-jsx.js
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-new.expect.md
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-new.js
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-object.expect.md
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-object.js
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-may-invalidate-array.expect.md
│ │ │ │ │ │ │ ├── prune-scopes-whose-deps-may-invalidate-array.js
│ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute-escaped.expect.md
│ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute-escaped.js
│ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute.expect.md
│ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute.js
│ │ │ │ │ │ │ ├── quoted-strings-jsx-attribute-escaped-constant-propagation.expect.md
│ │ │ │ │ │ │ ├── quoted-strings-jsx-attribute-escaped-constant-propagation.js
│ │ │ │ │ │ │ ├── react-namespace.expect.md
│ │ │ │ │ │ │ ├── react-namespace.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-indirect.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-indirect.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-test.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-test.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-init.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-init.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-test.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-test.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-update.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-for-update.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-forin-collection.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-forin-collection.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-forof-collection.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-forof-collection.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-do-while.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-do-while.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-in.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-in.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-init.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-init.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-of.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-of.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-test.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-test.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-update.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-update.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-if.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-if.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-switch.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-switch.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-while.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-while.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-if.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-if.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-on-context-variable.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-on-context-variable.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-phi-setState-type.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-phi-setState-type.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-reactive-after-fixpoint.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-reactive-after-fixpoint.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-switch-case-test.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-switch-case-test.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-switch-condition.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-switch-condition.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-if.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-if.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-switch.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-switch.js
│ │ │ │ │ │ │ ├── reactive-control-dependency-while-test.expect.md
│ │ │ │ │ │ │ ├── reactive-control-dependency-while-test.js
│ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md
│ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.js
│ │ │ │ │ │ │ ├── reactive-dependency-fixpoint.expect.md
│ │ │ │ │ │ │ ├── reactive-dependency-fixpoint.js
│ │ │ │ │ │ │ ├── reactive-dependency-nonreactive-captured-with-reactive.expect.md
│ │ │ │ │ │ │ ├── reactive-dependency-nonreactive-captured-with-reactive.js
│ │ │ │ │ │ │ ├── reactive-dependency-object-captured-with-reactive-mutated.expect.md
│ │ │ │ │ │ │ ├── reactive-dependency-object-captured-with-reactive-mutated.js
│ │ │ │ │ │ │ ├── reactive-ref-param.expect.md
│ │ │ │ │ │ │ ├── reactive-ref-param.tsx
│ │ │ │ │ │ │ ├── reactive-ref.expect.md
│ │ │ │ │ │ │ ├── reactive-ref.tsx
│ │ │ │ │ │ │ ├── reactive-scope-grouping.expect.md
│ │ │ │ │ │ │ ├── reactive-scope-grouping.js
│ │ │ │ │ │ │ ├── reactive-scopes-if.expect.md
│ │ │ │ │ │ │ ├── reactive-scopes-if.js
│ │ │ │ │ │ │ ├── reactive-scopes.expect.md
│ │ │ │ │ │ │ ├── reactive-scopes.js
│ │ │ │ │ │ │ ├── reactivity-analysis-interleaved-reactivity.expect.md
│ │ │ │ │ │ │ ├── reactivity-analysis-interleaved-reactivity.js
│ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-computed-load.expect.md
│ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-computed-load.js
│ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-property-load.expect.md
│ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-property-load.js
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-array.expect.md
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-array.js
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-lambda.expect.md
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-lambda.js
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-through-property-load.expect.md
│ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-through-property-load.js
│ │ │ │ │ │ │ ├── reactivity-via-readonly-alias-of-mutable-value.expect.md
│ │ │ │ │ │ │ ├── reactivity-via-readonly-alias-of-mutable-value.js
│ │ │ │ │ │ │ ├── readonly-object-method-calls-mutable-lambda.expect.md
│ │ │ │ │ │ │ ├── readonly-object-method-calls-mutable-lambda.js
│ │ │ │ │ │ │ ├── readonly-object-method-calls.expect.md
│ │ │ │ │ │ │ ├── readonly-object-method-calls.js
│ │ │ │ │ │ │ ├── reanimated-no-memo-arg.expect.md
│ │ │ │ │ │ │ ├── reanimated-no-memo-arg.js
│ │ │ │ │ │ │ ├── reanimated-shared-value-writes.expect.md
│ │ │ │ │ │ │ ├── reanimated-shared-value-writes.jsx
│ │ │ │ │ │ │ ├── reassign-global-hook-arg.expect.md
│ │ │ │ │ │ │ ├── reassign-global-hook-arg.js
│ │ │ │ │ │ │ ├── reassign-global-return.expect.md
│ │ │ │ │ │ │ ├── reassign-global-return.js
│ │ │ │ │ │ │ ├── reassign-in-while-loop-condition.expect.md
│ │ │ │ │ │ │ ├── reassign-in-while-loop-condition.js
│ │ │ │ │ │ │ ├── reassign-object
================================================
FILE CONTENTS
================================================
================================================
FILE: .claude/instructions.md
================================================
# React
**Scope**: All code EXCEPT `/compiler/` (compiler has its own instructions).
## Project Structure
| Directory | Purpose |
|-----------|---------|
| `/packages/` | Publishable packages (react, react-dom, scheduler, etc.) |
| `/scripts/` | Build, test, and development scripts |
| `/fixtures/` | Test applications for manual testing |
| `/compiler/` | React Compiler (separate sub-project) |
## Key Packages
| Package | Purpose |
|---------|---------|
| `react` | Core React library |
| `react-dom` | DOM renderer |
| `react-reconciler` | Core reconciliation algorithm |
| `scheduler` | Cooperative scheduling |
| `react-server-dom-*` | Server Components |
| `react-devtools-*` | Developer Tools |
| `react-refresh` | Fast Refresh runtime |
## Requirements
- **Node**: Must be installed. Stop and prompt user if missing.
- **Package Manager**: Use `yarn` only.
## Verification
**IMPORTANT**: Use `/verify` to validate all changes before committing.
## Commands
| Command | Purpose |
|----------|----------------------|
| `/fix` | Lint and format code |
| `/test` | Run tests |
| `/flow` | Type check with Flow |
| `/flags` | Check feature flags |
## Building
Builds are handled by CI. Do not run locally unless instructed.
================================================
FILE: .claude/settings.json
================================================
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "if [[ \"$PWD\" != */compiler* ]]; then cat .claude/instructions.md 2>/dev/null || true; fi"
}
]
}
]
},
"permissions": {
"allow": [
"Skill(extract-errors)",
"Skill(feature-flags)",
"Skill(fix)",
"Skill(flags)",
"Skill(flow)",
"Skill(test)",
"Skill(verify)",
"Bash(yarn test:*)",
"Bash(yarn test-www:*)",
"Bash(yarn test-classic:*)",
"Bash(yarn test-stable:*)",
"Bash(yarn linc:*)",
"Bash(yarn lint:*)",
"Bash(yarn flow:*)",
"Bash(yarn prettier:*)",
"Bash(yarn build:*)",
"Bash(yarn extract-errors:*)",
"Bash(yarn flags:*)"
],
"deny": [
"Bash(yarn download-build:*)",
"Bash(yarn download-build-for-head:*)",
"Bash(npm:*)",
"Bash(pnpm:*)",
"Bash(bun:*)",
"Bash(npx:*)"
]
}
}
================================================
FILE: .claude/skills/extract-errors/SKILL.md
================================================
---
name: extract-errors
description: Use when adding new error messages to React, or seeing "unknown error code" warnings.
---
# Extract Error Codes
## Instructions
1. Run `yarn extract-errors`
2. Report if any new errors need codes assigned
3. Check if error codes are up to date
================================================
FILE: .claude/skills/feature-flags/SKILL.md
================================================
---
name: feature-flags
description: Use when feature flag tests fail, flags need updating, understanding @gate pragmas, debugging channel-specific test failures, or adding new flags to React.
---
# React Feature Flags
## Flag Files
| File | Purpose |
|------|---------|
| `packages/shared/ReactFeatureFlags.js` | Default flags (canary), `__EXPERIMENTAL__` overrides |
| `packages/shared/forks/ReactFeatureFlags.www.js` | www channel, `__VARIANT__` overrides |
| `packages/shared/forks/ReactFeatureFlags.native-fb.js` | React Native, `__VARIANT__` overrides |
| `packages/shared/forks/ReactFeatureFlags.test-renderer.js` | Test renderer |
## Gating Tests
### `@gate` pragma (test-level)
Use when the feature is completely unavailable without the flag:
```javascript
// @gate enableViewTransition
it('supports view transitions', () => {
// This test only runs when enableViewTransition is true
// and is SKIPPED (not failed) when false
});
```
### `gate()` inline (assertion-level)
Use when the feature exists but behavior differs based on flag:
```javascript
it('renders component', async () => {
await act(() => root.render(<App />));
if (gate(flags => flags.enableNewBehavior)) {
expect(container.textContent).toBe('new output');
} else {
expect(container.textContent).toBe('legacy output');
}
});
```
## Adding a New Flag
1. Add to `ReactFeatureFlags.js` with default value
2. Add to each fork file (`*.www.js`, `*.native-fb.js`, etc.)
3. If it should vary in www/RN, set to `__VARIANT__` in the fork file
4. Gate tests with `@gate flagName` or inline `gate()`
## Checking Flag States
Use `/flags` to view states across channels. See the `flags` skill for full command options.
## `__VARIANT__` Flags (GKs)
Flags set to `__VARIANT__` simulate gatekeepers - tested twice (true and false):
```bash
/test www <pattern> # __VARIANT__ = true
/test www variant false <pattern> # __VARIANT__ = false
```
## Debugging Channel-Specific Failures
1. Run `/flags --diff <channel1> <channel2>` to compare values
2. Check `@gate` conditions - test may be gated to specific channels
3. Run `/test <channel> <pattern>` to isolate the failure
4. Verify flag exists in all fork files if newly added
## Common Mistakes
- **Forgetting both variants** - Always test `www` AND `www variant false` for `__VARIANT__` flags
- **Using @gate for behavior differences** - Use inline `gate()` if both paths should run
- **Missing fork files** - New flags must be added to ALL fork files, not just the main one
- **Wrong gate syntax** - It's `gate(flags => flags.name)`, not `gate('name')`
================================================
FILE: .claude/skills/fix/SKILL.md
================================================
---
name: fix
description: Use when you have lint errors, formatting issues, or before committing code to ensure it passes CI.
---
# Fix Lint and Formatting
## Instructions
1. Run `yarn prettier` to fix formatting
2. Run `yarn linc` to check for remaining lint issues
3. Report any remaining manual fixes needed
## Common Mistakes
- **Running prettier on wrong files** - `yarn prettier` only formats changed files
- **Ignoring linc errors** - These will fail CI, fix them before committing
================================================
FILE: .claude/skills/flags/SKILL.md
================================================
---
name: flags
description: Use when you need to check feature flag states, compare channels, or debug why a feature behaves differently across release channels.
---
# Feature Flags
Arguments:
- $ARGUMENTS: Optional flags
## Options
| Option | Purpose |
|--------|---------|
| (none) | Show all flags across all channels |
| `--diff <ch1> <ch2>` | Compare flags between channels |
| `--cleanup` | Show flags grouped by cleanup status |
| `--csv` | Output in CSV format |
## Channels
- `www`, `www-modern` - Meta internal
- `canary`, `next`, `experimental` - OSS channels
- `rn`, `rn-fb`, `rn-next` - React Native
## Legend
✅ enabled, ❌ disabled, 🧪 `__VARIANT__`, 📊 profiling-only
## Instructions
1. Run `yarn flags $ARGUMENTS`
2. Explain the output to the user
3. For --diff, highlight meaningful differences
## Common Mistakes
- **Forgetting `__VARIANT__` flags** - These are tested both ways in www; check both variants
- **Comparing wrong channels** - Use `--diff` to see exact differences
================================================
FILE: .claude/skills/flow/SKILL.md
================================================
---
name: flow
description: Use when you need to run Flow type checking, or when seeing Flow type errors in React code.
---
# Flow Type Checking
Arguments:
- $ARGUMENTS: Renderer to check (default: dom-node)
## Renderers
| Renderer | When to Use |
|----------|-------------|
| `dom-node` | Default, recommended for most changes |
| `dom-browser` | Browser-specific DOM code |
| `native` | React Native |
| `fabric` | React Native Fabric |
## Instructions
1. Run `yarn flow $ARGUMENTS` (use `dom-node` if no argument)
2. Report type errors with file locations
3. For comprehensive checking (slow), use `yarn flow-ci`
## Common Mistakes
- **Running without a renderer** - Always specify or use default `dom-node`
- **Ignoring suppressions** - Check if `$FlowFixMe` comments are masking real issues
- **Missing type imports** - Ensure types are imported from the correct package
================================================
FILE: .claude/skills/test/SKILL.md
================================================
---
name: test
description: Use when you need to run tests for React core. Supports source, www, stable, and experimental channels.
---
Run tests for the React codebase.
Arguments:
- $ARGUMENTS: Channel, flags, and test pattern
Usage Examples:
- `/test ReactFiberHooks` - Run with source channel (default)
- `/test experimental ReactFiberHooks` - Run with experimental channel
- `/test www ReactFiberHooks` - Run with www-modern channel
- `/test www variant false ReactFiberHooks` - Test __VARIANT__=false
- `/test stable ReactFiberHooks` - Run with stable channel
- `/test classic ReactFiberHooks` - Run with www-classic channel
- `/test watch ReactFiberHooks` - Run in watch mode (TDD)
Release Channels:
- `(default)` - Source/canary channel, uses ReactFeatureFlags.js defaults
- `experimental` - Source/experimental channel with __EXPERIMENTAL__ flags = true
- `www` - www-modern channel with __VARIANT__ flags = true
- `www variant false` - www channel with __VARIANT__ flags = false
- `stable` - What ships to npm
- `classic` - Legacy www-classic (rarely needed)
Instructions:
1. Parse channel from arguments (default: source)
2. Map to yarn command:
- (default) → `yarn test --silent --no-watchman <pattern>`
- experimental → `yarn test -r=experimental --silent --no-watchman <pattern>`
- stable → `yarn test-stable --silent --no-watchman <pattern>`
- classic → `yarn test-classic --silent --no-watchman <pattern>`
- www → `yarn test-www --silent --no-watchman <pattern>`
- www variant false → `yarn test-www --variant=false --silent --no-watchman <pattern>`
3. Report test results and any failures
Hard Rules:
1. **Use --silent to see failures** - This limits the test output to only failures.
2. **Use --no-watchman** - This is a common failure in sandboxing.
Common Mistakes:
- **Running without a pattern** - Runs ALL tests, very slow. Always specify a pattern.
- **Forgetting both www variants** - Test `www` AND `www variant false` for `__VARIANT__` flags.
- **Test skipped unexpectedly** - Check for `@gate` pragma; see `feature-flags` skill.
================================================
FILE: .claude/skills/verify/SKILL.md
================================================
---
name: verify
description: Use when you want to validate changes before committing, or when you need to check all React contribution requirements.
---
# Verification
Run all verification steps.
Arguments:
- $ARGUMENTS: Test pattern for the test step
## Instructions
Run these first in sequence:
1. Run `yarn prettier` - format code (stop if fails)
2. Run `yarn linc` - lint changed files (stop if fails)
Then run these with subagents in parallel:
1. Use `/flow` to type check (stop if fails)
2. Use `/test` to test changes in source (stop if fails)
3. Use `/test www` to test changes in www (stop if fails)
If all pass, show success summary. On failure, stop immediately and report the issue with suggested fixes.
================================================
FILE: .codesandbox/ci.json
================================================
{
"packages": ["packages/react", "packages/react-dom", "packages/react-server-dom-webpack", "packages/scheduler"],
"buildCommand": "download-build-in-codesandbox-ci",
"node": "20",
"publishDirectory": {
"react": "build/oss-experimental/react",
"react-dom": "build/oss-experimental/react-dom",
"react-server-dom-webpack": "build/oss-experimental/react-server-dom-webpack",
"scheduler": "build/oss-experimental/scheduler"
},
"sandboxes": ["new"],
"silent": true
}
================================================
FILE: .editorconfig
================================================
# https://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 80
[*.md]
max_line_length = 0
[COMMIT_EDITMSG]
max_line_length = 0
================================================
FILE: .eslintignore
================================================
# Third party
**/node_modules
# Not written by hand
packages/react-art/npm/lib
# Build products
build/
coverage/
fixtures/
scripts/bench/benchmarks/**/*.js
# React repository clone
scripts/bench/remote-repo/
# Compiler uses its own lint setup
compiler/
packages/react-devtools-core/dist
packages/react-devtools-extensions/chrome/build
packages/react-devtools-extensions/firefox/build
packages/react-devtools-extensions/shared/build
packages/react-devtools-extensions/src/ErrorTesterCompiled.js
packages/react-devtools-fusebox/dist
packages/react-devtools-inline/dist
packages/react-devtools-shared/src/hooks/__tests__/__source__/__compiled__/
packages/react-devtools-shared/src/hooks/__tests__/__source__/__untransformed__/
packages/react-devtools-shell/dist
packages/react-devtools-timeline/dist
packages/react-devtools-timeline/static
# Imported third-party Flow types
flow-typed/
================================================
FILE: .eslintrc.js
================================================
'use strict';
const {
es5Paths,
esNextPaths,
} = require('./scripts/shared/pathsByLanguageVersion');
const restrictedGlobals = require('confusing-browser-globals');
const OFF = 0;
const WARNING = 1;
const ERROR = 2;
module.exports = {
extends: ['prettier', 'plugin:jest/recommended'],
// Stop ESLint from looking for a configuration file in parent folders
root: true,
reportUnusedDisableDirectives: true,
plugins: [
'babel',
'ft-flow',
'jest',
'es',
'no-for-of-loops',
'no-function-declare-after-return',
'react',
'react-internal',
],
parser: 'hermes-eslint',
parserOptions: {
ecmaVersion: 9,
sourceType: 'script',
},
// We're stricter than the default config, mostly. We'll override a few rules
// and then enable some React specific ones.
rules: {
'ft-flow/array-style-complex-type': [OFF, 'verbose'],
'ft-flow/array-style-simple-type': [OFF, 'verbose'], // TODO should be WARNING
'ft-flow/boolean-style': ERROR,
'ft-flow/no-dupe-keys': ERROR,
'ft-flow/no-primitive-constructor-types': ERROR,
'ft-flow/no-types-missing-file-annotation': OFF, // TODO should be ERROR
'ft-flow/no-unused-expressions': ERROR,
// 'ft-flow/no-weak-types': WARNING,
// 'ft-flow/require-valid-file-annotation': ERROR,
'es/no-optional-chaining': ERROR,
'no-cond-assign': OFF,
'no-constant-condition': OFF,
'no-control-regex': OFF,
'no-debugger': ERROR,
'no-dupe-args': ERROR,
'no-dupe-keys': ERROR,
'no-duplicate-case': WARNING,
'no-empty-character-class': WARNING,
'no-empty': OFF,
'no-ex-assign': WARNING,
'no-extra-boolean-cast': WARNING,
'no-func-assign': ERROR,
'no-invalid-regexp': WARNING,
'no-irregular-whitespace': WARNING,
'no-negated-in-lhs': ERROR,
'no-obj-calls': ERROR,
'no-regex-spaces': WARNING,
'no-sparse-arrays': ERROR,
'no-unreachable': ERROR,
'use-isnan': ERROR,
'valid-jsdoc': OFF,
'block-scoped-var': OFF,
complexity: OFF,
'default-case': OFF,
'guard-for-in': OFF,
'no-alert': OFF,
'no-caller': ERROR,
'no-case-declarations': OFF,
'no-div-regex': OFF,
'no-else-return': OFF,
'no-empty-pattern': WARNING,
'no-eq-null': OFF,
'no-eval': ERROR,
'no-extend-native': WARNING,
'no-extra-bind': WARNING,
'no-fallthrough': WARNING,
'no-implicit-coercion': OFF,
'no-implied-eval': ERROR,
'no-invalid-this': OFF,
'no-iterator': OFF,
'no-labels': [ERROR, {allowLoop: true, allowSwitch: true}],
'no-lone-blocks': WARNING,
'no-loop-func': OFF,
'no-magic-numbers': OFF,
'no-multi-str': ERROR,
'no-native-reassign': [ERROR, {exceptions: ['Map', 'Set']}],
'no-new-func': ERROR,
'no-new': WARNING,
'no-new-wrappers': WARNING,
'no-octal-escape': WARNING,
'no-octal': WARNING,
'no-param-reassign': OFF,
'no-process-env': OFF,
'no-proto': ERROR,
'no-redeclare': OFF, // TODO should be WARNING?
'no-return-assign': OFF,
'no-script-url': ERROR,
'no-self-compare': WARNING,
'no-sequences': WARNING,
'no-throw-literal': ERROR,
'no-useless-call': WARNING,
'no-void': OFF,
'no-warning-comments': OFF,
'no-with': OFF,
radix: WARNING,
'vars-on-top': OFF,
yoda: OFF,
'init-declarations': OFF,
'no-catch-shadow': ERROR,
'no-delete-var': ERROR,
'no-label-var': WARNING,
'no-shadow-restricted-names': WARNING,
'no-undef-init': OFF,
'no-undef': ERROR,
'no-undefined': OFF,
'callback-return': OFF,
'global-require': OFF,
'handle-callback-err': OFF,
'no-mixed-requires': OFF,
'no-new-require': OFF,
'no-path-concat': OFF,
'no-process-exit': OFF,
'no-restricted-modules': OFF,
'no-sync': OFF,
camelcase: [OFF, {properties: 'always'}],
'consistent-this': [OFF, 'self'],
'func-names': OFF,
'func-style': [OFF, 'declaration'],
'id-length': OFF,
'id-match': OFF,
'max-depth': OFF,
'max-nested-callbacks': OFF,
'max-params': OFF,
'max-statements': OFF,
'new-cap': OFF,
'newline-after-var': OFF,
'no-array-constructor': ERROR,
'no-continue': OFF,
'no-inline-comments': OFF,
'no-lonely-if': OFF,
'no-negated-condition': OFF,
'no-nested-ternary': OFF,
'no-new-object': WARNING,
'no-plusplus': OFF,
'no-ternary': OFF,
'no-underscore-dangle': OFF,
'no-unneeded-ternary': WARNING,
'one-var': [WARNING, {initialized: 'never'}],
'operator-assignment': [WARNING, 'always'],
'require-jsdoc': OFF,
'sort-vars': OFF,
'spaced-comment': [
OFF,
'always',
{exceptions: ['jshint', 'jslint', 'eslint', 'global']},
],
'constructor-super': ERROR,
'no-class-assign': WARNING,
'no-const-assign': ERROR,
'no-dupe-class-members': ERROR,
'no-this-before-super': ERROR,
'object-shorthand': OFF,
'prefer-const': OFF,
'prefer-spread': OFF,
'prefer-reflect': OFF,
'prefer-template': OFF,
'require-yield': OFF,
'babel/generator-star-spacing': OFF,
'babel/new-cap': OFF,
'babel/array-bracket-spacing': OFF,
'babel/object-curly-spacing': OFF,
'babel/object-shorthand': OFF,
'babel/arrow-parens': OFF,
'babel/no-await-in-loop': OFF,
'babel/flow-object-type': OFF,
'react/display-name': OFF,
'react/forbid-prop-types': OFF,
'react/jsx-closing-bracket-location': OFF,
'react/jsx-curly-spacing': OFF,
'react/jsx-equals-spacing': WARNING,
'react/jsx-filename-extension': OFF,
'react/jsx-first-prop-new-line': OFF,
'react/jsx-handler-names': OFF,
'react/jsx-indent': OFF,
'react/jsx-indent-props': OFF,
'react/jsx-key': OFF,
'react/jsx-max-props-per-line': OFF,
'react/jsx-no-bind': OFF,
'react/jsx-no-duplicate-props': ERROR,
'react/jsx-no-literals': OFF,
'react/jsx-no-target-blank': OFF,
'react/jsx-pascal-case': OFF,
'react/jsx-sort-props': OFF,
'react/jsx-uses-vars': ERROR,
'react/no-comment-textnodes': OFF,
'react/no-danger': OFF,
'react/no-deprecated': OFF,
'react/no-did-mount-set-state': OFF,
'react/no-did-update-set-state': OFF,
'react/no-direct-mutation-state': OFF,
'react/no-multi-comp': OFF,
'react/no-render-return-value': OFF,
'react/no-set-state': OFF,
'react/no-string-refs': OFF,
'react/no-unknown-property': OFF,
'react/prefer-es6-class': OFF,
'react/prefer-stateless-function': OFF,
'react/prop-types': OFF,
'react/require-extension': OFF,
'react/require-optimization': OFF,
'react/require-render-return': OFF,
'react/sort-comp': OFF,
'react/sort-prop-types': OFF,
'accessor-pairs': OFF,
'brace-style': [ERROR, '1tbs'],
'consistent-return': OFF,
'dot-location': [ERROR, 'property'],
// We use console['error']() as a signal to not transform it:
'dot-notation': [ERROR, {allowPattern: '^(error|warn)$'}],
'eol-last': ERROR,
eqeqeq: [ERROR, 'allow-null'],
indent: OFF,
'jsx-quotes': [ERROR, 'prefer-double'],
'keyword-spacing': [ERROR, {after: true, before: true}],
'no-bitwise': OFF,
'no-console': OFF,
'no-inner-declarations': [ERROR, 'functions'],
'no-multi-spaces': ERROR,
'no-restricted-globals': [ERROR].concat(restrictedGlobals),
'no-restricted-syntax': [
ERROR,
'WithStatement',
{
selector: 'MemberExpression[property.name=/^(?:substring|substr)$/]',
message: 'Prefer string.slice() over .substring() and .substr().',
},
],
'no-shadow': ERROR,
'no-unused-vars': [ERROR, {args: 'none', ignoreRestSiblings: true}],
'no-use-before-define': OFF,
'no-useless-concat': OFF,
quotes: [ERROR, 'single', {avoidEscape: true, allowTemplateLiterals: true}],
'space-before-blocks': ERROR,
'space-before-function-paren': OFF,
'valid-typeof': [ERROR, {requireStringLiterals: true}],
// Flow fails with non-string literal keys
'no-useless-computed-key': OFF,
// We apply these settings to files that should run on Node.
// They can't use JSX or ES6 modules, and must be in strict mode.
// They can, however, use other ES6 features.
// (Note these rules are overridden later for source files.)
'no-var': ERROR,
strict: ERROR,
// Enforced by Prettier
// TODO: Prettier doesn't handle long strings or long comments. Not a big
// deal. But I turned it off because loading the plugin causes some obscure
// syntax error and it didn't seem worth investigating.
'max-len': OFF,
// React & JSX
// Our transforms set this automatically
'react/jsx-boolean-value': [ERROR, 'always'],
'react/jsx-no-undef': ERROR,
// We don't care to do this
'react/jsx-sort-prop-types': OFF,
'react/jsx-space-before-closing': ERROR,
'react/jsx-uses-react': ERROR,
'react/no-is-mounted': OFF,
// This isn't useful in our test code
'react/react-in-jsx-scope': ERROR,
'react/self-closing-comp': ERROR,
// We don't care to do this
'react/jsx-wrap-multilines': [
ERROR,
{declaration: false, assignment: false},
],
// Prevent for...of loops because they require a Symbol polyfill.
// You can disable this rule for code that isn't shipped (e.g. build scripts and tests).
'no-for-of-loops/no-for-of-loops': ERROR,
// Prevent function declarations after return statements
'no-function-declare-after-return/no-function-declare-after-return': ERROR,
// CUSTOM RULES
// the second argument of warning/invariant should be a literal string
'react-internal/no-primitive-constructors': ERROR,
'react-internal/safe-string-coercion': [
ERROR,
{isProductionUserAppCode: true},
],
'react-internal/warning-args': ERROR,
'react-internal/no-production-logging': ERROR,
},
overrides: [
{
// By default, anything error message that appears the packages directory
// must have a corresponding error code. The exceptions are defined
// in the next override entry.
files: ['packages/**/*.js'],
rules: {
'react-internal/prod-error-codes': ERROR,
},
},
{
// These are files where it's OK to have unminified error messages. These
// are environments where bundle size isn't a concern, like tests
// or Node.
files: [
'packages/react-dom/src/test-utils/**/*.js',
'packages/react-devtools-shared/**/*.js',
'packages/react-noop-renderer/**/*.js',
'packages/react-refresh/**/*.js',
'packages/react-server-dom-esm/**/*.js',
'packages/react-server-dom-webpack/**/*.js',
'packages/react-server-dom-turbopack/**/*.js',
'packages/react-server-dom-parcel/**/*.js',
'packages/react-server-dom-fb/**/*.js',
'packages/react-server-dom-unbundled/**/*.js',
'packages/react-test-renderer/**/*.js',
'packages/react-debug-tools/**/*.js',
'packages/react-devtools-extensions/**/*.js',
'packages/react-devtools-timeline/**/*.js',
'packages/react-native-renderer/**/*.js',
'packages/eslint-plugin-react-hooks/**/*.js',
'packages/jest-react/**/*.js',
'packages/internal-test-utils/**/*.js',
'packages/**/__tests__/*.js',
'packages/**/npm/*.js',
],
rules: {
'react-internal/prod-error-codes': OFF,
},
},
{
// We apply these settings to files that we ship through npm.
// They must be ES5.
files: es5Paths,
parser: 'espree',
parserOptions: {
ecmaVersion: 5,
sourceType: 'script',
},
rules: {
'no-var': OFF,
strict: ERROR,
},
},
{
// We apply these settings to the source files that get compiled.
// They can use all features including JSX (but shouldn't use `var`).
files: esNextPaths,
parser: 'hermes-eslint',
parserOptions: {
ecmaVersion: 8,
sourceType: 'module',
},
rules: {
'no-var': ERROR,
'prefer-const': ERROR,
strict: OFF,
},
},
{
files: ['**/__tests__/*.js'],
rules: {
// https://github.com/jest-community/eslint-plugin-jest
// Meh, who cares.
'jest/consistent-test-it': OFF,
// Meh, we have a lot of these, who cares.
'jest/no-alias-methods': OFF,
// We do conditions based on feature flags.
'jest/no-conditional-expect': OFF,
// We have our own assertion helpers.
'jest/expect-expect': OFF,
// Lame rule that fires in itRender helpers or in render methods.
'jest/no-standalone-expect': OFF,
},
},
{
// Rules specific to test setup helper files.
files: [
'**/setupTests.js',
'**/setupEnv.js',
'**/jest/TestFlags.js',
'**/dom-event-testing-library/testHelpers.js',
'**/utils/ReactDOMServerIntegrationTestUtils.js',
'**/babel/transform-react-version-pragma.js',
'**/babel/transform-test-gate-pragma.js',
],
rules: {
// Some helpers intentionally focus tests.
'jest/no-focused-tests': OFF,
// Test fn helpers don't use static text names.
'jest/valid-title': OFF,
// We have our own assertion helpers.
'jest/expect-expect': OFF,
// Some helpers intentionally disable tests.
'jest/no-disabled-tests': OFF,
// Helpers export text function helpers.
'jest/no-export': OFF,
// The examples in comments trigger false errors.
'jest/no-commented-out-tests': OFF,
},
},
{
files: ['**/jest/TestFlags.js'],
rules: {
// The examples in comments trigger false errors.
'jest/no-commented-out-tests': OFF,
},
},
{
files: [
'**/__tests__/**/*.js',
'scripts/**/*.js',
'packages/*/npm/**/*.js',
'packages/dom-event-testing-library/**/*.js',
'packages/react-devtools*/**/*.js',
'dangerfile.js',
'fixtures',
'packages/react-dom/src/test-utils/*.js',
],
rules: {
'es/no-optional-chaining': OFF,
'react-internal/no-production-logging': OFF,
'react-internal/warning-args': OFF,
'react-internal/safe-string-coercion': [
ERROR,
{isProductionUserAppCode: false},
],
},
},
{
files: ['scripts/eslint-rules/*.js'],
plugins: ['eslint-plugin'],
rules: {
'eslint-plugin/prefer-object-rule': ERROR,
'eslint-plugin/require-meta-fixable': [
ERROR,
{catchNoFixerButFixableProperty: true},
],
'eslint-plugin/require-meta-has-suggestions': ERROR,
},
},
{
files: ['packages/react-native-renderer/**/*.js'],
globals: {
nativeFabricUIManager: 'readonly',
RN$enableMicrotasksInReact: 'readonly',
},
},
{
files: ['packages/react-server-dom-webpack/**/*.js'],
globals: {
__webpack_chunk_load__: 'readonly',
__webpack_get_script_filename__: 'readonly',
__webpack_require__: 'readonly',
},
},
{
files: ['packages/react-server-dom-turbopack/**/*.js'],
globals: {
__turbopack_load_by_url__: 'readonly',
__turbopack_require__: 'readonly',
},
},
{
files: ['packages/react-server-dom-parcel/**/*.js'],
globals: {
parcelRequire: 'readonly',
},
},
{
files: ['packages/scheduler/**/*.js'],
globals: {
TaskController: 'readonly',
},
},
{
files: [
'packages/react-devtools-extensions/**/*.js',
'packages/react-devtools-shared/src/devtools/views/**/*.js',
'packages/react-devtools-shared/src/hook.js',
'packages/react-devtools-shared/src/backend/console.js',
'packages/react-devtools-shared/src/backend/fiber/renderer.js',
'packages/react-devtools-shared/src/backend/shared/DevToolsComponentStackFrame.js',
'packages/react-devtools-shared/src/frontend/utils/withPermissionsCheck.js',
],
globals: {
__IS_CHROME__: 'readonly',
__IS_FIREFOX__: 'readonly',
__IS_EDGE__: 'readonly',
__IS_NATIVE__: 'readonly',
__IS_INTERNAL_VERSION__: 'readonly',
chrome: 'readonly',
},
},
{
files: ['packages/react-devtools-shared/**/*.js'],
globals: {
__IS_INTERNAL_VERSION__: 'readonly',
},
},
{
files: ['packages/react-devtools-*/**/*.js'],
excludedFiles: '**/__tests__/**/*.js',
plugins: ['eslint-plugin-react-hooks-published'],
rules: {
'react-hooks-published/rules-of-hooks': ERROR,
},
},
{
files: ['packages/eslint-plugin-react-hooks/src/**/*'],
extends: ['plugin:@typescript-eslint/recommended'],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'eslint-plugin'],
rules: {
'@typescript-eslint/no-explicit-any': OFF,
'@typescript-eslint/no-non-null-assertion': OFF,
'@typescript-eslint/array-type': [ERROR, {default: 'generic'}],
'es/no-optional-chaining': OFF,
'eslint-plugin/prefer-object-rule': ERROR,
'eslint-plugin/require-meta-fixable': [
ERROR,
{catchNoFixerButFixableProperty: true},
],
'eslint-plugin/require-meta-has-suggestions': ERROR,
},
},
],
env: {
browser: true,
es6: true,
node: true,
jest: true,
},
globals: {
$Flow$ModuleRef: 'readonly',
$FlowFixMe: 'readonly',
$Keys: 'readonly',
$NonMaybeType: 'readonly',
$ReadOnly: 'readonly',
$ReadOnlyArray: 'readonly',
$ArrayBufferView: 'readonly',
$Shape: 'readonly',
CallSite: 'readonly',
ConsoleTask: 'readonly', // TOOD: Figure out what the official name of this will be.
ReturnType: 'readonly',
AggregateError: 'readonly',
AnimationFrameID: 'readonly',
WeakRef: 'readonly',
// For Flow type annotation. Only `BigInt` is valid at runtime.
bigint: 'readonly',
BigInt: 'readonly',
BigInt64Array: 'readonly',
BigUint64Array: 'readonly',
CacheType: 'readonly',
Class: 'readonly',
ClientRect: 'readonly',
CopyInspectedElementPath: 'readonly',
DOMHighResTimeStamp: 'readonly',
EventListener: 'readonly',
Iterable: 'readonly',
AsyncIterable: 'readonly',
$AsyncIterable: 'readonly',
$AsyncIterator: 'readonly',
Iterator: 'readonly',
AsyncIterator: 'readonly',
IntervalID: 'readonly',
IteratorResult: 'readonly',
JSONValue: 'readonly',
JSResourceReference: 'readonly',
mixin$Animatable: 'readonly',
MouseEventHandler: 'readonly',
NavigateEvent: 'readonly',
Partial: 'readonly',
PerformanceMeasureOptions: 'readonly',
PropagationPhases: 'readonly',
PropertyDescriptor: 'readonly',
PropertyDescriptorMap: 'readonly',
Proxy$traps: 'readonly',
React$Component: 'readonly',
React$Config: 'readonly',
React$Context: 'readonly',
React$Element: 'readonly',
React$ElementConfig: 'readonly',
React$ElementProps: 'readonly',
React$ElementRef: 'readonly',
React$ElementType: 'readonly',
React$Key: 'readonly',
React$Node: 'readonly',
React$Portal: 'readonly',
React$Ref: 'readonly',
React$RefSetter: 'readonly',
ReadableStreamController: 'readonly',
ReadableStreamReader: 'readonly',
RequestInfo: 'readonly',
RequestOptions: 'readonly',
StoreAsGlobal: 'readonly',
symbol: 'readonly',
SyntheticEvent: 'readonly',
SyntheticMouseEvent: 'readonly',
SyntheticPointerEvent: 'readonly',
Thenable: 'readonly',
TimeoutID: 'readonly',
WheelEventHandler: 'readonly',
FinalizationRegistry: 'readonly',
Exclude: 'readonly',
Omit: 'readonly',
Pick: 'readonly',
Keyframe: 'readonly',
PropertyIndexedKeyframes: 'readonly',
KeyframeAnimationOptions: 'readonly',
GetAnimationsOptions: 'readonly',
ScrollTimeline: 'readonly',
EventListenerOptionsOrUseCapture: 'readonly',
FocusOptions: 'readonly',
OptionalEffectTiming: 'readonly',
__REACT_ROOT_PATH_TEST__: 'readonly',
spyOnDev: 'readonly',
spyOnDevAndProd: 'readonly',
spyOnProd: 'readonly',
__DEV__: 'readonly',
__EXPERIMENTAL__: 'readonly',
__EXTENSION__: 'readonly',
__PROFILE__: 'readonly',
__TEST__: 'readonly',
__VARIANT__: 'readonly',
__unmockReact: 'readonly',
gate: 'readonly',
trustedTypes: 'readonly',
IS_REACT_ACT_ENVIRONMENT: 'readonly',
AsyncLocalStorage: 'readonly',
async_hooks: 'readonly',
globalThis: 'readonly',
navigation: 'readonly',
},
};
================================================
FILE: .git-blame-ignore-revs
================================================
c998bb1ed4b3285398c9c7797135d3f060243c6a
fd2b3e13d330a4559f5aa21462e1cb2cbbcf144b
================================================
FILE: .gitattributes
================================================
* text=auto
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: "🐛 Bug Report"
about: Report a reproducible bug or regression.
title: 'Bug: '
labels: 'Status: Unconfirmed'
---
<!--
Please provide a clear and concise description of what the bug is. Include
screenshots if needed. Please test using the latest version of the relevant
React packages to make sure your issue has not already been fixed.
-->
React version:
## Steps To Reproduce
1.
2.
<!--
Your bug will get fixed much faster if we can run your code and it doesn't
have dependencies other than React. Issues without reproduction steps or
code examples may be immediately closed as not actionable.
-->
Link to code example:
<!--
Please provide a CodeSandbox (https://codesandbox.io/s/new), a link to a
repository on GitHub, or provide a minimal code example that reproduces the
problem. You may provide a screenshot of the application if you think it is
relevant to your bug report. Here are some tips for providing a minimal
example: https://stackoverflow.com/help/mcve.
-->
## The current behavior
## The expected behavior
================================================
FILE: .github/ISSUE_TEMPLATE/compiler_bug_report.yml
================================================
name: "⚛️ ✨ Compiler bug report"
description: "Report a problem with React Compiler. Please provide enough information that we can reproduce the problem."
title: "[Compiler Bug]: "
labels: ["Component: Optimizing Compiler", "Type: Bug", "Status: Unconfirmed"]
body:
- type: checkboxes
attributes:
label: What kind of issue is this?
description: |
Please indicate if this issue affects the following tools provided by React Compiler.
options:
- label: React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)
- label: babel-plugin-react-compiler (build issue installing or using the Babel plugin)
- label: eslint-plugin-react-hooks (build issue installing or using the eslint plugin)
- label: react-compiler-healthcheck (build issue installing or using the healthcheck script)
- type: input
attributes:
label: Link to repro
description: |
Please provide a repro by either sharing a [Playground link](https://playground.react.dev), or a public GitHub repo so the React team can reproduce the error being reported. Please do not share localhost links!
placeholder: |
e.g. public GitHub repo, or Playground link
validations:
required: true
- type: textarea
attributes:
label: Repro steps
description: |
What were you doing when the bug happened? Detailed information helps maintainers reproduce and fix bugs.
Issues filed without repro steps will be closed.
placeholder: |
Example bug report:
1. Log in with username/password
2. Click "Messages" on the left menu
3. Open any message in the list
validations:
required: true
- type: dropdown
attributes:
label: How often does this bug happen?
description: |
Following the repro steps above, how easily are you able to reproduce this bug?
options:
- Every time
- Often
- Sometimes
- Only once
validations:
required: true
- type: input
attributes:
label: What version of React are you using?
description: |
Please provide your React version in the app where this issue occurred.
validations:
required: true
- type: input
attributes:
label: What version of React Compiler are you using?
description: |
Please provide the exact React Compiler version in the app where this issue occurred.
validations:
required: true
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: 📃 Documentation Issue
url: https://github.com/reactjs/react.dev/issues/new/choose
about: This issue tracker is not for documentation issues. Please file documentation issues here.
- name: 🤔 Questions and Help
url: https://reactjs.org/community/support.html
about: This issue tracker is not for support questions. Please refer to the React community's help and discussion forums.
================================================
FILE: .github/ISSUE_TEMPLATE/devtools_bug_report.yml
================================================
name: "⚛️ 🛠 DevTools bug report"
description: "Report a problem with React DevTools. Please provide enough information that we can reproduce the problem."
title: "[DevTools Bug]: "
labels: ["Component: Developer Tools", "Type: Bug", "Status: Unconfirmed"]
body:
- type: input
attributes:
label: Website or app
description: |
Which website or app were you using when the bug happened?
This should be a public URL, GitHub repo, or Code Sandbox app so the React team can reproduce the error being reported. (Please no localhost URLs.)
placeholder: |
e.g. website URL, public GitHub repo, or Code Sandbox app
validations:
required: true
- type: textarea
attributes:
label: Repro steps
description: |
What were you doing on the website or app when the bug happened? Detailed information helps maintainers reproduce and fix bugs.
Issues filed without repro steps will be closed.
placeholder: |
Example bug report:
1. Log in with username/password
2. Click "Messages" on the left menu
3. Open any message in the list
validations:
required: true
- type: dropdown
attributes:
label: How often does this bug happen?
description: |
Following the repro steps above, how easily are you able to reproduce this bug?
options:
- Every time
- Often
- Sometimes
- Only once
validations:
required: true
- type: input
id: automated_package
attributes:
label: DevTools package (automated)
description: |
Please do not edit this field.
- type: input
id: automated_version
attributes:
label: DevTools version (automated)
description: |
Please do not edit this field.
- type: input
id: automated_error_message
attributes:
label: Error message (automated)
description: |
Please do not edit this field.
- type: textarea
id: automated_call_stack
attributes:
label: Error call stack (automated)
description: |
Please do not edit this field.
render: text
- type: textarea
id: automated_component_stack
attributes:
label: Error component stack (automated)
description: |
Please do not edit this field.
render: text
- type: textarea
id: automated_github_query_string
attributes:
label: GitHub query string (automated)
description: |
Please do not edit this field.
render: text
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thanks for submitting a pull request!
We appreciate you spending the time to work on these changes. Please provide enough information so that others can review your pull request. The three fields below are mandatory.
Before submitting a pull request, please make sure the following is done:
1. Fork [the repository](https://github.com/facebook/react) and create your branch from `main`.
2. Run `yarn` in the repository root.
3. If you've fixed a bug or added code that should be tested, add tests!
4. Ensure the test suite passes (`yarn test`). Tip: `yarn test --watch TestName` is helpful in development.
5. Run `yarn test --prod` to test in the production environment. It supports the same options as `yarn test`.
6. If you need a debugger, run `yarn test --debug --watch TestName`, open `chrome://inspect`, and press "Inspect".
7. Format your code with [prettier](https://github.com/prettier/prettier) (`yarn prettier`).
8. Make sure your code lints (`yarn lint`). Tip: `yarn linc` to only check changed files.
9. Run the [Flow](https://flowtype.org/) type checks (`yarn flow`).
10. If you haven't already, complete the CLA.
Learn more about contributing: https://reactjs.org/docs/how-to-contribute.html
-->
## Summary
<!--
Explain the **motivation** for making this change. What existing problem does the pull request solve?
-->
## How did you test this change?
<!--
Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes the user interface.
How exactly did you verify that your PR solves the issue you wanted to solve?
If you leave this empty, your PR will very likely be closed.
-->
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "npm"
directories:
- "/fixtures/*"
schedule:
interval: "monthly"
open-pull-requests-limit: 0
ignore:
- dependency-name: "*"
================================================
FILE: .github/workflows/compiler_discord_notify.yml
================================================
name: (Compiler) Discord Notify
on:
pull_request_target:
types: [opened, ready_for_review]
paths:
- compiler/**
- .github/workflows/compiler_**.yml
permissions: {}
jobs:
check_access:
if: ${{ github.event.pull_request.draft == false }}
runs-on: ubuntu-latest
outputs:
is_member_or_collaborator: ${{ steps.check_is_member_or_collaborator.outputs.is_member_or_collaborator }}
steps:
- run: echo ${{ github.event.pull_request.author_association }}
- name: Check is member or collaborator
id: check_is_member_or_collaborator
if: ${{ github.event.pull_request.author_association == 'MEMBER' || github.event.pull_request.author_association == 'COLLABORATOR' }}
run: echo "is_member_or_collaborator=true" >> "$GITHUB_OUTPUT"
check_maintainer:
if: ${{ needs.check_access.outputs.is_member_or_collaborator == 'true' || needs.check_access.outputs.is_member_or_collaborator == true }}
needs: [check_access]
uses: facebook/react/.github/workflows/shared_check_maintainer.yml@main
permissions:
# Used by check_maintainer
contents: read
with:
actor: ${{ github.event.pull_request.user.login }}
notify:
if: ${{ needs.check_maintainer.outputs.is_core_team == 'true' }}
needs: check_maintainer
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.COMPILER_DISCORD_WEBHOOK_URL }}
embed-author-name: ${{ github.event.pull_request.user.login }}
embed-author-url: ${{ github.event.pull_request.user.html_url }}
embed-author-icon-url: ${{ github.event.pull_request.user.avatar_url }}
embed-title: '#${{ github.event.number }} (+${{github.event.pull_request.additions}} -${{github.event.pull_request.deletions}}): ${{ github.event.pull_request.title }}'
embed-description: ${{ github.event.pull_request.body }}
embed-url: ${{ github.event.pull_request.html_url }}
================================================
FILE: .github/workflows/compiler_playground.yml
================================================
name: (Compiler) Playground
on:
push:
branches: [main]
pull_request:
paths:
- compiler/**
- .github/workflows/compiler_playground.yml
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
defaults:
run:
working-directory: compiler/apps/playground
jobs:
playground:
name: Test playground
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: compiler/**/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: compiler-and-playground-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/**/yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
working-directory: compiler
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Check Playwright version
id: playwright_version
run: echo "playwright_version=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//' | head -1)" >> "$GITHUB_OUTPUT"
- name: Cache Playwright Browsers for version ${{ steps.playwright_version.outputs.playwright_version }}
id: cache_playwright_browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-v6-${{ runner.arch }}-${{ runner.os }}-${{ steps.playwright_version.outputs.playwright_version }}
- run: npx playwright install --with-deps chromium
if: steps.cache_playwright_browsers.outputs.cache-hit != 'true'
- run: CI=true yarn test
- run: ls -R test-results
if: '!cancelled()'
- name: Archive test results
if: '!cancelled()'
uses: actions/upload-artifact@v4
with:
name: test-results
path: compiler/apps/playground/test-results
if-no-files-found: ignore
================================================
FILE: .github/workflows/compiler_prereleases.yml
================================================
name: (Compiler) Publish Prereleases
on:
workflow_call:
inputs:
commit_sha:
required: true
default: ''
type: string
release_channel:
required: true
type: string
dist_tag:
required: true
type: string
version_name:
required: true
type: string
tag_version:
required: false
type: string
dry_run:
required: false
type: boolean
secrets:
NPM_TOKEN:
required: true
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
defaults:
run:
working-directory: compiler
jobs:
publish_prerelease:
name: Publish prelease (${{ inputs.release_channel }}) ${{ inputs.commit_sha }} @${{ inputs.dist_tag }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: compiler-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- if: inputs.dry_run == true
name: Publish packages to npm (dry run)
run: |
cp ./scripts/release/ci-npmrc ~/.npmrc
scripts/release/publish.js --frfr --debug --ci --versionName=${{ inputs.version_name }} --tag=${{ inputs.dist_tag }} ${{ inputs.tag_version && format('--tagVersion={0}', inputs.tag_version) || '' }}
- if: inputs.dry_run != true
name: Publish packages to npm
run: |
cp ./scripts/release/ci-npmrc ~/.npmrc
scripts/release/publish.js --frfr --ci --versionName=${{ inputs.version_name }} --tag=${{ inputs.dist_tag }} ${{ inputs.tag_version && format('--tagVersion={0}', inputs.tag_version) || '' }}
================================================
FILE: .github/workflows/compiler_prereleases_manual.yml
================================================
name: (Compiler) Publish Prereleases Manual
on:
workflow_dispatch:
inputs:
prerelease_commit_sha:
required: false
release_channel:
required: true
type: string
dist_tag:
required: true
type: string
version_name:
required: true
type: string
tag_version:
required: false
type: string
dry_run:
required: false
type: boolean
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
publish_prerelease_experimental:
name: Publish to Experimental channel
uses: facebook/react/.github/workflows/compiler_prereleases.yml@main
with:
commit_sha: ${{ inputs.prerelease_commit_sha || github.sha }}
release_channel: ${{ inputs.release_channel }}
dist_tag: ${{ inputs.dist_tag }}
version_name: ${{ inputs.version_name }}
tag_version: ${{ inputs.tag_version }}
dry_run: ${{ inputs.dry_run }}
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
================================================
FILE: .github/workflows/compiler_prereleases_nightly.yml
================================================
name: (Compiler) Publish Prereleases Nightly
on:
schedule:
# At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and Fri
- cron: 10 16 * * 1,2,3,4,5
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
publish_prerelease_experimental:
name: Publish to Experimental channel
uses: facebook/react/.github/workflows/compiler_prereleases.yml@main
with:
commit_sha: ${{ github.sha }}
release_channel: experimental
dist_tag: experimental
version_name: '0.0.0'
dry_run: false
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
================================================
FILE: .github/workflows/compiler_typescript.yml
================================================
name: (Compiler) TypeScript
on:
push:
branches: [main]
pull_request:
paths:
- compiler/**
- .github/workflows/compiler_typescript.yml
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
defaults:
run:
working-directory: compiler
jobs:
discover_yarn_workspaces:
name: Discover yarn workspaces
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- id: set-matrix
run: echo "matrix=$(find packages -mindepth 1 -maxdepth 1 -type d | sed 's!packages/!!g' | tr '\n' ',' | sed s/.$// | jq -Rsc '. / "," - [""]')" >> $GITHUB_OUTPUT
# Hardcoded to improve parallelism
lint:
name: Lint babel-plugin-react-compiler
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: compiler-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn workspace babel-plugin-react-compiler lint
# Hardcoded to improve parallelism
jest:
name: Jest babel-plugin-react-compiler
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: compiler-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn workspace babel-plugin-react-compiler jest
test:
name: Test ${{ matrix.workspace_name }}
needs: discover_yarn_workspaces
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
workspace_name: ${{ fromJSON(needs.discover_yarn_workspaces.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: compiler-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('compiler/yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: xvfb-run -a yarn workspace ${{ matrix.workspace_name }} test
if: runner.os == 'Linux' && matrix.workspace_name == 'react-forgive'
- run: yarn workspace ${{ matrix.workspace_name }} test
if: matrix.workspace_name != 'react-forgive'
================================================
FILE: .github/workflows/devtools_discord_notify.yml
================================================
name: (DevTools) Discord Notify
on:
pull_request_target:
types: [opened, ready_for_review]
paths:
- packages/react-devtools**
- .github/workflows/devtools_**.yml
permissions: {}
jobs:
check_access:
if: ${{ github.event.pull_request.draft == false }}
runs-on: ubuntu-latest
outputs:
is_member_or_collaborator: ${{ steps.check_is_member_or_collaborator.outputs.is_member_or_collaborator }}
steps:
- run: echo ${{ github.event.pull_request.author_association }}
- name: Check is member or collaborator
id: check_is_member_or_collaborator
if: ${{ github.event.pull_request.author_association == 'MEMBER' || github.event.pull_request.author_association == 'COLLABORATOR' }}
run: echo "is_member_or_collaborator=true" >> "$GITHUB_OUTPUT"
check_maintainer:
if: ${{ needs.check_access.outputs.is_member_or_collaborator == 'true' || needs.check_access.outputs.is_member_or_collaborator == true }}
needs: [check_access]
uses: facebook/react/.github/workflows/shared_check_maintainer.yml@main
permissions:
# Used by check_maintainer
contents: read
with:
actor: ${{ github.event.pull_request.user.login }}
notify:
if: ${{ needs.check_maintainer.outputs.is_core_team == 'true' }}
needs: check_maintainer
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.DEVTOOLS_DISCORD_WEBHOOK_URL }}
embed-author-name: ${{ github.event.pull_request.user.login }}
embed-author-url: ${{ github.event.pull_request.user.html_url }}
embed-author-icon-url: ${{ github.event.pull_request.user.avatar_url }}
embed-title: '#${{ github.event.number }} (+${{github.event.pull_request.additions}} -${{github.event.pull_request.deletions}}): ${{ github.event.pull_request.title }}'
embed-description: ${{ github.event.pull_request.body }}
embed-url: ${{ github.event.pull_request.html_url }}
================================================
FILE: .github/workflows/devtools_regression_tests.yml
================================================
name: (DevTools) Regression Tests
on:
schedule:
- cron: 0 0 * * *
workflow_dispatch:
inputs:
commit_sha:
required: false
type: string
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
download_build:
name: Download base build
runs-on: ubuntu-latest
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd scripts/release install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Download react-devtools artifacts for base revision
run: |
git fetch origin main
GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=${{ inputs.commit_sha || '$(git rev-parse origin/main)' }}
- name: Display structure of build
run: ls -R build
- name: Archive build
uses: actions/upload-artifact@v4
with:
name: build
path: build
if-no-files-found: error
build_devtools_and_process_artifacts:
name: Build DevTools and process artifacts
needs: download_build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
name: build
path: build
- run: ./scripts/ci/pack_and_store_devtools_artifacts.sh
env:
RELEASE_CHANNEL: experimental
- name: Display structure of build
run: ls -R build
- name: Archive devtools build
uses: actions/upload-artifact@v4
with:
name: react-devtools
path: build/devtools
if-no-files-found: error
# Simplifies getting the extension for local testing
- name: Archive chrome extension
uses: actions/upload-artifact@v4
with:
name: react-devtools-chrome-extension
path: build/devtools/chrome-extension.zip
if-no-files-found: error
- name: Archive firefox extension
uses: actions/upload-artifact@v4
with:
name: react-devtools-firefox-extension
path: build/devtools/firefox-extension.zip
if-no-files-found: error
run_devtools_tests_for_versions:
name: Run DevTools tests for versions
needs: build_devtools_and_process_artifacts
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version:
- "16.0"
- "16.5" # schedule package
- "16.8" # hooks
- "17.0"
- "18.0"
- "18.2" # compiler polyfill
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore all archived build artifacts
uses: actions/download-artifact@v4
- name: Display structure of build
run: ls -R build
- run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }} --replaceBuild
- run: node ./scripts/jest/jest-cli.js --build --project devtools --release-channel=experimental --reactVersion ${{ matrix.version }} --ci
run_devtools_e2e_tests_for_versions:
name: Run DevTools e2e tests for versions
needs: build_devtools_and_process_artifacts
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version:
- "16.0"
- "16.5" # schedule package
- "16.8" # hooks
- "17.0"
- "18.0"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore all archived build artifacts
uses: actions/download-artifact@v4
- name: Display structure of build
run: ls -R build
- name: Check Playwright version
id: playwright_version
run: echo "playwright_version=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//' | head -1)" >> "$GITHUB_OUTPUT"
- name: Cache Playwright Browsers for version ${{ steps.playwright_version.outputs.playwright_version }}
id: cache_playwright_browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-v6-${{ runner.arch }}-${{ runner.os }}-${{ steps.playwright_version.outputs.playwright_version }}
- run: npx playwright install --with-deps
if: steps.cache_playwright_browsers.outputs.cache-hit != 'true'
- run: npx playwright install-deps
if: steps.cache_playwright_browsers.outputs.cache-hit == 'true'
- run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }}
- run: ls -R build-regression
- run: ./scripts/ci/run_devtools_e2e_tests.js ${{ matrix.version }}
env:
RELEASE_CHANNEL: experimental
- name: Cleanup build regression folder
run: rm -r ./build-regression
- uses: actions/upload-artifact@v4
with:
name: screenshots
path: ./tmp/playwright-artifacts
if-no-files-found: warn
================================================
FILE: .github/workflows/runtime_build_and_test.yml
================================================
name: (Runtime) Build and Test
on:
push:
branches: [main]
tags:
# To get CI for backport releases.
# This will duplicate CI for releases from main which is acceptable
- "v*"
pull_request:
paths-ignore:
- compiler/**
workflow_dispatch:
inputs:
commit_sha:
required: false
type: string
default: ''
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
# ----- NODE_MODULES CACHE -----
# Centralize the node_modules cache so it is saved once and each subsequent job only needs to
# restore the cache. Prevents race conditions where multiple workflows try to write to the cache.
runtime_node_modules_cache:
name: Cache Runtime node_modules
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- name: Check cache hit
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
lookup-only: true
- uses: actions/setup-node@v4
if: steps.node_modules.outputs.cache-hit != 'true'
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Warm with old cache
if: steps.node_modules.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Save cache
if: steps.node_modules.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
runtime_compiler_node_modules_cache:
name: Cache Runtime, Compiler node_modules
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- name: Check cache hit
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
lookup-only: true
- uses: actions/setup-node@v4
if: steps.node_modules.outputs.cache-hit != 'true'
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- name: Warm with old cache
if: steps.node_modules.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd compiler install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Save cache
if: steps.node_modules.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
# ----- FLOW -----
discover_flow_inline_configs:
name: Discover flow inline configs
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.result }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/github-script@v7
id: set-matrix
with:
script: |
const inlinedHostConfigs = require('./scripts/shared/inlinedHostConfigs.js');
return inlinedHostConfigs.map(config => config.shortName);
flow:
name: Flow check ${{ matrix.flow_inline_config_shortname }}
needs: [discover_flow_inline_configs, runtime_node_modules_cache]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
flow_inline_config_shortname: ${{ fromJSON(needs.discover_flow_inline_configs.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: node ./scripts/tasks/flow-ci ${{ matrix.flow_inline_config_shortname }}
# ----- FIZZ -----
check_generated_fizz_runtime:
name: Confirm generated inline Fizz runtime is up to date
needs: [runtime_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: |
yarn generate-inline-fizz-runtime
git diff --exit-code || (echo "There was a change to the Fizz runtime. Run \`yarn generate-inline-fizz-runtime\` and check in the result." && false)
# ----- FEATURE FLAGS -----
flags:
name: Check flags
needs: [runtime_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn flags
# ----- TESTS -----
test:
name: yarn test ${{ matrix.params }} (Shard ${{ matrix.shard }})
needs: [runtime_compiler_node_modules_cache]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
params:
- "-r=stable --env=development"
- "-r=stable --env=production"
- "-r=experimental --env=development"
- "-r=experimental --env=production"
- "-r=www-classic --env=development --variant=false"
- "-r=www-classic --env=production --variant=false"
- "-r=www-classic --env=development --variant=true"
- "-r=www-classic --env=production --variant=true"
- "-r=www-modern --env=development --variant=false"
- "-r=www-modern --env=production --variant=false"
- "-r=www-modern --env=development --variant=true"
- "-r=www-modern --env=production --variant=true"
- "-r=xplat --env=development --variant=false"
- "-r=xplat --env=development --variant=true"
- "-r=xplat --env=production --variant=false"
- "-r=xplat --env=production --variant=true"
# TODO: Test more persistent configurations?
- "-r=stable --env=development --persistent"
- "-r=experimental --env=development --persistent"
shard:
- 1/5
- 2/5
- 3/5
- 4/5
- 5/5
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd compiler install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: node --version
- run: yarn test ${{ matrix.params }} --ci --shard=${{ matrix.shard }}
# Hardcoded to improve parallelism
test-linter:
name: Test eslint-plugin-react-hooks
needs: [runtime_compiler_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
- name: Install runtime dependencies
run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Install compiler dependencies
run: yarn install --frozen-lockfile
working-directory: compiler
if: steps.node_modules.outputs.cache-hit != 'true'
- run: ./scripts/react-compiler/build-compiler.sh && ./scripts/react-compiler/link-compiler.sh
- run: yarn workspace eslint-plugin-react-hooks test
# ----- BUILD -----
build_and_lint:
name: yarn build and lint
needs: [runtime_compiler_node_modules_cache]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# yml is dumb. update the --total arg to yarn build if you change the number of workers
worker_id: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]
release_channel: [stable, experimental]
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 11.0.22
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd compiler install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn build --index=${{ matrix.worker_id }} --total=25 --r=${{ matrix.release_channel }} --ci
env:
CI: github
RELEASE_CHANNEL: ${{ matrix.release_channel }}
NODE_INDEX: ${{ matrix.worker_id }}
- name: Lint build
run: yarn lint-build
- name: Display structure of build
run: ls -R build
- name: Archive build
uses: actions/upload-artifact@v4
with:
name: _build_${{ matrix.worker_id }}_${{ matrix.release_channel }}
path: build
if-no-files-found: error
test_build:
name: yarn test-build
needs: [build_and_lint, runtime_compiler_node_modules_cache]
strategy:
fail-fast: false
matrix:
test_params: [
# Intentionally passing these as strings instead of creating a
# separate parameter per CLI argument, since it's easier to
# control/see which combinations we want to run.
-r=stable --env=development,
-r=stable --env=production,
-r=experimental --env=development,
-r=experimental --env=production,
# TODO: Update test config to support www build tests
# - "-r=www-classic --env=development --variant=false"
# - "-r=www-classic --env=production --variant=false"
# - "-r=www-classic --env=development --variant=true"
# - "-r=www-classic --env=production --variant=true"
# - "-r=www-modern --env=development --variant=false"
# - "-r=www-modern --env=production --variant=false"
# - "-r=www-modern --env=development --variant=true"
# - "-r=www-modern --env=production --variant=true"
# TODO: Update test config to support xplat build tests
# - "-r=xplat --env=development --variant=false"
# - "-r=xplat --env=development --variant=true"
# - "-r=xplat --env=production --variant=false"
# - "-r=xplat --env=production --variant=true"
# TODO: Test more persistent configurations?
]
shard:
- 1/10
- 2/10
- 3/10
- 4/10
- 5/10
- 6/10
- 7/10
- 8/10
- 9/10
- 10/10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd compiler install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- run: node --version
- run: yarn test --build ${{ matrix.test_params }} --shard=${{ matrix.shard }} --ci
test_build_devtools:
name: yarn test-build (devtools)
needs: [build_and_lint, runtime_node_modules_cache]
strategy:
fail-fast: false
matrix:
shard:
- 1/5
- 2/5
- 3/5
- 4/5
- 5/5
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- run: node --version
- run: yarn test --build --project=devtools -r=experimental --shard=${{ matrix.shard }} --ci
process_artifacts_combined:
name: Process artifacts combined
needs: [build_and_lint, runtime_node_modules_cache]
permissions:
# https://github.com/actions/attest-build-provenance
id-token: write
attestations: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- run: echo ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }} >> build/COMMIT_SHA
- name: Scrape warning messages
run: |
mkdir -p ./build/__test_utils__
node ./scripts/print-warnings/print-warnings.js > build/__test_utils__/ReactAllWarnings.js
# Compress build directory into a single tarball for easy download
- run: tar -zcvf ./build.tgz ./build
# TODO: Migrate scripts to use `build` directory instead of `build2`
- run: cp ./build.tgz ./build2.tgz
- name: Archive build artifacts
id: upload_artifacts_combined
uses: actions/upload-artifact@v4
with:
name: artifacts_combined
path: |
./build.tgz
./build2.tgz
if-no-files-found: error
- uses: actions/attest-build-provenance@v2
# We don't verify builds generated from pull requests not originating from facebook/react.
# However, if the PR lands, the run on `main` will generate the attestation which can then
# be used to download a build via scripts/release/download-experimental-build.js.
#
# Note that this means that scripts/release/download-experimental-build.js must be run with
# --no-verify when downloading a build from a fork.
if: github.event_name == 'push' && github.ref_name == 'main' || github.event.pull_request.head.repo.full_name == github.repository
with:
subject-name: artifacts_combined.zip
subject-digest: sha256:${{ steps.upload_artifacts_combined.outputs.artifact-digest }}
check_error_codes:
name: Search build artifacts for unminified errors
needs: [build_and_lint, runtime_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- name: Search build artifacts for unminified errors
run: |
yarn extract-errors
git diff --exit-code || (echo "Found unminified errors. Either update the error codes map or disable error minification for the affected build, if appropriate." && false)
check_release_dependencies:
name: Check release dependencies
needs: [build_and_lint, runtime_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- run: yarn check-release-dependencies
RELEASE_CHANNEL_stable_yarn_test_dom_fixtures:
name: Check fixtures DOM (stable)
needs: build_and_lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4 # note: this does not reuse centralized cache since it has unique cache key
id: node_modules
with:
path: |
**/node_modules
key: fixtures_dom-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'fixtures/dom/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn --cwd fixtures/dom install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- name: Run DOM fixture tests
run: |
yarn predev
yarn test
working-directory: fixtures/dom
env:
RELEASE_CHANNEL: stable
# ----- FLIGHT -----
run_fixtures_flight_tests:
name: Run fixtures Flight tests
needs: build_and_lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
# Fixture copies some built packages from the workroot after install.
# That means dependencies of the built packages are not installed.
# We need to install dependencies of the workroot to fulfill all dependency constraints
- name: Restore cached node_modules
uses: actions/cache@v4 # note: this does not reuse centralized cache since it has unique cache key
id: node_modules
with:
path: |
**/node_modules
key: fixtures_flight-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'fixtures/flight/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd fixtures/flight install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Check Playwright version
id: playwright_version
run: echo "playwright_version=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//' | head -1)" >> "$GITHUB_OUTPUT"
- name: Cache Playwright Browsers for version ${{ steps.playwright_version.outputs.playwright_version }}
id: cache_playwright_browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-v6-${{ runner.arch }}-${{ runner.os }}-${{ steps.playwright_version.outputs.playwright_version }}
- name: Playwright install deps
if: steps.cache_playwright_browsers.outputs.cache-hit != 'true'
working-directory: fixtures/flight
run: npx playwright install --with-deps chromium
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Display structure of build
run: ls -R build
- name: Run tests
working-directory: fixtures/flight
run: yarn test
env:
# Otherwise the webserver is a blackbox
DEBUG: pw:webserver
- name: Archive Flight fixture artifacts
uses: actions/upload-artifact@v4
with:
name: flight-playwright-report
path: fixtures/flight/playwright-report
if-no-files-found: warn
- name: Archive Flight fixture artifacts
uses: actions/upload-artifact@v4
with:
name: flight-test-results
path: fixtures/flight/test-results
if-no-files-found: ignore
# ----- DEVTOOLS -----
build_devtools_and_process_artifacts:
name: Build DevTools and process artifacts
needs: [build_and_lint, runtime_node_modules_cache]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
browser: [chrome, firefox, edge]
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- run: ./scripts/ci/pack_and_store_devtools_artifacts.sh ${{ matrix.browser }}
env:
RELEASE_CHANNEL: experimental
- name: Display structure of build
run: ls -R build
# Simplifies getting the extension for local testing
- name: Archive ${{ matrix.browser }} extension
uses: actions/upload-artifact@v4
with:
name: react-devtools-${{ matrix.browser }}-extension
path: build/devtools/${{ matrix.browser }}-extension.zip
if-no-files-found: error
- name: Archive ${{ matrix.browser }} metadata
uses: actions/upload-artifact@v4
with:
name: react-devtools-${{ matrix.browser }}-metadata
path: build/devtools/webpack-stats.*.json
merge_devtools_artifacts:
name: Merge DevTools artifacts
needs: build_devtools_and_process_artifacts
runs-on: ubuntu-latest
steps:
- name: Merge artifacts
uses: actions/upload-artifact/merge@v4
with:
name: react-devtools
pattern: react-devtools-*
run_devtools_e2e_tests:
name: Run DevTools e2e tests
needs: [build_and_lint, runtime_node_modules_cache]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache/restore@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-node_modules-v7-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
# Don't use restore-keys here. Otherwise the cache grows indefinitely.
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Restore archived build
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Check Playwright version
id: playwright_version
run: echo "playwright_version=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//' | head -1)" >> "$GITHUB_OUTPUT"
- name: Cache Playwright Browsers for version ${{ steps.playwright_version.outputs.playwright_version }}
id: cache_playwright_browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-v6-${{ runner.arch }}-${{ runner.os }}-${{ steps.playwright_version.outputs.playwright_version }}
- name: Playwright install deps
if: steps.cache_playwright_browsers.outputs.cache-hit != 'true'
run: npx playwright install --with-deps chromium
- run: ./scripts/ci/run_devtools_e2e_tests.js
env:
RELEASE_CHANNEL: experimental
- name: Archive Playwright report
uses: actions/upload-artifact@v4
with:
name: devtools-playwright-artifacts
path: tmp/playwright-artifacts
if-no-files-found: warn
# ----- SIZEBOT -----
sizebot:
if: ${{ github.event_name == 'pull_request' && github.ref_name != 'main' && github.event.pull_request.base.ref == 'main' }}
name: Run sizebot
needs: [build_and_lint]
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4 # note: this does not reuse centralized cache since it has unique cache key
id: node_modules
with:
path: |
**/node_modules
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd scripts/release install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Download artifacts for base revision
# The build could have been generated from a fork, so we must download the build without
# any verification. This is safe since we only use this for sizebot calculation and the
# unverified artifact is not used. Additionally this workflow runs in the pull_request
# trigger so only restricted permissions are available.
run: |
GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=$(git rev-parse ${{ github.event.pull_request.base.sha }}) ${{ (github.event.pull_request.head.repo.full_name != github.repository && '--noVerify') || ''}}
mv ./build ./base-build
- name: Delete extraneous files
# TODO: The `download-experimental-build` script copies the npm
# packages into the `node_modules` directory. This is a historical
# quirk of how the release script works. Let's pretend they
# don't exist.
run: rm -rf ./base-build/node_modules
- name: Display structure of base-build from origin/main
run: ls -R base-build
- name: Ensure clean build directory
run: rm -rf build
- name: Restore archived build for PR
uses: actions/download-artifact@v4
with:
pattern: _build_*
path: build
merge-multiple: true
- name: Scrape warning messages
run: |
mkdir -p ./build/__test_utils__
node ./scripts/print-warnings/print-warnings.js > build/__test_utils__/ReactAllWarnings.js
- name: Display structure of build for PR
run: ls -R build
- run: echo ${{ github.event.inputs.commit_sha != '' && github.event.inputs.commit_sha || github.event.pull_request.head.sha || github.sha }} >> build/COMMIT_SHA
- run: node ./scripts/tasks/danger
- name: Archive sizebot results
uses: actions/upload-artifact@v4
with:
name: sizebot-message
path: sizebot-message.md
if-no-files-found: ignore
================================================
FILE: .github/workflows/runtime_commit_artifacts.yml
================================================
name: (Runtime) Commit Artifacts for Meta WWW and fbsource V2
on:
workflow_run:
workflows: ["(Runtime) Build and Test"]
types: [completed]
branches:
- main
workflow_dispatch:
inputs:
commit_sha:
required: false
type: string
force:
description: 'Force a commit to the builds/... branches'
required: true
default: false
type: boolean
dry_run:
description: Perform a dry run (run everything except push)
required: true
default: false
type: boolean
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
download_artifacts:
runs-on: ubuntu-latest
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
steps:
- uses: actions/checkout@v4
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd scripts/release install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Download artifacts for base revision
run: |
GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }}
- name: Display structure of build
run: ls -R build
- name: Archive build
uses: actions/upload-artifact@v4
with:
name: build
path: build/
if-no-files-found: error
process_artifacts:
runs-on: ubuntu-latest
needs: [download_artifacts]
outputs:
www_branch_count: ${{ steps.check_branches.outputs.www_branch_count }}
fbsource_branch_count: ${{ steps.check_branches.outputs.fbsource_branch_count }}
last_version_classic: ${{ steps.get_last_version_www.outputs.last_version_classic }}
last_version_modern: ${{ steps.get_last_version_www.outputs.last_version_modern }}
last_version_rn: ${{ steps.get_last_version_rn.outputs.last_version_rn }}
current_version_classic: ${{ steps.get_current_version.outputs.current_version_classic }}
current_version_modern: ${{ steps.get_current_version.outputs.current_version_modern }}
current_version_rn: ${{ steps.get_current_version.outputs.current_version_rn }}
steps:
- uses: actions/checkout@v4
with:
ref: builds/facebook-www
- name: "Get last version string for www"
id: get_last_version_www
run: |
# Empty checks only needed for backwards compatibility,can remove later.
VERSION_CLASSIC=$( [ -f ./compiled/facebook-www/VERSION_CLASSIC ] && cat ./compiled/facebook-www/VERSION_CLASSIC || echo '' )
VERSION_MODERN=$( [ -f ./compiled/facebook-www/VERSION_MODERN ] && cat ./compiled/facebook-www/VERSION_MODERN || echo '' )
echo "Last classic version is $VERSION_CLASSIC"
echo "Last modern version is $VERSION_MODERN"
echo "last_version_classic=$VERSION_CLASSIC" >> "$GITHUB_OUTPUT"
echo "last_version_modern=$VERSION_MODERN" >> "$GITHUB_OUTPUT"
- uses: actions/checkout@v4
with:
ref: builds/facebook-fbsource
- name: "Get last version string for rn"
id: get_last_version_rn
run: |
# Empty checks only needed for backwards compatibility,can remove later.
VERSION_NATIVE_FB=$( [ -f ./compiled-rn/VERSION_NATIVE_FB ] && cat ./compiled-rn/VERSION_NATIVE_FB || echo '' )
echo "Last rn version is $VERSION_NATIVE_FB"
echo "last_version_rn=$VERSION_NATIVE_FB" >> "$GITHUB_OUTPUT"
- uses: actions/checkout@v4
- name: "Check branches"
id: check_branches
run: |
echo "www_branch_count=$(git ls-remote --heads origin "refs/heads/meta-www" | wc -l)" >> "$GITHUB_OUTPUT"
echo "fbsource_branch_count=$(git ls-remote --heads origin "refs/heads/meta-fbsource" | wc -l)" >> "$GITHUB_OUTPUT"
- name: Restore downloaded build
uses: actions/download-artifact@v4
with:
name: build
path: build
- name: Display structure of build
run: ls -R build
- name: Strip @license from eslint plugin and react-refresh
run: |
sed -i -e 's/ @license React*//' \
build/oss-experimental/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js \
build/facebook-www/ESLintPluginReactHooks-dev.modern.js \
build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js
- name: Insert @headers into eslint plugin and react-refresh
run: |
sed -i -e 's/ LICENSE file in the root directory of this source tree./ LICENSE file in the root directory of this source tree.\n *\n * @noformat\n * @nolint\n * @lightSyntaxTransform\n * @preventMunge\n * @oncall react_core/' \
build/oss-experimental/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js \
build/facebook-www/ESLintPluginReactHooks-dev.modern.js \
build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js
- name: Move relevant files for React in www into compiled
run: |
# Move the facebook-www folder into compiled
mkdir ./compiled
mv build/facebook-www ./compiled
# Move ReactAllWarnings.js to facebook-www
mkdir ./compiled/facebook-www/__test_utils__
mv build/__test_utils__/ReactAllWarnings.js ./compiled/facebook-www/__test_utils__/ReactAllWarnings.js
# Copy eslint-plugin-react-hooks (www build with feature flags)
mkdir ./compiled/eslint-plugin-react-hooks
cp ./compiled/facebook-www/ESLintPluginReactHooks-dev.modern.js \
./compiled/eslint-plugin-react-hooks/index.js
# Move unstable_server-external-runtime.js into facebook-www
mv build/oss-experimental/react-dom/unstable_server-external-runtime.js \
./compiled/facebook-www/unstable_server-external-runtime.js
# Move react-refresh-babel.development.js into babel-plugin-react-refresh
mkdir ./compiled/babel-plugin-react-refresh
mv build/oss-experimental/react-refresh/cjs/react-refresh-babel.development.js \
./compiled/babel-plugin-react-refresh/index.js
ls -R ./compiled
- name: Move relevant files for React in fbsource into compiled-rn
run: |
BASE_FOLDER='compiled-rn/facebook-fbsource/xplat/js'
mkdir -p ${BASE_FOLDER}/react-native-github/Libraries/Renderer/
mkdir -p ${BASE_FOLDER}/RKJSModules/vendor/react/{scheduler,react,react-dom,react-is,react-test-renderer}/
# Move React Native renderer
mv build/react-native/implementations/ $BASE_FOLDER/react-native-github/Libraries/Renderer/
mv build/react-native/shims/ $BASE_FOLDER/react-native-github/Libraries/Renderer/
mv build/facebook-react-native/scheduler/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/scheduler/
mv build/facebook-react-native/react/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react/
mv build/facebook-react-native/react-dom/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-dom/
mv build/facebook-react-native/react-is/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-is/
mv build/facebook-react-native/react-test-renderer/cjs/ $BASE_FOLDER/RKJSModules/vendor/react/react-test-renderer/
# Delete the OSS renderers, these are sync'd to RN separately.
RENDERER_FOLDER=$BASE_FOLDER/react-native-github/Libraries/Renderer/implementations/
rm $RENDERER_FOLDER/ReactFabric-{dev,prod,profiling}.js
# Delete the legacy renderer shim, this is not sync'd and will get deleted in the future.
SHIM_FOLDER=$BASE_FOLDER/react-native-github/Libraries/Renderer/shims/
rm $SHIM_FOLDER/ReactNative.js
# Copy eslint-plugin-react-hooks
# NOTE: This is different from www, here we include the full package
# including package.json to include dependencies in fbsource.
mkdir "$BASE_FOLDER/tools"
cp -r build/oss-experimental/eslint-plugin-react-hooks "$BASE_FOLDER/tools"
# Move React Native version file
mv build/facebook-react-native/VERSION_NATIVE_FB ./compiled-rn/VERSION_NATIVE_FB
ls -R ./compiled-rn
- name: Add REVISION files
run: |
echo ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} >> ./compiled/facebook-www/REVISION
cp ./compiled/facebook-www/REVISION ./compiled/facebook-www/REVISION_TRANSFORMS
echo ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} >> ./compiled-rn/facebook-fbsource/xplat/js/react-native-github/Libraries/Renderer/REVISION
- name: "Get current version string"
id: get_current_version
run: |
VERSION_CLASSIC=$(cat ./compiled/facebook-www/VERSION_CLASSIC)
VERSION_MODERN=$(cat ./compiled/facebook-www/VERSION_MODERN)
VERSION_NATIVE_FB=$(cat ./compiled-rn/VERSION_NATIVE_FB)
echo "Current classic version is $VERSION_CLASSIC"
echo "Current modern version is $VERSION_MODERN"
echo "Current rn version is $VERSION_NATIVE_FB"
echo "current_version_classic=$VERSION_CLASSIC" >> "$GITHUB_OUTPUT"
echo "current_version_modern=$VERSION_MODERN" >> "$GITHUB_OUTPUT"
echo "current_version_rn=$VERSION_NATIVE_FB" >> "$GITHUB_OUTPUT"
- uses: actions/upload-artifact@v4
with:
name: compiled
path: compiled/
if-no-files-found: error
- uses: actions/upload-artifact@v4
with:
name: compiled-rn
path: compiled-rn/
if-no-files-found: error
commit_www_artifacts:
needs: [download_artifacts, process_artifacts]
if: inputs.force == true || (github.ref == 'refs/heads/main' && needs.process_artifacts.outputs.www_branch_count == '0')
runs-on: ubuntu-latest
permissions:
# Used to push a commit to builds/facebook-www
contents: write
steps:
- uses: actions/checkout@v4
with:
ref: builds/facebook-www
- name: Ensure clean directory
run: rm -rf compiled
- uses: actions/download-artifact@v4
with:
name: compiled
path: compiled/
- name: Revert version changes
if: needs.process_artifacts.outputs.last_version_classic != '' && needs.process_artifacts.outputs.last_version_modern != ''
env:
CURRENT_VERSION_CLASSIC: ${{ needs.process_artifacts.outputs.current_version_classic }}
CURRENT_VERSION_MODERN: ${{ needs.process_artifacts.outputs.current_version_modern }}
LAST_VERSION_CLASSIC: ${{ needs.process_artifacts.outputs.last_version_classic }}
LAST_VERSION_MODERN: ${{ needs.process_artifacts.outputs.last_version_modern }}
run: |
echo "Reverting $CURRENT_VERSION_CLASSIC to $LAST_VERSION_CLASSIC"
grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled || echo "No files found with $CURRENT_VERSION_CLASSIC"
grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled | xargs -r sed -i -e "s/$CURRENT_VERSION_CLASSIC/$LAST_VERSION_CLASSIC/g"
grep -rl "$CURRENT_VERSION_CLASSIC" ./compiled || echo "Classic version reverted"
echo "===================="
echo "Reverting $CURRENT_VERSION_MODERN to $LAST_VERSION_MODERN"
grep -rl "$CURRENT_VERSION_MODERN" ./compiled || echo "No files found with $CURRENT_VERSION_MODERN"
grep -rl "$CURRENT_VERSION_MODERN" ./compiled | xargs -r sed -i -e "s/$CURRENT_VERSION_MODERN/$LAST_VERSION_MODERN/g"
grep -rl "$CURRENT_VERSION_MODERN" ./compiled || echo "Modern version reverted"
- name: Check for changes
if: inputs.force != true
id: check_should_commit
run: |
echo "Full git status"
git add .
git status
echo "===================="
if git status --porcelain | grep -qv '/REVISION'; then
echo "Changes detected"
echo "===== Changes ====="
git --no-pager diff -U0 | grep '^[+-]' | head -n 50
echo "==================="
echo "should_commit=true" >> "$GITHUB_OUTPUT"
else
echo "No Changes detected"
echo "should_commit=false" >> "$GITHUB_OUTPUT"
fi
- name: Re-apply version changes
if: inputs.force == true || (steps.check_should_commit.outputs.should_commit == 'true' && needs.process_artifacts.outputs.last_version_classic != '' && needs.process_artifacts.outputs.last_version_modern != '')
env:
CURRENT_VERSION_CLASSIC: ${{ needs.process_artifacts.outputs.current_version_classic }}
CURRENT_VERSION_MODERN: ${{ needs.process_artifacts.outputs.current_version_modern }}
LAST_VERSION_CLASSIC: ${{ needs.process_artifacts.outputs.last_version_classic }}
LAST_VERSION_MODERN: ${{ needs.process_artifacts.outputs.last_version_modern }}
run: |
echo "Re-applying $LAST_VERSION_CLASSIC to $CURRENT_VERSION_CLASSIC"
grep -rl "$LAST_VERSION_CLASSIC" ./compiled || echo "No files found with $LAST_VERSION_CLASSIC"
grep -rl "$LAST_VERSION_CLASSIC" ./compiled | xargs -r sed -i -e "s/$LAST_VERSION_CLASSIC/$CURRENT_VERSION_CLASSIC/g"
grep -rl "$LAST_VERSION_CLASSIC" ./compiled || echo "Classic version re-applied"
echo "===================="
echo "Re-applying $LAST_VERSION_MODERN to $CURRENT_VERSION_MODERN"
grep -rl "$LAST_VERSION_MODERN" ./compiled || echo "No files found with $LAST_VERSION_MODERN"
grep -rl "$LAST_VERSION_MODERN" ./compiled | xargs -r sed -i -e "s/$LAST_VERSION_MODERN/$CURRENT_VERSION_MODERN/g"
grep -rl "$LAST_VERSION_MODERN" ./compiled || echo "Classic version re-applied"
- name: Will commit these changes
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
run: |
git add .
git status
- name: Check commit message
if: inputs.dry_run
run: |
git fetch origin --quiet
git show ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} --no-patch --pretty=format:"%B"
- name: Commit changes to branch
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
run: |
git config --global user.email "${{ format('{0}@users.noreply.github.com', github.triggering_actor) }}"
git config --global user.name "${{ github.triggering_actor }}"
git fetch origin --quiet
git commit -m "$(git show ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} --no-patch --pretty=format:'%B%n%nDiffTrain build for [${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }}](https://github.com/facebook/react/commit/${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha}})')" || echo "No changes to commit"
- name: Push changes to branch
if: inputs.dry_run == false && (inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true')
run: git push
commit_fbsource_artifacts:
needs: [download_artifacts, process_artifacts]
permissions:
# Used to push a commit to builds/facebook-fbsource
contents: write
if: inputs.force == true || (github.ref == 'refs/heads/main' && needs.process_artifacts.outputs.fbsource_branch_count == '0')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: builds/facebook-fbsource
- name: Ensure clean directory
run: rm -rf compiled-rn
- uses: actions/download-artifact@v4
with:
name: compiled-rn
path: compiled-rn/
- name: Revert version changes
if: needs.process_artifacts.outputs.last_version_rn != ''
env:
CURRENT_VERSION: ${{ needs.process_artifacts.outputs.current_version_rn }}
LAST_VERSION: ${{ needs.process_artifacts.outputs.last_version_rn }}
run: |
echo "Reverting $CURRENT_VERSION to $LAST_VERSION"
grep -rl "$CURRENT_VERSION" ./compiled-rn || echo "No files found with $CURRENT_VERSION"
grep -rl "$CURRENT_VERSION" ./compiled-rn | xargs -r sed -i -e "s/$CURRENT_VERSION/$LAST_VERSION/g"
grep -rl "$CURRENT_VERSION" ./compiled-rn || echo "Version reverted"
- name: Check for changes
if: inputs.force != 'true'
id: check_should_commit
run: |
echo "Full git status"
git add .
git --no-pager diff -U0 --cached | grep '^[+-]' | head -n 100
echo "===================="
# Ignore REVISION or lines removing @generated headers.
if git diff --cached ':(exclude)*REVISION' ':(exclude)*/eslint-plugin-react-hooks/package.json' | grep -vE "^(@@|diff|index|\-\-\-|\+\+\+|\- \* @generated SignedSource)" | grep "^[+-]" > /dev/null; then
echo "Changes detected"
echo "===== Changes ====="
git --no-pager diff --cached ':(exclude)*REVISION' ':(exclude)*/eslint-plugin-react-hooks/package.json' | grep -vE "^(@@|diff|index|\-\-\-|\+\+\+|\- \* @generated SignedSource)" | grep "^[+-]" | head -n 50
echo "==================="
echo "should_commit=true" >> "$GITHUB_OUTPUT"
else
echo "No Changes detected"
echo "should_commit=false" >> "$GITHUB_OUTPUT"
fi
- name: Re-apply version changes
if: inputs.force == true || (steps.check_should_commit.outputs.should_commit == 'true' && needs.process_artifacts.outputs.last_version_rn != '')
env:
CURRENT_VERSION: ${{ needs.process_artifacts.outputs.current_version_rn }}
LAST_VERSION: ${{ needs.process_artifacts.outputs.last_version_rn }}
run: |
echo "Re-applying $LAST_VERSION to $CURRENT_VERSION"
grep -rl "$LAST_VERSION" ./compiled-rn || echo "No files found with $LAST_VERSION"
grep -rl "$LAST_VERSION" ./compiled-rn | xargs -r sed -i -e "s/$LAST_VERSION/$CURRENT_VERSION/g"
grep -rl "$LAST_VERSION" ./compiled-rn || echo "Version re-applied"
- name: Add files for signing
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
run: |
echo ":"
git add .
- name: Signing files
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
uses: actions/github-script@v7
with:
script: |
// TODO: Move this to a script file.
// We currently can't call scripts from the repo because
// at this point in the workflow, we're on the compiled
// artifact branch (so the scripts don't exist).
// We can fix this with a composite action in the main repo.
// This script is duplicated above.
const fs = require('fs');
const crypto = require('crypto');
const {execSync} = require('child_process');
// TODO: when we move this to a script, we can use this from npm.
// Copy of signedsource since we can't install deps on this branch.
const GENERATED = '@' + 'generated';
const NEWTOKEN = '<<SignedSource::*O*zOeWoEQle#+L!plEphiEmie@IsG>>';
const PATTERN = new RegExp(`${GENERATED} (?:SignedSource<<([a-f0-9]{32})>>)`);
const TokenNotFoundError = new Error(
`SignedSource.signFile(...): Cannot sign file without token: ${NEWTOKEN}`
);
function hash(data, encoding) {
const md5sum = crypto.createHash('md5');
md5sum.update(data, encoding);
return md5sum.digest('hex');
}
const SignedSource = {
getSigningToken() {
return `${GENERATED} ${NEWTOKEN}`;
},
isSigned(data) {
return PATTERN.exec(data) != null;
},
signFile(data) {
if (!data.includes(NEWTOKEN)) {
if (SignedSource.isSigned(data)) {
// Signing a file that was previously signed.
data = data.replace(PATTERN, SignedSource.getSigningToken());
} else {
throw TokenNotFoundError;
}
}
return data.replace(NEWTOKEN, `SignedSource<<${hash(data, 'utf8')}>>`);
},
};
const directory = './compiled-rn';
console.log('Signing files in directory:', directory);
try {
const result = execSync(`git status --porcelain ${directory}`, {encoding: 'utf8'});
console.log(result);
// Parse the git status output to get file paths!
const files = result.split('\n').filter(file => file.endsWith('.js'));
if (files.length === 0) {
throw new Error(
'git status returned no files to sign. this job should not have run.'
);
} else {
files.forEach(line => {
let file = null;
if (line.startsWith('D ')) {
return;
} else if (line.startsWith('R ')) {
file = line.slice(line.indexOf('->') + 3);
} else {
file = line.slice(3).trim();
}
if (file) {
console.log(' Signing file:', file);
const originalContents = fs.readFileSync(file, 'utf8');
const signedContents = SignedSource.signFile(
originalContents
// Need to add the header in, since it's not inserted at build time.
.replace(' */\n', ` * ${SignedSource.getSigningToken()}\n */\n`)
);
fs.writeFileSync(file, signedContents, 'utf8');
}
});
}
} catch (e) {
process.exitCode = 1;
console.error('Error signing files:', e);
}
- name: Will commit these changes
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
run: |
git add .
git status
- name: Check commit message
if: inputs.dry_run
run: |
git fetch origin --quiet
git show ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} --no-patch --pretty=format:"%B"
- name: Commit changes to branch
if: inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true'
run: |
git config --global user.email "${{ format('{0}@users.noreply.github.com', github.triggering_actor) }}"
git config --global user.name "${{ github.triggering_actor }}"
git fetch origin --quiet
git commit -m "$(git show ${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }} --no-patch --pretty=format:'%B%n%nDiffTrain build for [${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha }}](https://github.com/facebook/react/commit/${{ inputs.commit_sha || github.event.workflow_run.head_sha || github.sha}})')" || echo "No changes to commit"
- name: Push changes to branch
if: inputs.dry_run == false && (inputs.force == true || steps.check_should_commit.outputs.should_commit == 'true')
run: git push
================================================
FILE: .github/workflows/runtime_discord_notify.yml
================================================
name: (Runtime) Discord Notify
on:
pull_request_target:
types: [opened, ready_for_review]
paths-ignore:
- packages/react-devtools**
- compiler/**
- .github/workflows/compiler_**.yml
- .github/workflows/devtools**.yml
permissions: {}
jobs:
check_access:
if: ${{ github.event.pull_request.draft == false }}
runs-on: ubuntu-latest
outputs:
is_member_or_collaborator: ${{ steps.check_is_member_or_collaborator.outputs.is_member_or_collaborator }}
steps:
- run: echo ${{ github.event.pull_request.author_association }}
- name: Check is member or collaborator
id: check_is_member_or_collaborator
if: ${{ github.event.pull_request.author_association == 'MEMBER' || github.event.pull_request.author_association == 'COLLABORATOR' }}
run: echo "is_member_or_collaborator=true" >> "$GITHUB_OUTPUT"
check_maintainer:
if: ${{ needs.check_access.outputs.is_member_or_collaborator == 'true' || needs.check_access.outputs.is_member_or_collaborator == true }}
needs: [check_access]
uses: facebook/react/.github/workflows/shared_check_maintainer.yml@main
permissions:
# Used by check_maintainer
contents: read
with:
actor: ${{ github.event.pull_request.user.login }}
notify:
if: ${{ needs.check_maintainer.outputs.is_core_team == 'true' }}
needs: check_maintainer
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
embed-author-name: ${{ github.event.pull_request.user.login }}
embed-author-url: ${{ github.event.pull_request.user.html_url }}
embed-author-icon-url: ${{ github.event.pull_request.user.avatar_url }}
embed-title: '#${{ github.event.number }} (+${{github.event.pull_request.additions}} -${{github.event.pull_request.deletions}}): ${{ github.event.pull_request.title }}'
embed-description: ${{ github.event.pull_request.body }}
embed-url: ${{ github.event.pull_request.html_url }}
================================================
FILE: .github/workflows/runtime_eslint_plugin_e2e.yml
================================================
name: (Runtime) ESLint Plugin E2E
on:
push:
branches: [main]
pull_request:
paths-ignore:
- compiler/**
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
# ----- TESTS -----
test:
name: ESLint v${{ matrix.eslint_major }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
eslint_major:
- "6"
- "7"
- "8"
- "9"
- "10"
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: |
yarn.lock
compiler/yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-and-compiler-eslint_e2e-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'compiler/yarn.lock', 'fixtures/eslint-v*/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd compiler install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Install fixture dependencies
working-directory: ./fixtures/eslint-v${{ matrix.eslint_major }}
run: yarn --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- name: Build plugin
working-directory: fixtures/eslint-v${{ matrix.eslint_major }}
run: node build.mjs
- name: Run lint test
working-directory: ./fixtures/eslint-v${{ matrix.eslint_major }}
run: yarn lint
================================================
FILE: .github/workflows/runtime_fuzz_tests.yml
================================================
name: (Runtime) Fuzz tests
on:
schedule:
- cron: 0 * * * *
push:
branches:
- main
workflow_dispatch:
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
test_fuzz:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.0
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: 'yarn'
- name: Install dependencies
run: yarn install --frozen-lockfile
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: "1"
shell: bash
- name: Run fuzz tests
run: |-
FUZZ_TEST_SEED=$RANDOM yarn test fuzz --ci
FUZZ_TEST_SEED=$RANDOM yarn test --prod fuzz --ci
================================================
FILE: .github/workflows/runtime_prereleases.yml
================================================
name: (Runtime) Publish Prereleases
on:
workflow_call:
inputs:
commit_sha:
required: true
default: ''
type: string
release_channel:
required: true
type: string
dist_tag:
required: true
type: string
enableFailureNotification:
description: 'Whether to notify the team on Discord when the release fails. Useful if this workflow is called from an automation.'
required: false
type: boolean
only_packages:
description: Packages to publish (space separated)
type: string
skip_packages:
description: Packages to NOT publish (space separated)
type: string
dry:
required: true
description: Dry run instead of publish?
type: boolean
default: true
secrets:
DISCORD_WEBHOOK_URL:
description: 'Discord webhook URL to notify on failure. Only required if enableFailureNotification is true.'
required: false
GH_TOKEN:
required: true
NPM_TOKEN:
required: true
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
jobs:
publish_prerelease:
name: Publish prelease (${{ inputs.release_channel }}) ${{ inputs.commit_sha }} @${{ inputs.dist_tag }}
runs-on: ubuntu-latest
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd scripts/release install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: cp ./scripts/release/ci-npmrc ~/.npmrc
- run: |
GH_TOKEN=${{ secrets.GH_TOKEN }} scripts/release/prepare-release-from-ci.js --skipTests -r ${{ inputs.release_channel }} --commit=${{ inputs.commit_sha }}
- name: Check prepared files
run: ls -R build/node_modules
- if: '${{ inputs.only_packages }}'
name: 'Publish ${{ inputs.only_packages }}'
run: |
scripts/release/publish.js \
--ci \
--tags=${{ inputs.dist_tag }} \
--onlyPackages=${{ inputs.only_packages }} ${{ (inputs.dry && '') || '\'}}
${{ inputs.dry && '--dry' || '' }}
- if: '${{ inputs.skip_packages }}'
name: 'Publish all packages EXCEPT ${{ inputs.skip_packages }}'
run: |
scripts/release/publish.js \
--ci \
--tags=${{ inputs.dist_tag }} \
--skipPackages=${{ inputs.skip_packages }} ${{ (inputs.dry && '') || '\'}}
${{ inputs.dry && '--dry' || '' }}
- if: '${{ !inputs.skip_packages && !inputs.only_packages }}'
name: 'Publish all packages'
run: |
scripts/release/publish.js \
--ci \
--tags=${{ inputs.dist_tag }} ${{ (inputs.dry && '') || '\'}}
${{ inputs.dry && '--dry' || '' }}
- name: Notify Discord on failure
if: failure() && inputs.enableFailureNotification == true
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
embed-author-name: "GitHub Actions"
embed-title: '[Runtime] Publish of ${{ inputs.release_channel }}@${{ inputs.dist_tag}} release failed'
embed-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}
================================================
FILE: .github/workflows/runtime_prereleases_manual.yml
================================================
name: (Runtime) Publish Prereleases Manual
on:
workflow_dispatch:
inputs:
prerelease_commit_sha:
required: true
only_packages:
description: Packages to publish (space separated)
type: string
skip_packages:
description: Packages to NOT publish (space separated)
type: string
dry:
required: true
description: Dry run instead of publish?
type: boolean
default: true
experimental_only:
type: boolean
description: Only publish to the experimental tag
default: false
force_notify:
description: Force a Discord notification?
type: boolean
default: false
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
notify:
if: ${{ inputs.force_notify || inputs.dry == false || inputs.dry == 'false' }}
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
embed-author-name: ${{ github.event.sender.login }}
embed-author-url: ${{ github.event.sender.html_url }}
embed-author-icon-url: ${{ github.event.sender.avatar_url }}
embed-title: "⚠️ Publishing ${{ inputs.experimental_only && 'EXPERIMENTAL' || 'CANARY & EXPERIMENTAL' }} release ${{ (inputs.dry && ' (dry run)') || '' }}"
embed-description: |
```json
${{ toJson(inputs) }}
```
embed-url: https://github.com/facebook/react/actions/runs/${{ github.run_id }}
publish_prerelease_canary:
if: ${{ !inputs.experimental_only }}
name: Publish to Canary channel
uses: facebook/react/.github/workflows/runtime_prereleases.yml@main
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
with:
commit_sha: ${{ inputs.prerelease_commit_sha }}
release_channel: stable
# The tags to use when publishing canaries. The main one we should
# always include is "canary" but we can use multiple (e.g. alpha,
# beta, rc). To declare multiple, use a comma-separated string, like
# this:
# dist_tag: "canary,alpha,beta,rc"
#
# TODO: We currently tag canaries with "next" in addition to "canary"
# because this used to be called the "next" channel and some
# downstream consumers might still expect that tag. We can remove this
# after some time has elapsed and the change has been communicated.
dist_tag: canary,next
only_packages: ${{ inputs.only_packages }}
skip_packages: ${{ inputs.skip_packages }}
dry: ${{ inputs.dry }}
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish_prerelease_experimental:
name: Publish to Experimental channel
uses: facebook/react/.github/workflows/runtime_prereleases.yml@main
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
# NOTE: Intentionally running these jobs sequentially because npm
# will sometimes fail if you try to concurrently publish two
# different versions of the same package, even if they use different
# dist tags.
needs: publish_prerelease_canary
# Ensures the job runs even if canary is skipped
if: always()
with:
commit_sha: ${{ inputs.prerelease_commit_sha }}
release_channel: experimental
dist_tag: experimental
only_packages: ${{ inputs.only_packages }}
skip_packages: ${{ inputs.skip_packages }}
dry: ${{ inputs.dry }}
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/runtime_prereleases_nightly.yml
================================================
name: (Runtime) Publish Prereleases Nightly
on:
schedule:
# At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and Fri
- cron: 10 16 * * 1,2,3,4,5
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
publish_prerelease_canary:
name: Publish to Canary channel
uses: facebook/react/.github/workflows/runtime_prereleases.yml@main
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
with:
commit_sha: ${{ github.sha }}
release_channel: stable
dist_tag: canary,next
enableFailureNotification: true
dry: false
secrets:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish_prerelease_experimental:
name: Publish to Experimental channel
uses: facebook/react/.github/workflows/runtime_prereleases.yml@main
permissions:
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
actions: read
# NOTE: Intentionally running these jobs sequentially because npm
# will sometimes fail if you try to concurrently publish two
# different versions of the same package, even if they use different
# dist tags.
needs: publish_prerelease_canary
with:
commit_sha: ${{ github.sha }}
release_channel: experimental
dist_tag: experimental
enableFailureNotification: true
dry: false
secrets:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/runtime_releases_from_npm_manual.yml
================================================
name: (Runtime) Publish Releases from NPM Manual
on:
workflow_dispatch:
inputs:
version_to_promote:
required: true
description: Current npm version (non-experimental) to promote
type: string
version_to_publish:
required: true
description: Version to publish for the specified packages
type: string
only_packages:
description: Packages to publish (space separated)
type: string
skip_packages:
description: Packages to NOT publish (space separated)
type: string
tags:
description: NPM tags (space separated)
type: string
default: untagged
dry:
required: true
description: Dry run instead of publish?
type: boolean
default: true
force_notify:
description: Force a Discord notification?
type: boolean
default: false
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
jobs:
notify:
if: ${{ inputs.force_notify || inputs.dry == false || inputs.dry == 'false' }}
runs-on: ubuntu-latest
steps:
- name: Discord Webhook Action
uses: tsickert/discord-webhook@86dc739f3f165f16dadc5666051c367efa1692f4
with:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
embed-author-name: ${{ github.event.sender.login }}
embed-author-url: ${{ github.event.sender.html_url }}
embed-author-icon-url: ${{ github.event.sender.avatar_url }}
embed-title: "⚠️ Publishing release from NPM${{ (inputs.dry && ' (dry run)') || '' }}"
embed-description: |
```json
${{ toJson(inputs) }}
```
embed-url: https://github.com/facebook/react/actions/runs/${{ github.run_id }}
publish:
name: Publish releases
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn --cwd scripts/release install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: cp ./scripts/release/ci-npmrc ~/.npmrc
- if: '${{ inputs.only_packages }}'
name: 'Prepare ${{ inputs.only_packages }} from NPM'
run: |
scripts/release/prepare-release-from-npm.js \
--ci \
--skipTests \
--version=${{ inputs.version_to_promote }} \
--publishVersion=${{ inputs.version_to_publish }} \
--onlyPackages=${{ inputs.only_packages }}
- if: '${{ inputs.skip_packages }}'
name: 'Prepare all packages EXCEPT ${{ inputs.skip_packages }} from NPM'
run: |
scripts/release/prepare-release-from-npm.js \
--ci \
--skipTests \
--version=${{ inputs.version_to_promote }} \
--publishVersion=${{ inputs.version_to_publish }} \
--skipPackages=${{ inputs.skip_packages }}
- name: Check prepared files
run: ls -R build/node_modules
- if: '${{ inputs.only_packages }}'
name: 'Publish ${{ inputs.only_packages }}'
run: |
scripts/release/publish.js \
--ci \
--tags=${{ inputs.tags }} \
--publishVersion=${{ inputs.version_to_publish }} \
--onlyPackages=${{ inputs.only_packages }} ${{ (inputs.dry && '') || '\'}}
${{ inputs.dry && '--dry' || '' }}
- if: '${{ inputs.skip_packages }}'
name: 'Publish all packages EXCEPT ${{ inputs.skip_packages }}'
run: |
scripts/release/publish.js \
--ci \
--tags=${{ inputs.tags }} \
--publishVersion=${{ inputs.version_to_publish }} \
--skipPackages=${{ inputs.skip_packages }} ${{ (inputs.dry && '') || '\'}}
${{ inputs.dry && '--dry' || '' }}
- name: Archive released package for debugging
uses: actions/upload-artifact@v4
with:
name: build
path: |
./build/node_modules
================================================
FILE: .github/workflows/shared_check_maintainer.yml
================================================
name: (Shared) Check maintainer
on:
workflow_call:
inputs:
actor:
required: true
type: string
outputs:
is_core_team:
value: ${{ jobs.check_maintainer.outputs.is_core_team }}
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
check_maintainer:
runs-on: ubuntu-latest
permissions:
# We fetch the contents of the MAINTAINERS file
contents: read
outputs:
is_core_team: ${{ steps.check_if_actor_is_maintainer.outputs.result }}
steps:
- name: Check if actor is maintainer
id: check_if_actor_is_maintainer
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const actor = '${{ inputs.actor }}';
const res = await github.rest.repos.getContent({
owner: 'facebook',
repo: 'react',
path: 'MAINTAINERS',
ref: 'main',
headers: { Accept: 'application/vnd.github+json' }
});
if (res.status !== 200) {
console.error(res);
throw new Error('Unable to fetch MAINTAINERS file');
}
content = Buffer.from(res.data.content, 'base64').toString();
if (content == null || typeof content !== 'string') {
throw new Error('Unable to retrieve MAINTAINERS file');
}
const maintainers = new Set(content.split('\n'));
if (maintainers.has(actor)) {
console.log(`🟢 ${actor} is a maintainer`);
return true;
}
console.log(`🔴 ${actor} is NOT a maintainer`);
return null;
================================================
FILE: .github/workflows/shared_cleanup_merged_branch_caches.yml
================================================
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy
name: (Shared) Cleanup Merged Branch Caches
on:
pull_request:
types:
- closed
workflow_dispatch:
inputs:
pr_number:
required: true
type: string
permissions: {}
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
# `actions:write` permission is required to delete caches
# See also: https://docs.github.com/en/rest/actions/cache?apiVersion=2022-11-28#delete-a-github-actions-cache-for-a-repository-using-a-cache-id
actions: write
contents: read
steps:
- name: Cleanup
run: |
echo "Fetching list of cache key"
cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id')
## Setting this to not fail the workflow while deleting cache keys.
set +e
for cacheKey in $cacheKeysForPR
do
gh cache delete $cacheKey
echo "Deleting $cacheKey"
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
BRANCH: refs/pull/${{ inputs.pr_number || github.event.pull_request.number }}/merge
================================================
FILE: .github/workflows/shared_cleanup_stale_branch_caches.yml
================================================
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy
name: (Shared) Cleanup Stale Branch Caches
on:
schedule:
# Every 6 hours
- cron: 0 */6 * * *
workflow_dispatch:
permissions: {}
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
# `actions:write` permission is required to delete caches
# See also: https://docs.github.com/en/rest/actions/cache?apiVersion=2022-11-28#delete-a-github-actions-cache-for-a-repository-using-a-cache-id
actions: write
contents: read
steps:
- name: Cleanup
run: |
echo "Fetching list of cache keys"
cacheKeysForPR=$(gh cache list --limit 100 --json id,ref --jq '.[] | select(.ref != "refs/heads/main") | .id')
## Setting this to not fail the workflow while deleting cache keys.
set +e
for cacheKey in $cacheKeysForPR
do
gh cache delete $cacheKey
echo "Deleting $cacheKey"
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
================================================
FILE: .github/workflows/shared_close_direct_sync_branch_prs.yml
================================================
name: (Shared) Close Direct Sync Branch PRs
on:
pull_request:
branches:
- 'builds/facebook-**'
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
close_pr:
runs-on: ubuntu-latest
permissions:
# Used to create a review and close PRs
pull-requests: write
contents: write
steps:
- name: Close PR
uses: actions/github-script@v7
with:
script: |
const owner = context.repo.owner;
const repo = context.repo.repo;
const pullNumber = ${{ github.event.number }};
await github.rest.pulls.createReview({
owner,
repo,
pull_number: pullNumber,
body: 'Do not land changes to `${{ github.event.pull_request.base.ref }}`. Please re-open your PR targeting `main` instead.',
event: 'REQUEST_CHANGES'
});
await github.rest.pulls.update({
owner,
repo,
pull_number: pullNumber,
state: 'closed'
});
================================================
FILE: .github/workflows/shared_label_core_team_prs.yml
================================================
name: (Shared) Label Core Team PRs
on:
pull_request_target:
types: [opened]
permissions: {}
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
check_access:
runs-on: ubuntu-latest
outputs:
is_member_or_collaborator: ${{ steps.check_is_member_or_collaborator.outputs.is_member_or_collaborator }}
steps:
- run: echo ${{ github.event.pull_request.author_association }}
- name: Check is member or collaborator
id: check_is_member_or_collaborator
if: ${{ github.event.pull_request.author_association == 'MEMBER' || github.event.pull_request.author_association == 'COLLABORATOR' }}
run: echo "is_member_or_collaborator=true" >> "$GITHUB_OUTPUT"
check_maintainer:
if: ${{ needs.check_access.outputs.is_member_or_collaborator == 'true' || needs.check_access.outputs.is_member_or_collaborator == true }}
needs: [check_access]
uses: facebook/react/.github/workflows/shared_check_maintainer.yml@main
permissions:
# Used by check_maintainer
contents: read
with:
actor: ${{ github.event.pull_request.user.login }}
label:
if: ${{ needs.check_maintainer.outputs.is_core_team == 'true' }}
runs-on: ubuntu-latest
needs: check_maintainer
permissions:
# Used to add labels on issues
issues: write
# Used to add labels on PRs
pull-requests: write
steps:
- name: Label PR as React Core Team
uses: actions/github-script@v7
with:
script: |
github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: ${{ github.event.number }},
labels: ['React Core Team']
});
================================================
FILE: .github/workflows/shared_lint.yml
================================================
name: (Shared) Lint
on:
push:
branches: [main]
pull_request:
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
jobs:
prettier:
name: Run prettier
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: shared-lint-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: yarn prettier-check
eslint:
name: Run eslint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: shared-lint-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: node ./scripts/tasks/eslint
check_license:
name: Check license
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: shared-lint-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: ./scripts/ci/check_license.sh
test_print_warnings:
name: Test print warnings
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: yarn
cache-dependency-path: yarn.lock
- name: Restore cached node_modules
uses: actions/cache@v4
id: node_modules
with:
path: |
**/node_modules
key: shared-lint-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Ensure clean build directory
run: rm -rf build
- run: yarn install --frozen-lockfile
if: steps.node_modules.outputs.cache-hit != 'true'
- run: ./scripts/ci/test_print_warnings.sh
================================================
FILE: .github/workflows/shared_stale.yml
================================================
# Configuration for stale action workflow - https://github.com/actions/stale
name: (Shared) Manage stale issues and PRs
on:
schedule:
# Run hourly
- cron: '0 * * * *'
workflow_dispatch:
permissions:
# https://github.com/actions/stale/tree/v9/?tab=readme-ov-file#recommended-permissions
issues: write
pull-requests: write
env:
TZ: /usr/share/zoneinfo/America/Los_Angeles
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
# --- Issues & PRs ---
# Number of days of inactivity before an issue or PR becomes stale
days-before-stale: 90
# Number of days of inactivity before a stale issue or PR is closed
days-before-close: 7
# API calls per run
operations-per-run: 100
# --- Issues ---
stale-issue-label: "Resolution: Stale"
# Comment to post when marking an issue as stale
stale-issue-message: >
This issue has been automatically marked as stale.
**If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open.
We are sorry that we haven't been able to prioritize it yet. If you have any new additional information, please include it with your comment!
# Comment to post when closing a stale issue
close-issue-message: >
Closing this issue after a prolonged period of inactivity. If this issue is still present in the latest release, please create a new issue with up-to-date information. Thank you!
# Issues with these labels will never be considered stale
exempt-issue-labels: "Partner,React Core Team,Resolution: Backlog,Type: Bug,Type: Discussion,Type: Needs Investigation,Type: Regression,Type: Feature Request,Type: Enhancement"
# --- PRs ---
stale-pr-label: "Resolution: Stale"
# Comment to post when marking a pull request as stale
stale-pr-message: >
This pull request has been automatically marked as stale.
**If this pull request is still relevant, please leave any comment** (for example, "bump"), and we'll keep it open.
We are sorry that we haven't been able to prioritize reviewing it yet. Your contribution is very much appreciated.
# Comment to post when closing a stale pull request
close-pr-message: >
Closing this pull request after a prolonged period of inactivity. If this issue is still present in the latest release, please ask for this pull request to be reopened. Thank you!
# PRs with these labels will never be considered stale
exempt-pr-labels: "Partner,React Core Team,Resolution: Backlog,Type: Bug,Type: Discussion,Type: Needs Investigation,Type: Regression,Type: Feature Request,Type: Enhancement"
================================================
FILE: .gitignore
================================================
.DS_STORE
node_modules
scripts/flow/*/.flowconfig
.flowconfig
*~
*.pyc
.grunt
_SpecRunner.html
__benchmarks__
build/
remote-repo/
coverage/
.module-cache
fixtures/dom/public/react-dom.js
fixtures/dom/public/react.js
test/the-files-to-test.generated.js
*.log*
chrome-user-data
*.sublime-project
*.sublime-workspace
.idea
*.iml
.vscode
*.swp
*.swo
/tmp
/.worktrees
.claude/*.local.*
packages/react-devtools-core/dist
packages/react-devtools-extensions/chrome/build
packages/react-devtools-extensions/chrome/*.crx
packages/react-devtools-extensions/chrome/*.pem
packages/react-devtools-extensions/firefox/build
packages/react-devtools-extensions/firefox/*.xpi
packages/react-devtools-extensions/firefox/*.pem
packages/react-devtools-extensions/shared/build
packages/react-devtools-extensions/.tempUserDataDir
packages/react-devtools-fusebox/dist
packages/react-devtools-inline/dist
packages/react-devtools-shell/dist
packages/react-devtools-timeline/dist
================================================
FILE: .mailmap
================================================
Adam Timberlake <adam.timberlake@gmail.com>
Alex Mykyta <dancingwithcows@gmail.com>
Alex Pien <alexpien@gmail.com>
Alex Pien <alexpien@gmail.com> <pien@pien-mbp.dhcp.thefacebook.com>
Alex Pien <alexpien@gmail.com> <pien@pien-mbp.local>
Andreas Savvides <asavvides@twitter.com> <AnSavvides@users.noreply.github.com>
Andreas Savvides <asavvides@twitter.com> <andreas@nibbli.com>
Andreas Svensson <andreas@syranide.com>
Andres Suarez <zertosh@gmail.com>
Andrew Kulakov <avk@8xx8.ru>
Andrew Sokolov <asokolov@atlassian.com>
Anto Aravinth <anto.aravinth.cse@gmail.com>
Baraa Hamodi <bhamodi@uwaterloo.ca> <baraa@optimizely.com>
Ben Halpern <bendhalpern@gmail.com>
Ben Newman <bn@cs.stanford.edu> <benjamn@fb.com>
Benjamin Woodruff <github@benjam.info> <bgw@fb.com>
Bill Fisher <fisherwebdev@gmail.com>
Blaine Kasten <blainekasten@gmail.com>
Brandon Tilley <brandon@brandontilley.com>
Changsoon Bok <winmain@gmail.com>
Cheng Lou <chenglou92@gmail.com> <chenglou@fb.com>
Christian Oliff <christianoliff@yahoo.com>
Christoph Pojer <christoph.pojer@gmail.com>
Christoph Pojer <christoph.pojer@gmail.com> <cpojer@fb.com>
Connor McSheffrey <c@conr.me> <connor.mcsheffrey@gmail.com>
Conor Hastings <hastings.conorm@gmail.com> <conor@socialtables.com>
Dan Schafer <dschafer@fb.com>
Daniel Gasienica <daniel@gasienica.ch> <daniel@fiftythree.com>
Daniel Gasienica <daniel@gasienica.ch> <dgasienica@zynga.com>
Daniel Hejl <daniel.hejl@hotmail.com>
Daniel Lo Nigro <daniel@dan.cx> <danlo@fb.com>
Dave Galbraith <dave@jut.io>
Dennis Johnson <songawee@gmail.com>
Dmitry Blues <dmitri.blyus@gmail.com>
Dongsheng Liu <bellanchor@gmail.com>
Erik Harper <eharper@mixpo.com>
Evan Coonrod <evan@paloalto.com>
Fabio M. Costa <fabiomcosta@gmail.com> <fabs@fb.com>
Felix Kling <felix.kling@gmx.net> <fkling@fb.com>
François-Xavier Bois <fxbois@gmail.com>
Fyodor Ivanishchev <cbrwizard@gmail.com>
Gabe Levi <gabelevi@gmail.com> <glevi@fb.com>
Geert Pasteels <geert.pasteels@gmail.com>
George A Sisco III <george.sisco@gmail.com>
Georgii Dolzhykov <thorn.mailbox@gmail.com>
Harry Hull <harry.hull1@gmail.com>
Hendrik Swanepoel <hendrik.swanepoel@gmail.com>
Hyeock Kwon <doublus@gmail.com>
Ian Obermiller <ian@obermillers.com> <iano@fb.com>
Ilia Pavlenkov <dortonway@gmail.com>
Ilyá Belsky <gelias.gbelsky@gmail.com>
Ingvar Stepanyan <me@rreverser.com> <rreverser@ubuntu.rreverser.a4.internal.cloudapp.net>
Irae Carvalho <irae@irae.pro.br>
Ivan Vergiliev <ivan.vergiliev@gmail.com>
JJ Weber <jj.weber@gmail.com>
Jae Hun Ro <jhr24@duke.edu>
Jaime Mingo <j.mingov@3boll.com>
James Brantly <james@jbrantly.com>
Jan Hancic <jan.hancic@gmail.com> <jan.hancic@caplin.com>
Jan Kassens <jan@kassens.net> <jkassens@fb.com>
Jason Bonta <jbonta@gmail.com> <jasonbonta@fb.com>
Jason Quense <monastic.panic@gmail.com>
Jason Trill <jason@jasontrill.com>
Jeff Chan <jefftchan@gmail.com> <jeff@quizlet.com>
Jeff Morrison <jeff@anafx.com> <Jeff@anafx.com>
Jeff Morrison <jeff@anafx.com> <jeffmo@fb.com>
Jeff Morrison <jeff@anafx.com> <lbljeffmo@gmail.com>
Jeffrey Lin <lin.jeffrey@gmail.com> <jeffreylin@fb.com>
Jim Sproch <jsproch@fb.com>
Jim Sproch <jsproch@fb.com> <jsfb@github>
Jim Sproch <jsproch@fb.com> <none@no-reply.com>
Jinwoo Oh <arkist@gmail.com>
Jinxiu Lee <lee.jinxiu@gmail.com>
Jiyeon Seo <zzzeons@gmail.com>
Jon Chester <jonchester@fb.com>
Jon Madison <jon@tfftech.com>
Jonathan Hsu <jhiswin@gmail.com>
Jonathan Persson <persson.jonathan@gmail.com> <jonathan.persson@creuna.se>
Jordan Walke <jordojw@gmail.com>
Jordan Walke <jordojw@gmail.com> <jordanjcw@fb.com>
Joseph Savona <joesavona@fb.com> <josephsavona@users.noreply.github.com>
Josh Duck <josh@fb.com> <github@joshduck.com>
Juan Serrano <germ13@users.noreply.github.com>
Jun Wu <quark@lihdd.net>
Justin Robison <jrobison151@gmail.com>
Keito Uchiyama <projects@keito.me> <keito@fb.com>
Kevin Coughlin <kevintcoughlin@gmail.com> <kevincoughlin@tumblr.com>
Krystian Karczewski <karcz.k@gmail.com>
Kunal Mehta <k.mehta@berkeley.edu> <kunalm@fb.com>
Laurence Rowe <l@lrowe.co.uk> <laurence@lrowe.co.uk>
Lea Rosema <terabaud@gmail.com>
Marcin K. <katzoo@github.mail>
Mark Anderson <undernewmanagement@users.noreply.github.com>
Mark Funk <mfunk86@gmail.com> <mark@boomtownroi.com>
Martin Andert <mandert@gmail.com>
Mathieu M-Gosselin <mathieumg@gmail.com> <mathieumg@atx33.com>
Matsunoki <himkt@klis.tsukuba.ac.jp>
Matt Brookes <matt@brookes.net>
Matt Dunn-Rankin <mdunnrankin@gmail.com> <matchu1993@gmail.com>
Matt Zabriskie <mzabriskie@gmail.com>
Matthew Johnston <matthewjohnston4@outlook.com> <matthewjohnston4@users.noreply.github.com>
Matthew Looi <looi.matthew@gmail.com>
Mattijs Kneppers <mattijs@arttech.nl>
Max Heiber <max.heiber@gmail.com>
Max Stoiber <contact@mstoiber.com>
Michal Srb <xixixao@seznam.cz> xixixao <xixixao@seznam.cz>
Michelle Todd <himichelletodd@gmail.com> <michelle@khanacademy.org>
Mihai Parparita <mihai.parparita@gmail.com> <mihai@persistent.info>
Minwe LUO <minwe@yunshipei.com>
Murray M. Moss <murray@mmoss.name> <MMoss@cainc.com>
Murray M. Moss <murray@mmoss.name> <mmoss@users.noreply.github.com>
Neri Marschik <marschik_neri@cyberagent.co.jp>
Nick Gavalas <njg57@cornell.edu>
Nick Thompson <ncthom91@gmail.com> <nickt@instagram.com>
Patrick Stapleton <github@gdi2290.com>
Paul O’Shannessy <paul@oshannessy.com> <poshannessy@fb.com>
Paul Shen <paul@mnml0.com> <paulshen@fb.com>
Pete Hunt <floydophone@gmail.com>
Pete Hunt <floydophone@gmail.com> <pete.hunt@fb.com>
Pete Hunt <floydophone@gmail.com> <pete@instagram.com>
Pete Hunt <floydophone@gmail.com> <phunt@instagram.com>
Petri Lievonen <plievone@cc.hut.fi>
Petri Lievonen <plievone@cc.hut.fi> <petri.lievonen@tkk.fi>
Pieter Vanderwerff <me@pieter.io> <pieter@heyday.co.nz>
Pouja Nikray <poujanik@gmail.com>
Rainer Oviir <roviir@gmail.com> <raineroviir@rainers-MacBook-Pro.local>
Ray <ray@tomo.im>
Richard Feldman <richard.t.feldman@gmail.com> <richard@noredink.com>
Richard Livesey <Livesey7@hotmail.co.uk>
Rick Hanlon <rickhanlonii@gmail.com>
Rick Hanlon <rickhanlonii@gmail.com> <rickhanlonii@fb.com>
Rob Arnold <robarnold@cs.cmu.edu>
Robert Binna <rbinna@gmail.com> <speedskater@users.noreply.github.com>
Robin Frischmann <robin@rofrischmann.de>
Sander Spies <sandermail@gmail.com>
Scott Feeney <scott@oceanbase.org> <smf@fb.com>
Sebastian Markbåge <sebastian@calyptus.eu> <sema@fb.com>
Sergey Rubanov <chi187@gmail.com>
Shogun Sea <shogunsea08@gmail.com> <xxin@groupon.com>
Soichiro Kawamura <mail@w-st.com>
Sophie Alpert <git@sophiebits.com> <balpert@fb.com>
Sophie Alpert <git@sophiebits.com> <ben@benalpert.com>
Sophie Alpert <git@sophiebits.com> <sophiebits@fb.com>
Sophie Alpert <git@sophiebits.com> <spicyjalapeno@gmail.com>
Sota Ohara <ohrst.18@gmail.com>
Steven Luscher <react@steveluscher.com> <github@steveluscher.com>
Steven Luscher <react@steveluscher.com> <steveluscher@fb.com>
Steven Luscher <react@steveluscher.com> <steveluscher@instagram.com>
Steven Luscher <react@steveluscher.com> <steveluscher@users.noreply.github.com>
Seth Webster <sethwebster@gmail.com> <sethwebster@fb.com>
Stoyan Stefanov <ssttoo@ymail.com>
Tengfei Guo <terryr3rd@yeah.net> <tfguo369@gmail.com>
Thomas Aylott <oblivious@subtlegradient.com> <aylott@fb.com>
Timothy Yung <yungsters@gmail.com> <yungsters@fb.com>
Tomoya Suzuki <tmysz.dev@gmail.com>
Vasiliy Loginevskiy <Yeti.or@gmail.com>
Vasiliy Loginevskiy <Yeti.or@gmail.com> <yeti-or@yandex-team.ru>
Vjeux <vjeuxx@gmail.com>
Vjeux <vjeuxx@gmail.com> <vjeux@fb.com>
Volkan Unsal <spocksplanet@gmail.com>
Wander Wang <wander.wang@ismole.com>
Xavier Morel <xmo-odoo@users.noreply.github.com>
YouBao Nong <noyobo@gmail.com> <nongyoubao@alibaba-inc.com>
Yutaka Nakajima <nakazye@gmail.com>
Zach Bruggeman <mail@bruggie.com> <zbruggeman@me.com>
iawia002 <z2d@jifangcheng.com> <850127508@qq.com>
元彦 <yuanyan@users.noreply.github.com>
张敏 <cookfront@gmail.com>
================================================
FILE: .nvmrc
================================================
v20.19.0
================================================
FILE: .prettierignore
================================================
# react runtime
build
packages/react-devtools-core/dist
packages/react-devtools-extensions/chrome/build
packages/react-devtools-extensions/firefox/build
packages/react-devtools-extensions/edge/build
packages/react-devtools-extensions/shared/build
packages/react-devtools-extensions/src/ErrorTesterCompiled.js
packages/react-devtools-fusebox/dist
packages/react-devtools-inline/dist
packages/react-devtools-shared/src/hooks/__tests__/__source__/__compiled__/
packages/react-devtools-shared/src/hooks/__tests__/__source__/__untransformed__/
packages/react-devtools-shell/dist
packages/react-devtools-timeline/dist
packages/react-devtools-timeline/static
# react compiler
compiler/**/dist
compiler/**/__tests__/fixtures/**/*.expect.md
compiler/**/.next
# contains invalid graphql`...` which results in a promise rejection error from `yarn prettier-all`.
compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/error.todo-kitchensink.js
compiler/crates
compiler/target
compiler/apps/playground/public
compiler/**/LICENSE
compiler/*.md*
compiler/*.json
compiler/*.css
compiler/*.webmanifest
compiler/*.map
compiler/*.sh
compiler/*.txt
compiler/*.ico
compiler/*.svg
compiler/*.lock
compiler/*.toml
================================================
FILE: .prettierrc.js
================================================
'use strict';
const {esNextPaths} = require('./scripts/shared/pathsByLanguageVersion');
module.exports = {
bracketSpacing: false,
singleQuote: true,
bracketSameLine: true,
trailingComma: 'es5',
printWidth: 80,
parser: 'flow',
arrowParens: 'avoid',
overrides: [
{
files: ['*.code-workspace'],
options: {
parser: 'json-stringify',
},
},
{
files: esNextPaths,
options: {
trailingComma: 'all',
},
},
{
files: ['*.ts', '*.tsx'],
options: {
trailingComma: 'all',
parser: 'typescript',
},
},
],
};
================================================
FILE: .watchmanconfig
================================================
{}
================================================
FILE: CHANGELOG.md
================================================
## 19.2.1 (Dec 3, 2025)
### React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage [#35277](https://github.com/facebook/react/pull/35277))
## 19.2.0 (October 1st, 2025)
Below is a list of all new features, APIs, and bug fixes.
Read the [React 19.2 release post](https://react.dev/blog/2025/10/01/react-19-2) for more information.
### New React Features
- [`<Activity>`](https://react.dev/reference/react/Activity): A new API to hide and restore the UI and internal state of its children.
- [`useEffectEvent`](https://react.dev/reference/react/useEffectEvent) is a React Hook that lets you extract non-reactive logic into an [Effect Event](https://react.dev/learn/separating-events-from-effects#declaring-an-effect-event).
- [`cacheSignal`](https://react.dev/reference/react/cacheSignal) (for RSCs) lets your know when the `cache()` lifetime is over.
- [React Performance tracks](https://react.dev/reference/dev-tools/react-performance-tracks) appear on the Performance panel’s timeline in your browser developer tools
### New React DOM Features
- Added resume APIs for partial pre-rendering with Web Streams:
- [`resume`](https://react.dev/reference/react-dom/server/resume): to resume a prerender to a stream.
- [`resumeAndPrerender`](https://react.dev/reference/react-dom/static/resumeAndPrerender): to resume a prerender to HTML.
- Added resume APIs for partial pre-rendering with Node Streams:
- [`resumeToPipeableStream`](https://react.dev/reference/react-dom/server/resumeToPipeableStream): to resume a prerender to a stream.
- [`resumeAndPrerenderToNodeStream`](https://react.dev/reference/react-dom/static/resumeAndPrerenderToNodeStream): to resume a prerender to HTML.
- Updated [`prerender`](https://react.dev/reference/react-dom/static/prerender) APIs to return a `postponed` state that can be passed to the `resume` APIs.
### Notable changes
- React DOM now batches suspense boundary reveals, matching the behavior of client side rendering. This change is especially noticeable when animating the reveal of Suspense boundaries e.g. with the upcoming `<ViewTransition>` Component. React will batch as much reveals as possible before the first paint while trying to hit popular first-contentful paint metrics.
- Add Node Web Streams (`prerender`, `renderToReadableStream`) to server-side-rendering APIs for Node.js
- Use underscore instead of `:` IDs generated by useId
### All Changes
#### React
- `<Activity />` was developed over many years, starting before `ClassComponent.setState` (@acdlite @sebmarkbage and many others)
- Stringify context as "SomeContext" instead of "SomeContext.Provider" (@kassens [#33507](https://github.com/facebook/react/pull/33507))
- Include stack of cause of React instrumentation errors with `%o` placeholder (@eps1lon [#34198](https://github.com/facebook/react/pull/34198))
- Fix infinite `useDeferredValue` loop in popstate event (@acdlite [#32821](https://github.com/facebook/react/pull/32821))
- Fix a bug when an initial value was passed to `useDeferredValue` (@acdlite [#34376](https://github.com/facebook/react/pull/34376))
- Fix a crash when submitting forms with Client Actions (@sebmarkbage [#33055](https://github.com/facebook/react/pull/33055))
- Hide/unhide the content of dehydrated suspense boundaries if they resuspend (@sebmarkbage [#32900](https://github.com/facebook/react/pull/32900))
- Avoid stack overflow on wide trees during Hot Reload (@sophiebits [#34145](https://github.com/facebook/react/pull/34145))
- Improve Owner and Component stacks in various places (@sebmarkbage, @eps1lon: [#33629](https://github.com/facebook/react/pull/33629), [#33724](https://github.com/facebook/react/pull/33724), [#32735](https://github.com/facebook/react/pull/32735), [#33723](https://github.com/facebook/react/pull/33723))
- Add `cacheSignal` (@sebmarkbage [#33557](https://github.com/facebook/react/pull/33557))
#### React DOM
- Block on Suspensey Fonts during reveal of server-side-rendered content (@sebmarkbage [#33342](https://github.com/facebook/react/pull/33342))
- Use underscore instead of `:` for IDs generated by `useId` (@sebmarkbage, @eps1lon: [#32001](https://github.com/facebook/react/pull/32001), [https://github.com/facebook/react/pull/33342](https://github.com/facebook/react/pull/33342)[#33099](https://github.com/facebook/react/pull/33099), [#33422](https://github.com/facebook/react/pull/33422))
- Stop warning when ARIA 1.3 attributes are used (@Abdul-Omira [#34264](https://github.com/facebook/react/pull/34264))
- Allow `nonce` to be used on hoistable styles (@Andarist [#32461](https://github.com/facebook/react/pull/32461))
- Warn for using a React owned node as a Container if it also has text content (@sebmarkbage [#32774](https://github.com/facebook/react/pull/32774))
- s/HTML/text for for error messages if text hydration mismatches (@rickhanlonii [#32763](https://github.com/facebook/react/pull/32763))
- Fix a bug with `React.use` inside `React.lazy`\-ed Component (@hi-ogawa [#33941](https://github.com/facebook/react/pull/33941))
- Enable the `progressiveChunkSize` option for server-side-rendering APIs (@sebmarkbage [#33027](https://github.com/facebook/react/pull/33027))
- Fix a bug with deeply nested Suspense inside Suspense fallback when server-side-rendering (@gnoff [#33467](https://github.com/facebook/react/pull/33467))
- Avoid hanging when suspending after aborting while rendering (@gnoff [#34192](https://github.com/facebook/react/pull/34192))
- Add Node Web Streams to server-side-rendering APIs for Node.js (@sebmarkbage [#33475](https://github.com/facebook/react/pull/33475))
#### React Server Components
- Preload `<img>` and `<link>` using hints before they're rendered (@sebmarkbage [#34604](https://github.com/facebook/react/pull/34604))
- Log error if production elements are rendered during development (@eps1lon [#34189](https://github.com/facebook/react/pull/34189))
- Fix a bug when returning a Temporary reference (e.g. a Client Reference) from Server Functions (@sebmarkbage [#34084](https://github.com/facebook/react/pull/34084), @denk0403 [#33761](https://github.com/facebook/react/pull/33761))
- Pass line/column to `filterStackFrame` (@eps1lon [#33707](https://github.com/facebook/react/pull/33707))
- Support Async Modules in Turbopack Server References (@lubieowoce [#34531](https://github.com/facebook/react/pull/34531))
- Add support for .mjs file extension in Webpack (@jennyscript [#33028](https://github.com/facebook/react/pull/33028))
- Fix a wrong missing key warning (@unstubbable [#34350](https://github.com/facebook/react/pull/34350))
- Make console log resolve in predictable order (@sebmarkbage [#33665](https://github.com/facebook/react/pull/33665))
#### React Reconciler
- [createContainer](https://github.com/facebook/react/blob/v19.2.0/packages/react-reconciler/src/ReactFiberReconciler.js#L255-L261) and [createHydrationContainer](https://github.com/facebook/react/blob/v19.2.0/packages/react-reconciler/src/ReactFiberReconciler.js#L305-L312) had their parameter order adjusted after `on*` handlers to account for upcoming experimental APIs
## 19.1.2 (Dec 3, 2025)
### React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage [#35277](https://github.com/facebook/react/pull/35277))
## 19.1.1 (July 28, 2025)
### React
* Fixed Owner Stacks to work with ES2015 function.name semantics ([#33680](https://github.com/facebook/react/pull/33680) by @hoxyq)
## 19.1.0 (March 28, 2025)
### Owner Stack
An Owner Stack is a string representing the components that are directly responsible for rendering a particular component. You can log Owner Stacks when debugging or use Owner Stacks to enhance error overlays or other development tools. Owner Stacks are only available in development builds. Component Stacks in production are unchanged.
* An Owner Stack is a development-only stack trace that helps identify which components are responsible for rendering a particular component. An Owner Stack is distinct from a Component Stacks, which shows the hierarchy of components leading to an error.
* The [captureOwnerStack API](https://react.dev/reference/react/captureOwnerStack) is only available in development mode and returns a Owner Stack, if available. The API can be used to enhance error overlays or log component relationships when debugging. [#29923](https://github.com/facebook/react/pull/29923), [#32353](https://github.com/facebook/react/pull/32353), [#30306](https://github.com/facebook/react/pull/30306),
[#32538](https://github.com/facebook/react/pull/32538), [#32529](https://github.com/facebook/react/pull/32529), [#32538](https://github.com/facebook/react/pull/32538)
### React
* Enhanced support for Suspense boundaries to be used anywhere, including the client, server, and during hydration. [#32069](https://github.com/facebook/react/pull/32069), [#32163](https://github.com/facebook/react/pull/32163), [#32224](https://github.com/facebook/react/pull/32224), [#32252](https://github.com/facebook/react/pull/32252)
* Reduced unnecessary client rendering through improved hydration scheduling [#31751](https://github.com/facebook/react/pull/31751)
* Increased priority of client rendered Suspense boundaries [#31776](https://github.com/facebook/react/pull/31776)
* Fixed frozen fallback states by rendering unfinished Suspense boundaries on the client. [#31620](https://github.com/facebook/react/pull/31620)
* Reduced garbage collection pressure by improving Suspense boundary retries. [#31667](https://github.com/facebook/react/pull/31667)
* Fixed erroneous “Waiting for Paint” log when the passive effect phase was not delayed [#31526](https://github.com/facebook/react/pull/31526)
* Fixed a regression causing key warnings for flattened positional children in development mode. [#32117](https://github.com/facebook/react/pull/32117)
* Updated `useId` to use valid CSS selectors, changing format from `:r123:` to `«r123»`. [#32001](https://github.com/facebook/react/pull/32001)
* Added a dev-only warning for null/undefined created in useEffect, useInsertionEffect, and useLayoutEffect. [#32355](https://github.com/facebook/react/pull/32355)
* Fixed a bug where dev-only methods were exported in production builds. React.act is no longer available in production builds. [#32200](https://github.com/facebook/react/pull/32200)
* Improved consistency across prod and dev to improve compatibility with Google Closure Compiler and bindings [#31808](https://github.com/facebook/react/pull/31808)
* Improve passive effect scheduling for consistent task yielding. [#31785](https://github.com/facebook/react/pull/31785)
* Fixed asserts in React Native when passChildrenWhenCloningPersistedNodes is enabled for OffscreenComponent rendering. [#32528](https://github.com/facebook/react/pull/32528)
* Fixed component name resolution for Portal [#32640](https://github.com/facebook/react/pull/32640)
* Added support for beforetoggle and toggle events on the dialog element. [#32479](https://github.com/facebook/react/pull/32479)
### React DOM
* Fixed double warning when the `href` attribute is an empty string [#31783](https://github.com/facebook/react/pull/31783)
* Fixed an edge case where `getHoistableRoot()` didn’t work properly when the container was a Document [#32321](https://github.com/facebook/react/pull/32321)
* Removed support for using HTML comments (e.g. `<!-- -->`) as a DOM container. [#32250](https://github.com/facebook/react/pull/32250)
* Added support for `<script>` and `<template>` tags to be nested within `<select>` tags. [#31837](https://github.com/facebook/react/pull/31837)
* Fixed responsive images to be preloaded as HTML instead of headers [#32445](https://github.com/facebook/react/pull/32445)
### use-sync-external-store
* Added `exports` field to `package.json` for `use-sync-external-store` to support various entrypoints. [#25231](https://github.com/facebook/react/pull/25231)
### React Server Components
* Added `unstable_prerender`, a new experimental API for prerendering React Server Components on the server [#31724](https://github.com/facebook/react/pull/31724)
* Fixed an issue where streams would hang when receiving new chunks after a global error [#31840](https://github.com/facebook/react/pull/31840), [#31851](https://github.com/facebook/react/pull/31851)
* Fixed an issue where pending chunks were counted twice. [#31833](https://github.com/facebook/react/pull/31833)
* Added support for streaming in edge environments [#31852](https://github.com/facebook/react/pull/31852)
* Added support for sending custom error names from a server so that they are available in the client for console replaying. [#32116](https://github.com/facebook/react/pull/32116)
* Updated the server component wire format to remove IDs for hints and console.log because they have no return value [#31671](https://github.com/facebook/react/pull/31671)
* Exposed `registerServerReference` in client builds to handle server references in different environments. [#32534](https://github.com/facebook/react/pull/32534)
* Added react-server-dom-parcel package which integrates Server Components with the [Parcel bundler](https://parceljs.org/) [#31725](https://github.com/facebook/react/pull/31725), [#32132](https://github.com/facebook/react/pull/32132), [#31799](https://github.com/facebook/react/pull/31799), [#32294](https://github.com/facebook/react/pull/32294), [#31741](https://github.com/facebook/react/pull/31741)
## 19.0.1 (Dec 3, 2025)
### React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage [#35277](https://github.com/facebook/react/pull/35277))
## 19.0.0 (December 5, 2024)
Below is a list of all new features, APIs, deprecations, and breaking changes. Read [React 19 release post](https://react.dev/blog/2024/04/25/react-19) and [React 19 upgrade guide](https://react.dev/blog/2024/04/25/react-19-upgrade-guide) for more information.
> Note: To help make the upgrade to React 19 easier, we’ve published a react@18.3 release that is identical to 18.2 but adds warnings for deprecated APIs and other changes that are needed for React 19. We recommend upgrading to React 18.3.1 first to help identify any issues before upgrading to React 19.
### New Features
#### React
* Actions: `startTransition` can now accept async functions. Functions passed to `startTransition` are called “Actions”. A given Transition can include one or more Actions which update state in the background and update the UI with one commit. In addition to updating state, Actions can now perform side effects including async requests, and the Action will wait for the work to finish before finishing the Transition. This feature allows Transitions to include side effects like `fetch()` in the pending state, and provides support for error handling, and optimistic updates.
* `useActionState`: is a new hook to order Actions inside of a Transition with access to the state of the action, and the pending state. It accepts a reducer that can call Actions, and the initial state used for first render. It also accepts an optional string that is used if the action is passed to a form `action` prop to support progressive enhancement in forms.
* `useOptimistic`: is a new hook to update state while a Transition is in progress. It returns the state, and a set function that can be called inside a transition to “optimistically” update the state to expected final value immediately while the Transition completes in the background. When the transition finishes, the state is updated to the new value.
* `use`: is a new API that allows reading resources in render. In React 19, `use` accepts a promise or Context. If provided a promise, `use` will suspend until a value is resolved. `use` can only be used in render but can be called conditionally.
* `ref` as a prop: Refs can now be used as props, removing the need for `forwardRef`.
* **Suspense sibling pre-warming**: When a component suspends, React will immediately commit the fallback of the nearest Suspense boundary, without waiting for the entire sibling tree to render. After the fallback commits, React will schedule another render for the suspended siblings to “pre-warm” lazy requests.
#### React DOM Client
* `<form> action` prop: Form Actions allow you to manage forms automatically and integrate with `useFormStatus`. When a `<form> action` succeeds, React will automatically reset the form for uncontrolled components. The form can be reset manually with the new `requestFormReset` API.
* `<button> and <input> formAction` prop: Actions can be passed to the `formAction` prop to configure form submission behavior. This allows using different Actions depending on the input.
* `useFormStatus`: is a new hook that provides the status of the parent `<form> action`, as if the form was a Context provider. The hook returns the values: `pending`, `data`, `method`, and `action`.
* Support for Document Metadata: We’ve added support for rendering document metadata tags in components natively. React will automatically hoist them into the `<head>` section of the document.
* Support for Stylesheets: React 19 will ensure stylesheets are inserted into the `<head>` on the client before revealing the content of a Suspense boundary that depends on that stylesheet.
* Support for async scripts: Async scripts can be rendered anywhere in the component tree and React will handle ordering and deduplication.
* Support for preloading resources: React 19 ships with `preinit`, `preload`, `prefetchDNS`, and `preconnect` APIs to optimize initial page loads by moving discovery of additional resources like fonts out of stylesheet loading. They can also be used to prefetch resources used by an anticipated navigation.
#### React DOM Server
* Added `prerender` and `prerenderToNodeStream` APIs for static site generation. They are designed to work with streaming environments like Node.js Streams and Web Streams. Unlike `renderToString`, they wait for data to load for HTML generation.
#### React Server Components
* RSC features such as directives, server components, and server functions are now stable. This means libraries that ship with Server Components can now target React 19 as a peer dependency with a react-server export condition for use in frameworks that support the Full-stack React Architecture. The underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x. See [docs](https://19.react.dev/reference/rsc/server-components) for how to support React Server Components.
### Deprecations
* Deprecated: `element.ref` access: React 19 supports ref as a prop, so we’re deprecating `element.ref` in favor of `element.props.ref`. Accessing will result in a warning.
* `react-test-renderer`: In React 19, react-test-renderer logs a deprecation warning and has switched to concurrent rendering for web usage. We recommend migrating your tests to [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://testing-library.com/docs/react-native-testing-library/intro)
### Breaking Changes
React 19 brings in a number of breaking changes, including the removals of long-deprecated APIs. We recommend first upgrading to `18.3.1`, where we've added additional deprecation warnings. Check out the [upgrade guide](https://19.react.dev/blog/2024/04/25/react-19-upgrade-guide) for more details and guidance on codemodding.
### React
* New JSX Transform is now required: We introduced [a new JSX transform](https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html) in 2020 to improve bundle size and use JSX without importing React. In React 19, we’re adding additional improvements like using ref as a prop and JSX speed improvements that require the new transform.
* Errors in render are not re-thrown: Errors that are not caught by an Error Boundary are now reported to window.reportError. Errors that are caught by an Error Boundary are reported to console.error. We’ve introduced `onUncaughtError` and `onCaughtError` methods to `createRoot` and `hydrateRoot` to customize this error handling.
* Removed: `propTypes`: Using `propTypes` will now be silently ignored. If required, we recommend migrating to TypeScript or another type-checking solution.
* Removed: `defaultProps` for functions: ES6 default parameters can be used in place. Class components continue to support `defaultProps` since there is no ES6 alternative.
* Removed: `contextTypes` and `getChildContext`: Legacy Context for class components has been removed in favor of the `contextType` API.
* Removed: string refs: Any usage of string refs need to be migrated to ref callbacks.
* Removed: Module pattern factories: A rarely used pattern that can be migrated to regular functions.
* Removed: `React.createFactory`: Now that JSX is broadly supported, all `createFactory` usage can be migrated to JSX components.
* Removed: `react-test-renderer/shallow`: This has been a re-export of [react-shallow-renderer](https://github.com/enzymejs/react-shallow-renderer) since React 18\. If needed, you can continue to use the third-party package directly. We recommend using [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://testing-library.com/docs/react-native-testing-library/intro) instead.
#### React DOM
* Removed: `react-dom/test-utils`: We’ve moved `act` from `react-dom/test-utils` to react. All other utilities have been removed.
* Removed: `ReactDOM`.`render`, `ReactDOM`.`hydrate`: These have been removed in favor of the concurrent equivalents: `ReactDOM`.`createRoot` and `ReactDOM.hydrateRoot`.
* Removed: `unmountComponentAtNode`: Removed in favor of `root.unmount()`.
* Removed: `ReactDOM`.`findDOMNode`: You can replace `ReactDOM`.`findDOMNode` with DOM Refs.
### Notable Changes
#### React
* `<Context>` as a provider: You can now render `<Context>` as a provider instead of `<Context.Provider>`.
* Cleanup functions for refs: When the component unmounts, React will call the cleanup function returned from the ref callback.
* `useDeferredValue` initial value argument: When provided, `useDeferredValue` will return the initial value for the initial render of a component, then schedule a re-render in the background with the `deferredValue` returned.
* Support for Custom Elements: React 19 now passes all tests on [Custom Elements Everywhere](https://custom-elements-everywhere.com/).
* StrictMode changes: `useMemo` and `useCallback` will now reuse the memoized results from the first render, during the second render. Additionally, StrictMode will now double-invoke ref callback functions on initial mount.
* UMD builds removed: To load React 19 with a script tag, we recommend using an ESM-based CDN such as [esm.sh](http://esm.sh).
#### React DOM
* Diffs for hydration errors: In the case of a mismatch, React 19 logs a single error with a diff of the mismatched content.
* Compatibility with third-party scripts and extensions: React will now force a client re-render to fix up any mismatched content caused by elements inserted by third-party JS.
### TypeScript Changes
The most common changes can be codemodded with `npx types-react-codemod@latest preset-19 ./path-to-your-react-ts-files`.
* Removed deprecated TypeScript types:
* `ReactChild` (replacement: `React.ReactElement | number | string)`
* `ReactF
Showing preview only (523K chars total). Download the full file or copy to clipboard to get everything.
gitextract_j2mop8l5/ ├── .claude/ │ ├── instructions.md │ ├── settings.json │ └── skills/ │ ├── extract-errors/ │ │ └── SKILL.md │ ├── feature-flags/ │ │ └── SKILL.md │ ├── fix/ │ │ └── SKILL.md │ ├── flags/ │ │ └── SKILL.md │ ├── flow/ │ │ └── SKILL.md │ ├── test/ │ │ └── SKILL.md │ └── verify/ │ └── SKILL.md ├── .codesandbox/ │ └── ci.json ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── compiler_bug_report.yml │ │ ├── config.yml │ │ └── devtools_bug_report.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ └── workflows/ │ ├── compiler_discord_notify.yml │ ├── compiler_playground.yml │ ├── compiler_prereleases.yml │ ├── compiler_prereleases_manual.yml │ ├── compiler_prereleases_nightly.yml │ ├── compiler_typescript.yml │ ├── devtools_discord_notify.yml │ ├── devtools_regression_tests.yml │ ├── runtime_build_and_test.yml │ ├── runtime_commit_artifacts.yml │ ├── runtime_discord_notify.yml │ ├── runtime_eslint_plugin_e2e.yml │ ├── runtime_fuzz_tests.yml │ ├── runtime_prereleases.yml │ ├── runtime_prereleases_manual.yml │ ├── runtime_prereleases_nightly.yml │ ├── runtime_releases_from_npm_manual.yml │ ├── shared_check_maintainer.yml │ ├── shared_cleanup_merged_branch_caches.yml │ ├── shared_cleanup_stale_branch_caches.yml │ ├── shared_close_direct_sync_branch_prs.yml │ ├── shared_label_core_team_prs.yml │ ├── shared_lint.yml │ └── shared_stale.yml ├── .gitignore ├── .mailmap ├── .nvmrc ├── .prettierignore ├── .prettierrc.js ├── .watchmanconfig ├── CHANGELOG.md ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAINERS ├── README.md ├── ReactVersions.js ├── SECURITY.md ├── babel.config-react-compiler.js ├── babel.config-ts.js ├── babel.config.js ├── compiler/ │ ├── .claude/ │ │ ├── agents/ │ │ │ └── investigate-error.md │ │ └── settings.json │ ├── .eslintrc.js │ ├── .gitignore │ ├── CHANGELOG.md │ ├── CLAUDE.md │ ├── README.md │ ├── apps/ │ │ └── playground/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── e2e/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── page.spec.ts/ │ │ │ │ │ ├── 01-user-output.txt │ │ │ │ │ ├── 02-default-output.txt │ │ │ │ │ ├── compilationMode-all-output.txt │ │ │ │ │ ├── compilationMode-infer-output.txt │ │ │ │ │ ├── default-config.txt │ │ │ │ │ ├── function-scope-beats-module-scope-output.txt │ │ │ │ │ ├── module-scope-use-memo-output.txt │ │ │ │ │ ├── module-scope-use-no-memo-output.txt │ │ │ │ │ ├── parse-flow-output.txt │ │ │ │ │ ├── parse-typescript-output.txt │ │ │ │ │ ├── todo-function-scope-does-not-beat-module-scope-output.txt │ │ │ │ │ ├── use-memo-output.txt │ │ │ │ │ └── use-no-memo-output.txt │ │ │ │ └── page.spec.ts │ │ │ └── parseConfigOverrides.test.mjs │ │ ├── app/ │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── colors.js │ │ ├── components/ │ │ │ ├── AccordionWindow.tsx │ │ │ ├── Editor/ │ │ │ │ ├── ConfigEditor.tsx │ │ │ │ ├── EditorImpl.tsx │ │ │ │ ├── Input.tsx │ │ │ │ ├── Output.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── monacoOptions.ts │ │ │ ├── Header.tsx │ │ │ ├── Icons/ │ │ │ │ ├── IconChevron.tsx │ │ │ │ └── IconGitHub.tsx │ │ │ ├── Logo.tsx │ │ │ ├── Message.tsx │ │ │ ├── StoreContext.tsx │ │ │ ├── TabbedWindow.tsx │ │ │ └── index.ts │ │ ├── hooks/ │ │ │ ├── index.ts │ │ │ └── useMountEffect.ts │ │ ├── lib/ │ │ │ ├── compilation.ts │ │ │ ├── createContext.ts │ │ │ ├── defaultStore.ts │ │ │ ├── reactCompilerMonacoDiagnostics.ts │ │ │ ├── stores/ │ │ │ │ ├── index.ts │ │ │ │ ├── messages.ts │ │ │ │ └── store.ts │ │ │ ├── transitionTypes.ts │ │ │ └── types.d.ts │ │ ├── next.config.js │ │ ├── package.json │ │ ├── playwright.config.js │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ ├── graphvizlib.wasm │ │ │ └── site.webmanifest │ │ ├── scripts/ │ │ │ ├── downloadFonts.js │ │ │ └── link-compiler.sh │ │ ├── styles/ │ │ │ └── globals.css │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── vercel.json │ ├── docs/ │ │ ├── DESIGN_GOALS.md │ │ └── DEVELOPMENT_GUIDE.md │ ├── fixtures/ │ │ └── .gitkeep │ ├── package.json │ ├── packages/ │ │ ├── babel-plugin-react-compiler/ │ │ │ ├── README.md │ │ │ ├── docs/ │ │ │ │ └── passes/ │ │ │ │ ├── 01-lower.md │ │ │ │ ├── 02-enterSSA.md │ │ │ │ ├── 03-eliminateRedundantPhi.md │ │ │ │ ├── 04-constantPropagation.md │ │ │ │ ├── 05-deadCodeElimination.md │ │ │ │ ├── 06-inferTypes.md │ │ │ │ ├── 07-analyseFunctions.md │ │ │ │ ├── 08-inferMutationAliasingEffects.md │ │ │ │ ├── 09-inferMutationAliasingRanges.md │ │ │ │ ├── 10-inferReactivePlaces.md │ │ │ │ ├── 11-inferReactiveScopeVariables.md │ │ │ │ ├── 12-rewriteInstructionKindsBasedOnReassignment.md │ │ │ │ ├── 13-alignMethodCallScopes.md │ │ │ │ ├── 14-alignObjectMethodScopes.md │ │ │ │ ├── 15-alignReactiveScopesToBlockScopesHIR.md │ │ │ │ ├── 16-mergeOverlappingReactiveScopesHIR.md │ │ │ │ ├── 17-buildReactiveScopeTerminalsHIR.md │ │ │ │ ├── 18-flattenReactiveLoopsHIR.md │ │ │ │ ├── 19-flattenScopesWithHooksOrUseHIR.md │ │ │ │ ├── 20-propagateScopeDependenciesHIR.md │ │ │ │ ├── 21-buildReactiveFunction.md │ │ │ │ ├── 22-pruneUnusedLabels.md │ │ │ │ ├── 23-pruneNonEscapingScopes.md │ │ │ │ ├── 24-pruneNonReactiveDependencies.md │ │ │ │ ├── 25-pruneUnusedScopes.md │ │ │ │ ├── 26-mergeReactiveScopesThatInvalidateTogether.md │ │ │ │ ├── 27-pruneAlwaysInvalidatingScopes.md │ │ │ │ ├── 28-propagateEarlyReturns.md │ │ │ │ ├── 29-promoteUsedTemporaries.md │ │ │ │ ├── 30-renameVariables.md │ │ │ │ ├── 31-codegenReactiveFunction.md │ │ │ │ ├── 34-optimizePropsMethodCalls.md │ │ │ │ ├── 35-optimizeForSSR.md │ │ │ │ ├── 36-outlineJSX.md │ │ │ │ ├── 37-outlineFunctions.md │ │ │ │ ├── 38-memoizeFbtAndMacroOperandsInSameScope.md │ │ │ │ ├── 39-validateContextVariableLValues.md │ │ │ │ ├── 40-validateUseMemo.md │ │ │ │ ├── 41-validateHooksUsage.md │ │ │ │ ├── 42-validateNoCapitalizedCalls.md │ │ │ │ ├── 43-validateLocalsNotReassignedAfterRender.md │ │ │ │ ├── 44-validateNoSetStateInRender.md │ │ │ │ ├── 45-validateNoDerivedComputationsInEffects.md │ │ │ │ ├── 46-validateNoSetStateInEffects.md │ │ │ │ ├── 47-validateNoJSXInTryStatement.md │ │ │ │ ├── 48-validateNoImpureValuesInRender.md │ │ │ │ ├── 49-validateNoRefAccessInRender.md │ │ │ │ ├── 50-validateNoFreezingKnownMutableFunctions.md │ │ │ │ ├── 51-validateExhaustiveDependencies.md │ │ │ │ ├── 53-validatePreservedManualMemoization.md │ │ │ │ ├── 54-validateStaticComponents.md │ │ │ │ ├── 55-validateSourceLocations.md │ │ │ │ └── README.md │ │ │ ├── jest.config.js │ │ │ ├── package.json │ │ │ ├── scripts/ │ │ │ │ ├── babel-plugin-annotate-react-code.ts │ │ │ │ ├── build-react-hooks-fixures.js │ │ │ │ ├── eslint-plugin-react-hooks-test-cases.js │ │ │ │ ├── jest/ │ │ │ │ │ ├── e2e-classic.config.js │ │ │ │ │ ├── e2e-forget.config.js │ │ │ │ │ ├── main.config.js │ │ │ │ │ ├── makeE2EConfig.js │ │ │ │ │ ├── makeSnapshotResolver.js │ │ │ │ │ ├── makeTransform.ts │ │ │ │ │ ├── snapshot-resolver-no-forget.js │ │ │ │ │ ├── snapshot-resolver-with-forget.js │ │ │ │ │ ├── transform-no-forget.js │ │ │ │ │ └── transform-with-forget.js │ │ │ │ ├── link-react-compiler-runtime.sh │ │ │ │ └── ts-analyze-trace.sh │ │ │ ├── src/ │ │ │ │ ├── Babel/ │ │ │ │ │ ├── BabelPlugin.ts │ │ │ │ │ └── RunReactCompilerBabelPlugin.ts │ │ │ │ ├── CompilerError.ts │ │ │ │ ├── Entrypoint/ │ │ │ │ │ ├── Gating.ts │ │ │ │ │ ├── Imports.ts │ │ │ │ │ ├── Options.ts │ │ │ │ │ ├── Pipeline.ts │ │ │ │ │ ├── Program.ts │ │ │ │ │ ├── Reanimated.ts │ │ │ │ │ ├── Suppression.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Flood/ │ │ │ │ │ ├── FlowTypes.ts │ │ │ │ │ ├── TypeErrors.ts │ │ │ │ │ ├── TypeUtils.ts │ │ │ │ │ └── Types.ts │ │ │ │ ├── HIR/ │ │ │ │ │ ├── AssertConsistentIdentifiers.ts │ │ │ │ │ ├── AssertTerminalBlocksExist.ts │ │ │ │ │ ├── AssertValidBlockNesting.ts │ │ │ │ │ ├── AssertValidMutableRanges.ts │ │ │ │ │ ├── BuildHIR.ts │ │ │ │ │ ├── BuildReactiveScopeTerminalsHIR.ts │ │ │ │ │ ├── CollectHoistablePropertyLoads.ts │ │ │ │ │ ├── CollectOptionalChainDependencies.ts │ │ │ │ │ ├── ComputeUnconditionalBlocks.ts │ │ │ │ │ ├── DefaultModuleTypeProvider.ts │ │ │ │ │ ├── DeriveMinimalDependenciesHIR.ts │ │ │ │ │ ├── Dominator.ts │ │ │ │ │ ├── Environment.ts │ │ │ │ │ ├── FindContextIdentifiers.ts │ │ │ │ │ ├── Globals.ts │ │ │ │ │ ├── HIR.ts │ │ │ │ │ ├── HIRBuilder.ts │ │ │ │ │ ├── MergeConsecutiveBlocks.ts │ │ │ │ │ ├── MergeOverlappingReactiveScopesHIR.ts │ │ │ │ │ ├── ObjectShape.ts │ │ │ │ │ ├── PrintHIR.ts │ │ │ │ │ ├── PropagateScopeDependenciesHIR.ts │ │ │ │ │ ├── PruneUnusedLabelsHIR.ts │ │ │ │ │ ├── ScopeDependencyUtils.ts │ │ │ │ │ ├── TypeSchema.ts │ │ │ │ │ ├── Types.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── visitors.ts │ │ │ │ ├── Inference/ │ │ │ │ │ ├── AliasingEffects.ts │ │ │ │ │ ├── AnalyseFunctions.ts │ │ │ │ │ ├── ControlDominators.ts │ │ │ │ │ ├── DropManualMemoization.ts │ │ │ │ │ ├── InferMutationAliasingEffects.ts │ │ │ │ │ ├── InferMutationAliasingRanges.ts │ │ │ │ │ ├── InferReactivePlaces.ts │ │ │ │ │ ├── InlineImmediatelyInvokedFunctionExpressions.ts │ │ │ │ │ ├── MUTABILITY_ALIASING_MODEL.md │ │ │ │ │ └── index.ts │ │ │ │ ├── Optimization/ │ │ │ │ │ ├── ConstantPropagation.ts │ │ │ │ │ ├── DeadCodeElimination.ts │ │ │ │ │ ├── OptimizeForSSR.ts │ │ │ │ │ ├── OptimizePropsMethodCalls.ts │ │ │ │ │ ├── OutlineFunctions.ts │ │ │ │ │ ├── OutlineJsx.ts │ │ │ │ │ ├── PruneMaybeThrows.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── ReactiveScopes/ │ │ │ │ │ ├── AlignMethodCallScopes.ts │ │ │ │ │ ├── AlignObjectMethodScopes.ts │ │ │ │ │ ├── AlignReactiveScopesToBlockScopesHIR.ts │ │ │ │ │ ├── AssertScopeInstructionsWithinScope.ts │ │ │ │ │ ├── AssertWellFormedBreakTargets.ts │ │ │ │ │ ├── BuildReactiveFunction.ts │ │ │ │ │ ├── CodegenReactiveFunction.ts │ │ │ │ │ ├── CollectReactiveIdentifiers.ts │ │ │ │ │ ├── CollectReferencedGlobals.ts │ │ │ │ │ ├── ExtractScopeDeclarationsFromDestructuring.ts │ │ │ │ │ ├── FlattenReactiveLoopsHIR.ts │ │ │ │ │ ├── FlattenScopesWithHooksOrUseHIR.ts │ │ │ │ │ ├── InferReactiveScopeVariables.ts │ │ │ │ │ ├── MemoizeFbtAndMacroOperandsInSameScope.ts │ │ │ │ │ ├── MergeReactiveScopesThatInvalidateTogether.ts │ │ │ │ │ ├── PrintReactiveFunction.ts │ │ │ │ │ ├── PromoteUsedTemporaries.ts │ │ │ │ │ ├── PropagateEarlyReturns.ts │ │ │ │ │ ├── PruneAllReactiveScopes.ts │ │ │ │ │ ├── PruneAlwaysInvalidatingScopes.ts │ │ │ │ │ ├── PruneHoistedContexts.ts │ │ │ │ │ ├── PruneNonEscapingScopes.ts │ │ │ │ │ ├── PruneNonReactiveDependencies.ts │ │ │ │ │ ├── PruneTemporaryLValues.ts │ │ │ │ │ ├── PruneUnusedLabels.ts │ │ │ │ │ ├── PruneUnusedScopes.ts │ │ │ │ │ ├── RenameVariables.ts │ │ │ │ │ ├── StabilizeBlockIds.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── visitors.ts │ │ │ │ ├── SSA/ │ │ │ │ │ ├── EliminateRedundantPhi.ts │ │ │ │ │ ├── EnterSSA.ts │ │ │ │ │ ├── RewriteInstructionKindsBasedOnReassignment.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Transform/ │ │ │ │ │ ├── NameAnonymousFunctions.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── TypeInference/ │ │ │ │ │ ├── InferTypes.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Utils/ │ │ │ │ │ ├── ComponentDeclaration.ts │ │ │ │ │ ├── DisjointSet.ts │ │ │ │ │ ├── HookDeclaration.ts │ │ │ │ │ ├── Keyword.ts │ │ │ │ │ ├── Result.ts │ │ │ │ │ ├── RuntimeDiagnosticConstants.ts │ │ │ │ │ ├── Stack.ts │ │ │ │ │ ├── TestUtils.ts │ │ │ │ │ ├── todo.ts │ │ │ │ │ ├── types.d.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── Validation/ │ │ │ │ │ ├── ValidateContextVariableLValues.ts │ │ │ │ │ ├── ValidateExhaustiveDependencies.ts │ │ │ │ │ ├── ValidateHooksUsage.ts │ │ │ │ │ ├── ValidateLocalsNotReassignedAfterRender.ts │ │ │ │ │ ├── ValidateNoCapitalizedCalls.ts │ │ │ │ │ ├── ValidateNoDerivedComputationsInEffects.ts │ │ │ │ │ ├── ValidateNoDerivedComputationsInEffects_exp.ts │ │ │ │ │ ├── ValidateNoFreezingKnownMutableFunctions.ts │ │ │ │ │ ├── ValidateNoImpureFunctionsInRender.ts │ │ │ │ │ ├── ValidateNoJSXInTryStatement.ts │ │ │ │ │ ├── ValidateNoRefAccessInRender.ts │ │ │ │ │ ├── ValidateNoSetStateInEffects.ts │ │ │ │ │ ├── ValidateNoSetStateInRender.ts │ │ │ │ │ ├── ValidatePreservedManualMemoization.ts │ │ │ │ │ ├── ValidateSourceLocations.ts │ │ │ │ │ ├── ValidateStaticComponents.ts │ │ │ │ │ ├── ValidateUseMemo.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── DisjointSet-test.ts │ │ │ │ │ ├── Logger-test.ts │ │ │ │ │ ├── Result-test.ts │ │ │ │ │ ├── e2e/ │ │ │ │ │ │ ├── constant-prop.e2e.js │ │ │ │ │ │ ├── expectLogs.js │ │ │ │ │ │ ├── hello.e2e.js │ │ │ │ │ │ ├── update-button.e2e.js │ │ │ │ │ │ ├── update-expressions.e2e.js │ │ │ │ │ │ └── use-state.e2e.js │ │ │ │ │ ├── envConfig-test.ts │ │ │ │ │ ├── fixtures/ │ │ │ │ │ │ ├── compiler/ │ │ │ │ │ │ │ ├── alias-capture-in-method-receiver-and-mutate.expect.md │ │ │ │ │ │ │ ├── alias-capture-in-method-receiver-and-mutate.js │ │ │ │ │ │ │ ├── alias-capture-in-method-receiver.expect.md │ │ │ │ │ │ │ ├── alias-capture-in-method-receiver.js │ │ │ │ │ │ │ ├── alias-computed-load.expect.md │ │ │ │ │ │ │ ├── alias-computed-load.js │ │ │ │ │ │ │ ├── alias-nested-member-path-mutate.expect.md │ │ │ │ │ │ │ ├── alias-nested-member-path-mutate.js │ │ │ │ │ │ │ ├── alias-nested-member-path.expect.md │ │ │ │ │ │ │ ├── alias-nested-member-path.js │ │ │ │ │ │ │ ├── alias-while.expect.md │ │ │ │ │ │ │ ├── alias-while.js │ │ │ │ │ │ │ ├── aliased-nested-scope-fn-expr.expect.md │ │ │ │ │ │ │ ├── aliased-nested-scope-fn-expr.tsx │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.expect.md │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.tsx │ │ │ │ │ │ │ ├── align-scope-starts-within-cond.expect.md │ │ │ │ │ │ │ ├── align-scope-starts-within-cond.ts │ │ │ │ │ │ │ ├── align-scopes-iife-return-modified-later-logical.expect.md │ │ │ │ │ │ │ ├── align-scopes-iife-return-modified-later-logical.ts │ │ │ │ │ │ │ ├── align-scopes-nested-block-structure.expect.md │ │ │ │ │ │ │ ├── align-scopes-nested-block-structure.ts │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-if.expect.md │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-if.ts │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-label.expect.md │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-label.ts │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-try.expect.md │ │ │ │ │ │ │ ├── align-scopes-reactive-scope-overlaps-try.ts │ │ │ │ │ │ │ ├── align-scopes-trycatch-nested-overlapping-range.expect.md │ │ │ │ │ │ │ ├── align-scopes-trycatch-nested-overlapping-range.ts │ │ │ │ │ │ │ ├── align-scopes-within-nested-valueblock-in-array.expect.md │ │ │ │ │ │ │ ├── align-scopes-within-nested-valueblock-in-array.tsx │ │ │ │ │ │ │ ├── allocating-logical-expression-instruction-scope.expect.md │ │ │ │ │ │ │ ├── allocating-logical-expression-instruction-scope.ts │ │ │ │ │ │ │ ├── allocating-primitive-as-dep-nested-scope.expect.md │ │ │ │ │ │ │ ├── allocating-primitive-as-dep-nested-scope.js │ │ │ │ │ │ │ ├── allocating-primitive-as-dep.expect.md │ │ │ │ │ │ │ ├── allocating-primitive-as-dep.js │ │ │ │ │ │ │ ├── allow-assigning-ref-accessing-function-to-object-property-if-not-mutated.expect.md │ │ │ │ │ │ │ ├── allow-assigning-ref-accessing-function-to-object-property-if-not-mutated.js │ │ │ │ │ │ │ ├── allow-assigning-to-global-in-function-spread-as-jsx.expect.md │ │ │ │ │ │ │ ├── allow-assigning-to-global-in-function-spread-as-jsx.js │ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect-usecallback.expect.md │ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect-usecallback.js │ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect.expect.md │ │ │ │ │ │ │ ├── allow-global-mutation-in-effect-indirect.js │ │ │ │ │ │ │ ├── allow-global-mutation-unused-usecallback.expect.md │ │ │ │ │ │ │ ├── allow-global-mutation-unused-usecallback.js │ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect-indirect.expect.md │ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect-indirect.js │ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect.expect.md │ │ │ │ │ │ │ ├── allow-global-reassignment-in-effect.js │ │ │ │ │ │ │ ├── allow-merge-refs-pattern.expect.md │ │ │ │ │ │ │ ├── allow-merge-refs-pattern.js │ │ │ │ │ │ │ ├── allow-modify-global-in-callback-jsx.expect.md │ │ │ │ │ │ │ ├── allow-modify-global-in-callback-jsx.js │ │ │ │ │ │ │ ├── allow-mutate-global-in-effect-fixpoint.expect.md │ │ │ │ │ │ │ ├── allow-mutate-global-in-effect-fixpoint.js │ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx-indirect.expect.md │ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx-indirect.tsx │ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx.expect.md │ │ │ │ │ │ │ ├── allow-mutating-ref-in-callback-passed-to-jsx.tsx │ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx-indirect.expect.md │ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx-indirect.tsx │ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx.expect.md │ │ │ │ │ │ │ ├── allow-mutating-ref-property-in-callback-passed-to-jsx.tsx │ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper-props-object.expect.md │ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper-props-object.js │ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper.expect.md │ │ │ │ │ │ │ ├── allow-passing-ref-to-render-helper.js │ │ │ │ │ │ │ ├── allow-passing-refs-as-props.expect.md │ │ │ │ │ │ │ ├── allow-passing-refs-as-props.js │ │ │ │ │ │ │ ├── allow-reassignment-to-global-function-jsx-prop.expect.md │ │ │ │ │ │ │ ├── allow-reassignment-to-global-function-jsx-prop.js │ │ │ │ │ │ │ ├── allow-ref-access-in-effect-indirect.expect.md │ │ │ │ │ │ │ ├── allow-ref-access-in-effect-indirect.js │ │ │ │ │ │ │ ├── allow-ref-access-in-effect.expect.md │ │ │ │ │ │ │ ├── allow-ref-access-in-effect.js │ │ │ │ │ │ │ ├── allow-ref-access-in-unused-callback-nested.expect.md │ │ │ │ │ │ │ ├── allow-ref-access-in-unused-callback-nested.js │ │ │ │ │ │ │ ├── allow-ref-initialization-undefined.expect.md │ │ │ │ │ │ │ ├── allow-ref-initialization-undefined.js │ │ │ │ │ │ │ ├── allow-ref-initialization.expect.md │ │ │ │ │ │ │ ├── allow-ref-initialization.js │ │ │ │ │ │ │ ├── allow-ref-lazy-initialization-with-logical.expect.md │ │ │ │ │ │ │ ├── allow-ref-lazy-initialization-with-logical.js │ │ │ │ │ │ │ ├── allow-ref-type-cast-in-render.expect.md │ │ │ │ │ │ │ ├── allow-ref-type-cast-in-render.js │ │ │ │ │ │ │ ├── array-access-assignment.expect.md │ │ │ │ │ │ │ ├── array-access-assignment.js │ │ │ │ │ │ │ ├── array-at-closure.expect.md │ │ │ │ │ │ │ ├── array-at-closure.js │ │ │ │ │ │ │ ├── array-at-effect.expect.md │ │ │ │ │ │ │ ├── array-at-effect.js │ │ │ │ │ │ │ ├── array-at-mutate-after-capture.expect.md │ │ │ │ │ │ │ ├── array-at-mutate-after-capture.js │ │ │ │ │ │ │ ├── array-concat-should-capture.expect.md │ │ │ │ │ │ │ ├── array-concat-should-capture.ts │ │ │ │ │ │ │ ├── array-expression-spread.expect.md │ │ │ │ │ │ │ ├── array-expression-spread.js │ │ │ │ │ │ │ ├── array-from-arg1-captures-arg0.expect.md │ │ │ │ │ │ │ ├── array-from-arg1-captures-arg0.js │ │ │ │ │ │ │ ├── array-from-captures-arg0.expect.md │ │ │ │ │ │ │ ├── array-from-captures-arg0.js │ │ │ │ │ │ │ ├── array-from-maybemutates-arg0.expect.md │ │ │ │ │ │ │ ├── array-from-maybemutates-arg0.js │ │ │ │ │ │ │ ├── array-join.expect.md │ │ │ │ │ │ │ ├── array-join.js │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.expect.md │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.js │ │ │ │ │ │ │ ├── array-map-frozen-array-noAlias.expect.md │ │ │ │ │ │ │ ├── array-map-frozen-array-noAlias.js │ │ │ │ │ │ │ ├── array-map-frozen-array.expect.md │ │ │ │ │ │ │ ├── array-map-frozen-array.js │ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda-noAlias.expect.md │ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda-noAlias.js │ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda.expect.md │ │ │ │ │ │ │ ├── array-map-mutable-array-mutating-lambda.js │ │ │ │ │ │ │ ├── array-map-mutable-array-non-mutating-lambda-mutated-result.expect.md │ │ │ │ │ │ │ ├── array-map-mutable-array-non-mutating-lambda-mutated-result.js │ │ │ │ │ │ │ ├── array-map-noAlias-escaping-function.expect.md │ │ │ │ │ │ │ ├── array-map-noAlias-escaping-function.js │ │ │ │ │ │ │ ├── array-pattern-params.expect.md │ │ │ │ │ │ │ ├── array-pattern-params.js │ │ │ │ │ │ │ ├── array-pattern-spread-creates-array.expect.md │ │ │ │ │ │ │ ├── array-pattern-spread-creates-array.js │ │ │ │ │ │ │ ├── array-properties.expect.md │ │ │ │ │ │ │ ├── array-properties.js │ │ │ │ │ │ │ ├── array-property-call.expect.md │ │ │ │ │ │ │ ├── array-property-call.js │ │ │ │ │ │ │ ├── array-push-effect.expect.md │ │ │ │ │ │ │ ├── array-push-effect.js │ │ │ │ │ │ │ ├── array-spread-later-mutated.expect.md │ │ │ │ │ │ │ ├── array-spread-later-mutated.js │ │ │ │ │ │ │ ├── array-spread-mutable-iterator.expect.md │ │ │ │ │ │ │ ├── array-spread-mutable-iterator.js │ │ │ │ │ │ │ ├── arrow-expr-directive.expect.md │ │ │ │ │ │ │ ├── arrow-expr-directive.js │ │ │ │ │ │ │ ├── arrow-function-one-line-directive.expect.md │ │ │ │ │ │ │ ├── arrow-function-one-line-directive.js │ │ │ │ │ │ │ ├── arrow-function-with-implicit-return.expect.md │ │ │ │ │ │ │ ├── arrow-function-with-implicit-return.js │ │ │ │ │ │ │ ├── assignment-expression-computed.expect.md │ │ │ │ │ │ │ ├── assignment-expression-computed.js │ │ │ │ │ │ │ ├── assignment-expression-nested-path.expect.md │ │ │ │ │ │ │ ├── assignment-expression-nested-path.js │ │ │ │ │ │ │ ├── assignment-in-nested-if.expect.md │ │ │ │ │ │ │ ├── assignment-in-nested-if.js │ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue-array.expect.md │ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue-array.js │ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue.expect.md │ │ │ │ │ │ │ ├── assignment-variations-complex-lvalue.js │ │ │ │ │ │ │ ├── assignment-variations.expect.md │ │ │ │ │ │ │ ├── assignment-variations.js │ │ │ │ │ │ │ ├── await-side-effecting-promise.expect.md │ │ │ │ │ │ │ ├── await-side-effecting-promise.js │ │ │ │ │ │ │ ├── await.expect.md │ │ │ │ │ │ │ ├── await.js │ │ │ │ │ │ │ ├── babel-existing-react-import.expect.md │ │ │ │ │ │ │ ├── babel-existing-react-import.js │ │ │ │ │ │ │ ├── babel-existing-react-kitchensink-import.expect.md │ │ │ │ │ │ │ ├── babel-existing-react-kitchensink-import.js │ │ │ │ │ │ │ ├── babel-existing-react-namespace-import.expect.md │ │ │ │ │ │ │ ├── babel-existing-react-namespace-import.js │ │ │ │ │ │ │ ├── babel-existing-react-runtime-import.expect.md │ │ │ │ │ │ │ ├── babel-existing-react-runtime-import.js │ │ │ │ │ │ │ ├── babel-repro-compact-negative-number.expect.md │ │ │ │ │ │ │ ├── babel-repro-compact-negative-number.js │ │ │ │ │ │ │ ├── block-scoping-switch-dead-code.expect.md │ │ │ │ │ │ │ ├── block-scoping-switch-dead-code.js │ │ │ │ │ │ │ ├── block-scoping-switch-variable-scoping.expect.md │ │ │ │ │ │ │ ├── block-scoping-switch-variable-scoping.js │ │ │ │ │ │ │ ├── bug-capturing-func-maybealias-captured-mutate.expect.md │ │ │ │ │ │ │ ├── bug-capturing-func-maybealias-captured-mutate.ts │ │ │ │ │ │ │ ├── bug-ref-prefix-postfix-operator.expect.md │ │ │ │ │ │ │ ├── bug-ref-prefix-postfix-operator.js │ │ │ │ │ │ │ ├── bug-separate-memoization-due-to-callback-capturing.expect.md │ │ │ │ │ │ │ ├── bug-separate-memoization-due-to-callback-capturing.js │ │ │ │ │ │ │ ├── bug-type-inference-control-flow.expect.md │ │ │ │ │ │ │ ├── bug-type-inference-control-flow.ts │ │ │ │ │ │ │ ├── builtin-jsx-tag-lowered-between-mutations.expect.md │ │ │ │ │ │ │ ├── builtin-jsx-tag-lowered-between-mutations.js │ │ │ │ │ │ │ ├── call-args-assignment.expect.md │ │ │ │ │ │ │ ├── call-args-assignment.js │ │ │ │ │ │ │ ├── call-args-destructuring-assignment.expect.md │ │ │ │ │ │ │ ├── call-args-destructuring-assignment.js │ │ │ │ │ │ │ ├── call-spread-argument-mutable-iterator.expect.md │ │ │ │ │ │ │ ├── call-spread-argument-mutable-iterator.js │ │ │ │ │ │ │ ├── call-spread.expect.md │ │ │ │ │ │ │ ├── call-spread.js │ │ │ │ │ │ │ ├── call-with-independently-memoizable-arg.expect.md │ │ │ │ │ │ │ ├── call-with-independently-memoizable-arg.js │ │ │ │ │ │ │ ├── call.expect.md │ │ │ │ │ │ │ ├── call.js │ │ │ │ │ │ │ ├── capture-indirect-mutate-alias-iife.expect.md │ │ │ │ │ │ │ ├── capture-indirect-mutate-alias-iife.js │ │ │ │ │ │ │ ├── capture-indirect-mutate-alias.expect.md │ │ │ │ │ │ │ ├── capture-indirect-mutate-alias.js │ │ │ │ │ │ │ ├── capture-param-mutate.expect.md │ │ │ │ │ │ │ ├── capture-param-mutate.js │ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.expect.md │ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.tsx │ │ │ │ │ │ │ ├── capture_mutate-across-fns-iife.expect.md │ │ │ │ │ │ │ ├── capture_mutate-across-fns-iife.js │ │ │ │ │ │ │ ├── capture_mutate-across-fns.expect.md │ │ │ │ │ │ │ ├── capture_mutate-across-fns.js │ │ │ │ │ │ │ ├── capturing-arrow-function-1.expect.md │ │ │ │ │ │ │ ├── capturing-arrow-function-1.js │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2-iife.expect.md │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2-iife.js │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2.expect.md │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-2.js │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2-iife.expect.md │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2-iife.js │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2.expect.md │ │ │ │ │ │ │ ├── capturing-fun-alias-captured-mutate-arr-2.js │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-arr.js │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-captured-mutate.js │ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-computed-mutate.js │ │ │ │ │ │ │ ├── capturing-func-alias-mutate-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-mutate-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-mutate.js │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-computed-mutate.js │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate-iife.js │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-alias-receiver-mutate.js │ │ │ │ │ │ │ ├── capturing-func-mutate-2.expect.md │ │ │ │ │ │ │ ├── capturing-func-mutate-2.js │ │ │ │ │ │ │ ├── capturing-func-mutate-3.expect.md │ │ │ │ │ │ │ ├── capturing-func-mutate-3.js │ │ │ │ │ │ │ ├── capturing-func-mutate-nested.expect.md │ │ │ │ │ │ │ ├── capturing-func-mutate-nested.js │ │ │ │ │ │ │ ├── capturing-func-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-mutate.js │ │ │ │ │ │ │ ├── capturing-func-no-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-func-no-mutate.js │ │ │ │ │ │ │ ├── capturing-func-simple-alias-iife.expect.md │ │ │ │ │ │ │ ├── capturing-func-simple-alias-iife.js │ │ │ │ │ │ │ ├── capturing-func-simple-alias.expect.md │ │ │ │ │ │ │ ├── capturing-func-simple-alias.js │ │ │ │ │ │ │ ├── capturing-function-1.expect.md │ │ │ │ │ │ │ ├── capturing-function-1.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.js │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load.expect.md │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load.js │ │ │ │ │ │ │ ├── capturing-function-capture-ref-before-rename.expect.md │ │ │ │ │ │ │ ├── capturing-function-capture-ref-before-rename.js │ │ │ │ │ │ │ ├── capturing-function-conditional-capture-mutate.expect.md │ │ │ │ │ │ │ ├── capturing-function-conditional-capture-mutate.js │ │ │ │ │ │ │ ├── capturing-function-decl.expect.md │ │ │ │ │ │ │ ├── capturing-function-decl.js │ │ │ │ │ │ │ ├── capturing-function-member-expr-arguments.expect.md │ │ │ │ │ │ │ ├── capturing-function-member-expr-arguments.js │ │ │ │ │ │ │ ├── capturing-function-member-expr-call.expect.md │ │ │ │ │ │ │ ├── capturing-function-member-expr-call.js │ │ │ │ │ │ │ ├── capturing-function-renamed-ref.expect.md │ │ │ │ │ │ │ ├── capturing-function-renamed-ref.js │ │ │ │ │ │ │ ├── capturing-function-runs-inference.expect.md │ │ │ │ │ │ │ ├── capturing-function-runs-inference.js │ │ │ │ │ │ │ ├── capturing-function-shadow-captured.expect.md │ │ │ │ │ │ │ ├── capturing-function-shadow-captured.js │ │ │ │ │ │ │ ├── capturing-function-skip-computed-path.expect.md │ │ │ │ │ │ │ ├── capturing-function-skip-computed-path.js │ │ │ │ │ │ │ ├── capturing-function-within-block.expect.md │ │ │ │ │ │ │ ├── capturing-function-within-block.js │ │ │ │ │ │ │ ├── capturing-member-expr.expect.md │ │ │ │ │ │ │ ├── capturing-member-expr.js │ │ │ │ │ │ │ ├── capturing-nested-member-call.expect.md │ │ │ │ │ │ │ ├── capturing-nested-member-call.js │ │ │ │ │ │ │ ├── capturing-nested-member-expr-in-nested-func.expect.md │ │ │ │ │ │ │ ├── capturing-nested-member-expr-in-nested-func.js │ │ │ │ │ │ │ ├── capturing-nested-member-expr.expect.md │ │ │ │ │ │ │ ├── capturing-nested-member-expr.js │ │ │ │ │ │ │ ├── capturing-reference-changes-type.expect.md │ │ │ │ │ │ │ ├── capturing-reference-changes-type.js │ │ │ │ │ │ │ ├── capturing-variable-in-nested-block.expect.md │ │ │ │ │ │ │ ├── capturing-variable-in-nested-block.js │ │ │ │ │ │ │ ├── capturing-variable-in-nested-function.expect.md │ │ │ │ │ │ │ ├── capturing-variable-in-nested-function.js │ │ │ │ │ │ │ ├── chained-assignment-context-variable.expect.md │ │ │ │ │ │ │ ├── chained-assignment-context-variable.js │ │ │ │ │ │ │ ├── chained-assignment-expressions.expect.md │ │ │ │ │ │ │ ├── chained-assignment-expressions.js │ │ │ │ │ │ │ ├── class-component-with-render-helper.expect.md │ │ │ │ │ │ │ ├── class-component-with-render-helper.js │ │ │ │ │ │ │ ├── codegen-inline-iife-reassign.expect.md │ │ │ │ │ │ │ ├── codegen-inline-iife-reassign.ts │ │ │ │ │ │ │ ├── codegen-inline-iife-storeprop.expect.md │ │ │ │ │ │ │ ├── codegen-inline-iife-storeprop.ts │ │ │ │ │ │ │ ├── codegen-inline-iife.expect.md │ │ │ │ │ │ │ ├── codegen-inline-iife.ts │ │ │ │ │ │ │ ├── codegen-instrument-forget-test.expect.md │ │ │ │ │ │ │ ├── codegen-instrument-forget-test.js │ │ │ │ │ │ │ ├── complex-while.expect.md │ │ │ │ │ │ │ ├── complex-while.js │ │ │ │ │ │ │ ├── component-declaration-basic.flow.expect.md │ │ │ │ │ │ │ ├── component-declaration-basic.flow.js │ │ │ │ │ │ │ ├── component-inner-function-with-many-args.expect.md │ │ │ │ │ │ │ ├── component-inner-function-with-many-args.tsx │ │ │ │ │ │ │ ├── component.expect.md │ │ │ │ │ │ │ ├── component.js │ │ │ │ │ │ │ ├── computed-call-evaluation-order.expect.md │ │ │ │ │ │ │ ├── computed-call-evaluation-order.js │ │ │ │ │ │ │ ├── computed-call-spread.expect.md │ │ │ │ │ │ │ ├── computed-call-spread.js │ │ │ │ │ │ │ ├── computed-load-primitive-as-dependency.expect.md │ │ │ │ │ │ │ ├── computed-load-primitive-as-dependency.js │ │ │ │ │ │ │ ├── computed-store-alias.expect.md │ │ │ │ │ │ │ ├── computed-store-alias.js │ │ │ │ │ │ │ ├── concise-arrow-expr.expect.md │ │ │ │ │ │ │ ├── concise-arrow-expr.js │ │ │ │ │ │ │ ├── conditional-break-labeled.expect.md │ │ │ │ │ │ │ ├── conditional-break-labeled.js │ │ │ │ │ │ │ ├── conditional-early-return.expect.md │ │ │ │ │ │ │ ├── conditional-early-return.js │ │ │ │ │ │ │ ├── conditional-on-mutable.expect.md │ │ │ │ │ │ │ ├── conditional-on-mutable.js │ │ │ │ │ │ │ ├── conditional-set-state-in-render.expect.md │ │ │ │ │ │ │ ├── conditional-set-state-in-render.js │ │ │ │ │ │ │ ├── conflict-codegen-instrument-forget.expect.md │ │ │ │ │ │ │ ├── conflict-codegen-instrument-forget.js │ │ │ │ │ │ │ ├── conflicting-dollar-sign-variable.expect.md │ │ │ │ │ │ │ ├── conflicting-dollar-sign-variable.js │ │ │ │ │ │ │ ├── consecutive-use-memo.expect.md │ │ │ │ │ │ │ ├── consecutive-use-memo.ts │ │ │ │ │ │ │ ├── console-readonly.expect.md │ │ │ │ │ │ │ ├── console-readonly.js │ │ │ │ │ │ │ ├── const-propagation-into-function-expression-global.expect.md │ │ │ │ │ │ │ ├── const-propagation-into-function-expression-global.js │ │ │ │ │ │ │ ├── const-propagation-into-function-expression-primitive.expect.md │ │ │ │ │ │ │ ├── const-propagation-into-function-expression-primitive.js │ │ │ │ │ │ │ ├── const-propagation-phi-nodes.expect.md │ │ │ │ │ │ │ ├── const-propagation-phi-nodes.ts │ │ │ │ │ │ │ ├── constant-computed.expect.md │ │ │ │ │ │ │ ├── constant-computed.js │ │ │ │ │ │ │ ├── constant-prop-across-objectmethod-def.expect.md │ │ │ │ │ │ │ ├── constant-prop-across-objectmethod-def.js │ │ │ │ │ │ │ ├── constant-prop-colliding-identifier.expect.md │ │ │ │ │ │ │ ├── constant-prop-colliding-identifier.js │ │ │ │ │ │ │ ├── constant-prop-to-object-method.expect.md │ │ │ │ │ │ │ ├── constant-prop-to-object-method.js │ │ │ │ │ │ │ ├── constant-propagate-global-phis-constant.expect.md │ │ │ │ │ │ │ ├── constant-propagate-global-phis-constant.js │ │ │ │ │ │ │ ├── constant-propagate-global-phis.expect.md │ │ │ │ │ │ │ ├── constant-propagate-global-phis.js │ │ │ │ │ │ │ ├── constant-propagation-bit-ops.expect.md │ │ │ │ │ │ │ ├── constant-propagation-bit-ops.js │ │ │ │ │ │ │ ├── constant-propagation-for.expect.md │ │ │ │ │ │ │ ├── constant-propagation-for.js │ │ │ │ │ │ │ ├── constant-propagation-into-function-expressions.expect.md │ │ │ │ │ │ │ ├── constant-propagation-into-function-expressions.js │ │ │ │ │ │ │ ├── constant-propagation-phi.expect.md │ │ │ │ │ │ │ ├── constant-propagation-phi.js │ │ │ │ │ │ │ ├── constant-propagation-string-concat.expect.md │ │ │ │ │ │ │ ├── constant-propagation-string-concat.js │ │ │ │ │ │ │ ├── constant-propagation-template-literal.expect.md │ │ │ │ │ │ │ ├── constant-propagation-template-literal.js │ │ │ │ │ │ │ ├── constant-propagation-unary-number.expect.md │ │ │ │ │ │ │ ├── constant-propagation-unary-number.js │ │ │ │ │ │ │ ├── constant-propagation-unary.expect.md │ │ │ │ │ │ │ ├── constant-propagation-unary.js │ │ │ │ │ │ │ ├── constant-propagation-while.expect.md │ │ │ │ │ │ │ ├── constant-propagation-while.js │ │ │ │ │ │ │ ├── constant-propagation.expect.md │ │ │ │ │ │ │ ├── constant-propagation.js │ │ │ │ │ │ │ ├── constructor.expect.md │ │ │ │ │ │ │ ├── constructor.js │ │ │ │ │ │ │ ├── context-variable-as-jsx-element-tag.expect.md │ │ │ │ │ │ │ ├── context-variable-as-jsx-element-tag.js │ │ │ │ │ │ │ ├── context-variable-reactive-explicit-control-flow.expect.md │ │ │ │ │ │ │ ├── context-variable-reactive-explicit-control-flow.js │ │ │ │ │ │ │ ├── context-variable-reactive-implicit-control-flow.expect.md │ │ │ │ │ │ │ ├── context-variable-reactive-implicit-control-flow.js │ │ │ │ │ │ │ ├── context-variable-reassigned-objectmethod.expect.md │ │ │ │ │ │ │ ├── context-variable-reassigned-objectmethod.js │ │ │ │ │ │ │ ├── context-variable-reassigned-outside-of-lambda.expect.md │ │ │ │ │ │ │ ├── context-variable-reassigned-outside-of-lambda.js │ │ │ │ │ │ │ ├── context-variable-reassigned-reactive-capture.expect.md │ │ │ │ │ │ │ ├── context-variable-reassigned-reactive-capture.js │ │ │ │ │ │ │ ├── context-variable-reassigned-two-lambdas.expect.md │ │ │ │ │ │ │ ├── context-variable-reassigned-two-lambdas.js │ │ │ │ │ │ │ ├── controlled-input.expect.md │ │ │ │ │ │ │ ├── controlled-input.js │ │ │ │ │ │ │ ├── createElement-freeze.expect.md │ │ │ │ │ │ │ ├── createElement-freeze.js │ │ │ │ │ │ │ ├── custom-opt-out-directive.expect.md │ │ │ │ │ │ │ ├── custom-opt-out-directive.tsx │ │ │ │ │ │ │ ├── dce-loop.expect.md │ │ │ │ │ │ │ ├── dce-loop.js │ │ │ │ │ │ │ ├── dce-unused-const.expect.md │ │ │ │ │ │ │ ├── dce-unused-const.js │ │ │ │ │ │ │ ├── dce-unused-postfix-update.expect.md │ │ │ │ │ │ │ ├── dce-unused-postfix-update.js │ │ │ │ │ │ │ ├── dce-unused-prefix-update.expect.md │ │ │ │ │ │ │ ├── dce-unused-prefix-update.js │ │ │ │ │ │ │ ├── debugger-memoized.expect.md │ │ │ │ │ │ │ ├── debugger-memoized.js │ │ │ │ │ │ │ ├── debugger.expect.md │ │ │ │ │ │ │ ├── debugger.js │ │ │ │ │ │ │ ├── declare-reassign-variable-in-closure.expect.md │ │ │ │ │ │ │ ├── declare-reassign-variable-in-closure.js │ │ │ │ │ │ │ ├── deeply-nested-function-expressions-with-params.expect.md │ │ │ │ │ │ │ ├── deeply-nested-function-expressions-with-params.js │ │ │ │ │ │ │ ├── default-param-array-with-unary.expect.md │ │ │ │ │ │ │ ├── default-param-array-with-unary.js │ │ │ │ │ │ │ ├── default-param-calls-global-function.expect.md │ │ │ │ │ │ │ ├── default-param-calls-global-function.js │ │ │ │ │ │ │ ├── default-param-with-empty-callback.expect.md │ │ │ │ │ │ │ ├── default-param-with-empty-callback.js │ │ │ │ │ │ │ ├── default-param-with-reorderable-callback.expect.md │ │ │ │ │ │ │ ├── default-param-with-reorderable-callback.js │ │ │ │ │ │ │ ├── delete-computed-property.expect.md │ │ │ │ │ │ │ ├── delete-computed-property.js │ │ │ │ │ │ │ ├── delete-property.expect.md │ │ │ │ │ │ │ ├── delete-property.js │ │ │ │ │ │ │ ├── dependencies-outputs.expect.md │ │ │ │ │ │ │ ├── dependencies-outputs.js │ │ │ │ │ │ │ ├── dependencies.expect.md │ │ │ │ │ │ │ ├── dependencies.js │ │ │ │ │ │ │ ├── destructure-array-assignment-to-context-var.expect.md │ │ │ │ │ │ │ ├── destructure-array-assignment-to-context-var.js │ │ │ │ │ │ │ ├── destructure-array-declaration-to-context-var.expect.md │ │ │ │ │ │ │ ├── destructure-array-declaration-to-context-var.js │ │ │ │ │ │ │ ├── destructure-capture-global.expect.md │ │ │ │ │ │ │ ├── destructure-capture-global.js │ │ │ │ │ │ │ ├── destructure-default-array-with-unary.expect.md │ │ │ │ │ │ │ ├── destructure-default-array-with-unary.js │ │ │ │ │ │ │ ├── destructure-direct-reassignment.expect.md │ │ │ │ │ │ │ ├── destructure-direct-reassignment.js │ │ │ │ │ │ │ ├── destructure-in-branch-ssa.expect.md │ │ │ │ │ │ │ ├── destructure-in-branch-ssa.ts │ │ │ │ │ │ │ ├── destructure-mixed-property-key-types.expect.md │ │ │ │ │ │ │ ├── destructure-mixed-property-key-types.js │ │ │ │ │ │ │ ├── destructure-object-assignment-to-context-var.expect.md │ │ │ │ │ │ │ ├── destructure-object-assignment-to-context-var.js │ │ │ │ │ │ │ ├── destructure-object-declaration-to-context-var.expect.md │ │ │ │ │ │ │ ├── destructure-object-declaration-to-context-var.js │ │ │ │ │ │ │ ├── destructure-param-string-literal-key-invalid-identifier.expect.md │ │ │ │ │ │ │ ├── destructure-param-string-literal-key-invalid-identifier.js │ │ │ │ │ │ │ ├── destructure-param-string-literal-key.expect.md │ │ │ │ │ │ │ ├── destructure-param-string-literal-key.js │ │ │ │ │ │ │ ├── destructure-string-literal-invalid-identifier-property-key.expect.md │ │ │ │ │ │ │ ├── destructure-string-literal-invalid-identifier-property-key.js │ │ │ │ │ │ │ ├── destructure-string-literal-property-key.expect.md │ │ │ │ │ │ │ ├── destructure-string-literal-property-key.js │ │ │ │ │ │ │ ├── destructuring-array-default.expect.md │ │ │ │ │ │ │ ├── destructuring-array-default.js │ │ │ │ │ │ │ ├── destructuring-array-param-default.expect.md │ │ │ │ │ │ │ ├── destructuring-array-param-default.js │ │ │ │ │ │ │ ├── destructuring-assignment-array-default.expect.md │ │ │ │ │ │ │ ├── destructuring-assignment-array-default.js │ │ │ │ │ │ │ ├── destructuring-assignment.expect.md │ │ │ │ │ │ │ ├── destructuring-assignment.js │ │ │ │ │ │ │ ├── destructuring-default-at-array-hole.expect.md │ │ │ │ │ │ │ ├── destructuring-default-at-array-hole.js │ │ │ │ │ │ │ ├── destructuring-default-at-explicit-null.expect.md │ │ │ │ │ │ │ ├── destructuring-default-at-explicit-null.js │ │ │ │ │ │ │ ├── destructuring-default-at-explicit-undefined.expect.md │ │ │ │ │ │ │ ├── destructuring-default-at-explicit-undefined.js │ │ │ │ │ │ │ ├── destructuring-default-past-end-of-array.expect.md │ │ │ │ │ │ │ ├── destructuring-default-past-end-of-array.js │ │ │ │ │ │ │ ├── destructuring-mixed-scope-and-local-variables-with-default.expect.md │ │ │ │ │ │ │ ├── destructuring-mixed-scope-and-local-variables-with-default.js │ │ │ │ │ │ │ ├── destructuring-mixed-scope-declarations-and-locals.expect.md │ │ │ │ │ │ │ ├── destructuring-mixed-scope-declarations-and-locals.js │ │ │ │ │ │ │ ├── destructuring-object-default.expect.md │ │ │ │ │ │ │ ├── destructuring-object-default.js │ │ │ │ │ │ │ ├── destructuring-object-param-default.expect.md │ │ │ │ │ │ │ ├── destructuring-object-param-default.js │ │ │ │ │ │ │ ├── destructuring-object-pattern-within-rest.expect.md │ │ │ │ │ │ │ ├── destructuring-object-pattern-within-rest.js │ │ │ │ │ │ │ ├── destructuring-property-inference.expect.md │ │ │ │ │ │ │ ├── destructuring-property-inference.js │ │ │ │ │ │ │ ├── destructuring-same-property-identifier-names.expect.md │ │ │ │ │ │ │ ├── destructuring-same-property-identifier-names.js │ │ │ │ │ │ │ ├── destructuring-with-conditional-as-default-value.expect.md │ │ │ │ │ │ │ ├── destructuring-with-conditional-as-default-value.js │ │ │ │ │ │ │ ├── destructuring-with-typecast-as-default-value.flow.expect.md │ │ │ │ │ │ │ ├── destructuring-with-typecast-as-default-value.flow.js │ │ │ │ │ │ │ ├── destructuring.expect.md │ │ │ │ │ │ │ ├── destructuring.js │ │ │ │ │ │ │ ├── do-while-break.expect.md │ │ │ │ │ │ │ ├── do-while-break.js │ │ │ │ │ │ │ ├── do-while-compound-test.expect.md │ │ │ │ │ │ │ ├── do-while-compound-test.js │ │ │ │ │ │ │ ├── do-while-conditional-break.expect.md │ │ │ │ │ │ │ ├── do-while-conditional-break.js │ │ │ │ │ │ │ ├── do-while-continue.expect.md │ │ │ │ │ │ │ ├── do-while-continue.js │ │ │ │ │ │ │ ├── do-while-early-unconditional-break.expect.md │ │ │ │ │ │ │ ├── do-while-early-unconditional-break.js │ │ │ │ │ │ │ ├── do-while-simple.expect.md │ │ │ │ │ │ │ ├── do-while-simple.js │ │ │ │ │ │ │ ├── dominator.expect.md │ │ │ │ │ │ │ ├── dominator.js │ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping-useMemo.expect.md │ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping-useMemo.js │ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping.expect.md │ │ │ │ │ │ │ ├── dont-memoize-primitive-function-call-non-escaping.js │ │ │ │ │ │ │ ├── dont-merge-if-dep-is-inner-declaration-of-previous-scope.expect.md │ │ │ │ │ │ │ ├── dont-merge-if-dep-is-inner-declaration-of-previous-scope.js │ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-store-const-used-later.expect.md │ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-store-const-used-later.js │ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-with-intermediate-reassignment.expect.md │ │ │ │ │ │ │ ├── dont-merge-overlapping-scopes-with-intermediate-reassignment.js │ │ │ │ │ │ │ ├── drop-methodcall-usecallback.expect.md │ │ │ │ │ │ │ ├── drop-methodcall-usecallback.js │ │ │ │ │ │ │ ├── drop-methodcall-usememo.expect.md │ │ │ │ │ │ │ ├── drop-methodcall-usememo.js │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.js │ │ │ │ │ │ │ ├── early-return-no-declarations-reassignments-dependencies.expect.md │ │ │ │ │ │ │ ├── early-return-no-declarations-reassignments-dependencies.js │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.js │ │ │ │ │ │ │ ├── early-return.expect.md │ │ │ │ │ │ │ ├── early-return.js │ │ │ │ │ │ │ ├── ecma/ │ │ │ │ │ │ │ │ ├── error.reserved-words.expect.md │ │ │ │ │ │ │ │ └── error.reserved-words.ts │ │ │ │ │ │ │ ├── effect-derived-computations/ │ │ │ │ │ │ │ │ ├── derived-state-conditionally-in-effect.expect.md │ │ │ │ │ │ │ │ ├── derived-state-conditionally-in-effect.js │ │ │ │ │ │ │ │ ├── derived-state-from-default-props.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-default-props.js │ │ │ │ │ │ │ │ ├── derived-state-from-local-state-in-effect.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-local-state-in-effect.js │ │ │ │ │ │ │ │ ├── derived-state-from-prop-local-state-and-component-scope.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-prop-local-state-and-component-scope.js │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-call-outside-effect-no-error.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-call-outside-effect-no-error.js │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-ternary.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-ternary.js │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-used-outside-effect-no-error.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-prop-setter-used-outside-effect-no-error.js │ │ │ │ │ │ │ │ ├── derived-state-from-prop-with-side-effect.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-prop-with-side-effect.js │ │ │ │ │ │ │ │ ├── derived-state-from-ref-and-state-no-error.expect.md │ │ │ │ │ │ │ │ ├── derived-state-from-ref-and-state-no-error.js │ │ │ │ │ │ │ │ ├── effect-contains-local-function-call.expect.md │ │ │ │ │ │ │ │ ├── effect-contains-local-function-call.js │ │ │ │ │ │ │ │ ├── effect-contains-prop-function-call-no-error.expect.md │ │ │ │ │ │ │ │ ├── effect-contains-prop-function-call-no-error.js │ │ │ │ │ │ │ │ ├── effect-used-in-dep-array-still-errors.expect.md │ │ │ │ │ │ │ │ ├── effect-used-in-dep-array-still-errors.js │ │ │ │ │ │ │ │ ├── effect-with-cleanup-function-depending-on-derived-computation-value.expect.md │ │ │ │ │ │ │ │ ├── effect-with-cleanup-function-depending-on-derived-computation-value.js │ │ │ │ │ │ │ │ ├── effect-with-global-function-call-no-error.expect.md │ │ │ │ │ │ │ │ ├── effect-with-global-function-call-no-error.js │ │ │ │ │ │ │ │ ├── from-props-setstate-in-effect-no-error.expect.md │ │ │ │ │ │ │ │ ├── from-props-setstate-in-effect-no-error.js │ │ │ │ │ │ │ │ ├── function-expression-mutation-edge-case.expect.md │ │ │ │ │ │ │ │ ├── function-expression-mutation-edge-case.js │ │ │ │ │ │ │ │ ├── invalid-derived-computation-in-effect.expect.md │ │ │ │ │ │ │ │ ├── invalid-derived-computation-in-effect.js │ │ │ │ │ │ │ │ ├── invalid-derived-state-from-computed-props.expect.md │ │ │ │ │ │ │ │ ├── invalid-derived-state-from-computed-props.js │ │ │ │ │ │ │ │ ├── invalid-derived-state-from-destructured-props.expect.md │ │ │ │ │ │ │ │ ├── invalid-derived-state-from-destructured-props.js │ │ │ │ │ │ │ │ ├── ref-conditional-in-effect-no-error.expect.md │ │ │ │ │ │ │ │ ├── ref-conditional-in-effect-no-error.js │ │ │ │ │ │ │ │ ├── usestate-derived-from-prop-no-show-in-data-flow-tree.expect.md │ │ │ │ │ │ │ │ └── usestate-derived-from-prop-no-show-in-data-flow-tree.js │ │ │ │ │ │ │ ├── empty-catch-statement.expect.md │ │ │ │ │ │ │ ├── empty-catch-statement.ts │ │ │ │ │ │ │ ├── empty-eslint-suppressions-config.expect.md │ │ │ │ │ │ │ ├── empty-eslint-suppressions-config.js │ │ │ │ │ │ │ ├── error._todo.computed-lval-in-destructure.expect.md │ │ │ │ │ │ │ ├── error._todo.computed-lval-in-destructure.js │ │ │ │ │ │ │ ├── error.assign-global-in-component-tag-function.expect.md │ │ │ │ │ │ │ ├── error.assign-global-in-component-tag-function.js │ │ │ │ │ │ │ ├── error.assign-global-in-jsx-children.expect.md │ │ │ │ │ │ │ ├── error.assign-global-in-jsx-children.js │ │ │ │ │ │ │ ├── error.assign-ref-in-effect-hint.expect.md │ │ │ │ │ │ │ ├── error.assign-ref-in-effect-hint.js │ │ │ │ │ │ │ ├── error.bailout-on-flow-suppression.expect.md │ │ │ │ │ │ │ ├── error.bailout-on-flow-suppression.js │ │ │ │ │ │ │ ├── error.bailout-on-suppression-of-custom-rule.expect.md │ │ │ │ │ │ │ ├── error.bailout-on-suppression-of-custom-rule.js │ │ │ │ │ │ │ ├── error.bug-infer-mutation-aliasing-effects.expect.md │ │ │ │ │ │ │ ├── error.bug-infer-mutation-aliasing-effects.js │ │ │ │ │ │ │ ├── error.bug-invariant-codegen-methodcall.expect.md │ │ │ │ │ │ │ ├── error.bug-invariant-codegen-methodcall.js │ │ │ │ │ │ │ ├── error.bug-invariant-couldnt-find-binding-for-decl.expect.md │ │ │ │ │ │ │ ├── error.bug-invariant-couldnt-find-binding-for-decl.js │ │ │ │ │ │ │ ├── error.bug-invariant-expected-consistent-destructuring.expect.md │ │ │ │ │ │ │ ├── error.bug-invariant-expected-consistent-destructuring.js │ │ │ │ │ │ │ ├── error.bug-invariant-local-or-context-references.expect.md │ │ │ │ │ │ │ ├── error.bug-invariant-local-or-context-references.js │ │ │ │ │ │ │ ├── error.bug-invariant-unnamed-temporary.expect.md │ │ │ │ │ │ │ ├── error.bug-invariant-unnamed-temporary.js │ │ │ │ │ │ │ ├── error.call-args-destructuring-asignment-complex.expect.md │ │ │ │ │ │ │ ├── error.call-args-destructuring-asignment-complex.js │ │ │ │ │ │ │ ├── error.capitalized-function-call-aliased.expect.md │ │ │ │ │ │ │ ├── error.capitalized-function-call-aliased.js │ │ │ │ │ │ │ ├── error.capitalized-function-call.expect.md │ │ │ │ │ │ │ ├── error.capitalized-function-call.js │ │ │ │ │ │ │ ├── error.capitalized-method-call.expect.md │ │ │ │ │ │ │ ├── error.capitalized-method-call.js │ │ │ │ │ │ │ ├── error.capture-ref-for-mutation.expect.md │ │ │ │ │ │ │ ├── error.capture-ref-for-mutation.tsx │ │ │ │ │ │ │ ├── error.conditional-hook-unknown-hook-react-namespace.expect.md │ │ │ │ │ │ │ ├── error.conditional-hook-unknown-hook-react-namespace.js │ │ │ │ │ │ │ ├── error.conditional-hooks-as-method-call.expect.md │ │ │ │ │ │ │ ├── error.conditional-hooks-as-method-call.js │ │ │ │ │ │ │ ├── error.context-variable-only-chained-assign.expect.md │ │ │ │ │ │ │ ├── error.context-variable-only-chained-assign.js │ │ │ │ │ │ │ ├── error.declare-reassign-variable-in-function-declaration.expect.md │ │ │ │ │ │ │ ├── error.declare-reassign-variable-in-function-declaration.js │ │ │ │ │ │ │ ├── error.default-param-accesses-local.expect.md │ │ │ │ │ │ │ ├── error.default-param-accesses-local.js │ │ │ │ │ │ │ ├── error.dont-hoist-inline-reference.expect.md │ │ │ │ │ │ │ ├── error.dont-hoist-inline-reference.js │ │ │ │ │ │ │ ├── error.fault-tolerance-reports-multiple-errors.expect.md │ │ │ │ │ │ │ ├── error.fault-tolerance-reports-multiple-errors.js │ │ │ │ │ │ │ ├── error.function-expression-references-variable-its-assigned-to.expect.md │ │ │ │ │ │ │ ├── error.function-expression-references-variable-its-assigned-to.js │ │ │ │ │ │ │ ├── error.handle-unexpected-exception-pipeline.expect.md │ │ │ │ │ │ │ ├── error.handle-unexpected-exception-pipeline.ts │ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional-optional.expect.md │ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional-optional.js │ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional.expect.md │ │ │ │ │ │ │ ├── error.hoist-optional-member-expression-with-conditional.js │ │ │ │ │ │ │ ├── error.hoisting-simple-function-declaration.expect.md │ │ │ │ │ │ │ ├── error.hoisting-simple-function-declaration.js │ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-identifier.expect.md │ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-identifier.tsx │ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-memberexpr.expect.md │ │ │ │ │ │ │ ├── error.hook-call-freezes-captured-memberexpr.jsx │ │ │ │ │ │ │ ├── error.hook-property-load-local-hook.expect.md │ │ │ │ │ │ │ ├── error.hook-property-load-local-hook.js │ │ │ │ │ │ │ ├── error.hook-ref-value.expect.md │ │ │ │ │ │ │ ├── error.hook-ref-value.js │ │ │ │ │ │ │ ├── error.invalid-ReactUseMemo-async-callback.expect.md │ │ │ │ │ │ │ ├── error.invalid-ReactUseMemo-async-callback.js │ │ │ │ │ │ │ ├── error.invalid-access-ref-during-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-access-ref-during-render.js │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer-init.expect.md │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer-init.js │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer.expect.md │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-reducer.js │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-render-mutate-object-with-ref-function.expect.md │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-render-mutate-object-with-ref-function.js │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-state-initializer.expect.md │ │ │ │ │ │ │ ├── error.invalid-access-ref-in-state-initializer.js │ │ │ │ │ │ │ ├── error.invalid-aliased-ref-in-callback-invoked-during-render-.expect.md │ │ │ │ │ │ │ ├── error.invalid-aliased-ref-in-callback-invoked-during-render-.js │ │ │ │ │ │ │ ├── error.invalid-array-push-frozen.expect.md │ │ │ │ │ │ │ ├── error.invalid-array-push-frozen.js │ │ │ │ │ │ │ ├── error.invalid-assign-current-inferred-ref-during-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-assign-current-inferred-ref-during-render.js │ │ │ │ │ │ │ ├── error.invalid-assign-hook-to-local.expect.md │ │ │ │ │ │ │ ├── error.invalid-assign-hook-to-local.js │ │ │ │ │ │ │ ├── error.invalid-assing-to-ref-current-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-assing-to-ref-current-in-render.js │ │ │ │ │ │ │ ├── error.invalid-computed-store-to-frozen-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-computed-store-to-frozen-value.js │ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-hook-import.expect.md │ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-hook-import.js │ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-react-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-conditional-call-aliased-react-hook.js │ │ │ │ │ │ │ ├── error.invalid-conditional-call-non-hook-imported-as-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-conditional-call-non-hook-imported-as-hook.js │ │ │ │ │ │ │ ├── error.invalid-conditional-setState-in-useMemo.expect.md │ │ │ │ │ │ │ ├── error.invalid-conditional-setState-in-useMemo.js │ │ │ │ │ │ │ ├── error.invalid-delete-computed-property-of-frozen-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-delete-computed-property-of-frozen-value.js │ │ │ │ │ │ │ ├── error.invalid-delete-property-of-frozen-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-delete-property-of-frozen-value.js │ │ │ │ │ │ │ ├── error.invalid-derived-computation-in-effect.expect.md │ │ │ │ │ │ │ ├── error.invalid-derived-computation-in-effect.js │ │ │ │ │ │ │ ├── error.invalid-destructure-assignment-to-global.expect.md │ │ │ │ │ │ │ ├── error.invalid-destructure-assignment-to-global.js │ │ │ │ │ │ │ ├── error.invalid-destructure-to-local-global-variables.expect.md │ │ │ │ │ │ │ ├── error.invalid-destructure-to-local-global-variables.js │ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-ref-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-ref-in-render.js │ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-refs-in-render-transitive.expect.md │ │ │ │ │ │ │ ├── error.invalid-disallow-mutating-refs-in-render-transitive.js │ │ │ │ │ │ │ ├── error.invalid-eval-unsupported.expect.md │ │ │ │ │ │ │ ├── error.invalid-eval-unsupported.js │ │ │ │ │ │ │ ├── error.invalid-function-expression-mutates-immutable-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-function-expression-mutates-immutable-value.js │ │ │ │ │ │ │ ├── error.invalid-global-reassignment-indirect.expect.md │ │ │ │ │ │ │ ├── error.invalid-global-reassignment-indirect.js │ │ │ │ │ │ │ ├── error.invalid-hoisting-setstate.expect.md │ │ │ │ │ │ │ ├── error.invalid-hoisting-setstate.js │ │ │ │ │ │ │ ├── error.invalid-hook-function-argument-mutates-local-variable.expect.md │ │ │ │ │ │ │ ├── error.invalid-hook-function-argument-mutates-local-variable.js │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.js │ │ │ │ │ │ │ ├── error.invalid-jsx-captures-context-variable.expect.md │ │ │ │ │ │ │ ├── error.invalid-jsx-captures-context-variable.js │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-function.expect.md │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-function.js │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook-return-property.expect.md │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook-return-property.js │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-known-incompatible-hook.js │ │ │ │ │ │ │ ├── error.invalid-mutate-after-aliased-freeze.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-after-aliased-freeze.js │ │ │ │ │ │ │ ├── error.invalid-mutate-after-freeze.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-after-freeze.js │ │ │ │ │ │ │ ├── error.invalid-mutate-context-in-callback.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-context-in-callback.js │ │ │ │ │ │ │ ├── error.invalid-mutate-context.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-context.js │ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-phi-return-prop.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-phi-return-prop.js │ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-prop.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-global-in-render-helper-prop.js │ │ │ │ │ │ │ ├── error.invalid-mutate-phi-which-could-be-frozen.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-phi-which-could-be-frozen.js │ │ │ │ │ │ │ ├── error.invalid-mutate-props-in-effect-fixpoint.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-props-in-effect-fixpoint.js │ │ │ │ │ │ │ ├── error.invalid-mutate-props-via-for-of-iterator.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutate-props-via-for-of-iterator.js │ │ │ │ │ │ │ ├── error.invalid-mutation-in-closure.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutation-in-closure.js │ │ │ │ │ │ │ ├── error.invalid-mutation-of-possible-props-phi-indirect.expect.md │ │ │ │ │ │ │ ├── error.invalid-mutation-of-possible-props-phi-indirect.js │ │ │ │ │ │ │ ├── error.invalid-nested-function-reassign-local-variable-in-effect.expect.md │ │ │ │ │ │ │ ├── error.invalid-nested-function-reassign-local-variable-in-effect.js │ │ │ │ │ │ │ ├── error.invalid-non-imported-reanimated-shared-value-writes.expect.md │ │ │ │ │ │ │ ├── error.invalid-non-imported-reanimated-shared-value-writes.jsx │ │ │ │ │ │ │ ├── error.invalid-optional-member-expression-as-memo-dep-non-optional-in-body.expect.md │ │ │ │ │ │ │ ├── error.invalid-optional-member-expression-as-memo-dep-non-optional-in-body.js │ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-call-arg.expect.md │ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-call-arg.js │ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-prop.expect.md │ │ │ │ │ │ │ ├── error.invalid-pass-hook-as-prop.js │ │ │ │ │ │ │ ├── error.invalid-pass-mutable-function-as-prop.expect.md │ │ │ │ │ │ │ ├── error.invalid-pass-mutable-function-as-prop.js │ │ │ │ │ │ │ ├── error.invalid-pass-ref-to-function.expect.md │ │ │ │ │ │ │ ├── error.invalid-pass-ref-to-function.js │ │ │ │ │ │ │ ├── error.invalid-prop-mutation-indirect.expect.md │ │ │ │ │ │ │ ├── error.invalid-prop-mutation-indirect.js │ │ │ │ │ │ │ ├── error.invalid-property-store-to-frozen-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-property-store-to-frozen-value.js │ │ │ │ │ │ │ ├── error.invalid-props-mutation-in-effect-indirect.expect.md │ │ │ │ │ │ │ ├── error.invalid-props-mutation-in-effect-indirect.js │ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-destructure.expect.md │ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-destructure.js │ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-property-load.expect.md │ │ │ │ │ │ │ ├── error.invalid-read-ref-prop-in-render-property-load.js │ │ │ │ │ │ │ ├── error.invalid-reassign-const.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-const.js │ │ │ │ │ │ │ ├── error.invalid-reassign-local-in-hook-return-value.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-local-in-hook-return-value.js │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-async-callback.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-async-callback.js │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-effect.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-effect.js │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-hook-argument.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-hook-argument.js │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.js │ │ │ │ │ │ │ ├── error.invalid-reassign-variable-in-usememo.expect.md │ │ │ │ │ │ │ ├── error.invalid-reassign-variable-in-usememo.js │ │ │ │ │ │ │ ├── error.invalid-ref-access-render-unary.expect.md │ │ │ │ │ │ │ ├── error.invalid-ref-access-render-unary.js │ │ │ │ │ │ │ ├── error.invalid-ref-in-callback-invoked-during-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-ref-in-callback-invoked-during-render.js │ │ │ │ │ │ │ ├── error.invalid-ref-initialization-unary-not.expect.md │ │ │ │ │ │ │ ├── error.invalid-ref-initialization-unary-not.js │ │ │ │ │ │ │ ├── error.invalid-ref-value-as-props.expect.md │ │ │ │ │ │ │ ├── error.invalid-ref-value-as-props.js │ │ │ │ │ │ │ ├── error.invalid-return-mutable-function-from-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-return-mutable-function-from-hook.js │ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-during-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-during-render.js │ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-nested-property-during-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-set-and-read-ref-nested-property-during-render.js │ │ │ │ │ │ │ ├── error.invalid-setState-in-render-unbound-state.expect.md │ │ │ │ │ │ │ ├── error.invalid-setState-in-render-unbound-state.js │ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo-indirect-useCallback.expect.md │ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo-indirect-useCallback.js │ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo.expect.md │ │ │ │ │ │ │ ├── error.invalid-setState-in-useMemo.js │ │ │ │ │ │ │ ├── error.invalid-setstate-unconditional-with-keyed-state.expect.md │ │ │ │ │ │ │ ├── error.invalid-setstate-unconditional-with-keyed-state.js │ │ │ │ │ │ │ ├── error.invalid-sketchy-code-use-forget.expect.md │ │ │ │ │ │ │ ├── error.invalid-sketchy-code-use-forget.js │ │ │ │ │ │ │ ├── error.invalid-ternary-with-hook-values.expect.md │ │ │ │ │ │ │ ├── error.invalid-ternary-with-hook-values.js │ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook-namespace.expect.md │ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook-namespace.js │ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-type-provider-hook-name-not-typed-as-hook.js │ │ │ │ │ │ │ ├── error.invalid-type-provider-hooklike-module-default-not-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-type-provider-hooklike-module-default-not-hook.js │ │ │ │ │ │ │ ├── error.invalid-type-provider-nonhook-name-typed-as-hook.expect.md │ │ │ │ │ │ │ ├── error.invalid-type-provider-nonhook-name-typed-as-hook.js │ │ │ │ │ │ │ ├── error.invalid-uncalled-function-capturing-mutable-values-memoizes-with-captures-values.expect.md │ │ │ │ │ │ │ ├── error.invalid-uncalled-function-capturing-mutable-values-memoizes-with-captures-values.js │ │ │ │ │ │ │ ├── error.invalid-unclosed-eslint-suppression.expect.md │ │ │ │ │ │ │ ├── error.invalid-unclosed-eslint-suppression.js │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-hook-return-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-hook-return-in-render.js │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-in-render.js │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-prop-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-unconditional-set-state-prop-in-render.js │ │ │ │ │ │ │ ├── error.invalid-use-ref-added-to-dep-without-type-info.expect.md │ │ │ │ │ │ │ ├── error.invalid-use-ref-added-to-dep-without-type-info.js │ │ │ │ │ │ │ ├── error.invalid-useMemo-async-callback.expect.md │ │ │ │ │ │ │ ├── error.invalid-useMemo-async-callback.js │ │ │ │ │ │ │ ├── error.invalid-useMemo-callback-args.expect.md │ │ │ │ │ │ │ ├── error.invalid-useMemo-callback-args.js │ │ │ │ │ │ │ ├── error.invalid-write-but-dont-read-ref-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-write-but-dont-read-ref-in-render.js │ │ │ │ │ │ │ ├── error.invalid-write-ref-prop-in-render.expect.md │ │ │ │ │ │ │ ├── error.invalid-write-ref-prop-in-render.js │ │ │ │ │ │ │ ├── error.modify-state-2.expect.md │ │ │ │ │ │ │ ├── error.modify-state-2.js │ │ │ │ │ │ │ ├── error.modify-state.expect.md │ │ │ │ │ │ │ ├── error.modify-state.js │ │ │ │ │ │ │ ├── error.modify-useReducer-state.expect.md │ │ │ │ │ │ │ ├── error.modify-useReducer-state.js │ │ │ │ │ │ │ ├── error.mutable-range-shared-inner-outer-function.expect.md │ │ │ │ │ │ │ ├── error.mutable-range-shared-inner-outer-function.js │ │ │ │ │ │ │ ├── error.mutate-function-property.expect.md │ │ │ │ │ │ │ ├── error.mutate-function-property.js │ │ │ │ │ │ │ ├── error.mutate-global-increment-op-invalid-react.expect.md │ │ │ │ │ │ │ ├── error.mutate-global-increment-op-invalid-react.js │ │ │ │ │ │ │ ├── error.mutate-hook-argument.expect.md │ │ │ │ │ │ │ ├── error.mutate-hook-argument.js │ │ │ │ │ │ │ ├── error.mutate-property-from-global.expect.md │ │ │ │ │ │ │ ├── error.mutate-property-from-global.js │ │ │ │ │ │ │ ├── error.mutate-props.expect.md │ │ │ │ │ │ │ ├── error.mutate-props.js │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.expect.md │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.js │ │ │ │ │ │ │ ├── error.propertyload-hook.expect.md │ │ │ │ │ │ │ ├── error.propertyload-hook.js │ │ │ │ │ │ │ ├── error.reassign-global-fn-arg.expect.md │ │ │ │ │ │ │ ├── error.reassign-global-fn-arg.js │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.expect.md │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.js │ │ │ │ │ │ │ ├── error.reassignment-to-global.expect.md │ │ │ │ │ │ │ ├── error.reassignment-to-global.js │ │ │ │ │ │ │ ├── error.ref-initialization-arbitrary.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-arbitrary.js │ │ │ │ │ │ │ ├── error.ref-initialization-call-2.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-call-2.js │ │ │ │ │ │ │ ├── error.ref-initialization-call.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-call.js │ │ │ │ │ │ │ ├── error.ref-initialization-linear.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-linear.js │ │ │ │ │ │ │ ├── error.ref-initialization-nonif.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-nonif.js │ │ │ │ │ │ │ ├── error.ref-initialization-other.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-other.js │ │ │ │ │ │ │ ├── error.ref-initialization-post-access-2.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-post-access-2.js │ │ │ │ │ │ │ ├── error.ref-initialization-post-access.expect.md │ │ │ │ │ │ │ ├── error.ref-initialization-post-access.js │ │ │ │ │ │ │ ├── error.ref-like-name-not-Ref.expect.md │ │ │ │ │ │ │ ├── error.ref-like-name-not-Ref.js │ │ │ │ │ │ │ ├── error.ref-like-name-not-a-ref.expect.md │ │ │ │ │ │ │ ├── error.ref-like-name-not-a-ref.js │ │ │ │ │ │ │ ├── error.ref-optional.expect.md │ │ │ │ │ │ │ ├── error.ref-optional.js │ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.expect.md │ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-later-mutation.js │ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-mutated-dep.expect.md │ │ │ │ │ │ │ ├── error.repro-preserve-memoization-inner-destructured-value-mistaken-as-dependency-mutated-dep.js │ │ │ │ │ │ │ ├── error.sketchy-code-rules-of-hooks.expect.md │ │ │ │ │ │ │ ├── error.sketchy-code-rules-of-hooks.js │ │ │ │ │ │ │ ├── error.store-property-in-global.expect.md │ │ │ │ │ │ │ ├── error.store-property-in-global.js │ │ │ │ │ │ │ ├── error.todo-allow-assigning-to-inferred-ref-prop-in-callback.expect.md │ │ │ │ │ │ │ ├── error.todo-allow-assigning-to-inferred-ref-prop-in-callback.js │ │ │ │ │ │ │ ├── error.todo-for-await-loops.expect.md │ │ │ │ │ │ │ ├── error.todo-for-await-loops.js │ │ │ │ │ │ │ ├── error.todo-for-in-loop-with-context-variable-iterator.expect.md │ │ │ │ │ │ │ ├── error.todo-for-in-loop-with-context-variable-iterator.js │ │ │ │ │ │ │ ├── error.todo-for-loop-with-context-variable-iterator.expect.md │ │ │ │ │ │ │ ├── error.todo-for-loop-with-context-variable-iterator.js │ │ │ │ │ │ │ ├── error.todo-for-of-loop-with-context-variable-iterator.expect.md │ │ │ │ │ │ │ ├── error.todo-for-of-loop-with-context-variable-iterator.js │ │ │ │ │ │ │ ├── error.todo-function-expression-references-later-variable-declaration.expect.md │ │ │ │ │ │ │ ├── error.todo-function-expression-references-later-variable-declaration.js │ │ │ │ │ │ │ ├── error.todo-functiondecl-hoisting.expect.md │ │ │ │ │ │ │ ├── error.todo-functiondecl-hoisting.tsx │ │ │ │ │ │ │ ├── error.todo-handle-update-context-identifiers.expect.md │ │ │ │ │ │ │ ├── error.todo-handle-update-context-identifiers.js │ │ │ │ │ │ │ ├── error.todo-hoist-function-decls.expect.md │ │ │ │ │ │ │ ├── error.todo-hoist-function-decls.js │ │ │ │ │ │ │ ├── error.todo-hoisted-function-in-unreachable-code.expect.md │ │ │ │ │ │ │ ├── error.todo-hoisted-function-in-unreachable-code.js │ │ │ │ │ │ │ ├── error.todo-hoisting-simple-var-declaration.expect.md │ │ │ │ │ │ │ ├── error.todo-hoisting-simple-var-declaration.js │ │ │ │ │ │ │ ├── error.todo-hook-call-spreads-mutable-iterator.expect.md │ │ │ │ │ │ │ ├── error.todo-hook-call-spreads-mutable-iterator.js │ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-catch-in-outer-try-with-finally.expect.md │ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-catch-in-outer-try-with-finally.js │ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-try-with-finally.expect.md │ │ │ │ │ │ │ ├── error.todo-invalid-jsx-in-try-with-finally.js │ │ │ │ │ │ │ ├── error.todo-kitchensink.expect.md │ │ │ │ │ │ │ ├── error.todo-kitchensink.js │ │ │ │ │ │ │ ├── error.todo-missing-source-locations.expect.md │ │ │ │ │ │ │ ├── error.todo-missing-source-locations.js │ │ │ │ │ │ │ ├── error.todo-nested-method-calls-lower-property-load-into-temporary.expect.md │ │ │ │ │ │ │ ├── error.todo-nested-method-calls-lower-property-load-into-temporary.js │ │ │ │ │ │ │ ├── error.todo-new-target-meta-property.expect.md │ │ │ │ │ │ │ ├── error.todo-new-target-meta-property.js │ │ │ │ │ │ │ ├── error.todo-object-expression-get-syntax.expect.md │ │ │ │ │ │ │ ├── error.todo-object-expression-get-syntax.js │ │ │ │ │ │ │ ├── error.todo-object-expression-set-syntax.expect.md │ │ │ │ │ │ │ ├── error.todo-object-expression-set-syntax.js │ │ │ │ │ │ │ ├── error.todo-preserve-memo-deps-mixed-optional-nonoptional-property-chain.expect.md │ │ │ │ │ │ │ ├── error.todo-preserve-memo-deps-mixed-optional-nonoptional-property-chain.js │ │ │ │ │ │ │ ├── error.todo-reassign-const.expect.md │ │ │ │ │ │ │ ├── error.todo-reassign-const.js │ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-capture-in-invoked-function-inferred-as-mutation.expect.md │ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-capture-in-invoked-function-inferred-as-mutation.js │ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.expect.md │ │ │ │ │ │ │ ├── error.todo-repro-missed-memoization-from-inferred-mutation-in-logger.js │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.expect.md │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.js │ │ │ │ │ │ │ ├── error.todo-repro-unmemoized-callback-captured-in-context-variable.expect.md │ │ │ │ │ │ │ ├── error.todo-repro-unmemoized-callback-captured-in-context-variable.tsx │ │ │ │ │ │ │ ├── error.todo-useCallback-set-ref-nested-property-ref-modified-later-preserve-memoization.expect.md │ │ │ │ │ │ │ ├── error.todo-useCallback-set-ref-nested-property-ref-modified-later-preserve-memoization.js │ │ │ │ │ │ │ ├── error.todo-valid-functiondecl-hoisting.expect.md │ │ │ │ │ │ │ ├── error.todo-valid-functiondecl-hoisting.tsx │ │ │ │ │ │ │ ├── error.todo.try-catch-with-throw.expect.md │ │ │ │ │ │ │ ├── error.todo.try-catch-with-throw.js │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop-break.expect.md │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop-break.js │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop.expect.md │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-after-loop.js │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-with-loop-throw.expect.md │ │ │ │ │ │ │ ├── error.unconditional-set-state-in-render-with-loop-throw.js │ │ │ │ │ │ │ ├── error.unconditional-set-state-lambda.expect.md │ │ │ │ │ │ │ ├── error.unconditional-set-state-lambda.js │ │ │ │ │ │ │ ├── error.unconditional-set-state-nested-function-expressions.expect.md │ │ │ │ │ │ │ ├── error.unconditional-set-state-nested-function-expressions.js │ │ │ │ │ │ │ ├── error.update-global-should-bailout.expect.md │ │ │ │ │ │ │ ├── error.update-global-should-bailout.tsx │ │ │ │ │ │ │ ├── error.useCallback-accesses-ref-mutated-later-via-function-preserve-memoization.expect.md │ │ │ │ │ │ │ ├── error.useCallback-accesses-ref-mutated-later-via-function-preserve-memoization.js │ │ │ │ │ │ │ ├── error.useCallback-set-ref-nested-property-dont-preserve-memoization.expect.md │ │ │ │ │ │ │ ├── error.useCallback-set-ref-nested-property-dont-preserve-memoization.js │ │ │ │ │ │ │ ├── error.useMemo-callback-generator.expect.md │ │ │ │ │ │ │ ├── error.useMemo-callback-generator.js │ │ │ │ │ │ │ ├── error.useMemo-non-literal-depslist.expect.md │ │ │ │ │ │ │ ├── error.useMemo-non-literal-depslist.ts │ │ │ │ │ │ │ ├── error.validate-blocklisted-imports.expect.md │ │ │ │ │ │ │ ├── error.validate-blocklisted-imports.ts │ │ │ │ │ │ │ ├── error.validate-mutate-ref-arg-in-render.expect.md │ │ │ │ │ │ │ ├── error.validate-mutate-ref-arg-in-render.js │ │ │ │ │ │ │ ├── error.validate-object-entries-mutation.expect.md │ │ │ │ │ │ │ ├── error.validate-object-entries-mutation.js │ │ │ │ │ │ │ ├── error.validate-object-values-mutation.expect.md │ │ │ │ │ │ │ ├── error.validate-object-values-mutation.js │ │ │ │ │ │ │ ├── escape-analysis-destructured-rest-element.expect.md │ │ │ │ │ │ │ ├── escape-analysis-destructured-rest-element.js │ │ │ │ │ │ │ ├── escape-analysis-jsx-child.expect.md │ │ │ │ │ │ │ ├── escape-analysis-jsx-child.js │ │ │ │ │ │ │ ├── escape-analysis-logical.expect.md │ │ │ │ │ │ │ ├── escape-analysis-logical.js │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-dependency.expect.md │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-dependency.js │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-nested-dependency.expect.md │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-allocating-nested-dependency.js │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-primitive-dependency.expect.md │ │ │ │ │ │ │ ├── escape-analysis-non-escaping-interleaved-primitive-dependency.js │ │ │ │ │ │ │ ├── escape-analysis-not-conditional-test.expect.md │ │ │ │ │ │ │ ├── escape-analysis-not-conditional-test.js │ │ │ │ │ │ │ ├── escape-analysis-not-if-test.expect.md │ │ │ │ │ │ │ ├── escape-analysis-not-if-test.js │ │ │ │ │ │ │ ├── escape-analysis-not-switch-case.expect.md │ │ │ │ │ │ │ ├── escape-analysis-not-switch-case.js │ │ │ │ │ │ │ ├── escape-analysis-not-switch-test.expect.md │ │ │ │ │ │ │ ├── escape-analysis-not-switch-test.js │ │ │ │ │ │ │ ├── evaluation-order-mutate-call-after-dependency-load.expect.md │ │ │ │ │ │ │ ├── evaluation-order-mutate-call-after-dependency-load.ts │ │ │ │ │ │ │ ├── evaluation-order-mutate-store-after-dependency-load.expect.md │ │ │ │ │ │ │ ├── evaluation-order-mutate-store-after-dependency-load.ts │ │ │ │ │ │ │ ├── exhaustive-deps/ │ │ │ │ │ │ │ │ ├── compile-files-with-exhaustive-deps-violation-in-effects.expect.md │ │ │ │ │ │ │ │ ├── compile-files-with-exhaustive-deps-violation-in-effects.js │ │ │ │ │ │ │ │ ├── error.exhaustive-deps-effect-events.expect.md │ │ │ │ │ │ │ │ ├── error.exhaustive-deps-effect-events.js │ │ │ │ │ │ │ │ ├── error.invalid-dep-on-ref-current-value.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-dep-on-ref-current-value.js │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps-disallow-unused-stable-types.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps-disallow-unused-stable-types.js │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-deps.js │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-extra-only.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-extra-only.js │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-missing-only.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps-missing-only.js │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-exhaustive-effect-deps.js │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-inner-function.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-inner-function.js │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-unmemoized.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep-unmemoized.js │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-missing-nonreactive-dep.js │ │ │ │ │ │ │ │ ├── error.sketchy-code-exhaustive-deps.expect.md │ │ │ │ │ │ │ │ ├── error.sketchy-code-exhaustive-deps.js │ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-constant-folded-values.expect.md │ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-constant-folded-values.js │ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-nonreactive-stable-types-as-extra-deps.expect.md │ │ │ │ │ │ │ │ ├── exhaustive-deps-allow-nonreactive-stable-types-as-extra-deps.js │ │ │ │ │ │ │ │ ├── exhaustive-deps-effect-events.expect.md │ │ │ │ │ │ │ │ ├── exhaustive-deps-effect-events.js │ │ │ │ │ │ │ │ ├── exhaustive-deps.expect.md │ │ │ │ │ │ │ │ └── exhaustive-deps.js │ │ │ │ │ │ │ ├── existing-variables-with-c-name.expect.md │ │ │ │ │ │ │ ├── existing-variables-with-c-name.js │ │ │ │ │ │ │ ├── expression-with-assignment-dynamic.expect.md │ │ │ │ │ │ │ ├── expression-with-assignment-dynamic.js │ │ │ │ │ │ │ ├── expression-with-assignment.expect.md │ │ │ │ │ │ │ ├── expression-with-assignment.js │ │ │ │ │ │ │ ├── extend-scopes-if.expect.md │ │ │ │ │ │ │ ├── extend-scopes-if.js │ │ │ │ │ │ │ ├── fast-refresh-dont-refresh-const-changes-prod.expect.md │ │ │ │ │ │ │ ├── fast-refresh-dont-refresh-const-changes-prod.js │ │ │ │ │ │ │ ├── fast-refresh-refresh-on-const-changes-dev.expect.md │ │ │ │ │ │ │ ├── fast-refresh-refresh-on-const-changes-dev.js │ │ │ │ │ │ │ ├── fast-refresh-reloading.expect.md │ │ │ │ │ │ │ ├── fast-refresh-reloading.js │ │ │ │ │ │ │ ├── fault-tolerance/ │ │ │ │ │ │ │ │ ├── error.try-finally-and-mutation-of-props.expect.md │ │ │ │ │ │ │ │ ├── error.try-finally-and-mutation-of-props.js │ │ │ │ │ │ │ │ ├── error.try-finally-and-ref-access.expect.md │ │ │ │ │ │ │ │ ├── error.try-finally-and-ref-access.js │ │ │ │ │ │ │ │ ├── error.try-finally-ref-access-and-mutation.expect.md │ │ │ │ │ │ │ │ ├── error.try-finally-ref-access-and-mutation.js │ │ │ │ │ │ │ │ ├── error.var-declaration-and-mutation-of-props.expect.md │ │ │ │ │ │ │ │ ├── error.var-declaration-and-mutation-of-props.js │ │ │ │ │ │ │ │ ├── error.var-declaration-and-ref-access.expect.md │ │ │ │ │ │ │ │ └── error.var-declaration-and-ref-access.js │ │ │ │ │ │ │ ├── fbt/ │ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-function-calls.expect.md │ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-function-calls.ts │ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-mixed-call-tag.expect.md │ │ │ │ │ │ │ │ ├── bug-fbt-plural-multiple-mixed-call-tag.tsx │ │ │ │ │ │ │ │ ├── error.todo-fbt-as-local.expect.md │ │ │ │ │ │ │ │ ├── error.todo-fbt-as-local.js │ │ │ │ │ │ │ │ ├── error.todo-fbt-unknown-enum-value.expect.md │ │ │ │ │ │ │ │ ├── error.todo-fbt-unknown-enum-value.js │ │ │ │ │ │ │ │ ├── error.todo-locally-require-fbt.expect.md │ │ │ │ │ │ │ │ ├── error.todo-locally-require-fbt.js │ │ │ │ │ │ │ │ ├── error.todo-multiple-fbt-plural.expect.md │ │ │ │ │ │ │ │ ├── error.todo-multiple-fbt-plural.tsx │ │ │ │ │ │ │ │ ├── fbs-params.expect.md │ │ │ │ │ │ │ │ ├── fbs-params.js │ │ │ │ │ │ │ │ ├── fbt-call-complex-param-value.expect.md │ │ │ │ │ │ │ │ ├── fbt-call-complex-param-value.js │ │ │ │ │ │ │ │ ├── fbt-call.expect.md │ │ │ │ │ │ │ │ ├── fbt-call.js │ │ │ │ │ │ │ │ ├── fbt-no-whitespace-btw-text-and-param.expect.md │ │ │ │ │ │ │ │ ├── fbt-no-whitespace-btw-text-and-param.tsx │ │ │ │ │ │ │ │ ├── fbt-param-with-leading-whitespace.expect.md │ │ │ │ │ │ │ │ ├── fbt-param-with-leading-whitespace.js │ │ │ │ │ │ │ │ ├── fbt-param-with-newline.expect.md │ │ │ │ │ │ │ │ ├── fbt-param-with-newline.js │ │ │ │ │ │ │ │ ├── fbt-param-with-quotes.expect.md │ │ │ │ │ │ │ │ ├── fbt-param-with-quotes.js │ │ │ │ │ │ │ │ ├── fbt-param-with-trailing-whitespace.expect.md │ │ │ │ │ │ │ │ ├── fbt-param-with-trailing-whitespace.js │ │ │ │ │ │ │ │ ├── fbt-param-with-unicode.expect.md │ │ │ │ │ │ │ │ ├── fbt-param-with-unicode.js │ │ │ │ │ │ │ │ ├── fbt-params-complex-param-value.expect.md │ │ │ │ │ │ │ │ ├── fbt-params-complex-param-value.js │ │ │ │ │ │ │ │ ├── fbt-params.expect.md │ │ │ │ │ │ │ │ ├── fbt-params.js │ │ │ │ │ │ │ │ ├── fbt-preserve-jsxtext.expect.md │ │ │ │ │ │ │ │ ├── fbt-preserve-jsxtext.js │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-subtree.expect.md │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-subtree.tsx │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-two-subtrees.expect.md │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace-two-subtrees.tsx │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace.expect.md │ │ │ │ │ │ │ │ ├── fbt-preserve-whitespace.tsx │ │ │ │ │ │ │ │ ├── fbt-repro-invalid-mutable-range-destructured-prop.expect.md │ │ │ │ │ │ │ │ ├── fbt-repro-invalid-mutable-range-destructured-prop.js │ │ │ │ │ │ │ │ ├── fbt-single-space-btw-param-and-text.expect.md │ │ │ │ │ │ │ │ ├── fbt-single-space-btw-param-and-text.tsx │ │ │ │ │ │ │ │ ├── fbt-template-string-same-scope.expect.md │ │ │ │ │ │ │ │ ├── fbt-template-string-same-scope.js │ │ │ │ │ │ │ │ ├── fbt-to-string.expect.md │ │ │ │ │ │ │ │ ├── fbt-to-string.js │ │ │ │ │ │ │ │ ├── fbt-whitespace-around-param-value.expect.md │ │ │ │ │ │ │ │ ├── fbt-whitespace-around-param-value.tsx │ │ │ │ │ │ │ │ ├── fbt-whitespace-within-text.expect.md │ │ │ │ │ │ │ │ ├── fbt-whitespace-within-text.tsx │ │ │ │ │ │ │ │ ├── fbtparam-text-must-use-expression-container.expect.md │ │ │ │ │ │ │ │ ├── fbtparam-text-must-use-expression-container.js │ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-element-content.expect.md │ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-element-content.js │ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-fragment-value.expect.md │ │ │ │ │ │ │ │ ├── fbtparam-with-jsx-fragment-value.js │ │ │ │ │ │ │ │ ├── lambda-with-fbt.expect.md │ │ │ │ │ │ │ │ ├── lambda-with-fbt.js │ │ │ │ │ │ │ │ ├── recursively-merge-scopes-jsx.expect.md │ │ │ │ │ │ │ │ ├── recursively-merge-scopes-jsx.js │ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt-jsx.expect.md │ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt-jsx.js │ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt.expect.md │ │ │ │ │ │ │ │ ├── repro-fbt-param-nested-fbt.js │ │ │ │ │ │ │ │ ├── repro-macro-property-not-handled.expect.md │ │ │ │ │ │ │ │ ├── repro-macro-property-not-handled.tsx │ │ │ │ │ │ │ │ ├── repro-separately-memoized-fbt-param.expect.md │ │ │ │ │ │ │ │ └── repro-separately-memoized-fbt-param.js │ │ │ │ │ │ │ ├── flag-enable-emit-hook-guards.expect.md │ │ │ │ │ │ │ ├── flag-enable-emit-hook-guards.ts │ │ │ │ │ │ │ ├── flatten-scopes-with-methodcall-hook.expect.md │ │ │ │ │ │ │ ├── flatten-scopes-with-methodcall-hook.js │ │ │ │ │ │ │ ├── flow-enum-inline.expect.md │ │ │ │ │ │ │ ├── flow-enum-inline.js │ │ │ │ │ │ │ ├── for-empty-update-with-continue.expect.md │ │ │ │ │ │ │ ├── for-empty-update-with-continue.js │ │ │ │ │ │ │ ├── for-empty-update.expect.md │ │ │ │ │ │ │ ├── for-empty-update.js │ │ │ │ │ │ │ ├── for-in-statement-body-always-returns.expect.md │ │ │ │ │ │ │ ├── for-in-statement-body-always-returns.js │ │ │ │ │ │ │ ├── for-in-statement-break.expect.md │ │ │ │ │ │ │ ├── for-in-statement-break.js │ │ │ │ │ │ │ ├── for-in-statement-continue.expect.md │ │ │ │ │ │ │ ├── for-in-statement-continue.js │ │ │ │ │ │ │ ├── for-in-statement-empty-body.expect.md │ │ │ │ │ │ │ ├── for-in-statement-empty-body.js │ │ │ │ │ │ │ ├── for-in-statement-type-inference.expect.md │ │ │ │ │ │ │ ├── for-in-statement-type-inference.js │ │ │ │ │ │ │ ├── for-in-statement.expect.md │ │ │ │ │ │ │ ├── for-in-statement.js │ │ │ │ │ │ │ ├── for-logical.expect.md │ │ │ │ │ │ │ ├── for-logical.js │ │ │ │ │ │ │ ├── for-loop-let-undefined-decl.expect.md │ │ │ │ │ │ │ ├── for-loop-let-undefined-decl.js │ │ │ │ │ │ │ ├── for-loop-with-value-block-initializer.expect.md │ │ │ │ │ │ │ ├── for-loop-with-value-block-initializer.js │ │ │ │ │ │ │ ├── for-multiple-variable-declarations-in-initializer.expect.md │ │ │ │ │ │ │ ├── for-multiple-variable-declarations-in-initializer.js │ │ │ │ │ │ │ ├── for-of-break.expect.md │ │ │ │ │ │ │ ├── for-of-break.js │ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later-value-initially-null.expect.md │ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later-value-initially-null.js │ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later.expect.md │ │ │ │ │ │ │ ├── for-of-capture-item-of-local-collection-mutate-later.js │ │ │ │ │ │ │ ├── for-of-conditional-break.expect.md │ │ │ │ │ │ │ ├── for-of-conditional-break.js │ │ │ │ │ │ │ ├── for-of-continue.expect.md │ │ │ │ │ │ │ ├── for-of-continue.js │ │ │ │ │ │ │ ├── for-of-destructure.expect.md │ │ │ │ │ │ │ ├── for-of-destructure.js │ │ │ │ │ │ │ ├── for-of-immutable-collection.expect.md │ │ │ │ │ │ │ ├── for-of-immutable-collection.js │ │ │ │ │ │ │ ├── for-of-iterator-of-immutable-collection.expect.md │ │ │ │ │ │ │ ├── for-of-iterator-of-immutable-collection.js │ │ │ │ │ │ │ ├── for-of-mutate-item-of-local-collection.expect.md │ │ │ │ │ │ │ ├── for-of-mutate-item-of-local-collection.js │ │ │ │ │ │ │ ├── for-of-mutate.expect.md │ │ │ │ │ │ │ ├── for-of-mutate.tsx │ │ │ │ │ │ │ ├── for-of-nonmutating-loop-local-collection.expect.md │ │ │ │ │ │ │ ├── for-of-nonmutating-loop-local-collection.js │ │ │ │ │ │ │ ├── for-of-simple.expect.md │ │ │ │ │ │ │ ├── for-of-simple.js │ │ │ │ │ │ │ ├── for-return.expect.md │ │ │ │ │ │ │ ├── for-return.js │ │ │ │ │ │ │ ├── for-with-assignment-as-update.expect.md │ │ │ │ │ │ │ ├── for-with-assignment-as-update.js │ │ │ │ │ │ │ ├── frozen-after-alias.expect.md │ │ │ │ │ │ │ ├── frozen-after-alias.js │ │ │ │ │ │ │ ├── function-declaration-reassign.expect.md │ │ │ │ │ │ │ ├── function-declaration-reassign.js │ │ │ │ │ │ │ ├── function-declaration-redeclare.expect.md │ │ │ │ │ │ │ ├── function-declaration-redeclare.js │ │ │ │ │ │ │ ├── function-declaration-simple.expect.md │ │ │ │ │ │ │ ├── function-declaration-simple.js │ │ │ │ │ │ │ ├── function-expr-directive.expect.md │ │ │ │ │ │ │ ├── function-expr-directive.js │ │ │ │ │ │ │ ├── function-expression-captures-value-later-frozen-jsx.expect.md │ │ │ │ │ │ │ ├── function-expression-captures-value-later-frozen-jsx.js │ │ │ │ │ │ │ ├── function-expression-maybe-mutates-hook-return-value.expect.md │ │ │ │ │ │ │ ├── function-expression-maybe-mutates-hook-return-value.js │ │ │ │ │ │ │ ├── function-expression-prototype-call-mutating.expect.md │ │ │ │ │ │ │ ├── function-expression-prototype-call-mutating.js │ │ │ │ │ │ │ ├── function-expression-prototype-call.expect.md │ │ │ │ │ │ │ ├── function-expression-prototype-call.js │ │ │ │ │ │ │ ├── function-expression-with-store-to-parameter.expect.md │ │ │ │ │ │ │ ├── function-expression-with-store-to-parameter.js │ │ │ │ │ │ │ ├── function-param-assignment-pattern.expect.md │ │ │ │ │ │ │ ├── function-param-assignment-pattern.js │ │ │ │ │ │ │ ├── gating/ │ │ │ │ │ │ │ │ ├── arrow-function-expr-gating-test.expect.md │ │ │ │ │ │ │ │ ├── arrow-function-expr-gating-test.js │ │ │ │ │ │ │ │ ├── codegen-instrument-forget-gating-test.expect.md │ │ │ │ │ │ │ │ ├── codegen-instrument-forget-gating-test.js │ │ │ │ │ │ │ │ ├── component-syntax-ref-gating.flow.expect.md │ │ │ │ │ │ │ │ ├── component-syntax-ref-gating.flow.js │ │ │ │ │ │ │ │ ├── conflicting-gating-fn.expect.md │ │ │ │ │ │ │ │ ├── conflicting-gating-fn.js │ │ │ │ │ │ │ │ ├── dynamic-gating-annotation.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-annotation.js │ │ │ │ │ │ │ │ ├── dynamic-gating-bailout-nopanic.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-bailout-nopanic.js │ │ │ │ │ │ │ │ ├── dynamic-gating-disabled.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-disabled.js │ │ │ │ │ │ │ │ ├── dynamic-gating-enabled.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-enabled.js │ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-identifier-nopanic.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-identifier-nopanic.js │ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-multiple.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-invalid-multiple.js │ │ │ │ │ │ │ │ ├── dynamic-gating-noemit.expect.md │ │ │ │ │ │ │ │ ├── dynamic-gating-noemit.js │ │ │ │ │ │ │ │ ├── error.dynamic-gating-invalid-identifier.expect.md │ │ │ │ │ │ │ │ ├── error.dynamic-gating-invalid-identifier.js │ │ │ │ │ │ │ │ ├── gating-access-function-name-in-component.expect.md │ │ │ │ │ │ │ │ ├── gating-access-function-name-in-component.js │ │ │ │ │ │ │ │ ├── gating-nonreferenced-identifier-collision.expect.md │ │ │ │ │ │ │ │ ├── gating-nonreferenced-identifier-collision.js │ │ │ │ │ │ │ │ ├── gating-preserves-function-properties.expect.md │ │ │ │ │ │ │ │ ├── gating-preserves-function-properties.tsx │ │ │ │ │ │ │ │ ├── gating-test-export-default-function.expect.md │ │ │ │ │ │ │ │ ├── gating-test-export-default-function.js │ │ │ │ │ │ │ │ ├── gating-test-export-function-and-default.expect.md │ │ │ │ │ │ │ │ ├── gating-test-export-function-and-default.js │ │ │ │ │ │ │ │ ├── gating-test-export-function.expect.md │ │ │ │ │ │ │ │ ├── gating-test-export-function.js │ │ │ │ │ │ │ │ ├── gating-test.expect.md │ │ │ │ │ │ │ │ ├── gating-test.js │ │ │ │ │ │ │ │ ├── gating-use-before-decl-ref.expect.md │ │ │ │ │ │ │ │ ├── gating-use-before-decl-ref.js │ │ │ │ │ │ │ │ ├── gating-use-before-decl.expect.md │ │ │ │ │ │ │ │ ├── gating-use-before-decl.js │ │ │ │ │ │ │ │ ├── gating-with-hoisted-type-reference.flow.expect.md │ │ │ │ │ │ │ │ ├── gating-with-hoisted-type-reference.flow.js │ │ │ │ │ │ │ │ ├── infer-function-expression-React-memo-gating.expect.md │ │ │ │ │ │ │ │ ├── infer-function-expression-React-memo-gating.js │ │ │ │ │ │ │ │ ├── invalid-fnexpr-reference.expect.md │ │ │ │ │ │ │ │ ├── invalid-fnexpr-reference.js │ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-default-gating-test.expect.md │ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-default-gating-test.js │ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-gating-test.expect.md │ │ │ │ │ │ │ │ ├── multi-arrow-expr-export-gating-test.js │ │ │ │ │ │ │ │ ├── multi-arrow-expr-gating-test.expect.md │ │ │ │ │ │ │ │ ├── multi-arrow-expr-gating-test.js │ │ │ │ │ │ │ │ ├── reassigned-fnexpr-variable.expect.md │ │ │ │ │ │ │ │ ├── reassigned-fnexpr-variable.js │ │ │ │ │ │ │ │ ├── repro-no-gating-import-without-compiled-functions.expect.md │ │ │ │ │ │ │ │ └── repro-no-gating-import-without-compiled-functions.js │ │ │ │ │ │ │ ├── global-jsx-tag-lowered-between-mutations.expect.md │ │ │ │ │ │ │ ├── global-jsx-tag-lowered-between-mutations.js │ │ │ │ │ │ │ ├── global-types/ │ │ │ │ │ │ │ │ ├── call-spread-argument-set.expect.md │ │ │ │ │ │ │ │ ├── call-spread-argument-set.ts │ │ │ │ │ │ │ │ ├── map-constructor.expect.md │ │ │ │ │ │ │ │ ├── map-constructor.ts │ │ │ │ │ │ │ │ ├── repro-array-filter-capture-mutate-bug.expect.md │ │ │ │ │ │ │ │ ├── repro-array-filter-capture-mutate-bug.tsx │ │ │ │ │ │ │ │ ├── repro-array-filter-known-nonmutate-Boolean.expect.md │ │ │ │ │ │ │ │ ├── repro-array-filter-known-nonmutate-Boolean.tsx │ │ │ │ │ │ │ │ ├── repro-array-map-capture-mutate-bug.expect.md │ │ │ │ │ │ │ │ ├── repro-array-map-capture-mutate-bug.tsx │ │ │ │ │ │ │ │ ├── repro-array-map-known-mutate-shape.expect.md │ │ │ │ │ │ │ │ ├── repro-array-map-known-mutate-shape.tsx │ │ │ │ │ │ │ │ ├── set-add-mutate.expect.md │ │ │ │ │ │ │ │ ├── set-add-mutate.ts │ │ │ │ │ │ │ │ ├── set-constructor-arg.expect.md │ │ │ │ │ │ │ │ ├── set-constructor-arg.ts │ │ │ │ │ │ │ │ ├── set-constructor.expect.md │ │ │ │ │ │ │ │ ├── set-constructor.ts │ │ │ │ │ │ │ │ ├── set-copy-constructor-mutate.expect.md │ │ │ │ │ │ │ │ ├── set-copy-constructor-mutate.ts │ │ │ │ │ │ │ │ ├── set-for-of-iterate-values.expect.md │ │ │ │ │ │ │ │ ├── set-for-of-iterate-values.ts │ │ │ │ │ │ │ │ ├── set-foreach-mutate.expect.md │ │ │ │ │ │ │ │ └── set-foreach-mutate.tsx │ │ │ │ │ │ │ ├── globals-Boolean.expect.md │ │ │ │ │ │ │ ├── globals-Boolean.js │ │ │ │ │ │ │ ├── globals-Number.expect.md │ │ │ │ │ │ │ ├── globals-Number.js │ │ │ │ │ │ │ ├── globals-String.expect.md │ │ │ │ │ │ │ ├── globals-String.js │ │ │ │ │ │ │ ├── globals-dont-resolve-local-useState.expect.md │ │ │ │ │ │ │ ├── globals-dont-resolve-local-useState.js │ │ │ │ │ │ │ ├── hoist-destruct.expect.md │ │ │ │ │ │ │ ├── hoist-destruct.js │ │ │ │ │ │ │ ├── hoisted-context-variable-in-outlined-fn.expect.md │ │ │ │ │ │ │ ├── hoisted-context-variable-in-outlined-fn.js │ │ │ │ │ │ │ ├── hoisted-declaration-with-scope.expect.md │ │ │ │ │ │ │ ├── hoisted-declaration-with-scope.tsx │ │ │ │ │ │ │ ├── hoisted-function-declaration.expect.md │ │ │ │ │ │ │ ├── hoisted-function-declaration.js │ │ │ │ │ │ │ ├── hoisting-computed-member-expression.expect.md │ │ │ │ │ │ │ ├── hoisting-computed-member-expression.js │ │ │ │ │ │ │ ├── hoisting-functionexpr-conditional-dep.expect.md │ │ │ │ │ │ │ ├── hoisting-functionexpr-conditional-dep.tsx │ │ │ │ │ │ │ ├── hoisting-invalid-tdz-let.expect.md │ │ │ │ │ │ │ ├── hoisting-invalid-tdz-let.js │ │ │ │ │ │ │ ├── hoisting-let-declaration-without-initialization.expect.md │ │ │ │ │ │ │ ├── hoisting-let-declaration-without-initialization.js │ │ │ │ │ │ │ ├── hoisting-member-expression.expect.md │ │ │ │ │ │ │ ├── hoisting-member-expression.js │ │ │ │ │ │ │ ├── hoisting-nested-block-statements.expect.md │ │ │ │ │ │ │ ├── hoisting-nested-block-statements.js │ │ │ │ │ │ │ ├── hoisting-nested-const-declaration-2.expect.md │ │ │ │ │ │ │ ├── hoisting-nested-const-declaration-2.js │ │ │ │ │ │ │ ├── hoisting-nested-const-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-nested-const-declaration.js │ │ │ │ │ │ │ ├── hoisting-nested-let-declaration-2.expect.md │ │ │ │ │ │ │ ├── hoisting-nested-let-declaration-2.js │ │ │ │ │ │ │ ├── hoisting-nested-let-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-nested-let-declaration.js │ │ │ │ │ │ │ ├── hoisting-object-method.expect.md │ │ │ │ │ │ │ ├── hoisting-object-method.js │ │ │ │ │ │ │ ├── hoisting-reassigned-let-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-reassigned-let-declaration.js │ │ │ │ │ │ │ ├── hoisting-reassigned-twice-let-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-reassigned-twice-let-declaration.js │ │ │ │ │ │ │ ├── hoisting-recursive-call-within-lambda.expect.md │ │ │ │ │ │ │ ├── hoisting-recursive-call-within-lambda.js │ │ │ │ │ │ │ ├── hoisting-recursive-call.expect.md │ │ │ │ │ │ │ ├── hoisting-recursive-call.ts │ │ │ │ │ │ │ ├── hoisting-repro-variable-used-in-assignment.expect.md │ │ │ │ │ │ │ ├── hoisting-repro-variable-used-in-assignment.js │ │ │ │ │ │ │ ├── hoisting-setstate-captured-indirectly-jsx.expect.md │ │ │ │ │ │ │ ├── hoisting-setstate-captured-indirectly-jsx.js │ │ │ │ │ │ │ ├── hoisting-simple-const-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-simple-const-declaration.js │ │ │ │ │ │ │ ├── hoisting-simple-function-expression.expect.md │ │ │ │ │ │ │ ├── hoisting-simple-function-expression.js │ │ │ │ │ │ │ ├── hoisting-simple-let-declaration.expect.md │ │ │ │ │ │ │ ├── hoisting-simple-let-declaration.js │ │ │ │ │ │ │ ├── hoisting-within-lambda.expect.md │ │ │ │ │ │ │ ├── hoisting-within-lambda.js │ │ │ │ │ │ │ ├── holey-array-expr.expect.md │ │ │ │ │ │ │ ├── holey-array-expr.js │ │ │ │ │ │ │ ├── holey-array-pattern-dce-2.expect.md │ │ │ │ │ │ │ ├── holey-array-pattern-dce-2.js │ │ │ │ │ │ │ ├── holey-array-pattern-dce.expect.md │ │ │ │ │ │ │ ├── holey-array-pattern-dce.js │ │ │ │ │ │ │ ├── hook-call-freezes-captured-memberexpr.expect.md │ │ │ │ │ │ │ ├── hook-call-freezes-captured-memberexpr.tsx │ │ │ │ │ │ │ ├── hook-call.expect.md │ │ │ │ │ │ │ ├── hook-call.js │ │ │ │ │ │ │ ├── hook-declaration-basic.flow.expect.md │ │ │ │ │ │ │ ├── hook-declaration-basic.flow.js │ │ │ │ │ │ │ ├── hook-inside-logical-expression.expect.md │ │ │ │ │ │ │ ├── hook-inside-logical-expression.js │ │ │ │ │ │ │ ├── hook-noAlias.expect.md │ │ │ │ │ │ │ ├── hook-noAlias.js │ │ │ │ │ │ │ ├── hook-property-load-local.expect.md │ │ │ │ │ │ │ ├── hook-property-load-local.js │ │ │ │ │ │ │ ├── hook-ref-callback.expect.md │ │ │ │ │ │ │ ├── hook-ref-callback.js │ │ │ │ │ │ │ ├── hooks-freeze-arguments.expect.md │ │ │ │ │ │ │ ├── hooks-freeze-arguments.js │ │ │ │ │ │ │ ├── hooks-freeze-possibly-mutable-arguments.expect.md │ │ │ │ │ │ │ ├── hooks-freeze-possibly-mutable-arguments.js │ │ │ │ │ │ │ ├── hooks-with-React-namespace.expect.md │ │ │ │ │ │ │ ├── hooks-with-React-namespace.js │ │ │ │ │ │ │ ├── idx-method-no-outlining-wildcard.expect.md │ │ │ │ │ │ │ ├── idx-method-no-outlining-wildcard.js │ │ │ │ │ │ │ ├── idx-method-no-outlining.expect.md │ │ │ │ │ │ │ ├── idx-method-no-outlining.js │ │ │ │ │ │ │ ├── idx-no-outlining.expect.md │ │ │ │ │ │ │ ├── idx-no-outlining.js │ │ │ │ │ │ │ ├── ignore-inner-interface-types.expect.md │ │ │ │ │ │ │ ├── ignore-inner-interface-types.ts │ │ │ │ │ │ │ ├── ignore-use-no-forget.expect.md │ │ │ │ │ │ │ ├── ignore-use-no-forget.js │ │ │ │ │ │ │ ├── iife-inline-ternary.expect.md │ │ │ │ │ │ │ ├── iife-inline-ternary.js │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js │ │ │ │ │ │ │ ├── iife-return-modified-later.expect.md │ │ │ │ │ │ │ ├── iife-return-modified-later.js │ │ │ │ │ │ │ ├── immutable-hooks.expect.md │ │ │ │ │ │ │ ├── immutable-hooks.js │ │ │ │ │ │ │ ├── import-as-local.expect.md │ │ │ │ │ │ │ ├── import-as-local.tsx │ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-class.expect.md │ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-class.js │ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-lambda.expect.md │ │ │ │ │ │ │ ├── inadvertent-mutability-readonly-lambda.js │ │ │ │ │ │ │ ├── incompatible-destructuring-kinds.expect.md │ │ │ │ │ │ │ ├── incompatible-destructuring-kinds.js │ │ │ │ │ │ │ ├── independent-across-if.expect.md │ │ │ │ │ │ │ ├── independent-across-if.js │ │ │ │ │ │ │ ├── independent.expect.md │ │ │ │ │ │ │ ├── independent.js │ │ │ │ │ │ │ ├── independently-memoize-object-property.expect.md │ │ │ │ │ │ │ ├── independently-memoize-object-property.js │ │ │ │ │ │ │ ├── infer-compile-hooks-with-multiple-params.expect.md │ │ │ │ │ │ │ ├── infer-compile-hooks-with-multiple-params.js │ │ │ │ │ │ │ ├── infer-computed-delete.expect.md │ │ │ │ │ │ │ ├── infer-computed-delete.js │ │ │ │ │ │ │ ├── infer-dont-compile-components-with-multiple-params.expect.md │ │ │ │ │ │ │ ├── infer-dont-compile-components-with-multiple-params.js │ │ │ │ │ │ │ ├── infer-function-React-memo.expect.md │ │ │ │ │ │ │ ├── infer-function-React-memo.js │ │ │ │ │ │ │ ├── infer-function-assignment.expect.md │ │ │ │ │ │ │ ├── infer-function-assignment.js │ │ │ │ │ │ │ ├── infer-function-expression-component.expect.md │ │ │ │ │ │ │ ├── infer-function-expression-component.js │ │ │ │ │ │ │ ├── infer-function-forwardRef.expect.md │ │ │ │ │ │ │ ├── infer-function-forwardRef.js │ │ │ │ │ │ │ ├── infer-functions-component-with-hook-call.expect.md │ │ │ │ │ │ │ ├── infer-functions-component-with-hook-call.js │ │ │ │ │ │ │ ├── infer-functions-component-with-jsx.expect.md │ │ │ │ │ │ │ ├── infer-functions-component-with-jsx.js │ │ │ │ │ │ │ ├── infer-functions-component-with-ref-arg.expect.md │ │ │ │ │ │ │ ├── infer-functions-component-with-ref-arg.js │ │ │ │ │ │ │ ├── infer-functions-hook-with-hook-call.expect.md │ │ │ │ │ │ │ ├── infer-functions-hook-with-hook-call.js │ │ │ │ │ │ │ ├── infer-functions-hook-with-jsx.expect.md │ │ │ │ │ │ │ ├── infer-functions-hook-with-jsx.js │ │ │ │ │ │ │ ├── infer-global-object.expect.md │ │ │ │ │ │ │ ├── infer-global-object.js │ │ │ │ │ │ │ ├── infer-nested-object-method.expect.md │ │ │ │ │ │ │ ├── infer-nested-object-method.jsx │ │ │ │ │ │ │ ├── infer-no-component-annot.expect.md │ │ │ │ │ │ │ ├── infer-no-component-annot.ts │ │ │ │ │ │ │ ├── infer-no-component-nested-jsx.expect.md │ │ │ │ │ │ │ ├── infer-no-component-nested-jsx.js │ │ │ │ │ │ │ ├── infer-no-component-obj-return.expect.md │ │ │ │ │ │ │ ├── infer-no-component-obj-return.js │ │ │ │ │ │ │ ├── infer-phi-primitive.expect.md │ │ │ │ │ │ │ ├── infer-phi-primitive.js │ │ │ │ │ │ │ ├── infer-property-delete.expect.md │ │ │ │ │ │ │ ├── infer-property-delete.js │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.expect.md │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.ts │ │ │ │ │ │ │ ├── infer-skip-components-without-hooks-or-jsx.expect.md │ │ │ │ │ │ │ ├── infer-skip-components-without-hooks-or-jsx.js │ │ │ │ │ │ │ ├── infer-types-through-type-cast.flow.expect.md │ │ │ │ │ │ │ ├── infer-types-through-type-cast.flow.js │ │ │ │ │ │ │ ├── inner-function/ │ │ │ │ │ │ │ │ └── nullable-objects/ │ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.expect.md │ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.js │ │ │ │ │ │ │ │ ├── array-map-named-callback.expect.md │ │ │ │ │ │ │ │ ├── array-map-named-callback.js │ │ │ │ │ │ │ │ ├── array-map-named-chained-callbacks.expect.md │ │ │ │ │ │ │ │ ├── array-map-named-chained-callbacks.js │ │ │ │ │ │ │ │ ├── array-map-simple.expect.md │ │ │ │ │ │ │ │ ├── array-map-simple.js │ │ │ │ │ │ │ │ ├── assume-invoked/ │ │ │ │ │ │ │ │ │ ├── conditional-call-chain.expect.md │ │ │ │ │ │ │ │ │ ├── conditional-call-chain.tsx │ │ │ │ │ │ │ │ │ ├── conditional-call.expect.md │ │ │ │ │ │ │ │ │ ├── conditional-call.ts │ │ │ │ │ │ │ │ │ ├── conditionally-return-fn.expect.md │ │ │ │ │ │ │ │ │ ├── conditionally-return-fn.ts │ │ │ │ │ │ │ │ │ ├── direct-call.expect.md │ │ │ │ │ │ │ │ │ ├── direct-call.ts │ │ │ │ │ │ │ │ │ ├── function-with-conditional-callsite-in-another-function.expect.md │ │ │ │ │ │ │ │ │ ├── function-with-conditional-callsite-in-another-function.ts │ │ │ │ │ │ │ │ │ ├── hook-call.expect.md │ │ │ │ │ │ │ │ │ ├── hook-call.ts │ │ │ │ │ │ │ │ │ ├── jsx-and-passed.expect.md │ │ │ │ │ │ │ │ │ ├── jsx-and-passed.ts │ │ │ │ │ │ │ │ │ ├── jsx-function.expect.md │ │ │ │ │ │ │ │ │ ├── jsx-function.tsx │ │ │ │ │ │ │ │ │ ├── return-function.expect.md │ │ │ │ │ │ │ │ │ ├── return-function.ts │ │ │ │ │ │ │ │ │ ├── use-memo-returned.expect.md │ │ │ │ │ │ │ │ │ └── use-memo-returned.ts │ │ │ │ │ │ │ │ ├── bug-invalid-array-map-manual.expect.md │ │ │ │ │ │ │ │ ├── bug-invalid-array-map-manual.js │ │ │ │ │ │ │ │ ├── return-object-of-functions.expect.md │ │ │ │ │ │ │ │ └── return-object-of-functions.js │ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-dynamic.expect.md │ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-dynamic.js │ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-static.expect.md │ │ │ │ │ │ │ ├── inner-memo-value-not-promoted-to-outer-scope-static.js │ │ │ │ │ │ │ ├── interdependent-across-if.expect.md │ │ │ │ │ │ │ ├── interdependent-across-if.js │ │ │ │ │ │ │ ├── interdependent.expect.md │ │ │ │ │ │ │ ├── interdependent.js │ │ │ │ │ │ │ ├── invalid-jsx-in-catch-in-outer-try-with-catch.expect.md │ │ │ │ │ │ │ ├── invalid-jsx-in-catch-in-outer-try-with-catch.js │ │ │ │ │ │ │ ├── invalid-jsx-in-try-with-catch.expect.md │ │ │ │ │ │ │ ├── invalid-jsx-in-try-with-catch.js │ │ │ │ │ │ │ ├── invalid-jsx-lowercase-localvar.expect.md │ │ │ │ │ │ │ ├── invalid-jsx-lowercase-localvar.jsx │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-derived-event.expect.md │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-derived-event.js │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-force-update.expect.md │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-force-update.js │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-non-local-derived.expect.md │ │ │ │ │ │ │ ├── invalid-set-state-in-effect-verbose-non-local-derived.js │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-namespace.expect.md │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-namespace.js │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-transitive.expect.md │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-transitive.js │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-via-useEffectEvent.expect.md │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect-via-useEffectEvent.js │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect.expect.md │ │ │ │ │ │ │ ├── invalid-setState-in-useEffect.js │ │ │ │ │ │ │ ├── invalid-unused-usememo.expect.md │ │ │ │ │ │ │ ├── invalid-unused-usememo.js │ │ │ │ │ │ │ ├── invalid-useMemo-no-return-value.expect.md │ │ │ │ │ │ │ ├── invalid-useMemo-no-return-value.js │ │ │ │ │ │ │ ├── invalid-useMemo-return-empty.expect.md │ │ │ │ │ │ │ ├── invalid-useMemo-return-empty.js │ │ │ │ │ │ │ ├── inverted-if-else.expect.md │ │ │ │ │ │ │ ├── inverted-if-else.js │ │ │ │ │ │ │ ├── inverted-if.expect.md │ │ │ │ │ │ │ ├── inverted-if.js │ │ │ │ │ │ │ ├── issue852.expect.md │ │ │ │ │ │ │ ├── issue852.js │ │ │ │ │ │ │ ├── issue933-disjoint-set-infinite-loop.expect.md │ │ │ │ │ │ │ ├── issue933-disjoint-set-infinite-loop.js │ │ │ │ │ │ │ ├── jsx-attribute-default-to-true.expect.md │ │ │ │ │ │ │ ├── jsx-attribute-default-to-true.tsx │ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-element-value.expect.md │ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-element-value.js │ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-fragment-value.flow.expect.md │ │ │ │ │ │ │ ├── jsx-attribute-with-jsx-fragment-value.flow.js │ │ │ │ │ │ │ ├── jsx-bracket-in-text.expect.md │ │ │ │ │ │ │ ├── jsx-bracket-in-text.jsx │ │ │ │ │ │ │ ├── jsx-empty-expression.expect.md │ │ │ │ │ │ │ ├── jsx-empty-expression.js │ │ │ │ │ │ │ ├── jsx-fragment.expect.md │ │ │ │ │ │ │ ├── jsx-fragment.js │ │ │ │ │ │ │ ├── jsx-freeze.expect.md │ │ │ │ │ │ │ ├── jsx-freeze.js │ │ │ │ │ │ │ ├── jsx-html-entity.expect.md │ │ │ │ │ │ │ ├── jsx-html-entity.js │ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag-conditional.expect.md │ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag-conditional.js │ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag.expect.md │ │ │ │ │ │ │ ├── jsx-local-memberexpr-tag.js │ │ │ │ │ │ │ ├── jsx-local-tag-in-lambda.expect.md │ │ │ │ │ │ │ ├── jsx-local-tag-in-lambda.js │ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr-in-lambda.expect.md │ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr-in-lambda.jsx │ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr.expect.md │ │ │ │ │ │ │ ├── jsx-lowercase-localvar-memberexpr.jsx │ │ │ │ │ │ │ ├── jsx-lowercase-memberexpr.expect.md │ │ │ │ │ │ │ ├── jsx-lowercase-memberexpr.jsx │ │ │ │ │ │ │ ├── jsx-member-expression-tag-grouping.expect.md │ │ │ │ │ │ │ ├── jsx-member-expression-tag-grouping.js │ │ │ │ │ │ │ ├── jsx-member-expression.expect.md │ │ │ │ │ │ │ ├── jsx-member-expression.js │ │ │ │ │ │ │ ├── jsx-memberexpr-tag-in-lambda.expect.md │ │ │ │ │ │ │ ├── jsx-memberexpr-tag-in-lambda.js │ │ │ │ │ │ │ ├── jsx-namespaced-name.expect.md │ │ │ │ │ │ │ ├── jsx-namespaced-name.js │ │ │ │ │ │ │ ├── jsx-outlining-child-stored-in-id.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-child-stored-in-id.js │ │ │ │ │ │ │ ├── jsx-outlining-dup-key-diff-value.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-dup-key-diff-value.js │ │ │ │ │ │ │ ├── jsx-outlining-dupe-attr-after-rename.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-dupe-attr-after-rename.js │ │ │ │ │ │ │ ├── jsx-outlining-dupe-key-dupe-component.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-dupe-key-dupe-component.js │ │ │ │ │ │ │ ├── jsx-outlining-duplicate-prop.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-duplicate-prop.js │ │ │ │ │ │ │ ├── jsx-outlining-jsx-stored-in-id.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-jsx-stored-in-id.js │ │ │ │ │ │ │ ├── jsx-outlining-separate-nested.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-separate-nested.js │ │ │ │ │ │ │ ├── jsx-outlining-simple.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-simple.js │ │ │ │ │ │ │ ├── jsx-outlining-with-non-jsx-children.expect.md │ │ │ │ │ │ │ ├── jsx-outlining-with-non-jsx-children.js │ │ │ │ │ │ │ ├── jsx-preserve-escape-character.expect.md │ │ │ │ │ │ │ ├── jsx-preserve-escape-character.js │ │ │ │ │ │ │ ├── jsx-preserve-whitespace.expect.md │ │ │ │ │ │ │ ├── jsx-preserve-whitespace.tsx │ │ │ │ │ │ │ ├── jsx-reactive-local-variable-member-expr.expect.md │ │ │ │ │ │ │ ├── jsx-reactive-local-variable-member-expr.tsx │ │ │ │ │ │ │ ├── jsx-spread.expect.md │ │ │ │ │ │ │ ├── jsx-spread.js │ │ │ │ │ │ │ ├── jsx-string-attribute-expression-container.expect.md │ │ │ │ │ │ │ ├── jsx-string-attribute-expression-container.js │ │ │ │ │ │ │ ├── jsx-string-attribute-non-ascii.expect.md │ │ │ │ │ │ │ ├── jsx-string-attribute-non-ascii.js │ │ │ │ │ │ │ ├── jsx-tag-evaluation-order-non-global.expect.md │ │ │ │ │ │ │ ├── jsx-tag-evaluation-order-non-global.js │ │ │ │ │ │ │ ├── jsx-tag-evaluation-order.expect.md │ │ │ │ │ │ │ ├── jsx-tag-evaluation-order.tsx │ │ │ │ │ │ │ ├── jsx-ternary-local-variable.expect.md │ │ │ │ │ │ │ ├── jsx-ternary-local-variable.tsx │ │ │ │ │ │ │ ├── labeled-break-within-label-loop.expect.md │ │ │ │ │ │ │ ├── labeled-break-within-label-loop.ts │ │ │ │ │ │ │ ├── labeled-break-within-label-switch.expect.md │ │ │ │ │ │ │ ├── labeled-break-within-label-switch.ts │ │ │ │ │ │ │ ├── lambda-array-access-member-expr-captured.expect.md │ │ │ │ │ │ │ ├── lambda-array-access-member-expr-captured.ts │ │ │ │ │ │ │ ├── lambda-array-access-member-expr-param.expect.md │ │ │ │ │ │ │ ├── lambda-array-access-member-expr-param.ts │ │ │ │ │ │ │ ├── lambda-capture-returned-alias.expect.md │ │ │ │ │ │ │ ├── lambda-capture-returned-alias.js │ │ │ │ │ │ │ ├── lambda-mutate-shadowed-object.expect.md │ │ │ │ │ │ │ ├── lambda-mutate-shadowed-object.js │ │ │ │ │ │ │ ├── lambda-mutated-non-reactive-to-reactive.expect.md │ │ │ │ │ │ │ ├── lambda-mutated-non-reactive-to-reactive.js │ │ │ │ │ │ │ ├── lambda-mutated-ref-non-reactive.expect.md │ │ │ │ │ │ │ ├── lambda-mutated-ref-non-reactive.js │ │ │ │ │ │ │ ├── lambda-reassign-primitive.expect.md │ │ │ │ │ │ │ ├── lambda-reassign-primitive.js │ │ │ │ │ │ │ ├── lambda-reassign-shadowed-primitive.expect.md │ │ │ │ │ │ │ ├── lambda-reassign-shadowed-primitive.js │ │ │ │ │ │ │ ├── lambda-return-expression.expect.md │ │ │ │ │ │ │ ├── lambda-return-expression.ts │ │ │ │ │ │ │ ├── log-pruned-memoization.expect.md │ │ │ │ │ │ │ ├── log-pruned-memoization.js │ │ │ │ │ │ │ ├── logical-expression-object.expect.md │ │ │ │ │ │ │ ├── logical-expression-object.js │ │ │ │ │ │ │ ├── logical-expression.expect.md │ │ │ │ │ │ │ ├── logical-expression.js │ │ │ │ │ │ │ ├── logical-reorder.flow.expect.md │ │ │ │ │ │ │ ├── logical-reorder.flow.js │ │ │ │ │ │ │ ├── loop-unused-let.expect.md │ │ │ │ │ │ │ ├── loop-unused-let.js │ │ │ │ │ │ │ ├── maybe-mutate-object-in-callback.expect.md │ │ │ │ │ │ │ ├── maybe-mutate-object-in-callback.js │ │ │ │ │ │ │ ├── mege-consecutive-scopes-dont-merge-with-different-deps.expect.md │ │ │ │ │ │ │ ├── mege-consecutive-scopes-dont-merge-with-different-deps.js │ │ │ │ │ │ │ ├── member-inc.expect.md │ │ │ │ │ │ │ ├── member-inc.js │ │ │ │ │ │ │ ├── memoize-primitive-function-calls.expect.md │ │ │ │ │ │ │ ├── memoize-primitive-function-calls.js │ │ │ │ │ │ │ ├── memoize-value-block-value-conditional.expect.md │ │ │ │ │ │ │ ├── memoize-value-block-value-conditional.js │ │ │ │ │ │ │ ├── memoize-value-block-value-logical-no-sequence.expect.md │ │ │ │ │ │ │ ├── memoize-value-block-value-logical-no-sequence.js │ │ │ │ │ │ │ ├── memoize-value-block-value-logical.expect.md │ │ │ │ │ │ │ ├── memoize-value-block-value-logical.js │ │ │ │ │ │ │ ├── memoize-value-block-value-sequence.expect.md │ │ │ │ │ │ │ ├── memoize-value-block-value-sequence.js │ │ │ │ │ │ │ ├── merge-consecutive-nested-scopes.expect.md │ │ │ │ │ │ │ ├── merge-consecutive-nested-scopes.js │ │ │ │ │ │ │ ├── merge-consecutive-scopes-deps-subset-of-decls.expect.md │ │ │ │ │ │ │ ├── merge-consecutive-scopes-deps-subset-of-decls.js │ │ │ │ │ │ │ ├── merge-consecutive-scopes-no-deps.expect.md │ │ │ │ │ │ │ ├── merge-consecutive-scopes-no-deps.js │ │ │ │ │ │ │ ├── merge-consecutive-scopes-objects.expect.md │ │ │ │ │ │ │ ├── merge-consecutive-scopes-objects.js │ │ │ │ │ │ │ ├── merge-consecutive-scopes.expect.md │ │ │ │ │ │ │ ├── merge-consecutive-scopes.js │ │ │ │ │ │ │ ├── merge-nested-scopes-with-same-inputs.expect.md │ │ │ │ │ │ │ ├── merge-nested-scopes-with-same-inputs.js │ │ │ │ │ │ │ ├── meta-isms/ │ │ │ │ │ │ │ │ ├── repro-cx-assigned-to-temporary.expect.md │ │ │ │ │ │ │ │ ├── repro-cx-assigned-to-temporary.js │ │ │ │ │ │ │ │ ├── repro-cx-namespace-assigned-to-temporary.expect.md │ │ │ │ │ │ │ │ ├── repro-cx-namespace-assigned-to-temporary.js │ │ │ │ │ │ │ │ ├── repro-cx-namespace-nesting.expect.md │ │ │ │ │ │ │ │ └── repro-cx-namespace-nesting.js │ │ │ │ │ │ │ ├── meta-property.expect.md │ │ │ │ │ │ │ ├── meta-property.mjs │ │ │ │ │ │ │ ├── method-call-computed.expect.md │ │ │ │ │ │ │ ├── method-call-computed.js │ │ │ │ │ │ │ ├── method-call-fn-call.expect.md │ │ │ │ │ │ │ ├── method-call-fn-call.js │ │ │ │ │ │ │ ├── method-call.expect.md │ │ │ │ │ │ │ ├── method-call.js │ │ │ │ │ │ │ ├── mixedreadonly-mutating-map.expect.md │ │ │ │ │ │ │ ├── mixedreadonly-mutating-map.js │ │ │ │ │ │ │ ├── module-scoped-bindings.expect.md │ │ │ │ │ │ │ ├── module-scoped-bindings.js │ │ │ │ │ │ │ ├── multi-directive.expect.md │ │ │ │ │ │ │ ├── multi-directive.js │ │ │ │ │ │ │ ├── multiple-calls-to-hoisted-callback-from-other-callback.expect.md │ │ │ │ │ │ │ ├── multiple-calls-to-hoisted-callback-from-other-callback.js │ │ │ │ │ │ │ ├── multiple-components-first-is-invalid.expect.md │ │ │ │ │ │ │ ├── multiple-components-first-is-invalid.js │ │ │ │ │ │ │ ├── mutable-lifetime-loops.expect.md │ │ │ │ │ │ │ ├── mutable-lifetime-loops.js │ │ │ │ │ │ │ ├── mutable-lifetime-with-aliasing.expect.md │ │ │ │ │ │ │ ├── mutable-lifetime-with-aliasing.js │ │ │ │ │ │ │ ├── mutable-liverange-loop.expect.md │ │ │ │ │ │ │ ├── mutable-liverange-loop.js │ │ │ │ │ │ │ ├── mutate-captured-arg-separately.expect.md │ │ │ │ │ │ │ ├── mutate-captured-arg-separately.js │ │ │ │ │ │ │ ├── mutate-outer-scope-within-value-block.expect.md │ │ │ │ │ │ │ ├── mutate-outer-scope-within-value-block.ts │ │ │ │ │ │ │ ├── mutation-during-jsx-construction.expect.md │ │ │ │ │ │ │ ├── mutation-during-jsx-construction.js │ │ │ │ │ │ │ ├── mutation-within-capture-and-mutablerange.expect.md │ │ │ │ │ │ │ ├── mutation-within-capture-and-mutablerange.tsx │ │ │ │ │ │ │ ├── mutation-within-jsx-and-break.expect.md │ │ │ │ │ │ │ ├── mutation-within-jsx-and-break.tsx │ │ │ │ │ │ │ ├── mutation-within-jsx.expect.md │ │ │ │ │ │ │ ├── mutation-within-jsx.tsx │ │ │ │ │ │ │ ├── name-anonymous-functions-outline.expect.md │ │ │ │ │ │ │ ├── name-anonymous-functions-outline.js │ │ │ │ │ │ │ ├── name-anonymous-functions.expect.md │ │ │ │ │ │ │ ├── name-anonymous-functions.js │ │ │ │ │ │ │ ├── nested-function-shadowed-identifiers.expect.md │ │ │ │ │ │ │ ├── nested-function-shadowed-identifiers.js │ │ │ │ │ │ │ ├── nested-function-with-param-as-captured-dep.expect.md │ │ │ │ │ │ │ ├── nested-function-with-param-as-captured-dep.ts │ │ │ │ │ │ │ ├── nested-optional-chains.expect.md │ │ │ │ │ │ │ ├── nested-optional-chains.ts │ │ │ │ │ │ │ ├── nested-optional-member-expr.expect.md │ │ │ │ │ │ │ ├── nested-optional-member-expr.js │ │ │ │ │ │ │ ├── nested-scopes-begin-same-instr-valueblock.expect.md │ │ │ │ │ │ │ ├── nested-scopes-begin-same-instr-valueblock.ts │ │ │ │ │ │ │ ├── nested-scopes-hook-call.expect.md │ │ │ │ │ │ │ ├── nested-scopes-hook-call.js │ │ │ │ │ │ │ ├── new-does-not-mutate-class.expect.md │ │ │ │ │ │ │ ├── new-does-not-mutate-class.ts │ │ │ │ │ │ │ ├── new-mutability/ │ │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.expect.md │ │ │ │ │ │ │ │ ├── aliased-nested-scope-truncated-dep.tsx │ │ │ │ │ │ │ │ ├── array-filter.expect.md │ │ │ │ │ │ │ │ ├── array-filter.js │ │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.expect.md │ │ │ │ │ │ │ │ ├── array-map-captures-receiver-noAlias.js │ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.expect.md │ │ │ │ │ │ │ │ ├── array-map-named-callback-cross-context.js │ │ │ │ │ │ │ │ ├── array-push.expect.md │ │ │ │ │ │ │ │ ├── array-push.js │ │ │ │ │ │ │ │ ├── basic-mutation-via-function-expression.expect.md │ │ │ │ │ │ │ │ ├── basic-mutation-via-function-expression.js │ │ │ │ │ │ │ │ ├── basic-mutation.expect.md │ │ │ │ │ │ │ │ ├── basic-mutation.js │ │ │ │ │ │ │ │ ├── capture-backedge-phi-with-later-mutation.expect.md │ │ │ │ │ │ │ │ ├── capture-backedge-phi-with-later-mutation.js │ │ │ │ │ │ │ │ ├── capture-in-function-expression-indirect.expect.md │ │ │ │ │ │ │ │ ├── capture-in-function-expression-indirect.js │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.expect.md │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-2-iife.js │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.expect.md │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-3-iife.js │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.expect.md │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-4-iife.js │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.expect.md │ │ │ │ │ │ │ │ ├── capturing-function-alias-computed-load-iife.js │ │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-impure-functions-in-render.js │ │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-reassign-local-variable-in-jsx-callback.js │ │ │ │ │ │ │ │ ├── error.invalid-referencing-frozen-hoisted-storecontext-const.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-referencing-frozen-hoisted-storecontext-const.js │ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.js │ │ │ │ │ │ │ │ ├── error.mutate-frozen-value.expect.md │ │ │ │ │ │ │ │ ├── error.mutate-frozen-value.js │ │ │ │ │ │ │ │ ├── error.mutate-hook-argument.expect.md │ │ │ │ │ │ │ │ ├── error.mutate-hook-argument.js │ │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.expect.md │ │ │ │ │ │ │ │ ├── error.not-useEffect-external-mutate.js │ │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.expect.md │ │ │ │ │ │ │ │ ├── error.reassignment-to-global-indirect.js │ │ │ │ │ │ │ │ ├── error.reassignment-to-global.expect.md │ │ │ │ │ │ │ │ ├── error.reassignment-to-global.js │ │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.expect.md │ │ │ │ │ │ │ │ ├── error.todo-repro-named-function-with-shadowed-local-same-name.js │ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md │ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections-2.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections-2.js │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-function-call-indirections.js │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-indirections.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-boxing-unboxing-indirections.js │ │ │ │ │ │ │ │ ├── mutate-through-identity-function-expression.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-identity-function-expression.js │ │ │ │ │ │ │ │ ├── mutate-through-identity.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-identity.js │ │ │ │ │ │ │ │ ├── mutate-through-propertyload.expect.md │ │ │ │ │ │ │ │ ├── mutate-through-propertyload.js │ │ │ │ │ │ │ │ ├── nullable-objects-assume-invoked-direct-call.expect.md │ │ │ │ │ │ │ │ ├── nullable-objects-assume-invoked-direct-call.js │ │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.expect.md │ │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.js │ │ │ │ │ │ │ │ ├── object-expression-computed-member.expect.md │ │ │ │ │ │ │ │ ├── object-expression-computed-member.js │ │ │ │ │ │ │ │ ├── potential-mutation-in-function-expression.expect.md │ │ │ │ │ │ │ │ ├── potential-mutation-in-function-expression.js │ │ │ │ │ │ │ │ ├── reactive-ref.expect.md │ │ │ │ │ │ │ │ ├── reactive-ref.js │ │ │ │ │ │ │ │ ├── repro-compiler-infinite-loop.expect.md │ │ │ │ │ │ │ │ ├── repro-compiler-infinite-loop.js │ │ │ │ │ │ │ │ ├── repro-destructure-from-prop-with-default-value.expect.md │ │ │ │ │ │ │ │ ├── repro-destructure-from-prop-with-default-value.js │ │ │ │ │ │ │ │ ├── repro-function-expression-effects-stack-overflow.expect.md │ │ │ │ │ │ │ │ ├── repro-function-expression-effects-stack-overflow.js │ │ │ │ │ │ │ │ ├── repro-internal-compiler-shared-mutablerange-bug.expect.md │ │ │ │ │ │ │ │ ├── repro-internal-compiler-shared-mutablerange-bug.js │ │ │ │ │ │ │ │ ├── repro-invalid-function-expression-effects-phi.expect.md │ │ │ │ │ │ │ │ ├── repro-invalid-function-expression-effects-phi.js │ │ │ │ │ │ │ │ ├── repro-jsx-captures-value-mutated-later.expect.md │ │ │ │ │ │ │ │ ├── repro-jsx-captures-value-mutated-later.js │ │ │ │ │ │ │ │ ├── repro-mutate-new-set-of-frozen-items-in-callback.expect.md │ │ │ │ │ │ │ │ ├── repro-mutate-new-set-of-frozen-items-in-callback.js │ │ │ │ │ │ │ │ ├── set-add-mutate.expect.md │ │ │ │ │ │ │ │ ├── set-add-mutate.js │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.js │ │ │ │ │ │ │ │ ├── todo-control-flow-sensitive-mutation.expect.md │ │ │ │ │ │ │ │ ├── todo-control-flow-sensitive-mutation.tsx │ │ │ │ │ │ │ │ ├── todo-transitivity-createfrom-capture-lambda.expect.md │ │ │ │ │ │ │ │ ├── todo-transitivity-createfrom-capture-lambda.tsx │ │ │ │ │ │ │ │ ├── transitive-mutation-before-capturing-value-created-earlier.expect.md │ │ │ │ │ │ │ │ ├── transitive-mutation-before-capturing-value-created-earlier.js │ │ │ │ │ │ │ │ ├── transitivity-add-captured-array-to-itself.expect.md │ │ │ │ │ │ │ │ ├── transitivity-add-captured-array-to-itself.tsx │ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom-lambda.expect.md │ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom-lambda.tsx │ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom.expect.md │ │ │ │ │ │ │ │ ├── transitivity-capture-createfrom.tsx │ │ │ │ │ │ │ │ ├── transitivity-createfrom-capture.expect.md │ │ │ │ │ │ │ │ ├── transitivity-createfrom-capture.tsx │ │ │ │ │ │ │ │ ├── transitivity-phi-assign-or-capture.expect.md │ │ │ │ │ │ │ │ ├── transitivity-phi-assign-or-capture.tsx │ │ │ │ │ │ │ │ ├── typed-identity-function-frozen-input.expect.md │ │ │ │ │ │ │ │ ├── typed-identity-function-frozen-input.js │ │ │ │ │ │ │ │ ├── typed-identity-function-mutable-input.expect.md │ │ │ │ │ │ │ │ ├── typed-identity-function-mutable-input.js │ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.expect.md │ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.tsx │ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.expect.md │ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.tsx │ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.expect.md │ │ │ │ │ │ │ │ └── useMemo-reordering-depslist-assignment.ts │ │ │ │ │ │ │ ├── new-spread.expect.md │ │ │ │ │ │ │ ├── new-spread.js │ │ │ │ │ │ │ ├── no-flow-bailout-unrelated.expect.md │ │ │ │ │ │ │ ├── no-flow-bailout-unrelated.js │ │ │ │ │ │ │ ├── noAlias-filter-on-array-prop.expect.md │ │ │ │ │ │ │ ├── noAlias-filter-on-array-prop.js │ │ │ │ │ │ │ ├── non-null-assertion.expect.md │ │ │ │ │ │ │ ├── non-null-assertion.ts │ │ │ │ │ │ │ ├── nonmutated-spread-hook-return.expect.md │ │ │ │ │ │ │ ├── nonmutated-spread-hook-return.js │ │ │ │ │ │ │ ├── nonmutated-spread-props-jsx.expect.md │ │ │ │ │ │ │ ├── nonmutated-spread-props-jsx.js │ │ │ │ │ │ │ ├── nonmutated-spread-props-local-indirection.expect.md │ │ │ │ │ │ │ ├── nonmutated-spread-props-local-indirection.js │ │ │ │ │ │ │ ├── nonmutated-spread-props.expect.md │ │ │ │ │ │ │ ├── nonmutated-spread-props.js │ │ │ │ │ │ │ ├── nonmutating-capture-in-unsplittable-memo-block.expect.md │ │ │ │ │ │ │ ├── nonmutating-capture-in-unsplittable-memo-block.ts │ │ │ │ │ │ │ ├── nonoptional-load-from-optional-memberexpr.expect.md │ │ │ │ │ │ │ ├── nonoptional-load-from-optional-memberexpr.js │ │ │ │ │ │ │ ├── nonreactive-noescaping-dependency-can-inline-into-consuming-scope.expect.md │ │ │ │ │ │ │ ├── nonreactive-noescaping-dependency-can-inline-into-consuming-scope.js │ │ │ │ │ │ │ ├── numeric-literal-as-object-property-key.expect.md │ │ │ │ │ │ │ ├── numeric-literal-as-object-property-key.js │ │ │ │ │ │ │ ├── obj-literal-cached-in-if-else.expect.md │ │ │ │ │ │ │ ├── obj-literal-cached-in-if-else.js │ │ │ │ │ │ │ ├── obj-literal-mutated-after-if-else.expect.md │ │ │ │ │ │ │ ├── obj-literal-mutated-after-if-else.js │ │ │ │ │ │ │ ├── obj-mutated-after-if-else-with-alias.expect.md │ │ │ │ │ │ │ ├── obj-mutated-after-if-else-with-alias.js │ │ │ │ │ │ │ ├── obj-mutated-after-if-else.expect.md │ │ │ │ │ │ │ ├── obj-mutated-after-if-else.js │ │ │ │ │ │ │ ├── obj-mutated-after-nested-if-else-with-alias.expect.md │ │ │ │ │ │ │ ├── obj-mutated-after-nested-if-else-with-alias.js │ │ │ │ │ │ │ ├── object-access-assignment.expect.md │ │ │ │ │ │ │ ├── object-access-assignment.js │ │ │ │ │ │ │ ├── object-computed-access-assignment.expect.md │ │ │ │ │ │ │ ├── object-computed-access-assignment.js │ │ │ │ │ │ │ ├── object-entries-mutation.expect.md │ │ │ │ │ │ │ ├── object-entries-mutation.js │ │ │ │ │ │ │ ├── object-expression-captures-function-with-global-mutation.expect.md │ │ │ │ │ │ │ ├── object-expression-captures-function-with-global-mutation.js │ │ │ │ │ │ │ ├── object-expression-computed-key-constant-number.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-constant-number.js │ │ │ │ │ │ │ ├── object-expression-computed-key-constant-string.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-constant-string.js │ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction-sequence-expr.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction-sequence-expr.js │ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-modified-during-after-construction.js │ │ │ │ │ │ │ ├── object-expression-computed-key-mutate-key-while-constructing-object.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-mutate-key-while-constructing-object.js │ │ │ │ │ │ │ ├── object-expression-computed-key-non-reactive.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-non-reactive.js │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key-object-mutated-later.js │ │ │ │ │ │ │ ├── object-expression-computed-key.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-key.js │ │ │ │ │ │ │ ├── object-expression-computed-member.expect.md │ │ │ │ │ │ │ ├── object-expression-computed-member.js │ │ │ │ │ │ │ ├── object-expression-member-expr-call.expect.md │ │ │ │ │ │ │ ├── object-expression-member-expr-call.js │ │ │ │ │ │ │ ├── object-expression-string-literal-key.expect.md │ │ │ │ │ │ │ ├── object-expression-string-literal-key.js │ │ │ │ │ │ │ ├── object-keys.expect.md │ │ │ │ │ │ │ ├── object-keys.js │ │ │ │ │ │ │ ├── object-literal-method-call-in-ternary-test.expect.md │ │ │ │ │ │ │ ├── object-literal-method-call-in-ternary-test.js │ │ │ │ │ │ │ ├── object-literal-method-derived-in-ternary-consequent.expect.md │ │ │ │ │ │ │ ├── object-literal-method-derived-in-ternary-consequent.js │ │ │ │ │ │ │ ├── object-literal-method-in-ternary-consequent.expect.md │ │ │ │ │ │ │ ├── object-literal-method-in-ternary-consequent.js │ │ │ │ │ │ │ ├── object-literal-method-in-ternary-test.expect.md │ │ │ │ │ │ │ ├── object-literal-method-in-ternary-test.js │ │ │ │ │ │ │ ├── object-literal-spread-element.expect.md │ │ │ │ │ │ │ ├── object-literal-spread-element.js │ │ │ │ │ │ │ ├── object-method-maybe-alias.expect.md │ │ │ │ │ │ │ ├── object-method-maybe-alias.js │ │ │ │ │ │ │ ├── object-method-shorthand-3.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand-3.js │ │ │ │ │ │ │ ├── object-method-shorthand-aliased-mutate-after.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand-aliased-mutate-after.js │ │ │ │ │ │ │ ├── object-method-shorthand-derived-value.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand-derived-value.js │ │ │ │ │ │ │ ├── object-method-shorthand-hook-dep.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand-hook-dep.js │ │ │ │ │ │ │ ├── object-method-shorthand-mutated-after.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand-mutated-after.js │ │ │ │ │ │ │ ├── object-method-shorthand.expect.md │ │ │ │ │ │ │ ├── object-method-shorthand.js │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.expect.md │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.js │ │ │ │ │ │ │ ├── object-pattern-params.expect.md │ │ │ │ │ │ │ ├── object-pattern-params.js │ │ │ │ │ │ │ ├── object-properties.expect.md │ │ │ │ │ │ │ ├── object-properties.js │ │ │ │ │ │ │ ├── object-shorthand-method-1.expect.md │ │ │ │ │ │ │ ├── object-shorthand-method-1.js │ │ │ │ │ │ │ ├── object-shorthand-method-2.expect.md │ │ │ │ │ │ │ ├── object-shorthand-method-2.js │ │ │ │ │ │ │ ├── object-shorthand-method-nested.expect.md │ │ │ │ │ │ │ ├── object-shorthand-method-nested.js │ │ │ │ │ │ │ ├── object-values-mutation.expect.md │ │ │ │ │ │ │ ├── object-values-mutation.js │ │ │ │ │ │ │ ├── object-values.expect.md │ │ │ │ │ │ │ ├── object-values.js │ │ │ │ │ │ │ ├── optional-call-chain-in-logical-expr.expect.md │ │ │ │ │ │ │ ├── optional-call-chain-in-logical-expr.ts │ │ │ │ │ │ │ ├── optional-call-chain-in-ternary.expect.md │ │ │ │ │ │ │ ├── optional-call-chain-in-ternary.ts │ │ │ │ │ │ │ ├── optional-call-chained.expect.md │ │ │ │ │ │ │ ├── optional-call-chained.js │ │ │ │ │ │ │ ├── optional-call-logical.expect.md │ │ │ │ │ │ │ ├── optional-call-logical.js │ │ │ │ │ │ │ ├── optional-call-simple.expect.md │ │ │ │ │ │ │ ├── optional-call-simple.js │ │ │ │ │ │ │ ├── optional-call-with-independently-memoizable-arg.expect.md │ │ │ │ │ │ │ ├── optional-call-with-independently-memoizable-arg.js │ │ │ │ │ │ │ ├── optional-call-with-optional-property-load.expect.md │ │ │ │ │ │ │ ├── optional-call-with-optional-property-load.js │ │ │ │ │ │ │ ├── optional-call.expect.md │ │ │ │ │ │ │ ├── optional-call.js │ │ │ │ │ │ │ ├── optional-computed-load-static.expect.md │ │ │ │ │ │ │ ├── optional-computed-load-static.js │ │ │ │ │ │ │ ├── optional-computed-member-expression.expect.md │ │ │ │ │ │ │ ├── optional-computed-member-expression.js │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.js │ │ │ │ │ │ │ ├── optional-member-expression-call-as-property.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-call-as-property.js │ │ │ │ │ │ │ ├── optional-member-expression-chain.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-chain.js │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.js │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.js │ │ │ │ │ │ │ ├── optional-member-expression-single.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-single.js │ │ │ │ │ │ │ ├── optional-member-expression-with-optional-member-expr-as-property.expect.md │ │ │ │ │ │ │ ├── optional-member-expression-with-optional-member-expr-as-property.js │ │ │ │ │ │ │ ├── optional-member-expression.expect.md │ │ │ │ │ │ │ ├── optional-member-expression.js │ │ │ │ │ │ │ ├── optional-method-call.expect.md │ │ │ │ │ │ │ ├── optional-method-call.js │ │ │ │ │ │ │ ├── optional-receiver-method-call.expect.md │ │ │ │ │ │ │ ├── optional-receiver-method-call.js │ │ │ │ │ │ │ ├── optional-receiver-optional-method.expect.md │ │ │ │ │ │ │ ├── optional-receiver-optional-method.js │ │ │ │ │ │ │ ├── original-reactive-scopes-fork/ │ │ │ │ │ │ │ │ ├── capture-ref-for-later-mutation.expect.md │ │ │ │ │ │ │ │ └── capture-ref-for-later-mutation.tsx │ │ │ │ │ │ │ ├── outlined-destructured-params.expect.md │ │ │ │ │ │ │ ├── outlined-destructured-params.js │ │ │ │ │ │ │ ├── outlined-helper.expect.md │ │ │ │ │ │ │ ├── outlined-helper.js │ │ │ │ │ │ │ ├── outlining-in-func-expr.expect.md │ │ │ │ │ │ │ ├── outlining-in-func-expr.js │ │ │ │ │ │ │ ├── outlining-in-react-memo.expect.md │ │ │ │ │ │ │ ├── outlining-in-react-memo.js │ │ │ │ │ │ │ ├── overlapping-scopes-interleaved-by-terminal.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-interleaved-by-terminal.js │ │ │ │ │ │ │ ├── overlapping-scopes-interleaved.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-interleaved.js │ │ │ │ │ │ │ ├── overlapping-scopes-shadowed.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-shadowed.js │ │ │ │ │ │ │ ├── overlapping-scopes-shadowing-within-block.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-shadowing-within-block.js │ │ │ │ │ │ │ ├── overlapping-scopes-while.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-while.js │ │ │ │ │ │ │ ├── overlapping-scopes-within-block.expect.md │ │ │ │ │ │ │ ├── overlapping-scopes-within-block.js │ │ │ │ │ │ │ ├── panresponder-ref-in-callback.expect.md │ │ │ │ │ │ │ ├── panresponder-ref-in-callback.js │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.js │ │ │ │ │ │ │ ├── phi-reference-effects.expect.md │ │ │ │ │ │ │ ├── phi-reference-effects.ts │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.expect.md │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.js │ │ │ │ │ │ │ ├── phi-type-inference-array-push.expect.md │ │ │ │ │ │ │ ├── phi-type-inference-array-push.js │ │ │ │ │ │ │ ├── phi-type-inference-property-store.expect.md │ │ │ │ │ │ │ ├── phi-type-inference-property-store.js │ │ │ │ │ │ │ ├── preserve-existing-memoization-guarantees/ │ │ │ │ │ │ │ │ ├── lambda-with-fbt-preserve-memoization.expect.md │ │ │ │ │ │ │ │ └── lambda-with-fbt-preserve-memoization.js │ │ │ │ │ │ │ ├── preserve-jsxtext-stringliteral-distinction.expect.md │ │ │ │ │ │ │ ├── preserve-jsxtext-stringliteral-distinction.js │ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain-less-precise-deps.expect.md │ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain-less-precise-deps.js │ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain.expect.md │ │ │ │ │ │ │ ├── preserve-memo-deps-conditional-property-chain.js │ │ │ │ │ │ │ ├── preserve-memo-deps-optional-property-chain.expect.md │ │ │ │ │ │ │ ├── preserve-memo-deps-optional-property-chain.js │ │ │ │ │ │ │ ├── preserve-memo-validation/ │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-dropped-infer-always-invalidating.expect.md │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-dropped-infer-always-invalidating.ts │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-infer-mutate-deps.expect.md │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-infer-mutate-deps.ts │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-overlap-scopes.expect.md │ │ │ │ │ │ │ │ ├── error.false-positive-useMemo-overlap-scopes.ts │ │ │ │ │ │ │ │ ├── error.hoist-useCallback-conditional-access-own-scope.expect.md │ │ │ │ │ │ │ │ ├── error.hoist-useCallback-conditional-access-own-scope.ts │ │ │ │ │ │ │ │ ├── error.hoist-useCallback-infer-conditional-value-block.expect.md │ │ │ │ │ │ │ │ ├── error.hoist-useCallback-infer-conditional-value-block.ts │ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.expect.md │ │ │ │ │ │ │ │ ├── error.invalid-useCallback-captures-reassigned-context.ts │ │ │ │ │ │ │ │ ├── error.maybe-mutable-ref-not-preserved.expect.md │ │ │ │ │ │ │ │ ├── error.maybe-mutable-ref-not-preserved.ts │ │ │ │ │ │ │ │ ├── error.preserve-use-memo-ref-missing-reactive.expect.md │ │ │ │ │ │ │ │ ├── error.preserve-use-memo-ref-missing-reactive.ts │ │ │ │ │ │ │ │ ├── error.todo-useCallback-captures-invalidating-value.expect.md │ │ │ │ │ │ │ │ ├── error.todo-useCallback-captures-invalidating-value.ts │ │ │ │ │ │ │ │ ├── error.useCallback-aliased-var.expect.md │ │ │ │ │ │ │ │ ├── error.useCallback-aliased-var.ts │ │ │ │ │ │ │ │ ├── error.useCallback-conditional-access-noAlloc.expect.md │ │ │ │ │ │ │ │ ├── error.useCallback-conditional-access-noAlloc.ts │ │ │ │ │ │ │ │ ├── error.useCallback-infer-less-specific-conditional-access.expect.md │ │ │ │ │ │ │ │ ├── error.useCallback-infer-less-specific-conditional-access.ts │ │ │ │ │ │ │ │ ├── error.useCallback-property-call-dep.expect.md │ │ │ │ │ │ │ │ ├── error.useCallback-property-call-dep.ts │ │ │ │ │ │ │ │ ├── error.useMemo-aliased-var.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-aliased-var.ts │ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-access.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-access.ts │ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-value-block.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-infer-less-specific-conditional-value-block.ts │ │ │ │ │ │ │ │ ├── error.useMemo-property-call-chained-object.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-property-call-chained-object.ts │ │ │ │ │ │ │ │ ├── error.useMemo-property-call-dep.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-property-call-dep.ts │ │ │ │ │ │ │ │ ├── error.useMemo-unrelated-mutation-in-depslist.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-unrelated-mutation-in-depslist.ts │ │ │ │ │ │ │ │ ├── error.useMemo-with-refs.flow.expect.md │ │ │ │ │ │ │ │ ├── error.useMemo-with-refs.flow.js │ │ │ │ │ │ │ │ ├── error.validate-useMemo-named-function.expect.md │ │ │ │ │ │ │ │ ├── error.validate-useMemo-named-function.js │ │ │ │ │ │ │ │ ├── maybe-invalid-useMemo-no-memoblock-sideeffect.expect.md │ │ │ │ │ │ │ │ ├── maybe-invalid-useMemo-no-memoblock-sideeffect.ts │ │ │ │ │ │ │ │ ├── preserve-use-callback-stable-built-ins.expect.md │ │ │ │ │ │ │ │ ├── preserve-use-callback-stable-built-ins.ts │ │ │ │ │ │ │ │ ├── preserve-use-memo-ref-missing-ok.expect.md │ │ │ │ │ │ │ │ ├── preserve-use-memo-ref-missing-ok.ts │ │ │ │ │ │ │ │ ├── preserve-use-memo-transition.expect.md │ │ │ │ │ │ │ │ ├── preserve-use-memo-transition.ts │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns-primitive.expect.md │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns-primitive.ts │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns.expect.md │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo-mult-returns.ts │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo.expect.md │ │ │ │ │ │ │ │ ├── prune-nonescaping-useMemo.ts │ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useCallback-read-maybeRef.expect.md │ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useCallback-read-maybeRef.ts │ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useMemo-read-maybeRef.expect.md │ │ │ │ │ │ │ │ ├── repro-maybe-invalid-useMemo-read-maybeRef.ts │ │ │ │ │ │ │ │ ├── todo-ensure-constant-prop-decls-get-removed.expect.md │ │ │ │ │ │ │ │ ├── todo-ensure-constant-prop-decls-get-removed.ts │ │ │ │ │ │ │ │ ├── useCallback-alias-property-load-dep.expect.md │ │ │ │ │ │ │ │ ├── useCallback-alias-property-load-dep.ts │ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context-property.expect.md │ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context-property.tsx │ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context.expect.md │ │ │ │ │ │ │ │ ├── useCallback-captures-reassigned-context.ts │ │ │ │ │ │ │ │ ├── useCallback-dep-scope-pruned.expect.md │ │ │ │ │ │ │ │ ├── useCallback-dep-scope-pruned.ts │ │ │ │ │ │ │ │ ├── useCallback-extended-contextvar-scope.expect.md │ │ │ │ │ │ │ │ ├── useCallback-extended-contextvar-scope.tsx │ │ │ │ │ │ │ │ ├── useCallback-in-other-reactive-block.expect.md │ │ │ │ │ │ │ │ ├── useCallback-in-other-reactive-block.ts │ │ │ │ │ │ │ │ ├── useCallback-infer-fewer-deps.expect.md │ │ │ │ │ │ │ │ ├── useCallback-infer-fewer-deps.ts │ │ │ │ │ │ │ │ ├── useCallback-infer-more-specific.expect.md │ │ │ │ │ │ │ │ ├── useCallback-infer-more-specific.ts │ │ │ │ │ │ │ │ ├── useCallback-infer-read-dep.expect.md │ │ │ │ │ │ │ │ ├── useCallback-infer-read-dep.ts │ │ │ │ │ │ │ │ ├── useCallback-infer-scope-global.expect.md │ │ │ │ │ │ │ │ ├── useCallback-infer-scope-global.ts │ │ │ │ │ │ │ │ ├── useCallback-nonescaping-invoked-callback-escaping-return.expect.md │ │ │ │ │ │ │ │ ├── useCallback-nonescaping-invoked-callback-escaping-return.js │ │ │ │ │ │ │ │ ├── useCallback-nonescaping.expect.md │ │ │ │ │ │ │ │ ├── useCallback-nonescaping.js │ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.expect.md │ │ │ │ │ │ │ │ ├── useCallback-reordering-deplist-controlflow.tsx │ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.expect.md │ │ │ │ │ │ │ │ ├── useCallback-reordering-depslist-assignment.tsx │ │ │ │ │ │ │ │ ├── useCallback-with-no-depslist.expect.md │ │ │ │ │ │ │ │ ├── useCallback-with-no-depslist.ts │ │ │ │ │ │ │ │ ├── useMemo-alias-property-load-dep.expect.md │ │ │ │ │ │ │ │ ├── useMemo-alias-property-load-dep.ts │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-alloc.expect.md │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-alloc.ts │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-noAlloc.expect.md │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-noAlloc.ts │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-own-scope.expect.md │ │ │ │ │ │ │ │ ├── useMemo-conditional-access-own-scope.ts │ │ │ │ │ │ │ │ ├── useMemo-constant-prop.expect.md │ │ │ │ │ │ │ │ ├── useMemo-constant-prop.ts │ │ │ │ │ │ │ │ ├── useMemo-dep-array-literal-access.expect.md │ │ │ │ │ │ │ │ ├── useMemo-dep-array-literal-access.ts │ │ │ │ │ │ │ │ ├── useMemo-in-other-reactive-block.expect.md │ │ │ │ │ │ │ │ ├── useMemo-in-other-reactive-block.ts │ │ │ │ │ │ │ │ ├── useMemo-infer-fewer-deps.expect.md │ │ │ │ │ │ │ │ ├── useMemo-infer-fewer-deps.ts │ │ │ │ │ │ │ │ ├── useMemo-infer-more-specific.expect.md │ │ │ │ │ │ │ │ ├── useMemo-infer-more-specific.ts │ │ │ │ │ │ │ │ ├── useMemo-infer-nonallocating.expect.md │ │ │ │ │ │ │ │ ├── useMemo-infer-nonallocating.ts │ │ │ │ │ │ │ │ ├── useMemo-infer-scope-global.expect.md │ │ │ │ │ │ │ │ ├── useMemo-infer-scope-global.ts │ │ │ │ │ │ │ │ ├── useMemo-inner-decl.expect.md │ │ │ │ │ │ │ │ ├── useMemo-inner-decl.ts │ │ │ │ │ │ │ │ ├── useMemo-invoke-prop.expect.md │ │ │ │ │ │ │ │ ├── useMemo-invoke-prop.ts │ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.expect.md │ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-assignment.ts │ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-controlflow.expect.md │ │ │ │ │ │ │ │ ├── useMemo-reordering-depslist-controlflow.tsx │ │ │ │ │ │ │ │ ├── useMemo-with-no-depslist.expect.md │ │ │ │ │ │ │ │ └── useMemo-with-no-depslist.ts │ │ │ │ │ │ │ ├── preserve-use-memo-transition-no-ispending.expect.md │ │ │ │ │ │ │ ├── preserve-use-memo-transition-no-ispending.js │ │ │ │ │ │ │ ├── preserve-use-memo-unused-state.expect.md │ │ │ │ │ │ │ ├── preserve-use-memo-unused-state.js │ │ │ │ │ │ │ ├── primitive-alias-mutate.expect.md │ │ │ │ │ │ │ ├── primitive-alias-mutate.js │ │ │ │ │ │ │ ├── primitive-as-dep-nested-scope.expect.md │ │ │ │ │ │ │ ├── primitive-as-dep-nested-scope.js │ │ │ │ │ │ │ ├── primitive-as-dep.expect.md │ │ │ │ │ │ │ ├── primitive-as-dep.js │ │ │ │ │ │ │ ├── primitive-reassigned-loop-force-scopes-enabled.expect.md │ │ │ │ │ │ │ ├── primitive-reassigned-loop-force-scopes-enabled.js │ │ │ │ │ │ │ ├── prop-capturing-function-1.expect.md │ │ │ │ │ │ │ ├── prop-capturing-function-1.js │ │ │ │ │ │ │ ├── propagate-scope-deps-hir-fork/ │ │ │ │ │ │ │ │ ├── conditional-break-labeled.expect.md │ │ │ │ │ │ │ │ ├── conditional-break-labeled.js │ │ │ │ │ │ │ │ ├── conditional-early-return.expect.md │ │ │ │ │ │ │ │ ├── conditional-early-return.js │ │ │ │ │ │ │ │ ├── conditional-on-mutable.expect.md │ │ │ │ │ │ │ │ ├── conditional-on-mutable.js │ │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ │ ├── early-return-nested-early-return-within-reactive-scope.js │ │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ │ ├── early-return-within-reactive-scope.js │ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional-optional.expect.md │ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional-optional.js │ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional.expect.md │ │ │ │ │ │ │ │ ├── error.todo-optional-member-expression-with-conditional.js │ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.expect.md │ │ │ │ │ │ │ │ ├── iife-return-modified-later-phi.js │ │ │ │ │ │ │ │ ├── infer-component-props-non-null.expect.md │ │ │ │ │ │ │ │ ├── infer-component-props-non-null.tsx │ │ │ │ │ │ │ │ ├── infer-non-null-destructure.expect.md │ │ │ │ │ │ │ │ ├── infer-non-null-destructure.ts │ │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.expect.md │ │ │ │ │ │ │ │ ├── infer-sequential-optional-chain-nonnull.ts │ │ │ │ │ │ │ │ ├── nested-optional-chains.expect.md │ │ │ │ │ │ │ │ ├── nested-optional-chains.ts │ │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.expect.md │ │ │ │ │ │ │ │ ├── object-mutated-in-consequent-alternate-both-return.js │ │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.expect.md │ │ │ │ │ │ │ │ ├── optional-member-expression-as-memo-dep.js │ │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.expect.md │ │ │ │ │ │ │ │ ├── optional-member-expression-inverted-optionals-parallel-paths.js │ │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.expect.md │ │ │ │ │ │ │ │ ├── optional-member-expression-single-with-unconditional.js │ │ │ │ │ │ │ │ ├── optional-member-expression-single.expect.md │ │ │ │ │ │ │ │ ├── optional-member-expression-single.js │ │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.expect.md │ │ │ │ │ │ │ │ ├── partial-early-return-within-reactive-scope.js │ │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.expect.md │ │ │ │ │ │ │ │ ├── phi-type-inference-array-push-consecutive-phis.js │ │ │ │ │ │ │ │ ├── phi-type-inference-array-push.expect.md │ │ │ │ │ │ │ │ ├── phi-type-inference-array-push.js │ │ │ │ │ │ │ │ ├── phi-type-inference-property-store.expect.md │ │ │ │ │ │ │ │ ├── phi-type-inference-property-store.js │ │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md │ │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.js │ │ │ │ │ │ │ │ ├── reduce-reactive-deps/ │ │ │ │ │ │ │ │ │ ├── conditional-member-expr.expect.md │ │ │ │ │ │ │ │ │ ├── conditional-member-expr.js │ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-local-var.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-local-var.tsx │ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-not-hoisted.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-cond-access-not-hoisted.tsx │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoisted.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoisted.tsx │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoists-other-dep.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-hoists-other-dep.tsx │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-local-var.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-access-local-var.tsx │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-optional-hoists-other-dep.expect.md │ │ │ │ │ │ │ │ │ ├── infer-function-uncond-optional-hoists-other-dep.tsx │ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access-local-var.expect.md │ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access-local-var.tsx │ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access.expect.md │ │ │ │ │ │ │ │ │ ├── infer-nested-function-uncond-access.tsx │ │ │ │ │ │ │ │ │ ├── infer-object-method-uncond-access.expect.md │ │ │ │ │ │ │ │ │ ├── infer-object-method-uncond-access.tsx │ │ │ │ │ │ │ │ │ ├── infer-objectmethod-cond-access.expect.md │ │ │ │ │ │ │ │ │ ├── infer-objectmethod-cond-access.js │ │ │ │ │ │ │ │ │ ├── join-uncond-scopes-cond-deps.expect.md │ │ │ │ │ │ │ │ │ ├── join-uncond-scopes-cond-deps.js │ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain.expect.md │ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain.ts │ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain2.expect.md │ │ │ │ │ │ │ │ │ ├── memberexpr-join-optional-chain2.ts │ │ │ │ │ │ │ │ │ ├── merge-uncond-optional-chain-and-cond.expect.md │ │ │ │ │ │ │ │ │ ├── merge-uncond-optional-chain-and-cond.ts │ │ │ │ │ │ │ │ │ ├── promote-uncond.expect.md │ │ │ │ │ │ │ │ │ ├── promote-uncond.js │ │ │ │ │ │ │ │ │ ├── todo-infer-function-uncond-optionals-hoisted.expect.md │ │ │ │ │ │ │ │ │ └── todo-infer-function-uncond-optionals-hoisted.tsx │ │ │ │ │ │ │ │ ├── repro-invariant.expect.md │ │ │ │ │ │ │ │ ├── repro-invariant.tsx │ │ │ │ │ │ │ │ ├── repro-scope-missing-mutable-range.expect.md │ │ │ │ │ │ │ │ ├── repro-scope-missing-mutable-range.js │ │ │ │ │ │ │ │ ├── ssa-cascading-eliminated-phis.expect.md │ │ │ │ │ │ │ │ ├── ssa-cascading-eliminated-phis.js │ │ │ │ │ │ │ │ ├── ssa-leave-case.expect.md │ │ │ │ │ │ │ │ ├── ssa-leave-case.js │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction-with-mutation.js │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-destruction.js │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary-with-mutation.js │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-ternary.js │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary-with-mutation.js │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-ternary.js │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-unconditional-with-mutation.js │ │ │ │ │ │ │ │ ├── ssa-renaming-via-destructuring-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-via-destructuring-with-mutation.js │ │ │ │ │ │ │ │ ├── ssa-renaming-with-mutation.expect.md │ │ │ │ │ │ │ │ ├── ssa-renaming-with-mutation.js │ │ │ │ │ │ │ │ ├── switch-non-final-default.expect.md │ │ │ │ │ │ │ │ ├── switch-non-final-default.js │ │ │ │ │ │ │ │ ├── switch.expect.md │ │ │ │ │ │ │ │ ├── switch.js │ │ │ │ │ │ │ │ ├── todo-optional-call-chain-in-optional.expect.md │ │ │ │ │ │ │ │ ├── todo-optional-call-chain-in-optional.ts │ │ │ │ │ │ │ │ ├── try-catch-maybe-null-dependency.expect.md │ │ │ │ │ │ │ │ ├── try-catch-maybe-null-dependency.ts │ │ │ │ │ │ │ │ ├── try-catch-mutate-outer-value.expect.md │ │ │ │ │ │ │ │ ├── try-catch-mutate-outer-value.js │ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch-escaping.expect.md │ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch-escaping.js │ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch.expect.md │ │ │ │ │ │ │ │ ├── try-catch-try-value-modified-in-catch.js │ │ │ │ │ │ │ │ ├── useMemo-multiple-if-else.expect.md │ │ │ │ │ │ │ │ └── useMemo-multiple-if-else.js │ │ │ │ │ │ │ ├── property-assignment.expect.md │ │ │ │ │ │ │ ├── property-assignment.js │ │ │ │ │ │ │ ├── property-call-evaluation-order.expect.md │ │ │ │ │ │ │ ├── property-call-evaluation-order.js │ │ │ │ │ │ │ ├── property-call-spread.expect.md │ │ │ │ │ │ │ ├── property-call-spread.js │ │ │ │ │ │ │ ├── props-method-dependency.expect.md │ │ │ │ │ │ │ ├── props-method-dependency.js │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-array.expect.md │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-array.js │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-jsx.expect.md │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-jsx.js │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-new.expect.md │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-new.js │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-object.expect.md │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-invalidate-object.js │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-may-invalidate-array.expect.md │ │ │ │ │ │ │ ├── prune-scopes-whose-deps-may-invalidate-array.js │ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute-escaped.expect.md │ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute-escaped.js │ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute.expect.md │ │ │ │ │ │ │ ├── quoted-strings-in-jsx-attribute.js │ │ │ │ │ │ │ ├── quoted-strings-jsx-attribute-escaped-constant-propagation.expect.md │ │ │ │ │ │ │ ├── quoted-strings-jsx-attribute-escaped-constant-propagation.js │ │ │ │ │ │ │ ├── react-namespace.expect.md │ │ │ │ │ │ │ ├── react-namespace.js │ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-indirect.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-indirect.js │ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-test.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-do-while-test.js │ │ │ │ │ │ │ ├── reactive-control-dependency-for-init.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-for-init.js │ │ │ │ │ │ │ ├── reactive-control-dependency-for-test.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-for-test.js │ │ │ │ │ │ │ ├── reactive-control-dependency-for-update.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-for-update.js │ │ │ │ │ │ │ ├── reactive-control-dependency-forin-collection.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-forin-collection.js │ │ │ │ │ │ │ ├── reactive-control-dependency-forof-collection.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-forof-collection.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-do-while.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-do-while.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-in.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-in.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-init.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-init.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-of.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-of.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-test.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-test.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-update.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-for-update.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-if.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-if.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-switch.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-switch.js │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-while.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-from-interleaved-reactivity-while.js │ │ │ │ │ │ │ ├── reactive-control-dependency-if.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-if.js │ │ │ │ │ │ │ ├── reactive-control-dependency-on-context-variable.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-on-context-variable.js │ │ │ │ │ │ │ ├── reactive-control-dependency-phi-setState-type.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-phi-setState-type.js │ │ │ │ │ │ │ ├── reactive-control-dependency-reactive-after-fixpoint.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-reactive-after-fixpoint.js │ │ │ │ │ │ │ ├── reactive-control-dependency-switch-case-test.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-switch-case-test.js │ │ │ │ │ │ │ ├── reactive-control-dependency-switch-condition.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-switch-condition.js │ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-if.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-if.js │ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-switch.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-via-mutation-switch.js │ │ │ │ │ │ │ ├── reactive-control-dependency-while-test.expect.md │ │ │ │ │ │ │ ├── reactive-control-dependency-while-test.js │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.expect.md │ │ │ │ │ │ │ ├── reactive-dependencies-non-optional-properties-inside-optional-chain.js │ │ │ │ │ │ │ ├── reactive-dependency-fixpoint.expect.md │ │ │ │ │ │ │ ├── reactive-dependency-fixpoint.js │ │ │ │ │ │ │ ├── reactive-dependency-nonreactive-captured-with-reactive.expect.md │ │ │ │ │ │ │ ├── reactive-dependency-nonreactive-captured-with-reactive.js │ │ │ │ │ │ │ ├── reactive-dependency-object-captured-with-reactive-mutated.expect.md │ │ │ │ │ │ │ ├── reactive-dependency-object-captured-with-reactive-mutated.js │ │ │ │ │ │ │ ├── reactive-ref-param.expect.md │ │ │ │ │ │ │ ├── reactive-ref-param.tsx │ │ │ │ │ │ │ ├── reactive-ref.expect.md │ │ │ │ │ │ │ ├── reactive-ref.tsx │ │ │ │ │ │ │ ├── reactive-scope-grouping.expect.md │ │ │ │ │ │ │ ├── reactive-scope-grouping.js │ │ │ │ │ │ │ ├── reactive-scopes-if.expect.md │ │ │ │ │ │ │ ├── reactive-scopes-if.js │ │ │ │ │ │ │ ├── reactive-scopes.expect.md │ │ │ │ │ │ │ ├── reactive-scopes.js │ │ │ │ │ │ │ ├── reactivity-analysis-interleaved-reactivity.expect.md │ │ │ │ │ │ │ ├── reactivity-analysis-interleaved-reactivity.js │ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-computed-load.expect.md │ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-computed-load.js │ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-property-load.expect.md │ │ │ │ │ │ │ ├── reactivity-analysis-reactive-via-mutation-of-property-load.js │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-array.expect.md │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-array.js │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-lambda.expect.md │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-lambda.js │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-through-property-load.expect.md │ │ │ │ │ │ │ ├── reactivity-via-aliased-mutation-through-property-load.js │ │ │ │ │ │ │ ├── reactivity-via-readonly-alias-of-mutable-value.expect.md │ │ │ │ │ │ │ ├── reactivity-via-readonly-alias-of-mutable-value.js │ │ │ │ │ │ │ ├── readonly-object-method-calls-mutable-lambda.expect.md │ │ │ │ │ │ │ ├── readonly-object-method-calls-mutable-lambda.js │ │ │ │ │ │ │ ├── readonly-object-method-calls.expect.md │ │ │ │ │ │ │ ├── readonly-object-method-calls.js │ │ │ │ │ │ │ ├── reanimated-no-memo-arg.expect.md │ │ │ │ │ │ │ ├── reanimated-no-memo-arg.js │ │ │ │ │ │ │ ├── reanimated-shared-value-writes.expect.md │ │ │ │ │ │ │ ├── reanimated-shared-value-writes.jsx │ │ │ │ │ │ │ ├── reassign-global-hook-arg.expect.md │ │ │ │ │ │ │ ├── reassign-global-hook-arg.js │ │ │ │ │ │ │ ├── reassign-global-return.expect.md │ │ │ │ │ │ │ ├── reassign-global-return.js │ │ │ │ │ │ │ ├── reassign-in-while-loop-condition.expect.md │ │ │ │ │ │ │ ├── reassign-in-while-loop-condition.js │ │ │ │ │ │ │ ├── reassign-object-in-context.expect.md │ │ │ │ │ │ │ ├── reassign-object-in-context.js │ │ │ │ │ │ │ ├──
Showing preview only (2,295K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (20532 symbols across 3425 files)
FILE: .eslintrc.js
constant OFF (line 10) | const OFF = 0;
constant WARNING (line 11) | const WARNING = 1;
constant ERROR (line 12) | const ERROR = 2;
FILE: compiler/apps/playground/__tests__/e2e/page.spec.ts
function isMonacoLoaded (line 13) | function isMonacoLoaded(): boolean {
function formatPrint (line 20) | function formatPrint(data: Array<string>): Promise<string> {
function expandConfigs (line 24) | async function expandConfigs(page: Page): Promise<void> {
constant TEST_SOURCE (line 30) | const TEST_SOURCE = `export default function TestComponent({ x }) {
constant TEST_CASE_INPUTS (line 34) | const TEST_CASE_INPUTS = [
FILE: compiler/apps/playground/__tests__/parseConfigOverrides.test.mjs
function parseConfigOverrides (line 15) | function parseConfigOverrides(configOverrides) {
FILE: compiler/apps/playground/app/layout.tsx
function RootLayout (line 10) | function RootLayout({
FILE: compiler/apps/playground/app/page.tsx
function Page (line 14) | function Page(): JSX.Element {
FILE: compiler/apps/playground/components/AccordionWindow.tsx
type TabsRecord (line 17) | type TabsRecord = Map<string, React.ReactNode>;
function AccordionWindow (line 19) | function AccordionWindow(props: {
function AccordionWindowItem (line 46) | function AccordionWindowItem({
FILE: compiler/apps/playground/components/Editor/ConfigEditor.tsx
function ConfigEditor (line 26) | function ConfigEditor({
function ExpandedEditor (line 71) | function ExpandedEditor({
function CollapsedEditor (line 182) | function CollapsedEditor({
FILE: compiler/apps/playground/components/Editor/EditorImpl.tsx
function Editor (line 20) | function Editor(): JSX.Element {
FILE: compiler/apps/playground/components/Editor/Input.tsx
type Props (line 32) | type Props = {
function Input (line 37) | function Input({errors, language}: Props): JSX.Element {
FILE: compiler/apps/playground/components/Editor/Output.tsx
constant BASIC_OUTPUT_TAB_NAMES (line 48) | const BASIC_OUTPUT_TAB_NAMES = ['Output', 'SourceMap'];
type PrintedCompilerPipelineValue (line 54) | type PrintedCompilerPipelineValue =
type CompilerTransformOutput (line 64) | type CompilerTransformOutput = {
type CompilerOutput (line 69) | type CompilerOutput =
type Props (line 82) | type Props = {
function tabify (line 87) | async function tabify(
function tabifyCached (line 222) | function tabifyCached(
function Fallback (line 233) | function Fallback(): JSX.Element {
function utf16ToUTF8 (line 241) | function utf16ToUTF8(s: string): string {
function getSourceMapUrl (line 245) | function getSourceMapUrl(code: string, map: string): string | null {
function Output (line 253) | function Output({store, compilerOutput}: Props): JSX.Element {
function OutputContent (line 261) | function OutputContent({store, compilerOutput}: Props): JSX.Element {
function TextTabContent (line 338) | function TextTabContent({
FILE: compiler/apps/playground/components/Header.tsx
function Header (line 24) | function Header(): JSX.Element {
FILE: compiler/apps/playground/components/Logo.tsx
function Logo (line 10) | function Logo(props: JSX.IntrinsicElements['svg']): JSX.Element {
FILE: compiler/apps/playground/components/Message.tsx
type VariantOverrides (line 20) | interface VariantOverrides {
type MessageProps (line 29) | interface MessageProps extends CustomContentProps {
FILE: compiler/apps/playground/components/StoreContext.tsx
function StoreProvider (line 35) | function StoreProvider({children}: {children: ReactNode}): JSX.Element {
type ReducerAction (line 66) | type ReducerAction =
function storeReducer (line 89) | function storeReducer(store: Store, action: ReducerAction): Store {
FILE: compiler/apps/playground/components/TabbedWindow.tsx
function TabbedWindow (line 16) | function TabbedWindow({
FILE: compiler/apps/playground/hooks/useMountEffect.ts
function useMountEffect (line 11) | function useMountEffect(effect: EffectCallback) {
FILE: compiler/apps/playground/lib/compilation.ts
function parseInput (line 35) | function parseInput(
function invokeCompiler (line 55) | function invokeCompiler(
constant COMMON_HOOKS (line 82) | const COMMON_HOOKS: Array<[string, Hook]> = [
function parseConfigOverrides (line 130) | function parseConfigOverrides(configOverrides: string): any {
function parseOptions (line 138) | function parseOptions(
function compile (line 183) | function compile(
FILE: compiler/apps/playground/lib/createContext.ts
function createContext (line 26) | function createContext<T>(): {
FILE: compiler/apps/playground/lib/reactCompilerMonacoDiagnostics.ts
function mapReactCompilerSeverityToMonaco (line 16) | function mapReactCompilerSeverityToMonaco(
function mapReactCompilerDiagnosticToMonacoMarker (line 28) | function mapReactCompilerDiagnosticToMonacoMarker(
type ReactCompilerMarkerConfig (line 49) | type ReactCompilerMarkerConfig = {
function renderReactCompilerMarkers (line 56) | function renderReactCompilerMarkers({
FILE: compiler/apps/playground/lib/stores/messages.ts
type MessageSource (line 8) | enum MessageSource {
type MessageLevel (line 14) | enum MessageLevel {
type Message (line 20) | interface Message {
function createMessage (line 27) | function createMessage(
FILE: compiler/apps/playground/lib/stores/store.ts
type Store (line 18) | interface Store {
function encodeStore (line 23) | function encodeStore(store: Store): string {
function decodeStore (line 26) | function decodeStore(hash: string): any {
function saveStore (line 33) | function saveStore(store: Store): void {
function isValidStore (line 43) | function isValidStore(raw: unknown): raw is Store {
function initStoreFromUrlOrLocalStorage (line 56) | function initStoreFromUrlOrLocalStorage(): Store {
FILE: compiler/apps/playground/lib/transitionTypes.ts
constant CONFIG_PANEL_TRANSITION (line 8) | const CONFIG_PANEL_TRANSITION = 'config-panel';
constant TOGGLE_TAB_TRANSITION (line 9) | const TOGGLE_TAB_TRANSITION = 'toggle-tab';
constant TOGGLE_INTERNALS_TRANSITION (line 10) | const TOGGLE_INTERNALS_TRANSITION = 'toggle-internals';
constant EXPAND_ACCORDION_TRANSITION (line 11) | const EXPAND_ACCORDION_TRANSITION = 'open-accordion';
FILE: compiler/apps/playground/lib/types.d.ts
type HermesParserOptions (line 10) | type HermesParserOptions = {
FILE: compiler/apps/playground/playwright.config.js
constant PORT (line 12) | const PORT = process.env.PORT || 3000;
FILE: compiler/packages/babel-plugin-react-compiler/scripts/babel-plugin-annotate-react-code.ts
function AnnotateReactCodeBabelPlugin (line 12) | function AnnotateReactCodeBabelPlugin(
function annotate (line 25) | function annotate(program: NodePath<t.Program>): void {
function shouldVisit (line 46) | function shouldVisit(fn: BabelFn): boolean {
function buildTypeOfReactForget (line 55) | function buildTypeOfReactForget(): t.Statement {
type ComponentDeclaration (line 82) | type ComponentDeclaration = t.FunctionDeclaration & {
type BabelFn (line 86) | type BabelFn =
function isComponentDeclaration (line 91) | function isComponentDeclaration(
function isComponentOrHookLike (line 101) | function isComponentOrHookLike(
function isHookName (line 139) | function isHookName(s: string): boolean {
function isHook (line 148) | function isHook(path: NodePath<t.Expression | t.PrivateName>): boolean {
function isComponentName (line 169) | function isComponentName(path: NodePath<t.Expression>): boolean {
function isForwardRefCallback (line 177) | function isForwardRefCallback(path: NodePath<t.Expression>): boolean {
function isMemoCallback (line 190) | function isMemoCallback(path: NodePath<t.Expression>): boolean {
function isReactAPI (line 198) | function isReactAPI(
function callsHooksOrCreatesJsx (line 213) | function callsHooksOrCreatesJsx(node: NodePath<t.Node>): boolean {
function getFunctionName (line 239) | function getFunctionName(
FILE: compiler/packages/babel-plugin-react-compiler/scripts/build-react-hooks-fixures.js
constant FIXTURES_DIR (line 22) | const FIXTURES_DIR = path.join(
constant PRETTIER_OPTIONS (line 31) | const PRETTIER_OPTIONS = prettier.resolveConfig.sync(FIXTURES_DIR, {
FILE: compiler/packages/babel-plugin-react-compiler/scripts/eslint-plugin-react-hooks-test-cases.js
function normalizeIndent (line 15) | function normalizeIndent(strings) {
FILE: compiler/packages/babel-plugin-react-compiler/scripts/jest/makeTransform.ts
function createTransformer (line 42) | function createTransformer() {
FILE: compiler/packages/babel-plugin-react-compiler/src/Babel/BabelPlugin.ts
constant ENABLE_REACT_COMPILER_TIMINGS (line 16) | const ENABLE_REACT_COMPILER_TIMINGS =
function BabelPluginReactCompiler (line 24) | function BabelPluginReactCompiler(
FILE: compiler/packages/babel-plugin-react-compiler/src/Babel/RunReactCompilerBabelPlugin.ts
constant DEFAULT_PLUGINS (line 15) | const DEFAULT_PLUGINS = ['babel-plugin-fbt', 'babel-plugin-fbt-runtime'];
function runBabelPluginReactCompiler (line 16) | function runBabelPluginReactCompiler(
FILE: compiler/packages/babel-plugin-react-compiler/src/CompilerError.ts
constant CODEFRAME_LINES_ABOVE (line 16) | const CODEFRAME_LINES_ABOVE = 2;
constant CODEFRAME_LINES_BELOW (line 18) | const CODEFRAME_LINES_BELOW = 3;
constant CODEFRAME_MAX_LINES (line 23) | const CODEFRAME_MAX_LINES = 10;
constant CODEFRAME_ABBREVIATED_SOURCE_LINES (line 35) | const CODEFRAME_ABBREVIATED_SOURCE_LINES = 5;
type ErrorSeverity (line 37) | enum ErrorSeverity {
type CompilerDiagnosticOptions (line 59) | type CompilerDiagnosticOptions = {
type CompilerDiagnosticDetail (line 67) | type CompilerDiagnosticDetail =
type CompilerSuggestionOperation (line 81) | enum CompilerSuggestionOperation {
type CompilerSuggestion (line 87) | type CompilerSuggestion =
type CompilerErrorDetailOptions (line 106) | type CompilerErrorDetailOptions = {
type PrintErrorMessageOptions (line 114) | type PrintErrorMessageOptions = {
class CompilerDiagnostic (line 122) | class CompilerDiagnostic {
method constructor (line 125) | constructor(options: CompilerDiagnosticOptions) {
method create (line 129) | static create(
method reason (line 135) | get reason(): CompilerDiagnosticOptions['reason'] {
method description (line 138) | get description(): CompilerDiagnosticOptions['description'] {
method severity (line 141) | get severity(): ErrorSeverity {
method suggestions (line 144) | get suggestions(): CompilerDiagnosticOptions['suggestions'] {
method category (line 147) | get category(): ErrorCategory {
method withDetails (line 151) | withDetails(...details: Array<CompilerDiagnosticDetail>): CompilerDiag...
method primaryLocation (line 156) | primaryLocation(): SourceLocation | null {
method printErrorMessage (line 165) | printErrorMessage(source: string, options: PrintErrorMessageOptions): ...
method toString (line 210) | toString(): string {
class CompilerErrorDetail (line 229) | class CompilerErrorDetail {
method constructor (line 232) | constructor(options: CompilerErrorDetailOptions) {
method reason (line 236) | get reason(): CompilerErrorDetailOptions['reason'] {
method description (line 239) | get description(): CompilerErrorDetailOptions['description'] {
method severity (line 242) | get severity(): ErrorSeverity {
method loc (line 245) | get loc(): CompilerErrorDetailOptions['loc'] {
method suggestions (line 248) | get suggestions(): CompilerErrorDetailOptions['suggestions'] {
method category (line 251) | get category(): ErrorCategory {
method primaryLocation (line 255) | primaryLocation(): SourceLocation | null {
method printErrorMessage (line 259) | printErrorMessage(source: string, options: PrintErrorMessageOptions): ...
method toString (line 284) | toString(): string {
class CompilerError (line 302) | class CompilerError extends Error {
method invariant (line 307) | static invariant(
method throwDiagnostic (line 333) | static throwDiagnostic(options: CompilerDiagnosticOptions): never {
method throwTodo (line 339) | static throwTodo(
method throwInvalidJS (line 352) | static throwInvalidJS(
method throwInvalidReact (line 365) | static throwInvalidReact(options: CompilerErrorDetailOptions): never {
method throwInvalidConfig (line 371) | static throwInvalidConfig(
method throw (line 384) | static throw(options: CompilerErrorDetailOptions): never {
method constructor (line 390) | constructor(...args: Array<any>) {
method message (line 397) | override get message(): string {
method message (line 401) | override set message(_message: string) {}
method toString (line 403) | override toString(): string {
method withPrintedMessage (line 413) | withPrintedMessage(
method printErrorMessage (line 421) | printErrorMessage(source: string, options: PrintErrorMessageOptions): ...
method merge (line 433) | merge(other: CompilerError): void {
method pushDiagnostic (line 438) | pushDiagnostic(diagnostic: CompilerDiagnostic): void {
method push (line 449) | push(options: CompilerErrorDetailOptions): CompilerErrorDetail {
method pushErrorDetail (line 463) | pushErrorDetail(detail: CompilerErrorDetail): CompilerErrorDetail {
method hasAnyErrors (line 472) | hasAnyErrors(): boolean {
method asResult (line 476) | asResult(): Result<void, CompilerError> {
method hasErrors (line 483) | hasErrors(): boolean {
method hasWarning (line 495) | hasWarning(): boolean {
method hasHints (line 508) | hasHints(): boolean {
function printCodeFrame (line 525) | function printCodeFrame(
function printErrorSummary (line 565) | function printErrorSummary(category: ErrorCategory, message: string): st...
type ErrorCategory (line 616) | enum ErrorCategory {
type LintRulePreset (line 720) | enum LintRulePreset {
type LintRule (line 735) | type LintRule = {
constant RULE_NAME_PATTERN (line 765) | const RULE_NAME_PATTERN = /^[a-z]+(-[a-z]+)*$/;
function getRuleForCategory (line 767) | function getRuleForCategory(category: ErrorCategory): LintRule {
function getRuleForCategoryImpl (line 776) | function getRuleForCategoryImpl(category: ErrorCategory): LintRule {
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Gating.ts
function insertAdditionalFunctionDeclaration (line 36) | function insertAdditionalFunctionDeclaration(
function insertGatedFunctionDeclaration (line 127) | function insertGatedFunctionDeclaration(
function buildFunctionExpression (line 197) | function buildFunctionExpression(
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Imports.ts
function validateRestrictedImports (line 25) | function validateRestrictedImports(
type ProgramContextOptions (line 56) | type ProgramContextOptions = {
class ProgramContext (line 64) | class ProgramContext {
method constructor (line 87) | constructor({
method isHookName (line 104) | isHookName(name: string): boolean {
method hasReference (line 108) | hasReference(name: string): boolean {
method newUid (line 117) | newUid(name: string): string {
method addMemoCacheImport (line 144) | addMemoCacheImport(): NonLocalImportSpecifier {
method addImportSpecifier (line 160) | addImportSpecifier(
method addNewReference (line 181) | addNewReference(name: string): void {
method assertGlobalBinding (line 185) | assertGlobalBinding(
method logEvent (line 204) | logEvent(event: LoggerEvent): void {
function getExistingImports (line 211) | function getExistingImports(
function addImportsToProgram (line 225) | function addImportsToProgram(
function isNonNamespacedImport (line 313) | function isNonNamespacedImport(
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Options.ts
type PanicThresholdOptions (line 44) | type PanicThresholdOptions = z.infer<typeof PanicThresholdOptionsSchema>;
type DynamicGatingOptions (line 48) | type DynamicGatingOptions = z.infer<typeof DynamicGatingOptionsSchema>;
type CustomOptOutDirective (line 52) | type CustomOptOutDirective = z.infer<typeof CustomOptOutDirectiveSchema>;
type PluginOptions (line 54) | type PluginOptions = Partial<{
type ParsedPluginOptions (line 182) | type ParsedPluginOptions = Required<
type CompilerReactTarget (line 202) | type CompilerReactTarget = z.infer<typeof CompilerReactTargetSchema>;
type CompilationMode (line 224) | type CompilationMode = z.infer<typeof CompilationModeSchema>;
type CompilerOutputMode (line 235) | type CompilerOutputMode = z.infer<typeof CompilerOutputModeSchema>;
type LoggerEvent (line 250) | type LoggerEvent =
type CompileErrorEvent (line 259) | type CompileErrorEvent = {
type CompileDiagnosticEvent (line 264) | type CompileDiagnosticEvent = {
type CompileSuccessEvent (line 269) | type CompileSuccessEvent = {
type CompileSkipEvent (line 279) | type CompileSkipEvent = {
type PipelineErrorEvent (line 285) | type PipelineErrorEvent = {
type CompileUnexpectedThrowEvent (line 290) | type CompileUnexpectedThrowEvent = {
type TimingEvent (line 295) | type TimingEvent = {
type Logger (line 299) | type Logger = {
function parsePluginOptions (line 324) | function parsePluginOptions(obj: unknown): ParsedPluginOptions {
function parseTargetConfig (line 405) | function parseTargetConfig(value: unknown): CompilerReactTarget {
function isCompilerFlag (line 419) | function isCompilerFlag(s: string): s is keyof PluginOptions {
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Pipeline.ts
type CompilerPipelineValue (line 105) | type CompilerPipelineValue =
function run (line 111) | function run(
function runWithEnvironment (line 148) | function runWithEnvironment(
function compileFn (line 533) | function compileFn(
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Program.ts
type CompilerPass (line 41) | type CompilerPass = {
constant OPT_IN_DIRECTIVES (line 47) | const OPT_IN_DIRECTIVES = new Set(['use forget', 'use memo']);
constant OPT_OUT_DIRECTIVES (line 48) | const OPT_OUT_DIRECTIVES = new Set(['use no forget', 'use no memo']);
constant DYNAMIC_GATING_DIRECTIVE (line 49) | const DYNAMIC_GATING_DIRECTIVE = new RegExp('^use memo if\\(([^\\)]*)\\)...
function tryFindDirectiveEnablingMemoization (line 51) | function tryFindDirectiveEnablingMemoization(
function findDirectiveDisablingMemoization (line 69) | function findDirectiveDisablingMemoization(
function findDirectivesDynamicGating (line 87) | function findDirectivesDynamicGating(
function isError (line 146) | function isError(err: unknown): boolean {
function isConfigError (line 150) | function isConfigError(err: unknown): boolean {
type BabelFn (line 157) | type BabelFn =
type CompileResult (line 162) | type CompileResult = {
function logError (line 173) | function logError(
function handleError (line 206) | function handleError(
function createNewFunctionNode (line 224) | function createNewFunctionNode(
function insertNewOutlinedFunctionNode (line 283) | function insertNewOutlinedFunctionNode(
constant DEFAULT_ESLINT_SUPPRESSIONS (line 331) | const DEFAULT_ESLINT_SUPPRESSIONS = [
function isFilePartOfSources (line 336) | function isFilePartOfSources(
function compileProgram (line 360) | function compileProgram(
type CompileSource (line 485) | type CompileSource = {
function findFunctionsToCompile (line 495) | function findFunctionsToCompile(
function processFn (line 571) | function processFn(
function tryCompileFunction (line 675) | function tryCompileFunction(
function applyCompiledFunctions (line 738) | function applyCompiledFunctions(
function shouldSkipCompilation (line 782) | function shouldSkipCompilation(
function getReactFunctionType (line 818) | function getReactFunctionType(
function hasMemoCacheFunctionImport (line 871) | function hasMemoCacheFunctionImport(
function isHookName (line 897) | function isHookName(s: string): boolean {
function isHook (line 906) | function isHook(path: NodePath<t.Expression | t.PrivateName>): boolean {
function isComponentName (line 927) | function isComponentName(path: NodePath<t.Expression>): boolean {
function isReactAPI (line 931) | function isReactAPI(
function isForwardRefCallback (line 951) | function isForwardRefCallback(path: NodePath<t.Expression>): boolean {
function isMemoCallback (line 964) | function isMemoCallback(path: NodePath<t.Expression>): boolean {
function isValidPropsAnnotation (line 972) | function isValidPropsAnnotation(
function isValidComponentParams (line 1017) | function isValidComponentParams(
function getComponentOrHookLike (line 1049) | function getComponentOrHookLike(
function skipNestedFunctions (line 1080) | function skipNestedFunctions(
function callsHooksOrCreatesJsx (line 1096) | function callsHooksOrCreatesJsx(
function isNonNode (line 1122) | function isNonNode(node?: t.Expression | null): boolean {
function returnsNonNode (line 1138) | function returnsNonNode(
function getFunctionName (line 1174) | function getFunctionName(
function getFunctionReferencedBeforeDeclarationAtTopLevel (line 1230) | function getFunctionReferencedBeforeDeclarationAtTopLevel(
function getReactCompilerRuntimeModule (line 1291) | function getReactCompilerRuntimeModule(
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Reanimated.ts
function hasModule (line 12) | function hasModule(name: string): boolean {
function pipelineUsesReanimatedPlugin (line 36) | function pipelineUsesReanimatedPlugin(
function injectReanimatedFlag (line 55) | function injectReanimatedFlag(
FILE: compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Suppression.ts
type SuppressionRange (line 27) | type SuppressionRange = {
type SuppressionSource (line 33) | type SuppressionSource = 'Eslint' | 'Flow';
function filterSuppressionsThatAffectFunction (line 40) | function filterSuppressionsThatAffectFunction(
function findProgramSuppressions (line 79) | function findProgramSuppressions(
function suppressionsToCompilerError (line 161) | function suppressionsToCompilerError(
FILE: compiler/packages/babel-plugin-react-compiler/src/Flood/FlowTypes.ts
type BaseFlowType (line 7) | interface BaseFlowType {
type Polarity (line 12) | type Polarity = 'positive' | 'negative' | 'neutral';
type OptionalName (line 15) | type OptionalName = string | null;
type OpenType (line 18) | interface OpenType extends BaseFlowType {
type DefType (line 23) | interface DefType extends BaseFlowType {
type EvalType (line 29) | interface EvalType extends BaseFlowType {
type GenericType (line 36) | interface GenericType extends BaseFlowType {
type ThisInstanceType (line 44) | interface ThisInstanceType extends BaseFlowType {
type ThisTypeAppType (line 52) | interface ThisTypeAppType extends BaseFlowType {
type TypeAppType (line 60) | interface TypeAppType extends BaseFlowType {
type FunProtoType (line 69) | interface FunProtoType extends BaseFlowType {
type ObjProtoType (line 74) | interface ObjProtoType extends BaseFlowType {
type NullProtoType (line 79) | interface NullProtoType extends BaseFlowType {
type FunProtoBindType (line 84) | interface FunProtoBindType extends BaseFlowType {
type IntersectionType (line 89) | interface IntersectionType extends BaseFlowType {
type UnionType (line 95) | interface UnionType extends BaseFlowType {
type MaybeType (line 101) | interface MaybeType extends BaseFlowType {
type OptionalType (line 107) | interface OptionalType extends BaseFlowType {
type KeysType (line 114) | interface KeysType extends BaseFlowType {
type AnnotType (line 120) | interface AnnotType extends BaseFlowType {
type OpaqueType (line 127) | interface OpaqueType extends BaseFlowType {
type NamespaceType (line 143) | interface NamespaceType extends BaseFlowType {
type AnyType (line 153) | interface AnyType extends BaseFlowType {
type StrUtilType (line 158) | interface StrUtilType extends BaseFlowType {
type TypeParam (line 167) | interface TypeParam {
type EnumInfo (line 175) | type EnumInfo = ConcreteEnum | AbstractEnum;
type ConcreteEnum (line 177) | interface ConcreteEnum {
type AbstractEnum (line 186) | interface AbstractEnum {
type CanonicalRendersForm (line 192) | type CanonicalRendersForm =
type InstrinsicRenders (line 198) | interface InstrinsicRenders {
type NominalRenders (line 203) | interface NominalRenders {
type StructuralRenders (line 210) | interface StructuralRenders {
type DefaultRenders (line 216) | interface DefaultRenders {
type InstanceT (line 221) | interface InstanceT {
type InstType (line 229) | interface InstType {
type DefT (line 246) | type DefT =
type NumGeneralType (line 273) | interface NumGeneralType extends BaseFlowType {
type StrGeneralType (line 277) | interface StrGeneralType extends BaseFlowType {
type BoolGeneralType (line 281) | interface BoolGeneralType extends BaseFlowType {
type BigIntGeneralType (line 285) | interface BigIntGeneralType extends BaseFlowType {
type EmptyType (line 289) | interface EmptyType extends BaseFlowType {
type MixedType (line 293) | interface MixedType extends BaseFlowType {
type NullType (line 297) | interface NullType extends BaseFlowType {
type VoidType (line 301) | interface VoidType extends BaseFlowType {
type SymbolType (line 305) | interface SymbolType extends BaseFlowType {
type FunType (line 309) | interface FunType extends BaseFlowType {
type ObjType (line 315) | interface ObjType extends BaseFlowType {
type ArrType (line 320) | interface ArrType extends BaseFlowType {
type ClassType (line 325) | interface ClassType extends BaseFlowType {
type InstanceType (line 330) | interface InstanceType extends BaseFlowType {
type SingletonStrType (line 335) | interface SingletonStrType extends BaseFlowType {
type NumericStrKeyType (line 341) | interface NumericStrKeyType extends BaseFlowType {
type SingletonNumType (line 347) | interface SingletonNumType extends BaseFlowType {
type SingletonBoolType (line 354) | interface SingletonBoolType extends BaseFlowType {
type SingletonBigIntType (line 360) | interface SingletonBigIntType extends BaseFlowType {
type TypeType (line 366) | interface TypeType extends BaseFlowType {
type TypeTKind (line 372) | type TypeTKind =
type PolyType (line 382) | interface PolyType extends BaseFlowType {
type ReactAbstractComponentType (line 389) | interface ReactAbstractComponentType extends BaseFlowType {
type ComponentInstance (line 397) | type ComponentInstance =
type ComponentKind (line 401) | type ComponentKind =
type RendersType (line 405) | interface RendersType extends BaseFlowType {
type EnumValueType (line 410) | interface EnumValueType extends BaseFlowType {
type EnumObjectType (line 415) | interface EnumObjectType extends BaseFlowType {
type ObjKind (line 422) | type ObjKind =
type DictType (line 428) | interface DictType {
type ArrTypeObj (line 436) | type ArrTypeObj = ArrayAT | TupleAT | ROArrayAT;
type ArrayAT (line 438) | interface ArrayAT {
type TupleAT (line 443) | interface TupleAT {
type ROArrayAT (line 452) | interface ROArrayAT {
type TupleElement (line 458) | interface TupleElement {
type Flags (line 466) | interface Flags {
type Property (line 471) | type Property =
type FieldProperty (line 478) | interface FieldProperty {
type GetProperty (line 484) | interface GetProperty {
type SetProperty (line 489) | interface SetProperty {
type GetSetProperty (line 494) | interface GetSetProperty {
type MethodProperty (line 500) | interface MethodProperty {
type PropertyMap (line 506) | interface PropertyMap {
type ObjTypeObj (line 511) | interface ObjTypeObj {
type FunTypeObj (line 519) | interface FunTypeObj {
type ThisStatus (line 543) | type ThisStatus =
type Effect (line 548) | type Effect =
type Destructor (line 555) | type Destructor =
type NonMaybeTypeDestructor (line 579) | interface NonMaybeTypeDestructor {
type PropertyTypeDestructor (line 583) | interface PropertyTypeDestructor {
type ElementTypeDestructor (line 588) | interface ElementTypeDestructor {
type OptionalIndexedAccessNonMaybeTypeDestructor (line 593) | interface OptionalIndexedAccessNonMaybeTypeDestructor {
type OptionalIndexedAccessIndex (line 598) | type OptionalIndexedAccessIndex =
type OptionalIndexedAccessResultTypeDestructor (line 602) | interface OptionalIndexedAccessResultTypeDestructor {
type ExactTypeDestructor (line 606) | interface ExactTypeDestructor {
type ReadOnlyTypeDestructor (line 610) | interface ReadOnlyTypeDestructor {
type PartialTypeDestructor (line 614) | interface PartialTypeDestructor {
type RequiredTypeDestructor (line 618) | interface RequiredTypeDestructor {
type SpreadTypeDestructor (line 622) | interface SpreadTypeDestructor {
type SpreadTarget (line 629) | type SpreadTarget =
type SpreadOperand (line 633) | type SpreadOperand = {kind: 'Type'; type: FlowType} | Slice;
type Slice (line 635) | interface Slice {
type SpreadTupleTypeDestructor (line 646) | interface SpreadTupleTypeDestructor {
type RestTypeDestructor (line 653) | interface RestTypeDestructor {
type RestMergeMode (line 659) | type RestMergeMode =
type ValuesTypeDestructor (line 664) | interface ValuesTypeDestructor {
type ConditionalTypeDestructor (line 668) | interface ConditionalTypeDestructor {
type TypeMapDestructor (line 677) | interface TypeMapDestructor {
type ReactElementPropsTypeDestructor (line 681) | interface ReactElementPropsTypeDestructor {
type ReactElementConfigTypeDestructor (line 685) | interface ReactElementConfigTypeDestructor {
type ReactCheckComponentConfigDestructor (line 689) | interface ReactCheckComponentConfigDestructor {
type ReactDRODestructor (line 696) | interface ReactDRODestructor {
type MakeHooklikeDestructor (line 706) | interface MakeHooklikeDestructor {
type MappedTypeDestructor (line 710) | interface MappedTypeDestructor {
type Homomorphic (line 721) | type Homomorphic =
type EnumTypeDestructor (line 726) | interface EnumTypeDestructor {
type FlowType (line 731) | type FlowType =
FILE: compiler/packages/babel-plugin-react-compiler/src/Flood/TypeErrors.ts
function unsupportedLanguageFeature (line 11) | function unsupportedLanguageFeature(
type UnificationError (line 21) | type UnificationError =
function printUnificationError (line 33) | function printUnificationError(err: UnificationError): string {
function raiseUnificationErrors (line 41) | function raiseUnificationErrors(
function unresolvableTypeVariable (line 68) | function unresolvableTypeVariable(
function cannotAddVoid (line 78) | function cannotAddVoid(explicit: boolean, loc: SourceLocation): never {
function unsupportedTypeAnnotation (line 92) | function unsupportedTypeAnnotation(
function checkTypeArgumentArity (line 102) | function checkTypeArgumentArity(
function notAFunction (line 116) | function notAFunction(desc: string, loc: SourceLocation): void {
function notAPolymorphicFunction (line 123) | function notAPolymorphicFunction(
FILE: compiler/packages/babel-plugin-react-compiler/src/Flood/TypeUtils.ts
function substitute (line 14) | function substitute(
function mapType (line 57) | function mapType<T, U>(
function diff (line 145) | function diff<R, T>(
function filterOptional (line 307) | function filterOptional(t: ResolvedType): ResolvedType {
FILE: compiler/packages/babel-plugin-react-compiler/src/Flood/Types.ts
constant DEBUG (line 14) | const DEBUG = false;
type Type (line 16) | type Type =
type ResolvedType (line 20) | type ResolvedType = {
type ComponentType (line 26) | type ComponentType<T> = {
type ConcreteType (line 31) | type ConcreteType<T> =
type StructuralValue (line 64) | type StructuralValue =
type Structural (line 78) | type Structural = {
type TypeParameter (line 140) | type TypeParameter<T> = {
type LinearId (line 147) | type LinearId = number & {
function makeLinearId (line 151) | function makeLinearId(id: number): LinearId {
type TypeParameterId (line 160) | type TypeParameterId = number & {
function makeTypeParameterId (line 164) | function makeTypeParameterId(id: number): TypeParameterId {
type NominalId (line 173) | type NominalId = number & {
function makeNominalId (line 177) | function makeNominalId(id: number): NominalId {
type VariableId (line 182) | type VariableId = number & {
function makeVariableId (line 186) | function makeVariableId(id: number): VariableId {
function printConcrete (line 194) | function printConcrete<T>(
function printType (line 262) | function printType(type: Type): string {
function printResolved (line 273) | function printResolved(type: ResolvedType): string {
type Platform (line 277) | type Platform = 'client' | 'server' | 'shared';
constant DUMMY_NOMINAL (line 279) | const DUMMY_NOMINAL = makeNominalId(0);
function convertFlowType (line 281) | function convertFlowType(flowType: FlowType, loc: string): ResolvedType {
type ITypeEnv (line 650) | interface ITypeEnv {
function serializeLoc (line 667) | function serializeLoc(location: t.SourceLocation): string {
function buildTypeEnvironment (line 671) | function buildTypeEnvironment(
class FlowTypeEnv (line 695) | class FlowTypeEnv implements ITypeEnv {
method init (line 705) | init(env: Environment, source: string): void {
method setType (line 729) | setType(identifier: Identifier, type: ResolvedType): void {
method getType (line 739) | getType(identifier: Identifier): ResolvedType {
method getTypeOrNull (line 749) | getTypeOrNull(identifier: Identifier): ResolvedType | null {
method getTypeByLoc (line 758) | getTypeByLoc(loc: SourceLocation): ResolvedType | null {
method nextNominalId (line 766) | nextNominalId(): NominalId {
method nextTypeParameterId (line 770) | nextTypeParameterId(): TypeParameterId {
method addBinding (line 774) | addBinding(bindingIdentifier: t.Identifier, type: ResolvedType): void {
method resolveBinding (line 778) | resolveBinding(bindingIdentifier: t.Identifier): ResolvedType | null {
method pushGeneric (line 782) | pushGeneric(name: string, generic: TypeParameter<ResolvedType>): void {
method popGeneric (line 786) | popGeneric(name: string): void {
method getGeneric (line 800) | getGeneric(name: string): null | TypeParameter<ResolvedType> {
method number (line 810) | number(platform: Platform): Type & ResolvedType {
method string (line 813) | string(platform: Platform): Type & ResolvedType {
method boolean (line 816) | boolean(platform: Platform): Type & ResolvedType {
method void (line 819) | void(platform: Platform): Type & ResolvedType {
method mixed (line 822) | mixed(platform: Platform): Type & ResolvedType {
method enum (line 825) | enum(platform: Platform): Type & ResolvedType {
method todo (line 828) | todo(platform: Platform): Type & ResolvedType {
method nullable (line 835) | nullable(type: ResolvedType, platform: Platform): ResolvedType {
method array (line 838) | array(element: ResolvedType, platform: Platform): ResolvedType {
method set (line 841) | set(element: ResolvedType, platform: Platform): ResolvedType {
method map (line 844) | map(
method function (line 851) | function(
method component (line 863) | component(
method object (line 874) | object(
method class (line 889) | class(
method tuple (line 904) | tuple(
method generic (line 919) | generic(
method union (line 934) | union(members: Array<ResolvedType>, platform: Platform): ResolvedType {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/AssertConsistentIdentifiers.ts
function assertConsistentIdentifiers (line 27) | function assertConsistentIdentifiers(fn: HIRFunction): void {
type Identifiers (line 64) | type Identifiers = Map<IdentifierId, Identifier>;
function validate (line 66) | function validate(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/AssertTerminalBlocksExist.ts
function assertTerminalSuccessorsExist (line 13) | function assertTerminalSuccessorsExist(fn: HIRFunction): void {
function assertTerminalPredsExist (line 28) | function assertTerminalPredsExist(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/AssertValidBlockNesting.ts
type Block (line 49) | type Block =
function getScopes (line 59) | function getScopes(fn: HIRFunction): Set<ReactiveScope> {
function rangePreOrderComparator (line 104) | function rangePreOrderComparator(
function recursivelyTraverseItems (line 113) | function recursivelyTraverseItems<T, TContext>(
function assertValidBlockNesting (line 155) | function assertValidBlockNesting(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/AssertValidMutableRanges.ts
function assertValidMutableRanges (line 21) | function assertValidMutableRanges(fn: HIRFunction): void {
function visit (line 43) | function visit(place: Place, description: string): void {
function validateMutableRange (line 50) | function validateMutableRange(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/BuildHIR.ts
function lower (line 72) | function lower(
function lowerStatement (line 266) | function lowerStatement(
function lowerObjectMethod (line 1567) | function lowerObjectMethod(
function lowerObjectPropertyKey (line 1581) | function lowerObjectPropertyKey(
function lowerExpression (line 1620) | function lowerExpression(
function lowerOptionalMemberExpression (line 2810) | function lowerOptionalMemberExpression(
function lowerOptionalCallExpression (line 2920) | function lowerOptionalCallExpression(
function lowerReorderableExpression (line 3089) | function lowerReorderableExpression(
function isReorderableExpression (line 3106) | function isReorderableExpression(
function lowerArguments (line 3277) | function lowerArguments(
type LoweredMemberExpression (line 3311) | type LoweredMemberExpression = {
function lowerMemberExpression (line 3316) | function lowerMemberExpression(
function lowerJsxElementName (line 3387) | function lowerJsxElementName(
function lowerJsxMemberExpression (line 3451) | function lowerJsxMemberExpression(
function lowerJsxElement (line 3482) | function lowerJsxElement(
function trimJsxText (line 3560) | function trimJsxText(original: string): string | null {
function lowerFunctionToValue (line 3609) | function lowerFunctionToValue(
function lowerFunction (line 3628) | function lowerFunction(
function lowerExpressionToTemporary (line 3659) | function lowerExpressionToTemporary(
function lowerValueToTemporary (line 3667) | function lowerValueToTemporary(
function lowerIdentifier (line 3685) | function lowerIdentifier(
function buildTemporaryPlace (line 3726) | function buildTemporaryPlace(builder: HIRBuilder, loc: SourceLocation): ...
function getStoreKind (line 3737) | function getStoreKind(
function getLoadKind (line 3745) | function getLoadKind(
function lowerIdentifierForAssignment (line 3753) | function lowerIdentifierForAssignment(
function lowerAssignment (line 3803) | function lowerAssignment(
function captureScopes (line 4391) | function captureScopes({from, to}: {from: Scope; to: Scope}): Set<Scope> {
function gatherCapturedContext (line 4410) | function gatherCapturedContext(
function notNull (line 4510) | function notNull<T>(value: T | null): value is T {
function lowerType (line 4514) | function lowerType(node: t.FlowType | t.TSType): Type {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/BuildReactiveScopeTerminalsHIR.ts
function buildReactiveScopeTerminalsHIR (line 78) | function buildReactiveScopeTerminalsHIR(fn: HIRFunction): void {
type TerminalRewriteInfo (line 190) | type TerminalRewriteInfo =
type ScopeTraversalContext (line 207) | type ScopeTraversalContext = {
function pushStartScopeTerminal (line 214) | function pushStartScopeTerminal(
function pushEndScopeTerminal (line 230) | function pushEndScopeTerminal(
type RewriteContext (line 246) | type RewriteContext = {
function handleRewrite (line 271) | function handleRewrite(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/CollectHoistablePropertyLoads.ts
constant DEBUG_PRINT (line 38) | const DEBUG_PRINT = false;
function collectHoistablePropertyLoads (line 99) | function collectHoistablePropertyLoads(
function collectHoistablePropertyLoadsInInnerFn (line 131) | function collectHoistablePropertyLoadsInInnerFn(
type CollectHoistablePropertyLoadsContext (line 156) | type CollectHoistablePropertyLoadsContext = {
function collectHoistablePropertyLoadsImpl (line 174) | function collectHoistablePropertyLoadsImpl(
function keyByScopeId (line 193) | function keyByScopeId<T>(
type BlockInfo (line 209) | type BlockInfo = {
type RootNode (line 218) | type RootNode = {
type PropertyPathNode (line 228) | type PropertyPathNode =
class PropertyPathRegistry (line 238) | class PropertyPathRegistry {
method getOrCreateIdentifier (line 241) | getOrCreateIdentifier(
method getOrCreatePropertyEntry (line 277) | static getOrCreatePropertyEntry(
method getOrCreateProperty (line 301) | getOrCreateProperty(n: ReactiveScopeDependency): PropertyPathNode {
function getMaybeNonNullInInstruction (line 325) | function getMaybeNonNullInInstruction(
function isImmutableAtInstr (line 345) | function isImmutableAtInstr(
function collectNonNullsInBlocks (line 381) | function collectNonNullsInBlocks(
function propagateNonNull (line 493) | function propagateNonNull(
function assertNonNull (line 630) | function assertNonNull<T extends NonNullable<U>, U>(
function reduceMaybeOptionalChains (line 650) | function reduceMaybeOptionalChains(
function getAssumedInvokedFunctions (line 697) | function getAssumedInvokedFunctions(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/CollectOptionalChainDependencies.ts
function collectOptionalChainSidemap (line 30) | function collectOptionalChainSidemap(
type OptionalChainSidemap (line 48) | type OptionalChainSidemap = {
type OptionalTraversalContext (line 117) | type OptionalTraversalContext = {
function traverseFunction (line 129) | function traverseFunction(
function matchOptionalTestBlock (line 163) | function matchOptionalTestBlock(
function traverseOptionalBlock (line 240) | function traverseOptionalBlock(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/ComputeUnconditionalBlocks.ts
function computeUnconditionalBlocks (line 16) | function computeUnconditionalBlocks(fn: HIRFunction): Set<BlockId> {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/DefaultModuleTypeProvider.ts
function defaultModuleTypeProvider (line 42) | function defaultModuleTypeProvider(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/DeriveMinimalDependenciesHIR.ts
class ReactiveScopeDependencyTreeHIR (line 23) | class ReactiveScopeDependencyTreeHIR {
method constructor (line 39) | constructor(hoistableObjects: Iterable<ReactiveScopeDependency>) {
method #getOrCreateRoot (line 76) | static #getOrCreateRoot<T extends string>(
method addDependency (line 109) | addDependency(dep: ReactiveScopeDependency): void {
method deriveMinimalDependencies (line 191) | deriveMinimalDependencies(): Set<ReactiveScopeDependency> {
method printDeps (line 211) | printDeps(includeAccesses: boolean): string {
method debug (line 223) | static debug<T extends string>(roots: Map<Identifier, TreeNode<T>>): s...
method #debugImpl (line 233) | static #debugImpl<T extends string>(
type PropertyAccessType (line 263) | enum PropertyAccessType {
function isOptional (line 270) | function isOptional(access: PropertyAccessType): boolean {
function isDependency (line 276) | function isDependency(access: PropertyAccessType): boolean {
function merge (line 283) | function merge(
type TreeNode (line 314) | type TreeNode<T extends string> = {
type HoistableNode (line 319) | type HoistableNode = TreeNode<'Optional' | 'NonNull'>;
type DependencyNode (line 320) | type DependencyNode = TreeNode<PropertyAccessType>;
function collectMinimalDependenciesInSubtree (line 327) | function collectMinimalDependenciesInSubtree(
function printSubtree (line 356) | function printSubtree(
function makeOrMergeProperty (line 371) | function makeOrMergeProperty(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/Dominator.ts
function computeDominatorTree (line 21) | function computeDominatorTree(fn: HIRFunction): Dominator<BlockId> {
function computePostDominatorTree (line 35) | function computePostDominatorTree(
type Node (line 57) | type Node<T> = {
type Graph (line 63) | type Graph<T> = {
class Dominator (line 69) | class Dominator<T> {
method constructor (line 73) | constructor(entry: T, nodes: Map<T, T>) {
method entry (line 79) | get entry(): T {
method get (line 87) | get(id: T): T | null {
method debug (line 96) | debug(): string {
class PostDominator (line 108) | class PostDominator<T> {
method constructor (line 112) | constructor(exit: T, nodes: Map<T, T>) {
method exit (line 118) | get exit(): T {
method get (line 126) | get(id: T): T | null {
method debug (line 135) | debug(): string {
function computeImmediateDominators (line 151) | function computeImmediateDominators<T>(graph: Graph<T>): Map<T, T> {
function intersect (line 196) | function intersect<T>(a: T, b: T, graph: Graph<T>, nodes: Map<T, T>): T {
function buildGraph (line 213) | function buildGraph(fn: HIRFunction): Graph<BlockId> {
function buildReverseGraph (line 232) | function buildReverseGraph(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts
type ExternalFunction (line 81) | type ExternalFunction = z.infer<typeof ExternalFunctionSchema>;
type CompilerMode (line 85) | type CompilerMode = 'all_features' | 'no_inferred_memo';
type Macro (line 87) | type Macro = z.infer<typeof MacroSchema>;
type Hook (line 130) | type Hook = z.infer<typeof HookSchema>;
type EnvironmentConfig (line 507) | type EnvironmentConfig = z.infer<typeof EnvironmentConfigSchema>;
type PartialEnvironmentConfig (line 509) | type PartialEnvironmentConfig = Partial<EnvironmentConfig>;
type ReactFunctionType (line 511) | type ReactFunctionType = 'Component' | 'Hook' | 'Other';
function printFunctionType (line 513) | function printFunctionType(type: ReactFunctionType): string {
class Environment (line 527) | class Environment {
method constructor (line 559) | constructor(
method typeContext (line 625) | get typeContext(): FlowTypeEnv {
method enableDropManualMemoization (line 633) | get enableDropManualMemoization(): boolean {
method enableMemoization (line 652) | get enableMemoization(): boolean {
method enableValidations (line 671) | get enableValidations(): boolean {
method nextIdentifierId (line 687) | get nextIdentifierId(): IdentifierId {
method nextBlockId (line 691) | get nextBlockId(): BlockId {
method nextScopeId (line 695) | get nextScopeId(): ScopeId {
method scope (line 699) | get scope(): BabelScope {
method logErrors (line 703) | logErrors(errors: Result<void, CompilerError>): void {
method recordError (line 722) | recordError(error: CompilerDiagnostic | CompilerErrorDetail): void {
method recordErrors (line 742) | recordErrors(error: CompilerError): void {
method hasErrors (line 751) | hasErrors(): boolean {
method aggregateErrors (line 758) | aggregateErrors(): CompilerError {
method isContextIdentifier (line 762) | isContextIdentifier(node: t.Identifier): boolean {
method isHoistedIdentifier (line 766) | isHoistedIdentifier(node: t.Identifier): boolean {
method generateGloballyUniqueIdentifierName (line 770) | generateGloballyUniqueIdentifierName(
method outlineFunction (line 777) | outlineFunction(fn: HIRFunction, type: ReactFunctionType | null): void {
method getOutlinedFunctions (line 781) | getOutlinedFunctions(): Array<{
method #resolveModuleType (line 788) | #resolveModuleType(moduleName: string, loc: SourceLocation): Global | ...
method getGlobalDeclaration (line 832) | getGlobalDeclaration(
method #isKnownReactModule (line 945) | #isKnownReactModule(moduleName: string): boolean {
method getFallthroughPropertyType (line 953) | getFallthroughPropertyType(
method getPropertyType (line 974) | getPropertyType(
method getFunctionSignature (line 1007) | getFunctionSignature(type: FunctionType): FunctionSignature | null {
method addHoistedIdentifier (line 1020) | addHoistedIdentifier(node: t.Identifier): void {
method #getCustomHookType (line 1025) | #getCustomHookType(): Global {
constant REANIMATED_MODULE_NAME (line 1034) | const REANIMATED_MODULE_NAME = 'react-native-reanimated';
function isHookName (line 1037) | function isHookName(name: string): boolean {
function parseEnvironmentConfig (line 1041) | function parseEnvironmentConfig(
function validateEnvironmentConfig (line 1052) | function validateEnvironmentConfig(
function tryParseExternalFunction (line 1069) | function tryParseExternalFunction(
constant DEFAULT_EXPORT (line 1088) | const DEFAULT_EXPORT = 'default';
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/FindContextIdentifiers.ts
type IdentifierInfo (line 14) | type IdentifierInfo = {
constant DEFAULT_IDENTIFIER_INFO (line 19) | const DEFAULT_IDENTIFIER_INFO: IdentifierInfo = {
type BabelFunction (line 25) | type BabelFunction =
type FindContextIdentifierState (line 30) | type FindContextIdentifierState = {
function findContextIdentifiers (line 47) | function findContextIdentifiers(
function handleIdentifier (line 115) | function handleIdentifier(
function handleAssignment (line 138) | function handleAssignment(
function nonNull (line 225) | function nonNull<T extends NonNullable<t.Node>>(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/Globals.ts
constant DEFAULT_SHAPES (line 52) | const DEFAULT_SHAPES: ShapeRegistry = new Map(BUILTIN_SHAPES);
constant UNTYPED_GLOBALS (line 55) | const UNTYPED_GLOBALS: Set<string> = new Set([
constant TYPED_GLOBALS (line 84) | const TYPED_GLOBALS: Array<[string, BuiltInType]> = [
constant REACT_APIS (line 631) | const REACT_APIS: Array<[string, BuiltInType]> = [
type Global (line 918) | type Global = BuiltInType | PolyType;
type GlobalRegistry (line 919) | type GlobalRegistry = Map<string, Global>;
constant DEFAULT_GLOBALS (line 920) | const DEFAULT_GLOBALS: GlobalRegistry = new Map(REACT_APIS);
function installTypeConfig (line 943) | function installTypeConfig(
function getReanimatedModuleType (line 1055) | function getReanimatedModuleType(registry: ShapeRegistry): ObjectType {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/HIR.ts
type SourceLocation (line 41) | type SourceLocation = t.SourceLocation | typeof GeneratedSource;
type ReactiveFunction (line 59) | type ReactiveFunction = {
type ReactiveScopeBlock (line 71) | type ReactiveScopeBlock = {
type PrunedReactiveScopeBlock (line 77) | type PrunedReactiveScopeBlock = {
type ReactiveBlock (line 83) | type ReactiveBlock = Array<ReactiveStatement>;
type ReactiveStatement (line 85) | type ReactiveStatement =
type ReactiveInstructionStatement (line 91) | type ReactiveInstructionStatement = {
type ReactiveTerminalStatement (line 96) | type ReactiveTerminalStatement<
type ReactiveInstruction (line 107) | type ReactiveInstruction = {
type ReactiveValue (line 115) | type ReactiveValue =
type ReactiveLogicalValue (line 122) | type ReactiveLogicalValue = {
type ReactiveTernaryValue (line 130) | type ReactiveTernaryValue = {
type ReactiveSequenceValue (line 138) | type ReactiveSequenceValue = {
type ReactiveOptionalCallValue (line 146) | type ReactiveOptionalCallValue = {
type ReactiveTerminal (line 154) | type ReactiveTerminal =
function _staticInvariantReactiveTerminalHasLocation (line 169) | function _staticInvariantReactiveTerminalHasLocation(
function _staticInvariantReactiveTerminalHasInstructionId (line 176) | function _staticInvariantReactiveTerminalHasInstructionId(
type ReactiveTerminalTargetKind (line 183) | type ReactiveTerminalTargetKind = 'implicit' | 'labeled' | 'unlabeled';
type ReactiveBreakTerminal (line 184) | type ReactiveBreakTerminal = {
type ReactiveContinueTerminal (line 191) | type ReactiveContinueTerminal = {
type ReactiveReturnTerminal (line 198) | type ReactiveReturnTerminal = {
type ReactiveThrowTerminal (line 204) | type ReactiveThrowTerminal = {
type ReactiveSwitchTerminal (line 210) | type ReactiveSwitchTerminal = {
type ReactiveDoWhileTerminal (line 220) | type ReactiveDoWhileTerminal = {
type ReactiveWhileTerminal (line 227) | type ReactiveWhileTerminal = {
type ReactiveForTerminal (line 234) | type ReactiveForTerminal = {
type ReactiveForOfTerminal (line 243) | type ReactiveForOfTerminal = {
type ReactiveForInTerminal (line 251) | type ReactiveForInTerminal = {
type ReactiveIfTerminal (line 258) | type ReactiveIfTerminal = {
type ReactiveLabelTerminal (line 266) | type ReactiveLabelTerminal = {
type ReactiveTryTerminal (line 272) | type ReactiveTryTerminal = {
type HIRFunction (line 282) | type HIRFunction = {
type HIR (line 304) | type HIR = {
type BlockKind (line 324) | type BlockKind = 'block' | 'value' | 'loop' | 'sequence' | 'catch';
function isStatementBlockKind (line 332) | function isStatementBlockKind(kind: BlockKind): boolean {
function isExpressionBlockKind (line 343) | function isExpressionBlockKind(kind: BlockKind): boolean {
type BasicBlock (line 347) | type BasicBlock = {
type TBasicBlock (line 355) | type TBasicBlock<T extends Terminal> = BasicBlock & {terminal: T};
type Terminal (line 361) | type Terminal =
type TerminalWithFallthrough (line 385) | type TerminalWithFallthrough = Terminal & {fallthrough: BlockId};
function _staticInvariantTerminalHasLocation (line 387) | function _staticInvariantTerminalHasLocation(
function _staticInvariantTerminalHasInstructionId (line 394) | function _staticInvariantTerminalHasInstructionId(
function _staticInvariantTerminalHasFallthrough (line 401) | function _staticInvariantTerminalHasFallthrough(
type UnsupportedTerminal (line 412) | type UnsupportedTerminal = {
type UnreachableTerminal (line 424) | type UnreachableTerminal = {
type ThrowTerminal (line 431) | type ThrowTerminal = {
type Case (line 438) | type Case = {test: Place | null; block: BlockId};
type ReturnVariant (line 440) | type ReturnVariant = 'Void' | 'Implicit' | 'Explicit';
type ReturnTerminal (line 441) | type ReturnTerminal = {
type GotoTerminal (line 461) | type GotoTerminal = {
type GotoVariant (line 470) | enum GotoVariant {
type IfTerminal (line 476) | type IfTerminal = {
type BranchTerminal (line 486) | type BranchTerminal = {
type SwitchTerminal (line 496) | type SwitchTerminal = {
type DoWhileTerminal (line 505) | type DoWhileTerminal = {
type WhileTerminal (line 514) | type WhileTerminal = {
type ForTerminal (line 523) | type ForTerminal = {
type ForOfTerminal (line 534) | type ForOfTerminal = {
type ForInTerminal (line 544) | type ForInTerminal = {
type LogicalTerminal (line 553) | type LogicalTerminal = {
type TernaryTerminal (line 562) | type TernaryTerminal = {
type LabelTerminal (line 570) | type LabelTerminal = {
type OptionalTerminal (line 578) | type OptionalTerminal = {
type SequenceTerminal (line 593) | type SequenceTerminal = {
type TryTerminal (line 601) | type TryTerminal = {
type MaybeThrowTerminal (line 612) | type MaybeThrowTerminal = {
type ReactiveScopeTerminal (line 622) | type ReactiveScopeTerminal = {
type PrunedScopeTerminal (line 631) | type PrunedScopeTerminal = {
type Instruction (line 651) | type Instruction = {
type TInstruction (line 659) | type TInstruction<T extends InstructionValue> = {
type LValue (line 667) | type LValue = {
type LValuePattern (line 672) | type LValuePattern = {
type ArrayExpression (line 677) | type ArrayExpression = {
type Pattern (line 683) | type Pattern = ArrayPattern | ObjectPattern;
type Hole (line 685) | type Hole = {
type SpreadPattern (line 689) | type SpreadPattern = {
type ArrayPattern (line 694) | type ArrayPattern = {
type ObjectPattern (line 700) | type ObjectPattern = {
type ObjectPropertyKey (line 706) | type ObjectPropertyKey =
type ObjectProperty (line 724) | type ObjectProperty = {
type LoweredFunction (line 731) | type LoweredFunction = {
type ObjectMethod (line 735) | type ObjectMethod = {
type InstructionKind (line 741) | enum InstructionKind {
function convertHoistedLValueKind (line 761) | function convertHoistedLValueKind(
function _staticInvariantInstructionValueHasLocation (line 782) | function _staticInvariantInstructionValueHasLocation(
type Phi (line 789) | type Phi = {
type ManualMemoDependency (line 803) | type ManualMemoDependency = {
type StartMemoize (line 815) | type StartMemoize = {
type FinishMemoize (line 832) | type FinishMemoize = {
type MethodCall (line 857) | type MethodCall = {
type CallExpression (line 865) | type CallExpression = {
type NewExpression (line 873) | type NewExpression = {
type LoadLocal (line 880) | type LoadLocal = {
type LoadContext (line 885) | type LoadContext = {
type InstructionValue (line 900) | type InstructionValue =
type JsxExpression (line 1127) | type JsxExpression = {
type JsxAttribute (line 1137) | type JsxAttribute =
type FunctionExpression (line 1141) | type FunctionExpression = {
type Destructure (line 1153) | type Destructure = {
type Place (line 1165) | type Place = {
type Primitive (line 1174) | type Primitive = {
type JSXText (line 1180) | type JSXText = {kind: 'JSXText'; value: string; loc: SourceLocation};
type StoreLocal (line 1182) | type StoreLocal = {
type PropertyLoad (line 1189) | type PropertyLoad = {
type LoadGlobal (line 1196) | type LoadGlobal = {
type StoreGlobal (line 1202) | type StoreGlobal = {
type BuiltinTag (line 1209) | type BuiltinTag = {
type MutableRange (line 1221) | type MutableRange = {
type VariableBinding (line 1226) | type VariableBinding =
type NonLocalImportSpecifier (line 1233) | type NonLocalImportSpecifier = {
type NonLocalBinding (line 1240) | type NonLocalBinding =
type Identifier (line 1253) | type Identifier = {
type IdentifierName (line 1280) | type IdentifierName = ValidatedIdentifier | PromotedIdentifier;
type ValidatedIdentifier (line 1281) | type ValidatedIdentifier = {kind: 'named'; value: ValidIdentifierName};
type PromotedIdentifier (line 1282) | type PromotedIdentifier = {kind: 'promoted'; value: string};
type ValidIdentifierName (line 1289) | type ValidIdentifierName = string & {
function makeTemporaryIdentifier (line 1293) | function makeTemporaryIdentifier(
function forkTemporaryIdentifier (line 1308) | function forkTemporaryIdentifier(
function validateIdentifierName (line 1319) | function validateIdentifierName(
function makeIdentifierName (line 1363) | function makeIdentifierName(name: string): ValidatedIdentifier {
function promoteTemporary (line 1373) | function promoteTemporary(identifier: Identifier): void {
function isPromotedTemporary (line 1385) | function isPromotedTemporary(name: string): boolean {
function promoteTemporaryJsxTag (line 1396) | function promoteTemporaryJsxTag(identifier: Identifier): void {
function isPromotedJsxTemporary (line 1408) | function isPromotedJsxTemporary(name: string): boolean {
type AbstractValue (line 1412) | type AbstractValue = {
type ValueReason (line 1421) | enum ValueReason {
type ValueKind (line 1479) | enum ValueKind {
type Effect (line 1512) | enum Effect {
function isMutableEffect (line 1550) | function isMutableEffect(
type ReactiveScope (line 1579) | type ReactiveScope = {
type ReactiveScopeDependencies (line 1626) | type ReactiveScopeDependencies = Set<ReactiveScopeDependency>;
type ReactiveScopeDeclaration (line 1628) | type ReactiveScopeDeclaration = {
type PropertyLiteral (line 1634) | type PropertyLiteral = (string | number) & {
function makePropertyLiteral (line 1637) | function makePropertyLiteral(value: string | number): PropertyLiteral {
type DependencyPathEntry (line 1640) | type DependencyPathEntry = {
type DependencyPath (line 1645) | type DependencyPath = Array<DependencyPathEntry>;
type ReactiveScopeDependency (line 1646) | type ReactiveScopeDependency = {
function areEqualPaths (line 1664) | function areEqualPaths(a: DependencyPath, b: DependencyPath): boolean {
function isSubPath (line 1673) | function isSubPath(
function isSubPathIgnoringOptionals (line 1686) | function isSubPathIgnoringOptionals(
function getPlaceScope (line 1696) | function getPlaceScope(
function isScopeActive (line 1707) | function isScopeActive(scope: ReactiveScope, id: InstructionId): boolean {
type BlockId (line 1716) | type BlockId = number & {[opaqueBlockId]: 'BlockId'};
function makeBlockId (line 1718) | function makeBlockId(id: number): BlockId {
type ScopeId (line 1731) | type ScopeId = number & {[opaqueScopeId]: 'ScopeId'};
function makeScopeId (line 1733) | function makeScopeId(id: number): ScopeId {
type IdentifierId (line 1746) | type IdentifierId = number & {[opaqueIdentifierId]: 'IdentifierId'};
function makeIdentifierId (line 1748) | function makeIdentifierId(id: number): IdentifierId {
type DeclarationId (line 1761) | type DeclarationId = number & {[opageDeclarationId]: 'DeclarationId'};
function makeDeclarationId (line 1763) | function makeDeclarationId(id: number): DeclarationId {
type InstructionId (line 1776) | type InstructionId = number & {[opaqueInstructionId]: 'IdentifierId'};
function makeInstructionId (line 1778) | function makeInstructionId(id: number): InstructionId {
function isObjectMethodType (line 1786) | function isObjectMethodType(id: Identifier): boolean {
function isObjectType (line 1790) | function isObjectType(id: Identifier): boolean {
function isPrimitiveType (line 1794) | function isPrimitiveType(id: Identifier): boolean {
function isPlainObjectType (line 1798) | function isPlainObjectType(id: Identifier): boolean {
function isArrayType (line 1802) | function isArrayType(id: Identifier): boolean {
function isMapType (line 1806) | function isMapType(id: Identifier): boolean {
function isSetType (line 1810) | function isSetType(id: Identifier): boolean {
function isPropsType (line 1814) | function isPropsType(id: Identifier): boolean {
function isRefValueType (line 1818) | function isRefValueType(id: Identifier): boolean {
function isUseRefType (line 1822) | function isUseRefType(id: Identifier): boolean {
function isUseStateType (line 1826) | function isUseStateType(id: Identifier): boolean {
function isJsxType (line 1830) | function isJsxType(type: Type): boolean {
function isRefOrRefValue (line 1834) | function isRefOrRefValue(id: Identifier): boolean {
function isRefOrRefLikeMutableType (line 1842) | function isRefOrRefLikeMutableType(type: Type): boolean {
function isSetStateType (line 1850) | function isSetStateType(id: Identifier): boolean {
function isUseActionStateType (line 1854) | function isUseActionStateType(id: Identifier): boolean {
function isStartTransitionType (line 1860) | function isStartTransitionType(id: Identifier): boolean {
function isUseOptimisticType (line 1866) | function isUseOptimisticType(id: Identifier): boolean {
function isSetOptimisticType (line 1872) | function isSetOptimisticType(id: Identifier): boolean {
function isSetActionStateType (line 1878) | function isSetActionStateType(id: Identifier): boolean {
function isUseReducerType (line 1884) | function isUseReducerType(id: Identifier): boolean {
function isDispatcherType (line 1888) | function isDispatcherType(id: Identifier): boolean {
function isEffectEventFunctionType (line 1892) | function isEffectEventFunctionType(id: Identifier): boolean {
function isStableType (line 1899) | function isStableType(id: Identifier): boolean {
function isStableTypeContainer (line 1910) | function isStableTypeContainer(id: Identifier): boolean {
function evaluatesToStableTypeOrContainer (line 1924) | function evaluatesToStableTypeOrContainer(
function isUseEffectHookType (line 1946) | function isUseEffectHookType(id: Identifier): boolean {
function isUseLayoutEffectHookType (line 1951) | function isUseLayoutEffectHookType(id: Identifier): boolean {
function isUseInsertionEffectHookType (line 1957) | function isUseInsertionEffectHookType(id: Identifier): boolean {
function isUseEffectEventType (line 1963) | function isUseEffectEventType(id: Identifier): boolean {
function isUseContextHookType (line 1969) | function isUseContextHookType(id: Identifier): boolean {
function getHookKind (line 1975) | function getHookKind(env: Environment, id: Identifier): HookKind | null {
function isUseOperator (line 1979) | function isUseOperator(id: Identifier): boolean {
function getHookKindForType (line 1985) | function getHookKindForType(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/HIRBuilder.ts
type WipBlock (line 55) | type WipBlock = {
type Scope (line 61) | type Scope = LoopScope | LabelScope | SwitchScope;
type LoopScope (line 63) | type LoopScope = {
type SwitchScope (line 70) | type SwitchScope = {
type LabelScope (line 76) | type LabelScope = {
function newBlock (line 82) | function newBlock(id: BlockId, kind: BlockKind): WipBlock {
type Bindings (line 86) | type Bindings = Map<
type ExceptionsMode (line 95) | type ExceptionsMode =
class HIRBuilder (line 109) | class HIRBuilder {
method nextIdentifierId (line 124) | get nextIdentifierId(): IdentifierId {
method context (line 128) | get context(): Map<t.Identifier, SourceLocation> {
method bindings (line 132) | get bindings(): Bindings {
method environment (line 136) | get environment(): Environment {
method constructor (line 140) | constructor(
method recordError (line 155) | recordError(error: CompilerDiagnostic | CompilerErrorDetail): void {
method currentBlockKind (line 159) | currentBlockKind(): BlockKind {
method push (line 164) | push(instruction: Instruction): void {
method enterTryCatch (line 183) | enterTryCatch(handler: BlockId, fn: () => void): void {
method resolveThrowHandler (line 189) | resolveThrowHandler(): BlockId | null {
method makeTemporary (line 194) | makeTemporary(loc: SourceLocation): Identifier {
method #resolveBabelBinding (line 199) | #resolveBabelBinding(
method resolveIdentifier (line 240) | resolveIdentifier(
method isContextIdentifier (line 301) | isContextIdentifier(path: NodePath<t.Identifier | t.JSXIdentifier>): b...
method resolveBinding (line 317) | resolveBinding(node: t.Identifier): Identifier {
method build (line 373) | build(): HIR {
method terminate (line 409) | terminate(terminal: Terminal, nextBlockKind: BlockKind | null): BlockId {
method terminateWithContinuation (line 430) | terminateWithContinuation(terminal: Terminal, continuation: WipBlock):...
method reserve (line 448) | reserve(kind: BlockKind): WipBlock {
method complete (line 453) | complete(block: WipBlock, terminal: Terminal): void {
method enterReserved (line 469) | enterReserved(wip: WipBlock, fn: () => Terminal): void {
method enter (line 491) | enter(nextBlockKind: BlockKind, fn: (blockId: BlockId) => Terminal): B...
method label (line 499) | label<T>(label: string, breakBlock: BlockId, fn: () => T): T {
method switch (line 520) | switch<T>(label: string | null, breakBlock: BlockId, fn: () => T): T {
method loop (line 545) | loop<T>(
method lookupBreak (line 579) | lookupBreak(label: string | null): BlockId {
method lookupContinue (line 601) | lookupContinue(label: string | null): BlockId {
function _shrink (line 623) | function _shrink(func: HIR): void {
function removeUnreachableForUpdates (line 674) | function removeUnreachableForUpdates(fn: HIR): void {
function removeDeadDoWhileStatements (line 686) | function removeDeadDoWhileStatements(func: HIR): void {
function reversePostorderBlocks (line 716) | function reversePostorderBlocks(func: HIR): void {
function getReversePostorderedBlocks (line 728) | function getReversePostorderedBlocks(func: HIR): HIR['blocks'] {
function markInstructionIds (line 817) | function markInstructionIds(func: HIR): void {
function markPredecessors (line 833) | function markPredecessors(func: HIR): void {
function getTargetIfIndirection (line 870) | function getTargetIfIndirection(block: BasicBlock): number | null {
function removeUnnecessaryTryCatch (line 882) | function removeUnnecessaryTryCatch(fn: HIR): void {
function createTemporaryPlace (line 911) | function createTemporaryPlace(
function clonePlaceToTemporary (line 929) | function clonePlaceToTemporary(env: Environment, place: Place): Place {
function fixScopeAndIdentifierRanges (line 940) | function fixScopeAndIdentifierRanges(func: HIR): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/MergeConsecutiveBlocks.ts
function mergeConsecutiveBlocks (line 30) | function mergeConsecutiveBlocks(fn: HIRFunction): void {
class MergedBlocks (line 125) | class MergedBlocks {
method merge (line 129) | merge(block: BlockId, into: BlockId): void {
method get (line 139) | get(block: BlockId): BlockId {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/MergeOverlappingReactiveScopesHIR.ts
function mergeOverlappingReactiveScopesHIR (line 105) | function mergeOverlappingReactiveScopesHIR(fn: HIRFunction): void {
type ScopeInfo (line 138) | type ScopeInfo = {
type TraversalState (line 144) | type TraversalState = {
function collectScopeInfo (line 149) | function collectScopeInfo(fn: HIRFunction): ScopeInfo {
function visitInstructionId (line 200) | function visitInstructionId(
function visitPlace (line 262) | function visitPlace(
function getOverlappingReactiveScopes (line 280) | function getOverlappingReactiveScopes(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/ObjectShape.ts
constant PRIMITIVE_TYPE (line 40) | const PRIMITIVE_TYPE: PrimitiveType = {
function createAnonId (line 49) | function createAnonId(): string {
function addFunction (line 58) | function addFunction(
function addHook (line 90) | function addHook(
function parseAliasingSignatureConfig (line 112) | function parseAliasingSignatureConfig(
function addObject (line 241) | function addObject(
function addShape (line 254) | function addShape(
type HookKind (line 273) | type HookKind =
type FunctionSignature (line 298) | type FunctionSignature = {
type ObjectShape (line 348) | type ObjectShape = {
type ShapeRegistry (line 358) | type ShapeRegistry = Map<string, ObjectShape>;
constant BUILTIN_SHAPES (line 393) | const BUILTIN_SHAPES: ShapeRegistry = new Map();
function signatureArgument (line 1498) | function signatureArgument(id: number): Place {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/PrintHIR.ts
type Options (line 39) | type Options = {
function printFunctionWithOutlined (line 43) | function printFunctionWithOutlined(fn: HIRFunction): string {
function printFunction (line 51) | function printFunction(fn: HIRFunction): string {
function printHIR (line 85) | function printHIR(ir: HIR, options: Options | null = null): string {
function printMixedHIR (line 116) | function printMixedHIR(
function printInstruction (line 157) | function printInstruction(instr: ReactiveInstruction): string {
function printPhi (line 171) | function printPhi(phi: Phi): string {
function printTerminal (line 187) | function printTerminal(terminal: Terminal): Array<string> | string {
function printHole (line 336) | function printHole(): string {
function printObjectPropertyKey (line 340) | function printObjectPropertyKey(key: ObjectPropertyKey): string {
function printInstructionValue (line 355) | function printInstructionValue(instrValue: ReactiveValue): string {
function isMutable (line 723) | function isMutable(range: MutableRange): boolean {
constant DEBUG_MUTABLE_RANGES (line 727) | const DEBUG_MUTABLE_RANGES = false;
function printMutableRange (line 728) | function printMutableRange(identifier: Identifier): string {
function printLValue (line 746) | function printLValue(lval: LValue): string {
function printPattern (line 780) | function printPattern(pattern: Pattern | Place | SpreadPattern): string {
function printPlace (line 834) | function printPlace(place: Place): string {
function printIdentifier (line 846) | function printIdentifier(id: Identifier): string {
function printName (line 850) | function printName(name: IdentifierName | null): string {
function printScope (line 857) | function printScope(scope: ReactiveScope | null): string {
function printManualMemoDependency (line 861) | function printManualMemoDependency(
function printType (line 879) | function printType(type: Type): string {
function printSourceLocation (line 892) | function printSourceLocation(loc: SourceLocation): string {
function printSourceLocationLine (line 900) | function printSourceLocationLine(loc: SourceLocation): string {
function printAliases (line 908) | function printAliases(aliases: DisjointSet<Identifier>): string {
function getFunctionName (line 919) | function getFunctionName(
function printAliasingEffect (line 931) | function printAliasingEffect(effect: AliasingEffect): string {
function printPlaceForAliasEffect (line 1009) | function printPlaceForAliasEffect(place: Place): string {
function printAliasingSignature (line 1013) | function printAliasingSignature(signature: AliasingSignature): string {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/PropagateScopeDependenciesHIR.ts
function propagateScopeDependenciesHIR (line 53) | function propagateScopeDependenciesHIR(fn: HIRFunction): void {
function findTemporariesUsedOutsideDeclaringScope (line 121) | function findTemporariesUsedOutsideDeclaringScope(
function collectTemporariesSidemap (line 232) | function collectTemporariesSidemap(
function isLoadContextMutable (line 246) | function isLoadContextMutable(
function collectTemporariesSidemapImpl (line 273) | function collectTemporariesSidemapImpl(
function getProperty (line 341) | function getProperty(
type Decl (line 395) | type Decl = {
class DependencyCollectionContext (line 400) | class DependencyCollectionContext {
method constructor (line 419) | constructor(
method enterScope (line 429) | enterScope(scope: ReactiveScope): void {
method exitScope (line 435) | exitScope(scope: ReactiveScope, pruned: boolean): void {
method isUsedOutsideDeclaringScope (line 464) | isUsedOutsideDeclaringScope(place: Place): boolean {
method declare (line 486) | declare(identifier: Identifier, decl: Decl): void {
method hasDeclared (line 493) | hasDeclared(identifier: Identifier): boolean {
method #checkValidDependency (line 498) | #checkValidDependency(maybeDependency: ReactiveScopeDependency): boole...
method #isScopeActive (line 528) | #isScopeActive(scope: ReactiveScope): boolean {
method currentScope (line 535) | get currentScope(): Stack<ReactiveScope> {
method visitOperand (line 539) | visitOperand(place: Place): void {
method visitProperty (line 554) | visitProperty(
method visitDependency (line 570) | visitDependency(maybeDependency: ReactiveScopeDependency): void {
method visitReassignment (line 629) | visitReassignment(place: Place): void {
method enterInnerFn (line 648) | enterInnerFn<T>(
method isDeferredDependency (line 664) | isDeferredDependency(
type HIRValue (line 676) | enum HIRValue {
function handleInstruction (line 681) | function handleInstruction(
function collectDependencies (line 761) | function collectDependencies(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/PruneUnusedLabelsHIR.ts
function pruneUnusedLabelsHIR (line 11) | function pruneUnusedLabelsHIR(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/ScopeDependencyUtils.ts
type DependencyInstructions (line 19) | type DependencyInstructions = {
function buildDependencyInstructions (line 25) | function buildDependencyInstructions(
function writeNonOptionalDependency (line 63) | function writeNonOptionalDependency(
function writeOptionalDependency (line 135) | function writeOptionalDependency(
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/TypeSchema.ts
type ObjectPropertiesConfig (line 18) | type ObjectPropertiesConfig = {[key: string]: TypeConfig};
type ObjectTypeConfig (line 30) | type ObjectTypeConfig = {
type FreezeEffectConfig (line 43) | type FreezeEffectConfig = {
type MutateEffectConfig (line 55) | type MutateEffectConfig = {
type MutateTransitiveConditionallyConfig (line 65) | type MutateTransitiveConditionallyConfig = {
type CreateEffectConfig (line 76) | type CreateEffectConfig = {
type AssignEffectConfig (line 90) | type AssignEffectConfig = {
type AliasEffectConfig (line 102) | type AliasEffectConfig = {
type ImmutableCaptureEffectConfig (line 114) | type ImmutableCaptureEffectConfig = {
type CaptureEffectConfig (line 127) | type CaptureEffectConfig = {
type CreateFromEffectConfig (line 139) | type CreateFromEffectConfig = {
type ApplyArgConfig (line 152) | type ApplyArgConfig =
type ApplyEffectConfig (line 168) | type ApplyEffectConfig = {
type ImpureEffectConfig (line 186) | type ImpureEffectConfig = {
type AliasingEffectConfig (line 196) | type AliasingEffectConfig =
type AliasingSignatureConfig (line 223) | type AliasingSignatureConfig = {
type FunctionTypeConfig (line 242) | type FunctionTypeConfig = {
type HookTypeConfig (line 271) | type HookTypeConfig = {
type BuiltInTypeConfig (line 292) | type BuiltInTypeConfig =
type TypeReferenceConfig (line 306) | type TypeReferenceConfig = {
type TypeConfig (line 315) | type TypeConfig =
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/Types.ts
type BuiltInType (line 11) | type BuiltInType = PrimitiveType | FunctionType | ObjectType;
type Type (line 13) | type Type =
type PrimitiveType (line 20) | type PrimitiveType = {kind: 'Primitive'};
type FunctionType (line 37) | type FunctionType = {
type ObjectType (line 44) | type ObjectType = {
type TypeVar (line 49) | type TypeVar = {
type PolyType (line 53) | type PolyType = {
type PhiType (line 56) | type PhiType = {
type PropType (line 60) | type PropType = {
type ObjectMethod (line 75) | type ObjectMethod = {
type TypeId (line 84) | type TypeId = number & {[opaqueTypeId]: 'IdentifierId'};
function makeTypeId (line 86) | function makeTypeId(id: number): TypeId {
function makeType (line 95) | function makeType(): TypeVar {
function duplicateType (line 106) | function duplicateType(type: Type): Type {
function typeEquals (line 148) | function typeEquals(tA: Type, tB: Type): boolean {
function typeVarEquals (line 162) | function typeVarEquals(tA: Type, tB: Type): boolean {
function typeKindCheck (line 169) | function typeKindCheck(tA: Type, tb: Type, type: string): boolean {
function objectMethodTypeEquals (line 173) | function objectMethodTypeEquals(tA: Type, tB: Type): boolean {
function propTypeEquals (line 177) | function propTypeEquals(tA: Type, tB: Type): boolean {
function primitiveTypeEquals (line 191) | function primitiveTypeEquals(tA: Type, tB: Type): boolean {
function polyTypeEquals (line 195) | function polyTypeEquals(tA: Type, tB: Type): boolean {
function objectTypeEquals (line 199) | function objectTypeEquals(tA: Type, tB: Type): boolean {
function funcTypeEquals (line 207) | function funcTypeEquals(tA: Type, tB: Type): boolean {
function phiTypeEquals (line 214) | function phiTypeEquals(tA: Type, tB: Type): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/HIR/visitors.ts
function doesPatternContainSpreadElement (line 304) | function doesPatternContainSpreadElement(pattern: Pattern): boolean {
function mapInstructionLValues (line 420) | function mapInstructionLValues(
function mapInstructionOperands (line 446) | function mapInstructionOperands(
function mapInstructionValueOperands (line 453) | function mapInstructionValueOperands(
function mapCallArguments (line 660) | function mapCallArguments(
function mapPatternOperands (line 674) | function mapPatternOperands(
function mapTerminalSuccessors (line 708) | function mapTerminalSuccessors(
function terminalHasFallthrough (line 962) | function terminalHasFallthrough<
function terminalFallthrough (line 1009) | function terminalFallthrough(terminal: Terminal): BlockId | null {
function mapTerminalOperands (line 1112) | function mapTerminalOperands(
class ScopeBlockTraversal (line 1238) | class ScopeBlockTraversal {
method recordScopes (line 1256) | recordScopes(block: BasicBlock): void {
method isScopeActive (line 1300) | isScopeActive(scopeId: ScopeId): boolean {
method currentScope (line 1307) | get currentScope(): ScopeId | null {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/AliasingEffects.ts
type AliasingEffect (line 29) | type AliasingEffect =
type MutationReason (line 177) | type MutationReason = {kind: 'AssignCurrentProperty'};
function hashEffect (line 179) | function hashEffect(effect: AliasingEffect): string {
type AliasingSignature (line 257) | type AliasingSignature = {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/AnalyseFunctions.ts
function analyseFunctions (line 17) | function analyseFunctions(func: HIRFunction): void {
function lowerWithMutationAliasing (line 48) | function lowerWithMutationAliasing(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/ControlDominators.ts
type ControlDominators (line 11) | type ControlDominators = (id: BlockId) => boolean;
function createControlDominators (line 17) | function createControlDominators(
function postDominatorFrontier (line 66) | function postDominatorFrontier(
function postDominatorsOf (line 90) | function postDominatorsOf(
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/DropManualMemoization.ts
type ManualMemoCallee (line 35) | type ManualMemoCallee = {
type IdentifierSidemap (line 40) | type IdentifierSidemap = {
function collectMaybeMemoDependencies (line 54) | function collectMaybeMemoDependencies(
function collectTemporaries (line 126) | function collectTemporaries(
function makeManualMemoizationMarkers (line 187) | function makeManualMemoizationMarkers(
function getManualMemoizationReplacement (line 228) | function getManualMemoizationReplacement(
function extractManualMemoizationArgs (line 292) | function extractManualMemoizationArgs(
function dropManualMemoization (line 391) | function dropManualMemoization(func: HIRFunction): void {
function findOptionalPlaces (line 553) | function findOptionalPlaces(fn: HIRFunction): Set<IdentifierId> {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingEffects.ts
constant DEBUG (line 74) | const DEBUG = false;
function inferMutationAliasingEffects (line 98) | function inferMutationAliasingEffects(
function findHoistedContextDeclarations (line 226) | function findHoistedContextDeclarations(
class Context (line 263) | class Context {
method constructor (line 280) | constructor(
method cacheApplySignature (line 292) | cacheApplySignature(
method internEffect (line 305) | internEffect(effect: AliasingEffect): AliasingEffect {
function findNonMutatedDestructureSpreads (line 336) | function findNonMutatedDestructureSpreads(fn: HIRFunction): Set<Identifi...
function inferParam (line 471) | function inferParam(
function inferBlock (line 486) | function inferBlock(
function applySignature (line 572) | function applySignature(
function applyEffect (line 673) | function applyEffect(
class InferenceState (line 1310) | class InferenceState {
method constructor (line 1323) | constructor(
method empty (line 1335) | static empty(
method isFunctionExpression (line 1342) | get isFunctionExpression(): boolean {
method initialize (line 1347) | initialize(value: InstructionValue, kind: AbstractValue): void {
method values (line 1356) | values(place: Place): Array<InstructionValue> {
method kind (line 1368) | kind(place: Place): AbstractValue {
method assign (line 1391) | assign(place: Place, value: Place): void {
method appendAlias (line 1402) | appendAlias(place: Place, value: Place): void {
method define (line 1418) | define(place: Place, value: InstructionValue): void {
method isDefined (line 1427) | isDefined(place: Place): boolean {
method freeze (line 1435) | freeze(place: Place, reason: ValueReason): boolean {
method freezeValue (line 1461) | freezeValue(value: InstructionValue, reason: ValueReason): void {
method mutate (line 1477) | mutate(
method merge (line 1545) | merge(other: InferenceState): InferenceState | null {
method clone (line 1609) | clone(): InferenceState {
method debug (line 1622) | debug(): any {
method debugAbstractValue (line 1646) | debugAbstractValue(value: AbstractValue): any {
method inferPhi (line 1653) | inferPhi(phi: Phi): void {
function mergeAbstractValues (line 1674) | function mergeAbstractValues(
type InstructionSignature (line 1693) | type InstructionSignature = {
function conditionallyMutateIterator (line 1697) | function conditionallyMutateIterator(place: Place): AliasingEffect | null {
function computeSignatureForInstruction (line 1724) | function computeSignatureForInstruction(
function computeEffectsForLegacySignature (line 2316) | function computeEffectsForLegacySignature(
function areArgumentsImmutableAndNonMutating (line 2506) | function areArgumentsImmutableAndNonMutating(
function computeEffectsForSignature (line 2563) | function computeEffectsForSignature(
function buildSignatureFromFunctionExpression (line 2758) | function buildSignatureFromFunctionExpression(
type AbstractValue (line 2781) | type AbstractValue = {
function getWriteErrorReason (line 2786) | function getWriteErrorReason(abstractValue: AbstractValue): string {
function getArgumentEffect (line 2812) | function getArgumentEffect(
function getFunctionCallSignature (line 2840) | function getFunctionCallSignature(
function isKnownMutableEffect (line 2850) | function isKnownMutableEffect(effect: Effect): boolean {
function mergeValueKinds (line 2935) | function mergeValueKinds(a: ValueKind, b: ValueKind): ValueKind {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/InferMutationAliasingRanges.ts
function inferMutationAliasingRanges (line 75) | function inferMutationAliasingRanges(
function appendFunctionErrors (line 559) | function appendFunctionErrors(env: Environment | null, fn: HIRFunction):...
type MutationKind (line 573) | enum MutationKind {
type Node (line 579) | type Node = {
class AliasingState (line 599) | class AliasingState {
method create (line 602) | create(place: Place, value: Node['value']): void {
method createFrom (line 618) | createFrom(index: number, from: Place, into: Place): void {
method capture (line 631) | capture(index: number, from: Place, into: Place): void {
method assign (line 643) | assign(index: number, from: Place, into: Place): void {
method maybeAlias (line 655) | maybeAlias(index: number, from: Place, into: Place): void {
method render (line 667) | render(index: number, start: Identifier, env: Environment | null): void {
method mutate (line 704) | mutate(
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/InferReactivePlaces.ts
class StableSidemap (line 43) | class StableSidemap {
method constructor (line 47) | constructor(env: Environment) {
method handleInstruction (line 51) | handleInstruction(instr: Instruction): void {
method isStable (line 122) | isStable(id: IdentifierId): boolean {
function inferReactivePlaces (line 205) | function inferReactivePlaces(fn: HIRFunction): void {
class ReactivityMap (line 368) | class ReactivityMap {
method constructor (line 384) | constructor(aliasedIdentifiers: DisjointSet<Identifier>) {
method isReactive (line 388) | isReactive(place: Place): boolean {
method markReactive (line 398) | markReactive(place: Place): void {
method snapshot (line 408) | snapshot(): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/Inference/InlineImmediatelyInvokedFunctionExpressions.ts
function inlineImmediatelyInvokedFunctionExpressions (line 83) | function inlineImmediatelyInvokedFunctionExpressions(
function hasSingleExitReturnTerminal (line 267) | function hasSingleExitReturnTerminal(fn: HIRFunction): boolean {
function rewriteBlock (line 284) | function rewriteBlock(
function declareTemporary (line 316) | function declareTemporary(
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/ConstantPropagation.ts
function constantPropagation (line 59) | function constantPropagation(fn: HIRFunction): void {
function constantPropagationImpl (line 64) | function constantPropagationImpl(fn: HIRFunction, constants: Constants):...
function applyConstantPropagation (line 107) | function applyConstantPropagation(
function evaluatePhi (line 168) | function evaluatePhi(phi: Phi, constants: Constants): Constant | null {
function evaluateInstruction (line 224) | function evaluateInstruction(
function read (line 621) | function read(constants: Constants, place: Place): Constant | null {
type Constant (line 625) | type Constant = Primitive | LoadGlobal;
type Constants (line 626) | type Constants = Map<IdentifierId, Constant>;
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/DeadCodeElimination.ts
function deadCodeElimination (line 32) | function deadCodeElimination(fn: HIRFunction): void {
class State (line 72) | class State {
method constructor (line 77) | constructor(env: Environment) {
method reference (line 82) | reference(identifier: Identifier): void {
method isIdOrNameUsed (line 94) | isIdOrNameUsed(identifier: Identifier): boolean {
method isIdUsed (line 105) | isIdUsed(identifier: Identifier): boolean {
method count (line 109) | get count(): number {
function findReferencedIdentifiers (line 114) | function findReferencedIdentifiers(fn: HIRFunction): State {
function rewriteInstruction (line 187) | function rewriteInstruction(instr: Instruction, state: State): void {
function pruneableValue (line 278) | function pruneableValue(value: InstructionValue, state: State): boolean {
function hasBackEdge (line 410) | function hasBackEdge(fn: HIRFunction): boolean {
function findBlocksWithBackEdges (line 414) | function findBlocksWithBackEdges(fn: HIRFunction): Set<BlockId> {
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/OptimizeForSSR.ts
function optimizeForSSR (line 42) | function optimizeForSSR(fn: HIRFunction): void {
function hasKnownNonRenderCall (line 245) | function hasKnownNonRenderCall(fn: HIRFunction): boolean {
constant EVENT_HANDLER_PATTERN (line 260) | const EVENT_HANDLER_PATTERN = /^on[A-Z]/;
function isKnownEventHandler (line 261) | function isKnownEventHandler(_tag: string, prop: string): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/OptimizePropsMethodCalls.ts
function optimizePropsMethodCalls (line 35) | function optimizePropsMethodCalls(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/OutlineFunctions.ts
function outlineFunctions (line 10) | function outlineFunctions(
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/OutlineJsx.ts
function outlineJSX (line 34) | function outlineJSX(fn: HIRFunction): void {
type JsxInstruction (line 43) | type JsxInstruction = Instruction & {value: JsxExpression};
type LoadGlobalInstruction (line 44) | type LoadGlobalInstruction = Instruction & {value: LoadGlobal};
type LoadGlobalMap (line 45) | type LoadGlobalMap = Map<IdentifierId, LoadGlobalInstruction>;
type State (line 47) | type State = {
function outlineJsxImpl (line 52) | function outlineJsxImpl(
type OutlinedResult (line 180) | type OutlinedResult = {
function process (line 185) | function process(
type OutlinedJsxAttribute (line 212) | type OutlinedJsxAttribute = {
function collectProps (line 218) | function collectProps(
function emitOutlinedJsx (line 275) | function emitOutlinedJsx(
function emitOutlinedFn (line 321) | function emitOutlinedFn(
function emitLoadGlobals (line 386) | function emitLoadGlobals(
function emitUpdatedJsx (line 405) | function emitUpdatedJsx(
function createOldToNewPropsMapping (line 467) | function createOldToNewPropsMapping(
function emitDestructureProps (line 490) | function emitDestructureProps(
FILE: compiler/packages/babel-plugin-react-compiler/src/Optimization/PruneMaybeThrows.ts
function pruneMaybeThrows (line 38) | function pruneMaybeThrows(fn: HIRFunction): void {
function pruneMaybeThrowsImpl (line 77) | function pruneMaybeThrowsImpl(fn: HIRFunction): Map<BlockId, BlockId> | ...
function instructionMayThrow (line 96) | function instructionMayThrow(instr: Instruction): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignMethodCallScopes.ts
function alignMethodCallScopes (line 21) | function alignMethodCallScopes(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignObjectMethodScopes.ts
function findScopesToMerge (line 25) | function findScopesToMerge(fn: HIRFunction): DisjointSet<ReactiveScope> {
function alignObjectMethodScopes (line 56) | function alignObjectMethodScopes(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts
type InstructionRange (line 28) | type InstructionRange = MutableRange;
function alignReactiveScopesToBlockScopesHIR (line 70) | function alignReactiveScopesToBlockScopesHIR(fn: HIRFunction): void {
type ValueBlockNode (line 286) | type ValueBlockNode = {
type ReactiveScopeNode (line 292) | type ReactiveScopeNode = {
function _debug (line 298) | function _debug(node: ValueBlockNode): string {
function _printNode (line 303) | function _printNode(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AssertScopeInstructionsWithinScope.ts
function assertScopeInstructionsWithinScopes (line 43) | function assertScopeInstructionsWithinScopes(
class FindAllScopesVisitor (line 55) | class FindAllScopesVisitor extends ReactiveFunctionVisitor<Set<ScopeId>> {
method visitScope (line 56) | override visitScope(block: ReactiveScopeBlock, state: Set<ScopeId>): v...
class CheckInstructionsAgainstScopesVisitor (line 62) | class CheckInstructionsAgainstScopesVisitor extends ReactiveFunctionVisi...
method visitPlace (line 67) | override visitPlace(
method visitScope (line 92) | override visitScope(block: ReactiveScopeBlock, state: Set<ScopeId>): v...
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/AssertWellFormedBreakTargets.ts
function assertWellFormedBreakTargets (line 15) | function assertWellFormedBreakTargets(fn: ReactiveFunction): void {
class Visitor (line 19) | class Visitor extends ReactiveFunctionVisitor<Set<BlockId>> {
method visitTerminal (line 20) | override visitTerminal(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/BuildReactiveFunction.ts
function buildReactiveFunction (line 42) | function buildReactiveFunction(fn: HIRFunction): ReactiveFunction {
class Driver (line 59) | class Driver {
method constructor (line 62) | constructor(cx: Context) {
method wrapWithSequence (line 71) | wrapWithSequence(
method extractValueBlockResult (line 107) | extractValueBlockResult(
method valueBlockResultToSequence (line 152) | valueBlockResultToSequence(
method traverseBlock (line 199) | traverseBlock(block: BasicBlock): ReactiveBlock {
method visitBlock (line 205) | visitBlock(block: BasicBlock, blockValue: ReactiveBlock): void {
method visitValueBlock (line 894) | visitValueBlock(
method visitTestBlock (line 994) | visitTestBlock(
method visitValueBlockTerminal (line 1026) | visitValueBlockTerminal(terminal: Terminal): {
method emptyBlock (line 1185) | emptyBlock(): ReactiveBlock {
method visitBreak (line 1189) | visitBreak(
method visitContinue (line 1221) | visitContinue(
class Context (line 1246) | class Context {
method constructor (line 1277) | constructor(ir: HIR) {
method block (line 1281) | block(id: BlockId): BasicBlock {
method scheduleCatchHandler (line 1285) | scheduleCatchHandler(block: BlockId): void {
method reachable (line 1289) | reachable(id: BlockId): boolean {
method schedule (line 1298) | schedule(block: BlockId, type: 'if' | 'switch' | 'case'): number {
method scheduleLoop (line 1309) | scheduleLoop(
method unschedule (line 1341) | unschedule(scheduleId: number): void {
method unscheduleAll (line 1362) | unscheduleAll(scheduleIds: Array<number>): void {
method isScheduled (line 1369) | isScheduled(block: BlockId): boolean {
method getBreakTarget (line 1383) | getBreakTarget(block: BlockId): {
method getContinueTarget (line 1432) | getContinueTarget(
method debugBreakTargets (line 1469) | debugBreakTargets(): Array<ControlFlowTarget> {
type ControlFlowTarget (line 1474) | type ControlFlowTarget =
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts
constant MEMO_CACHE_SENTINEL (line 62) | const MEMO_CACHE_SENTINEL = 'react.memo_cache_sentinel';
constant EARLY_RETURN_SENTINEL (line 63) | const EARLY_RETURN_SENTINEL = 'react.early_return_sentinel';
type CodegenFunction (line 65) | type CodegenFunction = {
function codegenFunction (line 109) | function codegenFunction(
function codegenReactiveFunction (line 333) | function codegenReactiveFunction(
class CountMemoBlockVisitor (line 375) | class CountMemoBlockVisitor extends ReactiveFunctionVisitor<void> {
method constructor (line 382) | constructor(env: Environment) {
method visitScope (line 387) | override visitScope(scopeBlock: ReactiveScopeBlock, state: void): void {
method visitPrunedScope (line 393) | override visitPrunedScope(
function convertParameter (line 403) | function convertParameter(
class Context (line 413) | class Context {
method constructor (line 428) | constructor(
method recordError (line 442) | recordError(error: CompilerErrorDetail): void {
method nextCacheIndex (line 446) | get nextCacheIndex(): number {
method declare (line 450) | declare(identifier: Identifier): void {
method hasDeclared (line 454) | hasDeclared(identifier: Identifier): boolean {
method synthesizeName (line 458) | synthesizeName(name: string): ValidIdentifierName {
function codegenBlock (line 474) | function codegenBlock(cx: Context, block: ReactiveBlock): t.BlockStateme...
function codegenBlockNoReset (line 501) | function codegenBlockNoReset(
function codegenReactiveScope (line 560) | function codegenReactiveScope(
function codegenTerminal (line 737) | function codegenTerminal(
function codegenInstructionNullable (line 1039) | function codegenInstructionNullable(
function codegenForInit (line 1194) | function codegenForInit(
function codegenDependency (line 1246) | function codegenDependency(
function withLoc (line 1274) | function withLoc<T extends (...args: Array<any>) => t.Node>(
function createVariableDeclarator (line 1327) | function createVariableDeclarator(
function createHookGuard (line 1352) | function createHookGuard(
function createCallExpression (line 1392) | function createCallExpression(
type Temporaries (line 1425) | type Temporaries = Map<DeclarationId, t.Expression | t.JSXText | null>;
function codegenLabel (line 1427) | function codegenLabel(id: BlockId): string {
function codegenInstruction (line 1431) | function codegenInstruction(
function convertValueToExpression (line 1468) | function convertValueToExpression(
function codegenInstructionValueToExpression (line 1477) | function codegenInstructionValueToExpression(
function codegenInstructionValue (line 1485) | function codegenInstructionValue(
constant STRING_REQUIRES_EXPR_CONTAINER_PATTERN (line 2124) | const STRING_REQUIRES_EXPR_CONTAINER_PATTERN =
function codegenJsxAttribute (line 2126) | function codegenJsxAttribute(
constant JSX_TEXT_CHILD_REQUIRES_EXPR_CONTAINER_PATTERN (line 2183) | const JSX_TEXT_CHILD_REQUIRES_EXPR_CONTAINER_PATTERN = /[<>&{}]/;
function codegenJsxElement (line 2184) | function codegenJsxElement(
function codegenJsxFbtChildElement (line 2214) | function codegenJsxFbtChildElement(
function convertMemberExpressionToJsx (line 2236) | function convertMemberExpressionToJsx(
function codegenObjectPropertyKey (line 2257) | function codegenObjectPropertyKey(
function codegenArrayPattern (line 2282) | function codegenArrayPattern(
function codegenLValue (line 2321) | function codegenLValue(
function codegenValue (line 2365) | function codegenValue(
function codegenArgument (line 2394) | function codegenArgument(
function codegenPlaceToExpression (line 2405) | function codegenPlaceToExpression(cx: Context, place: Place): t.Expressi...
function codegenPlace (line 2410) | function codegenPlace(cx: Context, place: Place): t.Expression | t.JSXTe...
function convertIdentifier (line 2427) | function convertIdentifier(identifier: Identifier): t.Identifier {
function compareScopeDependency (line 2439) | function compareScopeDependency(
function compareScopeDeclaration (line 2463) | function compareScopeDeclaration(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CollectReactiveIdentifiers.ts
class Visitor (line 20) | class Visitor extends ReactiveFunctionVisitor<Set<IdentifierId>> {
method visitLValue (line 25) | override visitLValue(
method visitPlace (line 38) | override visitPlace(
method visitPrunedScope (line 48) | override visitPrunedScope(
function isStableRefType (line 64) | function isStableRefType(
function collectReactiveIdentifiers (line 74) | function collectReactiveIdentifiers(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CollectReferencedGlobals.ts
function collectReferencedGlobals (line 15) | function collectReferencedGlobals(fn: ReactiveFunction): Set<string> {
class Visitor (line 21) | class Visitor extends ReactiveFunctionVisitor<Set<string>> {
method visitValue (line 22) | override visitValue(
method visitReactiveFunctionValue (line 35) | override visitReactiveFunctionValue(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/ExtractScopeDeclarationsFromDestructuring.ts
function extractScopeDeclarationsFromDestructuring (line 82) | function extractScopeDeclarationsFromDestructuring(
class State (line 93) | class State {
method constructor (line 101) | constructor(env: Environment) {
class Visitor (line 106) | class Visitor extends ReactiveFunctionTransform<State> {
method visitScope (line 107) | override visitScope(scope: ReactiveScopeBlock, state: State): void {
method transformInstruction (line 114) | override transformInstruction(
function transformDestructuring (line 154) | function transformDestructuring(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/FlattenReactiveLoopsHIR.ts
function flattenReactiveLoopsHIR (line 18) | function flattenReactiveLoopsHIR(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/FlattenScopesWithHooksOrUseHIR.ts
function flattenScopesWithHooksOrUseHIR (line 40) | function flattenScopesWithHooksOrUseHIR(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/InferReactiveScopeVariables.ts
function inferReactiveScopeVariables (line 86) | function inferReactiveScopeVariables(fn: HIRFunction): void {
function mergeLocation (line 174) | function mergeLocation(l: SourceLocation, r: SourceLocation): SourceLoca...
function isMutable (line 198) | function isMutable(instr: {id: InstructionId}, place: Place): boolean {
function inRange (line 202) | function inRange(
function mayAllocate (line 209) | function mayAllocate(_env: Environment, instruction: Instruction): boole...
function findDisjointMutableValues (line 272) | function findDisjointMutableValues(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/MemoizeFbtAndMacroOperandsInSameScope.ts
type InlineLevel (line 24) | enum InlineLevel {
type MacroDefinition (line 28) | type MacroDefinition = {
constant SHALLOW_MACRO (line 33) | const SHALLOW_MACRO: MacroDefinition = {
constant TRANSITIVE_MACRO (line 37) | const TRANSITIVE_MACRO: MacroDefinition = {
constant FBT_MACRO (line 41) | const FBT_MACRO: MacroDefinition = {
function memoizeFbtAndMacroOperandsInSameScope (line 73) | function memoizeFbtAndMacroOperandsInSameScope(
constant FBT_TAGS (line 97) | const FBT_TAGS: Map<string, MacroDefinition> = new Map([
constant SINGLE_CHILD_FBT_TAGS (line 107) | const SINGLE_CHILD_FBT_TAGS: Set<string> = new Set([
function populateMacroTags (line 112) | function populateMacroTags(
function mergeMacroArguments (line 162) | function mergeMacroArguments(
function expandFbtScopeRange (line 276) | function expandFbtScopeRange(
function visitOperands (line 287) | function visitOperands(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/MergeReactiveScopesThatInvalidateTogether.ts
function mergeReactiveScopesThatInvalidateTogether (line 86) | function mergeReactiveScopesThatInvalidateTogether(
constant DEBUG (line 94) | const DEBUG: boolean = false;
function log (line 95) | function log(msg: string): void {
class FindLastUsageVisitor (line 101) | class FindLastUsageVisitor extends ReactiveFunctionVisitor<void> {
method visitPlace (line 111) | override visitPlace(id: InstructionId, place: Place, _state: void): vo...
class Transform (line 121) | class Transform extends ReactiveFunctionTransform<ReactiveScopeDependenc...
method constructor (line 125) | constructor(lastUsage: Map<DeclarationId, InstructionId>) {
method transformScope (line 130) | override transformScope(
method visitBlock (line 145) | override visitBlock(
function updateScopeDeclarations (line 405) | function updateScopeDeclarations(
function areLValuesLastUsedByScope (line 422) | function areLValuesLastUsedByScope(
function canMergeScopes (line 437) | function canMergeScopes(
function isAlwaysInvalidatingType (line 505) | function isAlwaysInvalidatingType(type: Type): boolean {
function areEqualDependencies (line 525) | function areEqualDependencies(
function scopeIsEligibleForMerging (line 560) | function scopeIsEligibleForMerging(scopeBlock: ReactiveScopeBlock): bool...
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PrintReactiveFunction.ts
function printReactiveFunctionWithOutlined (line 30) | function printReactiveFunctionWithOutlined(
function printReactiveFunction (line 41) | function printReactiveFunction(fn: ReactiveFunction): string {
function writeReactiveFunction (line 47) | function writeReactiveFunction(fn: ReactiveFunction, writer: Writer): vo...
function printReactiveScopeSummary (line 63) | function printReactiveScopeSummary(scope: ReactiveScope): string {
function writeReactiveBlock (line 96) | function writeReactiveBlock(
function writePrunedScope (line 105) | function writePrunedScope(
function printDependency (line 114) | function printDependency(dependency: ReactiveScopeDependency): string {
function printReactiveInstructions (line 121) | function printReactiveInstructions(
function writeReactiveInstructions (line 129) | function writeReactiveInstructions(
function writeReactiveInstruction (line 140) | function writeReactiveInstruction(
function printReactiveValue (line 184) | function printReactiveValue(value: ReactiveValue): string {
function writeReactiveValue (line 190) | function writeReactiveValue(writer: Writer, value: ReactiveValue): void {
function printReactiveTerminal (line 260) | function printReactiveTerminal(terminal: ReactiveTerminal): string {
function writeTerminal (line 266) | function writeTerminal(writer: Writer, terminal: ReactiveTerminal): void {
class Writer (line 410) | class Writer {
method constructor (line 415) | constructor({depth}: {depth: number} = {depth: 0}) {
method complete (line 420) | complete(): string {
method append (line 428) | append(s: string): void {
method newline (line 432) | newline(): void {
method write (line 440) | write(s: string): void {
method writeLine (line 448) | writeLine(s: string): void {
method indented (line 453) | indented(f: () => void): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PromoteUsedTemporaries.ts
class PromoteTemporaries (line 33) | class PromoteTemporaries extends ReactiveFunctionVisitor<State> {
method visitScope (line 34) | override visitScope(scopeBlock: ReactiveScopeBlock, state: State): void {
method visitPrunedScope (line 56) | override visitPrunedScope(
method visitParam (line 72) | override visitParam(place: Place, state: State): void {
method visitValue (line 78) | override visitValue(
method visitReactiveFunctionValue (line 89) | override visitReactiveFunctionValue(
class PromoteAllInstancedOfPromotedTemporaries (line 109) | class PromoteAllInstancedOfPromotedTemporaries extends ReactiveFunctionV...
method visitPlace (line 110) | override visitPlace(_id: InstructionId, place: Place, state: State): v...
method visitLValue (line 118) | override visitLValue(
method traverseScopeIdentifiers (line 125) | traverseScopeIdentifiers(scope: ReactiveScope, state: State): void {
method visitScope (line 151) | override visitScope(scope: ReactiveScopeBlock, state: State): void {
method visitPrunedScope (line 155) | override visitPrunedScope(
method visitReactiveFunctionValue (line 162) | override visitReactiveFunctionValue(
type JsxExpressionTags (line 172) | type JsxExpressionTags = Set<DeclarationId>;
type State (line 173) | type State = {
class CollectPromotableTemporaries (line 186) | class CollectPromotableTemporaries extends ReactiveFunctionVisitor<State> {
method visitPlace (line 189) | override visitPlace(_id: InstructionId, place: Place, state: State): v...
method visitValue (line 201) | override visitValue(
method visitPrunedScope (line 212) | override visitPrunedScope(
method visitScope (line 225) | override visitScope(scopeBlock: ReactiveScopeBlock, state: State): void {
type InterState (line 232) | type InterState = Map<IdentifierId, [Identifier, boolean]>;
class PromoteInterposedTemporaries (line 233) | class PromoteInterposedTemporaries extends ReactiveFunctionVisitor<Inter...
method constructor (line 247) | constructor(promotable: State, params: Array<Place | SpreadPattern>) {
method visitPlace (line 262) | override visitPlace(
method visitInstruction (line 285) | override visitInstruction(
function promoteUsedTemporaries (line 425) | function promoteUsedTemporaries(fn: ReactiveFunction): void {
function promoteIdentifier (line 452) | function promoteIdentifier(identifier: Identifier, state: State): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PropagateEarlyReturns.ts
function propagateEarlyReturns (line 101) | function propagateEarlyReturns(fn: ReactiveFunction): void {
type State (line 108) | type State = {
class Transform (line 126) | class Transform extends ReactiveFunctionTransform<State> {
method constructor (line 128) | constructor(env: Environment) {
method visitScope (line 133) | override visitScope(
method transformTerminal (line 274) | override transformTerminal(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneAllReactiveScopes.ts
function pruneAllReactiveScopes (line 24) | function pruneAllReactiveScopes(fn: ReactiveFunction): void {
class Transform (line 28) | class Transform extends ReactiveFunctionTransform<void> {
method transformScope (line 29) | override transformScope(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneAlwaysInvalidatingScopes.ts
function pruneAlwaysInvalidatingScopes (line 27) | function pruneAlwaysInvalidatingScopes(fn: ReactiveFunction): void {
class Transform (line 31) | class Transform extends ReactiveFunctionTransform<boolean> {
method transformInstruction (line 35) | override transformInstruction(
method transformScope (line 84) | override transformScope(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneHoistedContexts.ts
function pruneHoistedContexts (line 43) | function pruneHoistedContexts(fn: ReactiveFunction): void {
type VisitorState (line 50) | type VisitorState = {
class Visitor (line 64) | class Visitor extends ReactiveFunctionTransform<VisitorState> {
method visitScope (line 65) | override visitScope(scope: ReactiveScopeBlock, state: VisitorState): v...
method visitPlace (line 82) | override visitPlace(
method transformInstruction (line 98) | override transformInstruction(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts
function pruneNonEscapingScopes (line 113) | function pruneNonEscapingScopes(fn: ReactiveFunction): void {
type MemoizationOptions (line 138) | type MemoizationOptions = {
type MemoizationLevel (line 144) | enum MemoizationLevel {
function joinAliases (line 165) | function joinAliases(
type IdentifierNode (line 190) | type IdentifierNode = {
type ScopeNode (line 199) | type ScopeNode = {
class State (line 205) | class State {
method constructor (line 227) | constructor(env: Environment) {
method declare (line 232) | declare(id: DeclarationId): void {
method visitOperand (line 247) | visitOperand(
function computeMemoizedIdentifiers (line 280) | function computeMemoizedIdentifiers(state: State): Set<DeclarationId> {
type LValueMemoization (line 349) | type LValueMemoization = {
function computePatternLValues (line 354) | function computePatternLValues(pattern: Pattern): Array<LValueMemoizatio...
class CollectDependenciesVisitor (line 397) | class CollectDependenciesVisitor extends ReactiveFunctionVisitor<
method constructor (line 404) | constructor(env: Environment, state: State) {
method computeMemoizationInputs (line 423) | computeMemoizationInputs(
method visitValueForMemoization (line 860) | visitValueForMemoization(
method visitInstruction (line 941) | override visitInstruction(
method visitTerminal (line 952) | override visitTerminal(
method visitScope (line 983) | override visitScope(
class PruneScopesTransform (line 1011) | class PruneScopesTransform extends ReactiveFunctionTransform<
method transformScope (line 1021) | override transformScope(
method transformInstruction (line 1067) | override transformInstruction(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonReactiveDependencies.ts
function pruneNonReactiveDependencies (line 25) | function pruneNonReactiveDependencies(fn: ReactiveFunction): void {
type ReactiveIdentifiers (line 30) | type ReactiveIdentifiers = Set<IdentifierId>;
class Visitor (line 32) | class Visitor extends ReactiveFunctionVisitor<ReactiveIdentifiers> {
method visitInstruction (line 33) | override visitInstruction(
method visitScope (line 93) | override visitScope(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneTemporaryLValues.ts
function pruneUnusedLValues (line 21) | function pruneUnusedLValues(fn: ReactiveFunction): void {
type LValues (line 37) | type LValues = Map<DeclarationId, ReactiveInstruction>;
class Visitor (line 39) | class Visitor extends ReactiveFunctionVisitor<LValues> {
method visitPlace (line 40) | override visitPlace(id: InstructionId, place: Place, state: LValues): ...
method visitInstruction (line 43) | override visitInstruction(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneUnusedLabels.ts
function pruneUnusedLabels (line 24) | function pruneUnusedLabels(fn: ReactiveFunction): void {
type Labels (line 29) | type Labels = Set<BlockId>;
class Transform (line 31) | class Transform extends ReactiveFunctionTransform<Labels> {
method transformTerminal (line 32) | override transformTerminal(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneUnusedScopes.ts
function pruneUnusedScopes (line 21) | function pruneUnusedScopes(fn: ReactiveFunction): void {
type State (line 27) | type State = {
class Transform (line 31) | class Transform extends ReactiveFunctionTransform<State> {
method visitTerminal (line 32) | override visitTerminal(stmt: ReactiveTerminalStatement, state: State):...
method transformScope (line 38) | override transformScope(
function hasOwnDeclaration (line 72) | function hasOwnDeclaration(block: ReactiveScopeBlock): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/RenameVariables.ts
function renameVariables (line 50) | function renameVariables(fn: ReactiveFunction): Set<string> {
function renameVariablesImpl (line 57) | function renameVariablesImpl(
class Visitor (line 74) | class Visitor extends ReactiveFunctionVisitor<Scopes> {
method visitParam (line 75) | override visitParam(place: Place, state: Scopes): void {
method visitLValue (line 78) | override visitLValue(_id: InstructionId, lvalue: Place, state: Scopes)...
method visitPlace (line 81) | override visitPlace(id: InstructionId, place: Place, state: Scopes): v...
method visitBlock (line 84) | override visitBlock(block: ReactiveBlock, state: Scopes): void {
method visitPrunedScope (line 90) | override visitPrunedScope(
method visitScope (line 97) | override visitScope(scope: ReactiveScopeBlock, state: Scopes): void {
method visitValue (line 104) | override visitValue(
method visitReactiveFunctionValue (line 115) | override visitReactiveFunctionValue(
class Scopes (line 125) | class Scopes {
method constructor (line 132) | constructor(globals: Set<string>, programContext: ProgramContext) {
method visit (line 137) | visit(identifier: Identifier): void {
method #lookup (line 171) | #lookup(name: string): DeclarationId | null {
method enter (line 182) | enter(fn: () => void): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/StabilizeBlockIds.ts
function stabilizeBlockIds (line 18) | function stabilizeBlockIds(fn: ReactiveFunction): void {
class CollectReferencedLabels (line 30) | class CollectReferencedLabels extends ReactiveFunctionVisitor<Set<BlockI...
method visitScope (line 31) | override visitScope(scope: ReactiveScopeBlock, state: Set<BlockId>): v...
method visitTerminal (line 38) | override visitTerminal(
class RewriteBlockIds (line 51) | class RewriteBlockIds extends ReactiveFunctionVisitor<Map<BlockId, Block...
method visitScope (line 52) | override visitScope(
method visitTerminal (line 67) | override visitTerminal(
FILE: compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/visitors.ts
function visitReactiveFunction (line 29) | function visitReactiveFunction<TState>(
class ReactiveFunctionVisitor (line 37) | class ReactiveFunctionVisitor<TState = void> {
method visitID (line 38) | visitID(_id: InstructionId, _state: TState): void {}
method visitParam (line 39) | visitParam(_place: Place, _state: TState): void {}
method visitLValue (line 40) | visitLValue(_id: InstructionId, _lvalue: Place, _state: TState): void {}
method visitPlace (line 41) | visitPlace(_id: InstructionId, _place: Place, _state: TState): void {}
method visitReactiveFunctionValue (line 42) | visitReactiveFunctionValue(
method visitValue (line 49) | visitValue(id: InstructionId, value: ReactiveValue, state: TState): vo...
method traverseValue (line 52) | traverseValue(id: InstructionId, value: ReactiveValue, state: TState):...
method visitInstruction (line 84) | visitInstruction(instruction: ReactiveInstruction, state: TState): void {
method traverseInstruction (line 87) | traverseInstruction(instruction: ReactiveInstruction, state: TState): ...
method visitTerminal (line 95) | visitTerminal(stmt: ReactiveTerminalStatement, state: TState): void {
method traverseTerminal (line 98) | traverseTerminal(stmt: ReactiveTerminalStatement, state: TState): void {
method visitScope (line 184) | visitScope(scope: ReactiveScopeBlock, state: TState): void {
method traverseScope (line 187) | traverseScope(scope: ReactiveScopeBlock, state: TState): void {
method visitPrunedScope (line 191) | visitPrunedScope(scopeBlock: PrunedReactiveScopeBlock, state: TState):...
method traversePrunedScope (line 194) | traversePrunedScope(
method visitBlock (line 201) | visitBlock(block: ReactiveBlock, state: TState): void {
method traverseBlock (line 204) | traverseBlock(block: ReactiveBlock, state: TState): void {
method visitHirFunction (line 233) | visitHirFunction(fn: HIRFunction, state: TState): void {
type TransformedValue (line 255) | type TransformedValue =
type Transformed (line 259) | type Transformed<T> =
class ReactiveFunctionTransform (line 265) | class ReactiveFunctionTransform<
method traverseBlock (line 268) | override traverseBlock(block: ReactiveBlock, state: TState): void {
method transformInstruction (line 328) | transformInstruction(
method transformTerminal (line 336) | transformTerminal(
method transformScope (line 344) | transformScope(
method transformPrunedScope (line 352) | transformPrunedScope(
method transformValue (line 360) | transformValue(
method transformReactiveFunctionValue (line 369) | transformReactiveFunctionValue(
method traverseValue (line 379) | override traverseValue(
method traverseInstruction (line 436) | override traverseInstruction(
method traverseTerminal (line 454) | override traverseTerminal(
function mapTerminalBlocks (line 607) | function mapTerminalBlocks(
FILE: compiler/packages/babel-plugin-react-compiler/src/SSA/EliminateRedundantPhi.ts
constant DEBUG (line 22) | const DEBUG = false;
function eliminateRedundantPhi (line 38) | function eliminateRedundantPhi(
function rewritePlace (line 169) | function rewritePlace(
FILE: compiler/packages/babel-plugin-react-compiler/src/SSA/EnterSSA.ts
type IncompletePhi (line 30) | type IncompletePhi = {
type State (line 35) | type State = {
class SSABuilder (line 40) | class SSABuilder {
method constructor (line 49) | constructor(env: Environment, blocks: ReadonlyMap<BlockId, BasicBlock>) {
method nextSsaId (line 54) | get nextSsaId(): IdentifierId {
method defineFunction (line 58) | defineFunction(func: HIRFunction): void {
method enter (line 64) | enter(fn: () => void): void {
method state (line 70) | state(): State {
method makeId (line 78) | makeId(oldId: Identifier): Identifier {
method defineContext (line 93) | defineContext(oldPlace: Place): Place {
method definePlace (line 99) | definePlace(oldPlace: Place): Place {
method getPlace (line 123) | getPlace(oldPlace: Place): Place {
method getIdAt (line 131) | getIdAt(oldPlace: Place, blockId: BlockId): Identifier {
method addPhi (line 186) | addPhi(block: BasicBlock, oldPlace: Place, newPlace: Place): Identifier {
method fixIncompletePhis (line 203) | fixIncompletePhis(block: BasicBlock): void {
method startBlock (line 210) | startBlock(block: BasicBlock): void {
method print (line 218) | print(): void {
function enterSSA (line 240) | function enterSSA(func: HIRFunction): void {
function enterSSAImpl (line 245) | function enterSSAImpl(
FILE: compiler/packages/babel-plugin-react-compiler/src/SSA/RewriteInstructionKindsBasedOnReassignment.ts
function rewriteInstructionKindsBasedOnReassignment (line 31) | function rewriteInstructionKindsBasedOnReassignment(
FILE: compiler/packages/babel-plugin-react-compiler/src/Transform/NameAnonymousFunctions.ts
function nameAnonymousFunctions (line 15) | function nameAnonymousFunctions(fn: HIRFunction): void {
type Node (line 46) | type Node = {
function nameAnonymousFunctionsImpl (line 52) | function nameAnonymousFunctionsImpl(fn: HIRFunction): Array<Node> {
FILE: compiler/packages/babel-plugin-react-compiler/src/TypeInference/InferTypes.ts
function isPrimitiveBinaryOp (line 40) | function isPrimitiveBinaryOp(op: t.BinaryExpression['operator']): boolean {
function inferTypes (line 64) | function inferTypes(func: HIRFunction): void {
function apply (line 72) | function apply(func: HIRFunction, unifier: Unifier): void {
type TypeEquation (line 99) | type TypeEquation = {
function equation (line 104) | function equation(left: Type, right: Type): TypeEquation {
function setName (line 158) | function setName(
function getName (line 168) | function getName(names: Map<IdentifierId, string>, id: IdentifierId): st...
type Substitution (line 524) | type Substitution = Map<TypeId, Type>;
class Unifier (line 525) | class Unifier {
method constructor (line 529) | constructor(env: Environment) {
method unify (line 533) | unify(tA: Type, tB: Type): void {
method bindVariableTo (line 591) | bindVariableTo(v: TypeVar, type: Type): void {
method tryResolveType (line 647) | tryResolveType(v: TypeVar, type: Type): Type | null {
method occursCheck (line 741) | occursCheck(v: TypeVar, type: Type): boolean {
method get (line 759) | get(type: Type): Type {
function isRefLikeName (line 785) | function isRefLikeName(t: PropType): boolean {
function tryUnionTypes (line 793) | function tryUnionTypes(ty1: Type, ty2: Type): Type | null {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/ComponentDeclaration.ts
type ComponentDeclaration (line 10) | type ComponentDeclaration = t.FunctionDeclaration & {
function isComponentDeclaration (line 14) | function isComponentDeclaration(
function parseComponentDeclaration (line 20) | function parseComponentDeclaration(
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/DisjointSet.ts
class DisjointSet (line 12) | class DisjointSet<T> {
method union (line 20) | union(items: Array<T>): void {
method find (line 64) | find(item: T): T | null {
method has (line 80) | has(item: T): boolean {
method canonicalize (line 88) | canonicalize(): Map<T, T> {
method forEach (line 101) | forEach(fn: (item: T, group: T) => void): void {
method buildSets (line 108) | buildSets(): Array<Set<T>> {
method size (line 130) | get size(): number {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/HookDeclaration.ts
type HookDeclaration (line 10) | type HookDeclaration = t.FunctionDeclaration & {
function isHookDeclaration (line 14) | function isHookDeclaration(
function parseHookDeclaration (line 20) | function parseHookDeclaration(
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/Keyword.ts
constant RESERVED_WORDS (line 19) | const RESERVED_WORDS = new Set([
constant STRICT_MODE_RESERVED_WORDS (line 61) | const STRICT_MODE_RESERVED_WORDS = new Set([
constant STRICT_MODE_RESTRICTED_WORDS (line 75) | const STRICT_MODE_RESTRICTED_WORDS = new Set(['eval', 'arguments']);
function isReservedWord (line 81) | function isReservedWord(identifierName: string): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/Result.ts
type Result (line 9) | interface Result<T, E> {
function Ok (line 88) | function Ok<T>(val: T): OkImpl<T> {
class OkImpl (line 92) | class OkImpl<T> implements Result<T, never> {
method constructor (line 94) | constructor(val: T) {
method map (line 98) | map<U>(fn: (val: T) => U): Result<U, never> {
method mapErr (line 102) | mapErr<F>(_fn: (val: never) => F): Result<T, F> {
method mapOr (line 106) | mapOr<U>(_fallback: U, fn: (val: T) => U): U {
method mapOrElse (line 110) | mapOrElse<U>(_fallback: () => U, fn: (val: T) => U): U {
method andThen (line 114) | andThen<U>(fn: (val: T) => Result<U, never>): Result<U, never> {
method and (line 118) | and<U>(res: Result<U, never>): Result<U, never> {
method or (line 122) | or(_res: Result<T, never>): Result<T, never> {
method orElse (line 126) | orElse<F>(_fn: (val: never) => Result<T, F>): Result<T, F> {
method isOk (line 130) | isOk(): this is OkImpl<T> {
method isErr (line 134) | isErr(): this is ErrImpl<never> {
method expect (line 138) | expect(_msg: string): T {
method expectErr (line 142) | expectErr(msg: string): never {
method unwrap (line 146) | unwrap(): T {
method unwrapOr (line 150) | unwrapOr(_fallback: T): T {
method unwrapOrElse (line 154) | unwrapOrElse(_fallback: (val: never) => T): T {
method unwrapErr (line 158) | unwrapErr(): never {
function Err (line 166) | function Err<E>(val: E): ErrImpl<E> {
class ErrImpl (line 170) | class ErrImpl<E> implements Result<never, E> {
method constructor (line 172) | constructor(val: E) {
method map (line 176) | map<U>(_fn: (val: never) => U): Result<U, E> {
method mapErr (line 180) | mapErr<F>(fn: (val: E) => F): Result<never, F> {
method mapOr (line 184) | mapOr<U>(fallback: U, _fn: (val: never) => U): U {
method mapOrElse (line 188) | mapOrElse<U>(fallback: () => U, _fn: (val: never) => U): U {
method andThen (line 192) | andThen<U>(_fn: (val: never) => Result<U, E>): Result<U, E> {
method and (line 196) | and<U>(_res: Result<U, E>): Result<U, E> {
method or (line 200) | or(res: Result<never, E>): Result<never, E> {
method orElse (line 204) | orElse<F>(fn: (val: E) => ErrImpl<F>): Result<never, F> {
method isOk (line 208) | isOk(): this is OkImpl<never> {
method isErr (line 212) | isErr(): this is ErrImpl<E> {
method expect (line 216) | expect(msg: string): never {
method expectErr (line 220) | expectErr(_msg: string): E {
method unwrap (line 224) | unwrap(): never {
method unwrapOr (line 231) | unwrapOr<T>(fallback: T): T {
method unwrapOrElse (line 235) | unwrapOrElse<T>(fallback: (val: E) => T): T {
method unwrapErr (line 239) | unwrapErr(): E {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/RuntimeDiagnosticConstants.ts
type GuardKind (line 9) | enum GuardKind {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/Stack.ts
type Stack (line 9) | type Stack<T> = Node<T> | Empty<T>;
function _assertStackInterface (line 12) | function _assertStackInterface<T>(stack: Stack<T>): void {
type StackInterface (line 22) | interface StackInterface<T> {
function create (line 37) | function create<T>(value: T): Stack<T> {
function empty (line 41) | function empty<T>(): Stack<T> {
class Node (line 45) | class Node<T> implements StackInterface<T> {
method constructor (line 49) | constructor(value: T, next: Stack<T> = EMPTY as any) {
method push (line 54) | push(value: T): Node<T> {
method pop (line 58) | pop(): Stack<T> {
method find (line 62) | find(fn: (value: T) => boolean): boolean {
method contains (line 66) | contains(value: T): boolean {
method each (line 72) | each(fn: (value: T) => void): void {
method value (line 77) | get value(): T {
method print (line 81) | print(fn: (node: T) => string): string {
class Empty (line 86) | class Empty<T> implements StackInterface<T> {
method push (line 87) | push(value: T): Stack<T> {
method pop (line 90) | pop(): Stack<T> {
method find (line 94) | find(_fn: (value: T) => boolean): boolean {
method contains (line 97) | contains(_value: T): boolean {
method each (line 100) | each(_fn: (value: T) => void): void {
method value (line 103) | get value(): T | null {
method print (line 106) | print(_: (node: T) => string): string {
constant EMPTY (line 111) | const EMPTY: Stack<void> = new Empty();
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/TestUtils.ts
function tryParseTestPragmaValue (line 25) | function tryParseTestPragmaValue(val: string): Result<unknown, unknown> {
function parseConfigPragmaEnvironmentForTest (line 76) | function parseConfigPragmaEnvironmentForTest(
function parseConfigPragmaForTests (line 130) | function parseConfigPragmaForTests(
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/todo.ts
function todo (line 8) | function todo(message: string): never {
function todoInvariant (line 12) | function todoInvariant(
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/types.d.ts
type ExtractClassProperties (line 8) | type ExtractClassProperties<C> = {
FILE: compiler/packages/babel-plugin-react-compiler/src/Utils/utils.ts
function assertExhaustive (line 29) | function assertExhaustive(_: never, errorMsg: string): never {
function retainWhere (line 34) | function retainWhere<T>(
function retainWhere_Set (line 48) | function retainWhere_Set<T>(
function getOrInsertWith (line 59) | function getOrInsertWith<U, V>(
function getOrInsertDefault (line 73) | function getOrInsertDefault<U, V>(
function Set_equal (line 85) | function Set_equal<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): boolean {
function Set_union (line 97) | function Set_union<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): Set<T> {
function Set_intersect (line 105) | function Set_intersect<T>(sets: Array<ReadonlySet<T>>): Set<T> {
function Set_isSuperset (line 127) | function Set_isSuperset<T>(
function Iterable_some (line 139) | function Iterable_some<T>(
function nonNull (line 151) | function nonNull<T extends NonNullable<U>, U>(
function Set_filter (line 157) | function Set_filter<T>(
function hasNode (line 170) | function hasNode<T>(
function hasOwnProperty (line 181) | function hasOwnProperty<T>(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateContextVariableLValues.ts
function validateContextVariableLValues (line 20) | function validateContextVariableLValues(fn: HIRFunction): void {
function validateContextVariableLValuesImpl (line 25) | function validateContextVariableLValuesImpl(
type IdentifierKinds (line 93) | type IdentifierKinds = Map<
function visit (line 98) | function visit(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts
constant DEBUG (line 49) | const DEBUG = false;
function validateExhaustiveDependencies (line 90) | function validateExhaustiveDependencies(fn: HIRFunction): void {
function validateDependencies (line 219) | function validateDependencies(
function addDependency (line 495) | function addDependency(
function visitCandidateDependency (line 511) | function visitCandidateDependency(
function collectDependencies (line 569) | function collectDependencies(
function printInferredDependency (line 867) | function printInferredDependency(dep: InferredDependency): string {
function printManualMemoDependency (line 885) | function printManualMemoDependency(dep: ManualMemoDependency): string {
function isEqualTemporary (line 900) | function isEqualTemporary(a: Temporary, b: Temporary): boolean {
type Temporary (line 918) | type Temporary =
type InferredDependency (line 932) | type InferredDependency = Extract<Temporary, {kind: 'Local' | 'Global'}>;
function collectReactiveIdentifiersHIR (line 934) | function collectReactiveIdentifiersHIR(fn: HIRFunction): Set<IdentifierI...
function findOptionalPlaces (line 958) | function findOptionalPlaces(
function isOptionalDependency (line 1041) | function isOptionalDependency(
function createDiagnostic (line 1052) | function createDiagnostic(
function isEffectHook (line 1113) | function isEffectHook(identifier: Identifier): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateHooksUsage.ts
type Kind (line 31) | enum Kind {
function joinKinds (line 61) | function joinKinds(a: Kind, b: Kind): Kind {
function validateHooksUsage (line 86) | function validateHooksUsage(fn: HIRFunction): void {
function visitFunctionExpression (line 423) | function visitFunctionExpression(env: Environment, fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateLocalsNotReassignedAfterRender.ts
function validateLocalsNotReassignedAfterRender (line 24) | function validateLocalsNotReassignedAfterRender(fn: HIRFunction): void {
function getContextReassignment (line 53) | function getContextReassignment(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoCapitalizedCalls.ts
function validateNoCapitalizedCalls (line 13) | function validateNoCapitalizedCalls(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoDerivedComputationsInEffects.ts
function validateNoDerivedComputationsInEffects (line 48) | function validateNoDerivedComputationsInEffects(fn: HIRFunction): void {
function validateEffect (line 101) | function validateEffect(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoDerivedComputationsInEffects_exp.ts
type TypeOfValue (line 31) | type TypeOfValue = 'ignored' | 'fromProps' | 'fromState' | 'fromPropsAnd...
type DerivationMetadata (line 33) | type DerivationMetadata = {
type EffectMetadata (line 40) | type EffectMetadata = {
type ValidationContext (line 45) | type ValidationContext = {
constant MAX_FIXPOINT_ITERATIONS (line 55) | const MAX_FIXPOINT_ITERATIONS = 100;
class DerivationCache (line 57) | class DerivationCache {
method takeSnapshot (line 62) | takeSnapshot(): void {
method checkForChanges (line 74) | checkForChanges(): void {
method snapshot (line 99) | snapshot(): boolean {
method addDerivationEntry (line 105) | addDerivationEntry(
method isDerivationEqual (line 133) | private isDerivationEqual(
function isNamedIdentifier (line 152) | function isNamedIdentifier(place: Place): place is Place & {
function validateNoDerivedComputationsInEffects_exp (line 183) | function validateNoDerivedComputationsInEffects_exp(
function recordPhiDerivations (line 258) | function recordPhiDerivations(
function joinValue (line 289) | function joinValue(
function getRootSetState (line 299) | function getRootSetState(
function maybeRecordSetState (line 322) | function maybeRecordSetState(
function recordInstructionDerivations (line 347) | function recordInstructionDerivations(
type TreeNode (line 494) | type TreeNode = {
function buildTreeNode (line 501) | function buildTreeNode(
function renderTree (line 569) | function renderTree(
function getFnLocalDeps (line 611) | function getFnLocalDeps(
function validateEffect (line 631) | function validateEffect(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoFreezingKnownMutableFunctions.ts
function validateNoFreezingKnownMutableFunctions (line 45) | function validateNoFreezingKnownMutableFunctions(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoImpureFunctionsInRender.ts
function validateNoImpureFunctionsInRender (line 22) | function validateNoImpureFunctionsInRender(fn: HIRFunction): void {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoJSXInTryStatement.ts
function validateNoJSXInTryStatement (line 24) | function validateNoJSXInTryStatement(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoRefAccessInRender.ts
type RefId (line 54) | type RefId = number & {[opaqueRefId]: 'RefId'};
function makeRefId (line 56) | function makeRefId(id: number): RefId {
function nextRefId (line 64) | function nextRefId(): RefId {
type RefAccessType (line 68) | type RefAccessType =
type RefAccessRefType (line 74) | type RefAccessRefType =
type RefFnType (line 79) | type RefFnType = {readRefEffect: boolean; returnType: RefAccessType};
class Env (line 81) | class Env {
method lookup (line 86) | lookup(place: Place): Place {
method define (line 90) | define(place: Place, value: Place): void {
method resetChanged (line 94) | resetChanged(): void {
method hasChanged (line 98) | hasChanged(): boolean {
method get (line 102) | get(key: IdentifierId): RefAccessType | undefined {
method set (line 107) | set(key: IdentifierId, value: RefAccessType): this {
function validateNoRefAccessInRender (line 122) | function validateNoRefAccessInRender(fn: HIRFunction): void {
function collectTemporariesSidemap (line 132) | function collectTemporariesSidemap(fn: HIRFunction, env: Env): void {
function refTypeOfType (line 170) | function refTypeOfType(place: Place): RefAccessType {
function tyEqual (line 180) | function tyEqual(a: RefAccessType, b: RefAccessType): boolean {
function joinRefAccessTypes (line 223) | function joinRefAccessTypes(...types: Array<RefAccessType>): RefAccessTy...
function validateNoRefAccessInRenderImpl (line 306) | function validateNoRefAccessInRenderImpl(
function destructure (line 842) | function destructure(
function guardCheck (line 851) | function guardCheck(errors: CompilerError, operand: Place, env: Env): vo...
function validateNoRefValueAccess (line 867) | function validateNoRefValueAccess(
function validateNoRefPassedToFunction (line 891) | function validateNoRefPassedToFunction(
function validateNoRefUpdate (line 917) | function validateNoRefUpdate(
function validateNoDirectRefValueAccess (line 939) | function validateNoDirectRefValueAccess(
constant ERROR_DESCRIPTION (line 960) | const ERROR_DESCRIPTION =
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoSetStateInEffects.ts
function validateNoSetStateInEffects (line 45) | function validateNoSetStateInEffects(
function getSetStateCall (line 188) | function getSetStateCall(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoSetStateInRender.ts
function validateNoSetStateInRender (line 45) | function validateNoSetStateInRender(fn: HIRFunction): void {
function validateNoSetStateInRenderImpl (line 56) | function validateNoSetStateInRenderImpl(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts
function validatePreservedManualMemoization (line 50) | function validatePreservedManualMemoization(fn: ReactiveFunction): void {
constant DEBUG (line 58) | const DEBUG = false;
type ManualMemoBlockState (line 60) | type ManualMemoBlockState = {
type VisitorState (line 112) | type VisitorState = {
function prettyPrintScopeDependency (line 117) | function prettyPrintScopeDependency(val: ReactiveScopeDependency): string {
type CompareDependencyResult (line 127) | enum CompareDependencyResult {
function merge (line 135) | function merge(
function getCompareDependencyResultDescription (line 142) | function getCompareDependencyResultDescription(
function compareDeps (line 158) | function compareDeps(
function validateInferredDep (line 228) | function validateInferredDep(
class Visitor (line 315) | class Visitor extends ReactiveFunctionVisitor<VisitorState> {
method recordDepsInValue (line 334) | recordDepsInValue(value: ReactiveValue, state: VisitorState): void {
method recordTemporaries (line 387) | recordTemporaries(instr: ReactiveInstruction, state: VisitorState): vo...
method visitScope (line 413) | override visitScope(
method visitPrunedScope (line 441) | override visitPrunedScope(
method visitInstruction (line 449) | override visitInstruction(
function isUnmemoized (line 616) | function isUnmemoized(operand: Identifier, scopes: Set<ScopeId>): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateSourceLocations.ts
constant IMPORTANT_INSTRUMENTED_TYPES (line 36) | const IMPORTANT_INSTRUMENTED_TYPES = new Set([
function isManualMemoization (line 76) | function isManualMemoization(node: t.Node): boolean {
function locationKey (line 103) | function locationKey(loc: t.SourceLocation): string {
function validateSourceLocations (line 121) | function validateSourceLocations(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateStaticComponents.ts
function validateStaticComponents (line 20) | function validateStaticComponents(
FILE: compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateUseMemo.ts
function validateUseMemo (line 25) | function validateUseMemo(fn: HIRFunction): void {
function validateNoContextVariableAssignment (line 181) | function validateNoContextVariableAssignment(
function hasNonVoidReturn (line 214) | function hasNonVoidReturn(func: HIRFunction): boolean {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/DisjointSet-test.ts
type TestIdentifier (line 10) | type TestIdentifier = {
function makeIdentifier (line 17) | function makeIdentifier(name: string): TestIdentifier {
function makeIdentifiers (line 24) | function makeIdentifiers(...names: string[]): TestIdentifier[] {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/Logger-test.ts
method logEvent (line 16) | logEvent(filename, event) {
method logEvent (line 40) | logEvent(filename, event) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/Result-test.ts
function addMax10 (line 11) | function addMax10(a: number, b: number): Result<number, string> {
function onlyFoo (line 16) | function onlyFoo(foo: string): Result<string, string> {
class CustomDummyError (line 20) | class CustomDummyError extends Error {}
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/constant-prop.e2e.js
function Component (line 14) | function Component() {
function Component (line 41) | function Component() {
function Component (line 69) | function Component() {
function Component (line 97) | function Component({noopCallback}) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/expectLogs.js
function log (line 10) | function log(message) {
function expectLogsAndClear (line 14) | function expectLogsAndClear(expected) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/hello.e2e.js
function Hello (line 12) | function Hello({name}) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/update-button.e2e.js
function Button (line 11) | function Button({label}) {
function useTheme (line 18) | function useTheme() {
function computeStyle (line 24) | function computeStyle(theme) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/update-expressions.e2e.js
function Counter (line 12) | function Counter(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/e2e/use-state.e2e.js
function Counter (line 13) | function Counter() {
function Title (line 26) | function Title({text}) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-capture-in-method-receiver-and-mutate.js
function Component (line 3) | function Component() {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-capture-in-method-receiver.js
function Component (line 1) | function Component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-computed-load.js
function component (line 1) | function component(a) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-nested-member-path-mutate.js
function component (line 1) | function component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-nested-member-path.js
function component (line 1) | function component() {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/alias-while.js
function foo (line 1) | function foo(cond) {
function mutate (line 18) | function mutate(x, y) {}
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/aliased-nested-scope-fn-expr.tsx
function Component (line 26) | function Component({prop}) {
constant FIXTURE_ENTRYPOINT (line 42) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/aliased-nested-scope-truncated-dep.tsx
function Component (line 73) | function Component({prop}) {
constant FIXTURE_ENTRYPOINT (line 89) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scope-starts-within-cond.ts
function useFoo (line 7) | function useFoo(cond) {
constant FIXTURE_ENTRYPOINT (line 18) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-iife-return-modified-later-logical.ts
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-nested-block-structure.ts
function useFoo (line 41) | function useFoo({cond1, cond2}) {
constant FIXTURE_ENTRYPOINT (line 56) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-reactive-scope-overlaps-if.ts
function useFoo (line 1) | function useFoo({cond}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-reactive-scope-overlaps-label.ts
function useFoo (line 3) | function useFoo({cond, value}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-reactive-scope-overlaps-try.ts
function useFoo (line 3) | function useFoo({value}) {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-trycatch-nested-overlapping-range.ts
function Foo (line 3) | function Foo() {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/align-scopes-within-nested-valueblock-in-array.tsx
function Foo (line 13) | function Foo({cond1, cond2}) {
constant FIXTURE_ENTRYPOINT (line 24) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allocating-logical-expression-instruction-scope.ts
function Foo (line 8) | function Foo() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allocating-primitive-as-dep-nested-scope.js
function AllocatingPrimitiveAsDepNested (line 8) | function AllocatingPrimitiveAsDepNested(props) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allocating-primitive-as-dep.js
function AllocatingPrimitiveAsDep (line 6) | function AllocatingPrimitiveAsDep(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-assigning-ref-accessing-function-to-object-property-if-not-mutated.js
function Component (line 4) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-assigning-to-global-in-function-spread-as-jsx.js
function Component (line 2) | function Component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-global-mutation-in-effect-indirect-usecallback.js
function Component (line 6) | function Component() {
constant FIXTURE_ENTRYPOINT (line 23) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-global-mutation-in-effect-indirect.js
function Component (line 5) | function Component() {
constant FIXTURE_ENTRYPOINT (line 22) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-global-mutation-unused-usecallback.js
function Component (line 3) | function Component() {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-global-reassignment-in-effect-indirect.js
function Component (line 5) | function Component() {
constant FIXTURE_ENTRYPOINT (line 22) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-global-reassignment-in-effect.js
function Component (line 5) | function Component() {
constant FIXTURE_ENTRYPOINT (line 19) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-merge-refs-pattern.js
function Component (line 5) | function Component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-modify-global-in-callback-jsx.js
function Component (line 6) | function Component({value}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-mutate-global-in-effect-fixpoint.js
function Component (line 5) | function Component() {
constant FIXTURE_ENTRYPOINT (line 34) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-mutating-ref-in-callback-passed-to-jsx-indirect.tsx
function Component (line 4) | function Component() {
constant FIXTURE_ENTRYPOINT (line 25) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-mutating-ref-in-callback-passed-to-jsx.tsx
function Component (line 4) | function Component() {
constant FIXTURE_ENTRYPOINT (line 21) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-mutating-ref-property-in-callback-passed-to-jsx-indirect.tsx
function Component (line 4) | function Component() {
constant FIXTURE_ENTRYPOINT (line 25) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-mutating-ref-property-in-callback-passed-to-jsx.tsx
function Component (line 4) | function Component() {
constant FIXTURE_ENTRYPOINT (line 21) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-passing-ref-to-render-helper-props-object.js
function Component (line 5) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-passing-ref-to-render-helper.js
function Component (line 5) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-passing-refs-as-props.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-reassignment-to-global-function-jsx-prop.js
function Component (line 1) | function Component() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-access-in-effect-indirect.js
function Component (line 4) | function Component() {
function Child (line 25) | function Child({ref}) {
constant FIXTURE_ENTRYPOINT (line 32) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-access-in-effect.js
function Component (line 4) | function Component() {
function Child (line 21) | function Child({ref}) {
constant FIXTURE_ENTRYPOINT (line 28) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-access-in-unused-callback-nested.js
function Component (line 4) | function Component() {
function Child (line 23) | function Child({ref}) {
constant FIXTURE_ENTRYPOINT (line 30) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-initialization-undefined.js
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-initialization.js
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-lazy-initialization-with-logical.js
function Component (line 5) | function Component(props) {
function Child (line 16) | function Child({ref}) {
constant FIXTURE_ENTRYPOINT (line 21) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/allow-ref-type-cast-in-render.js
function useArrayOfRef (line 3) | function useArrayOfRef() {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-access-assignment.js
function Component (line 1) | function Component({a, b, c}) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-at-closure.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-at-effect.js
function ArrayAtTest (line 5) | function ArrayAtTest(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-at-mutate-after-capture.js
function Component (line 3) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-concat-should-capture.ts
function Foo (line 10) | function Foo({inputNum}) {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-expression-spread.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 6) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-from-arg1-captures-arg0.js
function Component (line 15) | function Component({value}) {
constant FIXTURE_ENTRYPOINT (line 22) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-from-captures-arg0.js
function Component (line 15) | function Component({value}) {
constant FIXTURE_ENTRYPOINT (line 22) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-from-maybemutates-arg0.js
function Component (line 3) | function Component({value}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-join.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-captures-receiver-noAlias.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-frozen-array-noAlias.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-frozen-array.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-mutable-array-mutating-lambda-noAlias.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-mutable-array-mutating-lambda.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-mutable-array-non-mutating-lambda-mutated-result.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-map-noAlias-escaping-function.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 7) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-pattern-params.js
function component (line 1) | function component([a, b]) {
constant FIXTURE_ENTRYPOINT (line 7) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-pattern-spread-creates-array.js
function Component (line 5) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 25) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-properties.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-property-call.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-push-effect.js
function Component (line 4) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-spread-later-mutated.js
function useBar (line 1) | function useBar({arg}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/array-spread-mutable-iterator.js
function useBar (line 14) | function useBar({arg}) {
constant FIXTURE_ENTRYPOINT (line 28) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/arrow-expr-directive.js
function Component (line 1) | function Component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/arrow-function-one-line-directive.js
function useFoo (line 1) | function useFoo() {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/arrow-function-with-implicit-return.js
constant FIXTURE_ENTRYPOINT (line 4) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-expression-computed.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-expression-nested-path.js
function g (line 1) | function g(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-in-nested-if.js
function useBar (line 1) | function useBar(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-variations-complex-lvalue-array.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-variations-complex-lvalue.js
function g (line 1) | function g() {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/assignment-variations.js
function f (line 1) | function f() {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/await-side-effecting-promise.js
function Component (line 1) | async function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/await.js
function Component (line 1) | async function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/babel-existing-react-import.js
function Component (line 3) | function Component(props) {
function Component2 (line 10) | function Component2(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/babel-existing-react-kitchensink-import.js
function Component (line 4) | function Component(props) {
function Component2 (line 11) | function Component2(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/babel-existing-react-namespace-import.js
function Component (line 4) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/babel-existing-react-runtime-import.js
function Component (line 5) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/babel-repro-compact-negative-number.js
function Repro (line 3) | function Repro(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/block-scoping-switch-dead-code.js
function useHook (line 1) | function useHook(a, b) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/block-scoping-switch-variable-scoping.js
function Component (line 4) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 20) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-capturing-func-maybealias-captured-mutate.ts
function Component (line 28) | function Component({foo, bar}: {foo: number; bar: number}) {
constant FIXTURE_ENTRYPOINT (line 42) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-ref-prefix-postfix-operator.js
function useFoo (line 21) | function useFoo() {
constant FIXTURE_ENTRYPOINT (line 39) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-separate-memoization-due-to-callback-capturing.js
function Component (line 11) | function Component(a) {
constant FIXTURE_ENTRYPOINT (line 37) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-type-inference-control-flow.ts
function useFoo (line 20) | function useFoo({cond, value}: {cond: boolean; value: number}) {
constant FIXTURE_ENTRYPOINT (line 34) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/builtin-jsx-tag-lowered-between-mutations.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call-args-assignment.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call-args-destructuring-assignment.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call-spread-argument-mutable-iterator.js
function useFoo (line 3) | function useFoo() {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call-spread.js
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call-with-independently-memoizable-arg.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/call.js
function foo (line 1) | function foo() {}
function Component (line 3) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture-indirect-mutate-alias-iife.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture-indirect-mutate-alias.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture-param-mutate.js
function getNativeLogFunction (line 1) | function getNativeLogFunction(level) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture-ref-for-later-mutation.tsx
function useKeyCommand (line 4) | function useKeyCommand() {
constant FIXTURE_ENTRYPOINT (line 20) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture_mutate-across-fns-iife.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capture_mutate-across-fns.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-arrow-function-1.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-fun-alias-captured-mutate-2-iife.js
function component (line 3) | function component(foo, bar) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-fun-alias-captured-mutate-2.js
function Component (line 3) | function Component({foo, bar}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-fun-alias-captured-mutate-arr-2-iife.js
function component (line 3) | function component(foo, bar) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-fun-alias-captured-mutate-arr-2.js
function Component (line 3) | function Component({foo, bar}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-captured-mutate-arr-iife.js
function component (line 3) | function component(foo, bar) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-captured-mutate-arr.js
function Component (line 2) | function Component({foo, bar}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-captured-mutate-iife.js
function component (line 3) | function component(foo, bar) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-captured-mutate.js
function Component (line 3) | function Component({foo, bar}) {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-computed-mutate-iife.js
function component (line 3) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-computed-mutate.js
function Component (line 2) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-mutate-iife.js
function component (line 3) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-mutate.js
function Component (line 2) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-receiver-computed-mutate-iife.js
function component (line 3) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-receiver-computed-mutate.js
function Component (line 3) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-receiver-mutate-iife.js
function component (line 3) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-alias-receiver-mutate.js
function Component (line 3) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-mutate-2.js
function component (line 1) | function component(a, b) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-mutate-3.js
function component (line 1) | function component(a, b) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-mutate-nested.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-mutate.js
function Component (line 3) | function Component({a, b}) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-no-mutate.js
function Component (line 1) | function Component({a, b}) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-simple-alias-iife.js
function component (line 3) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-func-simple-alias.js
function Component (line 3) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-1.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-2-iife.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-2.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-3-iife.js
function bar (line 1) | function bar(a, b) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-3.js
function bar (line 1) | function bar(a, b) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-4-iife.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-4.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load-iife.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-alias-computed-load.js
function bar (line 1) | function bar(a) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-capture-ref-before-rename.js
function Component (line 3) | function Component({a, b}) {
constant FIXTURE_ENTRYPOINT (line 18) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-conditional-capture-mutate.js
function useHook (line 1) | function useHook(a, b) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-decl.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-member-expr-arguments.js
function Foo (line 1) | function Foo(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-member-expr-call.js
function component (line 1) | function component({mutator}) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-renamed-ref.js
function useHook (line 3) | function useHook({a, b}) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-runs-inference.js
function Component (line 2) | function Component({a, b}) {
constant FIXTURE_ENTRYPOINT (line 7) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-shadow-captured.js
function Component (line 2) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-skip-computed-path.js
function StoreLandingUnseenGiftModalContainer (line 1) | function StoreLandingUnseenGiftModalContainer(a) {
constant FIXTURE_ENTRYPOINT (line 6) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-function-within-block.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-member-expr.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-nested-member-call.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-nested-member-expr-in-nested-func.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-nested-member-expr.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-reference-changes-type.js
function Component (line 2) | function Component({a}) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-variable-in-nested-block.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/capturing-variable-in-nested-function.js
function component (line 1) | function component(a) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/chained-assignment-context-variable.js
function Component (line 3) | function Component() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/chained-assignment-expressions.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/class-component-with-render-helper.js
class Component (line 2) | class Component {
method render (line 11) | render() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/codegen-inline-iife-reassign.ts
function useTest (line 3) | function useTest() {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/codegen-inline-iife-storeprop.ts
function useTest (line 3) | function useTest() {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/codegen-inline-iife.ts
function useTest (line 3) | function useTest() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/codegen-instrument-forget-test.js
function Bar (line 3) | function Bar(props) {
function NoForget (line 8) | function NoForget(props) {
function Foo (line 12) | function Foo(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/complex-while.js
function foo (line 1) | function foo(a, b, c) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/component-declaration-basic.flow.js
function shouldNotCompile (line 10) | function shouldNotCompile() {}
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/component-inner-function-with-many-args.tsx
function Component (line 2) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/component.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 28) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/computed-call-evaluation-order.js
function Component (line 2) | function Component() {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/computed-call-spread.js
function Component (line 1) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/computed-load-primitive-as-dependency.js
function Component (line 2) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/computed-store-alias.js
function useHook (line 2) | function useHook({a, b}) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/concise-arrow-expr.js
function component (line 1) | function component() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conditional-break-labeled.js
function Component (line 4) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conditional-early-return.js
function ComponentA (line 4) | function ComponentA(props) {
function ComponentB (line 17) | function ComponentB(props) {
function ComponentC (line 30) | function ComponentC(props) {
function ComponentD (line 44) | function ComponentD(props) {
constant FIXTURE_ENTRYPOINT (line 55) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conditional-on-mutable.js
function ComponentA (line 1) | function ComponentA(props) {
function ComponentB (line 13) | function ComponentB(props) {
function Foo (line 25) | function Foo() {}
function mayMutate (line 26) | function mayMutate() {}
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conditional-set-state-in-render.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conflict-codegen-instrument-forget.js
function Bar (line 5) | function Bar(props) {
function Foo (line 20) | function Foo(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/conflicting-dollar-sign-variable.js
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/consecutive-use-memo.ts
function useHook (line 4) | function useHook({a, b}) {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/console-readonly.js
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/const-propagation-into-function-expression-global.js
function foo (line 1) | function foo() {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/const-propagation-into-function-expression-primitive.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/const-propagation-phi-nodes.ts
function useFoo (line 1) | function useFoo(setOne: boolean) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-computed.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-prop-across-objectmethod-def.js
function Component (line 6) | function Component() {
constant FIXTURE_ENTRYPOINT (line 17) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-prop-colliding-identifier.js
function Component (line 3) | function Component() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-prop-to-object-method.js
function Foo (line 3) | function Foo() {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagate-global-phis-constant.js
function useFoo (line 2) | function useFoo() {
function Test (line 7) | function Test() {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagate-global-phis.js
function useFoo (line 3) | function useFoo() {
function Test (line 8) | function Test() {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-bit-ops.js
function foo (line 3) | function foo() {
constant FIXTURE_ENTRYPOINT (line 32) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-for.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 9) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-into-function-expressions.js
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-phi.js
function foo (line 1) | function foo(a, b, c) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-string-concat.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 7) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-template-literal.js
function foo (line 4) | function foo() {
constant FIXTURE_ENTRYPOINT (line 53) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-unary-number.js
function foo (line 3) | function foo() {
constant FIXTURE_ENTRYPOINT (line 21) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-unary.js
function foo (line 3) | function foo() {
constant FIXTURE_ENTRYPOINT (line 31) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation-while.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 10) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constant-propagation.js
function foo (line 1) | function foo() {
constant FIXTURE_ENTRYPOINT (line 20) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/constructor.js
function Foo (line 1) | function Foo() {}
function Component (line 3) | function Component(props) {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-as-jsx-element-tag.js
function Component (line 5) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reactive-explicit-control-flow.js
function Component (line 3) | function Component({shouldReassign}) {
constant FIXTURE_ENTRYPOINT (line 14) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reactive-implicit-control-flow.js
function Component (line 6) | function Component({shouldReassign}) {
constant FIXTURE_ENTRYPOINT (line 15) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reassigned-objectmethod.js
function Component (line 3) | function Component({cond}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reassigned-outside-of-lambda.js
function Component (line 3) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reassigned-reactive-capture.js
function Component (line 3) | function Component({value}) {
constant FIXTURE_ENTRYPOINT (line 12) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/context-variable-reassigned-two-lambdas.js
function Component (line 3) | function Component({doReassign1, doReassign2}) {
constant FIXTURE_ENTRYPOINT (line 16) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/controlled-input.js
function component (line 2) | function component() {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/createElement-freeze.js
function Component (line 4) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/custom-opt-out-directive.tsx
function Component (line 2) | function Component() {
constant FIXTURE_ENTRYPOINT (line 7) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/dce-loop.js
function foo (line 1) | function foo(props) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/dce-unused-const.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 6) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/dce-unused-postfix-update.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/dce-unused-prefix-update.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/debugger-memoized.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 8) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/debugger.js
function Component (line 1) | function Component(props) {
constant FIXTURE_ENTRYPOINT (line 13) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/declare-reassign-variable-in-closure.js
function Component (line 1) | function Component(p) {
constant FIXTURE_ENTRYPOINT (line 11) | const FIXTURE_ENTRYPOINT = {
FILE: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/deeply-nested-function-expressions-with-params.js
function Fo
Copy disabled (too large)
Download .json
Condensed preview — 6660 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (28,025K chars).
[
{
"path": ".claude/instructions.md",
"chars": 1272,
"preview": "# React\n\n**Scope**: All code EXCEPT `/compiler/` (compiler has its own instructions).\n\n## Project Structure\n\n| Directory"
},
{
"path": ".claude/settings.json",
"chars": 997,
"preview": "{\n \"hooks\": {\n \"SessionStart\": [\n {\n \"hooks\": [\n {\n \"type\": \"command\",\n \""
},
{
"path": ".claude/skills/extract-errors/SKILL.md",
"chars": 285,
"preview": "---\nname: extract-errors\ndescription: Use when adding new error messages to React, or seeing \"unknown error code\" warnin"
},
{
"path": ".claude/skills/feature-flags/SKILL.md",
"chars": 2618,
"preview": "---\nname: feature-flags\ndescription: Use when feature flag tests fail, flags need updating, understanding @gate pragmas,"
},
{
"path": ".claude/skills/fix/SKILL.md",
"chars": 495,
"preview": "---\nname: fix\ndescription: Use when you have lint errors, formatting issues, or before committing code to ensure it pass"
},
{
"path": ".claude/skills/flags/SKILL.md",
"chars": 1006,
"preview": "---\nname: flags\ndescription: Use when you need to check feature flag states, compare channels, or debug why a feature be"
},
{
"path": ".claude/skills/flow/SKILL.md",
"chars": 884,
"preview": "---\nname: flow\ndescription: Use when you need to run Flow type checking, or when seeing Flow type errors in React code.\n"
},
{
"path": ".claude/skills/test/SKILL.md",
"chars": 2081,
"preview": "---\nname: test\ndescription: Use when you need to run tests for React core. Supports source, www, stable, and experimenta"
},
{
"path": ".claude/skills/verify/SKILL.md",
"chars": 724,
"preview": "---\nname: verify\ndescription: Use when you want to validate changes before committing, or when you need to check all Rea"
},
{
"path": ".codesandbox/ci.json",
"chars": 492,
"preview": "{\n \"packages\": [\"packages/react\", \"packages/react-dom\", \"packages/react-server-dom-webpack\", \"packages/scheduler\"],\n \""
},
{
"path": ".editorconfig",
"chars": 229,
"preview": "# https://editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = space\ninsert"
},
{
"path": ".eslintignore",
"chars": 889,
"preview": "# Third party\n**/node_modules\n\n# Not written by hand\npackages/react-art/npm/lib\n\n# Build products\nbuild/\ncoverage/\nfixtu"
},
{
"path": ".eslintrc.js",
"chars": 20909,
"preview": "'use strict';\n\nconst {\n es5Paths,\n esNextPaths,\n} = require('./scripts/shared/pathsByLanguageVersion');\n\nconst restric"
},
{
"path": ".git-blame-ignore-revs",
"chars": 82,
"preview": "c998bb1ed4b3285398c9c7797135d3f060243c6a\nfd2b3e13d330a4559f5aa21462e1cb2cbbcf144b\n"
},
{
"path": ".gitattributes",
"chars": 12,
"preview": "* text=auto\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1064,
"preview": "---\nname: \"🐛 Bug Report\"\nabout: Report a reproducible bug or regression.\ntitle: 'Bug: '\nlabels: 'Status: Unconfirmed'\n\n-"
},
{
"path": ".github/ISSUE_TEMPLATE/compiler_bug_report.yml",
"chars": 2426,
"preview": "name: \"⚛️ ✨ Compiler bug report\"\ndescription: \"Report a problem with React Compiler. Please provide enough information t"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 462,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: 📃 Documentation Issue\n url: https://github.com/reactjs/react"
},
{
"path": ".github/ISSUE_TEMPLATE/devtools_bug_report.yml",
"chars": 2411,
"preview": "name: \"⚛️ 🛠 DevTools bug report\"\ndescription: \"Report a problem with React DevTools. Please provide enough information t"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1715,
"preview": "<!--\n Thanks for submitting a pull request!\n We appreciate you spending the time to work on these changes. Please prov"
},
{
"path": ".github/dependabot.yml",
"chars": 201,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"npm\"\n directories:\n - \"/fixtures/*\"\n schedule:\n interval: \"m"
},
{
"path": ".github/workflows/compiler_discord_notify.yml",
"chars": 2089,
"preview": "name: (Compiler) Discord Notify\n\non:\n pull_request_target:\n types: [opened, ready_for_review]\n paths:\n - com"
},
{
"path": ".github/workflows/compiler_playground.yml",
"chars": 2422,
"preview": "name: (Compiler) Playground\n\non:\n push:\n branches: [main]\n pull_request:\n paths:\n - compiler/**\n - .gi"
},
{
"path": ".github/workflows/compiler_prereleases.yml",
"chars": 2256,
"preview": "name: (Compiler) Publish Prereleases\n\non:\n workflow_call:\n inputs:\n commit_sha:\n required: true\n "
},
{
"path": ".github/workflows/compiler_prereleases_manual.yml",
"chars": 1031,
"preview": "name: (Compiler) Publish Prereleases Manual\n\non:\n workflow_dispatch:\n inputs:\n prerelease_commit_sha:\n r"
},
{
"path": ".github/workflows/compiler_prereleases_nightly.yml",
"chars": 597,
"preview": "name: (Compiler) Publish Prereleases Nightly\n\non:\n schedule:\n # At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and "
},
{
"path": ".github/workflows/compiler_typescript.yml",
"chars": 3592,
"preview": "name: (Compiler) TypeScript\n\non:\n push:\n branches: [main]\n pull_request:\n paths:\n - compiler/**\n - .gi"
},
{
"path": ".github/workflows/devtools_discord_notify.yml",
"chars": 2103,
"preview": "name: (DevTools) Discord Notify\n\non:\n pull_request_target:\n types: [opened, ready_for_review]\n paths:\n - pac"
},
{
"path": ".github/workflows/devtools_regression_tests.yml",
"chars": 7412,
"preview": "name: (DevTools) Regression Tests\n\non:\n schedule:\n - cron: 0 0 * * *\n workflow_dispatch:\n inputs:\n commit_s"
},
{
"path": ".github/workflows/runtime_build_and_test.yml",
"chars": 37839,
"preview": "name: (Runtime) Build and Test\n\non:\n push:\n branches: [main]\n tags:\n # To get CI for backport releases.\n "
},
{
"path": ".github/workflows/runtime_commit_artifacts.yml",
"chars": 24548,
"preview": "name: (Runtime) Commit Artifacts for Meta WWW and fbsource V2\n\non:\n workflow_run:\n workflows: [\"(Runtime) Build and "
},
{
"path": ".github/workflows/runtime_discord_notify.yml",
"chars": 2161,
"preview": "name: (Runtime) Discord Notify\n\non:\n pull_request_target:\n types: [opened, ready_for_review]\n paths-ignore:\n "
},
{
"path": ".github/workflows/runtime_eslint_plugin_e2e.yml",
"chars": 2027,
"preview": "name: (Runtime) ESLint Plugin E2E\n\non:\n push:\n branches: [main]\n pull_request:\n paths-ignore:\n - compiler/*"
},
{
"path": ".github/workflows/runtime_fuzz_tests.yml",
"chars": 686,
"preview": "name: (Runtime) Fuzz tests\n\non:\n schedule:\n - cron: 0 * * * *\n push:\n branches:\n - main\n workflow_dispatch"
},
{
"path": ".github/workflows/runtime_prereleases.yml",
"chars": 4306,
"preview": "name: (Runtime) Publish Prereleases\n\non:\n workflow_call:\n inputs:\n commit_sha:\n required: true\n d"
},
{
"path": ".github/workflows/runtime_prereleases_manual.yml",
"chars": 3888,
"preview": "name: (Runtime) Publish Prereleases Manual\n\non:\n workflow_dispatch:\n inputs:\n prerelease_commit_sha:\n re"
},
{
"path": ".github/workflows/runtime_prereleases_nightly.yml",
"chars": 1713,
"preview": "name: (Runtime) Publish Prereleases Nightly\n\non:\n schedule:\n # At 10 minutes past 16:00 on Mon, Tue, Wed, Thu, and F"
},
{
"path": ".github/workflows/runtime_releases_from_npm_manual.yml",
"chars": 4782,
"preview": "name: (Runtime) Publish Releases from NPM Manual\n\non:\n workflow_dispatch:\n inputs:\n version_to_promote:\n "
},
{
"path": ".github/workflows/shared_check_maintainer.yml",
"chars": 1847,
"preview": "name: (Shared) Check maintainer\n\non:\n workflow_call:\n inputs:\n actor:\n required: true\n type: stri"
},
{
"path": ".github/workflows/shared_cleanup_merged_branch_caches.yml",
"chars": 1308,
"preview": "# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-e"
},
{
"path": ".github/workflows/shared_cleanup_stale_branch_caches.yml",
"chars": 1184,
"preview": "# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-e"
},
{
"path": ".github/workflows/shared_close_direct_sync_branch_prs.yml",
"chars": 1225,
"preview": "name: (Shared) Close Direct Sync Branch PRs\n\non:\n pull_request:\n branches:\n - 'builds/facebook-**'\n\npermissions"
},
{
"path": ".github/workflows/shared_label_core_team_prs.yml",
"chars": 1882,
"preview": "name: (Shared) Label Core Team PRs\n\non:\n pull_request_target:\n types: [opened]\n\npermissions: {}\n\nenv:\n TZ: /usr/sha"
},
{
"path": ".github/workflows/shared_lint.yml",
"chars": 3432,
"preview": "name: (Shared) Lint\n\non:\n push:\n branches: [main]\n pull_request:\n\npermissions: {}\n\nconcurrency:\n group: ${{ github"
},
{
"path": ".github/workflows/shared_stale.yml",
"chars": 2876,
"preview": "# Configuration for stale action workflow - https://github.com/actions/stale\nname: (Shared) Manage stale issues and PRs\n"
},
{
"path": ".gitignore",
"chars": 954,
"preview": ".DS_STORE\nnode_modules\nscripts/flow/*/.flowconfig\n.flowconfig\n*~\n*.pyc\n.grunt\n_SpecRunner.html\n__benchmarks__\nbuild/\nrem"
},
{
"path": ".mailmap",
"chars": 7810,
"preview": "Adam Timberlake <adam.timberlake@gmail.com>\nAlex Mykyta <dancingwithcows@gmail.com>\nAlex Pien <alexpien@gmail.com>\nAlex "
},
{
"path": ".nvmrc",
"chars": 9,
"preview": "v20.19.0\n"
},
{
"path": ".prettierignore",
"chars": 1219,
"preview": "# react runtime\nbuild\n\npackages/react-devtools-core/dist\npackages/react-devtools-extensions/chrome/build\npackages/react-"
},
{
"path": ".prettierrc.js",
"chars": 621,
"preview": "'use strict';\n\nconst {esNextPaths} = require('./scripts/shared/pathsByLanguageVersion');\n\nmodule.exports = {\n bracketSp"
},
{
"path": ".watchmanconfig",
"chars": 3,
"preview": "{}\n"
},
{
"path": "CHANGELOG.md",
"chars": 265763,
"preview": "## 19.2.1 (Dec 3, 2025)\n\n### React Server Components\n\n- Bring React Server Component fixes to Server Actions (@sebmarkba"
},
{
"path": "CLAUDE.md",
"chars": 208,
"preview": "# React\n\nReact is a JavaScript library for building user interfaces.\n\n## Monorepo Overview\n\n- **React**: All files outsi"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3541,
"preview": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and"
},
{
"path": "CONTRIBUTING.md",
"chars": 208,
"preview": "# Contributing to React\n\nWant to contribute to React? There are a few things you need to know. \n\nWe wrote a **[contribu"
},
{
"path": "LICENSE",
"chars": 1088,
"preview": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nPermission is hereby granted, free of charge, to any pe"
},
{
"path": "MAINTAINERS",
"chars": 219,
"preview": "acdlite\neps1lon\nEugeneChoi4\ngaearon\ngnoff\nunstubbable\nhoxyq\njackpope\njbonta\njbrown215\njosephsavona\nkassens\nmattcarrollco"
},
{
"path": "README.md",
"chars": 5317,
"preview": "# [React](https://react.dev/) · [](https://gi"
},
{
"path": "ReactVersions.js",
"chars": 1994,
"preview": "'use strict';\n\n// This module is the single source of truth for versioning packages that we\n// publish to npm.\n//\n// Pac"
},
{
"path": "SECURITY.md",
"chars": 400,
"preview": "# Reporting Security Issues\n\nIf you believe you have found a security vulnerability in React, we encourage you to let us"
},
{
"path": "babel.config-react-compiler.js",
"chars": 702,
"preview": "'use strict';\n\n/**\n * HACK: @poteto React Compiler inlines Zod in its build artifact. Zod spreads values passed to .map\n"
},
{
"path": "babel.config-ts.js",
"chars": 519,
"preview": "/**\n * This file is purely being used for local jest runs, and doesn't participate in the build process.\n */\n'use strict"
},
{
"path": "babel.config.js",
"chars": 1010,
"preview": "'use strict';\n\nmodule.exports = {\n plugins: [\n '@babel/plugin-syntax-jsx',\n '@babel/plugin-transform-flow-strip-t"
},
{
"path": "compiler/.claude/agents/investigate-error.md",
"chars": 5255,
"preview": "---\nname: investigate-error\ndescription: Investigates React compiler errors to determine the root cause and identify pot"
},
{
"path": "compiler/.claude/settings.json",
"chars": 346,
"preview": "{\n \"permissions\": {\n \"allow\": [\n \"Bash(yarn snap:*)\",\n \"Bash(yarn snap:build)\",\n \"Bash(node scripts/e"
},
{
"path": "compiler/.eslintrc.js",
"chars": 3568,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/.gitignore",
"chars": 185,
"preview": ".DS_Store\n.spr.yml\n\nnode_modules\n.watchmanconfig\n.watchman-cookie-*\ndist\n.vscode\n!packages/playground/.vscode\ntestfilter"
},
{
"path": "compiler/CHANGELOG.md",
"chars": 7908,
"preview": "## 19.1.0-rc.2 (May 14, 2025)\n\n## babel-plugin-react-compiler\n\n* Fix for string attribute values with emoji [#33096](htt"
},
{
"path": "compiler/CLAUDE.md",
"chars": 9855,
"preview": "# React Compiler Knowledge Base\n\nThis document contains knowledge about the React Compiler gathered during development s"
},
{
"path": "compiler/README.md",
"chars": 508,
"preview": "# React Compiler\n\nReact Compiler is a compiler that optimizes React applications, ensuring that only the minimal parts o"
},
{
"path": "compiler/apps/playground/.eslintrc.json",
"chars": 40,
"preview": "{\n \"extends\": \"next/core-web-vitals\"\n}\n"
},
{
"path": "compiler/apps/playground/.gitignore",
"chars": 592,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "compiler/apps/playground/README.md",
"chars": 1037,
"preview": "# React Compiler Playground\n\nAn interactive playground to demonstrate, test, and have fun with React Compiler.\n\n## Setup"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/01-user-output.txt",
"chars": 268,
"preview": "import { c as _c } from \"react/compiler-runtime\";\nexport default function TestComponent(t0) {\n const $ = _c(2);\n const"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/02-default-output.txt",
"chars": 264,
"preview": "import { c as _c } from \"react/compiler-runtime\";\nexport default function MyApp() {\n const $ = _c(1);\n let t0;\n if ($"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/compilationMode-all-output.txt",
"chars": 259,
"preview": "import { c as _c } from \"react/compiler-runtime\"; // @compilationMode:\"all\"\nfunction nonReactFn() {\n const $ = _c(1);\n "
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/compilationMode-infer-output.txt",
"chars": 66,
"preview": "// @compilationMode:\"infer\"\nfunction nonReactFn() {\n return {};\n}"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/default-config.txt",
"chars": 30,
"preview": "{\n //compilationMode: \"all\"\n}"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/function-scope-beats-module-scope-output.txt",
"chars": 217,
"preview": "function TestComponent(t0) {\n \"use memo\";\n const $ = _c(2);\n const { x } = t0;\n let t1;\n if ($[0] !== x) {\n t1 ="
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/module-scope-use-memo-output.txt",
"chars": 280,
"preview": "\"use memo\";\nimport { c as _c } from \"react/compiler-runtime\";\nexport default function TestComponent(t0) {\n const $ = _c"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/module-scope-use-no-memo-output.txt",
"chars": 95,
"preview": "\"use no memo\";\nexport default function TestComponent({ x }) {\n return <Button>{x}</Button>;\n}\n"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/parse-flow-output.txt",
"chars": 263,
"preview": "import { c as _c } from \"react/compiler-runtime\";\nfunction useFoo(propVal) {\n const $ = _c(2);\n const t0 = (propVal.ba"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/parse-typescript-output.txt",
"chars": 393,
"preview": "import { c as _c } from \"react/compiler-runtime\";\nfunction Foo() {\n const $ = _c(2);\n let t0;\n if ($[0] === Symbol.fo"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/todo-function-scope-does-not-beat-module-scope-output.txt",
"chars": 94,
"preview": "\"use no memo\";\nfunction TestComponent({ x }) {\n \"use memo\";\n return <Button>{x}</Button>;\n}\n"
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/use-memo-output.txt",
"chars": 489,
"preview": "import { c as _c } from \"react/compiler-runtime\";\nfunction TestComponent(t0) {\n \"use memo\";\n const $ = _c(2);\n const "
},
{
"path": "compiler/apps/playground/__tests__/e2e/__snapshots__/page.spec.ts/use-no-memo-output.txt",
"chars": 174,
"preview": "const TestComponent = function () {\n \"use no memo\";\n return <Button>{x}</Button>;\n};\nconst TestComponent2 = ({ x }) =>"
},
{
"path": "compiler/apps/playground/__tests__/e2e/page.spec.ts",
"chars": 8999,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/__tests__/parseConfigOverrides.test.mjs",
"chars": 4393,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/app/layout.tsx",
"chars": 1287,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/app/page.tsx",
"chars": 655,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/colors.js",
"chars": 2456,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/AccordionWindow.tsx",
"chars": 3717,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/ConfigEditor.tsx",
"chars": 6345,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/EditorImpl.tsx",
"chars": 2201,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/Input.tsx",
"chars": 5433,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/Output.tsx",
"chars": 11968,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/index.tsx",
"chars": 438,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Editor/monacoOptions.ts",
"chars": 1052,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Header.tsx",
"chars": 4897,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Icons/IconChevron.tsx",
"chars": 1547,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Icons/IconGitHub.tsx",
"chars": 1042,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Logo.tsx",
"chars": 4972,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/Message.tsx",
"chars": 2867,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/StoreContext.tsx",
"chars": 2818,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/TabbedWindow.tsx",
"chars": 2588,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/components/index.ts",
"chars": 326,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/hooks/index.ts",
"chars": 252,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/hooks/useMountEffect.ts",
"chars": 368,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/compilation.ts",
"chars": 8257,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/createContext.ts",
"chars": 1116,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/defaultStore.ts",
"chars": 583,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/reactCompilerMonacoDiagnostics.ts",
"chars": 2565,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/stores/index.ts",
"chars": 245,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/stores/messages.ts",
"chars": 790,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/stores/store.ts",
"chars": 2184,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/transitionTypes.ts",
"chars": 422,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/lib/types.d.ts",
"chars": 598,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/next.config.js",
"chars": 1255,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/package.json",
"chars": 2376,
"preview": "{\n \"name\": \"playground\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"cd ../.. && concurrently -"
},
{
"path": "compiler/apps/playground/playwright.config.js",
"chars": 2842,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/postcss.config.js",
"chars": 275,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/public/site.webmanifest",
"chars": 322,
"preview": "{\n \"name\": \"React Compiler Playground\",\n \"short_name\": \"React REPL\",\n \"display\": \"standalone\",\n \"start_url\": \"/\",\n "
},
{
"path": "compiler/apps/playground/scripts/downloadFonts.js",
"chars": 784,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/scripts/link-compiler.sh",
"chars": 480,
"preview": "#!/usr/bin/env bash\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT "
},
{
"path": "compiler/apps/playground/styles/globals.css",
"chars": 2838,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/tailwind.config.js",
"chars": 1003,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/apps/playground/tsconfig.json",
"chars": 718,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2015\",\n \"lib\": [\n \"dom\",\n \"dom.iterable\",\n \"esnext\"\n ],\n "
},
{
"path": "compiler/apps/playground/vercel.json",
"chars": 209,
"preview": "{\n \"headers\": [\n {\n \"source\": \"/fonts/(.*).woff2\",\n \"headers\": [\n {\n \"key\": \"Cache-Control\""
},
{
"path": "compiler/docs/DESIGN_GOALS.md",
"chars": 8041,
"preview": "# React Compiler — Goals, Design Principles, and Architecture\n\nThis document describes the goals, design principles, and"
},
{
"path": "compiler/docs/DEVELOPMENT_GUIDE.md",
"chars": 1603,
"preview": "# React Compiler Development Guide\n\nNote: for general notes about contributing, see the [CONTRIBUTING.md](../../CONTRIBU"
},
{
"path": "compiler/fixtures/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "compiler/package.json",
"chars": 1503,
"preview": "{\n \"private\": true,\n \"workspaces\": {\n \"packages\": [\n \"packages/*\"\n ]\n },\n \"repository\": {\n \"type\": \"gi"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/README.md",
"chars": 460,
"preview": "# babel-plugin-react-compiler\n\nReact Compiler is a compiler that optimizes React applications, ensuring that only the mi"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/01-lower.md",
"chars": 7794,
"preview": "# lower (BuildHIR)\n\n## File\n`src/HIR/BuildHIR.ts`\n\n## Purpose\nConverts a Babel AST function node into a High-level Inter"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/02-enterSSA.md",
"chars": 7457,
"preview": "# enterSSA\n\n## File\n`src/SSA/EnterSSA.ts`\n\n## Purpose\nConverts the HIR from a non-SSA form (where variables can be reass"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/03-eliminateRedundantPhi.md",
"chars": 4543,
"preview": "# eliminateRedundantPhi\n\n## File\n`src/SSA/EliminateRedundantPhi.ts`\n\n## Purpose\nEliminates phi nodes whose operands are "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/04-constantPropagation.md",
"chars": 5034,
"preview": "# constantPropagation\n\n## File\n`src/Optimization/ConstantPropagation.ts`\n\n## Purpose\nApplies Sparse Conditional Constant"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/05-deadCodeElimination.md",
"chars": 4009,
"preview": "# deadCodeElimination\n\n## File\n`src/Optimization/DeadCodeElimination.ts`\n\n## Purpose\nEliminates instructions whose value"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/06-inferTypes.md",
"chars": 5633,
"preview": "# inferTypes\n\n## File\n`src/TypeInference/InferTypes.ts`\n\n## Purpose\nInfers types for all identifiers in the HIR by gener"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/07-analyseFunctions.md",
"chars": 4715,
"preview": "# analyseFunctions\n\n## File\n`src/Inference/AnalyseFunctions.ts`\n\n## Purpose\nRecursively analyzes all nested function exp"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/08-inferMutationAliasingEffects.md",
"chars": 6964,
"preview": "# inferMutationAliasingEffects\n\n## File\n`src/Inference/InferMutationAliasingEffects.ts`\n\n## Purpose\nInfers the mutation "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/09-inferMutationAliasingRanges.md",
"chars": 7149,
"preview": "# inferMutationAliasingRanges\n\n## File\n`src/Inference/InferMutationAliasingRanges.ts`\n\n## Purpose\nThis pass builds an ab"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/10-inferReactivePlaces.md",
"chars": 7096,
"preview": "# inferReactivePlaces\n\n## File\n`src/Inference/InferReactivePlaces.ts`\n\n## Purpose\nDetermines which `Place`s (identifiers"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/11-inferReactiveScopeVariables.md",
"chars": 7692,
"preview": "# inferReactiveScopeVariables\n\n## File\n`src/ReactiveScopes/InferReactiveScopeVariables.ts`\n\n## Purpose\nThis is the **1st"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/12-rewriteInstructionKindsBasedOnReassignment.md",
"chars": 6295,
"preview": "# rewriteInstructionKindsBasedOnReassignment\n\n## File\n`src/SSA/RewriteInstructionKindsBasedOnReassignment.ts`\n\n## Purpos"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/13-alignMethodCallScopes.md",
"chars": 5184,
"preview": "# alignMethodCallScopes\n\n## File\n`src/ReactiveScopes/AlignMethodCallScopes.ts`\n\n## Purpose\nEnsures that `MethodCall` ins"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/14-alignObjectMethodScopes.md",
"chars": 5927,
"preview": "# alignObjectMethodScopes\n\n## File\n`src/ReactiveScopes/AlignObjectMethodScopes.ts`\n\n## Purpose\nEnsures that object metho"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/15-alignReactiveScopesToBlockScopesHIR.md",
"chars": 6667,
"preview": "# alignReactiveScopesToBlockScopesHIR\n\n## File\n`src/ReactiveScopes/AlignReactiveScopesToBlockScopesHIR.ts`\n\n## Purpose\nT"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/16-mergeOverlappingReactiveScopesHIR.md",
"chars": 6070,
"preview": "# mergeOverlappingReactiveScopesHIR\n\n## File\n`src/HIR/MergeOverlappingReactiveScopesHIR.ts`\n\n## Purpose\nThis pass ensure"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/17-buildReactiveScopeTerminalsHIR.md",
"chars": 6158,
"preview": "# buildReactiveScopeTerminalsHIR\n\n## File\n`src/HIR/BuildReactiveScopeTerminalsHIR.ts`\n\n## Purpose\nThis pass transforms t"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/18-flattenReactiveLoopsHIR.md",
"chars": 5995,
"preview": "# flattenReactiveLoopsHIR\n\n## File\n`src/ReactiveScopes/FlattenReactiveLoopsHIR.ts`\n\n## Purpose\nThis pass **prunes reacti"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/19-flattenScopesWithHooksOrUseHIR.md",
"chars": 5461,
"preview": "# flattenScopesWithHooksOrUseHIR\n\n## File\n`src/ReactiveScopes/FlattenScopesWithHooksOrUseHIR.ts`\n\n## Purpose\nThis pass r"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/20-propagateScopeDependenciesHIR.md",
"chars": 6416,
"preview": "# propagateScopeDependenciesHIR\n\n## File\n`src/HIR/PropagateScopeDependenciesHIR.ts`\n\n## Purpose\nThe `propagateScopeDepen"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/21-buildReactiveFunction.md",
"chars": 6920,
"preview": "# buildReactiveFunction\n\n## File\n`src/ReactiveScopes/BuildReactiveFunction.ts`\n\n## Purpose\nThe `buildReactiveFunction` p"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/22-pruneUnusedLabels.md",
"chars": 4313,
"preview": "# pruneUnusedLabels\n\n## File\n`src/ReactiveScopes/PruneUnusedLabels.ts`\n\n## Purpose\nThe `pruneUnusedLabels` pass optimize"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/23-pruneNonEscapingScopes.md",
"chars": 4757,
"preview": "# pruneNonEscapingScopes\n\n## File\n`src/ReactiveScopes/PruneNonEscapingScopes.ts`\n\n## Purpose\nThis pass prunes (removes) "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/24-pruneNonReactiveDependencies.md",
"chars": 5238,
"preview": "# pruneNonReactiveDependencies\n\n## File\n`src/ReactiveScopes/PruneNonReactiveDependencies.ts`\n\n## Purpose\nThis pass remov"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/25-pruneUnusedScopes.md",
"chars": 4316,
"preview": "# pruneUnusedScopes\n\n## File\n`src/ReactiveScopes/PruneUnusedScopes.ts`\n\n## Purpose\nThis pass converts reactive scopes th"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/26-mergeReactiveScopesThatInvalidateTogether.md",
"chars": 7922,
"preview": "# mergeReactiveScopesThatInvalidateTogether\n\n## File\n`src/ReactiveScopes/MergeReactiveScopesThatInvalidateTogether.ts`\n\n"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/27-pruneAlwaysInvalidatingScopes.md",
"chars": 5232,
"preview": "# pruneAlwaysInvalidatingScopes\n\n## File\n`src/ReactiveScopes/PruneAlwaysInvalidatingScopes.ts`\n\n## Purpose\nThis pass ide"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/28-propagateEarlyReturns.md",
"chars": 7217,
"preview": "# propagateEarlyReturns\n\n## File\n`src/ReactiveScopes/PropagateEarlyReturns.ts`\n\n## Purpose\nThe `propagateEarlyReturns` p"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/29-promoteUsedTemporaries.md",
"chars": 6753,
"preview": "# promoteUsedTemporaries\n\n## File\n`src/ReactiveScopes/PromoteUsedTemporaries.ts`\n\n## Purpose\nThis pass promotes temporar"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/30-renameVariables.md",
"chars": 6077,
"preview": "# renameVariables\n\n## File\n`src/ReactiveScopes/RenameVariables.ts`\n\n## Purpose\nThis pass ensures that every named variab"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/31-codegenReactiveFunction.md",
"chars": 8270,
"preview": "# codegenReactiveFunction\n\n## File\n`src/ReactiveScopes/CodegenReactiveFunction.ts`\n\n## Purpose\nThis is the final pass th"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/34-optimizePropsMethodCalls.md",
"chars": 3749,
"preview": "# optimizePropsMethodCalls\n\n## File\n`src/Optimization/OptimizePropsMethodCalls.ts`\n\n## Purpose\nThis pass converts method"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/35-optimizeForSSR.md",
"chars": 5050,
"preview": "# optimizeForSSR\n\n## File\n`src/Optimization/OptimizeForSSR.ts`\n\n## Purpose\nThis pass applies Server-Side Rendering (SSR)"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/36-outlineJSX.md",
"chars": 5911,
"preview": "# outlineJSX\n\n## File\n`src/Optimization/OutlineJsx.ts`\n\n## Purpose\nThis pass outlines nested JSX elements into separate "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/37-outlineFunctions.md",
"chars": 4589,
"preview": "# outlineFunctions\n\n## File\n`src/Optimization/OutlineFunctions.ts`\n\n## Purpose\nThis pass outlines pure function expressi"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/38-memoizeFbtAndMacroOperandsInSameScope.md",
"chars": 6504,
"preview": "# memoizeFbtAndMacroOperandsInSameScope\n\n## File\n`src/ReactiveScopes/MemoizeFbtAndMacroOperandsInSameScope.ts`\n\n## Purpo"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/39-validateContextVariableLValues.md",
"chars": 6701,
"preview": "# validateContextVariableLValues\n\n## File\n`src/Validation/ValidateContextVariableLValues.ts`\n\n## Purpose\nThis validation"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/40-validateUseMemo.md",
"chars": 8621,
"preview": "# validateUseMemo\n\n## File\n`src/Validation/ValidateUseMemo.ts`\n\n## Purpose\nThis validation pass ensures that `useMemo()`"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/41-validateHooksUsage.md",
"chars": 10099,
"preview": "# validateHooksUsage\n\n## File\n`src/Validation/ValidateHooksUsage.ts`\n\n## Purpose\nThis validation pass ensures that the f"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/42-validateNoCapitalizedCalls.md",
"chars": 7192,
"preview": "# validateNoCapitalizedCalls\n\n## File\n`src/Validation/ValidateNoCapitalizedCalls.ts`\n\n## Purpose\nThis validation pass en"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/43-validateLocalsNotReassignedAfterRender.md",
"chars": 9676,
"preview": "# validateLocalsNotReassignedAfterRender\n\n## File\n`src/Validation/ValidateLocalsNotReassignedAfterRender.ts`\n\n## Purpose"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/44-validateNoSetStateInRender.md",
"chars": 4896,
"preview": "# validateNoSetStateInRender\n\n## File\n`src/Validation/ValidateNoSetStateInRender.ts`\n\n## Purpose\nValidates that a compon"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/45-validateNoDerivedComputationsInEffects.md",
"chars": 5080,
"preview": "# validateNoDerivedComputationsInEffects\n\n## File\n`src/Validation/ValidateNoDerivedComputationsInEffects.ts`\n\n## Purpose"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/46-validateNoSetStateInEffects.md",
"chars": 5765,
"preview": "# validateNoSetStateInEffects\n\n## File\n`src/Validation/ValidateNoSetStateInEffects.ts`\n\n## Purpose\nValidates against cal"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/47-validateNoJSXInTryStatement.md",
"chars": 5256,
"preview": "# validateNoJSXInTryStatement\n\n## File\n`src/Validation/ValidateNoJSXInTryStatement.ts`\n\n## Purpose\nValidates that JSX is"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/48-validateNoImpureValuesInRender.md",
"chars": 6030,
"preview": "# validateNoImpureValuesInRender\n\n## File\n`src/Validation/ValidateNoImpureValuesInRender.ts`\n\n## Purpose\nThis validation"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/49-validateNoRefAccessInRender.md",
"chars": 7900,
"preview": "# validateNoRefAccessInRender\n\n## File\n`src/Validation/ValidateNoRefAccessInRender.ts`\n\n## Purpose\nThis validation pass "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/50-validateNoFreezingKnownMutableFunctions.md",
"chars": 9485,
"preview": "# validateNoFreezingKnownMutableFunctions\n\n## File\n`src/Validation/ValidateNoFreezingKnownMutableFunctions.ts`\n\n## Purpo"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/51-validateExhaustiveDependencies.md",
"chars": 12457,
"preview": "# validateExhaustiveDependencies\n\n## File\n`src/Validation/ValidateExhaustiveDependencies.ts`\n\n## Purpose\nThis validation"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/53-validatePreservedManualMemoization.md",
"chars": 5845,
"preview": "# validatePreservedManualMemoization\n\n## File\n`src/Validation/ValidatePreservedManualMemoization.ts`\n\n## Purpose\nValidat"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/54-validateStaticComponents.md",
"chars": 5134,
"preview": "# validateStaticComponents\n\n## File\n`src/Validation/ValidateStaticComponents.ts`\n\n## Purpose\nValidates that components u"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/55-validateSourceLocations.md",
"chars": 6303,
"preview": "# validateSourceLocations\n\n## File\n`src/Validation/ValidateSourceLocations.ts`\n\n## Purpose\n**IMPORTANT: This validation "
},
{
"path": "compiler/packages/babel-plugin-react-compiler/docs/passes/README.md",
"chars": 20140,
"preview": "# React Compiler Passes Documentation\n\nThis directory contains detailed documentation for each pass in the React Compile"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/jest.config.js",
"chars": 327,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/package.json",
"chars": 2346,
"preview": "{\n \"name\": \"babel-plugin-react-compiler\",\n \"version\": \"0.0.0-experimental-334f00b-20240725\",\n \"description\": \"Babel p"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/babel-plugin-annotate-react-code.ts",
"chars": 8116,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/build-react-hooks-fixures.js",
"chars": 2685,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/eslint-plugin-react-hooks-test-cases.js",
"chars": 26931,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/e2e-classic.config.js",
"chars": 305,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/e2e-forget.config.js",
"chars": 306,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/main.config.js",
"chars": 394,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/makeE2EConfig.js",
"chars": 1082,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/makeSnapshotResolver.js",
"chars": 686,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/makeTransform.ts",
"chars": 3567,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/snapshot-resolver-no-forget.js",
"chars": 303,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/snapshot-resolver-with-forget.js",
"chars": 302,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
},
{
"path": "compiler/packages/babel-plugin-react-compiler/scripts/jest/transform-no-forget.js",
"chars": 244,
"preview": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found"
}
]
// ... and 6460 more files (download for full content)
About this extraction
This page contains the full source code of the facebook/react GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6660 files (25.0 MB), approximately 7.0M tokens, and a symbol index with 20532 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.