From c5e1b64b4066b389a742e6fcd3018fb8e2295123 Mon Sep 17 00:00:00 2001 From: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Thu, 19 Oct 2023 18:42:07 +0200 Subject: [PATCH] remove `random integer` in favor of `random int` (#10568) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit related to - https://github.com/nushell/nushell/pull/10520 # Description this PR is a followup to https://github.com/nushell/nushell/pull/10520 and removes the `random integer` command completely, in favor of `random int`. # User-Facing Changes `random integer` has been fully moved to `random int` ```nushell > random integer 0..1 Error: nu::parser::extra_positional × Extra positional argument. ╭─[entry #1:1:1] 1 │ random integer 0..1 · ───┬─── · ╰── extra positional argument ╰──── help: Usage: random ``` # Tests + Formatting tests have been moved from `crates/nu-command/tests/commands/random/integer.rs` to `crates/nu-command/tests/commands/random/int.rs` # After Submitting mention in 0.87.0 release notes --- crates/nu-command/src/default_context.rs | 1 - crates/nu-command/src/random/integer.rs | 130 ----------------------- crates/nu-command/src/random/mod.rs | 2 - 3 files changed, 133 deletions(-) delete mode 100644 crates/nu-command/src/random/integer.rs diff --git a/crates/nu-command/src/default_context.rs b/crates/nu-command/src/default_context.rs index 837eda2bd..abb280a27 100644 --- a/crates/nu-command/src/default_context.rs +++ b/crates/nu-command/src/default_context.rs @@ -372,7 +372,6 @@ pub fn add_shell_command_context(mut engine_state: EngineState) -> EngineState { RandomDice, RandomFloat, RandomInt, - RandomInteger, RandomUuid, }; diff --git a/crates/nu-command/src/random/integer.rs b/crates/nu-command/src/random/integer.rs deleted file mode 100644 index 821e791f6..000000000 --- a/crates/nu-command/src/random/integer.rs +++ /dev/null @@ -1,130 +0,0 @@ -use nu_engine::CallExt; -use nu_protocol::ast::Call; -use nu_protocol::engine::{Command, EngineState, Stack}; -use nu_protocol::{ - Category, Example, PipelineData, Range, ShellError, Signature, SyntaxShape, Type, Value, -}; -use rand::prelude::{thread_rng, Rng}; -use std::cmp::Ordering; - -#[derive(Clone)] -pub struct SubCommand; - -impl Command for SubCommand { - fn name(&self) -> &str { - "random integer" - } - - fn signature(&self) -> Signature { - Signature::build("random integer") - .input_output_types(vec![(Type::Nothing, Type::Int)]) - .allow_variants_without_examples(true) - .optional("range", SyntaxShape::Range, "Range of values") - .category(Category::Random) - } - - fn usage(&self) -> &str { - "deprecated: Generate a random integer [min..max]." - } - - fn extra_usage(&self) -> &str { - "Use `random int` instead" - } - - fn search_terms(&self) -> Vec<&str> { - vec!["generate", "natural", "number"] - } - - fn run( - &self, - engine_state: &EngineState, - stack: &mut Stack, - call: &Call, - _input: PipelineData, - ) -> Result { - nu_protocol::report_error_new( - engine_state, - &ShellError::GenericError( - "Deprecated command".into(), - "`random integer` is deprecated and will be removed in 0.87.".into(), - Some(call.head), - Some("Use `random int` instead".into()), - vec![], - ), - ); - integer(engine_state, stack, call) - } - - fn examples(&self) -> Vec { - vec![ - Example { - description: "Generate an unconstrained random integer", - example: "random integer", - result: None, - }, - Example { - description: "Generate a random integer less than or equal to 500", - example: "random integer ..500", - result: None, - }, - Example { - description: "Generate a random integer greater than or equal to 100000", - example: "random integer 100000..", - result: None, - }, - Example { - description: "Generate a random integer between 1 and 10", - example: "random integer 1..10", - result: None, - }, - ] - } -} - -fn integer( - engine_state: &EngineState, - stack: &mut Stack, - call: &Call, -) -> Result { - let span = call.head; - let range: Option = call.opt(engine_state, stack, 0)?; - - let (min, max) = if let Some(r) = range { - if r.is_end_inclusive() { - (r.from.as_int()?, r.to.as_int()?) - } else if r.to.as_int()? > 0 { - (r.from.as_int()?, r.to.as_int()? - 1) - } else { - (0, 0) - } - } else { - (0, i64::MAX) - }; - - match min.partial_cmp(&max) { - Some(Ordering::Greater) => Err(ShellError::InvalidRange { - left_flank: min.to_string(), - right_flank: max.to_string(), - span, - }), - Some(Ordering::Equal) => Ok(PipelineData::Value(Value::int(min, span), None)), - _ => { - let mut thread_rng = thread_rng(); - let result: i64 = thread_rng.gen_range(min..=max); - - Ok(PipelineData::Value(Value::int(result, span), None)) - } - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn test_examples() { - use crate::test_examples; - - test_examples(SubCommand {}) - } -} diff --git a/crates/nu-command/src/random/mod.rs b/crates/nu-command/src/random/mod.rs index 59e4f46a2..5a1fb06cf 100644 --- a/crates/nu-command/src/random/mod.rs +++ b/crates/nu-command/src/random/mod.rs @@ -3,7 +3,6 @@ mod chars; mod dice; mod float; mod int; -mod integer; mod random_; mod uuid; @@ -12,6 +11,5 @@ pub use self::chars::SubCommand as RandomChars; pub use self::dice::SubCommand as RandomDice; pub use self::float::SubCommand as RandomFloat; pub use self::int::SubCommand as RandomInt; -pub use self::integer::SubCommand as RandomInteger; pub use self::uuid::SubCommand as RandomUuid; pub use random_::RandomCommand as Random;