🔍

No recent searches

# 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)
Source

    # 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

### Public Instance Methods

call ()
Source

    # 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

document_ok? ()
Source

    # File lib/syntax_suggest/display_invalid_blocks.rb, line 20
    def document_ok?
      @blocks.none? { |b| !b.hidden? }
    end

### Private Instance Methods

code_with_context ()
Source

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

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