mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 07:16:05 +02:00
Change PluginCommand API to be more like Command (#12279)
# Description
This is something that was discussed in the core team meeting last
Wednesday. @ayax79 is building `nu-plugin-polars` with all of the
dataframe commands into a plugin, and there are a lot of them, so it
would help to make the API more similar. At the same time, I think the
`Command` API is just better anyway. I don't think the difference is
justified, and the types for core commands have the benefit of requiring
less `.into()` because they often don't own their data
- Broke `signature()` up into `name()`, `usage()`, `extra_usage()`,
`search_terms()`, `examples()`
- `signature()` returns `nu_protocol::Signature`
- `examples()` returns `Vec<nu_protocol::Example>`
- `PluginSignature` and `PluginExample` no longer need to be used by
plugin developers
# User-Facing Changes
Breaking API for plugins yet again 😄
This commit is contained in:
@ -1,35 +1,43 @@
|
||||
use crate::{second_custom_value::SecondCustomValue, CustomValuePlugin};
|
||||
use nu_plugin::{EngineInterface, EvaluatedCall, SimplePluginCommand};
|
||||
use nu_protocol::{
|
||||
Category, LabeledError, PluginExample, PluginSignature, Span, SyntaxShape, Value,
|
||||
};
|
||||
use nu_protocol::{Category, Example, LabeledError, Signature, Span, SyntaxShape, Value};
|
||||
|
||||
pub struct Generate2;
|
||||
|
||||
impl SimplePluginCommand for Generate2 {
|
||||
type Plugin = CustomValuePlugin;
|
||||
|
||||
fn signature(&self) -> PluginSignature {
|
||||
PluginSignature::build("custom-value generate2")
|
||||
.usage("PluginSignature for a plugin that generates a different custom value")
|
||||
fn name(&self) -> &str {
|
||||
"custom-value generate2"
|
||||
}
|
||||
|
||||
fn usage(&self) -> &str {
|
||||
"PluginSignature for a plugin that generates a different custom value"
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build(self.name())
|
||||
.optional(
|
||||
"closure",
|
||||
SyntaxShape::Closure(Some(vec![SyntaxShape::Any])),
|
||||
"An optional closure to pass the custom value to",
|
||||
)
|
||||
.category(Category::Experimental)
|
||||
.plugin_examples(vec![
|
||||
PluginExample {
|
||||
example: "custom-value generate2".into(),
|
||||
description: "Generate a new SecondCustomValue".into(),
|
||||
result: Some(SecondCustomValue::new("xyz").into_value(Span::test_data())),
|
||||
},
|
||||
PluginExample {
|
||||
example: "custom-value generate2 { print }".into(),
|
||||
description: "Generate a new SecondCustomValue and pass it to a closure".into(),
|
||||
result: None,
|
||||
},
|
||||
])
|
||||
}
|
||||
|
||||
fn examples(&self) -> Vec<Example> {
|
||||
vec![
|
||||
Example {
|
||||
example: "custom-value generate2",
|
||||
description: "Generate a new SecondCustomValue",
|
||||
result: Some(SecondCustomValue::new("xyz").into_value(Span::test_data())),
|
||||
},
|
||||
Example {
|
||||
example: "custom-value generate2 { print }",
|
||||
description: "Generate a new SecondCustomValue and pass it to a closure",
|
||||
result: None,
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
fn run(
|
||||
|
Reference in New Issue
Block a user