@ -15,6 +15,7 @@ mod statusline;
mod text ;
mod text ;
use crate ::compositor ::{ Component , Compositor } ;
use crate ::compositor ::{ Component , Compositor } ;
use crate ::filter_picker_entry ;
use crate ::job ::{ self , Callback } ;
use crate ::job ::{ self , Callback } ;
pub use completion ::Completion ;
pub use completion ::Completion ;
pub use editor ::EditorView ;
pub use editor ::EditorView ;
@ -163,6 +164,9 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
let now = Instant ::now ( ) ;
let now = Instant ::now ( ) ;
let dedup_symlinks = config . file_picker . deduplicate_links ;
let absolute_root = root . canonicalize ( ) . unwrap_or_else ( | _ | root . clone ( ) ) ;
let mut walk_builder = WalkBuilder ::new ( & root ) ;
let mut walk_builder = WalkBuilder ::new ( & root ) ;
walk_builder
walk_builder
. hidden ( config . file_picker . hidden )
. hidden ( config . file_picker . hidden )
@ -173,10 +177,7 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
. git_global ( config . file_picker . git_global )
. git_global ( config . file_picker . git_global )
. git_exclude ( config . file_picker . git_exclude )
. git_exclude ( config . file_picker . git_exclude )
. max_depth ( config . file_picker . max_depth )
. max_depth ( config . file_picker . max_depth )
// We always want to ignore the .git directory, otherwise if
. filter_entry ( move | entry | filter_picker_entry ( entry , & absolute_root , dedup_symlinks ) ) ;
// `ignore` is turned off above, we end up with a lot of noise
// in our picker.
. filter_entry ( | entry | entry . file_name ( ) ! = ".git" ) ;
// We want to exclude files that the editor can't handle yet
// We want to exclude files that the editor can't handle yet
let mut type_builder = TypesBuilder ::new ( ) ;
let mut type_builder = TypesBuilder ::new ( ) ;
@ -195,14 +196,11 @@ pub fn file_picker(root: PathBuf, config: &helix_view::editor::Config) -> FilePi
// We want files along with their modification date for sorting
// We want files along with their modification date for sorting
let files = walk_builder . build ( ) . filter_map ( | entry | {
let files = walk_builder . build ( ) . filter_map ( | entry | {
let entry = entry . ok ( ) ? ;
let entry = entry . ok ( ) ? ;
// This is faster than entry.path().is_dir() since it uses cached fs::Metadata fetched by ignore/walkdir
// This is faster than entry.path().is_dir() since it uses cached fs::Metadata fetched by ignore/walkdir
let is_dir = entry . file_type ( ) . map_or ( false , | ft | ft . is_dir ( ) ) ;
if entry . file_type ( ) ? . is_file ( ) {
if is_dir {
// Will give a false positive if metadata cannot be read (eg. permission error)
None
} else {
Some ( entry . into_path ( ) )
Some ( entry . into_path ( ) )
} else {
None
}
}
} ) ;
} ) ;