From 57a18e22e5e95012d04a099b3b80739d0ed825e3 Mon Sep 17 00:00:00 2001 From: Michael Davis Date: Mon, 14 Oct 2024 13:26:25 -0400 Subject: [PATCH] lsp_types: Make `Url::from_file/directory_path` infallible These functions return `Result` in the `url` crate but the result is unnecessary since the functions never return the error branch. We can eliminate the Result to remove some `expect`s in the calling code. --- helix-lsp-types/src/lib.rs | 12 +++++------- helix-lsp/src/client.rs | 19 ++++++++----------- helix-lsp/src/file_event.rs | 5 +---- helix-view/src/document.rs | 2 +- 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/helix-lsp-types/src/lib.rs b/helix-lsp-types/src/lib.rs index 993859bd7bf2..01bd1eb8f8a6 100644 --- a/helix-lsp-types/src/lib.rs +++ b/helix-lsp-types/src/lib.rs @@ -18,8 +18,7 @@ use serde_json::Value; pub struct Url(String); impl Url { - #[allow(clippy::result_unit_err)] - pub fn from_file_path>(path: P) -> Result { + pub fn from_file_path>(path: P) -> Self { use percent_encoding::{percent_encode, AsciiSet, CONTROLS}; #[cfg(any(unix, target_os = "redox"))] use std::os::unix::prelude::OsStrExt; @@ -60,16 +59,15 @@ impl Url { // An URL's path must not be empty. serialization.push('/'); } - Ok(Self(serialization)) + Self(serialization) } - #[allow(clippy::result_unit_err)] - pub fn from_directory_path>(path: P) -> Result { - let Self(mut serialization) = Self::from_file_path(path)?; + pub fn from_directory_path>(path: P) -> Self { + let Self(mut serialization) = Self::from_file_path(path); if !serialization.ends_with('/') { serialization.push('/'); } - Ok(Self(serialization)) + Self(serialization) } /// Returns the serialized representation of the URL as a `&str` diff --git a/helix-lsp/src/client.rs b/helix-lsp/src/client.rs index e20723bdfd92..8c0337e981cf 100644 --- a/helix-lsp/src/client.rs +++ b/helix-lsp/src/client.rs @@ -42,8 +42,7 @@ fn workspace_for_path(path: &Path) -> WorkspaceFolder { lsp::WorkspaceFolder { name, - uri: lsp::Url::from_directory_path(path) - .expect("absolute paths can be converted to `Url`s"), + uri: lsp::Url::from_directory_path(path), } } @@ -203,9 +202,7 @@ impl Client { Transport::start(reader, writer, stderr, id, name.clone()); let workspace_folders = root.clone().into_iter().collect(); - let root_uri = root.clone().map(|root| { - lsp::Url::from_file_path(root).expect("absolute paths can be converted to `Url`s") - }); + let root_uri = root.clone().map(lsp::Url::from_file_path); // `root_uri` and `workspace_folder` can be empty in case there is no workspace // `root_url` can not, use `workspace` as a fallback let root_path = root.unwrap_or(workspace); @@ -743,11 +740,11 @@ impl Client { } else { Url::from_file_path(path) }; - Some(url.ok()?.into_string()) + url.into_string() }; let files = vec![lsp::FileRename { - old_uri: url_from_path(old_path)?, - new_uri: url_from_path(new_path)?, + old_uri: url_from_path(old_path), + new_uri: url_from_path(new_path), }]; let request = self.call_with_timeout::( &lsp::RenameFilesParams { files }, @@ -777,12 +774,12 @@ impl Client { } else { Url::from_file_path(path) }; - Some(url.ok()?.into_string()) + url.into_string() }; let files = vec![lsp::FileRename { - old_uri: url_from_path(old_path)?, - new_uri: url_from_path(new_path)?, + old_uri: url_from_path(old_path), + new_uri: url_from_path(new_path), }]; Some(self.notify::(lsp::RenameFilesParams { files })) } diff --git a/helix-lsp/src/file_event.rs b/helix-lsp/src/file_event.rs index c7297d67fc11..d7ca446d281c 100644 --- a/helix-lsp/src/file_event.rs +++ b/helix-lsp/src/file_event.rs @@ -106,16 +106,13 @@ impl Handler { log::warn!("LSP client was dropped: {id}"); return false; }; - let Ok(uri) = lsp::Url::from_file_path(&path) else { - return true; - }; log::debug!( "Sending didChangeWatchedFiles notification to client '{}'", client.name() ); if let Err(err) = crate::block_on(client .did_change_watched_files(vec![lsp::FileEvent { - uri, + uri: lsp::Url::from_file_path(&path), // We currently always send the CHANGED state // since we don't actually have more context at // the moment. diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 9ef2850f44be..74a1a935168d 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -1811,7 +1811,7 @@ impl Document { /// File path as a URL. pub fn url(&self) -> Option { - lsp::Url::from_file_path(self.path()?).ok() + self.path().map(lsp::Url::from_file_path) } pub fn uri(&self) -> Option {