Move the show-invisibles flag into a struct

This commit is contained in:
Benjamin Sago 2017-06-26 23:28:10 +01:00
parent c7f18873fd
commit 5ace1264f2

View File

@ -60,7 +60,7 @@ pub struct FileFilter {
/// most of them are or whether they're still needed. Every file name
/// evaluation that goes through my home directory is slowed down by
/// this accumulated sludge.
show_invisibles: bool,
dot_filter: DotFilter,
/// Glob patterns to ignore. Any file name that matches *any* of these
/// patterns won't be displayed in the list.
@ -76,7 +76,7 @@ impl FileFilter {
list_dirs_first: matches.opt_present("group-directories-first"),
reverse: matches.opt_present("reverse"),
sort_field: SortField::deduce(matches)?,
show_invisibles: matches.opt_present("all"),
dot_filter: DotFilter::deduce(matches),
ignore_patterns: IgnorePatterns::deduce(matches)?,
})
}
@ -84,8 +84,9 @@ impl FileFilter {
/// Remove every file in the given vector that does *not* pass the
/// filter predicate for files found inside a directory.
pub fn filter_child_files(&self, files: &mut Vec<File>) {
if !self.show_invisibles {
files.retain(|f| !f.is_dotfile());
match self.dot_filter {
DotFilter::JustFiles => files.retain(|f| !f.is_dotfile()),
DotFilter::ShowDotfiles => {/* keep all elements */},
}
files.retain(|f| !self.ignore_patterns.is_ignored(f));
@ -252,6 +253,31 @@ impl SortField {
}
#[derive(PartialEq, Debug, Copy, Clone)]
enum DotFilter {
/// Show files and dotfiles, but hide `.` and `..`.
ShowDotfiles,
/// Just show files, hiding anything beginning with a dot.
JustFiles,
}
impl Default for DotFilter {
fn default() -> DotFilter {
DotFilter::JustFiles
}
}
impl DotFilter {
pub fn deduce(matches: &getopts::Matches) -> DotFilter {
if matches.opt_present("all") { DotFilter::ShowDotfiles }
else { DotFilter::JustFiles }
}
}
#[derive(PartialEq, Default, Debug, Clone)]
struct IgnorePatterns {
patterns: Vec<glob::Pattern>,