class DeadEnd::DisplayCodeWithLineNumbers
Outputs code with highlighted lines
Whatever is passed to this class will be rendered even if it is “marked invisible” any filtering of output should be done before calling this class.
DisplayCodeWithLineNumbers.new( lines: lines, highlight_lines: [lines[2], lines[3]] ).call # => 1 2 def cat ❯ 3 Dir.chdir ❯ 4 end 5 end 6
Constants
- TERMINAL_END
- TERMINAL_HIGHLIGHT
Public Class Methods
new(lines: , highlight_lines: [], terminal: false)
click to toggle source
# File lib/dead_end/display_code_with_line_numbers.rb, line 26 def initialize(lines: , highlight_lines: [], terminal: false) @lines = Array(lines).sort @terminal = terminal @highlight_line_hash = Array(highlight_lines).each_with_object({}) {|line, h| h[line] = true } @digit_count = @lines.last&.line_number.to_s.length end
Public Instance Methods
call()
click to toggle source
# File lib/dead_end/display_code_with_line_numbers.rb, line 33 def call @lines.map do |line| format_line(line) end.join end
Private Instance Methods
format(contents: , number: , highlight: false, empty:)
click to toggle source
# File lib/dead_end/display_code_with_line_numbers.rb, line 51 def format(contents: , number: , highlight: false, empty:) string = String.new("") if highlight string << "❯ " else string << " " end string << number.rjust(@digit_count).to_s if empty string << contents else string << " " string << TERMINAL_HIGHLIGHT if @terminal && highlight string << contents string << TERMINAL_END if @terminal end string end
format_line(code_line)
click to toggle source
# File lib/dead_end/display_code_with_line_numbers.rb, line 39 def format_line(code_line) # Handle trailing slash lines code_line.original.lines.map.with_index do |contents, i| format( empty: code_line.empty?, number: (code_line.number + i).to_s, contents: contents, highlight: @highlight_line_hash[code_line] ) end.join end