Rework extension-related errors (#34620)
Kirill Bulatov
created
Before:
<img width="1728" height="1079" alt="before"
src="https://github.com/user-attachments/assets/4ab19211-8de4-458d-a835-52de859b7b20"
/>
After:
<img width="1728" height="1079" alt="after"
src="https://github.com/user-attachments/assets/231c9362-a0b0-47ae-b92e-de6742781d36"
/>
Makes clear which path is causing the FS error and removes backtraces
from logging.
Release Notes:
- N/A
Change summary
crates/extension_host/src/extension_host.rs | 38 +++++++++++++++-------
crates/extension_host/src/headless_host.rs | 5 +-
crates/extension_host/src/wasm_host.rs | 2
3 files changed, 28 insertions(+), 17 deletions(-)
Detailed changes
@@ -1313,10 +1313,17 @@ impl ExtensionStore {
}
for snippets_path in &snippets_to_add {
- if let Some(snippets_contents) = fs.load(snippets_path).await.log_err() {
- proxy
- .register_snippet(snippets_path, &snippets_contents)
- .log_err();
+ match fs
+ .load(snippets_path)
+ .await
+ .with_context(|| format!("Loading snippets from {snippets_path:?}"))
+ {
+ Ok(snippets_contents) => {
+ proxy
+ .register_snippet(snippets_path, &snippets_contents)
+ .log_err();
+ }
+ Err(e) => log::error!("Cannot load snippets: {e:#}"),
}
}
}
@@ -1331,20 +1338,25 @@ impl ExtensionStore {
let extension_path = root_dir.join(extension.manifest.id.as_ref());
let wasm_extension = WasmExtension::load(
- extension_path,
+ &extension_path,
&extension.manifest,
wasm_host.clone(),
&cx,
)
- .await;
+ .await
+ .with_context(|| format!("Loading extension from {extension_path:?}"));
- if let Some(wasm_extension) = wasm_extension.log_err() {
- wasm_extensions.push((extension.manifest.clone(), wasm_extension));
- } else {
- this.update(cx, |_, cx| {
- cx.emit(Event::ExtensionFailedToLoad(extension.manifest.id.clone()))
- })
- .ok();
+ match wasm_extension {
+ Ok(wasm_extension) => {
+ wasm_extensions.push((extension.manifest.clone(), wasm_extension))
+ }
+ Err(e) => {
+ log::error!("Failed to load extension: {e:#}");
+ this.update(cx, |_, cx| {
+ cx.emit(Event::ExtensionFailedToLoad(extension.manifest.id.clone()))
+ })
+ .ok();
+ }
}
}
@@ -173,9 +173,8 @@ impl HeadlessExtensionStore {
return Ok(());
}
- let wasm_extension: Arc<dyn Extension> = Arc::new(
- WasmExtension::load(extension_dir.clone(), &manifest, wasm_host.clone(), &cx).await?,
- );
+ let wasm_extension: Arc<dyn Extension> =
+ Arc::new(WasmExtension::load(&extension_dir, &manifest, wasm_host.clone(), &cx).await?);
for (language_server_id, language_server_config) in &manifest.language_servers {
for language in language_server_config.languages() {
@@ -715,7 +715,7 @@ fn parse_wasm_extension_version_custom_section(data: &[u8]) -> Option<SemanticVe
impl WasmExtension {
pub async fn load(
- extension_dir: PathBuf,
+ extension_dir: &Path,
manifest: &Arc<ExtensionManifest>,
wasm_host: Arc<WasmHost>,
cx: &AsyncApp,