Sha256: 7e1c58513b94d9963c82153a6e3ce404d8363ad6ec8173a5f8f9625e7890c9b0

Contents?: true

Size: 1.78 KB

Versions: 8

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

require_relative "capture_code_context"
require_relative "display_code_with_line_numbers"

module DeadEnd
  # Used for formatting invalid blocks
  class DisplayInvalidBlocks
    attr_reader :filename

    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

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

    def call
      if document_ok?
        @io.puts "Syntax OK"
        return self
      end

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

      self
    end

    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

    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
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
dead_end-4.0.0 lib/dead_end/display_invalid_blocks.rb
dead_end-3.1.2 lib/dead_end/display_invalid_blocks.rb
dead_end-3.1.1 lib/dead_end/display_invalid_blocks.rb
dead_end-3.1.0 lib/dead_end/display_invalid_blocks.rb
dead_end-3.0.3 lib/dead_end/display_invalid_blocks.rb
dead_end-3.0.2 lib/dead_end/display_invalid_blocks.rb
dead_end-3.0.1 lib/dead_end/display_invalid_blocks.rb
dead_end-3.0.0 lib/dead_end/display_invalid_blocks.rb