irb 1.7.1 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.document +1 -1
- data/Gemfile +10 -1
- data/README.md +265 -20
- data/Rakefile +13 -10
- data/doc/irb/irb.rd.ja +1 -3
- data/irb.gemspec +2 -1
- data/lib/irb/cmd/nop.rb +3 -52
- data/lib/irb/color.rb +4 -2
- data/lib/irb/command/backtrace.rb +17 -0
- data/lib/irb/command/base.rb +62 -0
- data/lib/irb/command/break.rb +17 -0
- data/lib/irb/command/catch.rb +17 -0
- data/lib/irb/command/chws.rb +40 -0
- data/lib/irb/command/context.rb +16 -0
- data/lib/irb/{cmd → command}/continue.rb +3 -3
- data/lib/irb/command/debug.rb +71 -0
- data/lib/irb/{cmd → command}/delete.rb +3 -3
- data/lib/irb/command/disable_irb.rb +19 -0
- data/lib/irb/command/edit.rb +63 -0
- data/lib/irb/command/exit.rb +18 -0
- data/lib/irb/{cmd → command}/finish.rb +3 -3
- data/lib/irb/command/force_exit.rb +18 -0
- data/lib/irb/command/help.rb +83 -0
- data/lib/irb/command/history.rb +45 -0
- data/lib/irb/command/info.rb +17 -0
- data/lib/irb/command/internal_helpers.rb +27 -0
- data/lib/irb/{cmd → command}/irb_info.rb +7 -7
- data/lib/irb/{cmd → command}/load.rb +23 -8
- data/lib/irb/{cmd → command}/ls.rb +42 -19
- data/lib/irb/{cmd → command}/measure.rb +18 -17
- data/lib/irb/{cmd → command}/next.rb +3 -3
- data/lib/irb/command/pushws.rb +65 -0
- data/lib/irb/command/show_doc.rb +51 -0
- data/lib/irb/command/show_source.rb +74 -0
- data/lib/irb/{cmd → command}/step.rb +3 -3
- data/lib/irb/command/subirb.rb +123 -0
- data/lib/irb/{cmd → command}/whereami.rb +3 -5
- data/lib/irb/command.rb +23 -0
- data/lib/irb/completion.rb +133 -102
- data/lib/irb/context.rb +182 -66
- data/lib/irb/debug/ui.rb +103 -0
- data/lib/irb/{cmd/debug.rb → debug.rb} +53 -59
- data/lib/irb/default_commands.rb +265 -0
- data/lib/irb/easter-egg.rb +16 -6
- data/lib/irb/ext/change-ws.rb +6 -8
- data/lib/irb/ext/{history.rb → eval_history.rb} +7 -7
- data/lib/irb/ext/loader.rb +4 -4
- data/lib/irb/ext/multi-irb.rb +5 -5
- data/lib/irb/ext/tracer.rb +12 -51
- data/lib/irb/ext/use-loader.rb +6 -8
- data/lib/irb/ext/workspaces.rb +10 -34
- data/lib/irb/frame.rb +1 -1
- data/lib/irb/help.rb +3 -3
- data/lib/irb/helper_method/base.rb +16 -0
- data/lib/irb/helper_method/conf.rb +11 -0
- data/lib/irb/helper_method.rb +29 -0
- data/lib/irb/{ext/save-history.rb → history.rb} +20 -58
- data/lib/irb/init.rb +154 -58
- data/lib/irb/input-method.rb +238 -203
- data/lib/irb/inspector.rb +3 -3
- data/lib/irb/lc/error.rb +1 -11
- data/lib/irb/lc/help-message +4 -0
- data/lib/irb/lc/ja/error.rb +1 -11
- data/lib/irb/lc/ja/help-message +13 -0
- data/lib/irb/locale.rb +2 -2
- data/lib/irb/nesting_parser.rb +13 -3
- data/lib/irb/notifier.rb +1 -1
- data/lib/irb/output-method.rb +2 -8
- data/lib/irb/pager.rb +91 -0
- data/lib/irb/ruby-lex.rb +391 -471
- data/lib/irb/ruby_logo.aa +43 -0
- data/lib/irb/source_finder.rb +139 -0
- data/lib/irb/statement.rb +80 -0
- data/lib/irb/version.rb +3 -3
- data/lib/irb/workspace.rb +24 -4
- data/lib/irb/ws-for-case-2.rb +1 -1
- data/lib/irb/xmp.rb +3 -3
- data/lib/irb.rb +1232 -604
- data/man/irb.1 +7 -0
- metadata +60 -32
- data/lib/irb/cmd/backtrace.rb +0 -21
- data/lib/irb/cmd/break.rb +0 -21
- data/lib/irb/cmd/catch.rb +0 -21
- data/lib/irb/cmd/chws.rb +0 -36
- data/lib/irb/cmd/edit.rb +0 -61
- data/lib/irb/cmd/help.rb +0 -23
- data/lib/irb/cmd/info.rb +0 -21
- data/lib/irb/cmd/pushws.rb +0 -45
- data/lib/irb/cmd/show_cmds.rb +0 -39
- data/lib/irb/cmd/show_doc.rb +0 -48
- data/lib/irb/cmd/show_source.rb +0 -113
- data/lib/irb/cmd/subirb.rb +0 -66
- data/lib/irb/extend-command.rb +0 -356
- data/lib/irb/src_encoding.rb +0 -7
data/lib/irb/lc/ja/error.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/lc/ja/error.rb -
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -12,11 +12,6 @@ module IRB
|
|
12
12
|
super("スイッチ(#{val})が分りません")
|
13
13
|
end
|
14
14
|
end
|
15
|
-
class NotImplementedError < StandardError
|
16
|
-
def initialize(val)
|
17
|
-
super("`#{val}'の定義が必要です")
|
18
|
-
end
|
19
|
-
end
|
20
15
|
class CantReturnToNormalMode < StandardError
|
21
16
|
def initialize
|
22
17
|
super("Normalモードに戻れません.")
|
@@ -52,11 +47,6 @@ module IRB
|
|
52
47
|
super("プロンプトモード(#{val})は定義されていません.")
|
53
48
|
end
|
54
49
|
end
|
55
|
-
class IllegalRCGenerator < StandardError
|
56
|
-
def initialize
|
57
|
-
super("RC_NAME_GENERATORが正しく定義されていません.")
|
58
|
-
end
|
59
|
-
end
|
60
50
|
|
61
51
|
# :startdoc:
|
62
52
|
end
|
data/lib/irb/lc/ja/help-message
CHANGED
@@ -9,10 +9,18 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
9
9
|
-W[level=2] ruby -W と同じ.
|
10
10
|
--context-mode n 新しいワークスペースを作成した時に関連する Binding
|
11
11
|
オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
|
12
|
+
--extra-doc-dir 指定したディレクトリのドキュメントを追加で読み込む.
|
12
13
|
--echo 実行結果を表示する(デフォルト).
|
13
14
|
--noecho 実行結果を表示しない.
|
15
|
+
--echo-on-assignment
|
16
|
+
代入結果を表示する.
|
17
|
+
--noecho-on-assignment
|
18
|
+
代入結果を表示しない.
|
19
|
+
--truncate-echo-on-assignment
|
20
|
+
truncateされた代入結果を表示する(デフォルト).
|
14
21
|
--inspect 結果出力にinspectを用いる.
|
15
22
|
--noinspect 結果出力にinspectを用いない.
|
23
|
+
--no-pager ページャを使用しない.
|
16
24
|
--multiline マルチラインエディタを利用する.
|
17
25
|
--nomultiline マルチラインエディタを利用しない.
|
18
26
|
--singleline シングルラインエディタを利用する.
|
@@ -21,6 +29,9 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
21
29
|
--nocolorize 色付けを利用しない.
|
22
30
|
--autocomplete オートコンプリートを利用する.
|
23
31
|
--noautocomplete オートコンプリートを利用しない.
|
32
|
+
--regexp-completor
|
33
|
+
補完に正規表現を利用する.
|
34
|
+
--type-completor 補完に型情報を利用する.
|
24
35
|
--prompt prompt-mode/--prompt-mode prompt-mode
|
25
36
|
プロンプトモードを切替えます. 現在定義されているプ
|
26
37
|
ロンプトモードは, default, simple, xmp, inf-rubyが
|
@@ -31,6 +42,8 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
31
42
|
--sample-book-mode/--simple-prompt
|
32
43
|
非常にシンプルなプロンプトを用いるモードです.
|
33
44
|
--noprompt プロンプト表示を行なわない.
|
45
|
+
--script スクリプトモード(最初の引数をスクリプトファイルとして扱う、デフォルト)
|
46
|
+
--noscript 引数をargvとして扱う.
|
34
47
|
--single-irb irb 中で self を実行して得られるオブジェクトをサ
|
35
48
|
ブ irb と共有する.
|
36
49
|
--tracer コマンド実行時にトレースを行なう.
|
data/lib/irb/locale.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# irb/locale.rb - internationalization module
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -94,7 +94,7 @@ module IRB # :nodoc:
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
def find(file
|
97
|
+
def find(file, paths = $:)
|
98
98
|
dir = File.dirname(file)
|
99
99
|
dir = "" if dir == "."
|
100
100
|
base = File.basename(file)
|
data/lib/irb/nesting_parser.rb
CHANGED
@@ -12,6 +12,8 @@ module IRB
|
|
12
12
|
skip = false
|
13
13
|
last_tok, state, args = opens.last
|
14
14
|
case state
|
15
|
+
when :in_alias_undef
|
16
|
+
skip = t.event == :on_kw
|
15
17
|
when :in_unquoted_symbol
|
16
18
|
unless IGNORE_TOKENS.include?(t.event)
|
17
19
|
opens.pop
|
@@ -61,17 +63,17 @@ module IRB
|
|
61
63
|
if args.include?(:arg)
|
62
64
|
case t.event
|
63
65
|
when :on_nl, :on_semicolon
|
64
|
-
# def
|
66
|
+
# def receiver.f;
|
65
67
|
body = :normal
|
66
68
|
when :on_lparen
|
67
|
-
# def
|
69
|
+
# def receiver.f()
|
68
70
|
next_args << :eq
|
69
71
|
else
|
70
72
|
if t.event == :on_op && t.tok == '='
|
71
73
|
# def receiver.f =
|
72
74
|
body = :oneliner
|
73
75
|
else
|
74
|
-
# def
|
76
|
+
# def receiver.f arg
|
75
77
|
next_args << :arg_without_paren
|
76
78
|
end
|
77
79
|
end
|
@@ -130,6 +132,10 @@ module IRB
|
|
130
132
|
opens.pop
|
131
133
|
opens << [t, nil]
|
132
134
|
end
|
135
|
+
when 'alias'
|
136
|
+
opens << [t, :in_alias_undef, 2]
|
137
|
+
when 'undef'
|
138
|
+
opens << [t, :in_alias_undef, 1]
|
133
139
|
when 'elsif', 'else', 'when'
|
134
140
|
opens.pop
|
135
141
|
opens << [t, nil]
|
@@ -174,6 +180,10 @@ module IRB
|
|
174
180
|
pending_heredocs.reverse_each { |t| opens << [t, nil] }
|
175
181
|
pending_heredocs = []
|
176
182
|
end
|
183
|
+
if opens.last && opens.last[1] == :in_alias_undef && !IGNORE_TOKENS.include?(t.event) && t.event != :on_heredoc_end
|
184
|
+
tok, state, arg = opens.pop
|
185
|
+
opens << [tok, state, arg - 1] if arg >= 1
|
186
|
+
end
|
177
187
|
yield t, opens if block_given?
|
178
188
|
end
|
179
189
|
opens.map(&:first) + pending_heredocs.reverse
|
data/lib/irb/notifier.rb
CHANGED
data/lib/irb/output-method.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# output-method.rb - output methods used by irb
|
4
4
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
@@ -9,16 +9,10 @@ module IRB
|
|
9
9
|
# IRB::Notifier. You can define your own output method to use with Irb.new,
|
10
10
|
# or Context.new
|
11
11
|
class OutputMethod
|
12
|
-
class NotImplementedError < StandardError
|
13
|
-
def initialize(val)
|
14
|
-
super("Need to define `#{val}'")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
12
|
# Open this method to implement your own output method, raises a
|
19
13
|
# NotImplementedError if you don't define #print in your own class.
|
20
14
|
def print(*opts)
|
21
|
-
raise NotImplementedError
|
15
|
+
raise NotImplementedError
|
22
16
|
end
|
23
17
|
|
24
18
|
# Prints the given +opts+, with a newline delimiter.
|
data/lib/irb/pager.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IRB
|
4
|
+
# The implementation of this class is borrowed from RDoc's lib/rdoc/ri/driver.rb.
|
5
|
+
# Please do NOT use this class directly outside of IRB.
|
6
|
+
class Pager
|
7
|
+
PAGE_COMMANDS = [ENV['RI_PAGER'], ENV['PAGER'], 'less', 'more'].compact.uniq
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def page_content(content, **options)
|
11
|
+
if content_exceeds_screen_height?(content)
|
12
|
+
page(**options) do |io|
|
13
|
+
io.puts content
|
14
|
+
end
|
15
|
+
else
|
16
|
+
$stdout.puts content
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def page(retain_content: false)
|
21
|
+
if should_page? && pager = setup_pager(retain_content: retain_content)
|
22
|
+
begin
|
23
|
+
pid = pager.pid
|
24
|
+
yield pager
|
25
|
+
ensure
|
26
|
+
pager.close
|
27
|
+
end
|
28
|
+
else
|
29
|
+
yield $stdout
|
30
|
+
end
|
31
|
+
# When user presses Ctrl-C, IRB would raise `IRB::Abort`
|
32
|
+
# But since Pager is implemented by running paging commands like `less` in another process with `IO.popen`,
|
33
|
+
# the `IRB::Abort` exception only interrupts IRB's execution but doesn't affect the pager
|
34
|
+
# So to properly terminate the pager with Ctrl-C, we need to catch `IRB::Abort` and kill the pager process
|
35
|
+
rescue IRB::Abort
|
36
|
+
Process.kill("TERM", pid) if pid
|
37
|
+
nil
|
38
|
+
rescue Errno::EPIPE
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def should_page?
|
44
|
+
IRB.conf[:USE_PAGER] && STDIN.tty? && (ENV.key?("TERM") && ENV["TERM"] != "dumb")
|
45
|
+
end
|
46
|
+
|
47
|
+
def content_exceeds_screen_height?(content)
|
48
|
+
screen_height, screen_width = begin
|
49
|
+
Reline.get_screen_size
|
50
|
+
rescue Errno::EINVAL
|
51
|
+
[24, 80]
|
52
|
+
end
|
53
|
+
|
54
|
+
pageable_height = screen_height - 3 # leave some space for previous and the current prompt
|
55
|
+
|
56
|
+
# If the content has more lines than the pageable height
|
57
|
+
content.lines.count > pageable_height ||
|
58
|
+
# Or if the content is a few long lines
|
59
|
+
pageable_height * screen_width < Reline::Unicode.calculate_width(content, true)
|
60
|
+
end
|
61
|
+
|
62
|
+
def setup_pager(retain_content:)
|
63
|
+
require 'shellwords'
|
64
|
+
|
65
|
+
PAGE_COMMANDS.each do |pager_cmd|
|
66
|
+
cmd = Shellwords.split(pager_cmd)
|
67
|
+
next if cmd.empty?
|
68
|
+
|
69
|
+
if cmd.first == 'less'
|
70
|
+
cmd << '-R' unless cmd.include?('-R')
|
71
|
+
cmd << '-X' if retain_content && !cmd.include?('-X')
|
72
|
+
end
|
73
|
+
|
74
|
+
begin
|
75
|
+
io = IO.popen(cmd, 'w')
|
76
|
+
rescue
|
77
|
+
next
|
78
|
+
end
|
79
|
+
|
80
|
+
if $? && $?.pid == io.pid && $?.exited? # pager didn't work
|
81
|
+
next
|
82
|
+
end
|
83
|
+
|
84
|
+
return io
|
85
|
+
end
|
86
|
+
|
87
|
+
nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|