Suppress another logged backtrace (#44896)
Kirill Bulatov
created 1 week ago
Do not log any error when the binary is not found, do not show any
backtrace when logging errors.
<img width="2032" height="1161" alt="bad"
src="https://github.com/user-attachments/assets/3f379c90-e61f-447f-9e46-fed989380164"
/>
Release Notes:
- N/A
Change summary
crates/languages/src/rust.rs | 32 ++++++++++++++++++++++++--------
1 file changed, 24 insertions(+), 8 deletions(-)
Detailed changes
@@ -1126,9 +1126,11 @@ fn package_name_from_pkgid(pkgid: &str) -> Option<&str> {
}
async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServerBinary> {
- maybe!(async {
+ let binary_result = maybe!(async {
let mut last = None;
- let mut entries = fs::read_dir(&container_dir).await?;
+ let mut entries = fs::read_dir(&container_dir)
+ .await
+ .with_context(|| format!("listing {container_dir:?}"))?;
while let Some(entry) = entries.next().await {
let path = entry?.path();
if path.extension().is_some_and(|ext| ext == "metadata") {
@@ -1137,20 +1139,34 @@ async fn get_cached_server_binary(container_dir: PathBuf) -> Option<LanguageServ
last = Some(path);
}
- let path = last.context("no cached binary")?;
+ let path = match last {
+ Some(last) => last,
+ None => return Ok(None),
+ };
let path = match RustLspAdapter::GITHUB_ASSET_KIND {
AssetKind::TarGz | AssetKind::Gz => path, // Tar and gzip extract in place.
AssetKind::Zip => path.join("rust-analyzer.exe"), // zip contains a .exe
};
- anyhow::Ok(LanguageServerBinary {
+ anyhow::Ok(Some(LanguageServerBinary {
path,
env: None,
- arguments: Default::default(),
- })
+ arguments: Vec::new(),
+ }))
})
- .await
- .log_err()
+ .await;
+
+ match binary_result {
+ Ok(Some(binary)) => Some(binary),
+ Ok(None) => {
+ log::info!("No cached rust-analyzer binary found");
+ None
+ }
+ Err(e) => {
+ log::error!("Failed to look up cached rust-analyzer binary: {e:#}");
+ None
+ }
+ }
}
fn test_fragment(variables: &TaskVariables, path: &Path, stem: &str) -> String {