Home / Class/ ReactiveFunctionVisitor Class — react Architecture

ReactiveFunctionVisitor Class — react Architecture

Architecture documentation for the ReactiveFunctionVisitor class in visitors.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  171a5d22_bb6b_1c99_05a4_6ad897438a35["ReactiveFunctionVisitor"]
  21609915_b03a_fd75_b58a_4cb86ef9315b["visitors.ts"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|defined in| 21609915_b03a_fd75_b58a_4cb86ef9315b
  39ff6a63_fc67_04cf_7655_c9066bab21b8["visitID()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 39ff6a63_fc67_04cf_7655_c9066bab21b8
  2d09c559_79b4_a347_993c_6e96762f733b["visitParam()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 2d09c559_79b4_a347_993c_6e96762f733b
  4c94103a_a617_5904_2070_e3b436762ea5["visitLValue()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 4c94103a_a617_5904_2070_e3b436762ea5
  8d96a57b_ca06_9ec9_edd9_0932b6d3bae8["visitPlace()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 8d96a57b_ca06_9ec9_edd9_0932b6d3bae8
  8bc54c3b_16ce_ff5e_7f85_3e5f97b0f929["visitReactiveFunctionValue()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 8bc54c3b_16ce_ff5e_7f85_3e5f97b0f929
  efd512bc_cd12_5af4_cd24_a098be1037ec["visitValue()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| efd512bc_cd12_5af4_cd24_a098be1037ec
  4b2dfca2_90c1_e230_94e6_f6d4248bdb52["traverseValue()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 4b2dfca2_90c1_e230_94e6_f6d4248bdb52
  af4d3127_0abf_3e44_50a8_d7a9dd0b9b58["visitInstruction()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| af4d3127_0abf_3e44_50a8_d7a9dd0b9b58
  940018a6_e890_d3b5_6044_cb8053953421["traverseInstruction()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 940018a6_e890_d3b5_6044_cb8053953421
  833d0e1b_25d7_480b_1946_284746d6c2bb["visitTerminal()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 833d0e1b_25d7_480b_1946_284746d6c2bb
  55773a39_5b37_d0fb_a280_dc321d87f4fb["traverseTerminal()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 55773a39_5b37_d0fb_a280_dc321d87f4fb
  4acb57df_5348_9aab_9691_41cf35127db4["visitScope()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 4acb57df_5348_9aab_9691_41cf35127db4
  2eebfc2b_b1f6_9f25_ad32_78be0b56f06b["traverseScope()"]
  171a5d22_bb6b_1c99_05a4_6ad897438a35 -->|method| 2eebfc2b_b1f6_9f25_ad32_78be0b56f06b

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/visitors.ts lines 37–253

export class ReactiveFunctionVisitor<TState = void> {
  visitID(_id: InstructionId, _state: TState): void {}
  visitParam(_place: Place, _state: TState): void {}
  visitLValue(_id: InstructionId, _lvalue: Place, _state: TState): void {}
  visitPlace(_id: InstructionId, _place: Place, _state: TState): void {}
  visitReactiveFunctionValue(
    _id: InstructionId,
    _dependencies: Array<Place>,
    _fn: ReactiveFunction,
    _state: TState,
  ): void {}

  visitValue(id: InstructionId, value: ReactiveValue, state: TState): void {
    this.traverseValue(id, value, state);
  }
  traverseValue(id: InstructionId, value: ReactiveValue, state: TState): void {
    switch (value.kind) {
      case 'OptionalExpression': {
        this.visitValue(id, value.value, state);
        break;
      }
      case 'LogicalExpression': {
        this.visitValue(id, value.left, state);
        this.visitValue(id, value.right, state);
        break;
      }
      case 'ConditionalExpression': {
        this.visitValue(id, value.test, state);
        this.visitValue(id, value.consequent, state);
        this.visitValue(id, value.alternate, state);
        break;
      }
      case 'SequenceExpression': {
        for (const instr of value.instructions) {
          this.visitInstruction(instr, state);
        }
        this.visitValue(value.id, value.value, state);
        break;
      }
      default: {
        for (const place of eachInstructionValueOperand(value)) {
          this.visitPlace(id, place, state);
        }
      }
    }
  }

  visitInstruction(instruction: ReactiveInstruction, state: TState): void {
    this.traverseInstruction(instruction, state);
  }
  traverseInstruction(instruction: ReactiveInstruction, state: TState): void {
    this.visitID(instruction.id, state);
    for (const operand of eachInstructionLValue(instruction)) {
      this.visitLValue(instruction.id, operand, state);
    }
    this.visitValue(instruction.id, instruction.value, state);
  }

  visitTerminal(stmt: ReactiveTerminalStatement, state: TState): void {
    this.traverseTerminal(stmt, state);
  }
  traverseTerminal(stmt: ReactiveTerminalStatement, state: TState): void {
    const {terminal} = stmt;
    if (terminal.id !== null) {
      this.visitID(terminal.id, state);
    }
    switch (terminal.kind) {
      case 'break':
      case 'continue': {
        break;
      }
      case 'return': {
        this.visitPlace(terminal.id, terminal.value, state);
        break;
      }
      case 'throw': {
        this.visitPlace(terminal.id, terminal.value, state);
        break;
      }
      case 'for': {
        this.visitValue(terminal.id, terminal.init, state);

Domain

Frequently Asked Questions

What is the ReactiveFunctionVisitor class?
ReactiveFunctionVisitor is a class in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/visitors.ts.
Where is ReactiveFunctionVisitor defined?
ReactiveFunctionVisitor is defined in compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/visitors.ts at line 37.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free