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/try.txt
================================================================================
try operator - postfix ? unwraps or returns early
================================================================================
fun parsePositive(s: Str) -> Result[Int, Str] =
n := parseInt(s)?
return Ok(n)
--------------------------------------------------------------------------------
(source
(fn
name: (fn_identifier)
params: (param
name: (var_identifier)
type: (type
(type_identifier)))
returns: (type
(type_identifier)
generics: (type
(type_identifier))
generics: (type
(type_identifier)))
body: (body
(assign
(var_identifier)
(expression
(primary_expression
(try_expression
value: (primary_expression
(fn_call
function: (var_identifier)
arguments: (fn_argument_list
(expression
(primary_expression
(var_identifier))))))))))
(return
(expression
(primary_expression
(fn_call
function: (type_identifier)
arguments: (fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))))
================================================================================
try operator - coexists with the unrelated ternary operator, same `?` token
================================================================================
fun classify(n: Int) -> Int =
picked = n > 0 ? n : 0
picked
--------------------------------------------------------------------------------
(source
(fn
(fn_identifier)
(param
(var_identifier)
(type
(type_identifier)))
(type
(type_identifier))
(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))))))
(expression
(primary_expression
(var_identifier))))))