From bf66cbd0b67ed15128a74c6615fec5b787da67ba Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 27 Dec 2023 10:13:43 -0600 Subject: [PATCH] fix(config): Apply extend-ignore-re to file names Fixes #885 --- crates/typos-cli/src/file.rs | 35 ++++++++++++++++--- .../typos-cli/tests/cmd/extend-ignore-re.toml | 2 -- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/crates/typos-cli/src/file.rs b/crates/typos-cli/src/file.rs index 07e14d1c4..db5504315 100644 --- a/crates/typos-cli/src/file.rs +++ b/crates/typos-cli/src/file.rs @@ -27,7 +27,7 @@ impl FileChecker for Typos { ) -> Result<(), std::io::Error> { if policy.check_filenames { if let Some(file_name) = path.file_name().and_then(|s| s.to_str()) { - for typo in typos::check_str(file_name, policy.tokenizer, policy.dict) { + for typo in check_str(file_name, policy) { let msg = report::Typo { context: Some(report::PathContext { path }.into()), buffer: std::borrow::Cow::Borrowed(file_name.as_bytes()), @@ -112,7 +112,7 @@ impl FileChecker for FixTypos { if policy.check_filenames { if let Some(file_name) = path.file_name().and_then(|s| s.to_str()) { let mut fixes = Vec::new(); - for typo in typos::check_str(file_name, policy.tokenizer, policy.dict) { + for typo in check_str(file_name, policy) { if is_fixable(&typo) { fixes.push(typo.into_owned()); } else { @@ -190,7 +190,7 @@ impl FileChecker for DiffTypos { if policy.check_filenames { if let Some(file_name) = path.file_name().and_then(|s| s.to_str()) { let mut fixes = Vec::new(); - for typo in typos::check_str(file_name, policy.tokenizer, policy.dict) { + for typo in check_str(file_name, policy) { if is_fixable(&typo) { fixes.push(typo.into_owned()); } else { @@ -256,9 +256,16 @@ impl FileChecker for Identifiers { policy: &crate::policy::Policy, reporter: &dyn report::Report, ) -> Result<(), std::io::Error> { + let mut ignores: Option = None; if policy.check_filenames { if let Some(file_name) = path.file_name().and_then(|s| s.to_str()) { for word in policy.tokenizer.parse_str(file_name) { + if ignores + .get_or_insert_with(|| Ignores::new(file_name.as_bytes(), policy.ignore)) + .is_ignored(word.span()) + { + continue; + } let msg = report::Parse { context: Some(report::PathContext { path }.into()), kind: report::ParseKind::Identifier, @@ -275,7 +282,6 @@ impl FileChecker for Identifiers { let msg = report::BinaryFile { path }; reporter.report(msg.into())?; } else { - let mut ignores: Option = None; for word in policy.tokenizer.parse_bytes(&buffer) { if ignores .get_or_insert_with(|| Ignores::new(&buffer, policy.ignore)) @@ -312,6 +318,7 @@ impl FileChecker for Words { policy: &crate::policy::Policy, reporter: &dyn report::Report, ) -> Result<(), std::io::Error> { + let mut ignores: Option = None; if policy.check_filenames { if let Some(file_name) = path.file_name().and_then(|s| s.to_str()) { for word in policy @@ -319,6 +326,12 @@ impl FileChecker for Words { .parse_str(file_name) .flat_map(|i| i.split()) { + if ignores + .get_or_insert_with(|| Ignores::new(file_name.as_bytes(), policy.ignore)) + .is_ignored(word.span()) + { + continue; + } let msg = report::Parse { context: Some(report::PathContext { path }.into()), kind: report::ParseKind::Word, @@ -335,7 +348,6 @@ impl FileChecker for Words { let msg = report::BinaryFile { path }; reporter.report(msg.into())?; } else { - let mut ignores: Option = None; for word in policy .tokenizer .parse_bytes(&buffer) @@ -536,6 +548,19 @@ fn write_file( Ok(()) } +fn check_str<'a>( + buffer: &'a str, + policy: &'a crate::policy::Policy<'a, 'a, 'a>, +) -> impl Iterator> { + let mut ignores: Option = None; + + typos::check_str(buffer, policy.tokenizer, policy.dict).filter(move |typo| { + !ignores + .get_or_insert_with(|| Ignores::new(buffer.as_bytes(), policy.ignore)) + .is_ignored(typo.span()) + }) +} + fn check_bytes<'a>( buffer: &'a [u8], policy: &'a crate::policy::Policy<'a, 'a, 'a>, diff --git a/crates/typos-cli/tests/cmd/extend-ignore-re.toml b/crates/typos-cli/tests/cmd/extend-ignore-re.toml index 050641f91..f025d7cdd 100644 --- a/crates/typos-cli/tests/cmd/extend-ignore-re.toml +++ b/crates/typos-cli/tests/cmd/extend-ignore-re.toml @@ -8,8 +8,6 @@ error: `hello` should be `goodbye` 1 | hello `hello` | ^^^^^ | -error: `olt` should be `old` - --> ./olt-manager.php:1 error: `olt` should be `old` --> ./olt-manager.php:1:5 |