defmodule Surface.Directive do @callback extract(node :: any, meta :: Surface.AST.Meta.t()) :: [Surface.AST.Directive.t()] | Surface.AST.Directive.t() @callback process(directive :: Surface.AST.Directive.t(), node :: Surface.AST.t()) :: Surface.AST.t() @optional_callbacks process: 2 defmacro __using__(_opts) do quote do alias Surface.AST alias Surface.Compiler.Helpers alias Surface.IOHelper @behaviour unquote(__MODULE__) end end end