=====================================
empty module definition
=====================================

defmodule Mod do
end

defmodule Mod.Child do
end

---

(source
  (call
    (identifier)
    (arguments
      (alias))
    (do_block))
  (call
    (identifier)
    (arguments
      (alias))
    (do_block)))

=====================================
module definition with atom literal
=====================================

defmodule :mod do
end

---

(source
  (call
    (identifier)
    (arguments
      (atom))
    (do_block)))

=====================================
full module definition
=====================================

defmodule Mod do
  @moduledoc """
  Example module
  """

  use UseMod

  @attribute 1

  @doc """
  Example function
  """
  @spec func(integer) :: integer
  def func(x) when is_integer(x) do
    priv(x) + priv(x)
  end

  defp priv(x), do: x * x
end

---

(source
  (call
    (identifier)
    (arguments
      (alias))
    (do_block
      (unary_operator
        (call
          (identifier)
          (arguments
            (string
              (quoted_content)))))
      (call
        (identifier)
        (arguments
          (alias)))
      (unary_operator
        (call
          (identifier)
          (arguments
            (integer))))
      (unary_operator
        (call
          (identifier)
          (arguments
            (string
              (quoted_content)))))
      (unary_operator
        (call
          (identifier)
          (arguments
            (binary_operator
              (call
                (identifier)
                (arguments
                  (identifier)))
              (identifier)))))
      (call
        (identifier)
        (arguments
          (binary_operator
            (call
              (identifier)
              (arguments
                (identifier)))
            (call
              (identifier)
              (arguments
                (identifier)))))
        (do_block
          (binary_operator
            (call
              (identifier)
              (arguments
                (identifier)))
            (call
              (identifier)
              (arguments
                (identifier))))))
      (call
        (identifier)
        (arguments
          (call
            (identifier)
            (arguments
              (identifier)))
          (keywords
            (pair
              (keyword)
              (binary_operator
                (identifier)
                (identifier)))))))))
