Skip to content

Commit

Permalink
Don't echo an expression's result when it ends with a semicolon (#669)
Browse files Browse the repository at this point in the history
  • Loading branch information
st0012 authored Aug 11, 2023
1 parent a2763ac commit 50185c2
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 2 deletions.
3 changes: 2 additions & 1 deletion lib/irb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,8 @@ def eval_input
is_assignment = assignment_expression?(line)
evaluate_line(line, line_no)

if @context.echo?
# Don't echo if the line ends with a semicolon
if @context.echo? && !line.match?(/;\s*\z/)
if is_assignment
if @context.echo_on_assignment?
output_value(@context.echo_on_assignment? == :truncate)
Expand Down
44 changes: 44 additions & 0 deletions test/irb/test_evaluation.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# frozen_string_literal: true

require "tempfile"

require_relative "helper"

module TestIRB
class EchoingTest < IntegrationTestCase
def test_irb_echos_by_default
write_ruby <<~'RUBY'
binding.irb
RUBY

output = run_ruby_file do
type "123123"
type "exit"
end

assert_include(output, "=> 123123")
end

def test_irb_doesnt_echo_line_with_semicolon
write_ruby <<~'RUBY'
binding.irb
RUBY

output = run_ruby_file do
type "123123;"
type "123123 ;"
type "123123; "
type <<~RUBY
if true
123123
end;
RUBY
type "'evaluation ends'"
type "exit"
end

assert_include(output, "=> \"evaluation ends\"")
assert_not_include(output, "=> 123123")
end
end
end
1 change: 0 additions & 1 deletion test/irb/yamatanooroti/test_rendering.rb
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ class A def b; self; end; def c; true; end; end;
irb(main):016:0>
irb(main):017:0>
irb(main):018:0> class A def b; self; end; def c; true; end; end;
=> :c
irb(main):019:0> a = A.new
=> #<A>
irb(main):020:0> a
Expand Down

0 comments on commit 50185c2

Please sign in to comment.