mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 09:25:38 +02:00
Input output checking (#9680)
# Description This PR tights input/output type-checking a bit more. There are a lot of commands that don't have correct input/output types, so part of the effort is updating them. This PR now contains updates to commands that had wrong input/output signatures. It doesn't add examples for these new signatures, but that can be follow-up work. # User-Facing Changes BREAKING CHANGE BREAKING CHANGE This work enforces many more checks on pipeline type correctness than previous nushell versions. This strictness may uncover incompatibilities in existing scripts or shortcomings in the type information for internal commands. # Tests + Formatting <!-- Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass - `cargo run -- -c "use std testing; testing run-tests --path crates/nu-std"` to run the tests for the standard library > **Note** > from `nushell` you can also use the `toolkit` as follows > ```bash > use toolkit.nu # or use an `env_change` hook to activate it automatically > toolkit check pr > ``` --> # After Submitting <!-- If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. -->
This commit is contained in:
@ -15,7 +15,13 @@ impl Command for BitsAnd {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits and")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required(
|
||||
"target",
|
||||
|
@ -16,7 +16,13 @@ impl Command for BitsNot {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits not")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.switch(
|
||||
"signed",
|
||||
|
@ -15,7 +15,13 @@ impl Command for BitsOr {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits or")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required(
|
||||
"target",
|
||||
|
@ -18,7 +18,13 @@ impl Command for BitsRol {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits rol")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required("bits", SyntaxShape::Int, "number of bits to rotate left")
|
||||
.switch(
|
||||
|
@ -18,7 +18,13 @@ impl Command for BitsRor {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits ror")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required("bits", SyntaxShape::Int, "number of bits to rotate right")
|
||||
.switch(
|
||||
|
@ -18,7 +18,13 @@ impl Command for BitsShl {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits shl")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required("bits", SyntaxShape::Int, "number of bits to shift left")
|
||||
.switch(
|
||||
|
@ -18,7 +18,13 @@ impl Command for BitsShr {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits shr")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required("bits", SyntaxShape::Int, "number of bits to shift right")
|
||||
.switch(
|
||||
|
@ -15,7 +15,13 @@ impl Command for BitsXor {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bits xor")
|
||||
.input_output_types(vec![(Type::Int, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Int, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Int)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.required(
|
||||
"target",
|
||||
|
@ -16,7 +16,13 @@ impl Command for BytesLen {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bytes length")
|
||||
.input_output_types(vec![(Type::Binary, Type::Int)])
|
||||
.input_output_types(vec![
|
||||
(Type::Binary, Type::Int),
|
||||
(
|
||||
Type::List(Box::new(Type::Binary)),
|
||||
Type::List(Box::new(Type::Int)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.rest(
|
||||
"rest",
|
||||
|
@ -30,7 +30,10 @@ impl Command for BytesRemove {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bytes remove")
|
||||
.input_output_types(vec![(Type::Binary, Type::Binary)])
|
||||
.input_output_types(vec![
|
||||
(Type::Binary, Type::Binary),
|
||||
(Type::Table(vec![]), Type::Table(vec![])),
|
||||
])
|
||||
.required("pattern", SyntaxShape::Binary, "the pattern to find")
|
||||
.rest(
|
||||
"rest",
|
||||
|
@ -30,7 +30,10 @@ impl Command for BytesReplace {
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("bytes replace")
|
||||
.input_output_types(vec![(Type::Binary, Type::Binary)])
|
||||
.input_output_types(vec![
|
||||
(Type::Binary, Type::Binary),
|
||||
(Type::Table(vec![]), Type::Table(vec![])),
|
||||
])
|
||||
.required("find", SyntaxShape::Binary, "the pattern to find")
|
||||
.required("replace", SyntaxShape::Binary, "the replacement pattern")
|
||||
.rest(
|
||||
|
@ -13,7 +13,13 @@ impl Command for SubCommand {
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("math cos")
|
||||
.switch("degrees", "Use degrees instead of radians", Some('d'))
|
||||
.input_output_types(vec![(Type::Number, Type::Float)])
|
||||
.input_output_types(vec![
|
||||
(Type::Number, Type::Float),
|
||||
(
|
||||
Type::List(Box::new(Type::Number)),
|
||||
Type::List(Box::new(Type::Float)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.category(Category::Math)
|
||||
}
|
||||
|
@ -13,7 +13,13 @@ impl Command for SubCommand {
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("math sin")
|
||||
.switch("degrees", "Use degrees instead of radians", Some('d'))
|
||||
.input_output_types(vec![(Type::Number, Type::Float)])
|
||||
.input_output_types(vec![
|
||||
(Type::Number, Type::Float),
|
||||
(
|
||||
Type::List(Box::new(Type::Number)),
|
||||
Type::List(Box::new(Type::Float)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.category(Category::Math)
|
||||
}
|
||||
|
@ -13,7 +13,13 @@ impl Command for SubCommand {
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::build("math tan")
|
||||
.switch("degrees", "Use degrees instead of radians", Some('d'))
|
||||
.input_output_types(vec![(Type::Number, Type::Float)])
|
||||
.input_output_types(vec![
|
||||
(Type::Number, Type::Float),
|
||||
(
|
||||
Type::List(Box::new(Type::Number)),
|
||||
Type::List(Box::new(Type::Float)),
|
||||
),
|
||||
])
|
||||
.vectorizes_over_list(true)
|
||||
.category(Category::Math)
|
||||
}
|
||||
|
Reference in New Issue
Block a user