diff --git a/crates/typos-cli/src/bin/typos-cli/main.rs b/crates/typos-cli/src/bin/typos-cli/main.rs index dc8ce6b91..629e66698 100644 --- a/crates/typos-cli/src/bin/typos-cli/main.rs +++ b/crates/typos-cli/src/bin/typos-cli/main.rs @@ -188,7 +188,7 @@ fn run_checks(args: &args::Args) -> proc_exit::ExitResult { }; // Note: file_list and args.path are mutually exclusive, enforced by clap - for path in file_list.as_ref().unwrap_or(&args.path) { + 'path: for path in file_list.as_ref().unwrap_or(&args.path) { // Note paths are passed through stdin, `-` is treated like a normal path let cwd = if path == std::path::Path::new("-") { if args.file_list.is_some() { @@ -244,8 +244,14 @@ fn run_checks(args: &args::Args) -> proc_exit::ExitResult { .build() .with_code(proc_exit::sysexits::CONFIG_ERR)?; if args.force_exclude { - if let ignore::Match::Ignore(_) = overrides.matched(path, path.is_dir()) { - continue; + let mut ancestors = path.ancestors().collect::>(); + ancestors.reverse(); + for path in ancestors { + match overrides.matched(path, path.is_dir()) { + ignore::Match::None => {} + ignore::Match::Ignore(_) => continue 'path, + ignore::Match::Whitelist(_) => break, + } } } walk.overrides(overrides); diff --git a/crates/typos-cli/tests/cmd/force-exclude.in/_typos.toml b/crates/typos-cli/tests/cmd/force-exclude.in/_typos.toml index 434f5f6a2..9d14ee837 100644 --- a/crates/typos-cli/tests/cmd/force-exclude.in/_typos.toml +++ b/crates/typos-cli/tests/cmd/force-exclude.in/_typos.toml @@ -1,5 +1,5 @@ [files] -extend-exclude = ["file.ignore"] +extend-exclude = ["file.ignore", "ignore"] [default.extend-identifiers] hello = "goodbye" diff --git a/crates/typos-cli/tests/cmd/force-exclude.in/ignore/file b/crates/typos-cli/tests/cmd/force-exclude.in/ignore/file new file mode 100644 index 000000000..ce0136250 --- /dev/null +++ b/crates/typos-cli/tests/cmd/force-exclude.in/ignore/file @@ -0,0 +1 @@ +hello diff --git a/crates/typos-cli/tests/cmd/force-exclude.in/parent/ignore/file b/crates/typos-cli/tests/cmd/force-exclude.in/parent/ignore/file new file mode 100644 index 000000000..ce0136250 --- /dev/null +++ b/crates/typos-cli/tests/cmd/force-exclude.in/parent/ignore/file @@ -0,0 +1 @@ +hello diff --git a/crates/typos-cli/tests/cmd/force-exclude.toml b/crates/typos-cli/tests/cmd/force-exclude.toml index 863fe82ef..458774032 100644 --- a/crates/typos-cli/tests/cmd/force-exclude.toml +++ b/crates/typos-cli/tests/cmd/force-exclude.toml @@ -1,6 +1,5 @@ bin.name = "typos" -args = "file.ignore --force-exclude" +args = "file.ignore ignore/file parent/ignore/file --force-exclude" stdin = "" stdout = "" stderr = "" -status.code = 0