From 5d7ca1b96627eca3eaf1a28ac568f73f81d257cd Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 11 Apr 2023 15:08:46 -0400 Subject: [PATCH] Fix handling of whitespace. --- src/compare/mod.rs | 1 + src/compare/sexp.rs | 6 +++++- src/init_tracing.rs | 34 ++++++++++++++++++++++++++++++++++ src/main.rs | 33 ++++----------------------------- src/org_compare.rs | 9 ++++++++- 5 files changed, 52 insertions(+), 31 deletions(-) create mode 100644 src/init_tracing.rs diff --git a/src/compare/mod.rs b/src/compare/mod.rs index d2ae927..d364ed7 100644 --- a/src/compare/mod.rs +++ b/src/compare/mod.rs @@ -2,3 +2,4 @@ mod error; mod parse; mod sexp; pub use parse::emacs_parse_org_document; +pub use sexp::sexp; diff --git a/src/compare/sexp.rs b/src/compare/sexp.rs index d50dbdb..136c1e7 100644 --- a/src/compare/sexp.rs +++ b/src/compare/sexp.rs @@ -3,7 +3,10 @@ use nom::bytes::complete::tag; use nom::bytes::complete::take_till1; use nom::character::complete::multispace0; use nom::character::complete::multispace1; +use nom::combinator::not; +use nom::combinator::peek; use nom::multi::separated_list1; +use nom::sequence::delimited; use super::error::Res; @@ -29,13 +32,14 @@ fn token<'s>(input: &'s str) -> Res<&'s str, Token<'s>> { #[tracing::instrument(ret, level = "debug")] fn list<'s>(input: &'s str) -> Res<&'s str, Token<'s>> { let (remaining, opening_paren) = tag("(")(input)?; - let (remaining, children) = separated_list1(multispace1, token)(remaining)?; + let (remaining, children) = delimited(multispace0, separated_list1(multispace1, token), multispace0)(remaining)?; let (remaining, closing_paren) = tag(")")(remaining)?; Ok((remaining, Token::List(children))) } #[tracing::instrument(ret, level = "debug")] fn atom<'s>(input: &'s str) -> Res<&'s str, Token<'s>> { + not(peek(tag(")")))(input)?; unquoted_atom(input) } diff --git a/src/init_tracing.rs b/src/init_tracing.rs new file mode 100644 index 0000000..171de8d --- /dev/null +++ b/src/init_tracing.rs @@ -0,0 +1,34 @@ +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; +use tracing_subscriber::EnvFilter; + +pub fn init_telemetry() -> Result<(), Box> { + let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("WARN")); + + // let stdout = tracing_subscriber::fmt::Layer::new() + // .pretty() + // .with_file(true) + // .with_line_number(true) + // .with_thread_ids(false) + // .with_target(false); + + opentelemetry::global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new()); + let tracer = opentelemetry_jaeger::new_pipeline() + .with_service_name("toy_language") + .install_simple()?; + + let opentelemetry = tracing_opentelemetry::layer().with_tracer(tracer); + + tracing_subscriber::registry() + .with(env_filter) + .with(opentelemetry) + // .with(stdout) + .try_init()?; + + Ok(()) +} + +pub fn shutdown_telemetry() -> Result<(), Box> { + opentelemetry::global::shutdown_tracer_provider(); + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 8f1e4f1..6201ac9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,9 @@ #![feature(round_char_boundary)] +use crate::init_tracing::init_telemetry; +use crate::init_tracing::shutdown_telemetry; use crate::parser::document; -use tracing_subscriber::EnvFilter; +mod init_tracing; mod parser; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::util::SubscriberInitExt; const TEST_DOC: &'static str = include_str!("../toy_language.txt"); @@ -12,31 +12,6 @@ fn main() -> Result<(), Box> { let parsed = document(TEST_DOC); println!("{}\n\n\n", TEST_DOC); println!("{:#?}", parsed); - opentelemetry::global::shutdown_tracer_provider(); - Ok(()) -} - -fn init_telemetry() -> Result<(), Box> { - let env_filter = EnvFilter::try_from_default_env().unwrap_or(EnvFilter::new("WARN")); - - // let stdout = tracing_subscriber::fmt::Layer::new() - // .pretty() - // .with_file(true) - // .with_line_number(true) - // .with_thread_ids(false) - // .with_target(false); - - opentelemetry::global::set_text_map_propagator(opentelemetry_jaeger::Propagator::new()); - let tracer = opentelemetry_jaeger::new_pipeline() - .with_service_name("toy_language") - .install_simple()?; - - let opentelemetry = tracing_opentelemetry::layer().with_tracer(tracer); - - tracing_subscriber::registry() - .with(env_filter) - .with(opentelemetry) - // .with(stdout) - .try_init()?; + shutdown_telemetry()?; Ok(()) } diff --git a/src/org_compare.rs b/src/org_compare.rs index 7fd6685..76ce3b9 100644 --- a/src/org_compare.rs +++ b/src/org_compare.rs @@ -1,9 +1,16 @@ #![feature(round_char_boundary)] #![feature(exit_status_error)] +use crate::init_tracing::init_telemetry; +use crate::init_tracing::shutdown_telemetry; use compare::emacs_parse_org_document; +use compare::sexp; mod compare; +mod init_tracing; fn main() -> Result<(), Box> { - emacs_parse_org_document("./org_mode_samples/footnote_definition/simple.org")?; + init_telemetry()?; + // emacs_parse_org_document("./org_mode_samples/footnote_definition/simple.org")?; + sexp(" (foo bar baz ) ")?; + shutdown_telemetry()?; Ok(()) }