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.



5267
5268
5269
5270
# File 'lib/syntax_tree/node.rb', line 5267

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

Instance Attribute Details

#keywordObject (readonly)

String

the keyword associated with this conditional



5262
5263
5264
# File 'lib/syntax_tree/node.rb', line 5262

def keyword
  @keyword
end

#nodeObject (readonly)

If | Unless

the node that is being formatted



5265
5266
5267
# File 'lib/syntax_tree/node.rb', line 5265

def node
  @node
end

Instance Method Details

#format(q) ⇒ Object



5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
# File 'lib/syntax_tree/node.rb', line 5272

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