EXPERIMENT: Rusty Object Notation reboot

Experimental implementation of a new parser for RON using small functional parsers for individual syntax elements over a stateful parser.

This experiment started off as "RON + nom", but is now using its own parsers & combinators inspired by nom.

Motivation

The current ron parsing suffers from the following problems:

Benefits

Stateless / functional parsers are

An abstract syntax tree (AST)...

Error reporting

The old RON deserializer produced errors that were often hard to understand. ron-reboot is meant to change that; this is the output of a deserialization error as of 2021-10-15:

error: invalid type: boolean `true`, expected a string --> string:3:9 | 3 | y: true, | ^^^^ |

or with a multi-line expression:

error: invalid type: map, expected a string --> string:3:9 | 3 | y: ( | ________^ 4 | | this: "is", 5 | | not: "the right type", 6 | | ), | |______^ |

Goals / Progress

| Goal | Status | |--------------------------------------------------|----------------------------------------------------| | Parser generating AST | :hourglassflowingsand: working, 90% complete | | Parser generating beautiful errors | :hourglassflowingsand: in progress, 70% complete | | Replace nom combinators | :heavycheckmark: done | | Spans in AST (locations for error reporting) | :heavycheckmark: implemented | | Serde Deserializer using AST | :hourglassflowingsand: working, 95% complete | | Serde Deserializer generating beautiful errors | :heavycheckmark: done | | ron-edit (format & comments preserving writer) | :x: to be done |

TODO list