class RuboCop::Cop::GitHub::RailsControllerRenderLiteral

Constants

MSG

Public Instance Methods

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

  return if render_view_component?(node) || render_const?(node)

  if render_literal?(node)
  elsif option_pairs = render_with_options?(node)
    option_pairs = option_pairs.reject { |pair| options_key?(pair) }

    if option_pairs.any? { |pair| ignore_key?(pair) }
      return
    end

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

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

  if render_literal?(node)
    option_hash = node.arguments[1]
    if option_hash && !option_hash.hash_type?
      add_offense(node, location: :expression)
      return
    end
    option_pairs = option_hash && option_hash.pairs
  else
    option_pairs = node.arguments[0].pairs
  end

  if option_pairs
    locals = option_pairs.map { |pair| locals_key?(pair) }.compact.first
    if locals && (!locals.hash_type? || !hash_with_literal_keys?(locals))
      add_offense(node, location: :expression)
    end
  end
end