CollectDependenciesVisitor Class — react Architecture
Architecture documentation for the CollectDependenciesVisitor class in PruneNonEscapingScopes.ts from the react codebase.
Entity Profile
Dependency Diagram
graph TD 714af45f_cbe2_027b_49c5_27e47069c22c["CollectDependenciesVisitor"] c4112963_95fe_d8ed_3bfd_f6d45887acb7["PruneNonEscapingScopes.ts"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|defined in| c4112963_95fe_d8ed_3bfd_f6d45887acb7 6b29824e_99fb_0514_c792_e91ed236ac73["constructor()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| 6b29824e_99fb_0514_c792_e91ed236ac73 5f0939bb_76eb_1279_d295_dacefad72c8a["computeMemoizationInputs()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| 5f0939bb_76eb_1279_d295_dacefad72c8a 97a5722d_5f85_030f_127a_0ee70f10e274["visitValueForMemoization()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| 97a5722d_5f85_030f_127a_0ee70f10e274 3e0ecaac_7842_5d1d_db02_c18fdd69c93b["visitInstruction()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| 3e0ecaac_7842_5d1d_db02_c18fdd69c93b cf86ad4e_f1c8_5ac8_4061_3bc569f34740["visitTerminal()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| cf86ad4e_f1c8_5ac8_4061_3bc569f34740 8964b840_74b5_2c96_c227_89dd281fdf38["visitScope()"] 714af45f_cbe2_027b_49c5_27e47069c22c -->|method| 8964b840_74b5_2c96_c227_89dd281fdf38
Relationship Graph
Source Code
compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts lines 397–1008
class CollectDependenciesVisitor extends ReactiveFunctionVisitor<
Array<ReactiveScope>
> {
env: Environment;
state: State;
options: MemoizationOptions;
constructor(env: Environment, state: State) {
super();
this.env = env;
this.state = state;
this.options = {
memoizeJsxElements: !this.env.config.enableForest,
forceMemoizePrimitives:
this.env.config.enableForest ||
this.env.config.enablePreserveExistingMemoizationGuarantees,
};
}
/*
* Given a value, returns a description of how it should be memoized:
* - lvalues: optional extra places that are lvalue-like in the sense of
* aliasing the rvalues
* - rvalues: places that are aliased by the instruction's lvalues.
* - level: the level of memoization to apply to this value
*/
computeMemoizationInputs(
value: ReactiveValue,
lvalue: Place | null,
): {
// can optionally return a custom set of lvalues per instruction
lvalues: Array<LValueMemoization>;
rvalues: Array<Place>;
} {
const env = this.env;
const options = this.options;
switch (value.kind) {
case 'ConditionalExpression': {
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
rvalues: [
// Conditionals do not alias their test value.
...this.computeMemoizationInputs(value.consequent, null).rvalues,
...this.computeMemoizationInputs(value.alternate, null).rvalues,
],
};
}
case 'LogicalExpression': {
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
rvalues: [
...this.computeMemoizationInputs(value.left, null).rvalues,
...this.computeMemoizationInputs(value.right, null).rvalues,
],
};
}
case 'SequenceExpression': {
for (const instr of value.instructions) {
this.visitValueForMemoization(instr.id, instr.value, instr.lvalue);
}
return {
// Only need to memoize if the rvalues are memoized
lvalues:
lvalue !== null
? [{place: lvalue, level: MemoizationLevel.Conditional}]
: [],
/*
* Only the final value of the sequence is a true rvalue:
* values from the sequence's instructions are evaluated
* as separate nodes
*/
rvalues: this.computeMemoizationInputs(value.value, null).rvalues,
Domain
Defined In
Source
Frequently Asked Questions
What is the CollectDependenciesVisitor class?
CollectDependenciesVisitor is a class in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts.
Where is CollectDependenciesVisitor defined?
CollectDependenciesVisitor is defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/PruneNonEscapingScopes.ts at line 397.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free