mirror of
https://github.com/nushell/nushell.git
synced 2025-07-07 18:07:02 +02:00
Better generic errors for plugins (and perhaps scripts) (#12236)
# Description This makes `LabeledError` much more capable of representing close to everything a `miette::Diagnostic` can, including `ShellError`, and allows plugins to generate multiple error spans, codes, help, etc. `LabeledError` is now embeddable within `ShellError` as a transparent variant. This could also be used to improve `error make` and `try/catch` to reflect `LabeledError` exactly in the future. Also cleaned up some errors in existing plugins. # User-Facing Changes Breaking change for plugins. Nicer errors for users.
This commit is contained in:
@ -1097,6 +1097,11 @@ pub enum ShellError {
|
||||
span: Span,
|
||||
},
|
||||
|
||||
/// This is a generic error type used for user and plugin-generated errors.
|
||||
#[error(transparent)]
|
||||
#[diagnostic(transparent)]
|
||||
LabeledError(#[from] Box<super::LabeledError>),
|
||||
|
||||
/// Attempted to use a command that has been removed from Nushell.
|
||||
///
|
||||
/// ## Resolution
|
||||
@ -1396,6 +1401,12 @@ impl From<Box<dyn std::error::Error + Send + Sync>> for ShellError {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<super::LabeledError> for ShellError {
|
||||
fn from(value: super::LabeledError) -> Self {
|
||||
ShellError::LabeledError(Box::new(value))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn into_code(err: &ShellError) -> Option<String> {
|
||||
err.code().map(|code| code.to_string())
|
||||
}
|
||||
|
Reference in New Issue
Block a user