Skip to content

Commit 897a4c7

Browse files
Implement file name & extension retrieval method for VirtualPath
1 parent d163f9f commit 897a4c7

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

crates/vfs/src/vfs_path.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,26 @@ impl VirtualPath {
287287
Some(res)
288288
}
289289

290+
// FIXME: Currently VirtualPath does is unable to distinguish a directory from a file
291+
// hence this method will return `Some("directory_name", None)` for a directory
290292
pub fn file_name_and_extension(&self) -> Option<(&str, Option<&str>)> {
291-
// TODO kb check if is a file
292-
Some(("test_mod_1", Some("rs")))
293+
let file_name = match self.0.rfind('/') {
294+
Some(position) => &self.0[position + 1..],
295+
None => &self.0,
296+
};
297+
298+
if file_name.is_empty() {
299+
None
300+
} else {
301+
let mut file_stem_and_extension = file_name.rsplitn(2, '.');
302+
let extension = file_stem_and_extension.next();
303+
let file_stem = file_stem_and_extension.next();
304+
305+
match (file_stem, extension) {
306+
(None, None) => None,
307+
(None, Some(_)) | (Some(""), Some(_)) => Some((file_name, None)),
308+
(Some(file_stem), extension) => Some((file_stem, extension)),
309+
}
310+
}
293311
}
294312
}

0 commit comments

Comments
 (0)