module RuboCop::Cop::HashTransformMethod
Common functionality for Style/HashTransformKeys and Style/HashTransformValues
Constants
- Autocorrection
Internal helper class to hold autocorrect data
- Captures
Internal helper class to hold match data
- RESTRICT_ON_SEND
Public Instance Methods
on_block(node)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 17 def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler on_bad_each_with_object(node) do |*match| handle_possible_offense(node, match, 'each_with_object') end return if target_ruby_version < 2.6 on_bad_to_h(node) { |*match| handle_possible_offense(node, match, 'to_h {...}') } end
on_csend(node)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 34 def on_csend(node) on_bad_map_to_h(node) { |*match| handle_possible_offense(node, match, 'map {...}.to_h') } end
on_send(node)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 27 def on_send(node) on_bad_hash_brackets_map(node) do |*match| handle_possible_offense(node, match, 'Hash[_.map {...}]') end on_bad_map_to_h(node) { |*match| handle_possible_offense(node, match, 'map {...}.to_h') } end
Private Instance Methods
execute_correction(corrector, node, correction)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 108 def execute_correction(corrector, node, correction) correction.strip_prefix_and_suffix(node, corrector) correction.set_new_method_name(new_method_name, corrector) captures = extract_captures(correction.match) correction.set_new_arg_name(captures.transformed_argname, corrector) correction.set_new_body_expression(captures.transforming_body_expr, corrector) end
extract_captures(_match)
click to toggle source
@abstract
@return [Captures]
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 83 def extract_captures(_match) raise NotImplementedError end
handle_possible_offense(node, match, match_desc)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 60 def handle_possible_offense(node, match, match_desc) captures = extract_captures(match) # If key didn't actually change either, this is most likely a false # positive (receiver isn't a hash). return if captures.noop_transformation? # Can't `transform_keys` if key transformation uses value, or # `transform_values` if value transformation uses key. return if captures.transformation_uses_both_args? return unless captures.use_transformed_argname? message = "Prefer `#{new_method_name}` over `#{match_desc}`." add_offense(node, message: message) do |corrector| correction = prepare_correction(node) execute_correction(corrector, node, correction) end end
new_method_name()
click to toggle source
@abstract
@return [String]
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 90 def new_method_name raise NotImplementedError end
on_bad_each_with_object(_node)
click to toggle source
@abstract Implemented with `def_node_matcher`
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 41 def on_bad_each_with_object(_node) raise NotImplementedError end
on_bad_hash_brackets_map(_node)
click to toggle source
@abstract Implemented with `def_node_matcher`
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 46 def on_bad_hash_brackets_map(_node) raise NotImplementedError end
on_bad_map_to_h(_node)
click to toggle source
@abstract Implemented with `def_node_matcher`
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 51 def on_bad_map_to_h(_node) raise NotImplementedError end
on_bad_to_h(_node)
click to toggle source
@abstract Implemented with `def_node_matcher`
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 56 def on_bad_to_h(_node) raise NotImplementedError end
prepare_correction(node)
click to toggle source
# File lib/rubocop/cop/mixin/hash_transform_method.rb, line 94 def prepare_correction(node) if (match = on_bad_each_with_object(node)) Autocorrection.from_each_with_object(node, match) elsif (match = on_bad_hash_brackets_map(node)) Autocorrection.from_hash_brackets_map(node, match) elsif (match = on_bad_map_to_h(node)) Autocorrection.from_map_to_h(node, match) elsif (match = on_bad_to_h(node)) Autocorrection.from_to_h(node, match) else raise 'unreachable' end end