Skip to content

Commit

Permalink
Fix debug command in nomultiline mode (#1006)
Browse files Browse the repository at this point in the history
* Fix debug command in nomultiline mode

* context.colorize_code -> context.colorize_input
  • Loading branch information
tompng authored Sep 20, 2024
1 parent bcfaa72 commit 71f4d6b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 28 deletions.
15 changes: 15 additions & 0 deletions lib/irb/context.rb
Original file line number Diff line number Diff line change
Expand Up @@ -649,6 +649,21 @@ def parse_command(code)
end
end

def colorize_input(input, complete:)
if IRB.conf[:USE_COLORIZE] && IRB::Color.colorable?
lvars = local_variables || []
if parse_command(input)
name, sep, arg = input.split(/(\s+)/, 2)
arg = IRB::Color.colorize_code(arg, complete: complete, local_variables: lvars)
"#{IRB::Color.colorize(name, [:BOLD])}\e[m#{sep}#{arg}"
else
IRB::Color.colorize_code(input, complete: complete, local_variables: lvars)
end
else
Reline::Unicode.escape_for_print(input)
end
end

def inspect_last_value # :nodoc:
@inspect_method.inspect_value(@last_value)
end
Expand Down
16 changes: 6 additions & 10 deletions lib/irb/debug.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,18 @@ def DEBUGGER__.capture_frames(*args)
DEBUGGER__::ThreadClient.prepend(SkipPathHelperForIRB)
end

if !@output_modifier_defined && !DEBUGGER__::CONFIG[:no_hint]
irb_output_modifier_proc = Reline.output_modifier_proc

Reline.output_modifier_proc = proc do |output, complete:|
unless output.strip.empty?
cmd = output.split(/\s/, 2).first
if !DEBUGGER__::CONFIG[:no_hint] && irb.context.io.is_a?(RelineInputMethod)
Reline.output_modifier_proc = proc do |input, complete:|
unless input.strip.empty?
cmd = input.split(/\s/, 2).first

if !complete && DEBUGGER__.commands.key?(cmd)
output = output.sub(/\n$/, " # debug command\n")
input = input.sub(/\n$/, " # debug command\n")
end
end

irb_output_modifier_proc.call(output, complete: complete)
irb.context.colorize_input(input, complete: complete)
end

@output_modifier_defined = true
end

true
Expand Down
21 changes: 3 additions & 18 deletions lib/irb/input-method.rb
Original file line number Diff line number Diff line change
Expand Up @@ -265,24 +265,9 @@ def initialize(completor)
@completion_params = [preposing, target, postposing, bind]
@completor.completion_candidates(preposing, target, postposing, bind: bind)
}
Reline.output_modifier_proc =
if IRB.conf[:USE_COLORIZE]
proc do |output, complete: |
next unless IRB::Color.colorable?
lvars = IRB.CurrentContext&.local_variables || []
if IRB.CurrentContext&.parse_command(output)
name, sep, arg = output.split(/(\s+)/, 2)
arg = IRB::Color.colorize_code(arg, complete: complete, local_variables: lvars)
"#{IRB::Color.colorize(name, [:BOLD])}\e[m#{sep}#{arg}"
else
IRB::Color.colorize_code(output, complete: complete, local_variables: lvars)
end
end
else
proc do |output|
Reline::Unicode.escape_for_print(output)
end
end
Reline.output_modifier_proc = proc do |input, complete:|
IRB.CurrentContext.colorize_input(input, complete: complete)
end
Reline.dig_perfect_match_proc = ->(matched) { display_document(matched) }
Reline.autocompletion = IRB.conf[:USE_AUTOCOMPLETE]

Expand Down
22 changes: 22 additions & 0 deletions test/irb/yamatanooroti/test_rendering.rb
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,28 @@ def test_debug_integration_doesnt_hint_non_debugger_commands
File.unlink(script) if script
end

def test_debug_integration_doesnt_hint_debugger_commands_in_nomultiline_mode
write_irbrc <<~'LINES'
IRB.conf[:USE_SINGLELINE] = true
LINES
script = Tempfile.create(["debug", ".rb"])
script.write <<~RUBY
puts 'start IRB'
binding.irb
RUBY
script.close
start_terminal(40, 80, %W{ruby -I#{@pwd}/lib #{script.to_path}}, startup_message: 'start IRB')
write("debug\n")
write("pp 1")
close

screen = result.join("\n").sub(/\n*\z/, "\n")
# submitted input shouldn't contain hint
assert_include(screen, "irb:rdbg(main):002> pp 1\n")
ensure
File.unlink(script) if script
end

private

def write_irbrc(content)
Expand Down

0 comments on commit 71f4d6b

Please sign in to comment.