« Return to Thread: [ruby-dev:38695] [feature:trunk] let irb use pretty_inspect if possible

[ruby-dev:38703] Re: [feature:trunk] let irb use pretty_inspect if possible

by Yusuke ENDOH :: Rate this Message:

Reply to Author | View in Thread

遠藤です。

2009/06/22 0:43 に 石塚圭樹<keiju@...> さんは書きました:
> うーん. require してあると, irbの振る舞いが変わるのはどうかと思います
> が, irb で pp な出力をするモードがあっても良いよなーとは思っていました.

はい。


> コマンドラインオプションもしくは, .irbrc での IRB.CONFの指定で pp な出
> 力になるというのでも良いですよね?
>
> irb --inspect pp
>
> で pp な出力をするかんじです.


たぶんいいと思います。ただ、どうせ pp に特化するのなら、--pp などに
したら短くてうれしいかもしれないです。こんなオプションはどうでしょうか。

  --inspect-method foo: 結果出力の際、inspect の代わりに foo を用いる
  --pp:  -rpp --inspect-method=pretty_inspect と同じ効果

この方針のパッチを作ってみました。
irb の好みや作法にあわなかったらすみません。


Index: lib/irb/context.rb
===================================================================
--- lib/irb/context.rb (revision 23826)
+++ lib/irb/context.rb (working copy)
@@ -35,6 +35,7 @@

       @use_readline = IRB.conf[:USE_READLINE]
       @inspect_mode = IRB.conf[:INSPECT_MODE]
+      @inspect_method = IRB.conf[:INSPECT_METHOD]

       self.math_mode = IRB.conf[:MATH_MODE] if IRB.conf[:MATH_MODE]
       self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER]
@@ -116,6 +117,7 @@

     attr_reader :use_readline
     attr_reader :inspect_mode
+    attr_reader :inspect_method

     attr_reader :prompt_mode
     attr_accessor :prompt_i
Index: lib/irb/lc/ja/help-message
===================================================================
--- lib/irb/lc/ja/help-message (revision 23826)
+++ lib/irb/lc/ja/help-message (working copy)
@@ -18,6 +18,9 @@
   -E enc            ruby -E と同じ.
   --inspect    結果出力にinspectを用いる(bcモード以外はデフォルト).
   --noinspect    結果出力にinspectを用いない.
+  --inspect-method method-name
+    結果出力の際, inspectの代わりにmethod-nameを用いる.
+  --pp    -rpp --inspect-method=pretty_inspect と同じ.
   --readline    readlineライブラリを利用する.
   --noreadline    readlineライブラリを利用しない.
   --prompt prompt-mode/--prompt-mode prompt-mode
Index: lib/irb/lc/help-message
===================================================================
--- lib/irb/lc/help-message (revision 23826)
+++ lib/irb/lc/help-message (working copy)
@@ -19,6 +19,9 @@
   -E enc            Same as `ruby -E`
   --inspect    Use `inspect' for output (default except for bc mode)
   --noinspect    Don't use inspect for output
+  --inspect-method method-name
+    Use method-name instead of `inspect' for output
+  --pp    Identical to -rpp --inspect-method=pretty_inspect
   --readline    Use Readline extension module
   --noreadline    Don't use Readline extension module
   --prompt prompt-mode
Index: lib/irb/init.rb
===================================================================
--- lib/irb/init.rb (revision 23826)
+++ lib/irb/init.rb (working copy)
@@ -45,6 +45,7 @@
     @CONF[:MATH_MODE] = false
     @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
     @CONF[:INSPECT_MODE] = nil
+    @CONF[:INSPECT_METHOD] = "inspect"
     @CONF[:USE_TRACER] = false
     @CONF[:USE_LOADER] = false
     @CONF[:IGNORE_SIGINT] = true
@@ -148,6 +149,11 @@
  @CONF[:INSPECT_MODE] = true
       when "--noinspect"
  @CONF[:INSPECT_MODE] = false
+      when /^--inspect-method(?:=(.+))?/
+ @CONF[:INSPECT_METHOD] = $1 || ARGV.shift
+      when "--pp"
+ @CONF[:LOAD_MODULES].push "pp"
+ @CONF[:INSPECT_METHOD] = "pretty_inspect"
       when "--readline"
  @CONF[:USE_READLINE] = true
       when "--noreadline"
Index: lib/irb.rb
===================================================================
--- lib/irb.rb (revision 23826)
+++ lib/irb.rb (working copy)
@@ -299,7 +299,8 @@

     def output_value
       if @context.inspect?
-        printf @context.return_format, @context.last_value.inspect
+        str = @context.last_value.send(@context.inspect_method)
+        printf @context.return_format, str
       else
         printf @context.return_format, @context.last_value
       end

--
Yusuke ENDOH <mame@...>

 « Return to Thread: [ruby-dev:38695] [feature:trunk] let irb use pretty_inspect if possible