# Credit: @iurifg

snippet do
do
	${1}
end
endsnippet

snippet if "if .. do .. end"
if ${1:condition} do
	${2:expression}
end
endsnippet

snippet if "if .. do: .."
if ${1:condition}, do: ${2:expression}
endsnippet

snippet ife "if .. do .. else .. end"
if ${1:condition} do
	${2:expression}
else
	${3:expression}
end
endsnippet

snippet ife "if .. do: .. else:"
if ${1:condition}, do: ${2}, else: ${3}
endsnippet

snippet unless "unless .. do .. end"
unless ${1} do
	${2}
end
endsnippet

snippet unless "unless .. do: .."
unless ${1:condition}, do: ${2}
endsnippet

snippet unlesse "unless .. do .. else .. end"
unless ${1:condition} do
	${2}
else
	${3}
end
endsnippet

snippet unlesse "unless .. do: .. else:"
unless ${1:condition}, do: ${2}, else: ${3}
endsnippet

snippet cond
"cond do"
${1} ->
	${2}
end
endsnippet

snippet case
case ${1} do
${2} ->
	${3}
end
endsnippet

snippet def
def ${1:name} do
	${2}
end
endsnippet

snippet defin "def function(n), do: n"
def ${1:name},  do: ${2}
endsnippet

snippet defg
def ${1:name} when ${2:guard-condition} do
	${3}
end
endsnippet

snippet defim
defimpl ${1:protocol_name}, for: ${2:data_type} do
	${3}
end
endsnippet

snippet defma
defmacro ${1:name} do
	${2}
end
endsnippet

snippet defmo
defmodule ${1:module_name} do
	${2}
end
endsnippet

snippet defp
defp ${1:name} do
	${2}
end
endsnippet

snippet defpr
defprotocol ${1:name}, [${2:function}]
endsnippet

snippet defr
defrecord ${1:record_name}, ${2:fields}
endsnippet

snippet doc
@doc """
${1}
"""
endsnippet

snippet fn
fn(${1:args}) -> ${2} end
endsnippet

snippet fun
function do
	${1}
end
endsnippet

snippet mdoc
@moduledoc """
${1}
"""
endsnippet

snippet rec
receive do
${1} ->
	${2}
end
endsnippet

snippet req
require ${1:module_name}
endsnippet

snippet imp
import ${1:module_name}
endsnippet

snippet ali "alias old-module to shorthand"
alias ${1:module_name}
endsnippet

snippet test
test "${1:test_name}" do
	${2}
end
endsnippet

snippet try "try .. rescue .. end"
try do
	${1}
rescue
	${2} -> ${3}
end
endsnippet