1 # frozen_string_literal: true
3 require_relative "capture_code_context"
4 require_relative "display_code_with_line_numbers"
7 # Used for formatting invalid blocks
8 class DisplayInvalidBlocks
11 def initialize(code_lines:, blocks:, io: $stderr, filename: nil, terminal: DEFAULT_VALUE)
13 @blocks = Array(blocks)
15 @code_lines = code_lines
17 @terminal = (terminal == DEFAULT_VALUE) ? io.isatty : terminal
21 @blocks.none? { |b| !b.hidden? }
30 @io.puts("--> #{filename}")
33 @blocks.each do |block|
40 private def display_block(block)
42 explain = ExplainSyntax.new(
43 code_lines: block.lines
47 # Also handles several ambiguious cases
48 lines = CaptureCodeContext.new(
50 code_lines: @code_lines
54 document = DisplayCodeWithLineNumbers.new(
57 highlight_lines: block.lines
60 # Output syntax error explanation
61 explain.errors.each do |e|
70 private def code_with_context
71 lines = CaptureCodeContext.new(
73 code_lines: @code_lines
76 DisplayCodeWithLineNumbers.new(
79 highlight_lines: @invalid_lines