Class: RuboCop::Cop::Style::HashSyntax
- Extended by:
- AutoCorrector
- Includes:
- ConfigurableEnforcedStyle, HashShorthandSyntax, RangeHelp
- Defined in:
- lib/rubocop/cop/style/hash_syntax.rb
Overview
Checks hash literal syntax.
It can enforce either the use of the class hash rocket syntax or the use of the newer Ruby 1.9 syntax (when applicable).
A separate offense is registered for each problematic pair.
The supported styles are:
-
ruby19 - forces use of the 1.9 syntax (e.g. ‘1`) when hashes have
all symbols for keys
-
hash_rockets - forces use of hash rockets for all hashes
-
no_mixed_keys - simply checks for hashes with mixed syntaxes
-
ruby19_no_mixed_keys - forces use of ruby 1.9 syntax and forbids mixed
syntax hashes
This cop has EnforcedShorthandSyntax option. It can enforce either the use of the explicit hash value syntax or the use of Ruby 3.1’s hash value shorthand syntax.
The supported styles are:
-
always - forces use of the 3.1 syntax (e.g. foo:)
-
never - forces use of explicit hash literal value
-
either - accepts both shorthand and explicit use of hash literal value
-
consistent - forces use of the 3.1 syntax only if all values can be omitted in the hash
-
either_consistent - accepts both shorthand and explicit use of hash literal value,
but they must be consistent
Constant Summary collapse
- MSG_19 =
'Use the new Ruby 1.9 hash syntax.'- MSG_NO_MIXED_KEYS =
"Don't mix styles in the same hash."- MSG_HASH_ROCKETS =
'Use hash rockets syntax.'- NO_MIXED_KEYS_STYLES =
%i[ruby19_no_mixed_keys no_mixed_keys].freeze
Constants included from RangeHelp
RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN
Constants included from HashShorthandSyntax
HashShorthandSyntax::DO_NOT_MIX_EXPLICIT_VALUE_MSG, HashShorthandSyntax::DO_NOT_MIX_MSG_PREFIX, HashShorthandSyntax::DO_NOT_MIX_OMIT_VALUE_MSG, HashShorthandSyntax::EXPLICIT_HASH_VALUE_MSG, HashShorthandSyntax::OMIT_HASH_VALUE_MSG
Constants inherited from Base
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
- #alternative_style ⇒ Object
- #hash_rockets_check(pairs) ⇒ Object
- #no_mixed_keys_check(pairs) ⇒ Object
- #on_hash(node) ⇒ Object
- #ruby19_check(pairs) ⇒ Object
- #ruby19_no_mixed_keys_check(pairs) ⇒ Object
Methods included from AutoCorrector
Methods included from HashShorthandSyntax
#on_hash_for_mixed_shorthand, #on_pair
Methods included from ConfigurableEnforcedStyle
#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?, #message, #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_gem_version, #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
#alternative_style ⇒ Object
189 190 191 192 193 194 195 196 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 189 def alternative_style case style when :hash_rockets :ruby19 when :ruby19, :ruby19_no_mixed_keys :hash_rockets end end |
#hash_rockets_check(pairs) ⇒ Object
167 168 169 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 167 def hash_rockets_check(pairs) check(pairs, ':', MSG_HASH_ROCKETS) end |
#no_mixed_keys_check(pairs) ⇒ Object
181 182 183 184 185 186 187 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 181 def no_mixed_keys_check(pairs) if sym_indices?(pairs) check(pairs, pairs.first.inverse_delimiter, MSG_NO_MIXED_KEYS) else check(pairs, ':', MSG_NO_MIXED_KEYS) end end |
#on_hash(node) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 145 def on_hash(node) pairs = node.pairs return if pairs.empty? on_hash_for_mixed_shorthand(node) if style == :hash_rockets || force_hash_rockets?(pairs) hash_rockets_check(pairs) elsif style == :ruby19_no_mixed_keys ruby19_no_mixed_keys_check(pairs) elsif style == :no_mixed_keys no_mixed_keys_check(pairs) else ruby19_check(pairs) end end |
#ruby19_check(pairs) ⇒ Object
163 164 165 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 163 def ruby19_check(pairs) check(pairs, '=>', MSG_19) if sym_indices?(pairs) end |
#ruby19_no_mixed_keys_check(pairs) ⇒ Object
171 172 173 174 175 176 177 178 179 |
# File 'lib/rubocop/cop/style/hash_syntax.rb', line 171 def ruby19_no_mixed_keys_check(pairs) if force_hash_rockets?(pairs) check(pairs, ':', MSG_HASH_ROCKETS) elsif sym_indices?(pairs) check(pairs, '=>', MSG_19) else check(pairs, ':', MSG_NO_MIXED_KEYS) end end |