14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/pry-inline/code_extension.rb', line 14
def print_to_output(output, color = false)
begin
not_colorized_output_lines = super('', false).split("\n")
@lineno_to_variables = Hash.new { |h, k| h[k] = Set.new }
traverse_sexp(Parser.sexp(@lines.map(&:line).join("\n")))
current_line = CodeExtension.current_binding.eval('__LINE__') - @lines[0].lineno + 1
@lineno_to_variables.each do |lineno, variables|
if lineno >= current_line
variables.clear
next
end
variables.each do |v|
next unless @lineno_to_variables.any? do |l, vs|
l < current_line && l > lineno && vs.include?(v)
end
variables.delete(v)
end
end
@lineno_to_variables.each do |lineno, variables|
next if lineno == 0 || @lines.length <= lineno
original_width = Unicode.width(not_colorized_output_lines[lineno - 1], true)
debug_info_width = terminal_width - original_width % terminal_width + 1
debug_info_width += terminal_width if debug_info_width < min_debug_info_width
@lines[lineno - 1].tuple[0] +=
debug_info(variables)
.slice(0, debug_info_width)
.split('')
.map { |c| [c, Unicode.width(c, true)] }
.reduce([]) { |a, e| a + [[e[0], e[1] + (a.empty? ? 0 : a[-1][1])]] }
.take_while { |_, w| w < debug_info_width }
.map(&:first)
.join
end
ensure
ret = super(output, color)
end
ret
end
|