rfc:readline_interactive_shell_result_function

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:readline_interactive_shell_result_function [2021/01/16 21:08] tandrerfc:readline_interactive_shell_result_function [2021/02/03 00:38] tandre
Line 3: Line 3:
   * Date: 2020-12-19   * Date: 2020-12-19
   * Author: Tyson Andre, tandre@php.net   * Author: Tyson Andre, tandre@php.net
-  * Status: Under Discussion+  * Status: Declined
   * Implementation: https://github.com/php/php-src/pull/5962/files   * Implementation: https://github.com/php/php-src/pull/5962/files
   * First Published at: https://wiki.php.net/rfc/readline_interactive_shell_result_function   * First Published at: https://wiki.php.net/rfc/readline_interactive_shell_result_function
Line 118: Line 118:
  */  */
 function readline_interactive_shell_result_function(?callable $callback): bool; function readline_interactive_shell_result_function(?callable $callback): bool;
 +</code>
 +
 +The default implementation added as part of this RFC is effectively identical to the below implementation, but written in C. It can be replaced with a userland implementation or disabled at any time, even in [[https://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file|auto_prepend_file]]. (Because the default implementation is written in C, it will work even if the ini setting ''disable_functions'' includes var_dump and var_export.)
 +
 +<code php>
 +readline_interactive_shell_result_function(
 +    function(string $code, $result) {
 +        if (!isset($result)) {
 +            return;
 +        }
 +        if (is_scalar($result)) {
 +            echo "=> " . var_export($result, true) . "\n";
 +        } else {
 +            echo "=> "; var_dump($result);
 +        }});
 </code> </code>
  
Line 164: Line 179:
   * i.e. change ''foo(); bar();'' to ''foo(); return (bar());''   * i.e. change ''foo(); bar();'' to ''foo(); return (bar());''
  
-===== Proposed Voting Choices =====+==== Rendering a result limit ==== 
 + 
 +https://externals.io/message/112934#113039 was brought up after the start of the vote. While some REPLs don't limit results, others do, and it's useful to have for extremely large objects. 
 +The setting ''cli.pager'' can be used to limit results, but is disabled by default. 
 + 
 +<blockquote> 
 +My main concern in this iteration of the RFC is: what happens with big/deeply nested objects? 
 +They tend to spew tons of lines if var_dump()'ed. Do we have reasonable depth/output limitations in default dumping mode? 
 + 
 +I'm often enough using php -a to do some quick ad-hoc processing (example, read a big json file, and then access a value; instantiating a mediawiki bot framework and calling replace on it; ...). 
 + 
 +It's really cool to have any interactive feedback at all, but please, at least by default, limit the output. (An example is the JS REPL in browser console - it shows you a minimal preview of the object, and then you can expand with your mouse. Obviously with a pure cli application, this needs different - intuitive - navigation.) 
 + 
 +As it currently stands, this makes ''php -a'' unusable in any but the simplest cases, without just disabling the whole feature. 
 + 
 +I like the whole feature, but the missing output limitation (I have yet enough nightmares from var_dump()'ing the wrong object filling my shell with tons of irrelevant information… I don't need that potentially happening on every single evaluated expression) 
 + 
 +Thus I'm voting no, for now. 
 +</blockquote> 
 +===== Vote ===== 
 + 
 +Voting starts on 2021-01-19 and ended 2021-02-02
  
 Yes/No, requiring 2/3 majority Yes/No, requiring 2/3 majority
 +
 +<doodle title="Dump results of expressions in `php -a` as described in this RFC" auth="tandre" voteType="single" closed="false">
 +   * Yes
 +   * No
 +</doodle>
  
 ===== References ===== ===== References =====
  
 +  * https://externals.io/message/112568 "[RFC] Configurable callback to dump results of expressions in `php -a`"
   * https://externals.io/message/111073 "Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax)"   * https://externals.io/message/111073 "Improving the usability of PHP's interactive shell? (completions, displaying expression results, custom syntax)"
   * https://wiki.php.net/rfc/readline_interactive_shell_result_function_straw_poll "Straw poll: Interest in configurable callback to dump results of expressions in ''php -a''"   * https://wiki.php.net/rfc/readline_interactive_shell_result_function_straw_poll "Straw poll: Interest in configurable callback to dump results of expressions in ''php -a''"
Line 176: Line 218:
  
 0.2: Dump non-null expression results by default with var_dump()/var_export() 0.2: Dump non-null expression results by default with var_dump()/var_export()
 +0.3: Document the default implementation used in the implementation
rfc/readline_interactive_shell_result_function.txt · Last modified: 2021/02/03 00:39 by tandre