-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cusom command: default value shouldn't restrict argument's type #10410
Comments
Should the following two things behave differently? def a [b: any = 3] { print ($b | describe) }
def a [b = 3] { print ($b | describe) } Currently, they all bound the type of I think in the first case, the type of |
@WindSoilder def a [b: any = 3] { print ($b | describe) }
a "foo" should definitely work because both |
# Description Fixes: #10410 So the following script is possible: ```nushell def a [b: any = null] { let b = ($b | default "default_b"); } a "given_b" ``` ## About the change When parsing signature, and nushell meets something like `a: any`, it force the parser to treat `a` as `any` type. This is what `arg_explicit_type` means, it's only set when we goes into `ParseMode::TypeMode`, and it will be reset to `false` if the token goes to next argument. so, when we have something like this: `def a [b: any = null] { $b }`, the type of `$b` won't be overwritten. But if we have something like this: `def a [b = null] { $b }`, the type of `$b` is not annotated, so we make it to be `nothing`(which is the type of null)
# Description Fixes: nushell#10410 So the following script is possible: ```nushell def a [b: any = null] { let b = ($b | default "default_b"); } a "given_b" ``` ## About the change When parsing signature, and nushell meets something like `a: any`, it force the parser to treat `a` as `any` type. This is what `arg_explicit_type` means, it's only set when we goes into `ParseMode::TypeMode`, and it will be reset to `false` if the token goes to next argument. so, when we have something like this: `def a [b: any = null] { $b }`, the type of `$b` won't be overwritten. But if we have something like this: `def a [b = null] { $b }`, the type of `$b` is not annotated, so we make it to be `nothing`(which is the type of null)
Describe the bug
Notice that when we define a custom command's argument with default value, the type of argument will be bounded.
How to reproduce
Run the following script:
Then nushell throws the following error:
Expected behavior
I expected nu to print
false
Screenshots
No response
Configuration
Additional context
No response
The text was updated successfully, but these errors were encountered: