Class: RuboCop::Cop::Style::AccessModifierDeclarations
- Extended by:
- AutoCorrector
- Includes:
- ConfigurableEnforcedStyle, RangeHelp
- Defined in:
- lib/rubocop/cop/style/access_modifier_declarations.rb
Overview
Access modifiers should be declared to apply to a group of methods or inline before each method, depending on configuration. EnforcedStyle config covers only method definitions. Applications of visibility methods to symbols can be controlled using AllowModifiersOnSymbols config. Also, the visibility of ‘attr*` methods can be controlled using AllowModifiersOnAttrs config.
In Ruby 3.0, ‘attr*` methods now return an array of defined method names as symbols. So we can write the modifier and `attr*` in inline style. AllowModifiersOnAttrs config allows `attr*` methods to be written in inline style without modifying applications that have been maintained for a long time in group style. Furthermore, developers who are not very familiar with Ruby may know that the modifier applies to `def`, but they may not know that it also applies to `attr*` methods. It would be easier to understand if we could write `attr*` methods in inline style.
Constant Summary collapse
- GROUP_STYLE_MESSAGE =
[ '`%<access_modifier>s` should not be', 'inlined in method definitions.' ].join(' ')
- INLINE_STYLE_MESSAGE =
[ '`%<access_modifier>s` should be', 'inlined in method definitions.' ].join(' ')
- RESTRICT_ON_SEND =
%i[private protected public module_function].freeze
- ALLOWED_NODE_TYPES =
%i[pair block].freeze
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #access_modifier_with_attr?(node) ⇒ Object
- #access_modifier_with_symbol?(node) ⇒ Object
- #on_send(node) ⇒ Object
Methods included from AutoCorrector
Methods included from ConfigurableEnforcedStyle
#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_configured?, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected
Methods inherited from Base
#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version
Methods included from ExcludeLimit
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Method Details
#access_modifier_with_attr?(node) ⇒ Object
143 144 145 146 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 143 def_node_matcher :access_modifier_with_attr?, <<~PATTERN (send nil? {:private :protected :public :module_function} (send nil? {:attr :attr_reader :attr_writer :attr_accessor} _+)) PATTERN |
#access_modifier_with_symbol?(node) ⇒ Object
136 137 138 139 140 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 136 def_node_matcher :access_modifier_with_symbol?, <<~PATTERN (send nil? {:private :protected :public :module_function} {(sym _)+ (splat {#percent_symbol_array? const send})} ) PATTERN |
#on_send(node) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 148 def on_send(node) return if allowed?(node) if offense?(node) add_offense(node.loc.selector) do |corrector| autocorrect(corrector, node) end opposite_style_detected else correct_style_detected end end |