class RuboCop::Cop::Style::RegexpLiteral

x =~ /home//
# Bad unless AllowInnerSlashes is true.
}x
(baz)
(bar)
foo
regex = %r{
# Good if EnforcedStyle is percent_r or mixed, bad if slashes.
/x
(baz)
(bar)
foo
regex = /
# Good if EnforcedStyle is slashes, bad if percent_r or mixed.
snake_case = %r{^[dA-Z_]+$}
# Good if EnforcedStyle is percent_r, bad if slashes or mixed.
snake_case = /^[dA-Z_]+$/
# Good if EnforcedStyle is slashes or mixed, bad if percent_r.
@example
This cop enforces using // or %r around regular expressions.

def allow_inner_slashes?

def allow_inner_slashes?
  cop_config['AllowInnerSlashes']
end

def autocorrect(node)

def autocorrect(node)
  return if contains_slash?(node)
  replacement = if slash_literal?(node)
                  ['%r', ''].zip(preferred_delimiters).map(&:join)
                else
                  %w(/ /)
                end
  lambda do |corrector|
    corrector.replace(node.loc.begin, replacement.first)
    corrector.replace(node.loc.end, replacement.last)
  end
end

def check_percent_r_literal(node)

def check_percent_r_literal(node)
  return if style == :slashes && contains_disallowed_slash?(node)
  return if style == :percent_r
  return if style == :mixed && node.multiline?
  return if style == :mixed && contains_disallowed_slash?(node)
  add_offense(node, :expression, MSG_USE_SLASHES)
end

def check_slash_literal(node)

def check_slash_literal(node)
  return if style == :slashes && !contains_disallowed_slash?(node)
  return if style == :mixed &&
            node.single_line? &&
            !contains_disallowed_slash?(node)
  add_offense(node, :expression, MSG_USE_PERCENT_R)
end

def contains_disallowed_slash?(node)

def contains_disallowed_slash?(node)
  !allow_inner_slashes? && contains_slash?(node)
end

def contains_slash?(node)

def contains_slash?(node)
  node_body(node).include?('/')
end

def node_body(node)

def node_body(node)
  string_parts = node.children.select { |child| child.type == :str }
  string_parts.map(&:source).join
end

def on_regexp(node)

def on_regexp(node)
  if slash_literal?(node)
    check_slash_literal(node)
  else
    check_percent_r_literal(node)
  end
end

def preferred_delimiters

def preferred_delimiters
  config.for_cop('Style/PercentLiteralDelimiters') \
    ['PreferredDelimiters']['%r'].split(//)
end

def slash_literal?(node)

def slash_literal?(node)
  node.loc.begin.source == '/'
end