Sha256: 114583d527e67e66b1a1ab8511bb36df5857a85d087abcc9923c9e06daa2acf1

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

# typed: strict
# frozen_string_literal: true

module Spoom
  module Deadcode
    module Plugins
      class ActiveModel < Base
        extend T::Sig

        ignore_classes_inheriting_from(/^(::)?ActiveModel::EachValidator$/)
        ignore_methods_named("validate_each")

        sig { override.params(indexer: Indexer, send: Send).void }
        def on_send(indexer, send)
          return if send.recv

          case send.name
          when "attribute", "attributes"
            send.each_arg(Prism::SymbolNode) do |arg|
              indexer.reference_method(arg.unescaped, send.node)
            end
          when "validate", "validates", "validates!", "validates_each"
            send.each_arg(Prism::SymbolNode) do |arg|
              indexer.reference_method(arg.unescaped, send.node)
            end
            send.each_arg_assoc do |key, value|
              key = key.slice.delete_suffix(":")

              case key
              when "if", "unless"
                indexer.reference_method(value.slice.delete_prefix(":"), send.node) if value
              else
                indexer.reference_constant(camelize(key), send.node)
              end
            end
          when "validates_with"
            arg = send.args.first
            if arg.is_a?(Prism::SymbolNode)
              indexer.reference_constant(arg.unescaped, send.node)
            end
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spoom-1.3.2 lib/spoom/deadcode/plugins/active_model.rb
spoom-1.3.1 lib/spoom/deadcode/plugins/active_model.rb
spoom-1.3.0 lib/spoom/deadcode/plugins/active_model.rb