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 under --strict), and SJS-L lint rules (off under --loose).
43 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 |