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.



5247
5248
5249
5250
# File 'lib/syntax_tree/node.rb', line 5247

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

Instance Attribute Details

#keywordObject (readonly)

String

the keyword associated with this conditional



5242
5243
5244
# File 'lib/syntax_tree/node.rb', line 5242

def keyword
  @keyword
end

#nodeObject (readonly)

If | Unless

the node that is being formatted



5245
5246
5247
# File 'lib/syntax_tree/node.rb', line 5245

def node
  @node
end

Instance Method Details

#format(q) ⇒ Object



5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
# File 'lib/syntax_tree/node.rb', line 5252

def format(q)
  # If we can transform this node into a ternary, then we're going to print
  # a special version that uses the ternary operator if it fits on one line.
  if Ternaryable.call(q, node)
    format_ternary(q)
    return
  end

  # 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? || contains_conditional?
    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