From a97d41a1b3c73fdbbf4fae7138fc252cda7ebc84 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Thu, 22 May 2025 19:45:45 -0400 Subject: [PATCH] parser: fix dead_code warning in test `parse_text` fn ``` warning: function `parse_text` is never used --> crates/squawk_parser/tests/utils.rs:5:15 | 5 | pub(crate) fn parse_text(text: &str) -> (String, bool) { | ^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default warning: `squawk_parser` (test "utils") generated 1 warning Finished `test` profile [unoptimized] target(s) in 1.55s Running unittests src/main.rs (target/debug/deps/squawk-42ae9071a6dd104a) ``` --- crates/squawk_parser/tests/tests.rs | 62 ++++++++++++++++++++++++++++- crates/squawk_parser/tests/utils.rs | 2 +- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/crates/squawk_parser/tests/tests.rs b/crates/squawk_parser/tests/tests.rs index 113d1a6a..8fe15df3 100644 --- a/crates/squawk_parser/tests/tests.rs +++ b/crates/squawk_parser/tests/tests.rs @@ -2,8 +2,66 @@ use camino::Utf8Path; use dir_test::{dir_test, Fixture}; use insta::{assert_snapshot, with_settings}; +use squawk_parser::{parse, LexedStr}; +use std::fmt::Write; -mod utils; +fn parse_text(text: &str) -> (String, bool) { + let lexed = LexedStr::new(text); + let input = lexed.to_input(); + let output = parse(&input); + + let mut buf = String::new(); + let mut errors = Vec::new(); + let mut indent = String::new(); + let mut depth = 0; + let mut len = 0; + lexed.intersperse_trivia(&output, &mut |step| match step { + squawk_parser::StrStep::Token { kind, text } => { + assert!(depth > 0); + len += text.len(); + writeln!(buf, "{indent}{kind:?} {text:?}").unwrap(); + } + squawk_parser::StrStep::Enter { kind } => { + assert!(depth > 0 || len == 0); + depth += 1; + writeln!(buf, "{indent}{kind:?}").unwrap(); + indent.push_str(" "); + } + squawk_parser::StrStep::Exit => { + assert!(depth > 0); + depth -= 1; + indent.pop(); + indent.pop(); + } + squawk_parser::StrStep::Error { msg, pos } => { + assert!(depth > 0); + let err = "ERROR"; + errors.push(format!("{err}@{pos}: {msg}\n")); + } + }); + assert_eq!( + len, + text.len(), + "didn't parse all text.\nParsed:\n{}\n\nAll:\n{}\n", + &text[..len], + text + ); + + for (token, msg) in lexed.errors() { + let pos = lexed.text_start(token); + let err = "ERROR"; + errors.push(format!("{err}@{pos}: {msg}\n")); + } + + let has_errors = !errors.is_empty(); + if has_errors { + buf.push_str("---\n"); + for e in errors { + buf.push_str(&e); + } + } + (buf, has_errors) +} #[dir_test( dir: "$CARGO_MANIFEST_DIR/tests/data", @@ -20,7 +78,7 @@ fn parser(fixture: Fixture<&str>) { let parent_dir = input_file.parent().and_then(|x| x.file_name()).unwrap(); - let (parsed, has_errors) = utils::parse_text(content); + let (parsed, has_errors) = parse_text(content); with_settings!({ omit_expression => true, diff --git a/crates/squawk_parser/tests/utils.rs b/crates/squawk_parser/tests/utils.rs index 785df5ec..e7481f2d 100644 --- a/crates/squawk_parser/tests/utils.rs +++ b/crates/squawk_parser/tests/utils.rs @@ -2,7 +2,7 @@ use std::fmt::Write; use squawk_parser::{parse, LexedStr}; -pub(crate) fn parse_text(text: &str) -> (String, bool) { +pub fn parse_text(text: &str) -> (String, bool) { let lexed = LexedStr::new(text); let input = lexed.to_input(); let output = parse(&input);