plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
plum-tooling/tree-sitter-plum/test/corpus/elvis.txt
================================================================================
elvis operator - unwraps Ok/Some or falls back to the right-hand value
================================================================================
fun firstOrDefault(list: List[Int], default: Int) -> Int =
list.get(0) ?: default
--------------------------------------------------------------------------------
(source
(fn
(fn_identifier)
(param
(var_identifier)
(type
(type_identifier)
(type
(type_identifier))))
(param
(var_identifier)
(type
(type_identifier)))
(type
(type_identifier))
(body
(expression
(elvis_expression
(expression
(primary_expression
(attribute
(primary_expression
(var_identifier))
(fn_identifier)
(fn_argument_list
(expression
(primary_expression
(integer)))))))
(expression
(primary_expression
(var_identifier))))))))
================================================================================
elvis operator - coexists with ternary and try, all sharing `?`-prefixed tokens
================================================================================
fun classify(n: Int) -> Int =
a = n > 0 ? n : 0
b = n ?: 0
c = n?
a + b + c
--------------------------------------------------------------------------------
(source
(fn
name: (fn_identifier)
params: (param
name: (var_identifier)
type: (type
(type_identifier)))
returns: (type
(type_identifier))
body: (body
(assign
(var_identifier)
(expression
(ternary_expression
(expression
(comparison_operator
(primary_expression
(var_identifier))
(primary_expression
(integer))))
(expression
(primary_expression
(var_identifier)))
(expression
(primary_expression
(integer))))))
(assign
(var_identifier)
(expression
(elvis_expression
(expression
(primary_expression
(var_identifier)))
(expression
(primary_expression
(integer))))))
(assign
(var_identifier)
(expression
(primary_expression
(try_expression
value: (primary_expression
(var_identifier))))))
(expression
(primary_expression
(binary_operator
left: (primary_expression
(binary_operator
left: (primary_expression
(var_identifier))
right: (primary_expression
(var_identifier))))
right: (primary_expression
(var_identifier))))))))