Skip to main content

luaur_cli_lib/methods/
vfs_navigator_to_parent.rs

1use crate::enums::navigation_status::NavigationStatus;
2use crate::functions::normalize_path::normalize_path;
3use crate::records::vfs_navigator::VfsNavigator;
4use luaur_common::macros::luau_assert::LUAU_ASSERT;
5
6impl VfsNavigator {
7    pub fn to_parent(&mut self) -> NavigationStatus {
8        if self.absolute_module_path == "/" {
9            return NavigationStatus::NotFound;
10        }
11
12        let num_slashes = self
13            .absolute_module_path
14            .bytes()
15            .filter(|c| *c == b'/')
16            .count();
17        LUAU_ASSERT!(num_slashes > 0);
18
19        if num_slashes == 1 {
20            return NavigationStatus::NotFound;
21        }
22
23        self.module_path = normalize_path(&(self.module_path.clone() + "/.."));
24        self.absolute_module_path = normalize_path(&(self.absolute_module_path.clone() + "/.."));
25
26        let status = self.update_real_paths();
27        if status == NavigationStatus::Ambiguous {
28            NavigationStatus::Success
29        } else {
30            status
31        }
32    }
33}