Improve error messages on extension loading (#42266)
liuyanghejerry
created
This pull request improves error message when extension loading goes
wrong.
Before:
```
2025-11-08T21:16:02+08:00 ERROR [extension_host::extension_host] failed to load arkts extension.toml
Caused by:
No such file or directory (os error 2)
```
Now:
```
2025-11-08T22:57:00+08:00 ERROR [extension_host::extension_host] failed to load arkts extension.toml, "/Users/user_name_placeholder/Library/Application Support/Zed/extensions/installed/arkts/extension.toml"
Caused by:
No such file or directory (os error 2)
```
Release Notes:
- N/A
Change summary
crates/extension/src/extension_manifest.rs | 14 ++++++--------
crates/extension_host/src/wasm_host.rs | 6 +++---
2 files changed, 9 insertions(+), 11 deletions(-)
Detailed changes
@@ -267,10 +267,9 @@ impl ExtensionManifest {
let mut extension_manifest_path = extension_dir.join("extension.json");
if fs.is_file(&extension_manifest_path).await {
- let manifest_content = fs
- .load(&extension_manifest_path)
- .await
- .with_context(|| format!("failed to load {extension_name} extension.json"))?;
+ let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {
+ format!("loading {extension_name} extension.json, {extension_manifest_path:?}")
+ })?;
let manifest_json = serde_json::from_str::<OldExtensionManifest>(&manifest_content)
.with_context(|| {
format!("invalid extension.json for extension {extension_name}")
@@ -279,10 +278,9 @@ impl ExtensionManifest {
Ok(manifest_from_old_manifest(manifest_json, extension_name))
} else {
extension_manifest_path.set_extension("toml");
- let manifest_content = fs
- .load(&extension_manifest_path)
- .await
- .with_context(|| format!("failed to load {extension_name} extension.toml"))?;
+ let manifest_content = fs.load(&extension_manifest_path).await.with_context(|| {
+ format!("loading {extension_name} extension.toml, {extension_manifest_path:?}")
+ })?;
toml::from_str(&manifest_content).map_err(|err| {
anyhow!("Invalid extension.toml for extension {extension_name}:\n{err}")
})
@@ -763,17 +763,17 @@ impl WasmExtension {
.fs
.open_sync(&path)
.await
- .context("failed to open wasm file")?;
+ .context(format!("opening wasm file, path: {path:?}"))?;
let mut wasm_bytes = Vec::new();
wasm_file
.read_to_end(&mut wasm_bytes)
- .context("failed to read wasm")?;
+ .context(format!("reading wasm file, path: {path:?}"))?;
wasm_host
.load_extension(wasm_bytes, manifest, cx)
.await
- .with_context(|| format!("failed to load wasm extension {}", manifest.id))
+ .with_context(|| format!("loading wasm extension: {}", manifest.id))
}
pub async fn call<T, Fn>(&self, f: Fn) -> Result<T>