backyard-generator 0.1.10

Convert AST node back to PHP code.
Documentation
use backyard_nodes::{ cast_node, Node, NodeType, NodeWrapper };

use crate::generator::{ Builder, Generator };

use super::identifier::IdentifierGenerator;

pub struct VariableGenerator;

impl VariableGenerator {
  pub fn generate<'arena>(
    generator: &mut Generator<'arena, '_>,
    builder: &mut Builder,
    node: &Node<'arena>
  ) {
    let node = cast_node!(Variable, &node.wrapper);
    builder.push("$");
    if let NodeType::Identifier = node.name.node_type {
      IdentifierGenerator::generate(generator, builder, &node.name);
    } else {
      builder.push("{");
      let mut expr = generator.generate_node_new(&node.name);
      if 1 + builder.last_len() + expr.first_len() > generator.max_length {
        expr.indent();
        builder.extend(expr);
        builder.new_line();
      } else {
        builder.extend_first_line(expr);
      }
      builder.push("}");
    }
  }
}