class RuboCop::Cop::Lint::IneffectiveAccessModifier

Checks for `private` or `protected` access modifiers which are applied to a singleton method. These access modifiers do not make singleton methods private/protected. `private_class_method` can be used for that.

@example

# bad

class C
  private

  def self.method
    puts 'hi'
  end
end

@example

# good

class C
  def self.method
    puts 'hi'
  end

  private_class_method :method
end

@example

# good

class C
  class << self
    private

    def method
      puts 'hi'
    end
  end
end

Constants

ALTERNATIVE_PRIVATE
ALTERNATIVE_PROTECTED
MSG

Public Instance Methods

on_class(node) click to toggle source
# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 59
def on_class(node)
  check_node(node.body)
end
Also aliased as: on_module
on_module(node)
Alias for: on_class

Private Instance Methods

access_modifier?(node) click to toggle source

rubocop:enable Metrics/CyclomaticComplexity

# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 109
def access_modifier?(node)
  node.bare_access_modifier? && !node.method?(:module_function)
end
check_node(node) click to toggle source
# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 66
def check_node(node)
  return unless node&.begin_type?

  ineffective_modifier(node) do |defs_node, modifier|
    add_offense(defs_node.loc.keyword, message: format_message(modifier))
  end
end
correct_visibility?(node, modifier, ignored_methods) click to toggle source
# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 113
def correct_visibility?(node, modifier, ignored_methods)
  return true if modifier.nil? || modifier.method?(:public)

  ignored_methods.include?(node.method_name)
end
format_message(modifier) click to toggle source
# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 78
def format_message(modifier)
  visibility = modifier.method_name
  alternative = if visibility == :private
                  ALTERNATIVE_PRIVATE
                else
                  ALTERNATIVE_PROTECTED
                end
  format(MSG, modifier: visibility,
              line: modifier.location.expression.line,
              alternative: alternative)
end
ineffective_modifier(node, ignored_methods = nil, modifier = nil) { |child, modifier| ... } click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 91
def ineffective_modifier(node, ignored_methods = nil, modifier = nil, &block)
  node.each_child_node do |child|
    case child.type
    when :send
      modifier = child if access_modifier?(child)
    when :defs
      ignored_methods ||= private_class_method_names(node)
      next if correct_visibility?(child, modifier, ignored_methods)

      yield child, modifier
    when :kwbegin
      ignored_methods ||= private_class_method_names(node)
      ineffective_modifier(child, ignored_methods, modifier, &block)
    end
  end
end
private_class_method_names(node) click to toggle source
# File lib/rubocop/cop/lint/ineffective_access_modifier.rb, line 74
def private_class_method_names(node)
  private_class_methods(node).to_a.flatten.select(&:basic_literal?).map(&:value)
end