Sha256: e9d0e41f9de5f6212b28f0731a279474454be233033bed136d40701c3623fcaa

Contents?: true

Size: 1.71 KB

Versions: 20

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

module RuboCop
  module Cop
    module Rails
      # This cop checks for use of the helper methods which reference
      # instance variables.
      #
      # Relying on instance variables makes it difficult to re-use helper
      # methods.
      #
      # If it seems awkward to explicitly pass in each dependent
      # variable, consider moving the behaviour elsewhere, for
      # example to a model, decorator or presenter.
      #
      # Provided that a class inherits `ActionView::Helpers::FormBuilder`,
      # an offense will not be registered.
      #
      # @example
      #   # bad
      #   def welcome_message
      #     "Hello #{@user.name}"
      #   end
      #
      #   # good
      #   def welcome_message(user)
      #     "Hello #{user.name}"
      #   end
      #
      #   # good
      #   class MyFormBuilder < ActionView::Helpers::FormBuilder
      #     @template.do_something
      #   end
      class HelperInstanceVariable < Base
        MSG = 'Do not use instance variables in helpers.'

        def_node_matcher :form_builder_class?, <<~PATTERN
          (const
            (const
               (const nil? :ActionView) :Helpers) :FormBuilder)
        PATTERN

        def on_ivar(node)
          return if inherit_form_builder?(node)

          add_offense(node)
        end

        def on_ivasgn(node)
          return if node.parent.or_asgn_type? || inherit_form_builder?(node)

          add_offense(node.loc.name)
        end

        private

        def inherit_form_builder?(node)
          node.each_ancestor(:class) do |class_node|
            return true if form_builder_class?(class_node.parent_class)
          end

          false
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 2 rubygems

Version Path
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/rubocop-rails-2.14.2/lib/rubocop/cop/rails/helper_instance_variable.rb
scrapbook-0.3.1 vendor/ruby/2.7.0/gems/rubocop-rails-2.14.2/lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.14.2 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.14.1 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.14.0 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.13.2 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.13.1 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.13.0 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.12.4 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.12.3 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.12.2 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.12.1 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.12.0 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.11.3 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.11.2 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.11.1 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.11.0 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.10.1 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.10.0 lib/rubocop/cop/rails/helper_instance_variable.rb
rubocop-rails-2.9.1 lib/rubocop/cop/rails/helper_instance_variable.rb