Hi there!
I am currently writing some interactive mix tasks in a project I am writing
and I noticed that *Mix.Shell.IO.yes?* accepts any trimmed input that
matches the following allowlist of values:
*["", "y", "Y", "yes", "YES", "Yes"]*
However, it struck me that allowing what I'll call an "implicit"
confirmation with the Enter key is sometimes dangerous; e.g:
*>>> Are you sure you want to continue with this very dangerous,
irreversible operation? [Yn]"*
Dangerous is highly contextual of course, but I'd love to have an option
that requires the user to explicitly type their confirmation — in this case
the Enter key would be a cancel input instead, and make the function return
false.
I had a look at the code in *lib/mix/lib/mix/shell/io.ex* and it seems like
a straightforward change — I'd be happy to contribute if this proposal were
acceptable.
The change would look something like this:
Add an option; e.g:
*Mix.Shell.IO.yes?("Are you sure?", explicit_yes?: true)*
The option could alternatively be called :explicit?, :strict,
:enter_cancels? or something else — whatever is considered most idiomatic.
Of course, this would also change the prompt slightly to indicate the
behaviour of implicit input; e.g:
*Are you sure? [yN]*
Instead of:
*Are you sure? [Yn]*
Existing behaviour of this function would remain unchanged; this option
would default to false and Enter would be accepted as prompt confirmation
as before.
Additionally, looking at the source code — I wonder should the accepted
input be case-insensitive, and allow values like "yEs" or is the
aforementioned allowlist comprised of explicit values for a specific reason?
Thanks!
Darragh
--
You received this message because you are subscribed to the Google Groups
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/caa27f55-f1ac-4df1-a1fd-1e8902b7d33cn%40googlegroups.com.