mirror of
https://github.com/nushell/nushell
synced 2024-12-28 05:53:09 +00:00
Merge pull request #890 from jonathandturner/append_prepend
Add prepend and append commands
This commit is contained in:
commit
faccb0627f
5 changed files with 132 additions and 0 deletions
|
@ -264,6 +264,8 @@ pub async fn cli() -> Result<(), Box<dyn Error>> {
|
||||||
whole_stream_command(Lines),
|
whole_stream_command(Lines),
|
||||||
whole_stream_command(Reject),
|
whole_stream_command(Reject),
|
||||||
whole_stream_command(Reverse),
|
whole_stream_command(Reverse),
|
||||||
|
whole_stream_command(Append),
|
||||||
|
whole_stream_command(Prepend),
|
||||||
whole_stream_command(Trim),
|
whole_stream_command(Trim),
|
||||||
whole_stream_command(ToBSON),
|
whole_stream_command(ToBSON),
|
||||||
whole_stream_command(ToCSV),
|
whole_stream_command(ToCSV),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub(crate) mod macros;
|
pub(crate) mod macros;
|
||||||
|
|
||||||
|
pub(crate) mod append;
|
||||||
pub(crate) mod args;
|
pub(crate) mod args;
|
||||||
pub(crate) mod autoview;
|
pub(crate) mod autoview;
|
||||||
pub(crate) mod cd;
|
pub(crate) mod cd;
|
||||||
|
@ -45,6 +46,7 @@ pub(crate) mod pick;
|
||||||
pub(crate) mod pivot;
|
pub(crate) mod pivot;
|
||||||
pub(crate) mod plugin;
|
pub(crate) mod plugin;
|
||||||
pub(crate) mod post;
|
pub(crate) mod post;
|
||||||
|
pub(crate) mod prepend;
|
||||||
pub(crate) mod prev;
|
pub(crate) mod prev;
|
||||||
pub(crate) mod pwd;
|
pub(crate) mod pwd;
|
||||||
pub(crate) mod reject;
|
pub(crate) mod reject;
|
||||||
|
@ -79,6 +81,7 @@ pub(crate) use command::{
|
||||||
UnevaluatedCallInfo, WholeStreamCommand,
|
UnevaluatedCallInfo, WholeStreamCommand,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub(crate) use append::Append;
|
||||||
pub(crate) use classified::ClassifiedCommand;
|
pub(crate) use classified::ClassifiedCommand;
|
||||||
pub(crate) use config::Config;
|
pub(crate) use config::Config;
|
||||||
pub(crate) use count::Count;
|
pub(crate) use count::Count;
|
||||||
|
@ -119,6 +122,7 @@ pub(crate) use open::Open;
|
||||||
pub(crate) use pick::Pick;
|
pub(crate) use pick::Pick;
|
||||||
pub(crate) use pivot::Pivot;
|
pub(crate) use pivot::Pivot;
|
||||||
pub(crate) use post::Post;
|
pub(crate) use post::Post;
|
||||||
|
pub(crate) use prepend::Prepend;
|
||||||
pub(crate) use prev::Previous;
|
pub(crate) use prev::Previous;
|
||||||
pub(crate) use pwd::PWD;
|
pub(crate) use pwd::PWD;
|
||||||
pub(crate) use reject::Reject;
|
pub(crate) use reject::Reject;
|
||||||
|
|
47
src/commands/append.rs
Normal file
47
src/commands/append.rs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
use crate::commands::WholeStreamCommand;
|
||||||
|
use crate::errors::ShellError;
|
||||||
|
use crate::parser::CommandRegistry;
|
||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct AppendArgs {
|
||||||
|
row: Tagged<Value>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Append;
|
||||||
|
|
||||||
|
impl WholeStreamCommand for Append {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"append"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> Signature {
|
||||||
|
Signature::build("append").required(
|
||||||
|
"row value",
|
||||||
|
SyntaxShape::Any,
|
||||||
|
"the value of the row to append to the table",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Append the given row to the table"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
&self,
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
args.process(registry, append)?.run()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn append(
|
||||||
|
AppendArgs { row }: AppendArgs,
|
||||||
|
RunnableContext { input, .. }: RunnableContext,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
let mut after: VecDeque<Tagged<Value>> = VecDeque::new();
|
||||||
|
after.push_back(row);
|
||||||
|
|
||||||
|
Ok(OutputStream::from_input(input.values.chain(after)))
|
||||||
|
}
|
47
src/commands/prepend.rs
Normal file
47
src/commands/prepend.rs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
use crate::commands::WholeStreamCommand;
|
||||||
|
use crate::errors::ShellError;
|
||||||
|
use crate::parser::CommandRegistry;
|
||||||
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct PrependArgs {
|
||||||
|
row: Tagged<Value>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Prepend;
|
||||||
|
|
||||||
|
impl WholeStreamCommand for Prepend {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"prepend"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> Signature {
|
||||||
|
Signature::build("prepend").required(
|
||||||
|
"row value",
|
||||||
|
SyntaxShape::Any,
|
||||||
|
"the value of the row to prepend to the table",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Prepend the given row to the front of the table"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
&self,
|
||||||
|
args: CommandArgs,
|
||||||
|
registry: &CommandRegistry,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
args.process(registry, prepend)?.run()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn prepend(
|
||||||
|
PrependArgs { row }: PrependArgs,
|
||||||
|
RunnableContext { input, .. }: RunnableContext,
|
||||||
|
) -> Result<OutputStream, ShellError> {
|
||||||
|
let mut prepend: VecDeque<Tagged<Value>> = VecDeque::new();
|
||||||
|
prepend.push_back(row);
|
||||||
|
|
||||||
|
Ok(OutputStream::from_input(prepend.chain(input.values)))
|
||||||
|
}
|
|
@ -72,6 +72,38 @@ fn read_plugin() {
|
||||||
assert_eq!(actual, "StupidLongName");
|
assert_eq!(actual, "StupidLongName");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn prepend_plugin() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: "tests/fixtures/formats", h::pipeline(
|
||||||
|
r#"
|
||||||
|
open fileA.txt
|
||||||
|
| lines
|
||||||
|
| prepend "testme"
|
||||||
|
| nth 0
|
||||||
|
| echo $it
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(actual, "testme");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn append_plugin() {
|
||||||
|
let actual = nu!(
|
||||||
|
cwd: "tests/fixtures/formats", h::pipeline(
|
||||||
|
r#"
|
||||||
|
open fileA.txt
|
||||||
|
| lines
|
||||||
|
| append "testme"
|
||||||
|
| nth 3
|
||||||
|
| echo $it
|
||||||
|
"#
|
||||||
|
));
|
||||||
|
|
||||||
|
assert_eq!(actual, "testme");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn edit_plugin() {
|
fn edit_plugin() {
|
||||||
let actual = nu!(
|
let actual = nu!(
|
||||||
|
|
Loading…
Reference in a new issue