Class: SyntaxSuggest::DisplayCodeWithLineNumbers
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/syntax_suggest/display_code_with_line_numbers.rb |
Overview
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
Constant Summary
-
TERMINAL_END =
# File 'lib/syntax_suggest/display_code_with_line_numbers.rb', line 23"\e[0m"
-
TERMINAL_HIGHLIGHT =
Bold, italics
"\e[1;3m"
Class Method Summary
Instance Method Summary
Constructor Details
.new(lines:, highlight_lines: [], terminal: false) ⇒ DisplayCodeWithLineNumbers
# 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
Instance Method Details
#call
[ GitHub ]# File 'lib/syntax_suggest/display_code_with_line_numbers.rb', line 32
def call @lines.map do |line| format_line(line) end.join end
#format(contents:, number:, empty:, highlight: false) (private)
[ GitHub ]# File 'lib/syntax_suggest/display_code_with_line_numbers.rb', line 50
private 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) (private)
[ GitHub ]# File 'lib/syntax_suggest/display_code_with_line_numbers.rb', line 38
private 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