dotnet / interactive

.NET Interactive combines the power of .NET with many other languages to create notebooks, REPLs, and embedded coding experiences. Share code, explore data, write, and learn across your apps in ways you couldn't before.
MIT License
2.85k stars 381 forks source link

Prompt with @input behaves differently when @input has no spaces in the string #3359

Open marckruzik opened 9 months ago

marckruzik commented 9 months ago

Describe the bug

This example from the doc is working:

#!set --name url --value @input:"Please enter a URL"

Which gives a prompt Please enter a URL.

2023_12_01-16h19m39s-● Untitled-1 dib - notebook - Visual Studio Code

But if there is no space in the input, the prompt changes.

#!set --name url --value @input:"Please-enter-a-URL"

Which gives a prompt Please enter a value for field "Please-enter-a-URL".. But it should give the prompt Please-enter-a-URL.

2023_12_01-16h20m00s-● Untitled-1 dib - notebook - Visual Studio Code

Same goes with a one word input such as "Age".

#!set --name url --value @input:"Age"

2023_12_01-16h23m05s-● Untitled-1 dib - notebook - Visual Studio Code

I think the intended behavior of @input is to specify the prompt, rather than having a wording about a field. So in all cases, the prompt should be the content specified in @input.

Notes

Maybe there is a confusion with @input:input-please (notice the absence of double quotes), as seen in VariableSharingTests.SetMagicCommand.cs:

#!set --name newVar3 --value @input:input-please

This is an undocumented use of @input. The behavior seems to be the same with @input:input-please (without double quotes) and @input:"input-please" (with double quotes): it asks for a field instead of using the text in place of the prompt.

Please complete the following:

Which version of .NET Interactive are you using? (In a notebook, run the #!about magic command. ):

Version: 1.0.456201+e5dc02dbdc933d895d722e69bfa98d580dcda8d9

jonsequitur commented 9 months ago

The current logic is that if there's no other option in the magic command to indicate a field name (e.g. the --name option for the #!set command), and the prompt is usable as a field name (e.g. has no spaces), then the field name is inferred from the prompt.

I'm fixing some of the quote behavior inconsistencies as part of the PR for #3323.