From 92cc395e2eee1e0d7e051775a795e5f83e45c5e9 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Sun, 9 Nov 2025 13:29:28 -0800 Subject: wip error handling --- src/lang/ts-lang/core/parser.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'src/lang/ts-lang/core/parser.ts') diff --git a/src/lang/ts-lang/core/parser.ts b/src/lang/ts-lang/core/parser.ts index 3a497a2..fd40e63 100644 --- a/src/lang/ts-lang/core/parser.ts +++ b/src/lang/ts-lang/core/parser.ts @@ -1,11 +1,14 @@ -import { ASTNode, NodeType, ParserCtx, Token, TokenType } from "./common"; +import { + ASTNode, + KSError, + NodeType, + ParserCtx, + Token, + TokenType, +} from "./common"; -export type Error = ASTNode< - NodeType.PARSER_ERROR, - "Error", - T, - [] ->; +export type ParserError = + KSError<`Parser error: ${Message}`>; export type PushChild = { type: Node["type"]; @@ -129,7 +132,7 @@ export type _Parse = Ctx["remainingTokens"] extends [ remainingTokens: Tail; stack: [...Ctx["stack"], ResolveNodeFromToken]; }> - : Ctx & Error<`Was not expecting ${Head["type"]}`> + : ParserError<`Was not expecting ${Head["type"]}`> : // expect nextToken to be a name or close paren Head["type"] extends TokenType.NAME ? // lastToken = nextToken @@ -152,8 +155,7 @@ export type _Parse = Ctx["remainingTokens"] extends [ > >; }> - : Ctx & - Error<`Expected nextToken to be a name or close paren at ${Head["type"]}`> + : ParserError<`Expected nextToken to be a name or close paren at ${Head["type"]}`> : Ctx["lastToken"] extends Token ? // case where we ended with a name _Parse<{ @@ -170,4 +172,10 @@ export type Parse = _Parse<{ lastToken: null; remainingTokens: Raw; stack: [ASTNode]; -}>; +}> extends infer P + ? P extends ASTNode + ? P + : P extends KSError + ? E + : never + : never; -- cgit v1.2.3-70-g09d2