findOptionalPlaces() — react Function Reference
Architecture documentation for the findOptionalPlaces() function in ValidateExhaustiveDependencies.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 7eea44a9_aaa5_1ba7_f782_42d308fed0fd["findOptionalPlaces()"] fe7a7397_dddc_7222_20d4_d5b1015466f1["ValidateExhaustiveDependencies.ts"] 7eea44a9_aaa5_1ba7_f782_42d308fed0fd -->|defined in| fe7a7397_dddc_7222_20d4_d5b1015466f1 75fd8677_19db_75c9_a011_6a3a774fa8f5["collectDependencies()"] 75fd8677_19db_75c9_a011_6a3a774fa8f5 -->|calls| 7eea44a9_aaa5_1ba7_f782_42d308fed0fd 041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"] 7eea44a9_aaa5_1ba7_f782_42d308fed0fd -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e 073c81a5_c389_d108_5b8f_4d6dc6eece83["push()"] 7eea44a9_aaa5_1ba7_f782_42d308fed0fd -->|calls| 073c81a5_c389_d108_5b8f_4d6dc6eece83 style 7eea44a9_aaa5_1ba7_f782_42d308fed0fd fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts lines 959–1040
export function findOptionalPlaces(
fn: HIRFunction,
): Map<IdentifierId, boolean> {
const optionals = new Map<IdentifierId, boolean>();
const visited: Set<BlockId> = new Set();
for (const [, block] of fn.body.blocks) {
if (visited.has(block.id)) {
continue;
}
if (block.terminal.kind === 'optional') {
visited.add(block.id);
const optionalTerminal = block.terminal;
let testBlock = fn.body.blocks.get(block.terminal.test)!;
const queue: Array<boolean | null> = [block.terminal.optional];
loop: while (true) {
visited.add(testBlock.id);
const terminal = testBlock.terminal;
switch (terminal.kind) {
case 'branch': {
const isOptional = queue.pop();
CompilerError.invariant(isOptional !== undefined, {
reason:
'Expected an optional value for each optional test condition',
loc: terminal.test.loc,
});
if (isOptional != null) {
optionals.set(terminal.test.identifier.id, isOptional);
}
if (terminal.fallthrough === optionalTerminal.fallthrough) {
// found it
const consequent = fn.body.blocks.get(terminal.consequent)!;
const last = consequent.instructions.at(-1);
if (last !== undefined && last.value.kind === 'StoreLocal') {
if (isOptional != null) {
optionals.set(last.value.value.identifier.id, isOptional);
}
}
break loop;
} else {
testBlock = fn.body.blocks.get(terminal.fallthrough)!;
}
break;
}
case 'optional': {
queue.push(terminal.optional);
testBlock = fn.body.blocks.get(terminal.test)!;
break;
}
case 'logical':
case 'ternary': {
queue.push(null);
testBlock = fn.body.blocks.get(terminal.test)!;
break;
}
case 'sequence': {
// Do we need sequence?? In any case, don't push to queue bc there is no corresponding branch terminal
testBlock = fn.body.blocks.get(terminal.block)!;
break;
}
case 'maybe-throw': {
testBlock = fn.body.blocks.get(terminal.continuation)!;
break;
}
default: {
CompilerError.invariant(false, {
reason: `Unexpected terminal in optional`,
message: `Unexpected ${terminal.kind} in optional`,
loc: terminal.loc,
});
}
}
}
CompilerError.invariant(queue.length === 0, {
reason:
'Expected a matching number of conditional blocks and branch points',
loc: block.terminal.loc,
});
}
}
return optionals;
Domain
Subdomains
Defined In
Calls
Called By
Source
Frequently Asked Questions
What does findOptionalPlaces() do?
findOptionalPlaces() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts.
Where is findOptionalPlaces() defined?
findOptionalPlaces() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateExhaustiveDependencies.ts at line 959.
What does findOptionalPlaces() call?
findOptionalPlaces() calls 2 function(s): invariant, push.
What calls findOptionalPlaces()?
findOptionalPlaces() is called by 1 function(s): collectDependencies.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free