Skip to content

Commit

Permalink
Don't echo an experssion result when it ends with a semicolon
Browse files Browse the repository at this point in the history
  • Loading branch information
st0012 committed Aug 5, 2023
1 parent bbd2044 commit b8e749d
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
3 changes: 2 additions & 1 deletion lib/irb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,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, "001:0> 123123")
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 "exit"
end

assert_include(output, "001:0> 123123;")
assert_not_include(output, "=> 123123")
end
end
end

0 comments on commit b8e749d

Please sign in to comment.