class RuboCop::Cop::GitHub::RailsViewRenderLiteral

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/github/rails_view_render_literal.rb, line 29
def on_send(node)
  return unless render?(node)

  # Ignore "component"-style renders
  return if render_view_component?(node)

  if render_literal?(node)
  elsif option_pairs = render_with_options?(node)
    if option_pairs.any? { |pair| ignore_key?(pair) }
      return
    end

    if partial_node = option_pairs.map { |pair| partial_key?(pair) }.compact.first
      if !literal?(partial_node)
        add_offense(node, location: :expression)
        return
      end
    else
      add_offense(node, location: :expression)
      return
    end
  else
    add_offense(node, location: :expression)
    return
  end

  if render_literal?(node) && node.arguments.count > 1
    locals = node.arguments[1]
  elsif options_pairs = render_with_options?(node)
    locals = option_pairs.map { |pair| locals_key?(pair) }.compact.first
  end

  if locals
    if locals.hash_type?
      if !hash_with_literal_keys?(locals)
        add_offense(node, location: :expression)
      end
    else
      add_offense(node, location: :expression)
    end
  end
end