module RuboCop::Cop::IndexMethod
def execute_correction(corrector, node, correction)
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
def extract_captures(match)
def extract_captures(match) argname, body_expr = *match Captures.new(argname, body_expr) end
def handle_possible_offense(node, match, match_desc)
def handle_possible_offense(node, match, match_desc) captures = extract_captures(match) return if captures.noop_transformation? add_offense( node, message: "Prefer `#{new_method_name}` over `#{match_desc}`." ) do |corrector| correction = prepare_correction(node) execute_correction(corrector, node, correction) end end
def new_method_name
def new_method_name raise NotImplementedError end
def on_bad_each_with_object(_node)
- Abstract: - Implemented with `def_node_matcher`
def on_bad_each_with_object(_node) raise NotImplementedError end
def on_bad_hash_brackets_map(_node)
- Abstract: - Implemented with `def_node_matcher`
def on_bad_hash_brackets_map(_node) raise NotImplementedError end
def on_bad_map_to_h(_node)
- Abstract: - Implemented with `def_node_matcher`
def on_bad_map_to_h(_node) raise NotImplementedError end
def on_bad_to_h(_node)
- Abstract: - Implemented with `def_node_matcher`
def on_bad_to_h(_node) raise NotImplementedError end
def on_block(node)
def on_block(node) 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) do |*match| handle_possible_offense(node, match, 'to_h { ... }') end end
def on_csend(node)
def on_csend(node) on_bad_map_to_h(node) do |*match| handle_possible_offense(node, match, 'map { ... }.to_h') end end
def on_send(node)
def on_send(node) on_bad_map_to_h(node) do |*match| handle_possible_offense(node, match, 'map { ... }.to_h') end on_bad_hash_brackets_map(node) do |*match| handle_possible_offense(node, match, 'Hash[map { ... }]') end end
def prepare_correction(node)
def prepare_correction(node) if (match = on_bad_each_with_object(node)) Autocorrection.from_each_with_object(node, match) elsif (match = on_bad_to_h(node)) Autocorrection.from_to_h(node, match) elsif (match = on_bad_map_to_h(node)) Autocorrection.from_map_to_h(node, match) elsif (match = on_bad_hash_brackets_map(node)) Autocorrection.from_hash_brackets_map(node, match) else raise 'unreachable' end end