From 0b8d0bcd7aedd4a518eb1789b0537808aaa1c61a Mon Sep 17 00:00:00 2001 From: Devyn Cairns Date: Fri, 12 Jul 2024 01:25:44 -0700 Subject: [PATCH] Fix order of I/O types in `take until` (#13356) # Description Just a quick one, but `List(Any)` has to come before `Table`, because `List(Any)` is a valid match for `Table`, so it will choose `Table` output even if the input was actually `List(Any)`. I ended up removing `Table` because it's just not needed at all anyway. Though, I'm not really totally sure this is correct - I think the parser should probably actually just have some idea of what the more specific type is, and choose the most specific type match, rather than just doing it in order. I guess this will result in the output just always being `List(Any)` for now. Still better than a bad typecheck error # User-Facing Changes Fixes the following contrived example: ```nushell def foo []: nothing -> list { seq 1 10 | # list each { |n| $n * 20 } | # this causes the type to become list take until { |x| $x < 10 } } # table is first, so now this is type table # ...but table is not compatible with list } ``` # After Submitting - [ ] make typechecker type choice more robust - [ ] release notes --- crates/nu-command/src/filters/take/take_until.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/crates/nu-command/src/filters/take/take_until.rs b/crates/nu-command/src/filters/take/take_until.rs index c7debf5dee..c8544d364a 100644 --- a/crates/nu-command/src/filters/take/take_until.rs +++ b/crates/nu-command/src/filters/take/take_until.rs @@ -11,13 +11,10 @@ impl Command for TakeUntil { fn signature(&self) -> Signature { Signature::build(self.name()) - .input_output_types(vec![ - (Type::table(), Type::table()), - ( - Type::List(Box::new(Type::Any)), - Type::List(Box::new(Type::Any)), - ), - ]) + .input_output_types(vec![( + Type::List(Box::new(Type::Any)), + Type::List(Box::new(Type::Any)), + )]) .required( "predicate", SyntaxShape::Closure(Some(vec![SyntaxShape::Any, SyntaxShape::Int])),