Skip to content

Commit d3e7872

Browse files
Fix ToJson for options (v4.28.0-rc1)
1 parent 51f6c6d commit d3e7872

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

REPL/Lean/InfoTree/ToJson.lean

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,19 @@ instance : ToJson DataValue where
137137

138138
instance KVMapToJson : ToJson KVMap where
139139
toJson (m : KVMap) : Json :=
140-
Json.mkObj <| m.entries.map fun (k, v) => (k.toString, toJson v)
140+
-- Array of pairs: [ [ ["Elab","async"], false ], ... ]
141+
Json.arr <| m.entries.toArray.map fun (k, v) =>
142+
Json.arr #[toJson k, toJson v]
141143

142144
instance : ToJson Options where
143-
toJson (opts : Options) : Json := KVMapToJson.toJson opts
145+
toJson (opts : Options) : Json :=
146+
-- `Options` does not expose its internal map, but it *does* provide a `ForIn`
147+
-- instance, so we can iterate over all (Name × DataValue) pairs.
148+
Id.run do
149+
let mut entries : Array Json := #[]
150+
for (k, v) in opts do
151+
entries := entries.push (Json.arr #[toJson k, toJson v])
152+
return Json.arr entries
144153

145154
def arrStrToName (arr : Array String) : Name :=
146155
if arr.isEmpty then Name.anonymous
@@ -181,9 +190,12 @@ instance KVMapFromJson : FromJson KVMap where
181190
return (kName, vData)
182191
| _ => Except.error "Expected array of pairs for KVMap"
183192
Except.ok <| KVMap.mk entries.toList
184-
| _ => Except.error "Expected JSON object for KVMap"
193+
| _ => Except.error "Expected JSON array for KVMap"
185194

186195
instance : FromJson Options where
187-
fromJson? (j : Json) : Except String Options := KVMapFromJson.fromJson? j
196+
fromJson? (j : Json) : Except String Options := do
197+
let kv ← KVMapFromJson.fromJson? j
198+
Except.ok <| kv.entries.foldl (init := Options.empty) fun opts (k, v) =>
199+
opts.insert k v
188200

189201
end Lean.Elab

test/app_type_mismatch2_parallel.expected.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
[{"severity": "warning",
1616
"pos": {"line": 1, "column": 0},
1717
"endPos": {"line": 1, "column": 7},
18-
"data": "declaration uses 'sorry'"}],
18+
"data": "declaration uses `sorry`"}],
1919
"env": 1}
2020

2121
{"proofStatus": "Incomplete: open goals remain",

0 commit comments

Comments
 (0)