Sha256: d2e5db538a2174d54bab7ed7fe230bc8746ffea552e4c440576c92978ebd67b6

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

module DeadEnd
  # Handles code that contains trailing slashes
  # by turning multiple lines with trailing slash(es) into
  # a single code line
  #
  #   expect(code_lines.join).to eq(<<~EOM)
  #     it "trailing \
  #        "slash" do
  #     end
  #   EOM
  #
  #   lines = TrailngSlashJoin(code_lines: code_lines).call
  #   expect(lines.first.to_s).to eq(<<~EOM)
  #     it "trailing \
  #        "slash" do
  #   EOM
  #
  class TrailingSlashJoin
    def initialize(code_lines:)
      @code_lines = code_lines
      @code_lines_dup = code_lines.dup
    end

    def call
      @trailing_lines = []
      @code_lines.select(&:trailing_slash?).each do |trailing|
        stop_next = false
        lines = @code_lines[trailing.index..].take_while do |line|
          next false if stop_next

          if !line.trailing_slash?
            stop_next = true
          end

          true
        end

        joined_line = CodeLine.new(line: lines.map(&:original_line).join, index: trailing.index)

        @code_lines_dup[trailing.index] = joined_line

        @trailing_lines << joined_line

        lines.shift # Don't hide first trailing slash line
        lines.each(&:mark_invisible)
      end

      @code_lines_dup
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dead_end-1.2.0 lib/dead_end/trailing_slash_join.rb