class SyntaxSuggest::DisplayInvalidBlocks

Used for formatting invalid blocks

Attributes

filename[R]

Public Class Methods

new(code_lines:, blocks:, io: $stderr, filename: nil, terminal: DEFAULT_VALUE) click to toggle source
# File syntax_suggest/display_invalid_blocks.rb, line 11
def initialize(code_lines:, blocks:, io: $stderr, filename: nil, terminal: DEFAULT_VALUE)
  @io = io
  @blocks = Array(blocks)
  @filename = filename
  @code_lines = code_lines

  @terminal = terminal == DEFAULT_VALUE ? io.isatty : terminal
end

Public Instance Methods

call() click to toggle source
# File syntax_suggest/display_invalid_blocks.rb, line 24
def call
  if document_ok?
    return self
  end

  if filename
    @io.puts("--> #{filename}")
    @io.puts
  end
  @blocks.each do |block|
    display_block(block)
  end

  self
end
document_ok?() click to toggle source
# File syntax_suggest/display_invalid_blocks.rb, line 20
def document_ok?
  @blocks.none? { |b| !b.hidden? }
end

Private Instance Methods

code_with_context() click to toggle source
# File syntax_suggest/display_invalid_blocks.rb, line 70
        def code_with_context
  lines = CaptureCodeContext.new(
    blocks: @blocks,
    code_lines: @code_lines
  ).call

  DisplayCodeWithLineNumbers.new(
    lines: lines,
    terminal: @terminal,
    highlight_lines: @invalid_lines
  ).call
end
display_block(block) click to toggle source
# File syntax_suggest/display_invalid_blocks.rb, line 40
        def display_block(block)
  # Build explanation
  explain = ExplainSyntax.new(
    code_lines: block.lines
  ).call

  # Enhance code output
  # Also handles several ambiguious cases
  lines = CaptureCodeContext.new(
    blocks: block,
    code_lines: @code_lines
  ).call

  # Build code output
  document = DisplayCodeWithLineNumbers.new(
    lines: lines,
    terminal: @terminal,
    highlight_lines: block.lines
  ).call

  # Output syntax error explanation
  explain.errors.each do |e|
    @io.puts e
  end
  @io.puts

  # Output code
  @io.puts(document)
end