validateExhaustiveDependencies() — react Function Reference
Architecture documentation for the validateExhaustiveDependencies() function in ValidateExhaustiveDependencies.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00["validateExhaustiveDependencies()"] fe7a7397_dddc_7222_20d4_d5b1015466f1["ValidateExhaustiveDependencies.ts"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|defined in| fe7a7397_dddc_7222_20d4_d5b1015466f1 c3bc3875_256f_8f5e_7800_2f9c5bae65eb["runWithEnvironment()"] c3bc3875_256f_8f5e_7800_2f9c5bae65eb -->|calls| 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 b0a60b4f_b441_1268_4d97_11d4cab39424["collectReactiveIdentifiersHIR()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| b0a60b4f_b441_1268_4d97_11d4cab39424 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e 0f1abc72_e074_1bef_6bd2_9c27c1ca2020["visitCandidateDependency()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 0f1abc72_e074_1bef_6bd2_9c27c1ca2020 6869984f_c56b_62c6_1328_06ff93395ab4["validateDependencies()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 6869984f_c56b_62c6_1328_06ff93395ab4 02303def_636f_c5b3_a751_1cf138fcea69["pushDiagnostic()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 02303def_636f_c5b3_a751_1cf138fcea69 75fd8677_19db_75c9_a011_6a3a774fa8f5["collectDependencies()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 75fd8677_19db_75c9_a011_6a3a774fa8f5 073c81a5_c389_d108_5b8f_4d6dc6eece83["push()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 073c81a5_c389_d108_5b8f_4d6dc6eece83 531eb985_e192_f9a2_2d7b_5deeb85ba95c["asResult()"] 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 -->|calls| 531eb985_e192_f9a2_2d7b_5deeb85ba95c style 46f23ae0_a9cb_8a6e_401f_cd99f2f91c00 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts lines 89–219
export function validateExhaustiveDependencies(
fn: HIRFunction,
): Result<void, CompilerError> {
const env = fn.env;
const reactive = collectReactiveIdentifiersHIR(fn);
const temporaries: Map<IdentifierId, Temporary> = new Map();
for (const param of fn.params) {
const place = param.kind === 'Identifier' ? param : param.place;
temporaries.set(place.identifier.id, {
kind: 'Local',
identifier: place.identifier,
path: [],
context: false,
loc: place.loc,
});
}
const error = new CompilerError();
let startMemo: StartMemoize | null = null;
function onStartMemoize(
value: StartMemoize,
dependencies: Set<InferredDependency>,
locals: Set<IdentifierId>,
): void {
CompilerError.invariant(startMemo == null, {
reason: 'Unexpected nested memo calls',
loc: value.loc,
});
startMemo = value;
dependencies.clear();
locals.clear();
}
function onFinishMemoize(
value: FinishMemoize,
dependencies: Set<InferredDependency>,
locals: Set<IdentifierId>,
): void {
CompilerError.invariant(
startMemo != null && startMemo.manualMemoId === value.manualMemoId,
{
reason: 'Found FinishMemoize without corresponding StartMemoize',
loc: value.loc,
},
);
if (env.config.validateExhaustiveMemoizationDependencies) {
visitCandidateDependency(value.decl, temporaries, dependencies, locals);
const inferred: Array<InferredDependency> = Array.from(dependencies);
const diagnostic = validateDependencies(
inferred,
startMemo.deps ?? [],
reactive,
startMemo.depsLoc,
ErrorCategory.MemoDependencies,
'all',
);
if (diagnostic != null) {
error.pushDiagnostic(diagnostic);
}
}
dependencies.clear();
locals.clear();
startMemo = null;
}
collectDependencies(
fn,
temporaries,
{
onStartMemoize,
onFinishMemoize,
onEffect: (inferred, manual, manualMemoLoc) => {
if (env.config.validateExhaustiveEffectDependencies === 'off') {
return;
}
if (DEBUG) {
console.log(Array.from(inferred, printInferredDependency));
console.log(Array.from(manual, printInferredDependency));
}
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does validateExhaustiveDependencies() do?
validateExhaustiveDependencies() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts.
Where is validateExhaustiveDependencies() defined?
validateExhaustiveDependencies() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts at line 89.
What does validateExhaustiveDependencies() call?
validateExhaustiveDependencies() calls 8 function(s): asResult, collectDependencies, collectReactiveIdentifiersHIR, invariant, push, pushDiagnostic, validateDependencies, visitCandidateDependency.
What calls validateExhaustiveDependencies()?
validateExhaustiveDependencies() is called by 1 function(s): runWithEnvironment.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free