Class: Spoom::Deadcode::Plugins::ActionPack

Inherits:
Base
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/spoom/deadcode/plugins/actionpack.rb

Constant Summary collapse

CALLBACKS =
T.let(
  [
    "after_action",
    "append_after_action",
    "append_around_action",
    "append_before_action",
    "around_action",
    "before_action",
    "prepend_after_action",
    "prepend_around_action",
    "prepend_before_action",
    "skip_after_action",
    "skip_around_action",
    "skip_before_action",
  ].freeze,
  T::Array[String],
)

Instance Attribute Summary

Attributes inherited from Base

#index

Instance Method Summary collapse

Methods inherited from Base

ignore_classes_inheriting_from, ignore_classes_named, ignore_constants_named, ignore_methods_named, ignore_modules_named, #initialize, #internal_on_define_accessor, #internal_on_define_class, #internal_on_define_constant, #internal_on_define_method, #internal_on_define_module, #on_define_accessor, #on_define_class, #on_define_constant, #on_define_module

Constructor Details

This class inherits a constructor from Spoom::Deadcode::Plugins::Base

Instance Method Details

#on_define_method(definition) ⇒ Object



31
32
33
34
35
36
# File 'lib/spoom/deadcode/plugins/actionpack.rb', line 31

def on_define_method(definition)
  owner = definition.owner
  return unless owner.is_a?(Model::Class)

  @index.ignore(definition) if ignored_subclass?(owner)
end

#on_send(send) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/spoom/deadcode/plugins/actionpack.rb', line 39

def on_send(send)
  return unless send.recv.nil? && CALLBACKS.include?(send.name)

  arg = send.args.first
  case arg
  when Prism::SymbolNode
    @index.reference_method(arg.unescaped, send.location)
  end

  send.each_arg_assoc do |key, value|
    key = key.slice.delete_suffix(":")

    case key
    when "if", "unless"
      @index.reference_method(value.slice.delete_prefix(":"), send.location) if value
    else
      @index.reference_constant(camelize(key), send.location)
    end
  end
end