diff --git a/helix-lsp-types/src/lib.rs b/helix-lsp-types/src/lib.rs index 993859bd7..01bd1eb8f 100644 --- a/helix-lsp-types/src/lib.rs +++ b/helix-lsp-types/src/lib.rs @@ -18,8 +18,7 @@ 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 @@ pub fn from_file_path>(path: P) -> Result { // 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 e20723bdf..8c0337e98 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 @@ pub fn start( 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 @@ pub fn will_rename( } 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 @@ pub fn did_rename( } 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 c7297d67f..d7ca446d2 100644 --- a/helix-lsp/src/file_event.rs +++ b/helix-lsp/src/file_event.rs @@ -106,16 +106,13 @@ async fn run(mut rx: mpsc::UnboundedReceiver) { 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 9ef2850f4..74a1a9351 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -1811,7 +1811,7 @@ pub fn path(&self) -> Option<&PathBuf> { /// 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 {