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
| ec5336f | 1 | ================================================================================ |
| ec5336f | 2 | elvis operator - unwraps Ok/Some or falls back to the right-hand value |
| ec5336f | 3 | ================================================================================ |
| ec5336f | 4 | |
| ec5336f | 5 | fun firstOrDefault(list: List[Int], default: Int) -> Int = |
| ec5336f | 6 | list.get(0) ?: default |
| ec5336f | 7 | |
| ec5336f | 8 | -------------------------------------------------------------------------------- |
| ec5336f | 9 | |
| ec5336f | 10 | (source |
| ec5336f | 11 | (fn |
| ec5336f | 12 | (fn_identifier) |
| ec5336f | 13 | (param |
| ec5336f | 14 | (var_identifier) |
| ec5336f | 15 | (type |
| ec5336f | 16 | (type_identifier) |
| ec5336f | 17 | (type |
| ec5336f | 18 | (type_identifier)))) |
| ec5336f | 19 | (param |
| ec5336f | 20 | (var_identifier) |
| ec5336f | 21 | (type |
| ec5336f | 22 | (type_identifier))) |
| ec5336f | 23 | (type |
| ec5336f | 24 | (type_identifier)) |
| ec5336f | 25 | (body |
| ec5336f | 26 | (expression |
| ec5336f | 27 | (elvis_expression |
| ec5336f | 28 | (expression |
| ec5336f | 29 | (primary_expression |
| ec5336f | 30 | (attribute |
| ec5336f | 31 | (primary_expression |
| ec5336f | 32 | (var_identifier)) |
| ec5336f | 33 | (fn_identifier) |
| ec5336f | 34 | (fn_argument_list |
| ec5336f | 35 | (expression |
| ec5336f | 36 | (primary_expression |
| ec5336f | 37 | (integer))))))) |
| ec5336f | 38 | (expression |
| ec5336f | 39 | (primary_expression |
| ec5336f | 40 | (var_identifier)))))))) |
| ec5336f | 41 | |
| ec5336f | 42 | ================================================================================ |
| ec5336f | 43 | elvis operator - coexists with ternary and try, all sharing `?`-prefixed tokens |
| ec5336f | 44 | ================================================================================ |
| ec5336f | 45 | |
| ec5336f | 46 | fun classify(n: Int) -> Int = |
| ec5336f | 47 | a = n > 0 ? n : 0 |
| ec5336f | 48 | b = n ?: 0 |
| ec5336f | 49 | c = n? |
| ec5336f | 50 | a + b + c |
| ec5336f | 51 | |
| ec5336f | 52 | -------------------------------------------------------------------------------- |
| ec5336f | 53 | |
| ec5336f | 54 | (source |
| ec5336f | 55 | (fn |
| ec5336f | 56 | name: (fn_identifier) |
| ec5336f | 57 | params: (param |
| ec5336f | 58 | name: (var_identifier) |
| ec5336f | 59 | type: (type |
| ec5336f | 60 | (type_identifier))) |
| ec5336f | 61 | returns: (type |
| ec5336f | 62 | (type_identifier)) |
| ec5336f | 63 | body: (body |
| ec5336f | 64 | (assign |
| ec5336f | 65 | (var_identifier) |
| ec5336f | 66 | (expression |
| ec5336f | 67 | (ternary_expression |
| ec5336f | 68 | (expression |
| ec5336f | 69 | (comparison_operator |
| ec5336f | 70 | (primary_expression |
| ec5336f | 71 | (var_identifier)) |
| ec5336f | 72 | (primary_expression |
| ec5336f | 73 | (integer)))) |
| ec5336f | 74 | (expression |
| ec5336f | 75 | (primary_expression |
| ec5336f | 76 | (var_identifier))) |
| ec5336f | 77 | (expression |
| ec5336f | 78 | (primary_expression |
| ec5336f | 79 | (integer)))))) |
| ec5336f | 80 | (assign |
| ec5336f | 81 | (var_identifier) |
| ec5336f | 82 | (expression |
| ec5336f | 83 | (elvis_expression |
| ec5336f | 84 | (expression |
| ec5336f | 85 | (primary_expression |
| ec5336f | 86 | (var_identifier))) |
| ec5336f | 87 | (expression |
| ec5336f | 88 | (primary_expression |
| ec5336f | 89 | (integer)))))) |
| ec5336f | 90 | (assign |
| ec5336f | 91 | (var_identifier) |
| ec5336f | 92 | (expression |
| ec5336f | 93 | (primary_expression |
| ec5336f | 94 | (try_expression |
| ec5336f | 95 | value: (primary_expression |
| ec5336f | 96 | (var_identifier)))))) |
| ec5336f | 97 | (expression |
| ec5336f | 98 | (primary_expression |
| ec5336f | 99 | (binary_operator |
| ec5336f | 100 | left: (primary_expression |
| ec5336f | 101 | (binary_operator |
| ec5336f | 102 | left: (primary_expression |
| ec5336f | 103 | (var_identifier)) |
| ec5336f | 104 | right: (primary_expression |
| ec5336f | 105 | (var_identifier)))) |
| ec5336f | 106 | right: (primary_expression |
| ec5336f | 107 | (var_identifier)))))))) |