Add context to errors in JSON.mapping #5932
Merged
+107
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Errors from JSON parse methods generated by
JSON.mapping
are difficult to debug. The message only tells about the immediate error encountered byJSON::PullParser
, for exampleExpected int but was string
. At least the source location is attached, but that makes it still quite hard to figure out, what exactly the parser was doing and parsing which object failed, especially in large JSON structures (such as theindex.json
produced by the docs generator).This PR adds some context to errors raised by
.parse_json
by adding the name of the class and property (if available) that is being parsed.These errors are wrapped, so each level of JSON data is unwrapped and can be followed. It's roughly comparable to a stack trace.
This exception hierarchy can probably get pretty large with highly nested JSON structures. I'm not sure if the outer contexts are really that useful.
This deep wrapping could be removed and only the significant innermost scope would get wrapped, adding the most important context information.
Obviously, this entire context feature adds some additional overhead to the JSON mapping parser. Exceptions are usually pretty rare, so it shouldn't matter much. In the case it happens, the additional debug info should be worth it.