Skip to content

Commit

Permalink
Merge pull request #130 from aycabta/drop-omit
Browse files Browse the repository at this point in the history
Drop OMIT_ON_ASSIGNMENT and add :truncate option for ECHO_ON_ASSIGNMENT
  • Loading branch information
aycabta authored Sep 18, 2020
2 parents 5a7dd8c + 4c89b07 commit 42fee88
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 50 deletions.
2 changes: 1 addition & 1 deletion lib/irb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@ def eval_input
if @context.echo?
if assignment_expression?(line)
if @context.echo_on_assignment?
output_value(@context.omit_on_assignment?)
output_value(@context.echo_on_assignment? == :truncate)
end
else
output_value
Expand Down
35 changes: 13 additions & 22 deletions lib/irb/context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,7 @@ def initialize(irb, workspace = nil, input_method = nil)

@echo_on_assignment = IRB.conf[:ECHO_ON_ASSIGNMENT]
if @echo_on_assignment.nil?
@echo_on_assignment = true
end

@omit_on_assignment = IRB.conf[:OMIT_ON_ASSIGNMENT]
if @omit_on_assignment.nil?
@omit_on_assignment = true
@echo_on_assignment = :truncate
end

@newline_before_multiline_output = IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT]
Expand Down Expand Up @@ -256,27 +251,24 @@ def main
attr_accessor :echo
# Whether to echo for assignment expressions
#
# Uses <code>IRB.conf[:ECHO_ON_ASSIGNMENT]</code> if available, or defaults to +true+.
# If set to +false+, the value of assignment will not be shown.
#
# If set to +true+, the value of assignment will be shown.
#
# If set to +:truncate+, the value of assignment will be shown and truncated.
#
# It defaults to +:truncate+.
#
# a = "omg"
# #=> omg
# a = "omg" * 10
# #=> omgomgomgomgomgomgomg...
# IRB.CurrentContext.echo_on_assignment = false
# a = "omg"
# IRB.CurrentContext.echo_on_assignment = true
# a = "omg"
# #=> omgomgomgomgomgomgomgomgomgomg
attr_accessor :echo_on_assignment
# Whether to omit echo for assignment expressions
#
# Uses <code>IRB.conf[:OMIT_ON_ASSIGNMENT]</code> if available, or defaults to +true+.
#
# a = [1] * 10
# #=> [1, 1, 1, 1, 1, 1, 1, 1, ...
# [1] * 10
# #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
# IRB.CurrentContext.omit_on_assignment = false
# a = [1] * 10
# #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
# [1] * 10
# #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
attr_accessor :omit_on_assignment
# Whether a newline is put before multiline output.
#
# Uses <code>IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT]</code> if available,
Expand Down Expand Up @@ -325,7 +317,6 @@ def main
alias ignore_eof? ignore_eof
alias echo? echo
alias echo_on_assignment? echo_on_assignment
alias omit_on_assignment? omit_on_assignment
alias newline_before_multiline_output? newline_before_multiline_output

# Returns whether messages are displayed or not.
Expand Down
7 changes: 2 additions & 5 deletions lib/irb/init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ def IRB.init_config(ap_path)
@CONF[:IGNORE_EOF] = false
@CONF[:ECHO] = nil
@CONF[:ECHO_ON_ASSIGNMENT] = nil
@CONF[:OMIT_ON_ASSIGNMENT] = nil
@CONF[:VERBOSE] = nil

@CONF[:EVAL_HISTORY] = nil
Expand Down Expand Up @@ -178,10 +177,8 @@ def IRB.parse_opts(argv: ::ARGV)
@CONF[:ECHO_ON_ASSIGNMENT] = true
when "--noecho-on-assignment"
@CONF[:ECHO_ON_ASSIGNMENT] = false
when "--omit-on-assignment"
@CONF[:OMIT_ON_ASSIGNMENT] = true
when "--noomit-on-assignment"
@CONF[:OMIT_ON_ASSIGNMENT] = false
when "--truncate-echo-on-assignment"
@CONF[:ECHO_ON_ASSIGNMENT] = :truncate
when "--verbose"
@CONF[:VERBOSE] = true
when "--noverbose"
Expand Down
28 changes: 6 additions & 22 deletions test/irb/test_context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,6 @@ def test_omit_on_assignment

