Remove wasm_test's dependency on compare module.
This commit is contained in:
		
							parent
							
								
									f4e0dddd9d
								
							
						
					
					
						commit
						945121202d
					
				| @ -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; | ||||
| 
 | ||||
|  | ||||
| @ -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> { | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) post_affiliated: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) contents_begin: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) contents_end: Option<usize>, | ||||
|     pub(crate) end: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) post_blank: Option<usize>, | ||||
| } | ||||
| 
 | ||||
| pub(crate) fn get_emacs_standard_properties( | ||||
|     emacs: &Token<'_>, | ||||
| ) -> Result<EmacsStandardProperties, Box<dyn std::error::Error>> { | ||||
|     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<Option<usize>, Box<dyn std::error::Error>> { | ||||
|     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::<usize>()) | ||||
|             } | ||||
|         }) | ||||
|         .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.
 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
							
								
								
									
										10
									
								
								src/util/elisp/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/util/elisp/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @ -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; | ||||
							
								
								
									
										75
									
								
								src/util/elisp/util.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/util/elisp/util.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| use super::Token; | ||||
| 
 | ||||
| pub(crate) fn maybe_token_to_usize( | ||||
|     token: Option<&Token<'_>>, | ||||
| ) -> Result<Option<usize>, Box<dyn std::error::Error>> { | ||||
|     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::<usize>()) | ||||
|             } | ||||
|         }) | ||||
|         .map_or(Ok(None), |r| r.map(Some))?) | ||||
| } | ||||
| 
 | ||||
| pub(crate) struct EmacsStandardProperties { | ||||
|     pub(crate) begin: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) post_affiliated: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) contents_begin: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) contents_end: Option<usize>, | ||||
|     pub(crate) end: Option<usize>, | ||||
|     #[allow(dead_code)] | ||||
|     pub(crate) post_blank: Option<usize>, | ||||
| } | ||||
| 
 | ||||
| pub(crate) fn get_emacs_standard_properties( | ||||
|     emacs: &Token<'_>, | ||||
| ) -> Result<EmacsStandardProperties, Box<dyn std::error::Error>> { | ||||
|     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, | ||||
|         } | ||||
|     }) | ||||
| } | ||||
| @ -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"))] | ||||
|  | ||||
| @ -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; | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander