Reference
Error code reference
Every diagnostic the Super.js compiler can emit. Codes are permanent — never renumbered or reused. SJS-P are parser errors, SJS-E type errors, SJS-W warnings (promoted to errors in strict mode), and SJS-L lint rules.
55 codes, generated from the @superjs/diagnostics registry.
Parser
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-P001 | error | Unexpected token | Stage 1 |
| SJS-P002 | error | Unexpected end of file | Stage 1 |
| SJS-P003 | error | Invalid syntax in type annotation | Stage 1 |
| SJS-P004 | error | Invalid sum type declaration | Stage 1 |
| SJS-P005 | error | Invalid match expression | Stage 1 |
| SJS-P099 | error | Too many parse errors; recovery abandoned | Stage 1 |
Null safety
Type checking
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-E002 | error | Type mismatch: expected `{expected}`, found `{found}` | Stage 0 |
| SJS-E004 | error | `any` is not a valid type in SJS; use `dynamic` | Stage 1 |
| SJS-E005 | error | Intersection type `A & B` is not allowed; use interface extension | Stage 1 |
| SJS-E006 | error | Mapped type is not allowed in SJS | Stage 1 |
| SJS-E008 | error | Conditional type `T extends U ? A : B` is not allowed | Stage 1 |
| SJS-E009 | error | `infer` keyword is not allowed in SJS | Stage 1 |
| SJS-E010 | error | TypeScript `enum` is not allowed; use sum types | Stage 1 |
| SJS-E012 | error | `namespace` is not allowed; use ES modules | Stage 1 |
| SJS-E020 | error | Ambiguous variant constructor `{variant}` — multiple sum types declare it; annotate the expected type | Stage 1 |
| SJS-W006 | warning | Excess property `{name}` on a fresh object literal assigned to a typed position | Stage 1 |
Match expressions
Control flow
Access modifiers
Classes
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-E016 | error | Cannot instantiate an abstract class directly with `new` | Stage 1 |
Modules
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-E017 | error | Circular import detected — module graph contains a cycle | Stage 1 |
Async / await
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-E018 | error | Top-level `await` used outside an ES module context | Stage 1 |
JSX
Dynamic
Keywords
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-W004 | warning | Reserved or future SJS keyword `{name}` used as an identifier | Stage 1 |
Try / catch
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-W010 | warning | `catch` binding not typed as `Error` or `unknown` | Stage 1 |
Security
Lint
| Code | Severity | Message | Stage |
|---|---|---|---|
| SJS-L001 | warning | Prefer `const` — `let` binding `{name}` is never reassigned | Stage 3 |
| SJS-L002 | warning | Prefer `let` or `const` over `var` | Stage 3 |
| SJS-L003 | warning | Use `===` / `!==` — `==` / `!=` performs type coercion | Stage 3 |
| SJS-L004 | warning | Prefer `for…of` over `for…in` for array and iterable iteration | Stage 3 |
| SJS-L005 | warning | `debugger` statement found in committed code | Stage 3 |
| SJS-L006 | warning | `match` expression has no arms | Stage 3 |
| SJS-L007 | warning | Redundant match arm — variant `{variant}` is already handled | Stage 3 |
| SJS-L008 | warning | Prefer an arrow function over a `function` expression callback | Stage 3 |
| SJS-L009 | warning | Unused import — `{name}` is never used | Stage 3 |
| SJS-L010 | warning | Import `{source}` is out of order — sort imports by source | Stage 3 |
| SJS-L012 | warning | Unused declaration — `{name}` is never used | Stage 3 |
| SJS-L013 | warning | Explicit `dynamic` type — annotate precisely, or add `// @sjs:dynamic-ok` | Stage 3 |
| SJS-L014 | warning | `{name}` shadows a binding from an enclosing scope | Stage 3 |
| SJS-L015 | warning | Floating promise — `await`, `return`, or otherwise consume this `Promise` | Stage 3 |
| SJS-L016 | warning | Unhandled `Result` — `match`, `return`, or otherwise consume it | Stage 3 |
| SJS-L017 | warning | Prefer returning `Result<T, E>` over `throw` (RFC-0004) | Stage 3 |
| SJS-L018 | warning | Mixed spaces and tabs in leading indentation | Stage 3 |