From 945121202d0b7743cfcdf761b215702fa1a73e48 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 31 Dec 2023 11:11:25 -0500 Subject: [PATCH] Remove wasm_test's dependency on compare module. --- src/compare/compare.rs | 3 +- src/compare/compare_field.rs | 4 +- src/compare/diff.rs | 4 +- src/compare/mod.rs | 7 --- src/compare/util.rs | 79 ++--------------------------- src/lib.rs | 2 +- src/util/elisp/mod.rs | 10 ++++ src/{compare => util/elisp}/sexp.rs | 0 src/util/elisp/util.rs | 75 +++++++++++++++++++++++++++ src/util/mod.rs | 2 + src/wasm_test/compare.rs | 10 ++-- src/wasm_test/runner.rs | 2 +- 12 files changed, 102 insertions(+), 96 deletions(-) create mode 100644 src/util/elisp/mod.rs rename src/{compare => util/elisp}/sexp.rs (100%) create mode 100644 src/util/elisp/util.rs diff --git a/src/compare/compare.rs b/src/compare/compare.rs index deffe1d6..5f16abb0 100644 --- a/src/compare/compare.rs +++ b/src/compare/compare.rs @@ -1,8 +1,6 @@ use std::path::Path; use crate::compare::diff::compare_document; - -use crate::compare::sexp::sexp; use crate::context::GlobalSettings; use crate::context::LocalFileAccessInterface; use crate::parser::parse_file_with_settings; @@ -10,6 +8,7 @@ use crate::parser::parse_with_settings; use crate::util::cli::emacs_parse_anonymous_org_document; use crate::util::cli::emacs_parse_file_org_document; use crate::util::cli::print_versions; +use crate::util::elisp::sexp; use crate::util::terminal::foreground_color; use crate::util::terminal::reset_color; diff --git a/src/compare/compare_field.rs b/src/compare/compare_field.rs index 9ab611f9..a67ca35d 100644 --- a/src/compare/compare_field.rs +++ b/src/compare/compare_field.rs @@ -9,8 +9,6 @@ use super::diff::artificial_owned_diff_scope; use super::diff::compare_ast_node; use super::diff::DiffEntry; use super::diff::DiffStatus; -use super::sexp::unquote; -use super::sexp::Token; use super::util::get_property; use super::util::get_property_numeric; use super::util::get_property_quoted_string; @@ -20,6 +18,8 @@ use crate::types::CharOffsetInLine; use crate::types::LineNumber; use crate::types::RetainLabels; use crate::types::SwitchNumberLines; +use crate::util::elisp::unquote; +use crate::util::elisp::Token; #[derive(Debug)] pub(crate) enum EmacsField<'s> { diff --git a/src/compare/diff.rs b/src/compare/diff.rs index 5f8097a7..e9a6e569 100644 --- a/src/compare/diff.rs +++ b/src/compare/diff.rs @@ -16,8 +16,6 @@ use super::compare_field::compare_property_retain_labels; use super::compare_field::compare_property_set_of_quoted_string; use super::compare_field::compare_property_single_ast_node; use super::compare_field::compare_property_unquoted_atom; -use super::sexp::unquote; -use super::sexp::Token; use super::util::affiliated_keywords_names; use super::util::assert_no_children; use super::util::compare_additional_properties; @@ -107,6 +105,8 @@ use crate::types::Verbatim; use crate::types::VerseBlock; use crate::types::WarningDelayType; use crate::types::Year; +use crate::util::elisp::unquote; +use crate::util::elisp::Token; use crate::util::elisp_fact::ElispFact; use crate::util::elisp_fact::GetElispFact; use crate::util::terminal::foreground_color; diff --git a/src/compare/mod.rs b/src/compare/mod.rs index 136f02ba..f5f4ee56 100644 --- a/src/compare/mod.rs +++ b/src/compare/mod.rs @@ -3,7 +3,6 @@ mod compare; mod compare_field; mod diff; mod macros; -mod sexp; mod util; pub use compare::run_anonymous_compare; pub use compare::run_anonymous_compare_with_settings; @@ -11,9 +10,3 @@ pub use compare::run_compare_on_file; pub use compare::run_compare_on_file_with_settings; pub use compare::silent_anonymous_compare; pub use compare::silent_compare_on_file; -pub use sexp::sexp; -pub(crate) use sexp::unquote; -pub(crate) use sexp::TextWithProperties; -pub use sexp::Token; -pub(crate) use util::maybe_token_to_usize; -pub(crate) use util::EmacsStandardProperties; diff --git a/src/compare/util.rs b/src/compare/util.rs index 4b8ff635..32e8de6c 100644 --- a/src/compare/util.rs +++ b/src/compare/util.rs @@ -8,13 +8,14 @@ use super::compare_field::compare_property_quoted_string; use super::compare_field::ComparePropertiesResult; use super::diff::DiffEntry; use super::diff::DiffStatus; -use super::sexp::Token; use crate::compare::diff::compare_ast_node; -use crate::compare::sexp::unquote; use crate::types::AffiliatedKeywordValue; use crate::types::AstNode; use crate::types::GetAffiliatedKeywords; use crate::types::StandardProperties; +use crate::util::elisp::get_emacs_standard_properties; +use crate::util::elisp::unquote; +use crate::util::elisp::Token; use crate::util::elisp_fact::GetElispFact; /// Check if the child string slice is a slice of the parent string slice. @@ -145,80 +146,6 @@ fn assert_post_blank<'b, 's, S: StandardProperties<'s> + ?Sized>( Ok(()) } -pub(crate) struct EmacsStandardProperties { - pub(crate) begin: Option, - #[allow(dead_code)] - pub(crate) post_affiliated: Option, - #[allow(dead_code)] - pub(crate) contents_begin: Option, - #[allow(dead_code)] - pub(crate) contents_end: Option, - pub(crate) end: Option, - #[allow(dead_code)] - pub(crate) post_blank: Option, -} - -pub(crate) fn get_emacs_standard_properties( - emacs: &Token<'_>, -) -> Result> { - let children = emacs.as_list()?; - let attributes_child = children.get(1).ok_or("Should have an attributes child.")?; - let attributes_map = attributes_child.as_map()?; - let standard_properties = attributes_map.get(":standard-properties"); - Ok(if standard_properties.is_some() { - let mut std_props = standard_properties - .expect("if statement proves its Some") - .as_vector()? - .iter(); - let begin = maybe_token_to_usize(std_props.next())?; - let post_affiliated = maybe_token_to_usize(std_props.next())?; - let contents_begin = maybe_token_to_usize(std_props.next())?; - let contents_end = maybe_token_to_usize(std_props.next())?; - let end = maybe_token_to_usize(std_props.next())?; - let post_blank = maybe_token_to_usize(std_props.next())?; - EmacsStandardProperties { - begin, - post_affiliated, - contents_begin, - contents_end, - end, - post_blank, - } - } else { - let begin = maybe_token_to_usize(attributes_map.get(":begin").copied())?; - let end = maybe_token_to_usize(attributes_map.get(":end").copied())?; - let contents_begin = maybe_token_to_usize(attributes_map.get(":contents-begin").copied())?; - let contents_end = maybe_token_to_usize(attributes_map.get(":contents-end").copied())?; - let post_blank = maybe_token_to_usize(attributes_map.get(":post-blank").copied())?; - let post_affiliated = - maybe_token_to_usize(attributes_map.get(":post-affiliated").copied())?; - EmacsStandardProperties { - begin, - post_affiliated, - contents_begin, - contents_end, - end, - post_blank, - } - }) -} - -pub(crate) fn maybe_token_to_usize( - token: Option<&Token<'_>>, -) -> Result, Box> { - Ok(token - .map(|token| token.as_atom()) - .map_or(Ok(None), |r| r.map(Some))? - .and_then(|val| { - if val == "nil" { - None - } else { - Some(val.parse::()) - } - }) - .map_or(Ok(None), |r| r.map(Some))?) -} - /// Get a named property from the emacs token. /// /// Returns Ok(None) if value is nil or absent. diff --git a/src/lib.rs b/src/lib.rs index 96af81d3..bda2de7a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,7 +10,7 @@ extern crate test; // TODO: I only include compare to use some shared stuff like sexp and DiffResult. Ideally, this would be moved to a shared module. -#[cfg(any(feature = "compare", feature = "wasm_test"))] +#[cfg(feature = "compare")] pub mod compare; #[cfg(any(feature = "compare", feature = "wasm", feature = "wasm_test"))] pub mod util; diff --git a/src/util/elisp/mod.rs b/src/util/elisp/mod.rs new file mode 100644 index 00000000..5a63924f --- /dev/null +++ b/src/util/elisp/mod.rs @@ -0,0 +1,10 @@ +mod sexp; +mod util; + +pub use sexp::sexp; +pub(crate) use sexp::unquote; +pub(crate) use sexp::TextWithProperties; +pub use sexp::Token; +pub(crate) use util::get_emacs_standard_properties; +pub(crate) use util::maybe_token_to_usize; +pub(crate) use util::EmacsStandardProperties; diff --git a/src/compare/sexp.rs b/src/util/elisp/sexp.rs similarity index 100% rename from src/compare/sexp.rs rename to src/util/elisp/sexp.rs diff --git a/src/util/elisp/util.rs b/src/util/elisp/util.rs new file mode 100644 index 00000000..ccfef138 --- /dev/null +++ b/src/util/elisp/util.rs @@ -0,0 +1,75 @@ +use super::Token; + +pub(crate) fn maybe_token_to_usize( + token: Option<&Token<'_>>, +) -> Result, Box> { + Ok(token + .map(|token| token.as_atom()) + .map_or(Ok(None), |r| r.map(Some))? + .and_then(|val| { + if val == "nil" { + None + } else { + Some(val.parse::()) + } + }) + .map_or(Ok(None), |r| r.map(Some))?) +} + +pub(crate) struct EmacsStandardProperties { + pub(crate) begin: Option, + #[allow(dead_code)] + pub(crate) post_affiliated: Option, + #[allow(dead_code)] + pub(crate) contents_begin: Option, + #[allow(dead_code)] + pub(crate) contents_end: Option, + pub(crate) end: Option, + #[allow(dead_code)] + pub(crate) post_blank: Option, +} + +pub(crate) fn get_emacs_standard_properties( + emacs: &Token<'_>, +) -> Result> { + let children = emacs.as_list()?; + let attributes_child = children.get(1).ok_or("Should have an attributes child.")?; + let attributes_map = attributes_child.as_map()?; + let standard_properties = attributes_map.get(":standard-properties"); + Ok(if standard_properties.is_some() { + let mut std_props = standard_properties + .expect("if statement proves its Some") + .as_vector()? + .iter(); + let begin = maybe_token_to_usize(std_props.next())?; + let post_affiliated = maybe_token_to_usize(std_props.next())?; + let contents_begin = maybe_token_to_usize(std_props.next())?; + let contents_end = maybe_token_to_usize(std_props.next())?; + let end = maybe_token_to_usize(std_props.next())?; + let post_blank = maybe_token_to_usize(std_props.next())?; + EmacsStandardProperties { + begin, + post_affiliated, + contents_begin, + contents_end, + end, + post_blank, + } + } else { + let begin = maybe_token_to_usize(attributes_map.get(":begin").copied())?; + let end = maybe_token_to_usize(attributes_map.get(":end").copied())?; + let contents_begin = maybe_token_to_usize(attributes_map.get(":contents-begin").copied())?; + let contents_end = maybe_token_to_usize(attributes_map.get(":contents-end").copied())?; + let post_blank = maybe_token_to_usize(attributes_map.get(":post-blank").copied())?; + let post_affiliated = + maybe_token_to_usize(attributes_map.get(":post-affiliated").copied())?; + EmacsStandardProperties { + begin, + post_affiliated, + contents_begin, + contents_end, + end, + post_blank, + } + }) +} diff --git a/src/util/mod.rs b/src/util/mod.rs index 65bc6ec5..34f1fea5 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -1,5 +1,7 @@ #[cfg(any(feature = "compare", feature = "wasm_test"))] pub mod cli; +#[cfg(any(feature = "compare", feature = "wasm_test"))] +pub mod elisp; #[cfg(any(feature = "compare", feature = "wasm", feature = "wasm_test"))] pub mod elisp_fact; #[cfg(any(feature = "compare", feature = "wasm_test"))] diff --git a/src/wasm_test/compare.rs b/src/wasm_test/compare.rs index 7fda10d6..ec923fe5 100644 --- a/src/wasm_test/compare.rs +++ b/src/wasm_test/compare.rs @@ -5,11 +5,11 @@ use std::collections::HashMap; use super::diff::WasmDiffResult; use super::diff::WasmDiffStatus; -use crate::compare::maybe_token_to_usize; -use crate::compare::unquote; -use crate::compare::EmacsStandardProperties; -use crate::compare::TextWithProperties; -use crate::compare::Token; +use crate::util::elisp::maybe_token_to_usize; +use crate::util::elisp::unquote; +use crate::util::elisp::EmacsStandardProperties; +use crate::util::elisp::TextWithProperties; +use crate::util::elisp::Token; use crate::wasm::WasmAstNodeWrapper; use crate::wasm::WasmDocument; diff --git a/src/wasm_test/runner.rs b/src/wasm_test/runner.rs index 281845c5..5921d75e 100644 --- a/src/wasm_test/runner.rs +++ b/src/wasm_test/runner.rs @@ -1,7 +1,6 @@ use std::path::Path; use super::compare::wasm_compare_document; -use crate::compare::sexp; use crate::context::GlobalSettings; use crate::parser::parse_file_with_settings; use crate::parser::parse_with_settings; @@ -9,6 +8,7 @@ use crate::settings::LocalFileAccessInterface; use crate::util::cli::emacs_parse_anonymous_org_document; use crate::util::cli::emacs_parse_file_org_document; use crate::util::cli::print_versions; +use crate::util::elisp::sexp; use crate::util::terminal::foreground_color; use crate::util::terminal::reset_color; use crate::wasm::ToWasm;