From 8d6fad4cac65083a0b08e49391c579ec793bc8f3 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Mon, 7 Jun 2021 21:32:01 +0900 Subject: lsp: Provide workspace root on client.initialize() --- helix-core/src/lib.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'helix-core/src') diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs index 4be3e71b..cfe466ed 100644 --- a/helix-core/src/lib.rs +++ b/helix-core/src/lib.rs @@ -45,6 +45,30 @@ pub(crate) fn find_first_non_whitespace_char(text: RopeSlice, line_num: usize) - None } +pub fn find_root(root: Option<&str>) -> Option { + let current_dir = std::env::current_dir().expect("unable to determine current directory"); + + let root = match root { + Some(root) => { + let root = std::path::Path::new(root); + if root.is_absolute() { + root.to_path_buf() + } else { + current_dir.join(root) + } + } + None => current_dir, + }; + + for ancestor in root.ancestors() { + // TODO: also use defined roots if git isn't found + if ancestor.join(".git").is_dir() { + return Some(ancestor.to_path_buf()); + } + } + None +} + #[cfg(not(embed_runtime))] pub fn runtime_dir() -> std::path::PathBuf { // runtime env var || dir where binary is located -- cgit v1.2.3-70-g09d2