irb 1.3.6 → 1.3.8.pre.3
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/doc/irb/irb.rd.ja +24 -14
- data/irb.gemspec +1 -1
- data/lib/irb/cmd/info.rb +6 -0
- data/lib/irb/cmd/ls.rb +9 -15
- data/lib/irb/cmd/measure.rb +3 -0
- data/lib/irb/cmd/show_source.rb +13 -3
- data/lib/irb/context.rb +5 -0
- data/lib/irb/init.rb +5 -0
- data/lib/irb/input-method.rb +54 -0
- data/lib/irb/lc/help-message +2 -0
- data/lib/irb/lc/ja/help-message +2 -0
- data/lib/irb/ruby-lex.rb +33 -18
- data/lib/irb/version.rb +2 -2
- data/lib/irb.rb +4 -1
- data/man/irb.1 +8 -0
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24e47cee826906315d012e38c51e586295517aa5973cb581bdd69565013eb4fd
|
4
|
+
data.tar.gz: a18f6ca335c55748a79d3670fec5bba5125ca0c413f9aead0a1b6552ce4dd8b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e869bf3f5e4cfaba313977894f5632485fc0757c9d353cff96ce17b4734b56d1050e76a5716090940a7ddb072f8a223711891038b56a4f9415950b3d68e0de8
|
7
|
+
data.tar.gz: d872b90f23591f57fce7d3c7d9be345aa6e4441c561817504f85dddf08fff8a7c3512157c375ccc5e2cd94c812161bd06ef315b6c834ae4e97c90da8957fb91b
|
data/doc/irb/irb.rd.ja
CHANGED
@@ -40,15 +40,18 @@ irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本
|
|
40
40
|
irb.rb [options] file_name opts
|
41
41
|
options:
|
42
42
|
-f ~/.irbrc を読み込まない.
|
43
|
-
-m bcモード(分数, 行列の計算ができる)
|
44
43
|
-d $DEBUG をtrueにする(ruby -d と同じ)
|
45
|
-
-Kc ruby -Kcと同じ
|
46
44
|
-r load-module ruby -r と同じ.
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
45
|
+
-I path $LOAD_PATH に path を追加する.
|
46
|
+
-U ruby -U と同じ.
|
47
|
+
-E enc ruby -E と同じ.
|
48
|
+
-w ruby -w と同じ.
|
49
|
+
-W[level=2] ruby -W と同じ.
|
50
|
+
--context-mode n 新しいワークスペースを作成した時に関連する Binding
|
51
|
+
オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
|
52
|
+
--echo 実行結果を表示する(デフォルト).
|
53
|
+
--noecho 実行結果を表示しない.
|
54
|
+
--inspect 結果出力にinspectを用いる.
|
52
55
|
--noinspect 結果出力にinspectを用いない.
|
53
56
|
--singleline シングルラインエディタを利用する.
|
54
57
|
--nosingleline シングルラインエディタを利用しない. デフォルトの動
|
@@ -56,23 +59,30 @@ irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本
|
|
56
59
|
用しようとする.
|
57
60
|
--colorize 色付けを利用する.
|
58
61
|
--nocolorize 色付けを利用しない.
|
62
|
+
--autocomplete オートコンプリートを利用する.
|
63
|
+
--noautocomplete オートコンプリートを利用しない.
|
59
64
|
--prompt prompt-mode
|
60
65
|
--prompt-mode prompt-mode
|
61
66
|
プロンプトモードを切替えます. 現在定義されているプ
|
62
67
|
ロンプトモードは, default, simple, xmp, inf-rubyが
|
63
|
-
用意されています.
|
64
|
-
ドになっています.
|
65
|
-
|
68
|
+
用意されています.
|
66
69
|
--inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特
|
67
70
|
に指定がない限り, ラインエディタは使わなくなる.
|
68
71
|
--simple-prompt
|
69
72
|
非常にシンプルなプロンプトを用いるモードです.
|
70
73
|
--noprompt プロンプト表示を行なわない.
|
74
|
+
--single-irb irb 中で self を実行して得られるオブジェクトをサ
|
75
|
+
ブ irb と共有する.
|
71
76
|
--tracer コマンド実行時にトレースを行なう.
|
72
77
|
--back-trace-limit n
|
73
78
|
バックトレース表示をバックトレースの頭から n, 後ろ
|
74
79
|
からnだけ行なう. デフォルトは16
|
75
|
-
|
80
|
+
|
81
|
+
--verbose 詳細なメッセージを出力する.
|
82
|
+
--noverbose 詳細なメッセージを出力しない(デフォルト).
|
83
|
+
-v, --version irbのバージョンを表示する.
|
84
|
+
-h, --help irb のヘルプを表示する.
|
85
|
+
-- 以降のコマンドライン引数をオプションとして扱わない.
|
76
86
|
|
77
87
|
= コンフィギュレーション
|
78
88
|
|
@@ -137,12 +147,12 @@ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cは, フォーマットを指定します.
|
|
137
147
|
|
138
148
|
例えば, デフォルトのプロンプトモードは:
|
139
149
|
|
140
|
-
IRB.conf[:
|
150
|
+
IRB.conf[:PROMPT][:DEFAULT] = {
|
141
151
|
:PROMPT_I => "%N(%m):%03n:%i> ",
|
142
152
|
:PROMPT_N => "%N(%m):%03n:%i> ",
|
143
153
|
:PROMPT_S => "%N(%m):%03n:%i%l ",
|
144
154
|
:PROMPT_C => "%N(%m):%03n:%i* ",
|
145
|
-
:RETURN => "%s\n"
|
155
|
+
:RETURN => "=> %s\n"
|
146
156
|
}
|
147
157
|
|
148
158
|
となっています.
|
@@ -374,7 +384,7 @@ rubyでは, 以下のプログラムはエラーになります.
|
|
374
384
|
パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に
|
375
385
|
なる(式が閉じる)と自動的に評価しているからです. 上記の例では,
|
376
386
|
|
377
|
-
|
387
|
+
eval "foo = 0"
|
378
388
|
|
379
389
|
を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で
|
380
390
|
変数fooは定義されているからです.
|
data/irb.gemspec
CHANGED
data/lib/irb/cmd/info.rb
CHANGED
@@ -14,6 +14,12 @@ module IRB
|
|
14
14
|
str += "InputMethod: #{IRB.CurrentContext.io.inspect}\n"
|
15
15
|
str += ".irbrc path: #{IRB.rc_file}\n" if File.exist?(IRB.rc_file)
|
16
16
|
str += "RUBY_PLATFORM: #{RUBY_PLATFORM}\n"
|
17
|
+
str += "LANG env: #{ENV["LANG"]}\n" if ENV["LANG"] && !ENV["LANG"].empty?
|
18
|
+
str += "LC_ALL env: #{ENV["LC_ALL"]}\n" if ENV["LC_ALL"] && !ENV["LC_ALL"].empty?
|
19
|
+
if RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
|
20
|
+
codepage = `chcp`.sub(/.*: (\d+)\n/, '\1')
|
21
|
+
str += "Code page: #{codepage}\n"
|
22
|
+
end
|
17
23
|
str
|
18
24
|
end
|
19
25
|
alias_method :to_s, :inspect
|
data/lib/irb/cmd/ls.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "reline"
|
4
|
-
require 'set'
|
5
4
|
require_relative "nop"
|
6
5
|
require_relative "../color"
|
7
6
|
|
@@ -17,32 +16,27 @@ module IRB
|
|
17
16
|
klass = (obj.class == Class || obj.class == Module ? obj : obj.class)
|
18
17
|
|
19
18
|
o.dump("constants", obj.constants) if obj.respond_to?(:constants)
|
20
|
-
|
21
|
-
dump_instance_methods(o, klass)
|
19
|
+
dump_methods(o, klass, obj)
|
22
20
|
o.dump("instance variables", obj.instance_variables)
|
23
21
|
o.dump("class variables", klass.class_variables)
|
24
22
|
o.dump("locals", locals)
|
25
23
|
end
|
26
24
|
|
27
|
-
def
|
28
|
-
|
25
|
+
def dump_methods(o, klass, obj)
|
26
|
+
singleton_class = begin obj.singleton_class; rescue TypeError; nil end
|
27
|
+
maps = class_method_map((singleton_class || klass).ancestors)
|
29
28
|
maps.each do |mod, methods|
|
30
|
-
name = mod ==
|
29
|
+
name = mod == singleton_class ? "#{klass}.methods" : "#{mod}#methods"
|
31
30
|
o.dump(name, methods)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
|
-
def dump_instance_methods(o, klass)
|
36
|
-
maps = class_method_map(klass.ancestors)
|
37
|
-
maps.each do |mod, methods|
|
38
|
-
o.dump("#{mod}#methods", methods)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
34
|
def class_method_map(classes)
|
43
|
-
dumped =
|
35
|
+
dumped = Array.new
|
44
36
|
classes.reject { |mod| mod >= Object }.map do |mod|
|
45
|
-
methods = mod.public_instance_methods(false).select
|
37
|
+
methods = mod.public_instance_methods(false).select do |m|
|
38
|
+
dumped.push(m) unless dumped.include?(m)
|
39
|
+
end
|
46
40
|
[mod, methods]
|
47
41
|
end.reverse
|
48
42
|
end
|
data/lib/irb/cmd/measure.rb
CHANGED
@@ -9,6 +9,9 @@ module IRB
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def execute(type = nil, arg = nil, &block)
|
12
|
+
# Please check IRB.init_config in lib/irb/init.rb that sets
|
13
|
+
# IRB.conf[:MEASURE_PROC] to register default "measure" methods,
|
14
|
+
# "measure :time" (abbreviated as "measure") and "measure :stackprof".
|
12
15
|
case type
|
13
16
|
when :off
|
14
17
|
IRB.conf[:MEASURE] = nil
|
data/lib/irb/cmd/show_source.rb
CHANGED
@@ -59,11 +59,21 @@ module IRB
|
|
59
59
|
def find_end(file, first_line)
|
60
60
|
return first_line unless File.exist?(file)
|
61
61
|
lex = RubyLex.new
|
62
|
+
lines = File.read(file).lines[(first_line - 1)..-1]
|
63
|
+
tokens = RubyLex.ripper_lex_without_warning(lines.join)
|
64
|
+
|
62
65
|
code = +""
|
63
|
-
|
64
|
-
|
66
|
+
prev_tokens = []
|
67
|
+
|
68
|
+
# chunk with line number
|
69
|
+
tokens.chunk { |tok| tok[0][0] }.each do |lnum, chunk|
|
70
|
+
code << lines[lnum]
|
71
|
+
prev_tokens.concat chunk
|
72
|
+
|
73
|
+
continue = lex.process_continue(prev_tokens)
|
74
|
+
code_block_open = lex.check_code_block(code, prev_tokens)
|
65
75
|
if !continue && !code_block_open
|
66
|
-
return first_line +
|
76
|
+
return first_line + lnum
|
67
77
|
end
|
68
78
|
end
|
69
79
|
first_line
|
data/lib/irb/context.rb
CHANGED
@@ -54,6 +54,7 @@ module IRB
|
|
54
54
|
@use_multiline = nil
|
55
55
|
end
|
56
56
|
@use_colorize = IRB.conf[:USE_COLORIZE]
|
57
|
+
@use_autocomplete = IRB.conf[:USE_AUTOCOMPLETE]
|
57
58
|
@verbose = IRB.conf[:VERBOSE]
|
58
59
|
@io = nil
|
59
60
|
|
@@ -185,6 +186,8 @@ module IRB
|
|
185
186
|
#
|
186
187
|
# A copy of the default <code>IRB.conf[:USE_COLORIZE]</code>
|
187
188
|
attr_reader :use_colorize
|
189
|
+
# A copy of the default <code>IRB.conf[:USE_AUTOCOMPLETE]</code>
|
190
|
+
attr_reader :use_autocomplete
|
188
191
|
# A copy of the default <code>IRB.conf[:INSPECT_MODE]</code>
|
189
192
|
attr_reader :inspect_mode
|
190
193
|
|
@@ -311,6 +314,8 @@ module IRB
|
|
311
314
|
alias use_readline? use_singleline
|
312
315
|
# Alias for #use_colorize
|
313
316
|
alias use_colorize? use_colorize
|
317
|
+
# Alias for #use_autocomplete
|
318
|
+
alias use_autocomplete? use_autocomplete
|
314
319
|
# Alias for #rc
|
315
320
|
alias rc? rc
|
316
321
|
alias ignore_sigint? ignore_sigint
|
data/lib/irb/init.rb
CHANGED
@@ -45,6 +45,7 @@ module IRB # :nodoc:
|
|
45
45
|
|
46
46
|
@CONF[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod)
|
47
47
|
@CONF[:USE_COLORIZE] = !ENV['NO_COLOR']
|
48
|
+
@CONF[:USE_AUTOCOMPLETE] = true
|
48
49
|
@CONF[:INSPECT_MODE] = true
|
49
50
|
@CONF[:USE_TRACER] = false
|
50
51
|
@CONF[:USE_LOADER] = false
|
@@ -274,6 +275,10 @@ module IRB # :nodoc:
|
|
274
275
|
@CONF[:USE_COLORIZE] = true
|
275
276
|
when "--nocolorize"
|
276
277
|
@CONF[:USE_COLORIZE] = false
|
278
|
+
when "--autocomplete"
|
279
|
+
@CONF[:USE_AUTOCOMPLETE] = true
|
280
|
+
when "--noautocomplete"
|
281
|
+
@CONF[:USE_AUTOCOMPLETE] = false
|
277
282
|
when /^--prompt-mode(?:=(.+))?/, /^--prompt(?:=(.+))?/
|
278
283
|
opt = $1 || argv.shift
|
279
284
|
prompt_mode = opt.upcase.tr("-", "_").intern
|
data/lib/irb/input-method.rb
CHANGED
@@ -14,6 +14,7 @@ require_relative 'magic-file'
|
|
14
14
|
require_relative 'completion'
|
15
15
|
require 'io/console'
|
16
16
|
require 'reline'
|
17
|
+
require 'rdoc'
|
17
18
|
|
18
19
|
module IRB
|
19
20
|
STDIN_FILE_NAME = "(line)" # :nodoc:
|
@@ -294,6 +295,10 @@ module IRB
|
|
294
295
|
end
|
295
296
|
end
|
296
297
|
Reline.dig_perfect_match_proc = IRB::InputCompletor::PerfectMatchedProc
|
298
|
+
Reline.autocompletion = IRB.conf[:USE_AUTOCOMPLETE]
|
299
|
+
if IRB.conf[:USE_AUTOCOMPLETE]
|
300
|
+
Reline.add_dialog_proc(:show_doc, SHOW_DOC_DIALOG, Reline::DEFAULT_DIALOG_CONTEXT)
|
301
|
+
end
|
297
302
|
end
|
298
303
|
|
299
304
|
def check_termination(&block)
|
@@ -308,6 +313,55 @@ module IRB
|
|
308
313
|
@auto_indent_proc = block
|
309
314
|
end
|
310
315
|
|
316
|
+
SHOW_DOC_DIALOG = ->() {
|
317
|
+
begin
|
318
|
+
require 'rdoc'
|
319
|
+
rescue LoadError
|
320
|
+
return nil
|
321
|
+
end
|
322
|
+
if just_cursor_moving and completion_journey_data.nil?
|
323
|
+
return nil
|
324
|
+
end
|
325
|
+
cursor_pos_to_render, result, pointer = context.pop(3)
|
326
|
+
return nil if result.nil? or pointer.nil?
|
327
|
+
name = result[pointer]
|
328
|
+
name = IRB::InputCompletor.retrieve_completion_data(name, doc_namespace: true)
|
329
|
+
|
330
|
+
driver = RDoc::RI::Driver.new
|
331
|
+
begin
|
332
|
+
name = driver.expand_name(name)
|
333
|
+
rescue RDoc::RI::Driver::NotFoundError
|
334
|
+
return nil
|
335
|
+
rescue
|
336
|
+
return nil # unknown error
|
337
|
+
end
|
338
|
+
doc = nil
|
339
|
+
used_for_class = false
|
340
|
+
if not name =~ /#|\./
|
341
|
+
found, klasses, includes, extends = driver.classes_and_includes_and_extends_for(name)
|
342
|
+
if not found.empty?
|
343
|
+
doc = driver.class_document(name, found, klasses, includes, extends)
|
344
|
+
used_for_class = true
|
345
|
+
end
|
346
|
+
end
|
347
|
+
unless used_for_class
|
348
|
+
doc = RDoc::Markup::Document.new
|
349
|
+
begin
|
350
|
+
driver.add_method(doc, name)
|
351
|
+
rescue RDoc::RI::Driver::NotFoundError
|
352
|
+
doc = nil
|
353
|
+
rescue
|
354
|
+
return nil # unknown error
|
355
|
+
end
|
356
|
+
end
|
357
|
+
return nil if doc.nil?
|
358
|
+
formatter = RDoc::Markup::ToAnsi.new
|
359
|
+
formatter.width = 40
|
360
|
+
str = doc.accept(formatter)
|
361
|
+
|
362
|
+
[Reline::CursorPos.new(cursor_pos_to_render.x + 40, cursor_pos_to_render.y + pointer), str.split("\n"), nil, '49']
|
363
|
+
}
|
364
|
+
|
311
365
|
# Reads the next line from this input method.
|
312
366
|
#
|
313
367
|
# See IO#gets for more information.
|
data/lib/irb/lc/help-message
CHANGED
@@ -30,6 +30,8 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
30
30
|
--nosingleline Don't use singleline editor module
|
31
31
|
--colorize Use colorization
|
32
32
|
--nocolorize Don't use colorization
|
33
|
+
--autocomplete Use autocompletion
|
34
|
+
--noautocomplete Don't use autocompletion
|
33
35
|
--prompt prompt-mode/--prompt-mode prompt-mode
|
34
36
|
Switch prompt mode. Pre-defined prompt modes are
|
35
37
|
`default', `simple', `xmp' and `inf-ruby'
|
data/lib/irb/lc/ja/help-message
CHANGED
@@ -29,6 +29,8 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
29
29
|
--nosingleline シングルラインエディタを利用しない.
|
30
30
|
--colorize 色付けを利用する.
|
31
31
|
--nocolorize 色付けを利用しない.
|
32
|
+
--autocomplete オートコンプリートを利用する.
|
33
|
+
--noautocomplete オートコンプリートを利用しない.
|
32
34
|
--prompt prompt-mode/--prompt-mode prompt-mode
|
33
35
|
プロンプトモードを切替えます. 現在定義されているプ
|
34
36
|
ロンプトモードは, default, simple, xmp, inf-rubyが
|
data/lib/irb/ruby-lex.rb
CHANGED
@@ -30,26 +30,31 @@ class RubyLex
|
|
30
30
|
@prompt = nil
|
31
31
|
end
|
32
32
|
|
33
|
-
def self.compile_with_errors_suppressed(code)
|
34
|
-
line_no = 1
|
33
|
+
def self.compile_with_errors_suppressed(code, line_no: 1)
|
35
34
|
begin
|
36
35
|
result = yield code, line_no
|
37
36
|
rescue ArgumentError
|
37
|
+
# Ruby can issue an error for the code if there is an
|
38
|
+
# incomplete magic comment for encoding in it. Force an
|
39
|
+
# expression with a new line before the code in this
|
40
|
+
# case to prevent magic comment handling. To make sure
|
41
|
+
# line numbers in the lexed code remain the same,
|
42
|
+
# decrease the line number by one.
|
38
43
|
code = ";\n#{code}"
|
39
|
-
line_no
|
44
|
+
line_no -= 1
|
40
45
|
result = yield code, line_no
|
41
46
|
end
|
42
47
|
result
|
43
48
|
end
|
44
49
|
|
45
50
|
# io functions
|
46
|
-
def set_input(io, p = nil, &block)
|
51
|
+
def set_input(io, p = nil, context: nil, &block)
|
47
52
|
@io = io
|
48
53
|
if @io.respond_to?(:check_termination)
|
49
54
|
@io.check_termination do |code|
|
50
55
|
if Reline::IOGate.in_pasting?
|
51
56
|
lex = RubyLex.new
|
52
|
-
rest = lex.check_termination_in_prev_line(code)
|
57
|
+
rest = lex.check_termination_in_prev_line(code, context: context)
|
53
58
|
if rest
|
54
59
|
Reline.delete_text
|
55
60
|
rest.bytes.reverse_each do |c|
|
@@ -61,7 +66,7 @@ class RubyLex
|
|
61
66
|
end
|
62
67
|
else
|
63
68
|
code.gsub!(/\s*\z/, '').concat("\n")
|
64
|
-
ltype, indent, continue, code_block_open = check_state(code)
|
69
|
+
ltype, indent, continue, code_block_open = check_state(code, context: context)
|
65
70
|
if ltype or indent > 0 or continue or code_block_open
|
66
71
|
false
|
67
72
|
else
|
@@ -74,7 +79,7 @@ class RubyLex
|
|
74
79
|
@io.dynamic_prompt do |lines|
|
75
80
|
lines << '' if lines.empty?
|
76
81
|
result = []
|
77
|
-
tokens = self.class.ripper_lex_without_warning(lines.map{ |l| l + "\n" }.join)
|
82
|
+
tokens = self.class.ripper_lex_without_warning(lines.map{ |l| l + "\n" }.join, context: context)
|
78
83
|
code = String.new
|
79
84
|
partial_tokens = []
|
80
85
|
unprocessed_tokens = []
|
@@ -86,7 +91,7 @@ class RubyLex
|
|
86
91
|
t_str = t[2]
|
87
92
|
t_str.each_line("\n") do |s|
|
88
93
|
code << s << "\n"
|
89
|
-
ltype, indent, continue, code_block_open = check_state(code, partial_tokens)
|
94
|
+
ltype, indent, continue, code_block_open = check_state(code, partial_tokens, context: context)
|
90
95
|
result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
|
91
96
|
line_num_offset += 1
|
92
97
|
end
|
@@ -96,7 +101,7 @@ class RubyLex
|
|
96
101
|
end
|
97
102
|
end
|
98
103
|
unless unprocessed_tokens.empty?
|
99
|
-
ltype, indent, continue, code_block_open = check_state(code, unprocessed_tokens)
|
104
|
+
ltype, indent, continue, code_block_open = check_state(code, unprocessed_tokens, context: context)
|
100
105
|
result << @prompt.call(ltype, indent, continue || code_block_open, @line_no + line_num_offset)
|
101
106
|
end
|
102
107
|
result
|
@@ -129,15 +134,25 @@ class RubyLex
|
|
129
134
|
:on_param_error
|
130
135
|
]
|
131
136
|
|
132
|
-
def self.ripper_lex_without_warning(code)
|
137
|
+
def self.ripper_lex_without_warning(code, context: nil)
|
133
138
|
verbose, $VERBOSE = $VERBOSE, nil
|
139
|
+
if context
|
140
|
+
lvars = context&.workspace&.binding&.local_variables
|
141
|
+
if lvars && !lvars.empty?
|
142
|
+
code = "#{lvars.join('=')}=nil\n#{code}"
|
143
|
+
line_no = 0
|
144
|
+
else
|
145
|
+
line_no = 1
|
146
|
+
end
|
147
|
+
end
|
134
148
|
tokens = nil
|
135
|
-
compile_with_errors_suppressed(code) do |inner_code, line_no|
|
149
|
+
compile_with_errors_suppressed(code, line_no: line_no) do |inner_code, line_no|
|
136
150
|
lexer = Ripper::Lexer.new(inner_code, '-', line_no)
|
137
151
|
if lexer.respond_to?(:scan) # Ruby 2.7+
|
138
152
|
tokens = []
|
139
153
|
pos_to_index = {}
|
140
154
|
lexer.scan.each do |t|
|
155
|
+
next if t.pos.first == 0
|
141
156
|
if pos_to_index.has_key?(t[0])
|
142
157
|
index = pos_to_index[t[0]]
|
143
158
|
found_tk = tokens[index]
|
@@ -182,7 +197,7 @@ class RubyLex
|
|
182
197
|
if @io.respond_to?(:auto_indent) and context.auto_indent_mode
|
183
198
|
@io.auto_indent do |lines, line_index, byte_pointer, is_newline|
|
184
199
|
if is_newline
|
185
|
-
@tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"))
|
200
|
+
@tokens = self.class.ripper_lex_without_warning(lines[0..line_index].join("\n"), context: context)
|
186
201
|
prev_spaces = find_prev_spaces(line_index)
|
187
202
|
depth_difference = check_newline_depth_difference
|
188
203
|
depth_difference = 0 if depth_difference < 0
|
@@ -191,7 +206,7 @@ class RubyLex
|
|
191
206
|
code = line_index.zero? ? '' : lines[0..(line_index - 1)].map{ |l| l + "\n" }.join
|
192
207
|
last_line = lines[line_index]&.byteslice(0, byte_pointer)
|
193
208
|
code += last_line if last_line
|
194
|
-
@tokens = self.class.ripper_lex_without_warning(code)
|
209
|
+
@tokens = self.class.ripper_lex_without_warning(code, context: context)
|
195
210
|
corresponding_token_depth = check_corresponding_token_depth
|
196
211
|
if corresponding_token_depth
|
197
212
|
corresponding_token_depth
|
@@ -203,8 +218,8 @@ class RubyLex
|
|
203
218
|
end
|
204
219
|
end
|
205
220
|
|
206
|
-
def check_state(code, tokens = nil)
|
207
|
-
tokens = self.class.ripper_lex_without_warning(code) unless tokens
|
221
|
+
def check_state(code, tokens = nil, context: nil)
|
222
|
+
tokens = self.class.ripper_lex_without_warning(code, context: context) unless tokens
|
208
223
|
ltype = process_literal_type(tokens)
|
209
224
|
indent = process_nesting_level(tokens)
|
210
225
|
continue = process_continue(tokens)
|
@@ -700,7 +715,7 @@ class RubyLex
|
|
700
715
|
start_token << t
|
701
716
|
end_type << :on_regexp_end
|
702
717
|
when :on_symbeg
|
703
|
-
acceptable_single_tokens = %i{on_ident on_const on_op on_cvar on_ivar on_gvar on_kw}
|
718
|
+
acceptable_single_tokens = %i{on_ident on_const on_op on_cvar on_ivar on_gvar on_kw on_int}
|
704
719
|
if (i + 1) < tokens.size and acceptable_single_tokens.all?{ |st| tokens[i + 1][1] != st }
|
705
720
|
start_token << t
|
706
721
|
end_type << :on_tstring_end
|
@@ -754,8 +769,8 @@ class RubyLex
|
|
754
769
|
end
|
755
770
|
end
|
756
771
|
|
757
|
-
def check_termination_in_prev_line(code)
|
758
|
-
tokens = self.class.ripper_lex_without_warning(code)
|
772
|
+
def check_termination_in_prev_line(code, context: nil)
|
773
|
+
tokens = self.class.ripper_lex_without_warning(code, context: context)
|
759
774
|
past_first_newline = false
|
760
775
|
index = tokens.rindex do |t|
|
761
776
|
# traverse first token before last line
|
data/lib/irb/version.rb
CHANGED
data/lib/irb.rb
CHANGED
@@ -72,6 +72,8 @@ require_relative "irb/easter-egg"
|
|
72
72
|
# --nosingleline Don't use singleline editor module
|
73
73
|
# --colorize Use colorization
|
74
74
|
# --nocolorize Don't use colorization
|
75
|
+
# --autocomplete Use autocompletion
|
76
|
+
# --noautocomplete Don't use autocompletion
|
75
77
|
# --prompt prompt-mode/--prompt-mode prompt-mode
|
76
78
|
# Switch prompt mode. Pre-defined prompt modes are
|
77
79
|
# `default', `simple', `xmp' and `inf-ruby'
|
@@ -114,6 +116,7 @@ require_relative "irb/easter-egg"
|
|
114
116
|
# IRB.conf[:USE_SINGLELINE] = nil
|
115
117
|
# IRB.conf[:USE_COLORIZE] = true
|
116
118
|
# IRB.conf[:USE_TRACER] = false
|
119
|
+
# IRB.conf[:USE_AUTOCOMPLETE] = true
|
117
120
|
# IRB.conf[:IGNORE_SIGINT] = true
|
118
121
|
# IRB.conf[:IGNORE_EOF] = false
|
119
122
|
# IRB.conf[:PROMPT_MODE] = :DEFAULT
|
@@ -524,7 +527,7 @@ module IRB
|
|
524
527
|
@context.io.prompt
|
525
528
|
end
|
526
529
|
|
527
|
-
@scanner.set_input(@context.io) do
|
530
|
+
@scanner.set_input(@context.io, context: @context) do
|
528
531
|
signal_status(:IN_INPUT) do
|
529
532
|
if l = @context.io.gets
|
530
533
|
print l if @context.verbose?
|
data/man/irb.1
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
.Op Fl - Ns Oo no Oc Ns singleline
|
19
19
|
.Op Fl - Ns Oo no Oc Ns echo
|
20
20
|
.Op Fl - Ns Oo no Oc Ns colorize
|
21
|
+
.Op Fl - Ns Oo no Oc Ns autocomplete
|
21
22
|
.Op Fl - Ns Oo no Oc Ns verbose
|
22
23
|
.Op Fl -prompt Ar mode
|
23
24
|
.Op Fl -prompt-mode Ar mode
|
@@ -118,6 +119,13 @@ Use colorization.
|
|
118
119
|
Don't use colorization.
|
119
120
|
.Pp
|
120
121
|
.Pp
|
122
|
+
.It Fl -autocomplete
|
123
|
+
Use autocompletion.
|
124
|
+
.Pp
|
125
|
+
.It Fl -noautocomplete
|
126
|
+
Don't use autocompletion.
|
127
|
+
.Pp
|
128
|
+
.Pp
|
121
129
|
.It Fl -verbose
|
122
130
|
Show details.
|
123
131
|
.Pp
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.8.pre.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keiju ISHITSUKA
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reline
|
15
|
-
prerelease: false
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
16
|
requirements:
|
18
17
|
- - ">="
|
19
18
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.2.
|
19
|
+
version: 0.2.8.pre.3
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.2.
|
26
|
+
version: 0.2.8.pre.3
|
27
27
|
description: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
28
28
|
email:
|
29
29
|
- keiju@ruby-lang.org
|
@@ -97,7 +97,7 @@ licenses:
|
|
97
97
|
- Ruby
|
98
98
|
- BSD-2-Clause
|
99
99
|
metadata: {}
|
100
|
-
post_install_message:
|
100
|
+
post_install_message:
|
101
101
|
rdoc_options: []
|
102
102
|
require_paths:
|
103
103
|
- lib
|
@@ -108,12 +108,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '2.5'
|
109
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- - "
|
111
|
+
- - ">"
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version:
|
113
|
+
version: 1.3.1
|
114
114
|
requirements: []
|
115
|
-
rubygems_version: 3.
|
116
|
-
signing_key:
|
115
|
+
rubygems_version: 3.2.22
|
116
|
+
signing_key:
|
117
117
|
specification_version: 4
|
118
118
|
summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
119
119
|
test_files: []
|