summaryrefslogtreecommitdiff
path: root/lib/irb
diff options
context:
space:
mode:
authorCody Cutrer <cody@instructure.com>2021-03-16 15:45:45 -0600
committergit <svn-admin@ruby-lang.org>2021-04-03 00:49:29 +0900
commit3cab8c087f0093f2d4669c283be30d01f8e17d5d (patch)
treef33cedacd01cd3596c9914eea32f28e3ce54572b /lib/irb
parent7e93917458cdc67399e82233ff0f13e3c8bd7065 (diff)
[ruby/irb] process multi-line pastes as a single entity
this allows pasting leading-dot chained methods correctly: ```ruby class A def a; self; end def b; true; end end a = A.new a .a .b ``` will properly return `true` instead of erroring on the `.a` line: ``` irb(main):001:1* class A irb(main):002:1* def a; self; end irb(main):003:0> end irb(main):004:0* irb(main):005:0> a = A.new irb(main):006:0* irb(main):007:0> a irb(main):008:0> .a irb(main):009:0> .a => #<A:0x00007f984211fbe8> ``` https://github.com/ruby/irb/commit/45aeb52575
Diffstat (limited to 'lib/irb')
-rw-r--r--lib/irb/input-method.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb
index 1854567a2d..df73ceec5b 100644
--- a/lib/irb/input-method.rb
+++ b/lib/irb/input-method.rb
@@ -316,7 +316,13 @@ module IRB
Reline.output = @stdout
Reline.prompt_proc = @prompt_proc
Reline.auto_indent_proc = @auto_indent_proc if @auto_indent_proc
- if l = readmultiline(@prompt, false, &@check_termination_proc)
+
+ l = readmultiline(@prompt, false) do |line|
+ next false if Reline::IOGate.in_pasting?
+ @check_termination_proc.call(line)
+ end
+
+ if l
HISTORY.push(l) if !l.empty?
@line[@line_no += 1] = l + "\n"
else