Add @let statement support

This commit is contained in:
Michael Netshipise 2026-01-19 08:00:36 +02:00
parent f3a7ee0c2e
commit 6d858472b2
5 changed files with 23496 additions and 17752 deletions

View File

@ -199,6 +199,7 @@ module.exports = grammar({
// Control flow // Control flow
template_control_flow: ($) => template_control_flow: ($) =>
choice( choice(
$.let_statement,
$.if_statement, $.if_statement,
$.for_loop, $.for_loop,
$.match_statement, $.match_statement,
@ -206,6 +207,10 @@ module.exports = grammar({
$.continue_statement, $.continue_statement,
), ),
// Let binding: @let name = expression
let_statement: ($) =>
seq("@let", $.pattern, "=", $.expression),
if_statement: ($) => if_statement: ($) =>
seq( seq(
"@if", "@if",

View File

@ -13,6 +13,7 @@
"@struct" @keyword "@struct" @keyword
"@enum" @keyword "@enum" @keyword
"@func" @keyword "@func" @keyword
"@let" @keyword
"@if" @keyword "@if" @keyword
"@for" @keyword "@for" @keyword
"@match" @keyword "@match" @keyword

View File

@ -975,6 +975,10 @@
"template_control_flow": { "template_control_flow": {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{
"type": "SYMBOL",
"name": "let_statement"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "if_statement" "name": "if_statement"
@ -997,6 +1001,27 @@
} }
] ]
}, },
"let_statement": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@let"
},
{
"type": "SYMBOL",
"name": "pattern"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "expression"
}
]
},
"if_statement": { "if_statement": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [

View File

@ -826,6 +826,25 @@
"named": true, "named": true,
"fields": {} "fields": {}
}, },
{
"type": "let_statement",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": true,
"types": [
{
"type": "expression",
"named": true
},
{
"type": "pattern",
"named": true
}
]
}
},
{ {
"type": "literal", "type": "literal",
"named": true, "named": true,
@ -1418,6 +1437,10 @@
"type": "if_statement", "type": "if_statement",
"named": true "named": true
}, },
{
"type": "let_statement",
"named": true
},
{ {
"type": "match_statement", "type": "match_statement",
"named": true "named": true
@ -1802,6 +1825,10 @@
"type": "@import", "type": "@import",
"named": false "named": false
}, },
{
"type": "@let",
"named": false
},
{ {
"type": "@match", "type": "@match",
"named": false "named": false

41190
src/parser.c

File diff suppressed because it is too large Load Diff