a customization of Theia from the Eclipse fondation for Modula-2 use, specifically (for the moment) GNU Modula-2

Eric Streit 955d283ca4 Project explorer: Modula-2 Project side view 1 周之前
apps 24cfbf7461 Release 0.15.2: declaration-identity type comparison 1 周之前
examples 16fa047279 Debug launch fix: resolve adapter executable in bundled and packaged layouts 1 周之前
extensions 955d283ca4 Project explorer: Modula-2 Project side view 1 周之前
grammars 2ef7c3ad13 Modula-2 IDE on Eclipse Theia (Phase 1 done, Phase 2 started) 2 周之前
scripts 2ef7c3ad13 Modula-2 IDE on Eclipse Theia (Phase 1 done, Phase 2 started) 2 周之前
.gitignore 0bfc91b53b Debugger: acknowledge setExceptionBreakpoints with an empty set 1 周之前
README.md 955d283ca4 Project explorer: Modula-2 Project side view 1 周之前
SOURCE-TREE.txt 955d283ca4 Project explorer: Modula-2 Project side view 1 周之前
TUTORIAL.md 76ce129401 Docs: short end-to-end tutorial (build, edit, debug, troubleshooting) 1 周之前
package-lock.json 2ef7c3ad13 Modula-2 IDE on Eclipse Theia (Phase 1 done, Phase 2 started) 2 周之前
package.json 24cfbf7461 Release 0.15.2: declaration-identity type comparison 1 周之前
yarn.lock 5426b2038d Release packaging: AppImage via electron-builder 1 周之前

README.md

Modula-2 IDE

A starting point for a dedicated GNU Modula-2 IDE built on Eclipse Theia.

Included

  • Browser and Electron Theia applications
  • Native Theia modula2-workbench extension
  • VS Code-compatible modula2-language extension
  • .mod and .def support
  • TextMate syntax highlighting
  • Modula-2 comments, brackets and indentation
  • Modula-2 snippets
  • Keyword-only automatic uppercasing
  • AST-backed document outline, completion, hover, go-to-definition, find references and rename (lenient declaration parser with cross-file .def resolution)
  • GNU Modula-2 compiler service: async Build/Build File/Clean/Rebuild/Run plus compiler detection, driven by the workspace modula2.json
  • GDB-backed debugger: breakpoints (+ conditions), continue/step, call stack, Locals + Module scopes with structure expansion, evaluate/hover (debug type modula2, program defaults to bin/<name>)
  • Project wizards: New Module/Definition Module/Project plus Validate Project, with a modula2.json JSON schema for editor completions and validation
  • Modula-2 Project side view: Sources/Definitions/Project groups, main-file marker, click-to-open, live refresh
  • Initial Modula-2 commands/menu
  • Example/grammar placeholders

Requirements

The current project targets Eclipse Theia 1.75.0, whose current stable release uses Node.js 24 as its minimum. Use Yarn Classic (1.x).

node --version
yarn --version
yarn
yarn build

Run browser:

yarn start:browser

Run Electron:

yarn start:electron

The language extension is intentionally a VS Code-compatible extension because Theia recommends VS Code extensions for language support. Native Theia extensions are used for product-specific workbench features.

Release packaging (AppImage + Debian package)

The Electron app packages to a self-contained AppImage and a Debian package with everything except the compiler toolchain (see host prerequisites below):

cd apps/electron
yarn package   # production bundle + plugin staging + dist/*.AppImage, dist/*.deb

This runs bundle:prod (native rebuild + production esbuild), stages the modula2-language plugin with its runtime dependencies into apps/electron/plugins/, and builds the artifacts via electron-builder. The packaged launcher (electron-launcher.js) points the backend at the bundled plugins through the THEIA_PLUGINS environment variable, so no --plugins flag is needed.

Debian users install with:

sudo apt install ./modula2-ide-electron_0.15.0_amd64.deb

then launch Modula-2 IDE from the applications menu (Development section). The package ships its icon and desktop entry; uninstall with sudo apt remove modula2-ide-electron.

This runs bundle:prod (native rebuild + production esbuild), stages the modula2-language plugin with its runtime dependencies into apps/electron/plugins/, and builds dist/Modula-2 IDE-<version>.AppImage via electron-builder. The packaged launcher (electron-launcher.js) points the backend at the bundled resources/plugins through the THEIA_PLUGINS environment variable, so no --plugins flag is needed.

Host prerequisites (not bundled): GNU Modula-2 (gm2), gdb and readelf for build/run/debug. On Debian/Ubuntu the IDE itself needs only FUSE (or APPIMAGE_EXTRACT_AND_RUN=1) to launch the AppImage.

Roadmap

  1. Stabilize the GNU Modula-2/Coco/R grammar against gm2 (see GNU-grammar).
  2. Add AST, symbols and semantic analysis AST/symbols done (lenient parser); semantic analysis pending.
  3. Add LSP LSP live (diagnostics bridge + outline/completion/hover/definition).
  4. Add modula2.json project support wizards, validation and schema done.
  5. Add GNU Modula-2 build/run/diagnostics done via the compiler service.
  6. Add debugger integration GDB/MI adapter done (breakpoints, stack, scopes, evaluate).

Local VS Code language extension

The Modula-2 language extension is a VS Code-compatible extension. The build synchronizes it into plugins/modula2-language, and the Browser/Electron applications start Theia with --plugins=local-dir:../../plugins. The plugin directory must contain the extension folder; pointing --plugins directly at the extension folder does not provide the expected container layout.

Coco/R language-server bridge (0.1.7)

The language extension now contains a real LSP client/server pair. The server can invoke a GNU Modula-2 executable generated from a Coco/R grammar and turn its editor-oriented diagnostics into LSP diagnostics. See extensions/modula2-language/COCOR-LSP.md.