# class SyntaxSuggest::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/syntax_suggest/display_code_with_line_numbers.rb, line 25
    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/syntax_suggest/display_code_with_line_numbers.rb, line 32
    def call
      @lines.map do |line|
        format_line(line)
      end.join
    end

### Private Instance Methods

format(contents:, number:, empty:, highlight: false) click to toggle source

    # File lib/syntax_suggest/display_code_with_line_numbers.rb, line 50
            def format(contents:, number:, empty:, highlight: false)
      string = +""
      string << if highlight
        "> "
      else
        "  "
      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/syntax_suggest/display_code_with_line_numbers.rb, line 38
            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