ron-reboot

Crates.ioron-reboot
lib.rsron-reboot
version0.1.0-preview11
sourcesrc
created_at2021-10-17 15:04:54.694957
updated_at2021-10-25 09:19:29.527585
descriptionHighly experimental RON parser
homepagehttps://github.com/ron-rs/ron-reboot
repositoryhttps://github.com/ron-rs/ron-reboot
max_upload_size
id466240
size211,745
ed25519-maintainers (github:dalek-cryptography:ed25519-maintainers)

documentation

https://docs.rs/ron-reboot

README

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:

  • parsing is done in both parse.rs and the deserializer itself
    • bad code organization
    • hard to maintain
    • limits reuse
  • serde's data model stops us from accurately reflecting struct / map and struct names

Benefits

Stateless / functional parsers are

  • easier to maintain
  • easier to reuse
  • much easier to test

An abstract syntax tree (AST)...

  • makes the deserializer much easier & cleaner to implement
  • allows reporting locations of syntax & type errors
  • can be reused by multiple deserializer implementations (serde::Deserializer, our_own::Deserializer, ron-edit)

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 :heavy_check_mark: done
Parser generating beautiful errors :heavy_check_mark: done
Accurate Value deserialization from AST :heavy_check_mark: done
Replace nom combinators :heavy_check_mark: done
Spans in AST (locations for error reporting) :heavy_check_mark: done
Serde Deserializer using AST :heavy_check_mark: done
Serde Deserializer generating beautiful errors :heavy_check_mark: done
ron-edit (format & comments preserving writer) :x: to be done

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed according to the license of this project (The Unlicense), without any additional terms or conditions.

Commit count: 112

cargo fmt