summaryrefslogtreecommitdiff
path: root/helix-lsp/src
diff options
context:
space:
mode:
authorRiccardo Binetti2022-09-23 08:04:07 +0000
committerGitHub2022-09-23 08:04:07 +0000
commit888f4fef6f975412c8215c4b76871ffba6e1b41d (patch)
treed6cc3ebf96af323732c85dff0e393ef24accfd8d /helix-lsp/src
parent4133f1f424c6a9da71cab65dc9541e6d941ec603 (diff)
Split helix_core::find_root and helix_loader::find_local_config_dirs (#3929)
* Split helix_core::find_root and helix_loader::find_local_config_dirs The documentation of find_root described the following priority for detecting a project root: - Top-most folder containing a root marker in current git repository - Git repository root if no marker detected - Top-most folder containing a root marker if not git repository detected - Current working directory as fallback The commit contained in https://github.com/helix-editor/helix/pull/1249 extracted and changed the implementation of find_root in find_root_impl, actually reversing its result order (since that is the order that made sense for the local configuration merge, from innermost to outermost ancestors). Since the two uses of find_root_impl have different requirements (and it's not a matter of reversing the order of results since, e.g., the top repository dir should be used by find_root only if there's not marker in other dirs), this PR splits the two implementations in two different specialized functions. In doing so, find_root_impl is removed and the implementation is moved back in find_root, moving it closer to the documented behaviour thus making it easier to verify it's actually correct * helix-core: remove Option from find_root return type It always returns some result, so Option is not needed
Diffstat (limited to 'helix-lsp/src')
-rw-r--r--helix-lsp/src/client.rs11
1 files changed, 3 insertions, 8 deletions
diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs
index 9ae8f20e..497ce80c 100644
--- a/helix-lsp/src/client.rs
+++ b/helix-lsp/src/client.rs
@@ -34,7 +34,7 @@ pub struct Client {
pub(crate) capabilities: OnceCell<lsp::ServerCapabilities>,
offset_encoding: OffsetEncoding,
config: Option<Value>,
- root_path: Option<std::path::PathBuf>,
+ root_path: std::path::PathBuf,
root_uri: Option<lsp::Url>,
workspace_folders: Vec<lsp::WorkspaceFolder>,
req_timeout: u64,
@@ -74,9 +74,7 @@ impl Client {
let root_path = find_root(None, root_markers);
- let root_uri = root_path
- .clone()
- .and_then(|root| lsp::Url::from_file_path(root).ok());
+ let root_uri = lsp::Url::from_file_path(root_path.clone()).ok();
// TODO: support multiple workspace folders
let workspace_folders = root_uri
@@ -281,10 +279,7 @@ impl Client {
workspace_folders: Some(self.workspace_folders.clone()),
// root_path is obsolete, but some clients like pyright still use it so we specify both.
// clients will prefer _uri if possible
- root_path: self
- .root_path
- .clone()
- .and_then(|path| path.to_str().map(|path| path.to_owned())),
+ root_path: self.root_path.to_str().map(|path| path.to_owned()),
root_uri: self.root_uri.clone(),
initialization_options: self.config.clone(),
capabilities: lsp::ClientCapabilities {