Class: SyntaxTree::BlockFormatter

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

Overview

Responsible for formatting either a BraceBlock or a DoBlock.

Defined Under Namespace

Classes: BlockOpenFormatter

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node, block_open, block_close, statements) ⇒ BlockFormatter

Returns a new instance of BlockFormatter.



2301
2302
2303
2304
2305
2306
# File 'lib/syntax_tree/node.rb', line 2301

def initialize(node, block_open, block_close, statements)
  @node = node
  @block_open = block_open
  @block_close = block_close
  @statements = statements
end

Instance Attribute Details

#block_closeObject (readonly)

String

the string that closes the block



2296
2297
2298
# File 'lib/syntax_tree/node.rb', line 2296

def block_close
  @block_close
end

#block_openObject (readonly)

LBrace | Keyword

the node that opens the block



2293
2294
2295
# File 'lib/syntax_tree/node.rb', line 2293

def block_open
  @block_open
end

#nodeObject (readonly)

BraceBlock | DoBlock

the block node to be formatted



2290
2291
2292
# File 'lib/syntax_tree/node.rb', line 2290

def node
  @node
end

#statementsObject (readonly)

BodyStmt | Statements

the statements inside the block



2299
2300
2301
# File 'lib/syntax_tree/node.rb', line 2299

def statements
  @statements
end

Instance Method Details

#format(q) ⇒ Object



2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
# File 'lib/syntax_tree/node.rb', line 2308

def format(q)
  # If this is nested anywhere inside of a Command or CommandCall node, then
  # we can't change which operators we're using for the bounds of the block.
  break_opening, break_closing, flat_opening, flat_closing =
    if unchangeable_bounds?(q)
      [block_open.value, block_close, block_open.value, block_close]
    elsif forced_do_end_bounds?(q)
      %w[do end do end]
    elsif forced_brace_bounds?(q)
      %w[{ } { }]
    else
      %w[do end { }]
    end

  # If the receiver of this block a Command or CommandCall node, then there
  # are no parentheses around the arguments to that command, so we need to
  # break the block.
  receiver = q.parent.call
  if receiver.is_a?(Command) || receiver.is_a?(CommandCall)
    q.break_parent
    format_break(q, break_opening, break_closing)
    return
  end

  q.group do
    q.if_break { format_break(q, break_opening, break_closing) }.if_flat do
      format_flat(q, flat_opening, flat_closing)
    end
  end
end