#![warn(clippy::all, clippy::pedantic, clippy::nursery, clippy::cargo_common_metadata)]
#![allow(clippy::non_ascii_literal)]
#![allow(clippy::unnecessary_debug_formatting)]
#![allow(
clippy::cast_possible_truncation,
clippy::cast_sign_loss,
clippy::cast_precision_loss,
clippy::cast_lossless
)]
use std::path::Path;
use anyhow::{Context, Error};
use diskit::Diskit;
use labels::check_labels;
use misc::read_to_string;
use replacements::literal;
use shortbrackets::add_short_brackets;
pub mod arguments;
mod first_pass;
#[cfg(test)]
mod general_tests;
mod labels;
mod misc;
mod noisy;
mod profiling;
mod replacements;
mod second_pass;
mod shortbrackets;
pub use noisy::Noisy;
pub use profiling::Timers;
pub use replacements::Replacement;
#[allow(clippy::needless_pass_by_value)]
pub fn run<D: Diskit>(path: &Path, timers: &mut Timers, d: D) -> Result<(String, Noisy), Error>
{
timers.start("lib.rs")?;
let s = read_to_string(path, d.clone()).context("Couldn't open requested file")?;
let (s, mut noisy, repls) =
literal(add_short_brackets(&s)?, path, timers, d).context("Couldn't do replacements")?;
let s = s.chars().collect::<Vec<_>>();
let first_pass::Text { pieces } = first_pass::parse(&s);
let b = second_pass::parse(&pieces).fix_math();
let c = b.to_string();
let d = check_labels(&c, &repls, &mut noisy, timers).context("Couldn't check labels")?;
timers.stop("lib.rs")?;
Ok((d, noisy))
}