From 9863798480aa9642e31bfd41ee899d2e7329b5e5 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 10 Sep 2020 01:45:49 +0300 Subject: [PATCH] Rename the method to avoid false promises --- crates/ide/src/completion/complete_mod.rs | 10 +++++----- crates/vfs/src/vfs_path.rs | 22 ++++++++++------------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/crates/ide/src/completion/complete_mod.rs b/crates/ide/src/completion/complete_mod.rs index d457ff6bf4..2ea0d50346 100644 --- a/crates/ide/src/completion/complete_mod.rs +++ b/crates/ide/src/completion/complete_mod.rs @@ -52,11 +52,11 @@ pub(super) fn complete_mod(acc: &mut Completions, ctx: &CompletionContext) -> Op .filter_map(|submodule_file| { let submodule_path = source_root.path_for_file(&submodule_file)?; let directory_with_submodule = submodule_path.parent()?; - match submodule_path.file_name_and_extension()? { + match submodule_path.name_and_extension()? { ("lib", Some("rs")) | ("main", Some("rs")) => None, ("mod", Some("rs")) => { if directory_with_submodule.parent()? == directory_to_look_for_submodules { - match directory_with_submodule.file_name_and_extension()? { + match directory_with_submodule.name_and_extension()? { (directory_name, None) => Some(directory_name.to_owned()), _ => None, } @@ -93,7 +93,7 @@ fn directory_to_look_for_submodules( module_file_path: &VfsPath, ) -> Option { let directory_with_module_path = module_file_path.parent()?; - let base_directory = match module_file_path.file_name_and_extension()? { + let base_directory = match module_file_path.name_and_extension()? { ("mod", Some("rs")) | ("lib", Some("rs")) | ("main", Some("rs")) => { Some(directory_with_module_path) } @@ -103,8 +103,8 @@ fn directory_to_look_for_submodules( directory_with_module_path .parent() .as_ref() - .and_then(|path| path.file_name_and_extension()), - directory_with_module_path.file_name_and_extension(), + .and_then(|path| path.name_and_extension()), + directory_with_module_path.name_and_extension(), ), (Some(("src", None)), Some(("bin", None))) ) { diff --git a/crates/vfs/src/vfs_path.rs b/crates/vfs/src/vfs_path.rs index dac8393ea5..022a0be1e3 100644 --- a/crates/vfs/src/vfs_path.rs +++ b/crates/vfs/src/vfs_path.rs @@ -57,13 +57,13 @@ impl VfsPath { } } - pub fn file_name_and_extension(&self) -> Option<(&str, Option<&str>)> { + pub fn name_and_extension(&self) -> Option<(&str, Option<&str>)> { match &self.0 { VfsPathRepr::PathBuf(p) => Some(( p.file_stem()?.to_str()?, p.extension().and_then(|extension| extension.to_str()), )), - VfsPathRepr::VirtualPath(p) => p.file_name_and_extension(), + VfsPathRepr::VirtualPath(p) => p.name_and_extension(), } } @@ -287,9 +287,7 @@ impl VirtualPath { Some(res) } - // FIXME: Currently VirtualPath does is unable to distinguish a directory from a file - // hence this method will return `Some("directory_name", None)` for a directory - pub fn file_name_and_extension(&self) -> Option<(&str, Option<&str>)> { + pub fn name_and_extension(&self) -> Option<(&str, Option<&str>)> { let file_path = if self.0.ends_with('/') { &self.0[..&self.0.len() - 1] } else { &self.0 }; let file_name = match file_path.rfind('/') { Some(position) => &file_path[position + 1..], @@ -318,29 +316,29 @@ mod tests { #[test] fn virtual_path_extensions() { - assert_eq!(VirtualPath("/".to_string()).file_name_and_extension(), None); + assert_eq!(VirtualPath("/".to_string()).name_and_extension(), None); assert_eq!( - VirtualPath("/directory".to_string()).file_name_and_extension(), + VirtualPath("/directory".to_string()).name_and_extension(), Some(("directory", None)) ); assert_eq!( - VirtualPath("/directory/".to_string()).file_name_and_extension(), + VirtualPath("/directory/".to_string()).name_and_extension(), Some(("directory", None)) ); assert_eq!( - VirtualPath("/directory/file".to_string()).file_name_and_extension(), + VirtualPath("/directory/file".to_string()).name_and_extension(), Some(("file", None)) ); assert_eq!( - VirtualPath("/directory/.file".to_string()).file_name_and_extension(), + VirtualPath("/directory/.file".to_string()).name_and_extension(), Some((".file", None)) ); assert_eq!( - VirtualPath("/directory/.file.rs".to_string()).file_name_and_extension(), + VirtualPath("/directory/.file.rs".to_string()).name_and_extension(), Some((".file", Some("rs"))) ); assert_eq!( - VirtualPath("/directory/file.rs".to_string()).file_name_and_extension(), + VirtualPath("/directory/file.rs".to_string()).name_and_extension(), Some(("file", Some("rs"))) ); }