diff --git a/build.rs b/build.rs index 5d6f10e4..31cfb72e 100644 --- a/build.rs +++ b/build.rs @@ -71,10 +71,6 @@ fn write_header(test_file: &mut File) { test_file, r#" #[feature(exit_status_error)] -use organic::compare_document; -use organic::parser::parse; -use organic::emacs_parse_anonymous_org_document; -use organic::sexp; "# ) diff --git a/src/bin_compare.rs b/src/bin_compare.rs index 8f91501d..b2012a6f 100644 --- a/src/bin_compare.rs +++ b/src/bin_compare.rs @@ -1,18 +1,9 @@ #![feature(round_char_boundary)] #![feature(exact_size_is_empty)] use std::io::Read; -use std::path::Path; -use ::organic::parser::parse; -use organic::compare_document; -use organic::emacs_parse_anonymous_org_document; -use organic::emacs_parse_file_org_document; -use organic::get_emacs_version; -use organic::get_org_mode_version; -use organic::parser::parse_with_settings; -use organic::sexp; -use organic::GlobalSettings; -use organic::LocalFileAccessInterface; +use organic::compare::run_anonymous_compare; +use organic::compare::run_compare_on_file; #[cfg(feature = "tracing")] use crate::init_tracing::init_telemetry; @@ -43,10 +34,10 @@ fn main_body() -> Result<(), Box> { let args = std::env::args().skip(1); if args.is_empty() { let org_contents = read_stdin_to_string()?; - run_anonymous_parse(org_contents) + run_anonymous_compare(org_contents) } else { for arg in args { - run_parse_on_file(arg)? + run_compare_on_file(arg)? } Ok(()) } @@ -59,62 +50,3 @@ fn read_stdin_to_string() -> Result> { .read_to_string(&mut stdin_contents)?; Ok(stdin_contents) } - -fn run_anonymous_parse>(org_contents: P) -> Result<(), Box> { - let org_contents = org_contents.as_ref(); - eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); - eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); - let rust_parsed = parse(org_contents)?; - let org_sexp = emacs_parse_anonymous_org_document(org_contents)?; - let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; - - println!("{}\n\n\n", org_contents); - println!("{}", org_sexp); - println!("{:#?}", rust_parsed); - - // We do the diffing after printing out both parsed forms in case the diffing panics - let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; - diff_result.print(org_contents)?; - - if diff_result.is_bad() { - Err("Diff results do not match.")?; - } - - Ok(()) -} - -fn run_parse_on_file>(org_path: P) -> Result<(), Box> { - let org_path = org_path.as_ref(); - eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); - eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); - let parent_directory = org_path - .parent() - .ok_or("Should be contained inside a directory.")?; - let org_contents = std::fs::read_to_string(org_path)?; - let org_contents = org_contents.as_str(); - let file_access_interface = LocalFileAccessInterface { - working_directory: Some(parent_directory.to_path_buf()), - }; - let global_settings = { - let mut global_settings = GlobalSettings::default(); - global_settings.file_access = &file_access_interface; - global_settings - }; - let rust_parsed = parse_with_settings(org_contents, &global_settings)?; - let org_sexp = emacs_parse_file_org_document(org_path)?; - let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; - - println!("{}\n\n\n", org_contents); - println!("{}", org_sexp); - println!("{:#?}", rust_parsed); - - // We do the diffing after printing out both parsed forms in case the diffing panics - let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; - diff_result.print(org_contents)?; - - if diff_result.is_bad() { - Err("Diff results do not match.")?; - } - - Ok(()) -} diff --git a/src/compare/compare.rs b/src/compare/compare.rs new file mode 100644 index 00000000..4ba45199 --- /dev/null +++ b/src/compare/compare.rs @@ -0,0 +1,73 @@ +use std::path::Path; + +use crate::compare::diff::compare_document; +use crate::compare::parse::emacs_parse_anonymous_org_document; +use crate::compare::parse::emacs_parse_file_org_document; +use crate::compare::parse::get_emacs_version; +use crate::compare::parse::get_org_mode_version; +use crate::compare::sexp::sexp; +use crate::parser::parse; +use crate::parser::parse_with_settings; +use crate::GlobalSettings; +use crate::LocalFileAccessInterface; + +pub fn run_anonymous_compare>( + org_contents: P, +) -> Result<(), Box> { + let org_contents = org_contents.as_ref(); + eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); + eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); + let rust_parsed = parse(org_contents)?; + let org_sexp = emacs_parse_anonymous_org_document(org_contents)?; + let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; + + println!("{}\n\n\n", org_contents); + println!("{}", org_sexp); + println!("{:#?}", rust_parsed); + + // We do the diffing after printing out both parsed forms in case the diffing panics + let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; + diff_result.print(org_contents)?; + + if diff_result.is_bad() { + Err("Diff results do not match.")?; + } + + Ok(()) +} + +pub fn run_compare_on_file>(org_path: P) -> Result<(), Box> { + let org_path = org_path.as_ref(); + eprintln!("Using emacs version: {}", get_emacs_version()?.trim()); + eprintln!("Using org-mode version: {}", get_org_mode_version()?.trim()); + let parent_directory = org_path + .parent() + .ok_or("Should be contained inside a directory.")?; + let org_contents = std::fs::read_to_string(org_path)?; + let org_contents = org_contents.as_str(); + let file_access_interface = LocalFileAccessInterface { + working_directory: Some(parent_directory.to_path_buf()), + }; + let global_settings = { + let mut global_settings = GlobalSettings::default(); + global_settings.file_access = &file_access_interface; + global_settings + }; + let rust_parsed = parse_with_settings(org_contents, &global_settings)?; + let org_sexp = emacs_parse_file_org_document(org_path)?; + let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).map_err(|e| e.to_string())?; + + println!("{}\n\n\n", org_contents); + println!("{}", org_sexp); + println!("{:#?}", rust_parsed); + + // We do the diffing after printing out both parsed forms in case the diffing panics + let diff_result = compare_document(&parsed_sexp, &rust_parsed)?; + diff_result.print(org_contents)?; + + if diff_result.is_bad() { + Err("Diff results do not match.")?; + } + + Ok(()) +} diff --git a/src/compare/mod.rs b/src/compare/mod.rs index ae317248..5fa9cc0c 100644 --- a/src/compare/mod.rs +++ b/src/compare/mod.rs @@ -1,10 +1,7 @@ +mod compare; mod diff; mod parse; mod sexp; mod util; -pub use diff::compare_document; -pub use parse::emacs_parse_anonymous_org_document; -pub use parse::emacs_parse_file_org_document; -pub use parse::get_emacs_version; -pub use parse::get_org_mode_version; -pub use sexp::sexp; +pub use compare::run_anonymous_compare; +pub use compare::run_compare_on_file; diff --git a/src/lib.rs b/src/lib.rs index bbd19448..bbcaf1f3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,19 +4,7 @@ // TODO: #![warn(missing_docs)] #[cfg(feature = "compare")] -mod compare; -#[cfg(feature = "compare")] -pub use compare::compare_document; -#[cfg(feature = "compare")] -pub use compare::emacs_parse_anonymous_org_document; -#[cfg(feature = "compare")] -pub use compare::emacs_parse_file_org_document; -#[cfg(feature = "compare")] -pub use compare::get_emacs_version; -#[cfg(feature = "compare")] -pub use compare::get_org_mode_version; -#[cfg(feature = "compare")] -pub use compare::sexp; +pub mod compare; mod context; mod error; diff --git a/src/types/mod.rs b/src/types/mod.rs index 9cf5b596..f7410242 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -64,5 +64,5 @@ pub use object::Target; pub use object::Timestamp; pub use object::Underline; pub use object::Verbatim; -pub use source::SetSource; +pub(crate) use source::SetSource; pub use source::Source; diff --git a/src/types/source.rs b/src/types/source.rs index 5e0b8c4b..cd3945e9 100644 --- a/src/types/source.rs +++ b/src/types/source.rs @@ -1,6 +1,6 @@ pub trait Source<'s> { fn get_source(&'s self) -> &'s str; } -pub trait SetSource<'s> { +pub(crate) trait SetSource<'s> { fn set_source(&mut self, source: &'s str); } diff --git a/tests/test_template b/tests/test_template index 31af35ea..4454eb9b 100644 --- a/tests/test_template +++ b/tests/test_template @@ -1,17 +1,7 @@ #[test] -fn {name}() {{ - let todo_org_path = "{path}"; - let org_contents = std::fs::read_to_string(todo_org_path).expect("Read org file."); - println!("{{}}", org_contents); - let org_sexp = emacs_parse_anonymous_org_document(org_contents.as_str()).expect("Use emacs to parse org file."); - println!("{{}}", org_sexp); - let (_remaining, parsed_sexp) = sexp(org_sexp.as_str()).expect("Sexp Parse failure"); - let rust_parsed = parse(org_contents.as_str()).expect("Org Parse failure"); - println!("{{:#?}}", rust_parsed); - let diff_result = - compare_document(&parsed_sexp, &rust_parsed).expect("Compare parsed documents."); - diff_result - .print(org_contents.as_str()) - .expect("Print document parse tree diff."); - assert!(!diff_result.is_bad()); +fn {name}() -> Result<(), Box> {{ + let org_path = "{path}"; + let org_contents = std::fs::read_to_string(org_path).expect("Read org file."); + organic::compare::run_anonymous_compare(org_contents.as_str())?; + Ok(()) }}