From 98ef505a212fe45bd9ee467491f4bd687917bb6f Mon Sep 17 00:00:00 2001 From: elkowar <5300871+elkowar@users.noreply.github.com> Date: Mon, 5 Jul 2021 19:23:12 +0200 Subject: [PATCH] Add custom lexer --- Cargo.lock | 43 +++++++++++++ Cargo.toml | 1 + examples/errors.rs | 8 ++- src/config.rs | 4 +- src/lexer.rs | 63 +++++++++++++++++++ src/lib.rs | 17 +++-- src/parser.lalrpop | 41 +++++++----- .../eww_config__config__test__test.snap | 6 +- .../eww_config__config__test__test.snap.new | 21 +++++++ src/snapshots/eww_config__test-10.snap | 8 +-- src/snapshots/eww_config__test-11.snap | 6 +- src/snapshots/eww_config__test-12.snap | 20 ++---- src/snapshots/eww_config__test-13.snap | 28 ++------- src/snapshots/eww_config__test-14.snap | 21 ++++++- src/snapshots/eww_config__test-15.snap | 11 +--- src/snapshots/eww_config__test-16.snap | 11 +++- src/snapshots/eww_config__test-17.snap | 8 +++ src/snapshots/eww_config__test-18.snap | 8 +++ src/snapshots/eww_config__test-2.snap | 4 +- src/snapshots/eww_config__test-3.snap | 9 +-- src/snapshots/eww_config__test-4.snap | 10 +-- src/snapshots/eww_config__test-5.snap | 8 +-- src/snapshots/eww_config__test-6.snap | 9 +-- src/snapshots/eww_config__test-7.snap | 8 +-- src/snapshots/eww_config__test-8.snap | 6 +- src/snapshots/eww_config__test-9.snap | 8 +-- src/snapshots/eww_config__test.snap | 4 +- 27 files changed, 266 insertions(+), 125 deletions(-) create mode 100644 src/lexer.rs create mode 100644 src/snapshots/eww_config__config__test__test.snap.new create mode 100644 src/snapshots/eww_config__test-17.snap create mode 100644 src/snapshots/eww_config__test-18.snap diff --git a/Cargo.lock b/Cargo.lock index 943b8e6..bf2c2b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -55,6 +55,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "beef" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6736e2428df2ca2848d846c43e88745121a6654696e349ce0054a420815a7409" + [[package]] name = "bit-set" version = "0.5.2" @@ -192,6 +198,7 @@ dependencies = [ "itertools", "lalrpop", "lalrpop-util", + "logos", "maplit", "regex", "thiserror", @@ -203,6 +210,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "getrandom" version = "0.1.16" @@ -328,6 +341,30 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "logos" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427e2abca5be13136da9afdbf874e6b34ad9001dd70f2b103b083a85daa7b345" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56a7d287fd2ac3f75b11f19a1c8a874a7d55744bd91f7a1b3e7cf87d4343c36d" +dependencies = [ + "beef", + "fnv", + "proc-macro2", + "quote", + "regex-syntax", + "syn", + "utf8-ranges", +] + [[package]] name = "maplit" version = "1.0.2" @@ -596,6 +633,12 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "utf8-ranges" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" + [[package]] name = "uuid" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 449e909..4f2e5ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ itertools = "0.10" thiserror = "1.0" maplit = "1.0" codespan-reporting = "0.11" +logos = "0.12" [build-dependencies] lalrpop = "0.19.5" diff --git a/examples/errors.rs b/examples/errors.rs index 00eee25..061047a 100644 --- a/examples/errors.rs +++ b/examples/errors.rs @@ -1,4 +1,4 @@ -use eww_config::{config::*, expr::*, parser}; +use eww_config::{config::*, expr::*, lexer, parser}; fn main() { let parser = parser::ExprParser::new(); @@ -7,7 +7,9 @@ fn main() { let input = "(12 :bar 22 (foo) (baz)"; let file_id = files.add("foo.eww", input); - let ast = parser.parse(file_id, input); + let lexer = lexer::Lexer::new(input); + + let ast = parser.parse(file_id, lexer); match ast { Ok(ast) => { let element: Result, _> = Element::from_expr(ast); @@ -18,6 +20,6 @@ fn main() { let mut writer = term::termcolor::StandardStream::stderr(term::termcolor::ColorChoice::Always); term::emit(&mut writer, &term::Config::default(), &files, &diag).unwrap(); } - Err(err) => eprintln!("{}", err), + Err(err) => eprintln!("{:?}", err), } } diff --git a/src/config.rs b/src/config.rs index 8e0c7c8..5fd1f11 100644 --- a/src/config.rs +++ b/src/config.rs @@ -50,14 +50,16 @@ impl FromExpr for Element { mod test { use super::*; + use crate::lexer; use insta; #[test] fn test() { let parser = parser::ExprParser::new(); insta::with_settings!({sort_maps => true}, { + let lexer = lexer::Lexer::new("(box :bar 12 :baz \"hi\" foo (bar))"); insta::assert_debug_snapshot!( - Element::::from_expr(parser.parse(0, "(box :bar 12 :baz \"hi\" foo (bar))").unwrap()).unwrap() + Element::::from_expr(parser.parse(0, lexer).unwrap()).unwrap() ); }); } diff --git a/src/lexer.rs b/src/lexer.rs new file mode 100644 index 0000000..b0efdfe --- /dev/null +++ b/src/lexer.rs @@ -0,0 +1,63 @@ +use logos::Logos; + +#[derive(Logos, Debug, PartialEq, Eq, Clone)] +pub enum Token { + #[token("(")] + LPren, + + #[token(")")] + RPren, + + #[token("true")] + True, + + #[token("false")] + False, + + #[regex(r#""(?:[^"\\]|\\.)*""#, |x| x.slice().to_string())] + StrLit(String), + + #[regex(r#"[+-]?(?:[0-9]+[.])?[0-9]+"#, priority = 2, callback = |x| x.slice().to_string())] + NumLit(String), + + #[regex(r#"[a-zA-Z_!\?<>/.*-+][^\s{}\(\)]*"#, |x| x.slice().to_string())] + Symbol(String), + + #[regex(r#":\S+"#, |x| x.slice().to_string())] + Keyword(String), + + #[regex(r#";.*"#)] + Comment, + + #[error] + #[regex(r"[ \t\n\f]+", logos::skip)] + Error, +} + +#[derive(Debug, Eq, PartialEq, Copy, Clone)] +pub struct LexicalError(usize, usize); + +pub type SpannedResult = Result<(Loc, Tok, Loc), Error>; + +pub struct Lexer<'input> { + lexer: logos::SpannedIter<'input, Token>, +} + +impl<'input> Lexer<'input> { + pub fn new(text: &'input str) -> Self { + Lexer { lexer: logos::Lexer::new(text).spanned() } + } +} + +impl<'input> Iterator for Lexer<'input> { + type Item = SpannedResult; + + fn next(&mut self) -> Option { + let (token, range) = self.lexer.next()?; + if token == Token::Error { + Some(Err(LexicalError(range.start, range.end))) + } else { + Some(Ok((range.start, token, range.end))) + } + } +} diff --git a/src/lib.rs b/src/lib.rs index cdda0b5..d9fab6f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,6 +5,7 @@ pub mod config; pub mod error; pub mod expr; +pub mod lexer; use error::AstError; use std::{fmt::Display, ops::Deref}; @@ -16,18 +17,25 @@ use lalrpop_util::lalrpop_mod; lalrpop_mod!(pub parser); macro_rules! test_parser { - ($p:expr, $($text:literal),*) => {{ - $(insta::assert_debug_snapshot!($p.parse(0, $text));)* + ($($text:literal),*) => {{ + let p = crate::parser::ExprParser::new(); + use crate::lexer::Lexer; + + ::insta::with_settings!({sort_maps => true}, { + $( + ::insta::assert_debug_snapshot!(p.parse(0, Lexer::new($text))); + )* + }); }} } #[test] fn test() { - let p = parser::ExprParser::new(); test_parser!( - p, "1", "(12)", + "1.2", + "-1.2", "(1 2)", "(1 :foo 1)", "(:foo 1)", @@ -38,7 +46,6 @@ fn test() { r#"(test "h\"i")"#, r#"(test " hi ")"#, "(+ (1 2 (* 2 5)))", - r#"{:key value 12 "hi" (test) (1 2 3)}"#, r#"; test"#, r#"(f arg ; test arg2)"#, diff --git a/src/parser.lalrpop b/src/parser.lalrpop index 4931527..7734025 100644 --- a/src/parser.lalrpop +++ b/src/parser.lalrpop @@ -1,20 +1,37 @@ use std::str::FromStr; -//use crate::lexer; +use crate::lexer::{Token, LexicalError}; use crate::expr::{Expr, Span}; grammar(file_id: usize); +extern { + type Location = usize; + type Error = LexicalError; + + enum Token { + "(" => Token::LPren, + ")" => Token::RPren, + "true" => Token::True, + "false" => Token::False, + "strLit" => Token::StrLit(), + "numLit" => Token::NumLit(), + "symbol" => Token::Symbol(), + "keyword" => Token::Keyword(), + "comment" => Token::Comment, + } +} + pub Expr: Expr = { "(" )+> ")" => Expr::List(Span(l, r, file_id), elems), => x, => x, => Expr::Value(Span(l, r, file_id), x), - Comment => Expr::Comment(Span(l, r, file_id)), + "comment" => Expr::Comment(Span(l, r, file_id)), }; -Keyword: Expr = => Expr::Keyword(Span(l, r, file_id), x.to_string()); -Symbol: Expr = => Expr::Symbol(Span(l, r, file_id), x.to_string()); +Keyword: Expr = => Expr::Keyword(Span(l, r, file_id), x.to_string()); +Symbol: Expr = => Expr::Symbol(Span(l, r, file_id), x.to_string()); Value: String = { => <>, @@ -23,23 +40,17 @@ Value: String = { }; StrLit: String = { - => { + => { x[1..x.len() - 1].to_owned() }, }; -Num: String = => x.to_string(); -Bool: String = => x.to_string(); - -match { - r"true|false" => BoolRegex, -} else { - r"[a-zA-Z_!\?<>/.*-+][^\s{}\(\)]*" => SymbolRegex, - _ +Num: String = <"numLit"> => <>.to_string(); +Bool: String = { + "true" => "true".to_string(), + "false" => "false".to_string(), } -Comment: () = r";[^\n\r]*"; - // vim:shiftwidth=4 diff --git a/src/snapshots/eww_config__config__test__test.snap b/src/snapshots/eww_config__config__test__test.snap index 2a5ccaa..ac592e4 100644 --- a/src/snapshots/eww_config__config__test__test.snap +++ b/src/snapshots/eww_config__config__test__test.snap @@ -1,13 +1,13 @@ --- source: src/config.rs -expression: "Element::::from_expr(parser.parse(\"(box :bar 12 :baz \\\"hi\\\" foo (bar))\").unwrap()).unwrap()" +expression: "Element::::from_expr(parser.parse(0, lexer).unwrap()).unwrap()" --- Element { name: "box", attrs: { - ":baz": Str<18..22>(hi), - ":bar": Number<10..12>(12), + ":bar": Value<10..12>(12), + ":baz": Value<18..22>(hi), }, children: [ Symbol<23..26>(foo), diff --git a/src/snapshots/eww_config__config__test__test.snap.new b/src/snapshots/eww_config__config__test__test.snap.new new file mode 100644 index 0000000..40a3984 --- /dev/null +++ b/src/snapshots/eww_config__config__test__test.snap.new @@ -0,0 +1,21 @@ +--- +source: src/config.rs +expression: "Element::::from_expr(parser.parse(0, lexer).unwrap()).unwrap()" + +--- +Element { + name: "box", + attrs: { + ":baz": Value<18..22>(hi), + ":bar": Value<10..12>(12), + }, + children: [ + Symbol<23..26>(foo), + List<27..32>( + [ + Symbol<28..31>(bar), + ], + ), + ], + span: 0..33, +} diff --git a/src/snapshots/eww_config__test-10.snap b/src/snapshots/eww_config__test-10.snap index 50bf3b4..00f2730 100644 --- a/src/snapshots/eww_config__test-10.snap +++ b/src/snapshots/eww_config__test-10.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(r#\"(test \"h\\\"i\")\"#)" +expression: "p.parse(0, lexer::Lexer::new(\"(lol😄 1)\"))" --- Ok( - List<0..13>( + List<0..11>( [ - Symbol<1..5>(test), - Str<6..12>(h\"i), + Symbol<1..8>(lol😄), + Value<9..10>(1), ], ), ) diff --git a/src/snapshots/eww_config__test-11.snap b/src/snapshots/eww_config__test-11.snap index 8437f61..5b02964 100644 --- a/src/snapshots/eww_config__test-11.snap +++ b/src/snapshots/eww_config__test-11.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(r#\"(test \" hi \")\"#)" +expression: "p.parse(0, lexer::Lexer::new(r#\"(test \"hi\")\"#))" --- Ok( - List<0..13>( + List<0..11>( [ Symbol<1..5>(test), - Str<6..12>( hi ), + Value<6..10>(hi), ], ), ) diff --git a/src/snapshots/eww_config__test-12.snap b/src/snapshots/eww_config__test-12.snap index 1f7e872..b60c2dd 100644 --- a/src/snapshots/eww_config__test-12.snap +++ b/src/snapshots/eww_config__test-12.snap @@ -1,25 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(\"(+ (1 2 (* 2 5)))\")" +expression: "p.parse(0, lexer::Lexer::new(r#\"(test \"h\\\"i\")\"#))" --- Ok( - List<0..17>( + List<0..13>( [ - Symbol<1..2>(+), - List<3..16>( - [ - Number<4..5>(1), - Number<6..7>(2), - List<8..15>( - [ - Symbol<9..10>(*), - Number<11..12>(2), - Number<13..14>(5), - ], - ), - ], - ), + Symbol<1..5>(test), + Value<6..12>(h\"i), ], ), ) diff --git a/src/snapshots/eww_config__test-13.snap b/src/snapshots/eww_config__test-13.snap index 9b51e53..e103f93 100644 --- a/src/snapshots/eww_config__test-13.snap +++ b/src/snapshots/eww_config__test-13.snap @@ -1,33 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(r#\"{:key value 12 \"hi\" (test) (1 2 3)}\"#)" +expression: "p.parse(0, lexer::Lexer::new(r#\"(test \" hi \")\"#))" --- Ok( - Table<0..35>( + List<0..13>( [ - ( - Number<1..5>(:key), - Symbol<6..11>(value), - ), - ( - Number<12..14>(12), - Str<15..19>(hi), - ), - ( - List<20..26>( - [ - Symbol<21..25>(test), - ], - ), - List<27..34>( - [ - Number<28..29>(1), - Number<30..31>(2), - Number<32..33>(3), - ], - ), - ), + Symbol<1..5>(test), + Value<6..12>( hi ), ], ), ) diff --git a/src/snapshots/eww_config__test-14.snap b/src/snapshots/eww_config__test-14.snap index 3abe4ce..9271dab 100644 --- a/src/snapshots/eww_config__test-14.snap +++ b/src/snapshots/eww_config__test-14.snap @@ -1,8 +1,25 @@ --- source: src/lib.rs -expression: "p.parse(r#\"; test\"#)" +expression: "p.parse(0, lexer::Lexer::new(\"(+ (1 2 (* 2 5)))\"))" --- Ok( - Comment<0..6>, + List<0..17>( + [ + Symbol<1..2>(+), + List<3..16>( + [ + Value<4..5>(1), + Value<6..7>(2), + List<8..15>( + [ + Symbol<9..10>(*), + Value<11..12>(2), + Value<13..14>(5), + ], + ), + ], + ), + ], + ), ) diff --git a/src/snapshots/eww_config__test-15.snap b/src/snapshots/eww_config__test-15.snap index c2f54ba..c439fd1 100644 --- a/src/snapshots/eww_config__test-15.snap +++ b/src/snapshots/eww_config__test-15.snap @@ -1,15 +1,8 @@ --- source: src/lib.rs -expression: "p.parse(r#\"(f arg ; test\n arg2)\"#)" +expression: "p.parse(0, lexer::Lexer::new(r#\"; test\"#))" --- Ok( - List<0..27>( - [ - Symbol<1..2>(f), - Symbol<3..6>(arg), - Comment<7..13>, - Symbol<22..26>(arg2), - ], - ), + Comment<0..6>, ) diff --git a/src/snapshots/eww_config__test-16.snap b/src/snapshots/eww_config__test-16.snap index 021fcd1..30c9111 100644 --- a/src/snapshots/eww_config__test-16.snap +++ b/src/snapshots/eww_config__test-16.snap @@ -1,8 +1,15 @@ --- source: src/lib.rs -expression: "p.parse(\"\\\"h\\\\\\\"i\\\"\")" +expression: "p.parse(0, lexer::Lexer::new(r#\"(f arg ; test\n arg2)\"#))" --- Ok( - Str<0..6>(h\"i), + List<0..27>( + [ + Symbol<1..2>(f), + Symbol<3..6>(arg), + Comment<7..13>, + Symbol<22..26>(arg2), + ], + ), ) diff --git a/src/snapshots/eww_config__test-17.snap b/src/snapshots/eww_config__test-17.snap new file mode 100644 index 0000000..17db7ac --- /dev/null +++ b/src/snapshots/eww_config__test-17.snap @@ -0,0 +1,8 @@ +--- +source: src/lib.rs +expression: "p.parse(0, lexer::Lexer::new(\"\\\"h\\\\\\\"i\\\"\"))" + +--- +Ok( + Value<0..6>(h\"i), +) diff --git a/src/snapshots/eww_config__test-18.snap b/src/snapshots/eww_config__test-18.snap new file mode 100644 index 0000000..17db7ac --- /dev/null +++ b/src/snapshots/eww_config__test-18.snap @@ -0,0 +1,8 @@ +--- +source: src/lib.rs +expression: "p.parse(0, lexer::Lexer::new(\"\\\"h\\\\\\\"i\\\"\"))" + +--- +Ok( + Value<0..6>(h\"i), +) diff --git a/src/snapshots/eww_config__test-2.snap b/src/snapshots/eww_config__test-2.snap index dd84a41..c99806f 100644 --- a/src/snapshots/eww_config__test-2.snap +++ b/src/snapshots/eww_config__test-2.snap @@ -1,12 +1,12 @@ --- source: src/lib.rs -expression: "p.parse(\"(12)\")" +expression: "p.parse(0, lexer::Lexer::new(\"(12)\"))" --- Ok( List<0..4>( [ - Number<1..3>(12), + Value<1..3>(12), ], ), ) diff --git a/src/snapshots/eww_config__test-3.snap b/src/snapshots/eww_config__test-3.snap index 5f7b32c..09d221f 100644 --- a/src/snapshots/eww_config__test-3.snap +++ b/src/snapshots/eww_config__test-3.snap @@ -1,13 +1,8 @@ --- source: src/lib.rs -expression: "p.parse(\"(1 2)\")" +expression: "p.parse(0, lexer::Lexer::new(\"1.2\"))" --- Ok( - List<0..5>( - [ - Number<1..2>(1), - Number<3..4>(2), - ], - ), + Value<0..3>(1.2), ) diff --git a/src/snapshots/eww_config__test-4.snap b/src/snapshots/eww_config__test-4.snap index 8ce142b..f29bac3 100644 --- a/src/snapshots/eww_config__test-4.snap +++ b/src/snapshots/eww_config__test-4.snap @@ -1,14 +1,8 @@ --- source: src/lib.rs -expression: "p.parse(\"(1 :foo 1)\")" +expression: "p.parse(0, lexer::Lexer::new(\"-1.2\"))" --- Ok( - List<0..10>( - [ - Number<1..2>(1), - Number<3..7>(:foo), - Number<8..9>(1), - ], - ), + Value<0..4>(-1.2), ) diff --git a/src/snapshots/eww_config__test-5.snap b/src/snapshots/eww_config__test-5.snap index 9db3361..0c3ad08 100644 --- a/src/snapshots/eww_config__test-5.snap +++ b/src/snapshots/eww_config__test-5.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(\"(:foo 1)\")" +expression: "p.parse(0, lexer::Lexer::new(\"(1 2)\"))" --- Ok( - List<0..8>( + List<0..5>( [ - Number<1..5>(:foo), - Number<6..7>(1), + Value<1..2>(1), + Value<3..4>(2), ], ), ) diff --git a/src/snapshots/eww_config__test-6.snap b/src/snapshots/eww_config__test-6.snap index f368f33..b3b4ab8 100644 --- a/src/snapshots/eww_config__test-6.snap +++ b/src/snapshots/eww_config__test-6.snap @@ -1,13 +1,14 @@ --- source: src/lib.rs -expression: "p.parse(\"(:foo->: 1)\")" +expression: "p.parse(0, lexer::Lexer::new(\"(1 :foo 1)\"))" --- Ok( - List<0..11>( + List<0..10>( [ - Number<1..8>(:foo->:), - Number<9..10>(1), + Value<1..2>(1), + Number<3..7>(:foo), + Value<8..9>(1), ], ), ) diff --git a/src/snapshots/eww_config__test-7.snap b/src/snapshots/eww_config__test-7.snap index eb63df2..de5b5c0 100644 --- a/src/snapshots/eww_config__test-7.snap +++ b/src/snapshots/eww_config__test-7.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(\"(foo 1)\")" +expression: "p.parse(0, lexer::Lexer::new(\"(:foo 1)\"))" --- Ok( - List<0..7>( + List<0..8>( [ - Symbol<1..4>(foo), - Number<5..6>(1), + Number<1..5>(:foo), + Value<6..7>(1), ], ), ) diff --git a/src/snapshots/eww_config__test-8.snap b/src/snapshots/eww_config__test-8.snap index ee21f3e..c149453 100644 --- a/src/snapshots/eww_config__test-8.snap +++ b/src/snapshots/eww_config__test-8.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(\"(lol😄 1)\")" +expression: "p.parse(0, lexer::Lexer::new(\"(:foo->: 1)\"))" --- Ok( List<0..11>( [ - Symbol<1..8>(lol😄), - Number<9..10>(1), + Number<1..8>(:foo->:), + Value<9..10>(1), ], ), ) diff --git a/src/snapshots/eww_config__test-9.snap b/src/snapshots/eww_config__test-9.snap index edc1cb8..cd26a6e 100644 --- a/src/snapshots/eww_config__test-9.snap +++ b/src/snapshots/eww_config__test-9.snap @@ -1,13 +1,13 @@ --- source: src/lib.rs -expression: "p.parse(r#\"(test \"hi\")\"#)" +expression: "p.parse(0, lexer::Lexer::new(\"(foo 1)\"))" --- Ok( - List<0..11>( + List<0..7>( [ - Symbol<1..5>(test), - Str<6..10>(hi), + Symbol<1..4>(foo), + Value<5..6>(1), ], ), ) diff --git a/src/snapshots/eww_config__test.snap b/src/snapshots/eww_config__test.snap index 8c42a6b..034b165 100644 --- a/src/snapshots/eww_config__test.snap +++ b/src/snapshots/eww_config__test.snap @@ -1,8 +1,8 @@ --- source: src/lib.rs -expression: "p.parse(\"1\")" +expression: "p.parse(0, lexer::Lexer::new(\"1\"))" --- Ok( - Number<0..1>(1), + Value<0..1>(1), )