frontend: Warnungs-Modell vereinheitlichen (strukturiert: Typ + Zeile)

TASKS Phase 1 (abgeschlossen). Warnungen sind jetzt maschinenlesbare Objekte
{type, line, ...data} statt vorformatierter Strings: der Renderer emittiert
{type:'mixedGate', line, label}; src/warnings.js `formatWarning(w, t)` macht
daraus an EINER Stelle den lokalisierten, HTML-escapten Anzeigetext. Damit sind
Typ und Zeilennummer sortier-/filter-/testbar, und Phase 2 (unbekannte
Statuszeichen -> {type:'unknownStatus', line, code}) dockt ohne Formatstreuung an.

tests/warnings.test.js + Mixed-Gate-Test im Renderer (29 Tests grün).
Ende-zu-Ende im Browser verifiziert (lokalisierte Warnung mit Zeile + Label).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-07-21 21:01:43 +02:00
co-authored by Claude Opus 4.8
parent 5905712aa5
commit 32a02021ed
6 changed files with 74 additions and 4 deletions
+4 -2
View File
@@ -47,7 +47,8 @@ function renderChildren(node, warnings, opts){
if(!kids.length) return '';
const types = new Set(kids.map(k => k.type));
if(types.size > 1){
warnings.push(opts.t('mixedWarn', {line: kids[0].line, label: esc(node.label)}));
/* strukturierte Warnung (Typ + Zeile); Formatierung in warnings.js */
warnings.push({type: 'mixedGate', line: kids[0].line, label: node.label});
}
const gate = gateOf(kids);
const items = kids.map(k => {
@@ -62,7 +63,8 @@ function renderChildren(node, warnings, opts){
}
/* Baut den inneren HTML-String für #out aus (bereits gefilterten) Wurzeln und
sammelt Warnungen (gemischte Gates). Leere Wurzelliste ⇒ leerer String. */
sammelt strukturierte Warnungen ({type, line, ...}, siehe warnings.js).
Leere Wurzelliste ⇒ leerer String. */
export function renderTreeHtml(roots, opts){
const warnings = [];
const html = roots.map(root => {