3434 exemplar* : seq [string ]
3535 example* : seq [string ]
3636 editor* : seq [string ]
37+ invalidator* : seq [string ]
3738
3839 TrackConfig * = object
3940 exercises* : Exercises
128129 # solution*: seq[string]
129130 # test*: seq[string]
130131 # editor*: seq[string]
132+ # invalidator*: seq[string]
131133 # case kind*: ExerciseKind
132134 # of ekConcept:
133135 # exemplar*: seq[string]
@@ -160,20 +162,23 @@ type
160162 fkExemplar = " exemplar"
161163 fkExample = " example"
162164 fkEditor = " editor"
165+ fkInvalidator = " invalidator"
163166
164167 ConceptExerciseFiles * = object
165168 originalKeyOrder: seq [FilesKey ]
166169 solution* : seq [string ]
167170 test* : seq [string ]
168171 exemplar* : seq [string ]
169172 editor* : seq [string ]
173+ invalidator* : seq [string ]
170174
171175 PracticeExerciseFiles * = object
172176 originalKeyOrder: seq [FilesKey ]
173177 solution* : seq [string ]
174178 test* : seq [string ]
175179 example* : seq [string ]
176180 editor* : seq [string ]
181+ invalidator* : seq [string ]
177182
178183 ConceptExerciseConfig * = object
179184 originalKeyOrder: seq [ExerciseConfigKey ]
@@ -345,6 +350,8 @@ func filesKeyOrder(val: ConceptExerciseFiles | PracticeExerciseFiles;
345350 result = @ [fkSolution, fkTest, fkEx]
346351 if prettyMode == pmFmt and val.editor.len > 0 :
347352 result .add fkEditor
353+ if prettyMode == pmFmt and val.invalidator.len > 0 :
354+ result .add fkInvalidator
348355 else :
349356 result = val.originalKeyOrder
350357 # If `solution` is missing, write it first.
@@ -366,6 +373,10 @@ func filesKeyOrder(val: ConceptExerciseFiles | PracticeExerciseFiles;
366373 let insertionIndex = result .find (fkEx) + 1
367374 result .insert (fkEditor, insertionIndex)
368375
376+ # If `invalidator` is missing and not empty, write it at the end.
377+ if fkInvalidator notin result and val.invalidator.len > 0 :
378+ result .add fkInvalidator
379+
369380func addFiles (s: var string ; val: ConceptExerciseFiles | PracticeExerciseFiles ;
370381 prettyMode: PrettyMode ; indentLevel = 1 ) =
371382 # # Appends the pretty-printed JSON for a `files` key with value `val` to `s`.
@@ -389,6 +400,8 @@ func addFiles(s: var string; val: ConceptExerciseFiles | PracticeExerciseFiles;
389400 s.addArray (" example" , val.example, indentLevel = inner)
390401 of fkEditor:
391402 s.addArray (" editor" , val.editor, indentLevel = inner)
403+ of fkInvalidator:
404+ s.addArray (" invalidator" , val.invalidator, indentLevel = inner)
392405
393406 s.removeComma ()
394407 s.addNewlineAndIndent (indentLevel)
0 commit comments