Iter 5b: Cross-Module-Typcheck mit qualifizierten Verweisen

Neue API check_workspace(&Workspace) -> Vec<Diagnostic>; check_module
hebt das Modul intern in einen Trivial-Workspace. Term::Var mit genau
einem Punkt im Namen ist ein qualifizierter Verweis <prefix>.<def>,
aufgelöst über Import-Map (alias-oder-modulname → echter Modulname).
Drei neue Diagnostic-Codes: unknown-module, unknown-import,
invalid-def-name. ail check lädt jetzt immer via load_workspace;
Loader-Fehler werden im JSON-Modus zu strukturierten Diagnostics
(module-not-found, module-cycle, …). DESIGN.md und JOURNAL.md
dokumentieren die Konvention. Hash-Stabilität: alle ir_snapshot_*-
Tests bitidentisch grün, kein neuer AST-Knoten.
This commit is contained in:
2026-05-07 11:31:57 +02:00
parent 3451b5bd15
commit b2878fe655
10 changed files with 601 additions and 67 deletions
+29
View File
@@ -220,3 +220,32 @@ Sub-Schritte:
Während Iter 5 gleich beim Bau **`source_filename` pfad-unabhängig
halten** (nur Modulname, kein Verzeichnis-Prefix), sonst kippen die
IR-Snapshots.
## 2026-05-07 — Iter 5b fertig: Cross-Module-Typcheck
- `check_workspace(&Workspace) -> Vec<Diagnostic>` als Top-Level-API.
`check_module` bleibt erhalten und hebt das Modul intern in einen
Trivial-Workspace.
- Konvention für qualifizierte Verweise (in DESIGN.md festgehalten):
`Term::Var { name }` mit genau einem Punkt = `<prefix>.<def>`. Prefix
ist Import-Alias oder Modulname. Kein neuer AST-Knoten, keine
umbenannten Felder ⇒ Hashes bleiben stabil; alle `ir_snapshot_*`
weiterhin grün.
- Drei neue Diagnostic-Codes: `unknown-module`,
`unknown-import`, `invalid-def-name` (mit `ctx.reason: "contains-dot"`).
- CLI: `ail check <entry>` lädt jetzt **immer** über `load_workspace`.
Workspace-Lade-Fehler werden im JSON-Modus zu strukturierten
Diagnostics mit Codes `module-not-found`, `module-cycle`,
`module-name-mismatch`, `module-hash-mismatch`, `schema-mismatch`.
`ail build` und `ail emit-ir` bleiben pro Einzelmodul (Codegen
cross-module ist 5c).
- Beispiele: `ws_main.ail.json` ruft jetzt `ws_lib.add` auf
(beobachtbar). Neu: `ws_broken.ail.json` (`unknown-import`),
`ws_unknown_module.ail.json` (`unknown-module`).
- Tests: 37 grün (vorher 32). 4 neue Workspace-Integrationstests in
`crates/ailang-check/tests/workspace.rs`, ein neuer e2e-Test
`check_workspace_resolves_import`.
- Schulden: Single-Shot-Diagnostics weiterhin (Multi-Diagnose nach 5c).
Punkt-Konvention deckt nur einen Punkt ab — verschachtelte Modulpfade
(`a.b.c`) gibt es nicht; das wäre erst mit Hierarchie-Modulen ein
Thema und fällt aktuell als `unbound-var` durch.