From e17f6d654c920792ee4d8d931364b567bb531fc2 Mon Sep 17 00:00:00 2001 From: Douglas <32344964+NotTheDr01ds@users.noreply.github.com> Date: Fri, 29 Nov 2024 17:06:26 -0500 Subject: [PATCH] Deprecate `date to-record` and `date to-table` (#14319) # Description Implements #11234 based on the comments there: * (Previously implemented): `into record` handles nanoseconds (as well as milliseconds and microseconds, which the deprecated commands didn't support). * Added deprecation warning to `date to-record` and `date to-table` * Added new example for `into record` showing the conversion to a table * Changed `std/dt` to use `into record` * Added "Deprecated" category back to nu-protocol::Signature * Assigned the deprecated commands to the Deprecated category so be categorized properly in the online Doc. # User-Facing Changes Deprecated command warning # Tests + Formatting - :green_circle: `toolkit fmt` - :green_circle: `toolkit clippy` - :green_circle: `toolkit test` - :green_circle: `toolkit test stdlib` # After Submitting Searched doc for existing uses of `date to-record` and `date to-table`: * For primary English-language docs, there are no uses other than in the auto-generated command help, which will be updated based on this PR * Other language translations appear to have an old use in several places and will need to be updated to match the English-language doc. --- crates/nu-command/src/conversions/into/record.rs | 5 +++++ crates/nu-command/src/date/to_record.rs | 14 +++++++++++++- crates/nu-command/src/date/to_table.rs | 13 ++++++++++++- crates/nu-protocol/src/signature.rs | 2 ++ crates/nu-std/std/dt/mod.nu | 4 ++-- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/crates/nu-command/src/conversions/into/record.rs b/crates/nu-command/src/conversions/into/record.rs index 445d81cb86e..fea5fe1e4eb 100644 --- a/crates/nu-command/src/conversions/into/record.rs +++ b/crates/nu-command/src/conversions/into/record.rs @@ -99,6 +99,11 @@ impl Command for SubCommand { "timezone" => Value::test_string("+02:00"), })), }, + Example { + description: "convert date components to table columns", + example: "2020-04-12T22:10:57+02:00 | into record | transpose | transpose -r", + result: None, + }, ] } } diff --git a/crates/nu-command/src/date/to_record.rs b/crates/nu-command/src/date/to_record.rs index f683ca1eec5..fc28ba46f53 100644 --- a/crates/nu-command/src/date/to_record.rs +++ b/crates/nu-command/src/date/to_record.rs @@ -1,6 +1,7 @@ use crate::date::utils::parse_date_from_string; use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike}; use nu_engine::command_prelude::*; +use nu_protocol::{report_parse_warning, ParseWarning}; #[derive(Clone)] pub struct SubCommand; @@ -17,7 +18,7 @@ impl Command for SubCommand { (Type::String, Type::record()), ]) .allow_variants_without_examples(true) // https://github.com/nushell/nushell/issues/7032 - .category(Category::Date) + .category(Category::Deprecated) } fn description(&self) -> &str { @@ -35,6 +36,17 @@ impl Command for SubCommand { call: &Call, input: PipelineData, ) -> Result { + let head = call.head; + report_parse_warning( + &StateWorkingSet::new(engine_state), + &ParseWarning::DeprecatedWarning { + old_command: "date to-record".into(), + new_suggestion: "see `into record` command examples".into(), + span: head, + url: "`help into record`".into(), + }, + ); + let head = call.head; // This doesn't match explicit nulls if matches!(input, PipelineData::Empty) { diff --git a/crates/nu-command/src/date/to_table.rs b/crates/nu-command/src/date/to_table.rs index 1588d40063b..cb635b039f6 100644 --- a/crates/nu-command/src/date/to_table.rs +++ b/crates/nu-command/src/date/to_table.rs @@ -1,6 +1,7 @@ use crate::date::utils::parse_date_from_string; use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike}; use nu_engine::command_prelude::*; +use nu_protocol::{report_parse_warning, ParseWarning}; #[derive(Clone)] pub struct SubCommand; @@ -17,7 +18,7 @@ impl Command for SubCommand { (Type::String, Type::table()), ]) .allow_variants_without_examples(true) // https://github.com/nushell/nushell/issues/7032 - .category(Category::Date) + .category(Category::Deprecated) } fn description(&self) -> &str { @@ -36,6 +37,16 @@ impl Command for SubCommand { input: PipelineData, ) -> Result { let head = call.head; + report_parse_warning( + &StateWorkingSet::new(engine_state), + &ParseWarning::DeprecatedWarning { + old_command: "date to-table".into(), + new_suggestion: "see `into record` command examples".into(), + span: head, + url: "`help into record`".into(), + }, + ); + // This doesn't match explicit nulls if matches!(input, PipelineData::Empty) { return Err(ShellError::PipelineEmpty { dst_span: head }); diff --git a/crates/nu-protocol/src/signature.rs b/crates/nu-protocol/src/signature.rs index 30f8b280d1f..549e23743f5 100644 --- a/crates/nu-protocol/src/signature.rs +++ b/crates/nu-protocol/src/signature.rs @@ -44,6 +44,7 @@ pub enum Category { Date, Debug, Default, + Deprecated, Removed, Env, Experimental, @@ -79,6 +80,7 @@ impl std::fmt::Display for Category { Category::Date => "date", Category::Debug => "debug", Category::Default => "default", + Category::Deprecated => "deprecated", Category::Removed => "removed", Category::Env => "env", Category::Experimental => "experimental", diff --git a/crates/nu-std/std/dt/mod.nu b/crates/nu-std/std/dt/mod.nu index 7090449994a..682fa9587c1 100644 --- a/crates/nu-std/std/dt/mod.nu +++ b/crates/nu-std/std/dt/mod.nu @@ -120,8 +120,8 @@ export def datetime-diff [ } } } - let from_expanded = ($later | date to-timezone utc | date to-record) - let to_expanded = ($earlier | date to-timezone utc | date to-record) + let from_expanded = ($later | date to-timezone utc | into record) + let to_expanded = ($earlier | date to-timezone utc | into record) mut result = { year: ($from_expanded.year - $to_expanded.year), month: ($from_expanded.month - $to_expanded.month), day:0, hour:0, minute:0, second:0, millisecond:0, microsecond:0, nanosecond:0}