From 8e9d3e5d0cf1d3526560ba887a60d67ca1536992 Mon Sep 17 00:00:00 2001 From: Ivan Tham Date: Tue, 31 May 2022 00:29:57 +0800 Subject: [PATCH] Try fix find file windows build --- helix-term/src/ui/picker.rs | 49 ++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index baed70298ff3b..7a46f135d0566 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -33,7 +33,7 @@ use helix_view::{ // based on exa but not sure where to put this /// More readable aliases for the permission bits exposed by libc. -#[allow(trivial_numeric_casts)] +#[cfg(unix)] mod modes { // The `libc::mode_t` type’s actual type varies, but the value returned // from `metadata.permissions().mode()` is always `u32`. @@ -56,6 +56,9 @@ mod modes { pub const SETUID: Mode = libc::S_ISUID as Mode; } +#[cfg(not(unix))] +mod modes {} + // based on exa but not sure where to put this mod fields { use super::modes; @@ -83,6 +86,7 @@ mod fields { Special, } + #[cfg(unix)] pub fn filetype(metadata: &Metadata) -> Type { let filetype = metadata.file_type(); if metadata.is_file() { @@ -104,6 +108,11 @@ mod fields { } } + #[cfg(not(unix))] + pub fn filetype(metadata: &Metadata) -> Type { + unreachable!() + } + impl fmt::Display for Type { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( @@ -143,6 +152,7 @@ mod fields { pub setuid: bool, } + #[cfg(unix)] pub fn permissions(metadata: &Metadata) -> Permissions { let bits = metadata.mode(); let has_bit = |bit| bits & bit == bit; @@ -165,6 +175,11 @@ mod fields { } } + #[cfg(not(unix))] + pub fn permissions(metadata: &Metadata) -> Permissions { + unreachable!() + } + impl fmt::Display for Permissions { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let bit = |bit, char| if bit { char } else { "-" }; @@ -230,6 +245,7 @@ mod fields { /// /// Block and character devices return their device IDs, because they /// usually just have a file size of zero. + #[cfg(unix)] pub fn size(metadata: &Metadata) -> Size { let filetype = metadata.file_type(); if metadata.is_dir() { @@ -250,6 +266,11 @@ mod fields { } } + #[cfg(not(unix))] + pub fn size(metadata: &Metadata) -> Size { + unreachable!() + } + impl fmt::Display for Size { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use number_prefix::NumberPrefix; @@ -335,17 +356,21 @@ impl FindFilePicker { let suffix = if path.is_dir() { "/" } else { "" }; let metadata = fs::metadata(&*path).unwrap(); let path = path.strip_prefix(&dir1).unwrap_or(path).to_string_lossy(); - let filetype = fields::filetype(&metadata); - let permissions = fields::permissions(&metadata); - let size = format!("{}", fields::size(&metadata)); - Cow::Owned(format!( - "{:<22} {}{} {:>6}", - path + suffix, // TODO this should check for size and handle truncation - filetype, - permissions, - size, - // TODO add absolute/relative time? may need to handle truncation - )) + if cfg!(unix) { + let filetype = fields::filetype(&metadata); + let permissions = fields::permissions(&metadata); + let size = format!("{}", fields::size(&metadata)); + Cow::Owned(format!( + "{:<22} {}{} {:>6}", + path + suffix, // TODO this should check for size and handle truncation + filetype, + permissions, + size, + // TODO add absolute/relative time? may need to handle truncation + )) + } else { + path + suffix + } }, |_cx, _path, _action| {}, // we use custom callback_fn |_editor, path| Some((path.clone(), None)),