Merge skip command varieties into one command with sub commands. (#2179)

This commit is contained in:
Andrés N. Robalino 2020-07-14 20:44:49 -05:00 committed by GitHub
parent 5f1075544c
commit 71e55541d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 38 additions and 34 deletions

View File

@ -105,8 +105,6 @@ pub(crate) mod shells;
pub(crate) mod shuffle; pub(crate) mod shuffle;
pub(crate) mod size; pub(crate) mod size;
pub(crate) mod skip; pub(crate) mod skip;
pub(crate) mod skip_until;
pub(crate) mod skip_while;
pub(crate) mod sort_by; pub(crate) mod sort_by;
pub(crate) mod split; pub(crate) mod split;
pub(crate) mod split_by; pub(crate) mod split_by;
@ -245,9 +243,7 @@ pub(crate) use select::Select;
pub(crate) use shells::Shells; pub(crate) use shells::Shells;
pub(crate) use shuffle::Shuffle; pub(crate) use shuffle::Shuffle;
pub(crate) use size::Size; pub(crate) use size::Size;
pub(crate) use skip::Skip; pub(crate) use skip::{Skip, SkipUntil, SkipWhile};
pub(crate) use skip_until::SkipUntil;
pub(crate) use skip_while::SkipWhile;
pub(crate) use sort_by::SortBy; pub(crate) use sort_by::SortBy;
pub(crate) use split::{Split, SplitChars, SplitColumn, SplitRow}; pub(crate) use split::{Split, SplitChars, SplitColumn, SplitRow};
pub(crate) use split_by::SplitBy; pub(crate) use split_by::SplitBy;

View File

@ -5,21 +5,21 @@ use nu_errors::ShellError;
use nu_protocol::{Signature, SyntaxShape, UntaggedValue}; use nu_protocol::{Signature, SyntaxShape, UntaggedValue};
use nu_source::Tagged; use nu_source::Tagged;
pub struct Skip; pub struct Command;
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct SkipArgs { pub struct Arguments {
rows: Option<Tagged<usize>>, rows: Option<Tagged<usize>>,
} }
#[async_trait] #[async_trait]
impl WholeStreamCommand for Skip { impl WholeStreamCommand for Command {
fn name(&self) -> &str { fn name(&self) -> &str {
"skip" "skip"
} }
fn signature(&self) -> Signature { fn signature(&self) -> Signature {
Signature::build("skip").optional("rows", SyntaxShape::Int, "how many rows to skip") Signature::build("skip").optional("rows", SyntaxShape::Int, "How many rows to skip")
} }
fn usage(&self) -> &str { fn usage(&self) -> &str {
@ -48,7 +48,7 @@ impl WholeStreamCommand for Skip {
async fn skip(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> { async fn skip(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStream, ShellError> {
let registry = registry.clone(); let registry = registry.clone();
let (SkipArgs { rows }, input) = args.process(&registry).await?; let (Arguments { rows }, input) = args.process(&registry).await?;
let rows_desired = if let Some(quantity) = rows { let rows_desired = if let Some(quantity) = rows {
*quantity *quantity
} else { } else {
@ -60,12 +60,12 @@ async fn skip(args: CommandArgs, registry: &CommandRegistry) -> Result<OutputStr
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::Skip; use super::Command;
#[test] #[test]
fn examples_work_as_expected() { fn examples_work_as_expected() {
use crate::examples::test as test_examples; use crate::examples::test as test_examples;
test_examples(Skip {}) test_examples(Command {})
} }
} }

View File

@ -0,0 +1,7 @@
mod command;
mod until;
mod while_;
pub use command::Command as Skip;
pub use until::SubCommand as SkipUntil;
pub use while_::SubCommand as SkipWhile;

View File

@ -5,20 +5,20 @@ use log::trace;
use nu_errors::ShellError; use nu_errors::ShellError;
use nu_protocol::{hir::ClassifiedCommand, Signature, SyntaxShape, UntaggedValue, Value}; use nu_protocol::{hir::ClassifiedCommand, Signature, SyntaxShape, UntaggedValue, Value};
pub struct SkipUntil; pub struct SubCommand;
#[async_trait] #[async_trait]
impl WholeStreamCommand for SkipUntil { impl WholeStreamCommand for SubCommand {
fn name(&self) -> &str { fn name(&self) -> &str {
"skip-until" "skip until"
} }
fn signature(&self) -> Signature { fn signature(&self) -> Signature {
Signature::build("skip-until") Signature::build("skip until")
.required( .required(
"condition", "condition",
SyntaxShape::Math, SyntaxShape::Math,
"the condition that must be met to stop skipping", "The condition that must be met to stop skipping",
) )
.filter() .filter()
} }
@ -108,12 +108,12 @@ impl WholeStreamCommand for SkipUntil {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::SkipUntil; use super::SubCommand;
#[test] #[test]
fn examples_work_as_expected() { fn examples_work_as_expected() {
use crate::examples::test as test_examples; use crate::examples::test as test_examples;
test_examples(SkipUntil {}) test_examples(SubCommand {})
} }
} }

View File

@ -5,20 +5,20 @@ use log::trace;
use nu_errors::ShellError; use nu_errors::ShellError;
use nu_protocol::{hir::ClassifiedCommand, Signature, SyntaxShape, UntaggedValue, Value}; use nu_protocol::{hir::ClassifiedCommand, Signature, SyntaxShape, UntaggedValue, Value};
pub struct SkipWhile; pub struct SubCommand;
#[async_trait] #[async_trait]
impl WholeStreamCommand for SkipWhile { impl WholeStreamCommand for SubCommand {
fn name(&self) -> &str { fn name(&self) -> &str {
"skip-while" "skip while"
} }
fn signature(&self) -> Signature { fn signature(&self) -> Signature {
Signature::build("skip-while") Signature::build("skip while")
.required( .required(
"condition", "condition",
SyntaxShape::Math, SyntaxShape::Math,
"the condition that must be met to continue skipping", "The condition that must be met to continue skipping",
) )
.filter() .filter()
} }
@ -108,12 +108,12 @@ impl WholeStreamCommand for SkipWhile {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::SkipWhile; use super::SubCommand;
#[test] #[test]
fn examples_work_as_expected() { fn examples_work_as_expected() {
use crate::examples::test as test_examples; use crate::examples::test as test_examples;
test_examples(SkipWhile {}) test_examples(SubCommand {})
} }
} }

View File

@ -37,7 +37,7 @@ fn condition_is_met() {
| skip 2 | skip 2
| split column ',' | split column ','
| headers | headers
| skip-while "Chicken Collection" != "Blue Chickens" | skip while "Chicken Collection" != "Blue Chickens"
| keep-until "Chicken Collection" == "Red Chickens" | keep-until "Chicken Collection" == "Red Chickens"
| skip 1 | skip 1
| str to-int "31/04/2020" | str to-int "31/04/2020"

View File

@ -7,7 +7,7 @@ fn lines() {
r#" r#"
open cargo_sample.toml -r open cargo_sample.toml -r
| lines | lines
| skip-while $it != "[dependencies]" | skip while $it != "[dependencies]"
| skip 1 | skip 1
| first 1 | first 1
| split column "=" | split column "="

View File

@ -43,8 +43,7 @@ mod rm;
mod save; mod save;
mod select; mod select;
mod semicolon; mod semicolon;
mod skip_until; mod skip;
mod skip_while;
mod sort_by; mod sort_by;
mod split_by; mod split_by;
mod split_column; mod split_column;

View File

@ -0,0 +1,2 @@
mod until;
mod while_;

View File

@ -4,7 +4,7 @@ use nu_test_support::{nu, pipeline};
#[test] #[test]
fn condition_is_met() { fn condition_is_met() {
Playground::setup("skip-while_test_1", |dirs, sandbox| { Playground::setup("skip_until_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed( sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt", "caballeros.txt",
r#" r#"
@ -37,7 +37,7 @@ fn condition_is_met() {
| skip 2 | skip 2
| split column ',' | split column ','
| headers | headers
| skip-while "Chicken Collection" != "Red Chickens" | skip until "Chicken Collection" == "Red Chickens"
| skip 1 | skip 1
| str to-int "31/04/2020" | str to-int "31/04/2020"
| get "31/04/2020" | get "31/04/2020"

View File

@ -4,7 +4,7 @@ use nu_test_support::{nu, pipeline};
#[test] #[test]
fn condition_is_met() { fn condition_is_met() {
Playground::setup("skip-until_test_1", |dirs, sandbox| { Playground::setup("skip_while_test_1", |dirs, sandbox| {
sandbox.with_files(vec![FileWithContentToBeTrimmed( sandbox.with_files(vec![FileWithContentToBeTrimmed(
"caballeros.txt", "caballeros.txt",
r#" r#"
@ -37,7 +37,7 @@ fn condition_is_met() {
| skip 2 | skip 2
| split column ',' | split column ','
| headers | headers
| skip-until "Chicken Collection" == "Red Chickens" | skip while "Chicken Collection" != "Red Chickens"
| skip 1 | skip 1
| str to-int "31/04/2020" | str to-int "31/04/2020"
| get "31/04/2020" | get "31/04/2020"