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
/// of `path`. In case of equality, exclusion wins.
fn includes_path(&self, path: &AbsPath) -> bool {
let mut include: Option<&AbsPathBuf> = None;
for incl in &self.include {
if path.starts_with(incl) {
include = Some(match include {
Some(prev) if prev.starts_with(incl) => prev,
_ => incl,
})
let include = self.include.iter().fold(None::<&AbsPathBuf>, |include, incl| {
if !path.starts_with(incl) {
return include;
}
}
Some(match include {
Some(prev) if prev.starts_with(incl) => prev,
_ => incl,
})
});
let include = match include {
Some(it) => it,
None => return false,
};
for excl in &self.exclude {
if path.starts_with(excl) && excl.starts_with(include) {
return false;
}
}
true
!self.exclude.iter().any(|excl| path.starts_with(excl) && excl.starts_with(include))
}
}