123456789_123456789_123456789_123456789_123456789_

Class: SyntaxSuggest::DisplayInvalidBlocks

Relationships & Source Files
Inherits: Object
Defined in: lib/syntax_suggest/display_invalid_blocks.rb

Overview

Used for formatting invalid blocks

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(code_lines:, blocks:, io: $stderr, filename: nil, terminal: DEFAULT_VALUE) ⇒ DisplayInvalidBlocks

[ GitHub ]

  
# File 'lib/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

Instance Attribute Details

#document_ok?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/display_invalid_blocks.rb', line 20

def document_ok?
  @blocks.none? { |b| !b.hidden? }
end

#filename (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/display_invalid_blocks.rb', line 9

attr_reader :filename

Instance Method Details

#call

[ GitHub ]

  
# File 'lib/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

#code_with_context (private)

[ GitHub ]

  
# File 'lib/syntax_suggest/display_invalid_blocks.rb', line 70

private 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) (private)

[ GitHub ]

  
# File 'lib/syntax_suggest/display_invalid_blocks.rb', line 40

private 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