fix: allow multiline grouped sum types

This commit is contained in:
2026-10-09 23:25:09 +02:00
parent 7f7de7a8d2
commit 7cb4ace0fa
3 changed files with 73 additions and 4 deletions
+13 -3
View File
@@ -429,7 +429,8 @@ parse_type_atom :: proc(parser: ^Parser) -> ast.Type_Syntax {
return types.BOOL
case .Left_Paren:
advance(parser)
grouped := parse_type(parser)
skip_newlines(parser)
grouped := parse_type_pipe_tail(parser, parse_type_atom(parser), true)
if _, ok := allow(parser, .Right_Paren); !ok {
source.add(parser.diagnostics, current(parser).span, "expected ')' after grouped type")
}
@@ -533,10 +534,19 @@ sum_syntax_requires_resolution :: proc(parser: ^Parser, value: types.Type, depth
return false
}
parse_type_pipe_tail :: proc(parser: ^Parser, left: ast.Type_Syntax) -> ast.Type_Syntax {
parse_type_pipe_tail :: proc(parser: ^Parser, left: ast.Type_Syntax, multiline := false) -> ast.Type_Syntax {
result := left
for current(parser).kind == .Pipe {
for {
if multiline {
skip_newlines(parser)
}
if current(parser).kind != .Pipe {
break
}
operator := advance(parser)
if multiline {
skip_newlines(parser)
}
right := parse_type_atom(parser)
composed, compose_error := types.compose_sum(&parser.module.type_store, result, right)
if compose_error == .Unsupported {