From b93a12c32c77fd0b69c6b322097f26cab2345b96 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 14 Aug 2023 16:54:40 -0400 Subject: [PATCH 1/5] Add support for escaped double quotes in sexp. --- Makefile | 4 ++-- src/parser/sexp.rs | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index dcfb5400..29f73bec 100644 --- a/Makefile +++ b/Makefile @@ -59,8 +59,8 @@ unittest: jaeger: # 4317 for OTLP gRPC, 4318 for OTLP HTTP. We currently use gRPC but I forward both ports regardless. # -# These flags didn't help even though they seem like they would: --collector.otlp.grpc.max-message-size=10000000 --collector.queue-size=20000 --collector.num-workers=100 -> docker run -d --rm --name organicdocker -p 4317:4317 -p 4318:4318 -p 16686:16686 -e COLLECTOR_OTLP_ENABLED=true jaegertracing/all-in-one:1.47 --collector.grpc-server.max-message-size=10000000 +# These flags didn't help even though they seem like they would: --collector.queue-size=20000 --collector.num-workers=100 +> docker run -d --rm --name organicdocker -p 4317:4317 -p 4318:4318 -p 16686:16686 -e COLLECTOR_OTLP_ENABLED=true jaegertracing/all-in-one:1.47 --collector.grpc-server.max-message-size=20000000 --collector.otlp.grpc.max-message-size=20000000 .PHONY: jaegerweb jaegerweb: diff --git a/src/parser/sexp.rs b/src/parser/sexp.rs index c0188797..1a7aa4cf 100644 --- a/src/parser/sexp.rs +++ b/src/parser/sexp.rs @@ -60,6 +60,10 @@ impl<'s> TextWithProperties<'s> { out.push('\\'); ParseState::Normal } + (ParseState::Escape, '"') => { + out.push('"'); + ParseState::Normal + } _ => todo!(), }; } From 2bcc3f059929abb7319e06a9cb31e0e21cbbaee6 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 14 Aug 2023 17:12:01 -0400 Subject: [PATCH 2/5] Fix reporting of jaeger traces when diff does not match. The early exit was causing some traces to not be reported. --- src/main.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 852f1cc6..29728d75 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,12 +28,13 @@ fn main() -> Result<(), Box> { fn main_body() -> Result<(), Box> { init_telemetry()?; - run_compare( + let compare_result = run_compare( std::env::args() .nth(1) .expect("Pass a single file into this script."), - )?; + ); shutdown_telemetry()?; + compare_result?; Ok(()) } From 1bbfbc31640b205a83545e2e534878d25201927d Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 14 Aug 2023 17:18:48 -0400 Subject: [PATCH 3/5] Add additional tracing to lesser block. --- src/parser/lesser_block.rs | 54 +++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/src/parser/lesser_block.rs b/src/parser/lesser_block.rs index 3b7c68c6..2e860366 100644 --- a/src/parser/lesser_block.rs +++ b/src/parser/lesser_block.rs @@ -238,31 +238,49 @@ fn lesser_block_end( ) -> impl for<'r, 's> Fn(Context<'r, 's>, &'s str) -> Res<&'s str, &'s str> { let current_name_lower = current_name.to_lowercase(); move |context: Context, input: &str| { - start_of_line(context, input)?; - let (remaining, _leading_whitespace) = space0(input)?; - let (remaining, (_begin, _name, _ws)) = tuple(( - tag_no_case("#+end_"), - tag_no_case(current_name_lower.as_str()), - alt((eof, line_ending)), - ))(remaining)?; - let source = get_consumed(input, remaining); - Ok((remaining, source)) + _lesser_block_end(context, input, current_name_lower.as_str()) } } +#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] +fn _lesser_block_end<'r, 's, 'x>( + context: Context<'r, 's>, + input: &'s str, + current_name_lower: &'x str, +) -> Res<&'s str, &'s str> { + start_of_line(context, input)?; + let (remaining, _leading_whitespace) = space0(input)?; + let (remaining, (_begin, _name, _ws)) = tuple(( + tag_no_case("#+end_"), + tag_no_case(current_name_lower), + alt((eof, line_ending)), + ))(remaining)?; + let source = get_consumed(input, remaining); + Ok((remaining, source)) +} + fn lesser_block_begin( current_name: &str, ) -> impl for<'r, 's> Fn(Context<'r, 's>, &'s str) -> Res<&'s str, &'s str> { let current_name_lower = current_name.to_lowercase(); move |context: Context, input: &str| { - start_of_line(context, input)?; - let (remaining, _leading_whitespace) = space0(input)?; - let (remaining, (_begin, name)) = tuple(( - tag_no_case("#+begin_"), - verify(name, |name: &str| { - name.to_lowercase().as_str() == current_name_lower - }), - ))(remaining)?; - Ok((remaining, name)) + _lesser_block_begin(context, input, current_name_lower.as_str()) } } + +#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] +fn _lesser_block_begin<'r, 's, 'x>( + context: Context<'r, 's>, + input: &'s str, + current_name_lower: &'x str, +) -> Res<&'s str, &'s str> { + start_of_line(context, input)?; + let (remaining, _leading_whitespace) = space0(input)?; + let (remaining, (_begin, name)) = tuple(( + tag_no_case("#+begin_"), + verify(name, |name: &str| { + name.to_lowercase().as_str() == current_name_lower + }), + ))(remaining)?; + Ok((remaining, name)) +} From a7b298eeec9bef39a4c2c9c31a589019106e1e00 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 14 Aug 2023 17:28:57 -0400 Subject: [PATCH 4/5] Fix lesser block exit priority. The paragraph end was matching text inside lesser blocks. --- src/parser/lesser_block.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/lesser_block.rs b/src/parser/lesser_block.rs index 2e860366..42a1feb9 100644 --- a/src/parser/lesser_block.rs +++ b/src/parser/lesser_block.rs @@ -200,7 +200,7 @@ pub fn src_block<'r, 's>(context: Context<'r, 's>, input: &'s str) -> Res<&'s st .with_additional_node(ContextElement::ConsumeTrailingWhitespace(true)) .with_additional_node(ContextElement::Context("lesser block")) .with_additional_node(ContextElement::ExitMatcherNode(ExitMatcherNode { - class: ExitClass::Beta, + class: ExitClass::Alpha, exit_matcher: &lesser_block_end_specialized, })); let parameters = match parameters { From 63d092c83dee6c12a06e7606ab5a66050ef48beb Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 14 Aug 2023 22:06:22 -0400 Subject: [PATCH 5/5] Group the two traces per compare into one trace. --- src/main.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 29728d75..7a67894a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ use organic::compare_document; use organic::emacs_parse_org_document; #[cfg(feature = "compare")] use organic::parser::sexp::sexp_with_padding; +use tracing::span; use crate::init_tracing::init_telemetry; use crate::init_tracing::shutdown_telemetry; @@ -28,11 +29,19 @@ fn main() -> Result<(), Box> { fn main_body() -> Result<(), Box> { init_telemetry()?; - let compare_result = run_compare( - std::env::args() - .nth(1) - .expect("Pass a single file into this script."), - ); + let compare_result = { + #[cfg(feature = "tracing")] + let span = span!(tracing::Level::DEBUG, "run_compare"); + #[cfg(feature = "tracing")] + let _enter = span.enter(); + + run_compare( + std::env::args() + .nth(1) + .expect("Pass a single file into this script."), + ) + }; + shutdown_telemetry()?; compare_result?; Ok(())