fix(#484): drop noisy "parse failed" note on JSON/YAML fragments

LLMs routinely emit JSON/YAML *fragments* in fenced blocks — a bare
`"key": "value"` line, snippets with `...`, trailing commas — which
legitimately fail JSON.parse. initTreeViews() stamped an unstyled
`<div class="tree-parse-note">parse failed</div>` below such blocks,
producing bare white text under an otherwise-clean code box.

The note was incidental, not designed: it was bolted onto the YAML
lazy-load commit (29a31a6e), has no CSS, no behavior test, and originally
even fired on *valid* YAML before the CDN script finished loading (later
fixed). The block still renders as syntax-highlighted raw, so the note
added only noise.

Remove the note insertion; fall through silently to raw view. The per-block
Raw/Tree toggle, YAML lazy-load, and the #484 default-view config are all
unchanged. The `parse_failed_note` i18n key is intentionally retained (kept
green by test_chinese_locale.py) to avoid touching all 13 locales.

Verification: ./scripts/test.sh tests/test_issue484_json_tree_viewer.py
tests/test_chinese_locale.py — 29 passed.
This commit is contained in:
Charles Bine authored and nesquena-hermes committed 2026-06-24 22:14:27 +00:00
1 parent 7043b45f5d
commit 867471c7d3
1 file changed
+6 -9
+6 -9
View File
@@ -13636,15 +13636,12 @@ function initTreeViews(container){
// Mark as initialised only after we've committed to a render decision
wrap.setAttribute('data-tree-init','1');
if(!parsed || typeof parsed!=='object'){
if(parseFailed){
const hint=wrap.querySelector('.tree-raw-view');
if(hint&&!hint.querySelector('.tree-parse-note')){
const note=document.createElement('div');
note.className='tree-parse-note';
note.textContent=t('parse_failed_note')||'parse failed';
hint.parentNode.insertBefore(note,hint.nextSibling);
}
}
// No tree view for non-object values or unparseable content. LLMs often
// emit JSON fragments (a bare "key": "val" line, snippets with ..., etc.)
// that legitimately fail JSON.parse; surfacing a "parse failed" note for
// those was pure noise. The block still renders as syntax-highlighted raw,
// so just fall through silently. (parseFailed is retained for clarity.)
void parseFailed;
return; // leave as raw view
}
const lineCount=rawText.split('\n').length;