diff --git a/crates/json-pawarser/src/grammar.rs b/crates/json-pawarser/src/grammar.rs index b7afe02..466f22c 100644 --- a/crates/json-pawarser/src/grammar.rs +++ b/crates/json-pawarser/src/grammar.rs @@ -33,23 +33,9 @@ mod object { } member(p); - while p.at(SyntaxKind::COMMA) { - // not always an error, later configurable - let potential_unexpected_comma = p.start("potential_unexpected_comma"); - p.eat(SyntaxKind::COMMA); - if member(p).is_none() { - potential_unexpected_comma.complete(p, SyntaxKind::TRAILING_COMMA); - } else { - potential_unexpected_comma.abandon(p); - } - } - - Some(if !p.eat(SyntaxKind::BRACE_CLOSE) { - obj_start.error(p, SyntaxError::UnclosedObject) - } else { - obj_start.complete(p, SyntaxKind::OBJECT) - }) + p.eat(SyntaxKind::BRACE_CLOSE); + Some(obj_start.complete(p, SyntaxKind::OBJECT)) } fn member(p: &mut Parser) -> Option { @@ -70,12 +56,9 @@ mod object { todo!("handle wrong tokens") } - let member_value_start = p.start("member_value_start"); if value(p) { - member_value_start.complete(p, SyntaxKind::MEMBER_VALUE); Some(member_start.complete(p, SyntaxKind::MEMBER)) } else { - member_value_start.abandon(p); let e = member_start.error(p, SyntaxError::MemberMissingValue); Some( e.precede(p, "member but failed already") diff --git a/crates/json-pawarser/src/lib.rs b/crates/json-pawarser/src/lib.rs index 89160be..05c529e 100644 --- a/crates/json-pawarser/src/lib.rs +++ b/crates/json-pawarser/src/lib.rs @@ -1,3 +1,29 @@ mod grammar; mod syntax_error; mod syntax_kind; + +#[cfg(test)] +mod test { + use pawarser::parser::ParserBuilder; + + use crate::{ + grammar::{value, Parser}, + syntax_kind::{lex, SyntaxKind}, + }; + + #[test] + fn test() { + const TEST_DATA: &str = r#"{"hello_world": "meow"}"#; + let toks = lex(TEST_DATA); + + let mut p: Parser = ParserBuilder::new(toks) + .add_meaningless(SyntaxKind::WHITESPACE) + .add_meaningless(SyntaxKind::NEWLINE) + .build(); + + value(&mut p); + + let out = p.finish(); + assert_eq!("", format!("{:#?}", out)) + } +} diff --git a/crates/json-pawarser/src/syntax_error.rs b/crates/json-pawarser/src/syntax_error.rs index b607be1..45bb5bd 100644 --- a/crates/json-pawarser/src/syntax_error.rs +++ b/crates/json-pawarser/src/syntax_error.rs @@ -2,9 +2,7 @@ use crate::syntax_kind::SyntaxKind; #[derive(Debug, Clone, PartialEq, Eq)] pub enum SyntaxError { - UnclosedObject, DisallowedKeyType(SyntaxKind), MemberMissingValue, - UnexpectedTrailingComma, } impl pawarser::parser::SyntaxError for SyntaxError {} diff --git a/crates/json-pawarser/src/syntax_kind.rs b/crates/json-pawarser/src/syntax_kind.rs index 8713b2d..dfaab13 100644 --- a/crates/json-pawarser/src/syntax_kind.rs +++ b/crates/json-pawarser/src/syntax_kind.rs @@ -24,9 +24,6 @@ pub enum SyntaxKind { ARRAY, ELEMENT, - // SyntaxKinds for future json5/etc support - TRAILING_COMMA, - // Tokens // Regexes adapted from [the logos handbook](https://logos.maciej.codes/examples/json_borrowed.html) #[token("true")] diff --git a/crates/pawarser/src/parser/marker.rs b/crates/pawarser/src/parser/marker.rs index 2e1244d..d03e358 100644 --- a/crates/pawarser/src/parser/marker.rs +++ b/crates/pawarser/src/parser/marker.rs @@ -59,18 +59,6 @@ impl Marker { mut self, p: &mut Parser, ) { - self.bomb.defuse(); - - // clean up empty tombstone event from marker - if self.pos == p.events.len() - 1 { - match p.events.pop() { - Some(Event::Start { - kind: NodeKind::Tombstone, - forward_parent: None, - }) => (), - _ => unreachable!(), - } - } } }