plum

#treesitter#compiler#wasm

git clone https://git.pyrossh.dev/plum

A statically typed, imperative programming language inspired by rust, python


8f886ad — Peter John 2026-10-26T21:37:55+05:30
docs(plans): no hints for obsolete syntax; migrate everything in E4
docs/plans/2026-10-27-zig-errors.md CHANGED
@@ -31,7 +31,7 @@
31
31
 
32
32
  ## Tasks (sequential)
33
33
 
34
- - **E1 grammar and parser:** `!T` type prefix, postfix `!`, `catch` (optional binder and block), `fail`, legacy hints (`??`, `Ok(`/`Err(`, `? |e|`, `.unwrap()`), formatter and highlights.
34
+ - **E1 grammar and parser:** `!T` type prefix, postfix `!`, `catch` (optional binder and block), `fail`, NO legacy hints (user: no hints for obsolete syntax; the legacySyntaxHint mechanism and its tests are deleted), formatter and highlights.
35
35
  - **E2 checker:** `!T` types, `fail`, `try`, `catch` default and block, error-set inference fixpoint, pinned-set checks, and nullable unification. Tests:
36
36
  - `inferred_set_union` (two `try`s plus a `fail` give the exact set);
37
37
  - `pinned_set_rejects_extra`;
@@ -109,3 +109,9 @@ Update the docs, the iteration cheat sheet, highlighting and the LSP method comp
109
109
  - Every for loop is written `for <binders> := range <source>[, clauses]`, and `range` is a keyword. A loop without `range` is an error with a hint.
110
110
  - `range n` on an Int iterates 0..n-1.
111
111
  - `times()` is dropped. `until`, `to` and `downTo` stay.
112
+
113
+ ### User decision: migrate everything, no hints
114
+
115
+ - There are no migration hints for obsolete syntax anywhere: `legacySyntaxHint` and its tests are deleted, and removed syntax is an ordinary parse or type error.
116
+ - E4 migrates every caller and deletes the old syntax outright: Try/Ok/Err, `??`, `? |e|`, tag-union types, payload tags and `.unwrap()`/`.expect()`.
117
+ - Every hint test listed in E2 (`return_bare_tag_hint`, `elvis_removed_hint`, `tag_union_type_removed_hint`, `try_ok_err_removed_hints`, `fail_with_payload_rejected_hint`) is dropped.