diff options
author | Cody Cutrer <[email protected]> | 2021-03-16 15:45:45 -0600 |
---|---|---|
committer | git <[email protected]> | 2021-04-03 00:49:29 +0900 |
commit | 3cab8c087f0093f2d4669c283be30d01f8e17d5d (patch) | |
tree | f33cedacd01cd3596c9914eea32f28e3ce54572b /lib | |
parent | 7e93917458cdc67399e82233ff0f13e3c8bd7065 (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')
-rw-r--r-- | lib/irb/input-method.rb | 8 |
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 |