snippet defmodule "Define a new module"
  defmodule ${1} do
    ${2}
  end

snippet def "Define a function"
  def ${1} do
    ${2}
  end

snippet defw "Define a function with guard"
  def ${1}(${2}) when ${3} do
    ${4}
  end

snippet defa "Define a function with arguments"
  def ${1}(${2}) do
    ${3}
  end

snippet defp "Define a private function"
  defp ${1} do
    ${2}
  end

snippet defpw "Define a private function with guard"
  defp ${1}(${2}) when ${3} do
    ${4}
  end

snippet defpa "Define a private function with arguments"
  defp ${1}(${2}) do
    ${3}
  end

snippet defmacro "Define a macro"
  defmacro ${1}(${2}) do
    ${3}
  end
  
snippet defmacrow "Define a macro with guard"
  defmacro ${1}(${2}) when ${3} do
    ${4}
  end

snippet quote "Quote block"
  quote do
    ${1}
  end

snippet quoteb "Quote block with bind_quoted"
  quote bind_quoted: [${1}] do
    ${2}
  end

snippet do "Do block"
  do
    ${1}
  end

snippet if "If block"
  if ${1} do
    ${2}
  end

snippet ife "If-Else block"
  if ${1} do
    ${2}
  else
    ${3}
  end