Sha256: b6679bb12605d160a262f3a5d6a1363826610fe0bbf9d6f30c7dfd43e2e1f3c6

Contents?: true

Size: 1.37 KB

Versions: 8

Compression:

Stored size: 1.37 KB

Contents

module Reek
  module AST
    module SexpExtensions
      # Utility methods for :send nodes.
      module SendNode
        VISIBILITY_MODIFIERS = [:private, :public, :protected, :module_function]
        ATTR_DEFN_METHODS = [:attr_writer, :attr_accessor]

        def receiver
          children.first
        end

        def method_name
          children[1]
        end

        def args
          children[2..-1]
        end

        def participants
          ([receiver] + args).compact
        end

        def arg_names
          args.map { |arg| arg.children.first }
        end

        def module_creation_call?
          object_creation_call? && module_creation_receiver?
        end

        def module_creation_receiver?
          receiver && [:Class, :Struct].include?(receiver.simple_name)
        end

        def object_creation_call?
          method_name == :new
        end

        def visibility_modifier?
          VISIBILITY_MODIFIERS.include?(method_name)
        end

        def attribute_writer?
          ATTR_DEFN_METHODS.include?(method_name) ||
            attr_with_writable_flag?
        end

        # Handles the case where we create an attribute writer via:
        # attr :foo, true
        def attr_with_writable_flag?
          method_name == :attr && args.any? && args.last.type == :true
        end
      end

      Op_AsgnNode = SendNode
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
reek-3.8.3 lib/reek/ast/sexp_extensions/send.rb
reek-3.8.2 lib/reek/ast/sexp_extensions/send.rb
reek-3.8.1 lib/reek/ast/sexp_extensions/send.rb
reek-3.8.0 lib/reek/ast/sexp_extensions/send.rb
reek-3.7.1 lib/reek/ast/sexp_extensions/send.rb
reek-3.7.0 lib/reek/ast/sexp_extensions/send.rb
reek-3.6.1 lib/reek/ast/sexp_extensions/send.rb
reek-3.6.0 lib/reek/ast/sexp_extensions/send.rb