irb.context.echo = true
irb.context.echo_on_assignment = false
irb.context.omit_on_assignment = true
out, err = capture_io do
irb.eval_input
end
Expand All @@ -237,8 +236,7 @@ def test_omit_on_assignment

input.reset
irb.context.echo = true
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = true
irb.context.echo_on_assignment = :truncate
out, err = capture_io do
irb.eval_input
end
Expand All @@ -248,7 +246,6 @@ def test_omit_on_assignment
input.reset
irb.context.echo = true
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = false
out, err = capture_io do
irb.eval_input
end
Expand All @@ -258,7 +255,6 @@ def test_omit_on_assignment
input.reset
irb.context.echo = false
irb.context.echo_on_assignment = false
irb.context.omit_on_assignment = true
out, err = capture_io do
irb.eval_input
end
Expand All @@ -267,8 +263,7 @@ def test_omit_on_assignment

input.reset
irb.context.echo = false
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = true
irb.context.echo_on_assignment = :truncate
out, err = capture_io do
irb.eval_input
end
Expand All @@ -278,7 +273,6 @@ def test_omit_on_assignment
input.reset
irb.context.echo = false
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = false
out, err = capture_io do
irb.eval_input
end
Expand All @@ -298,7 +292,6 @@ def test_omit_multiline_on_assignment

irb.context.echo = true
irb.context.echo_on_assignment = false
irb.context.omit_on_assignment = true
out, err = capture_io do
irb.eval_input
end
Expand All @@ -308,8 +301,7 @@ def test_omit_multiline_on_assignment

input.reset
irb.context.echo = true
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = true
irb.context.echo_on_assignment = :truncate
out, err = capture_io do
irb.eval_input
end
Expand All @@ -320,7 +312,6 @@ def test_omit_multiline_on_assignment
input.reset
irb.context.echo = true
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = false
out, err = capture_io do
irb.eval_input
end
Expand All @@ -331,7 +322,6 @@ def test_omit_multiline_on_assignment
input.reset
irb.context.echo = false
irb.context.echo_on_assignment = false
irb.context.omit_on_assignment = true
out, err = capture_io do
irb.eval_input
end
Expand All @@ -341,8 +331,7 @@ def test_omit_multiline_on_assignment

input.reset
irb.context.echo = false
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = true
irb.context.echo_on_assignment = :truncate
out, err = capture_io do
irb.eval_input
end
Expand All @@ -353,7 +342,6 @@ def test_omit_multiline_on_assignment
input.reset
irb.context.echo = false
irb.context.echo_on_assignment = true
irb.context.omit_on_assignment = false
out, err = capture_io do
irb.eval_input
end
Expand All @@ -370,26 +358,22 @@ def test_echo_on_assignment_conf
irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)

assert(irb.context.echo?, "echo? should be true by default")
assert(irb.context.echo_on_assignment?, "echo_on_assignment? should be true by default")
assert(irb.context.omit_on_assignment?, "omit_on_assignment? should be true by default")
assert_equal(:truncate, irb.context.echo_on_assignment?, "echo_on_assignment? should be :truncate by default")

# Explicitly set :ECHO to false
IRB.conf[:ECHO] = false
irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)

refute(irb.context.echo?, "echo? should be false when IRB.conf[:ECHO] is set to false")
assert(irb.context.echo_on_assignment?, "echo_on_assignment? should be true by default")
assert(irb.context.omit_on_assignment?, "omit_on_assignment? should be true by default")
assert_equal(:truncate, irb.context.echo_on_assignment?, "echo_on_assignment? should be :truncate by default")

# Explicitly set :ECHO_ON_ASSIGNMENT to true
IRB.conf[:ECHO] = nil
IRB.conf[:ECHO_ON_ASSIGNMENT] = false
IRB.conf[:OMIT_ON_ASSIGNMENT] = false
irb = IRB::Irb.new(IRB::WorkSpace.new(Object.new), input)

assert(irb.context.echo?, "echo? should be true by default")
refute(irb.context.echo_on_assignment?, "echo_on_assignment? should be false when IRB.conf[:ECHO_ON_ASSIGNMENT] is set to false")
refute(irb.context.omit_on_assignment?, "omit_on_assignment? should be false when IRB.conf[:OMIT_ON_ASSIGNMENT] is set to false")
end

def test_multiline_output_on_default_inspector
Expand Down

0 comments on commit 42fee88

Please sign in to comment.