class RuboCop::Cop::Rails::OutputSafety


safe_join(out)
out << content_tag(:li, “two”)
out << content_tag(:li, “one”)
out = []
# good
out.html_safe
out << content_tag(:li, “two”)
out << content_tag(:li, “one”)
out = “”
# bad
content_tag(:p, text)
# good
“<p>#{text}</p>”.html_safe
# bad
@example
raw.
This cop checks for the use of output safety calls like html_safe and

def looks_like_rails_html_safe?(node)

def looks_like_rails_html_safe?(node)
  receiver, method_name, *args = *node
  receiver && method_name == :html_safe && args.empty?
end

def looks_like_rails_raw?(node)

def looks_like_rails_raw?(node)
  receiver, method_name, *args = *node
  receiver.nil? && method_name == :raw && args.one?
end

def on_send(node)

def on_send(node)
  _receiver, method_name, *_args = *node
  ignore_node(node) if method_name == :safe_join
  return unless !part_of_ignored_node?(node) &&
                (looks_like_rails_html_safe?(node) ||
                looks_like_rails_raw?(node))
  add_offense(node, :selector)
end