irb 1.3.6 → 1.4.1
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/Gemfile +3 -5
- data/Rakefile +10 -1
- data/doc/irb/irb.rd.ja +30 -14
- data/irb.gemspec +1 -1
- data/lib/irb/cmd/help.rb +2 -1
- data/lib/irb/cmd/info.rb +7 -0
- data/lib/irb/cmd/ls.rb +9 -15
- data/lib/irb/cmd/measure.rb +3 -0
- data/lib/irb/cmd/show_source.rb +11 -4
- data/lib/irb/completion.rb +57 -17
- data/lib/irb/context.rb +37 -9
- data/lib/irb/init.rb +9 -0
- data/lib/irb/input-method.rb +100 -1
- data/lib/irb/lc/help-message +10 -1
- data/lib/irb/lc/ja/help-message +2 -0
- data/lib/irb/ruby-lex.rb +151 -92
- data/lib/irb/version.rb +2 -2
- data/lib/irb/workspace.rb +3 -0
- data/lib/irb.rb +21 -6
- data/man/irb.1 +23 -1
- metadata +9 -9
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:
|
@@ -264,7 +265,8 @@ module IRB
|
|
264
265
|
|
265
266
|
class ReidlineInputMethod < InputMethod
|
266
267
|
include Reline
|
267
|
-
|
268
|
+
|
269
|
+
# Creates a new input method object using Reline
|
268
270
|
def initialize
|
269
271
|
IRB.__send__(:set_encoding, Reline.encoding_system_needs.name, override: false)
|
270
272
|
super
|
@@ -294,6 +296,10 @@ module IRB
|
|
294
296
|
end
|
295
297
|
end
|
296
298
|
Reline.dig_perfect_match_proc = IRB::InputCompletor::PerfectMatchedProc
|
299
|
+
Reline.autocompletion = IRB.conf[:USE_AUTOCOMPLETE]
|
300
|
+
if IRB.conf[:USE_AUTOCOMPLETE]
|
301
|
+
Reline.add_dialog_proc(:show_doc, SHOW_DOC_DIALOG, Reline::DEFAULT_DIALOG_CONTEXT)
|
302
|
+
end
|
297
303
|
end
|
298
304
|
|
299
305
|
def check_termination(&block)
|
@@ -308,6 +314,99 @@ module IRB
|
|
308
314
|
@auto_indent_proc = block
|
309
315
|
end
|
310
316
|
|
317
|
+
SHOW_DOC_DIALOG = ->() {
|
318
|
+
dialog.trap_key = nil
|
319
|
+
alt_d = [
|
320
|
+
[Reline::Key.new(nil, 0xE4, true)], # Normal Alt+d.
|
321
|
+
[27, 100], # Normal Alt+d when convert-meta isn't used.
|
322
|
+
[195, 164], # The "ä" that appears when Alt+d is pressed on xterm.
|
323
|
+
[226, 136, 130] # The "∂" that appears when Alt+d in pressed on iTerm2.
|
324
|
+
]
|
325
|
+
|
326
|
+
if just_cursor_moving and completion_journey_data.nil?
|
327
|
+
return nil
|
328
|
+
end
|
329
|
+
cursor_pos_to_render, result, pointer, autocomplete_dialog = context.pop(4)
|
330
|
+
return nil if result.nil? or pointer.nil? or pointer < 0
|
331
|
+
name = result[pointer]
|
332
|
+
name = IRB::InputCompletor.retrieve_completion_data(name, doc_namespace: true)
|
333
|
+
|
334
|
+
options = {}
|
335
|
+
options[:extra_doc_dirs] = IRB.conf[:EXTRA_DOC_DIRS] unless IRB.conf[:EXTRA_DOC_DIRS].empty?
|
336
|
+
driver = RDoc::RI::Driver.new(options)
|
337
|
+
|
338
|
+
if key.match?(dialog.name)
|
339
|
+
begin
|
340
|
+
driver.display_names([name])
|
341
|
+
rescue RDoc::RI::Driver::NotFoundError
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
begin
|
346
|
+
name = driver.expand_name(name)
|
347
|
+
rescue RDoc::RI::Driver::NotFoundError
|
348
|
+
return nil
|
349
|
+
rescue
|
350
|
+
return nil # unknown error
|
351
|
+
end
|
352
|
+
doc = nil
|
353
|
+
used_for_class = false
|
354
|
+
if not name =~ /#|\./
|
355
|
+
found, klasses, includes, extends = driver.classes_and_includes_and_extends_for(name)
|
356
|
+
if not found.empty?
|
357
|
+
doc = driver.class_document(name, found, klasses, includes, extends)
|
358
|
+
used_for_class = true
|
359
|
+
end
|
360
|
+
end
|
361
|
+
unless used_for_class
|
362
|
+
doc = RDoc::Markup::Document.new
|
363
|
+
begin
|
364
|
+
driver.add_method(doc, name)
|
365
|
+
rescue RDoc::RI::Driver::NotFoundError
|
366
|
+
doc = nil
|
367
|
+
rescue
|
368
|
+
return nil # unknown error
|
369
|
+
end
|
370
|
+
end
|
371
|
+
return nil if doc.nil?
|
372
|
+
width = 40
|
373
|
+
|
374
|
+
right_x = cursor_pos_to_render.x + autocomplete_dialog.width
|
375
|
+
if right_x + width > screen_width
|
376
|
+
right_width = screen_width - (right_x + 1)
|
377
|
+
left_x = autocomplete_dialog.column - width
|
378
|
+
left_x = 0 if left_x < 0
|
379
|
+
left_width = width > autocomplete_dialog.column ? autocomplete_dialog.column : width
|
380
|
+
if right_width.positive? and left_width.positive?
|
381
|
+
if right_width >= left_width
|
382
|
+
width = right_width
|
383
|
+
x = right_x
|
384
|
+
else
|
385
|
+
width = left_width
|
386
|
+
x = left_x
|
387
|
+
end
|
388
|
+
elsif right_width.positive? and left_width <= 0
|
389
|
+
width = right_width
|
390
|
+
x = right_x
|
391
|
+
elsif right_width <= 0 and left_width.positive?
|
392
|
+
width = left_width
|
393
|
+
x = left_x
|
394
|
+
else # Both are negative width.
|
395
|
+
return nil
|
396
|
+
end
|
397
|
+
else
|
398
|
+
x = right_x
|
399
|
+
end
|
400
|
+
formatter = RDoc::Markup::ToAnsi.new
|
401
|
+
formatter.width = width
|
402
|
+
dialog.trap_key = alt_d
|
403
|
+
message = 'Press Alt+d to read the full document'
|
404
|
+
contents = [message] + doc.accept(formatter).split("\n")
|
405
|
+
|
406
|
+
y = cursor_pos_to_render.y
|
407
|
+
DialogRenderInfo.new(pos: Reline::CursorPos.new(x, y), contents: contents, width: width, bg_color: '49')
|
408
|
+
}
|
409
|
+
|
311
410
|
# Reads the next line from this input method.
|
312
411
|
#
|
313
412
|
# See IO#gets for more information.
|
data/lib/irb/lc/help-message
CHANGED
@@ -20,8 +20,15 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
20
20
|
-W[level=2] Same as `ruby -W`
|
21
21
|
--context-mode n Set n[0-4] to method to create Binding Object,
|
22
22
|
when new workspace was created
|
23
|
-
--
|
23
|
+
--extra-doc-dir Add an extra doc dir for the doc dialog
|
24
|
+
--echo Show result (default)
|
24
25
|
--noecho Don't show result
|
26
|
+
--echo-on-assignment
|
27
|
+
Show result on assignment
|
28
|
+
--noecho-on-assignment
|
29
|
+
Don't show result on assignment
|
30
|
+
--truncate-echo-on-assignment
|
31
|
+
Show truncated result on assignment (default)
|
25
32
|
--inspect Use `inspect' for output
|
26
33
|
--noinspect Don't use inspect for output
|
27
34
|
--multiline Use multiline editor module
|
@@ -30,6 +37,8 @@ Usage: irb.rb [options] [programfile] [arguments]
|
|
30
37
|
--nosingleline Don't use singleline editor module
|
31
38
|
--colorize Use colorization
|
32
39
|
--nocolorize Don't use colorization
|
40
|
+
--autocomplete Use autocompletion
|
41
|
+
--noautocomplete Don't use autocompletion
|
33
42
|
--prompt prompt-mode/--prompt-mode prompt-mode
|
34
43
|
Switch prompt mode. Pre-defined prompt modes are
|
35
44
|
`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が
|