plum

#treesitter#compiler#wasm

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))))))