1.8 KiB
1.8 KiB
Source Location Error Fixes — Design Document
Date: 2026-06-10 Status: Approved Scope: Parser severity filtering + source maps for merged builds
1. Parser Diagnostics with Severity
Problem
Parser is fault-tolerant and generates diagnostics for recoverable errors (e.g., expected '}', skipping unknown declaration). The stdlib triggers many of these, but compilation succeeds because the parser recovers.
Solution
Add severity to ParserDiag:
struct ParserDiag {
line: uint32;
column: uint32;
message: String;
severity: int; /* 0=error (fatal), 1=warning (recoverable) */
}
parserExpect(),parserEmitDiag()set severity to1(warning/recoverable)- Only when the parser is completely stuck → severity
0(fatal) - In
Parser_Parse, print ONLY diags withseverity == 0, OR ifmod.itemCount == 0
2. Source Maps for bux build
Problem
Cli_BuildProject creates a merged module in memory. Sema errors show <merged> as the path because no physical file exists.
Solution
Before Sema_Analyze(merged), generate the merged source text from all declarations and write it to build/merged.bux. Pass this path to Diagnostic_Print.
Result:
error: undeclared identifier 'undefined_variable'
--> build/merged.bux:507:18
|
507 | let x: int = undefined_variable;
| ^
The user can open build/merged.bux to see the full context.
Files to Modify
| File | Change |
|---|---|
src/parser.bux |
Add severity to ParserDiag. Set severity in parserExpect/parserEmitDiag. Print only fatal errors in Parser_Parse. |
src/cli.bux |
Generate merged source text before Sema_Analyze. Write to build/merged.bux. Pass path to Diagnostic_Print. |