class DeadEnd::DisplayInvalidBlocks

Used for formatting invalid blocks

Attributes

filename[R]

Public Class Methods

new(code_lines: ,blocks:, io: $stderr, filename: nil, terminal: false, invalid_obj: WhoDisSyntaxError::Null.new) click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 11
def initialize(code_lines: ,blocks:, io: $stderr, filename: nil, terminal: false, invalid_obj: WhoDisSyntaxError::Null.new)
  @terminal = terminal
  @filename = filename
  @io = io

  @blocks = Array(blocks)

  @invalid_lines = @blocks.map(&:lines).flatten
  @code_lines = code_lines

  @invalid_obj = invalid_obj
end

Public Instance Methods

banner() click to toggle source
call() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 24
def call
  if @blocks.any? { |b| !b.hidden? }
    found_invalid_blocks
  else
    @io.puts "Syntax OK"
  end
  self
end
code_block() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 95
def code_block
  string = String.new("")
  string << code_with_context
  string
end
code_with_context() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 101
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
code_with_lines() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 114
def code_with_lines
  DisplayCodeWithLineNumbers.new(
    lines: @code_lines.select(&:visible?),
    terminal: @terminal,
    highlight_lines: @invalid_lines,
  ).call
end
indent(string, with: " ") click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 91
def indent(string, with: "    ")
  string.each_line.map {|l| with  + l }.join
end

Private Instance Methods

found_invalid_blocks() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 38
            def found_invalid_blocks
      @io.puts
      @io.puts banner
      @io.puts
      @io.puts("file: #{filename}") if filename
      @io.puts <<~EOM
        simplified:

        #{indent(code_block)}
      EOM
    end
no_invalid_blocks() click to toggle source
# File lib/dead_end/display_invalid_blocks.rb, line 33
            def no_invalid_blocks
      @io.puts <<~EOM
      EOM
    end