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