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
141 142 143 144 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 141 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
134 135 136 137 138 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 134 def_node_matcher :access_modifier_with_symbol?, <<~PATTERN (send nil? {:private :protected :public :module_function} {(sym _) (splat {#percent_symbol_array? const})} ) PATTERN |
#on_send(node) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/rubocop/cop/style/access_modifier_declarations.rb', line 146 def on_send(node) return unless node.access_modifier? return if ALLOWED_NODE_TYPES.include?(node.parent&.type) return if allow_modifiers_on_symbols?(node) return if allow_modifiers_on_attrs?(node) if offense?(node) add_offense(node.loc.selector) do |corrector| autocorrect(corrector, node) end opposite_style_detected else correct_style_detected end end |