From 0a2e711351da8577e72b6fa182e024ab0e107ebb Mon Sep 17 00:00:00 2001 From: mike <98623181+1Kinoti@users.noreply.github.com> Date: Mon, 27 Feb 2023 23:17:58 +0300 Subject: [PATCH] fix: allow subtraction of durations from dates (#8247) `date` - `duration` is [implemented](https://github.com/nushell/nushell/blob/ba5258d7165423b360edf1747d0ffec00052db13/crates/nu-protocol/src/value/mod.rs#L2145) but the type checker rejects it this pr fixes that --- crates/nu-parser/src/type_check.rs | 1 + src/tests/test_type_check.rs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/crates/nu-parser/src/type_check.rs b/crates/nu-parser/src/type_check.rs index 13c0f3c93d..fb8fada23f 100644 --- a/crates/nu-parser/src/type_check.rs +++ b/crates/nu-parser/src/type_check.rs @@ -107,6 +107,7 @@ pub fn math_result_type( (Type::Int, Type::Float) => (Type::Float, None), (Type::Float, Type::Float) => (Type::Float, None), (Type::Date, Type::Date) => (Type::Duration, None), + (Type::Date, Type::Duration) => (Type::Date, None), (Type::Duration, Type::Duration) => (Type::Duration, None), (Type::Filesize, Type::Filesize) => (Type::Filesize, None), diff --git a/src/tests/test_type_check.rs b/src/tests/test_type_check.rs index cf022ad57b..dfac8a3e2a 100644 --- a/src/tests/test_type_check.rs +++ b/src/tests/test_type_check.rs @@ -24,3 +24,17 @@ fn number_int() -> TestResult { fn number_float() -> TestResult { run_test(r#"def foo [x:number] { $x }; foo 1.4"#, "1.4") } + +#[test] +fn date_minus_duration() -> TestResult { + let input = "2023-04-22 - 2day | date format %Y-%m-%d"; + let expected = "2023-04-20"; + run_test(input, expected) +} + +#[test] +fn date_plus_duration() -> TestResult { + let input = "2023-04-18 + 2day | date format %Y-%m-%d"; + let expected = "2023-04-20"; + run_test(input, expected) +}