Crates.io | toml-parse |
lib.rs | toml-parse |
version | 0.2.11 |
source | src |
created_at | 2020-03-12 01:33:33.357923 |
updated_at | 2020-09-08 11:48:12.908788 |
description | Set of modules for parsing, sorting and formating toml. |
homepage | |
repository | https://github.com/DevinR528/toml-parse |
max_upload_size | |
id | 217713 |
size | 155,057 |
The most important thing about this toml parser is that it maintains the structure of the original parsed file (whitespace, comments, ect.). For toml formatting tools like cargo sort check this feature is essential, this is the only reason something like toml-rs cannot be used unfortunatly :(.
[dependencies]
toml-parse = "0.2.7"
use toml_parse::{parse_it, SyntaxNodeExtTrait};
let file =
r#"[deps]
alpha = "beta"
number = 1234
array = [ true, false, true ]
inline-table = { date = 1988-02-03T10:32:10, }
"#;
let parsed = parse_it(file).expect("parse failed");
let root = parsed.syntax();
assert_eq!(root.token_text(), file)
The parse tree is a rowan
SyntaxNode
that can be manipulated and traversed freely.
The SyntaxNodeExtTrait
allows easy to string representation of the tokens (the source file text).
use toml_parse::{parse_it, SyntaxNodeExtTrait};
let file = r#"# comment
[dependencies]
number = 1234
# comment
alpha = "beta"
"#;
let parsed = parse_it(file).expect("parse failed").syntax();
let parsed2 = parse_it(file).expect("parse failed").syntax();
assert!(parsed.deep_eq(&parsed2));
let sorted = sort_toml_items(&parsed, &HEADER);
assert!(!parsed.deep_eq(&sorted));
The sorted tree is a rowan
SyntaxNode
that can be manipulated and traversed freely.
use toml_parse::{parse_it, Formatter};
let parsed = parse_it(&input).expect("").syntax();
let fmted = Formatter::new(&parsed).format();
assert_ne!(fmted.to_string(), input);