Project

General

Profile

Actions

Feature #1673

closed

let irb use pretty_inspect if possible

Added by mame (Yusuke Endoh) almost 13 years ago. Updated about 11 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:38695]

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
=end

Actions #1

Updated by keiju (Keiju Ishitsuka) almost 13 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: <<---

=end

Actions #2

Updated by mame (Yusuke Endoh) almost 13 years ago

=begin
遠藤です。

2009/06/22 0:43 に 石塚圭樹 さんは書きました:

うーん. 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

=end

Actions #3

Updated by keiju (Keiju Ishitsuka) almost 13 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: <<---

=end

Actions #4

Updated by mame (Yusuke Endoh) almost 13 years ago

=begin
遠藤です。

2009/06/24 0:25 に 石塚圭樹 さんは書きました:

実はすでにこちらでも作っていて, --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

=end

Actions #5

Updated by keiju (Keiju Ishitsuka) almost 13 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 に 石塚圭樹 さんは書きました:

実はすでにこちらでも作っていて, --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

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: <<---

=end

Actions #6

Updated by matz (Yukihiro Matsumoto) almost 13 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, (石塚圭樹) writes:

|trunkにリリースしました.
|
|irb --inspect pp
|
|で pp を使うようになります. あと, おまけで, yaml と marshal もつけて
|あります(^^;;;

irb/inspector.rbがチェックインされていないような。

=end

Actions #7

Updated by keiju (Keiju Ishitsuka) almost 13 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: <<---

=end

Actions

Also available in: Atom PDF