Module: SyntaxTree::RemoveBreaks

Defined in:
lib/syntax_tree.rb

Overview

This module will remove any breakables from the list of contents so that no newlines are present in the output.

Class Method Summary collapse

Class Method Details

.call(doc) ⇒ Object



2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
# File 'lib/syntax_tree.rb', line 2428

def call(doc)
  marker = Object.new
  stack = [doc]

  while stack.any?
    doc = stack.pop

    if doc == marker
      stack.pop
      next
    end

    stack += [doc, marker]

    case doc
    when PrettyPrint::Align, PrettyPrint::Indent, PrettyPrint::Group
      doc.contents.map! { |child| remove_breaks(child) }
      stack += doc.contents.reverse
    when PrettyPrint::IfBreak
      doc.flat_contents.map! { |child| remove_breaks(child) }
      stack += doc.flat_contents.reverse
    end
  end
end