# Description With the current typechecking logic this property has no effect. It was only used in the example testing, and provided some indication of this vectorizing property. With #9742 all commands that previously declared it have explicit list signatures. If we want to get it back in the future we can reconstruct it from the signature. Simplifies the example testing a bit. # User-Facing Changes Causes a breaking change for plugins that previously declared it. While this causes a compile fail, this was already broken by our more stringent type checking. This will be a good reminder for plugin authors to update their signature as well to reflect the more stringent type checking.
100 lines
3.0 KiB
Rust
100 lines
3.0 KiB
Rust
use inflector::cases::camelcase::to_camel_case;
|
|
use nu_protocol::ast::Call;
|
|
use nu_protocol::engine::{Command, EngineState, Stack};
|
|
use nu_protocol::{
|
|
Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value,
|
|
};
|
|
|
|
use crate::operate;
|
|
|
|
#[derive(Clone)]
|
|
pub struct SubCommand;
|
|
|
|
impl Command for SubCommand {
|
|
fn name(&self) -> &str {
|
|
"str camel-case"
|
|
}
|
|
|
|
fn signature(&self) -> Signature {
|
|
Signature::build("str camel-case")
|
|
.input_output_types(vec![
|
|
(Type::String, Type::String),
|
|
(
|
|
Type::List(Box::new(Type::String)),
|
|
Type::List(Box::new(Type::String)),
|
|
),
|
|
(Type::Table(vec![]), Type::Table(vec![])),
|
|
(Type::Record(vec![]), Type::Record(vec![])),
|
|
])
|
|
.allow_variants_without_examples(true)
|
|
.rest(
|
|
"rest",
|
|
SyntaxShape::CellPath,
|
|
"For a data structure input, convert strings at the given cell paths",
|
|
)
|
|
.category(Category::Strings)
|
|
}
|
|
|
|
fn usage(&self) -> &str {
|
|
"Convert a string to camelCase."
|
|
}
|
|
|
|
fn search_terms(&self) -> Vec<&str> {
|
|
vec!["convert", "style", "caps", "convention"]
|
|
}
|
|
|
|
fn run(
|
|
&self,
|
|
engine_state: &EngineState,
|
|
stack: &mut Stack,
|
|
call: &Call,
|
|
input: PipelineData,
|
|
) -> Result<PipelineData, ShellError> {
|
|
operate(engine_state, stack, call, input, &to_camel_case)
|
|
}
|
|
|
|
fn examples(&self) -> Vec<Example> {
|
|
vec![
|
|
Example {
|
|
description: "convert a string to camelCase",
|
|
example: " 'NuShell' | str camel-case",
|
|
result: Some(Value::test_string("nuShell")),
|
|
},
|
|
Example {
|
|
description: "convert a string to camelCase",
|
|
example: "'this-is-the-first-case' | str camel-case",
|
|
result: Some(Value::test_string("thisIsTheFirstCase")),
|
|
},
|
|
Example {
|
|
description: "convert a string to camelCase",
|
|
example: " 'this_is_the_second_case' | str camel-case",
|
|
result: Some(Value::test_string("thisIsTheSecondCase")),
|
|
},
|
|
Example {
|
|
description: "convert a column from a table to camelCase",
|
|
example: r#"[[lang, gems]; [nu_test, 100]] | str camel-case lang"#,
|
|
result: Some(Value::List {
|
|
vals: vec![Value::Record {
|
|
span: Span::test_data(),
|
|
cols: vec!["lang".to_string(), "gems".to_string()],
|
|
vals: vec![Value::test_string("nuTest"), Value::test_int(100)],
|
|
}],
|
|
span: Span::test_data(),
|
|
}),
|
|
},
|
|
]
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_examples() {
|
|
use crate::test_examples;
|
|
|
|
test_examples(SubCommand {})
|
|
}
|
|
}
|