Module: SyntaxTree::RemoveBreaks

Defined in:
lib/syntax_tree/node.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



1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
# File 'lib/syntax_tree/node.rb', line 1561

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