Class: SyntaxTree::ConditionalFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/syntax_tree/node.rb

Overview

Formats an If or Unless node.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(keyword, node) ⇒ ConditionalFormatter

Returns a new instance of ConditionalFormatter.



5795
5796
5797
5798
# File 'lib/syntax_tree/node.rb', line 5795

def initialize(keyword, node)
  @keyword = keyword
  @node = node
end

Instance Attribute Details

#keywordObject (readonly)

String

the keyword associated with this conditional



5790
5791
5792
# File 'lib/syntax_tree/node.rb', line 5790

def keyword
  @keyword
end

#nodeObject (readonly)

If | Unless

the node that is being formatted



5793
5794
5795
# File 'lib/syntax_tree/node.rb', line 5793

def node
  @node
end

Instance Method Details

#format(q) ⇒ Object



5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
# File 'lib/syntax_tree/node.rb', line 5800

def format(q)
  # If the predicate of the conditional contains an assignment (in which
  # case we can't know for certain that that assignment doesn't impact the
  # statements inside the conditional) then we can't use the modifier form
  # and we must use the block form.
  if ContainsAssignment.call(node.predicate)
    format_break(q, force: true)
    return
  end

  if node.consequent || node.statements.empty?
    q.group { format_break(q, force: true) }
  else
    q.group do
      q.if_break { format_break(q, force: false) }.if_flat do
        Parentheses.flat(q) do
          q.format(node.statements)
          q.text(" #{keyword} ")
          q.format(node.predicate)
        end
      end
    end
  end
end