class Rufo::Formatter

def node_line(node, beginning: true)

def node_line(node, beginning: true)
  return if node.nil?
  # get line of node, it is only used in visit_hash right now,
  # so handling the following node types is enough.
  case node.first
  when :hash, :string_literal, :symbol_literal, :symbol, :vcall, :string_content, :assoc_splat, :var_ref, :dyna_symbol, :var_field
    node_line(node[1], beginning: beginning)
  when :hshptn
    _, _, elements, rest = node
    elem = if beginning
        (elements[0] && elements[0][0]) || rest
      else
        rest || elements.last[0]
      end
    node_line(elem, beginning: beginning)
  when :assoc_new
    # There's no line number info for empty strings or hashes.
    if node[1] != EMPTY_STRING && node[1] != EMPTY_HASH
      node_line(node[1], beginning: beginning)
    elsif node.last != EMPTY_STRING && node.last != EMPTY_HASH
      node_line(node.last, beginning: beginning)
    else
      return
    end
  when :assoclist_from_args
    node_line(beginning ? node[1][0] : node[1].last, beginning: beginning)
  when :@label, :@int, :@ident, :@tstring_content, :@kw
    node[2][0]
  end
end