class RuboCop::Cop::Lint::UselessAccessModifier

end
private # this is redundant
end
def method2
private # this is not redundant
end
def method
public # this is redundant
class Foo
@example
a class or module body.
no code, those which are repeated, and leading ‘public` modifiers in
This cop checks for redundant access modifiers, including those with

def check_node(node)

def check_node(node)
  return if node.nil?
  if node.begin_type?
    check_scope(node)
  elsif (vis = access_modifier(node))
    add_offense(node, :expression, format(MSG, vis))
  end
end

def check_scope(node, cur_vis = :public)

def check_scope(node, cur_vis = :public)
  unused = nil
  node.child_nodes.each do |child|
    if (new_vis = access_modifier(child))
      # does this modifier just repeat the existing visibility?
      if new_vis == cur_vis
        add_offense(child, :expression, format(MSG, cur_vis))
      else
        # was the previous modifier never applied to any defs?
        add_offense(unused, :expression, format(MSG, cur_vis)) if unused
        # once we have already warned about a certain modifier, don't
        # warn again even if it is never applied to any method defs
        unused = child
      end
      cur_vis = new_vis
    elsif method_definition?(child)
      unused = nil
    elsif child.kwbegin_type? || child.send_type?
      cur_vis, unused = check_scope(child, cur_vis)
    end
  end
  add_offense(unused, :expression, format(MSG, cur_vis)) if unused
  [cur_vis, unused]
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