Improved labeled error from plugins (#437)

* improved labeled error from plugins

* corrected span
This commit is contained in:
Fernando Herrera
2021-12-05 03:11:19 +00:00
committed by GitHub
parent 03e22b071a
commit 22469a9cb1
24 changed files with 611 additions and 208 deletions

View File

@ -1,4 +1,5 @@
use nu_protocol::{ShellError, Span, Value};
use nu_plugin::LabeledError;
use nu_protocol::{Span, Value};
#[derive(Debug, Eq, PartialEq)]
pub enum Action {
@ -81,7 +82,7 @@ impl Inc {
"Usage: inc field [--major|--minor|--patch]"
}
pub fn inc(&self, head: Span, value: &Value) -> Result<Value, ShellError> {
pub fn inc(&self, head: Span, value: &Value) -> Result<Value, LabeledError> {
match value {
Value::Int { val, span } => Ok(Value::Int {
val: val + 1,
@ -89,19 +90,21 @@ impl Inc {
}),
Value::String { val, .. } => Ok(self.apply(val)),
x => {
if let Ok(span) = x.span() {
Err(ShellError::PipelineMismatch(
"incrementable value".into(),
head,
span,
))
} else {
Err(ShellError::LabeledError(
"Expected incrementable value".into(),
"incrementable value".into(),
head,
))
}
let msg = x.as_string().map_err(|e| LabeledError {
label: "Unable to extract string".into(),
msg: format!(
"value cannot be converted to string {:?} - {}",
x,
e.to_string()
),
span: Some(head),
})?;
Err(LabeledError {
label: "Incorrect value".into(),
msg,
span: Some(head),
})
}
}
}

View File

@ -1,7 +1,7 @@
use crate::inc::SemVerAction;
use crate::Inc;
use nu_plugin::{EvaluatedCall, Plugin};
use nu_protocol::{ShellError, Signature, Span, Value};
use nu_plugin::{EvaluatedCall, LabeledError, Plugin};
use nu_protocol::{Signature, Span, Value};
impl Plugin for Inc {
fn signature(&self) -> Vec<Signature> {
@ -29,7 +29,7 @@ impl Plugin for Inc {
name: &str,
call: &EvaluatedCall,
input: &Value,
) -> Result<Value, ShellError> {
) -> Result<Value, LabeledError> {
if name != "inc" {
return Ok(Value::Nothing {
span: Span::unknown(),