tree-sitter-elixir/test/corpus/expression/operator.txt

749 lines
13 KiB
Plaintext

=====================================
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 ^^^ 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_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
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))
(binary_operator
(binary_operator
(identifier)
(identifier))
(binary_operator
(identifier)
(identifier))))
=====================================
precedence determined by parentheses
=====================================
(& a) - b
(a + b) * (c - d)
---
(source
(binary_operator
(block
(unary_operator
(identifier)))
(identifier))
(binary_operator
(block
(binary_operator
(identifier)
(identifier)))
(block
(binary_operator
(identifier)
(identifier)))))
=====================================
"not in" spacing
=====================================
a not in b
---
(source
(binary_operator
(identifier)
(identifier)))
=====================================
"not in" boundary
=====================================
fun not inARG
---
(source
(call
(identifier)
(arguments
(unary_operator
(identifier)))))
=====================================
multiline / 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)))
=====================================
multiline / binary
=====================================
a
**
b
a
*
b
a
/
b
a
++
b
a
--
b
a
+++
b
a
---
b
a
..
b
a
<>
b
a
^^^
b
a
in
b
a
not in
b
a
|>
b
a
<<<
b
a
>>>
b
a
<<~
b
a
~>>
b
a
<~
b
a
~>
b
a
<~>
b
a
<|>
b
a
<
b
a
>
b
a
<=
b
a
>=
b
a
==
b
a
!=
b
a
=~
b
a
===
b
a
!==
b
a
&&
b
a
&&&
b
a
and
b
a
||
b
a
|||
b
a
or
b
a
=
b
a
|
b
a
::
b
a
when
b
a
<-
b
a
\\
b
---
(source
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier))
(binary_operator (identifier) (identifier)))
=====================================
multiline / unary over binary
=====================================
a
+
b
a
-
b
---
(source
(identifier)
(unary_operator
(identifier))
(identifier)
(unary_operator
(identifier)))
=====================================
multiline / right operands
=====================================
x
not in
[y]
x
not in[y]
:a
++:b
:a++
:b
---
(source
(binary_operator
(identifier)
(list
(identifier)))
(binary_operator
(identifier)
(list
(identifier)))
(binary_operator
(atom
(atom_literal))
(atom
(atom_literal)))
(binary_operator
(atom
(atom_literal))
(atom
(atom_literal))))
=====================================
multiline / unary over binary (precedence)
=====================================
x
-
y
x
+
y
---
(source
(identifier)
(unary_operator
(identifier))
(identifier)
(unary_operator
(identifier)))
=====================================
plus minus
=====================================
x+y
x + y
x+ y
x +y
x +y +z
---
(source
(binary_operator
(identifier)
(identifier))
(binary_operator
(identifier)
(identifier))
(binary_operator
(identifier)
(identifier))
(call
(identifier)
(arguments
(unary_operator
(identifier))))
(call
(identifier)
(arguments
(unary_operator
(call
(identifier)
(arguments
(unary_operator
(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))))