Re: Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax)
| From: | tyson andre | Date: | Sun, 09 Aug 2020 18:46:20 +0000 |
| Subject: | Re: Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax) | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-111400@lists.php.net to get a copy of this message | ||
Hi internals,
> - Add a hook to
readline such as
> readline_set_php_result_handler_callback(function(mixed $result, string
> $snippet){...})
> that can be used to create a user-defined function to print/process the result of
> expressions.
> (Create a clone of zend_eval_stringl to support that)
> (The result value would instead be freed after the callback was called)
>
> Many other REPLs (Read-Eval-Print Loops) that I'm familiar with print a representation
>of the result of expressions, but PHP doesn't.
I've added this in https://github.com/php/php-src/pull/5962 .
I plan to add a system ini setting that can be used to permanently disable this silently (enabled by
default in all environments/example configs)
This will be callable if readline is installed, whether or not the shell is interactive
or the SAPI is CLI.
- e.g. cli.allow_interactive_shell_result_function=1 would be the default. Other
existing settings were https://www.php.net/manual/en/readline.configuration.php
- A buggy handler closure might interfere with people trying to debug issues,
which is why the ini setting is proposed.
```
readline_interactive_shell_result_function(
function (string $code, $result) {
// echo "Result of: " . trim($code) . "\n";
echo json_encode($result) . "\n"; // or var_dump(), etc.
});
```
1. Are there objections to adding this in 8.1 (after adding the described ini setting)?
2. Thoughts on the name? readline_interactive_shell_result_handler_function probably makes more
sense.
https://www.php.net/manual/en/function.readline-completion-function.php
does something similar.
The unit tests give an example of how this could be used.
https://github.com/php/php-src/pull/5962/files#diff-153ee3f384d333904c5000033bee9803
Thanks,
- Tyson