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, GeneratorArgument };

use super::call::CallGenerator;

pub struct AttributeGenerator;

impl AttributeGenerator {
  pub fn generate<'arena>(
    generator: &mut Generator<'arena, '_>,
    builder: &mut Builder,
    node: &Node<'arena>
  ) {
    let node = cast_node!(Attribute, &node.wrapper);
    builder.push("#[");
    let items = generator.generate_nodes_new(
      &node.items,
      &mut GeneratorArgument::for_parameter(&[(NodeType::AttributeItem, Self::generate_item)])
    );
    builder.push(&items.print(" "));
    builder.push("]");
  }

  pub fn generate_item<'arena>(
    generator: &mut Generator<'arena, '_>,
    builder: &mut Builder,
    node: &Node<'arena>
  ) {
    let node = cast_node!(AttributeItem, &node.wrapper);
    builder.push(&node.name.to_string());
    if !node.arguments.is_empty() {
      builder.push("(");
      let arguments = generator.generate_nodes_new(
        &node.arguments,
        &mut GeneratorArgument::for_parameter(
          &[(NodeType::CallArgument, CallGenerator::generate_argument)]
        )
      );
      builder.push(&arguments.print(" "));
      builder.push(")");
    }
  }
}