Class: RuboCop::Cop::Lint::UselessAccessModifier

Inherits:
Cop
  • Object
show all
Defined in:
lib/rubocop/cop/lint/useless_access_modifier.rb

Overview

This cop checks for redundant access modifiers, including those with no code, those which are repeated, and leading `public` modifiers in a class or module body. Conditionally-defined methods are considered as always being defined, and thus access modifiers guarding such methods are not redundant.

This cop has `ContextCreatingMethods` option. The default setting value is an empty array that means no method is specified. This setting is an array of methods which, when called, are known to create its own context in the module's current access context.

It also has `MethodCreatingMethods` option. The default setting value is an empty array that means no method is specified. This setting is an array of methods which, when called, are known to create other methods in the module's current access context.

Examples:

# bad
class Foo
  public # this is redundant (default access is public)

  def method
  end
end

# bad
class Foo  # The following is redundant (methods defined on the class'
  # singleton class are not affected by the public modifier)

  public

  def self.method3
  end
end

# bad
class Foo
  protected

  define_method(:method2) do
  end

  protected # this is redundant (repeated from previous modifier)

  [1,2,3].each do |i|
    define_method("foo#{i}") do
    end
  end
end

# bad
class Foo
  private # this is redundant (no following methods are defined)
end

# good
class Foo
  private # this is not redundant (a method is defined)

  def method2
  end
end

# good
class Foo  # The following is not redundant (conditionally defined methods are
  # considered as always defining a method)

  private

  if condition?
    def method
    end
  end
end

# good
class Foo
  protected # this is not redundant (a method is defined)

  define_method(:method2) do
  end
end

ContextCreatingMethods: concerning

# Lint/UselessAccessModifier:
#   ContextCreatingMethods:
#     - concerning

# good
require 'active_support/concern'
class Foo
  concerning :Bar do
    def some_public_method
    end

    private

    def some_private_method
    end
  end

  # this is not redundant because `concerning` created its own context
  private

  def some_other_private_method
  end
end

MethodCreatingMethods: delegate

# Lint/UselessAccessModifier:
#   MethodCreatingMethods:
#     - delegate

# good
require 'active_support/core_ext/module/delegation'
class Foo  # this is not redundant because `delegate` creates methods

  private

  delegate :method_a, to: :method_b
end

Constant Summary collapse

MSG =
'Useless `%<current>s` access modifier.'

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, #correct, department, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AST::Sexp

#s

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#on_block(node) ⇒ Object


138
139
140
141
142
# File 'lib/rubocop/cop/lint/useless_access_modifier.rb', line 138

def on_block(node)
  return unless eval_call?(node)

  check_node(node.body)
end

#on_class(node) ⇒ Object


130
131
132
# File 'lib/rubocop/cop/lint/useless_access_modifier.rb', line 130

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

#on_module(node) ⇒ Object


134
135
136
# File 'lib/rubocop/cop/lint/useless_access_modifier.rb', line 134

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

#on_sclass(node) ⇒ Object


144
145
146
# File 'lib/rubocop/cop/lint/useless_access_modifier.rb', line 144

def on_sclass(node)
  check_node(node.children[1]) # singleton class body
end