Add context to the I/O error messages in nu_cmd_plugin::util::modify_plugin_file() (#13259)

# Description

This might help @hustcer debug problems with `setup-nu`. The error
messages with the file I/O in `modify_plugin_file()` are not currently
not specific about what file path was involved in the I/O operation.

The spans on those errors have also changed to the span of the custom
path if provided.

# User-Facing Changes

- Slightly better error
This commit is contained in:
Devyn Cairns 2024-06-27 23:49:06 -07:00 committed by GitHub
parent 57452337ff
commit a71732ba12
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -31,11 +31,20 @@ pub(crate) fn modify_plugin_file(
})? })?
}; };
let file_span = custom_path.as_ref().map(|p| p.span).unwrap_or(span);
// Try to read the plugin file if it exists // Try to read the plugin file if it exists
let mut contents = if fs::metadata(&plugin_registry_file_path).is_ok_and(|m| m.len() > 0) { let mut contents = if fs::metadata(&plugin_registry_file_path).is_ok_and(|m| m.len() > 0) {
PluginRegistryFile::read_from( PluginRegistryFile::read_from(
File::open(&plugin_registry_file_path).err_span(span)?, File::open(&plugin_registry_file_path).map_err(|err| ShellError::IOErrorSpanned {
Some(span), msg: format!(
"failed to read `{}`: {}",
plugin_registry_file_path.display(),
err
),
span: file_span,
})?,
Some(file_span),
)? )?
} else { } else {
PluginRegistryFile::default() PluginRegistryFile::default()
@ -46,7 +55,14 @@ pub(crate) fn modify_plugin_file(
// Save the modified file on success // Save the modified file on success
contents.write_to( contents.write_to(
File::create(&plugin_registry_file_path).err_span(span)?, File::create(&plugin_registry_file_path).map_err(|err| ShellError::IOErrorSpanned {
msg: format!(
"failed to create `{}`: {}",
plugin_registry_file_path.display(),
err
),
span: file_span,
})?,
Some(span), Some(span),
)?; )?;