Refactor: use iterator methods over for loops

This commit is contained in:
Basti Ortiz 2021-08-10 17:51:11 +08:00
parent 6d0336b2e4
commit 7ee6cca3d7
No known key found for this signature in database
GPG key ID: 1402D5CB17F48E1B

View file

@ -155,25 +155,23 @@ impl Directories {
/// - This path is longer than any element in `self.exclude` that is a prefix /// - This path is longer than any element in `self.exclude` that is a prefix
/// of `path`. In case of equality, exclusion wins. /// of `path`. In case of equality, exclusion wins.
fn includes_path(&self, path: &AbsPath) -> bool { fn includes_path(&self, path: &AbsPath) -> bool {
let mut include: Option<&AbsPathBuf> = None; let include = self.include.iter().fold(None::<&AbsPathBuf>, |include, incl| {
for incl in &self.include { if !path.starts_with(incl) {
if path.starts_with(incl) { return include;
include = Some(match include {
Some(prev) if prev.starts_with(incl) => prev,
_ => incl,
})
} }
}
Some(match include {
Some(prev) if prev.starts_with(incl) => prev,
_ => incl,
})
});
let include = match include { let include = match include {
Some(it) => it, Some(it) => it,
None => return false, None => return false,
}; };
for excl in &self.exclude {
if path.starts_with(excl) && excl.starts_with(include) { !self.exclude.iter().any(|excl| path.starts_with(excl) && excl.starts_with(include))
return false;
}
}
true
} }
} }