///| SyntaxKind constants for expr_lang
// Token kinds (1-99)
///|
pub fn eof() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(0)
}
///|
pub fn error_kind() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(1)
}
///|
pub fn whitespace() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(2)
}
///|
pub fn newline() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(3)
}
///|
pub fn name() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(10)
}
///|
pub fn number() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(11)
}
///|
pub fn let_kw() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(20)
}
///|
pub fn fn_kw() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(21)
}
///|
pub fn eq() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(30)
}
///|
pub fn plus() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(31)
}
///|
pub fn minus() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(32)
}
///|
pub fn star() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(33)
}
///|
pub fn slash() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(34)
}
///|
pub fn lparen() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(40)
}
///|
pub fn rparen() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(41)
}
///|
pub fn lbrace() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(42)
}
///|
pub fn rbrace() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(43)
}
///|
pub fn comma() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(44)
}
// Node kinds (100+)
///|
pub fn source_file() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(100)
}
///|
pub fn let_stmt() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(101)
}
///|
pub fn fn_def() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(102)
}
///|
pub fn param_list() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(103)
}
///|
pub fn block() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(104)
}
///|
pub fn binary_expr() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(105)
}
///|
pub fn call_expr() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(106)
}
///|
pub fn arg_list() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(107)
}
///|
pub fn paren_expr() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(108)
}
///|
pub fn expr_stmt() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(109)
}
///|
pub fn name_ref() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(110)
}
///|
pub fn literal() -> @cst.SyntaxKind {
@cst.SyntaxKind::new(111)
}
///|
/// Check if a SyntaxKind is a token (not a node)
pub fn is_token(kind : @cst.SyntaxKind) -> Bool {
kind.raw() < 100
}
///|
/// Check if a SyntaxKind is trivia (whitespace/newline)
pub fn is_trivia(kind : @cst.SyntaxKind) -> Bool {
kind == whitespace() || kind == newline()
}
///|
/// Get the name of a SyntaxKind for debugging
pub fn kind_name(kind : @cst.SyntaxKind) -> String {
match kind.raw() {
0 => "eof"
1 => "error"
2 => "whitespace"
3 => "newline"
10 => "name"
11 => "number"
20 => "let_kw"
21 => "fn_kw"
30 => "eq"
31 => "plus"
32 => "minus"
33 => "star"
34 => "slash"
40 => "lparen"
41 => "rparen"
42 => "lbrace"
43 => "rbrace"
44 => "comma"
100 => "source_file"
101 => "let_stmt"
102 => "fn_def"
103 => "param_list"
104 => "block"
105 => "binary_expr"
106 => "call_expr"
107 => "arg_list"
108 => "paren_expr"
109 => "expr_stmt"
110 => "name_ref"
111 => "literal"
_ => "unknown"
}
}