Sha256: a1ebbbd2244ad6630695dd1e7af192ffe03367aad876824205f2779882586098

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

# typed: strict
# frozen_string_literal: true

module Spoom
  module Deadcode
    # An abstraction to simplify handling of Prism::CallNode nodes.
    class Send < T::Struct
      extend T::Sig

      const :node, Prism::CallNode
      const :name, String
      const :recv, T.nilable(Prism::Node), default: nil
      const :args, T::Array[Prism::Node], default: []
      const :block, T.nilable(Prism::Node), default: nil
      const :location, Location

      sig do
        type_parameters(:T)
          .params(arg_type: T::Class[T.type_parameter(:T)], block: T.proc.params(arg: T.type_parameter(:T)).void)
          .void
      end
      def each_arg(arg_type, &block)
        args.each do |arg|
          yield(T.unsafe(arg)) if arg.is_a?(arg_type)
        end
      end

      sig { params(block: T.proc.params(key: Prism::Node, value: T.nilable(Prism::Node)).void).void }
      def each_arg_assoc(&block)
        args.each do |arg|
          next unless arg.is_a?(Prism::KeywordHashNode) || arg.is_a?(Prism::HashNode)

          arg.elements.each do |assoc|
            yield(assoc.key, assoc.value) if assoc.is_a?(Prism::AssocNode)
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spoom-1.5.0 lib/spoom/deadcode/send.rb
spoom-1.4.2 lib/spoom/deadcode/send.rb
spoom-1.4.1 lib/spoom/deadcode/send.rb
spoom-1.4.0 lib/spoom/deadcode/send.rb
spoom-1.3.3 lib/spoom/deadcode/send.rb