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/enum.txt
================================================================================
enum
================================================================================
enum Bool =
| True
| False
fun toStr() -> Str =
"Bool"
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(field
(type_identifier))
(field
(type_identifier))
(fn
(fn_identifier)
(type
(type_identifier))
(body
(expression
(primary_expression
(string
(string_start)
(string_content)
(string_end))))))))
================================================================================
enum - generic variant fields
================================================================================
enum Option =
| Some(T)
| None
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(field
(type_identifier)
(type
(generic)))
(field
(type_identifier))))
================================================================================
enum - nested generic variant field
================================================================================
enum Json =
| JsonList(List[Json])
| JsonNull
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(field
(type_identifier)
(type
(type_identifier)
(type
(type_identifier))))
(field
(type_identifier))))
================================================================================
enum - nested method declaration
================================================================================
enum Step =
| ReadMin
| ReadMax
fun toNumber(self) -> Int =
match self
ReadMin => 0
ReadMax => 1
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(field
(type_identifier))
(field
(type_identifier))
(fn
(fn_identifier)
(self)
(type
(type_identifier))
(body
(match
(expression
(primary_expression
(self)))
(case
(case_pattern
(type_identifier))
(expression
(primary_expression
(integer))))
(case
(case_pattern
(type_identifier))
(expression
(primary_expression
(integer)))))))))
================================================================================
enum - discriminant values
================================================================================
enum Step(n: Int) =
| ReadMin(0)
| ReadMax(1)
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(enum_param
(var_identifier)
(type
(type_identifier)))
(field
(type_identifier)
(expression
(primary_expression
(integer))))
(field
(type_identifier)
(expression
(primary_expression
(integer))))))
================================================================================
enum - named payload fields
================================================================================
enum Shape =
| Circle(radius: Int)
| Square(x: Int, y: Int)
--------------------------------------------------------------------------------
(source
(enum
(type_identifier)
(field
(type_identifier)
(enum_named_field
(var_identifier)
(type
(type_identifier))))
(field
(type_identifier)
(enum_named_field
(var_identifier)
(type
(type_identifier)))
(enum_named_field
(var_identifier)
(type
(type_identifier))))))