feat: add an echo command to nu_plugin_example (#12754)

# Description

This PR adds a new `echo` command to the `nu_plugin_example` plugin that
simply [streams all of its input to its
output](https://github.com/nushell/nushell/pull/12754/files#diff-de9fcf086b8c373039dadcc2bcb664c6014c0b2af8568eab68c0b6666ac5ccceR47).

```
: "hi" | example echo
hi
```

The motivation for adding it is to have a convenient command to exercise
interactivity on slow pipelines.

I'll follow up on that front with [another
PR](https://github.com/cablehead/nushell/pull/1/files)

# Tests + Formatting

https://github.com/nushell/nushell/pull/12754/files#diff-de9fcf086b8c373039dadcc2bcb664c6014c0b2af8568eab68c0b6666ac5ccceR51-R55
This commit is contained in:
Andy Gayton 2024-05-08 15:45:44 -04:00 committed by GitHub
parent 5466da3b52
commit 92831d7efc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 58 additions and 0 deletions

View File

@ -0,0 +1,55 @@
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
use nu_protocol::{Category, Example, LabeledError, PipelineData, Signature, Type, Value};
use crate::ExamplePlugin;
/// `<list> | example echo`
pub struct Echo;
impl PluginCommand for Echo {
type Plugin = ExamplePlugin;
fn name(&self) -> &str {
"example echo"
}
fn usage(&self) -> &str {
"Example stream consumer that outputs the received input"
}
fn signature(&self) -> Signature {
Signature::build(self.name())
.input_output_types(vec![(Type::Any, Type::Any)])
.category(Category::Experimental)
}
fn search_terms(&self) -> Vec<&str> {
vec!["example"]
}
fn examples(&self) -> Vec<Example> {
vec![Example {
example: "example seq 1 5 | example echo",
description: "echos the values from 1 to 5",
result: Some(Value::test_list(
(1..=5).map(Value::test_int).collect::<Vec<_>>(),
)),
}]
}
fn run(
&self,
_plugin: &ExamplePlugin,
_engine: &EngineInterface,
_call: &EvaluatedCall,
input: PipelineData,
) -> Result<PipelineData, LabeledError> {
Ok(input)
}
}
#[test]
fn test_examples() -> Result<(), nu_protocol::ShellError> {
use nu_plugin_test_support::PluginTest;
PluginTest::new("example", ExamplePlugin.into())?.test_command_examples(&Echo)
}

View File

@ -25,12 +25,14 @@ pub use view_span::ViewSpan;
// Stream demos
mod collect_external;
mod echo;
mod for_each;
mod generate;
mod seq;
mod sum;
pub use collect_external::CollectExternal;
pub use echo::Echo;
pub use for_each::ForEach;
pub use generate::Generate;
pub use seq::Seq;

View File

@ -25,6 +25,7 @@ impl Plugin for ExamplePlugin {
Box::new(DisableGc),
// Stream demos
Box::new(CollectExternal),
Box::new(Echo),
Box::new(ForEach),
Box::new(Generate),
Box::new(Seq),