Feature #1673
closedlet irb use pretty_inspect if possible
Added by mame (Yusuke Endoh) over 15 years ago. Updated over 13 years ago.
Description
=begin
遠藤です。
irb メンテナの石塚さん:
pretty_inspect が使用可能なときは、irb の結果出力にそれを使うのは
どうでしょうか。
irb(main):001:0> ["foo bar baz"] * 6
=> ["foo bar baz", "foo bar baz", "foo bar baz", "foo bar baz", "foo
bar baz", "foo bar baz"]
irb(main):002:0> require "pp"
=> true
irb(main):003:0> ["foo bar baz"] * 6
=> ["foo bar baz",
"foo bar baz",
"foo bar baz",
"foo bar baz",
"foo bar baz",
"foo bar baz"]
本当の目的は「Object#p と同様に pp にも引数を返してほしい」という
一年前の話 ([ruby-dev:34830] 、[ruby-dev:34833]) の続きで、田中さん
からは「irb が変われば pp も変えてよい」という条件付採録を (さっき)
貰いました。
よろしくお願いします。
Index: lib/irb.rb¶
--- lib/irb.rb (revision 23808)
+++ lib/irb.rb (working copy)
@@ -299,7 +299,13 @@
def output_value
if @context.inspect?
-
printf @context.return_format, @context.last_value.inspect
-
value = @context.last_value
-
if value.respond_to?(:pretty_inspect)
-
str = value.pretty_inspect.chomp
-
else
-
str = value.inspect
-
end
-
printf @context.return_format, str else printf @context.return_format, @context.last_value end
--
Yusuke ENDOH mame@tsg.ne.jp
=end
Updated by keiju (Keiju Ishitsuka) over 15 years ago
=begin
けいじゅ@いしつかです.
In [ruby-dev:38695] the message: "[ruby-dev:38695] [feature:trunk] let
irb use pretty_inspect if possible", on Jun/21 23:06(JST) Yusuke ENDOH
writes:
遠藤です。
irb メンテナの石塚さん:
pretty_inspect が使用可能なときは、irb の結果出力にそれを使うのは
どうでしょうか。
うーん. require してあると, irbの振る舞いが変わるのはどうかと思います
が, irb で pp な出力をするモードがあっても良いよなーとは思っていました.
コマンドラインオプションもしくは, .irbrc での IRB.CONFの指定で pp な出
力になるというのでも良いですよね?
irb --inspect pp
で pp な出力をするかんじです.
本当の目的は「Object#p と同様に pp にも引数を返してほしい」という
一年前の話 ([ruby-dev:34830] 、[ruby-dev:34833]) の続きで、田中さん
からは「irb が変われば pp も変えてよい」という条件付採録を (さっき)
貰いました。
あー. なるほど,
irb(main):006:0> pp 1
1
=> nil
で 引数を返すようになると, 2重に表示してしまうからですね.
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---
=end
Updated by mame (Yusuke Endoh) over 15 years ago
=begin
遠藤です。
2009/06/22 0:43 に 石塚圭樹keiju@ishitsuka.com さんは書きました:
うーん. 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 asruby -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@tsg.ne.jp
=end
Updated by keiju (Keiju Ishitsuka) over 15 years ago
=begin
けいじゅ@いしつかです.
In [ruby-dev:38703] the message: "[ruby-dev:38703] Re: [feature:trunk]
let irb use pretty_inspect if possible", on Jun/23 05:47(JST) Yusuke
ENDOH writes:
遠藤です。
irb --inspect pp
で pp な出力をするかんじです.
たぶんいいと思います。ただ、どうせ pp に特化するのなら、--pp などに
したら短くてうれしいかもしれないです。こんなオプションはどうでしょうか。--inspect-method foo: 結果出力の際、inspect の代わりに foo を用いる
--pp: -rpp --inspect-method=pretty_inspect と同じ効果この方針のパッチを作ってみました。
irb の好みや作法にあわなかったらすみません。
わざわざパッチを作ってくださりありがとうございます.
実はすでにこちらでも作っていて, --inspect pp 以外にもブロックが指定で
きて:
irb -r yaml --inspect "{|v| YAML.dump(v)}"
なんて指定もできるようにしました.
まあ, 使う人はいないと思いますが(^^;;¶
pp(pretty_print)はともかく, オブジェクトに対する直接のメソッドは将来的
にもあまり出てきそうもない気がします.
あと, コマンド引数に関してですが, ppを非常に良く使うんだったら, .irbrc
に
IRB.conf[:INSPECT_MODE] = :pp
としていただければコマンド引数で渡す必要はなくなりますので, 短いのにあ
まりこだわらなくても良いのではないかと思いますが?
いかがでしょう?
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---
=end
Updated by mame (Yusuke Endoh) over 15 years ago
=begin
遠藤です。
2009/06/24 0:25 に 石塚圭樹keiju@ishitsuka.com さんは書きました:
実はすでにこちらでも作っていて, --inspect pp 以外にもブロックが指定で
きて:irb -r yaml --inspect "{|v| YAML.dump(v)}"
なんて指定もできるようにしました.
おおすばらしい。
pp(pretty_print)はともかく, オブジェクトに対する直接のメソッドは将来的
にもあまり出てきそうもない気がします.
確かにそうですね。
あと, コマンド引数に関してですが, ppを非常に良く使うんだったら, .irbrc
にIRB.conf[:INSPECT_MODE] = :pp
としていただければコマンド引数で渡す必要はなくなりますので, 短いのにあ
まりこだわらなくても良いのではないかと思いますが?
個人的には設定は極力しない派なので、短い方が嬉しいなーとは思います。が、
irb がカスタマイズを推奨している雰囲気は感じ取っていますのでそれでいいと
思います。
「設定はしたくないけど pp は使いたい、余計な表示はしてほしくない」という
私のようにわがままな人は
irb(main):001:0> pp obj; nil
としてくれ、ということで。今でも ary.each {|x| ...; p x } とかするときは
最後に ; nil などをつけることが多いですしね。
--
Yusuke ENDOH mame@tsg.ne.jp
=end
Updated by keiju (Keiju Ishitsuka) over 15 years ago
=begin
けいじゅ@いしつかです.
trunkにリリースしました.
irb --inspect pp
で pp を使うようになります. あと, おまけで, yaml と marshal もつけて
あります(^^;;;
使い方.
- コマンドライン
% irb --inspect [raw|p|pp|yaml|marshal|...]
または, ブロック指定で
% irb -r yaml --inspect "{|v| YAML.dump(v)}"
- 実行中での変更
irb(main):001:0> conf.inspect_mode = :yaml
- .irbrc でデフォルトの振る舞いを変える
IRB.conf[:INSPECT_MODE] = [:raw|:p|:pp|:yaml|:marshal|...]
- ユーザー定義モード
IRB::INSPECTORS.def_inspector(mode_names, init_proc, &inspect_block)
例)
.irbrcで
IRB::INSPECTORS.def_inspector([:test]){|v| v.to_s*2}
とし,
% irb --inspect test
で実行する.
こんな感じになりました.
In [ruby-dev:38707] the message: "[ruby-dev:38707] Re: [feature:trunk] let irb use pretty_inspect if possible", on Jun/24 01:08(JST)
Yusuke ENDOH writes:
遠藤です。
2009/06/24 0:25 に 石塚圭樹keiju@ishitsuka.com さんは書きました:
実はすでにこちらでも作っていて, --inspect pp 以外にもブロックが指定で
きて:irb -r yaml --inspect "{|v| YAML.dump(v)}"
なんて指定もできるようにしました.
おおすばらしい。
pp(pretty_print)はともかく, オブジェクトに対する直接のメソッドは将来的
にもあまり出てきそうもない気がします.確かにそうですね。
あと, コマンド引数に関してですが, ppを非常に良く使うんだったら, .irbrc
にIRB.conf[:INSPECT_MODE] = :pp
としていただければコマンド引数で渡す必要はなくなりますので, 短いのにあ
まりこだわらなくても良いのではないかと思いますが?個人的には設定は極力しない派なので、短い方が嬉しいなーとは思います。が、
irb がカスタマイズを推奨している雰囲気は感じ取っていますのでそれでいいと
思います。「設定はしたくないけど pp は使いたい、余計な表示はしてほしくない」という
私のようにわがままな人はirb(main):001:0> pp obj; nil
としてくれ、ということで。今でも ary.each {|x| ...; p x } とかするときは
最後に ; nil などをつけることが多いですしね。--
Yusuke ENDOH mame@tsg.ne.jp
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---
=end
Updated by matz (Yukihiro Matsumoto) over 15 years ago
=begin
まつもと ゆきひろです
In message "Re: [ruby-dev:38744] Re: [feature:trunk] let irb use pretty_inspect if possible"
on Tue, 7 Jul 2009 22:42:04 +0900, keiju@ishitsuka.com (石塚圭樹) writes:
|trunkにリリースしました.
|
|irb --inspect pp
|
|で pp を使うようになります. あと, おまけで, yaml と marshal もつけて
|あります(^^;;;
irb/inspector.rbがチェックインされていないような。
=end
Updated by keiju (Keiju Ishitsuka) over 15 years ago
=begin
けいじゅ@いしつかです.
In [ruby-dev:38746] the message: "[ruby-dev:38746] Re: [feature:trunk] let irb use pretty_inspect if possible", on Jul/08 13:18(JST)
Yukihiro Matsumoto writes:
まつもと ゆきひろです
|trunkにリリースしました.
|
|irb --inspect pp
|
|で pp を使うようになります. あと, おまけで, yaml と marshal もつけて
|あります(^^;;;irb/inspector.rbがチェックインされていないような。
申し訳ない. チェックインしました.
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---
=end