From edbf7a9fc96d76e37a01038e563259f1c844cd03 Mon Sep 17 00:00:00 2001 From: salkin-mada Date: Fri, 12 Jun 2026 21:12:37 +0200 Subject: [PATCH] fix(doc): prevent docmap crash SCNvimDocEntry.toJSON created `inheritance` by appending superclasses and subclasses as arrays. But the implementor (implKlass) as a string. `prJSONList` does `v.collect {|x| "\"" ++ x.escapeChar($") ++ "\""}`. Given the bare implementor String, `collect` iterates the string's characters and calls escapeChar on them, throwing `DoesNotUnderstand: 'escapeChar'` and aborting/crashing the entire docmap export. WHich leaves docmap.json broken. This is fixed by pairing each key with its value and wrap the implementor name in an array, so prJSONList always receives a list. --- scide_scnvim/Classes/SCNvimDoc/SCNvimDoc.sc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/scide_scnvim/Classes/SCNvimDoc/SCNvimDoc.sc b/scide_scnvim/Classes/SCNvimDoc/SCNvimDoc.sc index caad842c..5040e2bc 100644 --- a/scide_scnvim/Classes/SCNvimDoc/SCNvimDoc.sc +++ b/scide_scnvim/Classes/SCNvimDoc/SCNvimDoc.sc @@ -244,7 +244,6 @@ SCNvimDocEntry : SCDocEntry { var delimiter = if(lastItem.notNil and:{lastItem}, "", ","); var inheritance = []; var numItems; - var keys; stream << "\"" << path.escapeChar(34.asAscii) << "\": {\n"; @@ -263,24 +262,25 @@ SCNvimDocEntry : SCDocEntry { }; if (klass.notNil) { - keys = #[ "superclasses", "subclasses", "implementor" ]; + // keep each key paired with its value so a missing entry can't + // shift the labels, and always pass an array to prJSONList klass.superclasses !? { - inheritance = inheritance.add(klass.superclasses.collect {|c| + inheritance = inheritance.add(["superclasses", klass.superclasses.collect {|c| c.name.asString - }); + }]); }; klass.subclasses !? { - inheritance = inheritance.add(klass.subclasses.collect {|c| + inheritance = inheritance.add(["subclasses", klass.subclasses.collect {|c| c.name.asString - }); + }]); }; implKlass !? { - inheritance = inheritance.add(implKlass.name.asString); + inheritance = inheritance.add(["implementor", [implKlass.name.asString]]); }; numItems = inheritance.size - 1; - inheritance.do {|item, i| - this.prJSONList(stream, keys[i], item, i >= numItems); + inheritance.do {|pair, i| + this.prJSONList(stream, pair[0], pair[1], i >= numItems); }; };