validateInferredDep() — react Function Reference
Architecture documentation for the validateInferredDep() function in ValidatePreservedManualMemoization.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 6216fd83_7c2d_7eac_782b_6a1697ce7175["validateInferredDep()"] 24b95621_3482_c406_4b63_5b9d9e94b5af["ValidatePreservedManualMemoization.ts"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|defined in| 24b95621_3482_c406_4b63_5b9d9e94b5af 7d870135_2212_e6ce_9c8d_5751aca84f6f["visitScope()"] 7d870135_2212_e6ce_9c8d_5751aca84f6f -->|calls| 6216fd83_7c2d_7eac_782b_6a1697ce7175 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e 7573a044_2ed6_cf56_fa09_ada521a0c1c2["compareDeps()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 7573a044_2ed6_cf56_fa09_ada521a0c1c2 b42fd0ee_c076_ff19_9197_9e0ca92918f7["merge()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| b42fd0ee_c076_ff19_9197_9e0ca92918f7 02303def_636f_c5b3_a751_1cf138fcea69["pushDiagnostic()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 02303def_636f_c5b3_a751_1cf138fcea69 ac13f5c1_be17_dd7a_6bd3_66d91c46aadf["create()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| ac13f5c1_be17_dd7a_6bd3_66d91c46aadf 9cc8d7c1_31b9_c406_4383_965a12142dd4["prettyPrintScopeDependency()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 9cc8d7c1_31b9_c406_4383_965a12142dd4 7791fd4d_5296_2b3e_4771_a3069a4070ed["printManualMemoDependency()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 7791fd4d_5296_2b3e_4771_a3069a4070ed f04b57f7_ad71_01a6_bf26_abaf67e8da58["getCompareDependencyResultDescription()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| f04b57f7_ad71_01a6_bf26_abaf67e8da58 1a2b7047_24c8_62d6_b328_5f07307d27ab["withDetails()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 1a2b7047_24c8_62d6_b328_5f07307d27ab 8e8b7ee8_d3c2_f98d_17e1_c5ff5fff1940["map()"] 6216fd83_7c2d_7eac_782b_6a1697ce7175 -->|calls| 8e8b7ee8_d3c2_f98d_17e1_c5ff5fff1940 style 6216fd83_7c2d_7eac_782b_6a1697ce7175 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts lines 231–316
function validateInferredDep(
dep: ReactiveScopeDependency,
temporaries: Map<IdentifierId, ManualMemoDependency>,
declsWithinMemoBlock: Set<DeclarationId>,
validDepsInMemoBlock: Array<ManualMemoDependency>,
errorState: CompilerError,
memoLocation: SourceLocation,
): void {
let normalizedDep: ManualMemoDependency;
const maybeNormalizedRoot = temporaries.get(dep.identifier.id);
if (maybeNormalizedRoot != null) {
normalizedDep = {
root: maybeNormalizedRoot.root,
path: [...maybeNormalizedRoot.path, ...dep.path],
loc: maybeNormalizedRoot.loc,
};
} else {
CompilerError.invariant(dep.identifier.name?.kind === 'named', {
reason:
'ValidatePreservedManualMemoization: expected scope dependency to be named',
loc: GeneratedSource,
});
normalizedDep = {
root: {
kind: 'NamedLocal',
value: {
kind: 'Identifier',
identifier: dep.identifier,
loc: GeneratedSource,
effect: Effect.Read,
reactive: false,
},
constant: false,
},
path: [...dep.path],
loc: GeneratedSource,
};
}
for (const decl of declsWithinMemoBlock) {
if (
normalizedDep.root.kind === 'NamedLocal' &&
decl === normalizedDep.root.value.identifier.declarationId
) {
return;
}
}
let errorDiagnostic: CompareDependencyResult | null = null;
for (const originalDep of validDepsInMemoBlock) {
const compareResult = compareDeps(normalizedDep, originalDep);
if (compareResult === CompareDependencyResult.Ok) {
return;
} else {
errorDiagnostic = merge(errorDiagnostic ?? compareResult, compareResult);
}
}
errorState.pushDiagnostic(
CompilerDiagnostic.create({
category: ErrorCategory.PreserveManualMemo,
reason: 'Existing memoization could not be preserved',
description: [
'React Compiler has skipped optimizing this component because the existing manual memoization could not be preserved. ',
'The inferred dependencies did not match the manually specified dependencies, which could cause the value to change more or less frequently than expected. ',
DEBUG ||
// If the dependency is a named variable then we can report it. Otherwise only print in debug mode
(dep.identifier.name != null && dep.identifier.name.kind === 'named')
? `The inferred dependency was \`${prettyPrintScopeDependency(
dep,
)}\`, but the source dependencies were [${validDepsInMemoBlock
.map(dep => printManualMemoDependency(dep, true))
.join(', ')}]. ${
errorDiagnostic
? getCompareDependencyResultDescription(errorDiagnostic)
: 'Inferred dependency not present in source'
}`
: '',
]
.join('')
.trim(),
suggestions: null,
}).withDetails({
kind: 'error',
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does validateInferredDep() do?
validateInferredDep() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts.
Where is validateInferredDep() defined?
validateInferredDep() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidatePreservedManualMemoization.ts at line 231.
What does validateInferredDep() call?
validateInferredDep() calls 10 function(s): compareDeps, create, getCompareDependencyResultDescription, invariant, map, merge, prettyPrintScopeDependency, printManualMemoDependency, and 2 more.
What calls validateInferredDep()?
validateInferredDep() is called by 1 function(s): visitScope.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free