Ver Fonte

Release 0.46.0: Pascal/Oberon IDE parity

Eric Streit há 2 dias atrás
pai
commit
383e1e523e
3 ficheiros alterados com 73 adições e 2 exclusões
  1. 71 0
      PARITY.md
  2. 1 1
      apps/electron/package.json
  3. 1 1
      package.json

+ 71 - 0
PARITY.md

@@ -0,0 +1,71 @@
+# Language parity: Modula-2, Pascal, Oberon (v0.46.0)
+
+All three languages ship the same IDE feature set: language server,
+compiler integration, GDB debugging, workbench polish, and project
+wizard. Modula-2 is the reference implementation; Pascal and Oberon
+were brought to parity in v0.46.0.
+
+## Modula-2 (reference)
+
+- **Language** (`modula2-language`): Coco/R-validated LSP — completion
+  (`.`-triggered, module exports, record fields, WITH fields),
+  hover, go-to-definition (incl. `.def` cross-file), references,
+  rename, full + range formatting, semantic tokens; client-side
+  header/`END`-name diagnostics, uppercase-while-typing, snippets,
+  `modula2.json` schema, 2 TextMate grammars.
+- **Compiler** (`modula2-compiler`): GNU `gm2` backend, 6 commands
+  (detect/build/buildFile/clean/rebuild/run), tasks, Problems markers,
+  output channel, build report, editor toolbar, `modula2.dialect`.
+- **Debug** (`modula2-debug`): GDB/MI adapter, type `modula2`.
+- **Workbench** (`modula2-workbench`): about/theme commands, menubar
+  menu, semantic colors, UI font preference.
+- **Project** (`modula2-project`): console/empty/library templates,
+  `modula2.json` validation, Sources/Definitions/Project explorer.
+
+## Pascal
+
+- **Language** (`pascal-language`): 8 Coco/R dialect validators
+  (P2, P4, P6, standard, Turbo 3, Free Pascal, Blaise, Pascal-S);
+  same LSP set as Modula-2, with `Unit.Name` cross-unit resolution
+  through `USES` (same-directory `.pas`/`.pp`/`.p`), record fields
+  (named, `Unit.Type`-qualified, inline), enum literals, and
+  case-insensitive matching. Own `format.*`/`uppercaseKeywords`
+  settings, snippets, `pascal.json` schema, TextMate grammar.
+- **Compiler** (`pascal-compiler`): `fpc` + Blaise backends,
+  `-M<dialect>` flag, same 6 commands/tasks/markers/dialogs.
+- **Debug** (`pascal-debug`): GDB/MI adapter, type `pascal`.
+- **Workbench** (`pascal-workbench`): same commands/menus/theming.
+- **Project** (`pascal-project`): console/empty/library templates
+  (`PROGRAM`/`UNIT` skeletons, fpc `pascal.json`), validation,
+  Sources/Project explorer, `pascal.newUnit` commands.
+- Verified: 14 resolver checks, formatter idempotence + token
+  preservation (incl. a Blaise corpus file), no-hang parse sweep
+  over 862 Blaise sources.
+
+## Oberon
+
+- **Language** (`oberon-language`): 3 Coco/R dialect validators
+  (Oberon-07, Oberon-2, Ulm); same LSP set, with `M.Name`
+  resolution through alias-aware `IMPORT` (`.Mod`/`.mod`/`.def`/
+  `.om`/`.od`), record fields, type-bound receiver parameters,
+  `*`/`-` export marks (parsed, resolved, and kept attached by the
+  formatter), and case-sensitive matching. Own settings, snippets,
+  `oberon.json` schema, TextMate grammar.
+- **Compiler** (`oberon-compiler`): `voc` + `ulmo` backends (frontend
+  diagnostics decide success — ulmo's backend asserts here), same
+  6 commands/tasks/markers/dialogs.
+- **Debug** (`oberon-debug`): GDB/MI adapter, type `oberon`.
+- **Workbench** (`oberon-workbench`): same commands/menus/theming.
+- **Project** (`oberon-project`): console/empty/library templates
+  (`MODULE` skeletons, voc `oberon.json`), validation,
+  Sources/Definitions/Project explorer, `oberon.newModule` commands.
+- Verified: 15 resolver checks (incl. aliases, receivers,
+  case-sensitivity negatives), formatter idempotence + preservation
+  (incl. a voc-era source), no-hang sweeps over Oberon-07/2, Ulm,
+  and Coco/R sources.
+
+## Bugs fixed while porting (all three languages benefit)
+
+- Parser body-skipper infinite loop on forward-declared routines.
+- Symbol lexer O(n²) stall on ~800KB sources (now ~25 ms).
+- Dotted type names (`F.File`) kept intact in hover/completion.

+ 1 - 1
apps/electron/package.json

@@ -1,7 +1,7 @@
 {
   "private": true,
   "name": "modula2-ide-electron",
-  "version": "0.45.0",
+  "version": "0.46.0",
   "description": "GNU Modula-2 IDE built on Eclipse Theia",
   "homepage": "https://yojik.eu",
   "author": "Eric Streit <eric@yojik.eu>",

+ 1 - 1
package.json

@@ -1,7 +1,7 @@
 {
   "private": true,
   "name": "modula2-ide",
-  "version": "0.45.0",
+  "version": "0.46.0",
   "description": "GNU Modula-2 IDE built on Eclipse Theia",
   "engines": {
     "node": ">=24",