mirror of
https://github.com/crate-ci/typos.git
synced 2024-11-25 02:20:58 -05:00
feat: Give control over verifying file content
This commit is contained in:
parent
ec307dffdd
commit
95c0aea484
3 changed files with 63 additions and 33 deletions
|
@ -19,6 +19,7 @@ fn process_empty(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
@ -40,6 +41,7 @@ fn process_no_tokens(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
@ -61,6 +63,7 @@ fn process_single_token(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
@ -82,6 +85,7 @@ fn process_sherlock(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
@ -103,6 +107,7 @@ fn process_code(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
@ -124,6 +129,7 @@ fn process_corpus(b: &mut test::Bencher) {
|
||||||
&corrections,
|
&corrections,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
false,
|
false,
|
||||||
typos::report::print_silent,
|
typos::report::print_silent,
|
||||||
)
|
)
|
||||||
|
|
69
src/lib.rs
69
src/lib.rs
|
@ -18,6 +18,7 @@ pub fn process_file(
|
||||||
path: &std::path::Path,
|
path: &std::path::Path,
|
||||||
dictionary: &Dictionary,
|
dictionary: &Dictionary,
|
||||||
check_filenames: bool,
|
check_filenames: bool,
|
||||||
|
check_files: bool,
|
||||||
ignore_hex: bool,
|
ignore_hex: bool,
|
||||||
binary: bool,
|
binary: bool,
|
||||||
report: report::Report,
|
report: report::Report,
|
||||||
|
@ -52,50 +53,52 @@ pub fn process_file(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut buffer = Vec::new();
|
if check_files {
|
||||||
File::open(path)?.read_to_end(&mut buffer)?;
|
let mut buffer = Vec::new();
|
||||||
if !binary && buffer.find_byte(b'\0').is_some() {
|
File::open(path)?.read_to_end(&mut buffer)?;
|
||||||
let msg = report::BinaryFile {
|
if !binary && buffer.find_byte(b'\0').is_some() {
|
||||||
path,
|
let msg = report::BinaryFile {
|
||||||
non_exhaustive: (),
|
path,
|
||||||
};
|
non_exhaustive: (),
|
||||||
report(msg.into());
|
};
|
||||||
return Ok(());
|
report(msg.into());
|
||||||
}
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
for (line_idx, line) in buffer.lines().enumerate() {
|
for (line_idx, line) in buffer.lines().enumerate() {
|
||||||
let line_num = line_idx + 1;
|
let line_num = line_idx + 1;
|
||||||
for ident in tokens::Identifier::parse_bytes(line) {
|
for ident in tokens::Identifier::parse_bytes(line) {
|
||||||
if !ignore_hex && is_hex(ident.token()) {
|
if !ignore_hex && is_hex(ident.token()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if let Some(correction) = dictionary.correct_ident(ident) {
|
if let Some(correction) = dictionary.correct_ident(ident) {
|
||||||
let col_num = ident.offset();
|
let col_num = ident.offset();
|
||||||
let msg = report::Correction {
|
|
||||||
path,
|
|
||||||
line,
|
|
||||||
line_num,
|
|
||||||
col_num,
|
|
||||||
typo: ident.token(),
|
|
||||||
correction,
|
|
||||||
non_exhaustive: (),
|
|
||||||
};
|
|
||||||
report(msg.into());
|
|
||||||
}
|
|
||||||
for word in ident.split() {
|
|
||||||
if let Some(correction) = dictionary.correct_word(word) {
|
|
||||||
let col_num = word.offset();
|
|
||||||
let msg = report::Correction {
|
let msg = report::Correction {
|
||||||
path,
|
path,
|
||||||
line,
|
line,
|
||||||
line_num,
|
line_num,
|
||||||
col_num,
|
col_num,
|
||||||
typo: word.token(),
|
typo: ident.token(),
|
||||||
correction,
|
correction,
|
||||||
non_exhaustive: (),
|
non_exhaustive: (),
|
||||||
};
|
};
|
||||||
report(msg.into());
|
report(msg.into());
|
||||||
}
|
}
|
||||||
|
for word in ident.split() {
|
||||||
|
if let Some(correction) = dictionary.correct_word(word) {
|
||||||
|
let col_num = word.offset();
|
||||||
|
let msg = report::Correction {
|
||||||
|
path,
|
||||||
|
line,
|
||||||
|
line_num,
|
||||||
|
col_num,
|
||||||
|
typo: word.token(),
|
||||||
|
correction,
|
||||||
|
non_exhaustive: (),
|
||||||
|
};
|
||||||
|
report(msg.into());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
21
src/main.rs
21
src/main.rs
|
@ -48,6 +48,16 @@ struct Options {
|
||||||
)]
|
)]
|
||||||
check_filenames: bool,
|
check_filenames: bool,
|
||||||
|
|
||||||
|
#[structopt(long, raw(overrides_with = r#""check-files""#))]
|
||||||
|
/// Skip verifying spelling in filess.
|
||||||
|
no_check_files: bool,
|
||||||
|
#[structopt(
|
||||||
|
long,
|
||||||
|
raw(overrides_with = r#""no-check-files""#),
|
||||||
|
raw(hidden = "true")
|
||||||
|
)]
|
||||||
|
check_files: bool,
|
||||||
|
|
||||||
#[structopt(long, raw(overrides_with = r#""hex""#))]
|
#[structopt(long, raw(overrides_with = r#""hex""#))]
|
||||||
/// Don't try to detect that an identifier looks like hex
|
/// Don't try to detect that an identifier looks like hex
|
||||||
no_hex: bool,
|
no_hex: bool,
|
||||||
|
@ -125,6 +135,15 @@ impl Options {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn check_files(&self) -> Option<bool> {
|
||||||
|
match (self.check_files, self.no_check_files) {
|
||||||
|
(true, false) => Some(true),
|
||||||
|
(false, true) => Some(false),
|
||||||
|
(false, false) => None,
|
||||||
|
(_, _) => unreachable!("StructOpt should make this impossible"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn check_filenames(&self) -> Option<bool> {
|
pub fn check_filenames(&self) -> Option<bool> {
|
||||||
match (self.check_filenames, self.no_check_filenames) {
|
match (self.check_filenames, self.no_check_filenames) {
|
||||||
(true, false) => Some(true),
|
(true, false) => Some(true),
|
||||||
|
@ -217,6 +236,7 @@ fn run() -> Result<(), failure::Error> {
|
||||||
|
|
||||||
let dictionary = typos::Dictionary::new();
|
let dictionary = typos::Dictionary::new();
|
||||||
let check_filenames = options.check_filenames().unwrap_or(true);
|
let check_filenames = options.check_filenames().unwrap_or(true);
|
||||||
|
let check_files = options.check_files().unwrap_or(true);
|
||||||
let ignore_hex = options.ignore_hex().unwrap_or(true);
|
let ignore_hex = options.ignore_hex().unwrap_or(true);
|
||||||
let binary = options.binary().unwrap_or(false);
|
let binary = options.binary().unwrap_or(false);
|
||||||
|
|
||||||
|
@ -243,6 +263,7 @@ fn run() -> Result<(), failure::Error> {
|
||||||
entry.path(),
|
entry.path(),
|
||||||
&dictionary,
|
&dictionary,
|
||||||
check_filenames,
|
check_filenames,
|
||||||
|
check_files,
|
||||||
ignore_hex,
|
ignore_hex,
|
||||||
binary,
|
binary,
|
||||||
options.format.report(),
|
options.format.report(),
|
||||||
|
|
Loading…
Reference in a new issue