class RuboCop::Cop::Style::InfiniteLoop

end
work
loop do
# good
end
work
while true
# bad
@example
Use ‘Kernel#loop` for infinite loops.

def autocorrect(node)

def autocorrect(node)
  if node.while_post_type? || node.until_post_type?
    replace_begin_end_with_modifier(node)
  elsif node.modifier_form?
    replace_source(node.source_range, modifier_replacement(node))
  else
    replace_source(non_modifier_range(node), 'loop do')
  end
end

def configured_indent

def configured_indent
  ' ' * config.for_cop('IndentationWidth')['Width']
end

def modifier_replacement(node)

def modifier_replacement(node)
  if node.single_line?
    'loop { ' + node.body.source + ' }'
  else
    indentation = node.body.loc.expression.source_line[LEADING_SPACE]
    ['loop do', node.body.source.gsub(/^/, configured_indent),
     'end'].join("\n#{indentation}")
  end
end

def non_modifier_range(node)

def non_modifier_range(node)
  start_range = node.loc.keyword.begin
  end_range = if node.do?
                node.loc.begin.end
              else
                node.condition.source_range.end
              end
  start_range.join(end_range)
end

def on_until(node)

def on_until(node)
  return unless node.condition.falsey_literal?
  add_offense(node, :keyword)
end

def on_while(node)

def on_while(node)
  return unless node.condition.truthy_literal?
  add_offense(node, :keyword)
end

def replace_begin_end_with_modifier(node)

def replace_begin_end_with_modifier(node)
  lambda do |corrector|
    corrector.replace(node.body.loc.begin, 'loop do')
    corrector.remove(node.body.loc.end.end.join(node.source_range.end))
  end
end

def replace_source(range, replacement)

def replace_source(range, replacement)
  lambda do |corrector|
    corrector.replace(range, replacement)
  end
end