Add parser tests
This commit is contained in:
parent
da75c9ee6b
commit
3f19b87c70
|
@ -0,0 +1,101 @@
|
|||
=====================================
|
||||
empty
|
||||
=====================================
|
||||
|
||||
#
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(comment))
|
||||
|
||||
=====================================
|
||||
single line
|
||||
=====================================
|
||||
|
||||
# single comment
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(comment))
|
||||
|
||||
=====================================
|
||||
multiple start symbols
|
||||
=====================================
|
||||
|
||||
### multiple "#"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(comment))
|
||||
|
||||
=====================================
|
||||
many consecutive lines
|
||||
=====================================
|
||||
|
||||
# many
|
||||
# consecutive
|
||||
1
|
||||
# lines
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(comment)
|
||||
(comment)
|
||||
(integer)
|
||||
(comment))
|
||||
|
||||
=====================================
|
||||
in the same line as regular code
|
||||
=====================================
|
||||
|
||||
1 # comment
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(comment))
|
||||
|
||||
=====================================
|
||||
matches inside a nested structure
|
||||
=====================================
|
||||
|
||||
[ 1 ## inside a list
|
||||
, { 2 # and a tuple, too!
|
||||
, 3 }
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(integer)
|
||||
(comment)
|
||||
(tuple
|
||||
(integer)
|
||||
(comment)
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
does not match inside a string
|
||||
=====================================
|
||||
|
||||
"# string"
|
||||
"this is #{interpolation}"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_start)
|
||||
(string_content)
|
||||
(string_end))
|
||||
(string
|
||||
(string_start)
|
||||
(string_content)
|
||||
(interpolation (identifier))
|
||||
(string_end)))
|
|
@ -0,0 +1,580 @@
|
|||
=====================================
|
||||
call without arguments
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
a
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
call with arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fun(a, b) do
|
||||
c
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
call with arguments without parentheses
|
||||
=====================================
|
||||
|
||||
fun a, b do
|
||||
c
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
remote call
|
||||
=====================================
|
||||
|
||||
Mod.fun do
|
||||
a
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
sticks to the outermost call
|
||||
=====================================
|
||||
|
||||
outer_fun inner_fun arg do
|
||||
a
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
newline before do
|
||||
=====================================
|
||||
|
||||
fun x
|
||||
do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
stab clause / no arguments
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
() -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments)
|
||||
(body
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
stab clause / no arguments without parentheses
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
-> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(body
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
stab clause / one argument
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
stab clause / many arguments
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x, y, 1 -> :ok
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)
|
||||
(integer))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
(x, y) -> :ok
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / many clauses
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
1 -> :yes
|
||||
2 -> :no
|
||||
other -> :maybe
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(integer))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(stab_clause
|
||||
(arguments
|
||||
(integer))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / multiline expression
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x ->
|
||||
y
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(integer))
|
||||
(body
|
||||
(identifier)
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
stab clause / with guard / no arguments
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
() when node() == :nonode@nohost -> true
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments)
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments))
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(body
|
||||
(boolean))))))
|
||||
|
||||
=====================================
|
||||
stab clause / with guard / one argument
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x when x == [] -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / with guard / multiple arguments
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x, y when x == [] -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / with guard / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
(x, y) when y == [] -> y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
stab clause / with guard / multiple guards
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x when x > 10 when x < 5 -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
|
||||
=====================================
|
||||
pattern matching
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
[h | tail] -> {h, tail}
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(list
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal)))))))
|
||||
|
||||
=====================================
|
||||
child blocks / after
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
after
|
||||
y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(after_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / catch
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
catch
|
||||
y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(catch_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / else
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
else
|
||||
y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(else_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / rescue
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
rescue
|
||||
y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(rescue_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / duplicated
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
after
|
||||
y
|
||||
after
|
||||
z
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(after_block
|
||||
(identifier))
|
||||
(after_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / mixed
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
else
|
||||
y
|
||||
after
|
||||
z
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(else_block
|
||||
(identifier))
|
||||
(after_block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
child blocks / stab clause
|
||||
=====================================
|
||||
|
||||
fun do
|
||||
x
|
||||
rescue
|
||||
y -> y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(identifier)
|
||||
(rescue_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(identifier)))))))
|
|
@ -0,0 +1,69 @@
|
|||
=====================================
|
||||
operator with arity (valid and supported by IEx.Helpers.h)
|
||||
=====================================
|
||||
|
||||
::/2
|
||||
@ / 1
|
||||
& / 1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator
|
||||
(operator_identifier)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
map with identifiers
|
||||
=====================================
|
||||
|
||||
%{a}
|
||||
%{a, b}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(identifier)))
|
||||
(map
|
||||
(map_content
|
||||
(identifier)
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
def with remote call
|
||||
=====================================
|
||||
|
||||
def Mod.fun(x), do: 1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
[error] arrow outside of map
|
||||
=====================================
|
||||
|
||||
a => b
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(identifier)
|
||||
(ERROR
|
||||
(identifier)))
|
|
@ -0,0 +1,323 @@
|
|||
=====================================
|
||||
no arguments
|
||||
=====================================
|
||||
|
||||
fn() -> 1 end
|
||||
fn () -> 1 end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments)
|
||||
(body
|
||||
(integer))))
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(body
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
no arguments without parentheses
|
||||
=====================================
|
||||
|
||||
fn -> 1 end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(body
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
one argument
|
||||
=====================================
|
||||
|
||||
fn(x) -> x end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
one argument without parentheses
|
||||
=====================================
|
||||
|
||||
fn x -> x end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
many arguments
|
||||
=====================================
|
||||
|
||||
fn(x, y) -> x + y end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(body
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
many arguments without parentheses
|
||||
=====================================
|
||||
|
||||
fn x, y -> x + y end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(body
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
multiline body
|
||||
=====================================
|
||||
|
||||
fn x, y ->
|
||||
y
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(body
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
many clauses
|
||||
=====================================
|
||||
|
||||
fn
|
||||
1 -> :yes
|
||||
2 -> :no
|
||||
other -> :maybe
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(integer))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(stab_clause
|
||||
(arguments
|
||||
(integer))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
with guard / no arguments
|
||||
=====================================
|
||||
|
||||
fn
|
||||
() when node() == :nonode@nohost -> true
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments)
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments))
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
with guard / one argument
|
||||
=====================================
|
||||
|
||||
fn
|
||||
x when x == [] -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
with guard / multiple arguments
|
||||
=====================================
|
||||
|
||||
fn
|
||||
x, y when x == [] -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
with guard / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fn
|
||||
(x, y) when y == [] -> y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list)))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
with guard / multiple guards
|
||||
=====================================
|
||||
|
||||
fn
|
||||
x when x > 10 when x < 5 -> x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
||||
|
||||
=====================================
|
||||
pattern matching
|
||||
=====================================
|
||||
|
||||
fn
|
||||
[h | tail] -> {h, tail}
|
||||
%{x: x} when x == 1 -> 1
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(anonymous_function
|
||||
(stab_clause
|
||||
(arguments
|
||||
(list
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))
|
||||
(stab_clause
|
||||
(binary_operator
|
||||
(arguments
|
||||
(map
|
||||
(map_content
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(identifier))))))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(body
|
||||
(atom
|
||||
(atom_literal))))))
|
|
@ -0,0 +1,96 @@
|
|||
=====================================
|
||||
empty
|
||||
=====================================
|
||||
|
||||
()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block))
|
||||
|
||||
=====================================
|
||||
single expression
|
||||
=====================================
|
||||
|
||||
(1)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
multiple expressions separated by newline
|
||||
=====================================
|
||||
|
||||
(
|
||||
1
|
||||
2
|
||||
)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
multiple expressions separated by semicolon
|
||||
=====================================
|
||||
|
||||
(1;2)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
multiple expressions separated by mixed separators
|
||||
=====================================
|
||||
|
||||
(
|
||||
1
|
||||
|
||||
;
|
||||
|
||||
2
|
||||
)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
leading semicolon
|
||||
=====================================
|
||||
|
||||
(;1;2)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
trailing semicolon
|
||||
=====================================
|
||||
|
||||
(1;2;)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(block
|
||||
(integer)
|
||||
(integer)))
|
|
@ -0,0 +1,806 @@
|
|||
=====================================
|
||||
local call / no arguments
|
||||
=====================================
|
||||
|
||||
fun()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments)))
|
||||
|
||||
=====================================
|
||||
local call / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fun(a)
|
||||
fun([1, 2], option: true, other: 5)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
local call / arguments without parentheses
|
||||
=====================================
|
||||
|
||||
fun a
|
||||
fun [1, 2], option: true, other: 5
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
local call / nested with parentheses
|
||||
=====================================
|
||||
|
||||
outer_fun(inner_fun(a))
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
local call / nested without parentheses (right associativity)
|
||||
=====================================
|
||||
|
||||
outer_fun inner_fun a
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
local call / precedence with operator
|
||||
=====================================
|
||||
|
||||
fun +1
|
||||
outer_fun 1 + 1
|
||||
1 + inner_fun 1
|
||||
outer_fun 1 + inner_fun 1
|
||||
fun 1, 2 |> other_fun
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(unary_operator
|
||||
(integer))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))))
|
||||
(binary_operator
|
||||
(integer)
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(integer))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(integer)
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(integer))))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(integer)
|
||||
(binary_operator
|
||||
(integer)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
local call / treats nonimmediate parentheses as a block argument
|
||||
=====================================
|
||||
|
||||
fun (x)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
remote call / no arguments
|
||||
=====================================
|
||||
|
||||
Mod.fun()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments)))
|
||||
|
||||
=====================================
|
||||
remote call / no arguments without parentheses
|
||||
=====================================
|
||||
|
||||
Mod.fun
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
remote call / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
Mod.fun(a)
|
||||
Mod.fun([1, 2], option: true, other: 5)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
remote call / arguments without parentheses
|
||||
=====================================
|
||||
|
||||
Mod.fun a
|
||||
Mod.fun [1, 2], option: true, other: 5
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
remote call / nested with parentheses
|
||||
=====================================
|
||||
|
||||
Mod.outer_fun(Mod.inner_fun(a))
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
remote call / nested without parentheses (right associativity)
|
||||
=====================================
|
||||
|
||||
Mod.outer_fun Mod.inner_fun a
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
remote call / precedence with operator
|
||||
=====================================
|
||||
|
||||
Mod.outer_fun 1 + 1
|
||||
1 + Mod.inner_fun 1
|
||||
Mod.outer_fun 1 + Mod.inner_fun 1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))))
|
||||
(binary_operator
|
||||
(integer)
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(integer))))
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(binary_operator
|
||||
(integer)
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(integer)))))))
|
||||
|
||||
=====================================
|
||||
remote call / treats nonimmediate parentheses as a block argument
|
||||
=====================================
|
||||
|
||||
Mod.fun (x)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(block
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
remote call / multi-level alias
|
||||
=====================================
|
||||
|
||||
Mod1.Mod2.Mod3.fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
remote call / operator
|
||||
=====================================
|
||||
|
||||
Kernel.+(a, b)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(operator_identifier))
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
remote call / quoted function name
|
||||
=====================================
|
||||
|
||||
Mod."fun"(a)
|
||||
Mod.'fun'(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
remote call / atom literal module
|
||||
=====================================
|
||||
|
||||
:mod.fun(a)
|
||||
:"Elixir.Mod".fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(atom
|
||||
(atom_literal))
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(dot
|
||||
(atom
|
||||
(string_content))
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
anonymous call / no arguments
|
||||
=====================================
|
||||
|
||||
fun.()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments)))
|
||||
|
||||
=====================================
|
||||
anonymous call / arguments in parentheses
|
||||
=====================================
|
||||
|
||||
fun.(a)
|
||||
fun.([1, 2], option: true, other: 5)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
anonymous call / nested with parentheses
|
||||
=====================================
|
||||
|
||||
outer_fun.(inner_fun.(a))
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
mixed call types
|
||||
=====================================
|
||||
|
||||
Mod.outer_fun mid_fun inner_fun.(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(call
|
||||
(dot
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
identifier call
|
||||
=====================================
|
||||
|
||||
mod.fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(identifier)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
nested identifier call
|
||||
=====================================
|
||||
|
||||
map.mod.fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(call
|
||||
(dot
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
reserved word call
|
||||
=====================================
|
||||
|
||||
a.and
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(identifier)
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
range call
|
||||
=====================================
|
||||
|
||||
(1..2).step
|
||||
(1..2//3).step
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(block
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer)))
|
||||
(identifier)))
|
||||
(call
|
||||
(dot
|
||||
(block
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))
|
||||
(integer))))
|
||||
(identifier)))
|
||||
|
||||
=====================================
|
||||
multi-expression block call
|
||||
=====================================
|
||||
|
||||
(
|
||||
x
|
||||
1..2
|
||||
).step
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(block
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer)))
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
map call
|
||||
=====================================
|
||||
|
||||
%{}.field
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(map)
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
struct call
|
||||
=====================================
|
||||
|
||||
%Mod{}.field
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(map
|
||||
(struct
|
||||
(alias)))
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
arbitrary term call
|
||||
=====================================
|
||||
|
||||
1.(1, 2)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(integer))
|
||||
(arguments
|
||||
(integer)
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
escaped newline call
|
||||
=====================================
|
||||
|
||||
fun \
|
||||
a
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
keyword list trailing separator
|
||||
=====================================
|
||||
|
||||
fun(option: true, other: 5,)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(boolean))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
newline before dot
|
||||
=====================================
|
||||
|
||||
Mod
|
||||
.fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
newline after dot
|
||||
=====================================
|
||||
|
||||
Mod.
|
||||
fun(a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
access syntax
|
||||
=====================================
|
||||
|
||||
map[key]
|
||||
map[:key]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(access_call
|
||||
(identifier)
|
||||
(identifier))
|
||||
(access_call
|
||||
(identifier)
|
||||
(atom
|
||||
(atom_literal))))
|
||||
|
||||
=====================================
|
||||
access syntax / does not allow whitespace
|
||||
=====================================
|
||||
|
||||
map [key]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(list
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
access syntax / precedence over dot call
|
||||
=====================================
|
||||
|
||||
map[:mod].fun
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(dot
|
||||
(access_call
|
||||
(identifier)
|
||||
(atom
|
||||
(atom_literal)))
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
[error] leading argument separator
|
||||
=====================================
|
||||
|
||||
fun(, a)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(ERROR)
|
||||
(identifier))))
|
|
@ -0,0 +1,130 @@
|
|||
=====================================
|
||||
anonymous function
|
||||
=====================================
|
||||
|
||||
& &1 + &2
|
||||
&(&1 + &2)
|
||||
&foo(&1, a, &2)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(unary_operator
|
||||
(integer))
|
||||
(unary_operator
|
||||
(integer))))
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(unary_operator
|
||||
(integer))
|
||||
(unary_operator
|
||||
(integer))))
|
||||
(unary_operator
|
||||
(call
|
||||
(arguments
|
||||
(unary_operator
|
||||
(integer))
|
||||
(identifier)
|
||||
(unary_operator
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
argument call
|
||||
=====================================
|
||||
|
||||
& &1.some_fun
|
||||
&(&1.some_fun)
|
||||
& &1.(&2)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(dot
|
||||
(unary_operator
|
||||
(integer)
|
||||
(identifier)))))
|
||||
(unary_operator
|
||||
(call
|
||||
(dot
|
||||
(unary_operator
|
||||
(integer)
|
||||
(identifier)))))
|
||||
(unary_operator
|
||||
(call
|
||||
(dot
|
||||
(unary_operator
|
||||
(integer)
|
||||
(arguments
|
||||
(unary_operator
|
||||
(integer))))))))
|
||||
|
||||
=====================================
|
||||
remote MFA
|
||||
=====================================
|
||||
|
||||
&Mod.fun/1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier)))
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
remote operator MFA
|
||||
=====================================
|
||||
|
||||
&Kernel.>=/2
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(operator_identifier)))
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
local MFA
|
||||
=====================================
|
||||
|
||||
&fun/1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
local operator MFA
|
||||
=====================================
|
||||
|
||||
&>=/2
|
||||
&//2
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(operator_identifier)
|
||||
(integer)))
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(operator_identifier)
|
||||
(integer))))
|
|
@ -0,0 +1,356 @@
|
|||
=====================================
|
||||
unary
|
||||
=====================================
|
||||
|
||||
@arg
|
||||
|
||||
+arg
|
||||
-arg
|
||||
!arg
|
||||
^arg
|
||||
not arg
|
||||
~~~arg
|
||||
|
||||
&arg
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(unary_operator
|
||||
(identifier)))
|
||||
|
||||
=====================================
|
||||
binary left associative
|
||||
=====================================
|
||||
|
||||
a * b * c
|
||||
a / b / c
|
||||
|
||||
a + b + c
|
||||
a - b - c
|
||||
|
||||
a ^^^ b ^^^ c
|
||||
|
||||
a in b in c
|
||||
a not in b not in c
|
||||
|
||||
a |> b |> c
|
||||
a <<< b <<< c
|
||||
a >>> b >>> c
|
||||
a <<~ b <<~ c
|
||||
a ~>> b ~>> c
|
||||
a <~ b <~ c
|
||||
a ~> b ~> c
|
||||
a <~> b <~> c
|
||||
a <|> b <|> c
|
||||
|
||||
a < b < c
|
||||
a > b > c
|
||||
a <= b <= c
|
||||
a >= b >= c
|
||||
|
||||
a == b == c
|
||||
a != b != c
|
||||
a =~ b =~ c
|
||||
a === b === c
|
||||
a !== b !== c
|
||||
|
||||
a && b && c
|
||||
a &&& b &&& c
|
||||
a and b and c
|
||||
|
||||
a || b || c
|
||||
a ||| b ||| c
|
||||
a or b or c
|
||||
|
||||
a <- b <- c
|
||||
a \\ b \\ c
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier)))
|
||||
|
||||
=====================================
|
||||
binary right associative
|
||||
=====================================
|
||||
|
||||
a ++ b ++ c
|
||||
a -- b -- c
|
||||
a +++ b +++ c
|
||||
a --- b --- c
|
||||
a .. b .. c
|
||||
a <> b <> c
|
||||
|
||||
a = b = c
|
||||
|
||||
a | b | c
|
||||
|
||||
a :: b :: c
|
||||
|
||||
a when b when c
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier)))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier))))
|
||||
|
||||
=====================================
|
||||
precedence on the same level falls back to associativity
|
||||
=====================================
|
||||
|
||||
a * b / c
|
||||
a + b - c
|
||||
a in b not in c
|
||||
a <<< b >>> c
|
||||
a < b > c
|
||||
a == b != c
|
||||
a &&& b && c
|
||||
a ||| b || c
|
||||
a <- b \\ c
|
||||
|
||||
a ++ b -- c
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (binary_operator (identifier) (identifier)) (identifier))
|
||||
(binary_operator (identifier) (binary_operator (identifier) (identifier))))
|
||||
|
||||
=====================================
|
||||
precedence on different levels
|
||||
=====================================
|
||||
|
||||
& @ a - b
|
||||
a -- b + c
|
||||
a - b ++ c
|
||||
a = b <<< c
|
||||
|
||||
a + b * c - d
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(identifier)))
|
||||
|
||||
=====================================
|
||||
precedence determined by parentheses
|
||||
=====================================
|
||||
|
||||
(& a) - b
|
||||
|
||||
(a + b) * (c - d)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
multiline
|
||||
=====================================
|
||||
|
||||
-
|
||||
x
|
||||
|
||||
x
|
||||
not in
|
||||
[y]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
stepped range
|
||||
=====================================
|
||||
|
||||
1 .. 2 // 3
|
||||
1..2//3
|
||||
0..1//-1
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))
|
||||
(unary_operator
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
stepped range / multiline
|
||||
=====================================
|
||||
|
||||
1..2
|
||||
// 4
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
stepped ranges / blocks
|
||||
=====================================
|
||||
|
||||
foo do end..bar do end//baz do end
|
||||
1..(2//3)
|
||||
(1..2)//3
|
||||
(1..2)//(3)
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(do_block))
|
||||
(call
|
||||
(identifier)
|
||||
(do_block)))
|
||||
(call
|
||||
(identifier)
|
||||
(do_block)))
|
||||
(binary_operator
|
||||
(integer)
|
||||
(block
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer))))
|
||||
(binary_operator
|
||||
(block
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer)))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(block
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer)))
|
||||
(block
|
||||
(integer))))
|
|
@ -0,0 +1,246 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
~s(content)
|
||||
~r{content}
|
||||
~w[content]
|
||||
~a<content>
|
||||
~b"content"
|
||||
~c'content'
|
||||
~d|content|
|
||||
~e/content/
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content))
|
||||
(sigil (sigil_name) (string_content)))
|
||||
|
||||
|
||||
=====================================
|
||||
multiple lines
|
||||
=====================================
|
||||
|
||||
~s"line 1
|
||||
line 2"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
interpolation
|
||||
=====================================
|
||||
|
||||
~s"hey #{name}!"
|
||||
~r/hey #{
|
||||
name
|
||||
}!/
|
||||
~w{##{name}#}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
nested interpolation
|
||||
=====================================
|
||||
|
||||
~s{this is #{~s{number #{1}}}!}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(interpolation
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escape sequence
|
||||
=====================================
|
||||
|
||||
~s{_\}_\n_\t_\r_\e_\\_\1_\x3f_\u0065\u0301_}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escaped interpolation
|
||||
=====================================
|
||||
|
||||
~s{\#{1}}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
upper sigil / no interpolation
|
||||
=====================================
|
||||
|
||||
~S"hey #{name}!"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
upper sigil / no escape sequence
|
||||
=====================================
|
||||
|
||||
~S"\n"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
upper sigil / escape terminator
|
||||
=====================================
|
||||
|
||||
~S"content \" content"
|
||||
~S{content \} content}
|
||||
~S/content \/ content/
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc delimiter
|
||||
=====================================
|
||||
|
||||
~s"""
|
||||
text
|
||||
with "quotes"
|
||||
"""
|
||||
|
||||
~s'''
|
||||
text
|
||||
with 'quotes'
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
modifiers
|
||||
=====================================
|
||||
|
||||
~r/left|right/i
|
||||
~r/left|right/iUx
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(string_content)
|
||||
(sigil_modifiers))
|
||||
(sigil
|
||||
(sigil_name)
|
||||
(sigil_modifiers)))
|
||||
|
||||
=====================================
|
||||
[error] accepts only a single character
|
||||
=====================================
|
||||
|
||||
~mysigil"content"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(ERROR)
|
||||
(call
|
||||
(string
|
||||
(string_content))))
|
|
@ -0,0 +1,364 @@
|
|||
=====================================
|
||||
def / no arguments
|
||||
=====================================
|
||||
|
||||
def fun() do
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(arguments)))
|
||||
(do_block)))
|
||||
|
||||
=====================================
|
||||
def / no arguments without parentheses
|
||||
=====================================
|
||||
|
||||
def fun do
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)))
|
||||
(do_block)))
|
||||
|
||||
=====================================
|
||||
def / one argument
|
||||
=====================================
|
||||
|
||||
def fun(x) do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
def / one argument without parentheses
|
||||
=====================================
|
||||
|
||||
def fun x do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
def / many arguments
|
||||
=====================================
|
||||
|
||||
def fun(x, y) do
|
||||
x + y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
def / many arguments without parentheses
|
||||
=====================================
|
||||
|
||||
def fun x, y do
|
||||
x + y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
def / default arguments
|
||||
=====================================
|
||||
|
||||
def fun x, y \\ 1 do
|
||||
x + y
|
||||
end
|
||||
|
||||
def fun(x, y \\ 1) do
|
||||
x + y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))))))
|
||||
(do_block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))))))
|
||||
(do_block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
def / keyword do block
|
||||
=====================================
|
||||
|
||||
def fun(), do: 1
|
||||
def fun(x), do: x
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)))))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
def / pattern matching
|
||||
=====================================
|
||||
|
||||
def fun([{x, y} | tail]) do
|
||||
x + y
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(list
|
||||
(binary_operator
|
||||
(tuple
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier))))))
|
||||
(do_block
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
def / with guard
|
||||
=====================================
|
||||
|
||||
def fun(x) when x == 1 do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier))))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
def / with guard / multiple guards
|
||||
=====================================
|
||||
|
||||
def fun(x) when x > 10 when x < 5 do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier))))
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer)))))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
defp
|
||||
=====================================
|
||||
|
||||
defp fun(x) do
|
||||
x
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
defmacro
|
||||
=====================================
|
||||
|
||||
defmacro fun(x) do
|
||||
quote do
|
||||
[unquote(x)]
|
||||
end
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier)))))
|
||||
(do_block
|
||||
(call
|
||||
(identifier)
|
||||
(do_block
|
||||
(list
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))))))))
|
||||
|
||||
=====================================
|
||||
defguard
|
||||
=====================================
|
||||
|
||||
defguard is_even(term) when is_integer(term) and rem(term, 2) == 0
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier
|
||||
(arguments
|
||||
(identifier))))
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)
|
||||
(integer)))
|
||||
(integer)))))))
|
|
@ -0,0 +1,136 @@
|
|||
=====================================
|
||||
for / enumerable
|
||||
=====================================
|
||||
|
||||
for n <- [1, 2], do: n * 2
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list
|
||||
(integer)
|
||||
(integer))))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
for / enumerable / with options and block
|
||||
=====================================
|
||||
|
||||
for line <- IO.stream(), into: IO.stream() do
|
||||
String.upcase(line)
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))))))
|
||||
(do_block
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
for / binary
|
||||
=====================================
|
||||
|
||||
for <<c <- " hello world ">>, c != ?\s, into: "", do: <<c>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(string
|
||||
(string_content))))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(char))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(string
|
||||
(string_content)))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(binary
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
for / reduce
|
||||
=====================================
|
||||
|
||||
for x <- [1, 2, 1], reduce: %{} do
|
||||
acc -> Map.update(acc, x, 1, & &1 + 1)
|
||||
end
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list
|
||||
(integer)
|
||||
(integer)
|
||||
(integer)))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(map))))
|
||||
(do_block
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)
|
||||
(integer)
|
||||
(unary_operator
|
||||
(binary_operator
|
||||
(unary_operator
|
||||
(integer))
|
||||
(integer))))))))))
|
|
@ -0,0 +1,140 @@
|
|||
=====================================
|
||||
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
|
||||
(atom_literal)))
|
||||
(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
|
||||
(string_content)))))
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(alias)))
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(integer))))
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(string
|
||||
(string_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
|
||||
(atom_literal))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))))))))
|
|
@ -0,0 +1,242 @@
|
|||
=====================================
|
||||
without type parentheses
|
||||
=====================================
|
||||
|
||||
@spec fun(atom, integer, keyword) :: string
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
with type parentheses
|
||||
=====================================
|
||||
|
||||
@spec fun(atom(), integer(), keyword()) :: string()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(identifier))
|
||||
(call
|
||||
(identifier))
|
||||
(call
|
||||
(identifier))))
|
||||
(call
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
with literals
|
||||
=====================================
|
||||
|
||||
@spec fun(%{key: atom}) :: {:ok, atom} | {:error, binary}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(map
|
||||
(map_content
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal)
|
||||
(identifier))))))))
|
||||
(binary_operator
|
||||
(tuple
|
||||
(atom
|
||||
(atom_literal))
|
||||
(identifier))
|
||||
(tuple
|
||||
(atom
|
||||
(atom_literal))
|
||||
(identifier))))))))
|
||||
|
||||
=====================================
|
||||
with function reference
|
||||
=====================================
|
||||
|
||||
@spec fun((-> atom), (atom -> integer)) :: integer
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(stab_clause
|
||||
(body
|
||||
(identifier)))
|
||||
(stab_clause
|
||||
(arguments
|
||||
(identifier))
|
||||
(body
|
||||
(identifier)))))
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
with remote type
|
||||
=====================================
|
||||
|
||||
@spec fun(Keyword.t()) :: String.t()
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier)))))
|
||||
(call
|
||||
(dot
|
||||
(alias)
|
||||
(identifier))))))))
|
||||
|
||||
=====================================
|
||||
with type guard
|
||||
=====================================
|
||||
|
||||
@spec fun(arg1, arg2) :: {arg1, arg2} when arg1: atom, arg2: integer
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(tuple
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(identifier))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(identifier))))))))
|
||||
|
||||
=====================================
|
||||
with named arguments
|
||||
=====================================
|
||||
|
||||
@spec days_since_epoch(year :: integer, month :: integer, day :: integer) :: integer
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))))
|
||||
(identifier))))))
|
||||
|
||||
=====================================
|
||||
nonempty list
|
||||
=====================================
|
||||
|
||||
@spec fun() :: [integer, ...]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(list
|
||||
(call
|
||||
(identifier))
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
[error] type guard cannot end with keyword separator
|
||||
=====================================
|
||||
|
||||
@spec fun(arg) :: arg when arg: atom,
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(identifier)))
|
||||
(identifier))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(identifier)))))))
|
||||
(ERROR))
|
|
@ -0,0 +1,32 @@
|
|||
=====================================
|
||||
separates expressions in the same line
|
||||
=====================================
|
||||
|
||||
1 ; 1
|
||||
|
||||
---
|
||||
|
||||
(source (integer) (integer))
|
||||
|
||||
=====================================
|
||||
trailing
|
||||
=====================================
|
||||
|
||||
1;
|
||||
2;
|
||||
|
||||
---
|
||||
|
||||
(source (integer) (integer))
|
||||
|
||||
=====================================
|
||||
with comment
|
||||
=====================================
|
||||
|
||||
1 ; # comment
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(comment))
|
|
@ -0,0 +1,88 @@
|
|||
=====================================
|
||||
single part
|
||||
=====================================
|
||||
|
||||
Mod
|
||||
AZ_az_19_
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(alias)
|
||||
(alias)
|
||||
(alias))
|
||||
|
||||
=====================================
|
||||
multiple parts
|
||||
=====================================
|
||||
|
||||
Mod.Child
|
||||
Mod.Child.Child
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(alias)
|
||||
(alias))
|
||||
|
||||
=====================================
|
||||
qualified tuples
|
||||
=====================================
|
||||
|
||||
Mod.{Child1, Child2}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(dot
|
||||
(alias)
|
||||
(tuple
|
||||
(alias)
|
||||
(alias))))
|
||||
|
||||
=====================================
|
||||
dot on identifier
|
||||
=====================================
|
||||
|
||||
name.Mod
|
||||
name.Mod.Child
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(dot
|
||||
(identifier)
|
||||
(alias))
|
||||
(dot
|
||||
(identifier)
|
||||
(alias)))
|
||||
|
||||
=====================================
|
||||
dot on special identifier
|
||||
=====================================
|
||||
|
||||
__MODULE__.Child
|
||||
|
||||
(source
|
||||
(dot
|
||||
(special_identifier)
|
||||
(alias)))
|
||||
|
||||
=====================================
|
||||
[error] does not support characters outside ASCII
|
||||
=====================================
|
||||
|
||||
Modこ
|
||||
Ólá
|
||||
Olá
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(alias)
|
||||
(ERROR
|
||||
(identifier))
|
||||
(ERROR
|
||||
(identifier))
|
||||
(ERROR
|
||||
(identifier)))
|
|
@ -0,0 +1,95 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
:atom
|
||||
:_az_AZ_19_
|
||||
:nonode@nohost
|
||||
:bang!
|
||||
:question?
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal)))
|
||||
|
||||
=====================================
|
||||
operators
|
||||
=====================================
|
||||
|
||||
[:~~~, :~>>, :~>, :|||, :||, :|>, :|, :>>>, :>=, :>, :=~, :===, :==, :=, :<~>, :<~, :<|>, :<>, :<=, :<<~, :<<<, :<-, :<, :+++, :++, :+, :^^^, :^, :&&&, :&&, :&, :\\, :/, :*, :@, :.., :., :!==, :!=, :!, :::, :->, :---, :--, :-]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal)) (atom (atom_literal))))
|
||||
|
||||
=====================================
|
||||
special operator-like atoms
|
||||
=====================================
|
||||
|
||||
[:..., :%{}, :{}, :%, :<<>>, :..//]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))))
|
||||
|
||||
=====================================
|
||||
quoted atom
|
||||
=====================================
|
||||
|
||||
:"atom ?? !! ' \n"
|
||||
:'atom ?? !! " \n'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(atom
|
||||
(string_content)
|
||||
(escape_sequence))
|
||||
(atom
|
||||
(string_content)
|
||||
(escape_sequence)))
|
||||
|
||||
=====================================
|
||||
interpolation
|
||||
=====================================
|
||||
|
||||
:"hey #{name}!"
|
||||
:'hey #{name}!'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(atom
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(atom
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
|
@ -0,0 +1,185 @@
|
|||
=====================================
|
||||
single item
|
||||
=====================================
|
||||
|
||||
<<>>
|
||||
<<10>>
|
||||
<<10.0>>
|
||||
<<"string">>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring)
|
||||
(bitstring
|
||||
(integer))
|
||||
(bitstring
|
||||
(float))
|
||||
(bitstring
|
||||
(string
|
||||
(string_content))))
|
||||
|
||||
=====================================
|
||||
multiple items
|
||||
=====================================
|
||||
|
||||
<<
|
||||
10,
|
||||
10.0,
|
||||
"string"
|
||||
>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(integer)
|
||||
(float)
|
||||
(string
|
||||
(string_content))))
|
||||
|
||||
=====================================
|
||||
size modifiers
|
||||
=====================================
|
||||
|
||||
<<10::4>>
|
||||
<<10::size(4)>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(binary_operator
|
||||
(integer)
|
||||
(integer)))
|
||||
(bitstring
|
||||
(binary_operator
|
||||
(integer)
|
||||
(call
|
||||
(identifier)
|
||||
(arguments
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
multiple modifiers
|
||||
=====================================
|
||||
|
||||
<<"string"::utf8-big>>
|
||||
<<"string"::utf16-big>>
|
||||
<<"string"::utf32-big>>
|
||||
<<10::32-little-unsigned>>
|
||||
<<10::integer-signed-big>>
|
||||
<<10.10::float-signed-native>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(integer)
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(integer)
|
||||
(identifier))
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(integer)
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(float)
|
||||
(binary_operator
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(identifier))
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
multiple components with modifiers
|
||||
=====================================
|
||||
|
||||
<<10::8-native, "string", 3.14::float, a::8, b::binary-size(known_size)>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(binary_operator
|
||||
(integer)
|
||||
(binary_operator
|
||||
(integer)
|
||||
(identifier)))
|
||||
(string
|
||||
(string_content))
|
||||
(binary_operator
|
||||
(float)
|
||||
(identifier))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(call
|
||||
(arguments
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
spacing
|
||||
=====================================
|
||||
|
||||
<<
|
||||
10 :: 8-native,
|
||||
b :: binary - size(known_size)
|
||||
>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(binary_operator
|
||||
(integer)
|
||||
(binary_operator
|
||||
(integer)
|
||||
(identifier)))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(call
|
||||
(arguments
|
||||
(identifier)))))))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
<<1,>>
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(bitstring
|
||||
(integer)))
|
|
@ -0,0 +1,12 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
true
|
||||
false
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(boolean)
|
||||
(boolean))
|
|
@ -0,0 +1,55 @@
|
|||
=====================================
|
||||
regular character
|
||||
=====================================
|
||||
|
||||
?a
|
||||
?Z
|
||||
?0
|
||||
?9
|
||||
?_
|
||||
??
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char))
|
||||
|
||||
=====================================
|
||||
escaped character
|
||||
=====================================
|
||||
|
||||
?\n
|
||||
?\t
|
||||
?\s
|
||||
?\\
|
||||
?\a
|
||||
?\b
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char))
|
||||
|
||||
=====================================
|
||||
list of char literals
|
||||
=====================================
|
||||
|
||||
[?a, ?b, ?c]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(char)
|
||||
(char)
|
||||
(char)))
|
|
@ -0,0 +1,208 @@
|
|||
=====================================
|
||||
single line
|
||||
=====================================
|
||||
|
||||
'Hello, 123!'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
multiple lines
|
||||
=====================================
|
||||
|
||||
'line 1
|
||||
line 2'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
interpolation
|
||||
=====================================
|
||||
|
||||
'hey #{name}!'
|
||||
'hey #{
|
||||
name
|
||||
}!'
|
||||
'##{name}#'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
nested interpolation
|
||||
=====================================
|
||||
|
||||
'this is #{'number #{1}'}!'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escape sequence
|
||||
=====================================
|
||||
|
||||
'_\'_\n_\t_\r_\e_\\_\1_\x3f_\u0065\u0301_'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escaped interpolation
|
||||
=====================================
|
||||
|
||||
'\#{1}'
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / charlist
|
||||
=====================================
|
||||
|
||||
'''
|
||||
text
|
||||
with 'quotes'
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / interpolation
|
||||
=====================================
|
||||
|
||||
'''
|
||||
hey #{name}!
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / nested interpolation
|
||||
=====================================
|
||||
|
||||
'''
|
||||
this is #{
|
||||
'''
|
||||
number #{1}
|
||||
'''
|
||||
}!
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(charlist
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / escaped delimiter
|
||||
=====================================
|
||||
|
||||
'''
|
||||
\'''
|
||||
'''
|
||||
|
||||
'''
|
||||
\'\'\'
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(charlist
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / escaped interpolation
|
||||
=====================================
|
||||
|
||||
'''
|
||||
\#{1}
|
||||
'''
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(escape_sequence)
|
||||
(string_content)))
|
|
@ -0,0 +1,48 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
1234567890.1234567890
|
||||
-1234567890.1234567890
|
||||
-1_234_567_890.123_456_789_0
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(float)
|
||||
(unary_operator
|
||||
(float))
|
||||
(unary_operator
|
||||
(float)))
|
||||
|
||||
=====================================
|
||||
scientific notation
|
||||
=====================================
|
||||
|
||||
1.0e6
|
||||
1.0e+6
|
||||
1.0e-6
|
||||
-1.0e6
|
||||
-1.0e+6
|
||||
-1.0e-6
|
||||
1.0E6
|
||||
1.0E+6
|
||||
1.0E-6
|
||||
1_234_567_890.123_456_789_0e1_234_567_890
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(float)
|
||||
(float)
|
||||
(float)
|
||||
(unary_operator
|
||||
(float))
|
||||
(unary_operator
|
||||
(float))
|
||||
(unary_operator
|
||||
(float))
|
||||
(float)
|
||||
(float)
|
||||
(float)
|
||||
(float))
|
|
@ -0,0 +1,66 @@
|
|||
=====================================
|
||||
decimal
|
||||
=====================================
|
||||
|
||||
1234567890
|
||||
-1234567890
|
||||
1_234_567_890
|
||||
019
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(unary_operator
|
||||
(integer))
|
||||
(integer)
|
||||
(integer)
|
||||
(integer))
|
||||
|
||||
=====================================
|
||||
binary
|
||||
=====================================
|
||||
|
||||
0b0101011
|
||||
-0b0101011
|
||||
0b0_10_10_11
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(unary_operator
|
||||
(integer))
|
||||
(integer))
|
||||
|
||||
=====================================
|
||||
octal
|
||||
=====================================
|
||||
|
||||
0o1234567
|
||||
-0o1234567
|
||||
0o1_23_45_67
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(unary_operator
|
||||
(integer))
|
||||
(integer))
|
||||
|
||||
=====================================
|
||||
hexadecimal
|
||||
=====================================
|
||||
|
||||
0x123456789abcdefABCDEF
|
||||
-0x123456789abcdefABCDEF
|
||||
0x123456789_abcdef_ABCDEF
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(integer)
|
||||
(unary_operator
|
||||
(integer))
|
||||
(integer))
|
|
@ -0,0 +1,158 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
[a_b@12?: 1, A_B@12!: 2]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
[a: 1,]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
with leading items
|
||||
=====================================
|
||||
|
||||
[1, {:c, 1}, a: 1, b: 2]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(integer)
|
||||
(tuple
|
||||
(atom
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
operator key
|
||||
=====================================
|
||||
|
||||
[~~~: 1, ==: 2, >: 3]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
quoted key
|
||||
=====================================
|
||||
|
||||
[
|
||||
"key1 ?? !! ' \n": 1,
|
||||
'key2 ?? !! " \n': 2
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(string_content)
|
||||
(escape_sequence))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(string_content)
|
||||
(escape_sequence))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
key interpolation
|
||||
=====================================
|
||||
|
||||
[
|
||||
"hey #{name}!": 1,
|
||||
'hey #{name}!': 2
|
||||
]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
[error] with trailing items
|
||||
=====================================
|
||||
|
||||
[a: 1, b: 2, 1]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(ERROR
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal)))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal)))))
|
||||
(integer)))
|
|
@ -0,0 +1,82 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
[]
|
||||
[1]
|
||||
[1, 2]
|
||||
[1,2]
|
||||
[ 1 , 2 ]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list)
|
||||
(list
|
||||
(integer))
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(list
|
||||
(integer)
|
||||
(integer))
|
||||
(list
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
nested
|
||||
=====================================
|
||||
|
||||
[[1], 1]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(list
|
||||
(integer))
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
[1,]
|
||||
[1,2,]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(integer))
|
||||
(list
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
[error] missing element
|
||||
=====================================
|
||||
|
||||
[, 1]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(ERROR
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
[error] missing separator
|
||||
=====================================
|
||||
|
||||
[1 2]
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(list
|
||||
(integer)
|
||||
(ERROR
|
||||
(integer))))
|
|
@ -0,0 +1,201 @@
|
|||
=====================================
|
||||
empty
|
||||
=====================================
|
||||
|
||||
%{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map))
|
||||
|
||||
=====================================
|
||||
from keywords
|
||||
=====================================
|
||||
|
||||
%{a: 1, b: 2}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
from arrow entries
|
||||
=====================================
|
||||
|
||||
%{:a => 1, "b" => 2, c => 3}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(binary_operator
|
||||
(atom
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
from both arrow entries and keywords
|
||||
=====================================
|
||||
|
||||
%{"a" => 1, b: 2, c: 3}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
%{"a" => 1,}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
update syntax
|
||||
=====================================
|
||||
|
||||
%{user | name: "Jane", email: "jane@example.com"}
|
||||
%{user | "name" => "Jane"}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(string
|
||||
(string_content)))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(string
|
||||
(string_content)))))))
|
||||
(map
|
||||
(map_content
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
[error] ordering
|
||||
=====================================
|
||||
|
||||
%{b: 2, c: 3, "a" => 1}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content)
|
||||
(ERROR
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal)))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal)))))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
[error] missing separator
|
||||
=====================================
|
||||
|
||||
%{"a" => 1 "b" => 2}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content)
|
||||
(ERROR
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer)))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
[error] invalid content
|
||||
=====================================
|
||||
|
||||
%{1}
|
||||
%{1, 1}
|
||||
%{a, [], {}}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(map_content
|
||||
(ERROR
|
||||
(integer))))
|
||||
(map
|
||||
(map_content
|
||||
(ERROR
|
||||
(integer)
|
||||
(integer))))
|
||||
(map
|
||||
(map_content
|
||||
(ERROR
|
||||
(identifier)
|
||||
(list)
|
||||
(tuple)))))
|
|
@ -0,0 +1,10 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
nil
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(nil))
|
|
@ -0,0 +1,220 @@
|
|||
=====================================
|
||||
single line
|
||||
=====================================
|
||||
|
||||
"Hello, 123!"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
multiple lines
|
||||
=====================================
|
||||
|
||||
"line 1
|
||||
line 2"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
interpolation
|
||||
=====================================
|
||||
|
||||
"hey #{name}!"
|
||||
"hey #{
|
||||
name
|
||||
}!"
|
||||
"##{name}#"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content))
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
nested interpolation
|
||||
=====================================
|
||||
|
||||
"this is #{"number #{1}"}!"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escape sequence
|
||||
=====================================
|
||||
|
||||
"_\"_\n_\t_\r_\e_\\_\1_\x3f_\u0065\u0301_"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(escape_sequence)
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
escaped interpolation
|
||||
=====================================
|
||||
|
||||
"\#{1}"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / string
|
||||
=====================================
|
||||
|
||||
"""
|
||||
text
|
||||
with "quotes"
|
||||
"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / interpolation
|
||||
=====================================
|
||||
|
||||
"""
|
||||
hey #{name}!
|
||||
"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / nested interpolation
|
||||
=====================================
|
||||
|
||||
"""
|
||||
this is #{
|
||||
"""
|
||||
number #{1}
|
||||
"""
|
||||
}!
|
||||
"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(string
|
||||
(string_content)
|
||||
(interpolation
|
||||
(identifier))))
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / escaped delimiter
|
||||
=====================================
|
||||
|
||||
"""
|
||||
\"""
|
||||
"""
|
||||
|
||||
"""
|
||||
\"\"\"
|
||||
"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(escape_sequence)
|
||||
(string_content)
|
||||
(string
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
heredoc / escaped interpolation
|
||||
=====================================
|
||||
|
||||
"""
|
||||
\#{1}
|
||||
"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(escape_sequence)
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
[error] heredoc / no whitespace
|
||||
=====================================
|
||||
|
||||
"""s"""
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(ERROR
|
||||
(identifier)))
|
|
@ -0,0 +1,201 @@
|
|||
=====================================
|
||||
empty
|
||||
=====================================
|
||||
|
||||
%User{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(alias))))
|
||||
|
||||
=====================================
|
||||
from keywords
|
||||
=====================================
|
||||
|
||||
%User{a: 1, b: 2}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(alias))
|
||||
(map_content
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
from arrow entries
|
||||
=====================================
|
||||
|
||||
%User{:a => 1, "b" => 2, c => 3}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(alias))
|
||||
(map_content
|
||||
(binary_operator
|
||||
(atom
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
from both arrow entries and keywords
|
||||
=====================================
|
||||
|
||||
%User{"a" => 1, b: 2, c: 3}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(alias))
|
||||
(map_content
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
%User{"a" => 1,}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(alias))
|
||||
(map_content
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer)))))
|
||||
|
||||
=====================================
|
||||
update syntax
|
||||
=====================================
|
||||
|
||||
%User{user | name: "Jane", email: "jane@example.com"}
|
||||
%User{user | "name" => "Jane"}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct (alias))
|
||||
(map_content
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(keywords
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(string
|
||||
(string_content)))
|
||||
(pair
|
||||
(keyword
|
||||
(atom_literal))
|
||||
(string
|
||||
(string_content)))))))
|
||||
(map
|
||||
(struct
|
||||
(alias))
|
||||
(map_content
|
||||
(binary_operator
|
||||
(identifier)
|
||||
(binary_operator
|
||||
(string
|
||||
(string_content))
|
||||
(integer))))))
|
||||
|
||||
=====================================
|
||||
unused struct identifier
|
||||
=====================================
|
||||
|
||||
%_{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(unused_identifier))))
|
||||
|
||||
=====================================
|
||||
matching struct identifier
|
||||
=====================================
|
||||
|
||||
%name{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(identifier))))
|
||||
|
||||
=====================================
|
||||
pinned struct identifier
|
||||
=====================================
|
||||
|
||||
%^name{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(unary_operator
|
||||
(identifier)))))
|
||||
|
||||
=====================================
|
||||
with special identifier
|
||||
=====================================
|
||||
|
||||
%__MODULE__{}
|
||||
%__MODULE__.Child{}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(map
|
||||
(struct
|
||||
(special_identifier)))
|
||||
(map
|
||||
(struct
|
||||
(dot
|
||||
(special_identifier)
|
||||
(alias)))))
|
|
@ -0,0 +1,82 @@
|
|||
=====================================
|
||||
simple literal
|
||||
=====================================
|
||||
|
||||
{}
|
||||
{1}
|
||||
{1, 2}
|
||||
{1,2}
|
||||
{ 1 , 2 }
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(tuple)
|
||||
(tuple
|
||||
(integer))
|
||||
(tuple
|
||||
(integer)
|
||||
(integer))
|
||||
(tuple
|
||||
(integer)
|
||||
(integer))
|
||||
(tuple
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
nested
|
||||
=====================================
|
||||
|
||||
{{1}, 1}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(tuple
|
||||
(tuple
|
||||
(integer))
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
trailing separator
|
||||
=====================================
|
||||
|
||||
{1,}
|
||||
{1,2,}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(tuple
|
||||
(integer))
|
||||
(tuple
|
||||
(integer)
|
||||
(integer)))
|
||||
|
||||
=====================================
|
||||
[error] missing element
|
||||
=====================================
|
||||
|
||||
{, 1}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(tuple
|
||||
(ERROR
|
||||
(integer))))
|
||||
|
||||
=====================================
|
||||
[error] missing separator
|
||||
=====================================
|
||||
|
||||
{1 2}
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(tuple
|
||||
(integer)
|
||||
(ERROR
|
||||
(integer))))
|
|
@ -0,0 +1,114 @@
|
|||
=====================================
|
||||
atom
|
||||
=====================================
|
||||
|
||||
:time_μs
|
||||
:"£"
|
||||
:'£'
|
||||
:こんにちは世界
|
||||
:Ólá
|
||||
:olá
|
||||
:Olá
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(string_content))
|
||||
(atom
|
||||
(string_content))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal))
|
||||
(atom
|
||||
(atom_literal)))
|
||||
|
||||
=====================================
|
||||
string
|
||||
=====================================
|
||||
|
||||
"time_μs"
|
||||
"£"
|
||||
"こんにちは世界"
|
||||
"Ólá"
|
||||
"olá"
|
||||
"Olá"
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(string
|
||||
(string_content))
|
||||
(string
|
||||
(string_content))
|
||||
(string
|
||||
(string_content))
|
||||
(string
|
||||
(string_content))
|
||||
(string
|
||||
(string_content))
|
||||
(string
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
charlist
|
||||
=====================================
|
||||
|
||||
'time_μs'
|
||||
'£'
|
||||
'こんにちは世界'
|
||||
'Ólá'
|
||||
'olá'
|
||||
'Olá'
|
||||
---
|
||||
|
||||
(source
|
||||
(charlist
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content))
|
||||
(charlist
|
||||
(string_content)))
|
||||
|
||||
=====================================
|
||||
char
|
||||
=====================================
|
||||
|
||||
?ł
|
||||
?μ
|
||||
?£
|
||||
?こ
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(char)
|
||||
(char)
|
||||
(char)
|
||||
(char))
|
||||
|
||||
=====================================
|
||||
variable
|
||||
=====================================
|
||||
|
||||
time_μs
|
||||
こんにちは世界
|
||||
olá
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier))
|
|
@ -0,0 +1,63 @@
|
|||
=====================================
|
||||
regular
|
||||
=====================================
|
||||
|
||||
snake_case
|
||||
camelCase
|
||||
az_AZ_19
|
||||
bang!
|
||||
question?
|
||||
__TEST__
|
||||
doctest
|
||||
not1
|
||||
notfalse
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier))
|
||||
|
||||
=====================================
|
||||
unused
|
||||
=====================================
|
||||
|
||||
_
|
||||
_number
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(unused_identifier)
|
||||
(unused_identifier))
|
||||
|
||||
=====================================
|
||||
three dots identifier
|
||||
=====================================
|
||||
|
||||
...
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(identifier))
|
||||
|
||||
=====================================
|
||||
special identifier
|
||||
=====================================
|
||||
|
||||
__MODULE__
|
||||
__DIR__
|
||||
|
||||
---
|
||||
|
||||
(source
|
||||
(special_identifier)
|
||||
(special_identifier))
|
Loading…
Reference in New Issue