Adding Error Codes
Overview
Vole uses structured error codes: E0xxx (lexer), E1xxx (parser), E2xxx (semantic).
Checklist
- •
Get next available code:
bashjust dev-next-error sema # For semantic errors (E2xxx) just dev-next-error parser # For parser errors (E1xxx) just dev-next-error lexer # For lexer errors (E0xxx)
- •
List existing errors (for reference):
bashjust dev-list-errors sema just dev-list-errors parser
- •
Add error variant to the appropriate file:
Error Type File Lexer src/errors/lexer.rsParser src/errors/parser.rsSemantic src/errors/sema.rs - •
Emit the error in the relevant analyzer/parser code:
Error Type Emission Location Lexer src/frontend/lexer.rsParser src/frontend/parser/*.rsSemantic (expr) src/sema/analyzer/expr.rsSemantic (stmt) src/sema/analyzer/stmt.rsSemantic (patterns) src/sema/analyzer/patterns.rs - •
Add snapshot test for error message:
- •Create
test/snapshot/check/your_error.volewith code that triggers the error - •Run
cargo run --bin vole-snap -- bless test/snapshot/check/your_error.vole
- •Create
- •
Verify:
bashjust ci
Error Code Format
rust
// In errors/sema.rs (example) E2061 => "cannot use `break` outside of a loop",
Diagnostic Builder
Use the diagnostic builder for rich error messages:
rust
self.error(SemaError::YourError)
.span(span)
.label(span, "explanation here")
.emit();