Reduce the exposed functions when compare feature is enabled.
This commit is contained in:
parent
6589a755a6
commit
37e85158ea
4
build.rs
4
build.rs
|
@ -71,10 +71,6 @@ fn write_header(test_file: &mut File) {
|
||||||
test_file,
|
test_file,
|
||||||
r#"
|
r#"
|
||||||
#[feature(exit_status_error)]
|
#[feature(exit_status_error)]
|
||||||
use organic::compare_document;
|
|
||||||
use organic::parser::parse;
|
|
||||||
use organic::emacs_parse_anonymous_org_document;
|
|
||||||
use organic::sexp;
|
|
||||||
|
|
||||||
"#
|
"#
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,18 +1,9 @@
|
||||||
#![feature(round_char_boundary)]
|
#![feature(round_char_boundary)]
|
||||||
#![feature(exact_size_is_empty)]
|
#![feature(exact_size_is_empty)]
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
use ::organic::parser::parse;
|
use organic::compare::run_anonymous_compare;
|
||||||
use organic::compare_document;
|
use organic::compare::run_compare_on_file;
|
||||||
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;
|
|
||||||
|
|
||||||
#[cfg(feature = "tracing")]
|
#[cfg(feature = "tracing")]
|
||||||
use crate::init_tracing::init_telemetry;
|
use crate::init_tracing::init_telemetry;
|
||||||
|
@ -43,10 +34,10 @@ fn main_body() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
let args = std::env::args().skip(1);
|
let args = std::env::args().skip(1);
|
||||||
if args.is_empty() {
|
if args.is_empty() {
|
||||||
let org_contents = read_stdin_to_string()?;
|
let org_contents = read_stdin_to_string()?;
|
||||||
run_anonymous_parse(org_contents)
|
run_anonymous_compare(org_contents)
|
||||||
} else {
|
} else {
|
||||||
for arg in args {
|
for arg in args {
|
||||||
run_parse_on_file(arg)?
|
run_compare_on_file(arg)?
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -59,62 +50,3 @@ fn read_stdin_to_string() -> Result<String, Box<dyn std::error::Error>> {
|
||||||
.read_to_string(&mut stdin_contents)?;
|
.read_to_string(&mut stdin_contents)?;
|
||||||
Ok(stdin_contents)
|
Ok(stdin_contents)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_anonymous_parse<P: AsRef<str>>(org_contents: P) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
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<P: AsRef<Path>>(org_path: P) -> Result<(), Box<dyn std::error::Error>> {
|
|
||||||
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(())
|
|
||||||
}
|
|
||||||
|
|
|
@ -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<P: AsRef<str>>(
|
||||||
|
org_contents: P,
|
||||||
|
) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
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<P: AsRef<Path>>(org_path: P) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
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(())
|
||||||
|
}
|
|
@ -1,10 +1,7 @@
|
||||||
|
mod compare;
|
||||||
mod diff;
|
mod diff;
|
||||||
mod parse;
|
mod parse;
|
||||||
mod sexp;
|
mod sexp;
|
||||||
mod util;
|
mod util;
|
||||||
pub use diff::compare_document;
|
pub use compare::run_anonymous_compare;
|
||||||
pub use parse::emacs_parse_anonymous_org_document;
|
pub use compare::run_compare_on_file;
|
||||||
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;
|
|
||||||
|
|
14
src/lib.rs
14
src/lib.rs
|
@ -4,19 +4,7 @@
|
||||||
// TODO: #![warn(missing_docs)]
|
// TODO: #![warn(missing_docs)]
|
||||||
|
|
||||||
#[cfg(feature = "compare")]
|
#[cfg(feature = "compare")]
|
||||||
mod compare;
|
pub 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;
|
|
||||||
|
|
||||||
mod context;
|
mod context;
|
||||||
mod error;
|
mod error;
|
||||||
|
|
|
@ -64,5 +64,5 @@ pub use object::Target;
|
||||||
pub use object::Timestamp;
|
pub use object::Timestamp;
|
||||||
pub use object::Underline;
|
pub use object::Underline;
|
||||||
pub use object::Verbatim;
|
pub use object::Verbatim;
|
||||||
pub use source::SetSource;
|
pub(crate) use source::SetSource;
|
||||||
pub use source::Source;
|
pub use source::Source;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
pub trait Source<'s> {
|
pub trait Source<'s> {
|
||||||
fn get_source(&'s self) -> &'s str;
|
fn get_source(&'s self) -> &'s str;
|
||||||
}
|
}
|
||||||
pub trait SetSource<'s> {
|
pub(crate) trait SetSource<'s> {
|
||||||
fn set_source(&mut self, source: &'s str);
|
fn set_source(&mut self, source: &'s str);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,7 @@
|
||||||
#[test]
|
#[test]
|
||||||
fn {name}() {{
|
fn {name}() -> Result<(), Box<dyn std::error::Error>> {{
|
||||||
let todo_org_path = "{path}";
|
let org_path = "{path}";
|
||||||
let org_contents = std::fs::read_to_string(todo_org_path).expect("Read org file.");
|
let org_contents = std::fs::read_to_string(org_path).expect("Read org file.");
|
||||||
println!("{{}}", org_contents);
|
organic::compare::run_anonymous_compare(org_contents.as_str())?;
|
||||||
let org_sexp = emacs_parse_anonymous_org_document(org_contents.as_str()).expect("Use emacs to parse org file.");
|
Ok(())
|
||||||
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());
|
|
||||||
}}
|
}}
|
||||||
|
|
Loading…
Reference in New Issue