From f5bce5a19b1c16b761ba136a4ed7dc63c4a133f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Riegel?= Date: Sun, 30 Mar 2025 14:26:26 +0200 Subject: [PATCH] improve error messages --- .../src/conversions/into/datetime.rs | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/crates/nu-command/src/conversions/into/datetime.rs b/crates/nu-command/src/conversions/into/datetime.rs index c598100643..0b67fd0aee 100644 --- a/crates/nu-command/src/conversions/into/datetime.rs +++ b/crates/nu-command/src/conversions/into/datetime.rs @@ -302,7 +302,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -332,7 +332,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -362,7 +362,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -392,7 +392,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -422,7 +422,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -452,7 +452,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -482,7 +482,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -512,7 +512,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -530,7 +530,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "record".to_string(), + exp_input_type: "int".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -541,14 +541,29 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { }, None => 0, }; - let timezone: &str = match record.get("timezone") { + let offset = match record.get("timezone") { Some(val) => match val { - Value::String { val, .. } => val, + Value::String { val, internal_span } => { + let offset: FixedOffset = match val.parse() { + Ok(offset) => offset, + Err(_) => { + return Value::error( + ShellError::IncorrectValue { + msg: "invalid timezone".to_string(), + val_span: head, + call_span: *internal_span, + }, + span, + ) + } + }; + offset + } other => { dbg!(other); return Value::error( ShellError::OnlySupportsThisInputType { - exp_input_type: "timezone: string".to_string(), + exp_input_type: "string".to_string(), wrong_type: other.get_type().to_string(), dst_span: head, src_span: other.span(), @@ -557,7 +572,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { ); } }, - None => "+00:00", + None => FixedOffset::east_opt(0).unwrap(), }; dbg!(&nanosecond); @@ -569,7 +584,7 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { dbg!(&day); dbg!(&month); dbg!(&year); - dbg!(timezone); + dbg!(&offset); let total_nanoseconds = nanosecond + microsecond * 1_000 + millisecond * 1_000_000; @@ -603,20 +618,6 @@ fn merge_record(record: &Record, head: Span, span: Span) -> Value { }; let date_time = NaiveDateTime::new(date, time); - let offset: FixedOffset = match timezone.parse() { - Ok(val) => val, - Err(_) => { - return Value::error( - ShellError::IncorrectValue { - msg: "invalid timezone".to_string(), - val_span: head, - call_span: span, - }, - span, - ) - } - }; - dbg!(&date); dbg!(&time); dbg!(&date_time); @@ -659,25 +660,26 @@ fn action(input: &Value, args: &Arguments, head: Span) -> Value { Some(tz) => { return Value::error( ShellError::IncompatibleParameters { - left_message: "left message".into(), + left_message: "got a record as input".into(), left_span: head, - right_message: "right message".into(), + right_message: "the timezone should be included in the record".into(), right_span: tz.span, }, head, ); } } + // TODO // match dateformat { // None => (), - // Some(dt) => { + // Some(_) => { // return Value::error( // ShellError::IncompatibleParameters { - // left_message: "left message".into(), + // left_message: "got a record as input".into(), // left_span: head, - // right_message: "right message".into(), - // right_span: dt, + // right_message:"cannot be used with records".into(), + // right_span: input.span(), // }, // head, // );