diff options
Diffstat (limited to 'crates/vfs/src')
-rw-r--r-- | crates/vfs/src/vfs_path.rs | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/crates/vfs/src/vfs_path.rs b/crates/vfs/src/vfs_path.rs index dac8393ea..022a0be1e 100644 --- a/crates/vfs/src/vfs_path.rs +++ b/crates/vfs/src/vfs_path.rs | |||
@@ -57,13 +57,13 @@ impl VfsPath { | |||
57 | } | 57 | } |
58 | } | 58 | } |
59 | 59 | ||
60 | pub fn file_name_and_extension(&self) -> Option<(&str, Option<&str>)> { | 60 | pub fn name_and_extension(&self) -> Option<(&str, Option<&str>)> { |
61 | match &self.0 { | 61 | match &self.0 { |
62 | VfsPathRepr::PathBuf(p) => Some(( | 62 | VfsPathRepr::PathBuf(p) => Some(( |
63 | p.file_stem()?.to_str()?, | 63 | p.file_stem()?.to_str()?, |
64 | p.extension().and_then(|extension| extension.to_str()), | 64 | p.extension().and_then(|extension| extension.to_str()), |
65 | )), | 65 | )), |
66 | VfsPathRepr::VirtualPath(p) => p.file_name_and_extension(), | 66 | VfsPathRepr::VirtualPath(p) => p.name_and_extension(), |
67 | } | 67 | } |
68 | } | 68 | } |
69 | 69 | ||
@@ -287,9 +287,7 @@ impl VirtualPath { | |||
287 | Some(res) | 287 | Some(res) |
288 | } | 288 | } |
289 | 289 | ||
290 | // FIXME: Currently VirtualPath does is unable to distinguish a directory from a file | 290 | pub fn name_and_extension(&self) -> Option<(&str, Option<&str>)> { |
291 | // hence this method will return `Some("directory_name", None)` for a directory | ||
292 | pub fn file_name_and_extension(&self) -> Option<(&str, Option<&str>)> { | ||
293 | let file_path = if self.0.ends_with('/') { &self.0[..&self.0.len() - 1] } else { &self.0 }; | 291 | let file_path = if self.0.ends_with('/') { &self.0[..&self.0.len() - 1] } else { &self.0 }; |
294 | let file_name = match file_path.rfind('/') { | 292 | let file_name = match file_path.rfind('/') { |
295 | Some(position) => &file_path[position + 1..], | 293 | Some(position) => &file_path[position + 1..], |
@@ -318,29 +316,29 @@ mod tests { | |||
318 | 316 | ||
319 | #[test] | 317 | #[test] |
320 | fn virtual_path_extensions() { | 318 | fn virtual_path_extensions() { |
321 | assert_eq!(VirtualPath("/".to_string()).file_name_and_extension(), None); | 319 | assert_eq!(VirtualPath("/".to_string()).name_and_extension(), None); |
322 | assert_eq!( | 320 | assert_eq!( |
323 | VirtualPath("/directory".to_string()).file_name_and_extension(), | 321 | VirtualPath("/directory".to_string()).name_and_extension(), |
324 | Some(("directory", None)) | 322 | Some(("directory", None)) |
325 | ); | 323 | ); |
326 | assert_eq!( | 324 | assert_eq!( |
327 | VirtualPath("/directory/".to_string()).file_name_and_extension(), | 325 | VirtualPath("/directory/".to_string()).name_and_extension(), |
328 | Some(("directory", None)) | 326 | Some(("directory", None)) |
329 | ); | 327 | ); |
330 | assert_eq!( | 328 | assert_eq!( |
331 | VirtualPath("/directory/file".to_string()).file_name_and_extension(), | 329 | VirtualPath("/directory/file".to_string()).name_and_extension(), |
332 | Some(("file", None)) | 330 | Some(("file", None)) |
333 | ); | 331 | ); |
334 | assert_eq!( | 332 | assert_eq!( |
335 | VirtualPath("/directory/.file".to_string()).file_name_and_extension(), | 333 | VirtualPath("/directory/.file".to_string()).name_and_extension(), |
336 | Some((".file", None)) | 334 | Some((".file", None)) |
337 | ); | 335 | ); |
338 | assert_eq!( | 336 | assert_eq!( |
339 | VirtualPath("/directory/.file.rs".to_string()).file_name_and_extension(), | 337 | VirtualPath("/directory/.file.rs".to_string()).name_and_extension(), |
340 | Some((".file", Some("rs"))) | 338 | Some((".file", Some("rs"))) |
341 | ); | 339 | ); |
342 | assert_eq!( | 340 | assert_eq!( |
343 | VirtualPath("/directory/file.rs".to_string()).file_name_and_extension(), | 341 | VirtualPath("/directory/file.rs".to_string()).name_and_extension(), |
344 | Some(("file", Some("rs"))) | 342 | Some(("file", Some("rs"))) |
345 | ); | 343 | ); |
346 | } | 344 | } |