Diagnostics
Every diagnostic the q64 toolchain emits has a stable code. The compiler points
each error at docs.q64.dev/diagnostics/<CODE>, and q64 explain <code>
prints the same information in your terminal — all from one registry.
| Code | Subsystem | Severity | Message |
|---|---|---|---|
LEX010 | Lexical | error | stray carriage return |
LEX020 | Lexical | error | unknown string-literal prefix |
LEX021 | Lexical | error | unexpected & in type position |
LEX030 | Lexical | error | unterminated string literal |
LEX031 | Lexical | error | char literals are not supported |
LEX040 | Lexical | error | unexpected character |
PAR040 | Parser | error | generic vs less-than ambiguity |
NAM001 | Names | error | unknown module |
NAM002 | Names | error | import path escapes qube |
NAM003 | Names | error | wildcard import is forbidden |
NAM004 | Names | error | selective import combined with alias |
NAM005 | Names | error | name collision in import scope |
NAM006 | Names | error | name is private to its qube |
NAM007 | Names | error | sub-module not re-exported |
NAM008 | Names | error | re-export cycle |
NAM009 | Names | error | block pub form is forbidden |
NAM010 | Names | error | unknown name in source module |
NAM011 | Names | error | dash in bare module path |
TYP042 | Type checking | error | implicit numeric conversion is forbidden |
TYP047 | Type checking | error | optional type not narrowed |
TYP051 | Type checking | error | integer used as bool |
TYP061 | Type checking | error | wrong number of call arguments |
TYP062 | Type checking | error | non-exhaustive match |
TYP300 | Type checking | error | try requires Result return type |
TYP305 | Type checking | error | postfix ? is not an error operator |
TYP306 | Type checking | error | panic payload does not fit Panic |
TYP350 | Type checking | error | lambda needs an expected function type |
TYP351 | Type checking | error | lambda arity mismatch |
TYP207 | Type checking | error | face is not dyn-safe |
TYP200 | Type checking | error | type does not fit face |
TYP201 | Type checking | error | wrong fit form for single-param face |
TYP202 | Type checking | error | wrong fit form for multi-param face |
ENV050 | Capabilities | error | main Form 2 ends without return |
ENV052 | Capabilities | error | main signature mismatch |
ENV056 | Capabilities | error | env reference from @pure function |
ENV055 | Capabilities | error | with_capabilities(use:) field not on Env |
TYP102 | Type checking | error | missing required generic argument |
TYP108 | Type checking | error | non-default generic parameter after a default |
EFF120 | Effects | error | contradictory effects declared |
EFF160 | Effects | error | @cancel without ctx parameter |
EFF140 | Effects | error | user effect shadows a core marker |
EFF141 | Effects | error | invalid effect name |
REG020 | Regions | error | linear pointer in @managed struct |
CONC050 | Concurrency | error | channel policy required |
CONC053 | Concurrency | error | for x in rx over cancel-aware receiver without ctx |
CONC020 | Concurrency | error | tell on a reply-bearing handler |
STR060 | Streams | error | @realtime × |> effect violation |
STR020 | Streams | error | dataflow type mismatch in pipeline |
STR051 | Streams | error | pre() on Event<T> |
REG040 | Regions | error | region exited with live allocations |
REG050 | Regions | error | unknown transfer verb |