class RuboCop::Cop::Lint::IneffectiveAccessModifier

end
end
end
puts ‘hi’
def method
private
class << self
class C
end
private_class_method :method
end
puts ‘hi’
def self.method
class C
@good
end
end
puts ‘hi’
def self.method
private
class C
@bad
@example
used for that.
singleton methods private/protected. ‘private_class_method` can be
applied to a singleton method. These access modifiers do not make
This cop checks for `private` or `protected` access modifiers which are

def check_node(node)

def check_node(node)
  if node && node.begin_type?
    clear
    check_scope(node)
    @useless.each do |_name, (defs_node, visibility, modifier)|
      add_offense(defs_node, :keyword,
                  format_message(visibility, modifier))
    end
  end
end

def check_scope(node, cur_vis = :public)

def check_scope(node, cur_vis = :public)
  node.children.each do |child|
    if (new_vis = access_modifier(child))
      @last_access_modifier = child
      cur_vis = new_vis
    elsif child.defs_type?
      if cur_vis != :public
        _, method_name, = *child
        @useless[method_name] = [child, cur_vis, @last_access_modifier]
      end
    elsif (methods = private_class_method(child))
      # don't warn about defs nodes which are followed by a call to
      # `private_class_method :name`
      # obviously the programmer knows what they are doing
      methods.select(&:sym_type?).each do |sym|
        @useless.delete(sym.children[0])
      end
    elsif child.kwbegin_type?
      cur_vis = check_scope(child, cur_vis)
    end
  end
  cur_vis
end

def clear

def clear
  @useless = {}
  @last_access_modifier = nil
end

def format_message(visibility, modifier)

def format_message(visibility, modifier)
  alternative = if visibility == :private
                  ALTERNATIVE_PRIVATE
                else
                  ALTERNATIVE_PROTECTED
                end
  format(MSG, visibility, modifier.location.expression.line, visibility,
         alternative)
end

def on_class(node)

def on_class(node)
  check_node(node.children[2]) # class body
end

def on_module(node)

def on_module(node)
  check_node(node.children[1]) # module body
end