Fix whitespace handling in type declarations

main
trivernis 4 months ago
parent a14471651b
commit 593ee04654
Signed by: Trivernis
GPG Key ID: 7E6D18B61C8D2F4B

@ -31,10 +31,10 @@ type_decl = { "type" ~ #name = type_ident ~ "=" ~ type_expr }
type_expr = { func | type_term | type_ident } type_expr = { func | type_term | type_ident }
type_term = _{ tuple | rec | enum | type_ident } type_term = _{ tuple | rec | enum | type_ident }
tuple = { "#(" ~ MLF ~ (tuple_entry ~ SEPARATE)* ~ MLF ~ tuple_entry? ~ ")" } tuple = { "#(" ~ MLF ~ (tuple_entry ~ SEPARATE)* ~ tuple_entry? ~ ")" }
tuple_entry = _{ type_expr ~ MLF } tuple_entry = _{ type_expr }
rec = { "{" ~ MLF ~ (rec_field ~ SEPARATE ~ MLF)* ~ rec_field? ~ MLF ~ "}" } rec = { "{" ~ MLF ~ (rec_field ~ SEPARATE)* ~ rec_field? ~ "}" }
rec_field = { #field_name = ident ~ ":" ~ #field_type = type_expr* } rec_field = { #field_name = ident ~ ":" ~ #field_type = type_expr* }
enum = { "(" ~ MLF ~ ("|" ~ enum_vrt ~ MLF)* ~ "|"? ~ MLF ~ ")" } enum = { "(" ~ MLF ~ ("|" ~ enum_vrt ~ MLF)* ~ "|"? ~ MLF ~ ")" }
@ -50,9 +50,9 @@ type_arg = @{ SYM_CAMEL_CASE }
// TODO: copy it for declarations where destructuring can only be done into one variant // TODO: copy it for declarations where destructuring can only be done into one variant
pattern = _{ tuple_pattern | rec_pattern | enum_pattern | #var_name = ident } pattern = _{ tuple_pattern | rec_pattern | enum_pattern | #var_name = ident }
tuple_pattern = { "#(" ~ MLF ~ (pattern ~ MLF)+ ~ ")" } tuple_pattern = { "#(" ~ MLF ~ pattern ~ (SEPARATE ~ pattern)* ~ SEPARATE? ~ ")" }
rec_pattern = { "{" ~ MLF ~ (rec_pattern_field ~ MLF)+ ~ "}" } rec_pattern = { "{" ~ MLF ~ pattern ~ (SEPARATE ~ rec_pattern_field)* ~ SEPARATE? ~ "}" }
rec_pattern_field = { #var_name = ident | rec_pattern_mapped_field ~ TERMINATE } rec_pattern_field = { #var_name = ident | rec_pattern_mapped_field ~ SEPARATE }
rec_pattern_mapped_field = _{ #field_name = ident ~ ":" ~ pattern } rec_pattern_mapped_field = _{ #field_name = ident ~ ":" ~ pattern }
enum_pattern = { #vrt = ident ~ pattern+ } enum_pattern = { #vrt = ident ~ pattern+ }
@ -82,7 +82,7 @@ SYM_CAMEL_CASE = @{ !KEYWORD ~ ASCII_ALPHA_LOWER ~ (ALPHABETIC | NUMBER | "_")*
KEYWORD = _{ "let" | "enum" | "if" | "then" | "else" } KEYWORD = _{ "let" | "enum" | "if" | "then" | "else" }
TERMINATE = _{ LF | EOI | ";" } TERMINATE = _{ LF | EOI | ";" }
SEPARATE = _{ LF | EOI | "," } SEPARATE = _{ LF+ | MLF ~ EOI | MLF ~ "," ~ MLF }
MLF = _{ (LF)* } MLF = _{ (LF)* }
LF = _{ "\n" | "\r" } LF = _{ "\n" | "\r" }

@ -1,4 +1,3 @@
use pest::{consumes_to, parses_to};
use pest_test::PestTester; use pest_test::PestTester;
use crate::{Rule, SnekParser}; use crate::{Rule, SnekParser};

Loading…
Cancel
Save