lib/hologram/compiler/transformers/module_attribute_definition_transformer.ex

defmodule Hologram.Compiler.ModuleAttributeDefinitionTransformer do
  alias Hologram.Compiler.{Context, Transformer}
  alias Hologram.Compiler.IR.{ModuleAttributeDefinition, NotSupportedExpression}

  def transform({:@, _, [{:callback, _, _}]} = ast, %Context{}) do
    %NotSupportedExpression{ast: ast, type: :behaviour_callback_spec}
  end

  def transform({:@, _, [{name, _, [ast]}]}, %Context{} = context) do
    {value, _} = Code.eval_quoted(ast)
    value_ast = Macro.escape(value)

    %ModuleAttributeDefinition{
      name: name,
      value: Transformer.transform(value_ast, context)
    }
  end
end