# From the TextMate bundle
# with some modification

snippet fun "Function" b
${1:name} = `!p snip.rv = "(" if t[2] else ""`${2:args}`!p snip.rv = ") " if t[2] else ""`->
	${0:# body...}
endsnippet

snippet bfun "Function (bound)" i
`!p snip.rv = "(" if t[1] else ""`${1:args}`!p snip.rv = ") " if t[1] else ""`=>`!p snip.rv = " " if t[2] and not t[2].startswith("\n") else ""`${2:expr}
endsnippet

snippet if "If"
if ${1:condition}
	${0:# body...}
endsnippet

snippet ife "If .. Else"
if ${1:condition}
	${2:# body...}
else
	${3:# body...}
endsnippet

snippet eif "Else if" b
else if ${1:condition}
	${0:# body...}
endsnippet

snippet ifte "Ternary if"
if ${1:condition} then ${2:value} else ${3:other}
endsnippet

snippet unl "Unless"
${1:action} unless ${2:condition}
endsnippet

snippet fora "Array Comprehension"
for ${1:name} in ${2:array}
	${0:# body...}
endsnippet

snippet foro "Object Comprehension"
for ${1:key}, ${2:value} of ${3:Object}
	${0:# body...}
endsnippet

snippet forr "Range Comprehension (inclusive)"
for ${1:name} in [${2:start}..${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step}
	${0:# body...}
endsnippet

snippet forrex "Range Comprehension (exclusive)"
for ${1:name} in [${2:start}...${3:finish}]`!p snip.rv = " by " if t[4] else ""`${4:step}
	${0:# body...}
endsnippet

snippet swi "Switch"
switch ${1:object}
	when ${2:value}
		${3:# body...}
	else
		$0
endsnippet

snippet swit "Switch when .. then"
switch ${1:object}
	when ${2:condition}`!p snip.rv = " then " if t[3] else ""`${3:value}
	else`!p snip.rv = " " if t[4] and not t[4].startswith("\n") else ""`${4:value}
endsnippet

snippet cla "Class" b
class ${1:ClassName}`!p snip.rv = " extends " if t[2] else ""`${2:Ancestor}

	${3:constructor:`!p snip.rv = " (" if t[4] else ""`${4:args}`!p snip.rv = ")" if t[4] else ""` ->
		${5:# body...}}
	$0
endsnippet

snippet try "Try .. Catch"
try
	$1
catch ${2:error}
	$3
endsnippet

snippet req "Require" b
${1/^'?(\w+)'?$/\L$1\E/} = require(${1:'${2:sys}'})
endsnippet

snippet # "Interpolated Code" i
#{$1}$0
endsnippet

snippet log "Log" b
console.log ${1:"${2:msg}"}
endsnippet

