#[macro_use] extern crate serde_derive; mod dict; mod dict_codegen; pub mod report; pub mod tokens; pub use crate::dict::*; use std::fs::File; use std::io::Read; pub fn process_file( path: &std::path::Path, dictionary: &Dictionary, report: report::Report, ) -> Result<(), failure::Error> { let mut buffer = Vec::new(); File::open(path)?.read_to_end(&mut buffer)?; for (line_idx, line) in grep_searcher::LineIter::new(b'\n', &buffer).enumerate() { let line_num = line_idx + 1; for symbol in tokens::Symbol::parse(line) { // Correct tokens as-is if let Some(correction) = dictionary.correct_str(symbol.token) { let col_num = symbol.offset; let msg = report::Message { path, line, line_num, col_num, word: symbol.token, correction, non_exhaustive: (), }; report(msg); } } } Ok(()) }