Sha256: 48a19f71c325d7c66b732d8ae4bedcad9162e30d285fcdd401a0a1a46404e7a7

Contents?: true

Size: 1.2 KB

Versions: 27

Compression:

Stored size: 1.2 KB

Contents

# frozen_string_literal: true

module Reek
  module AST
    module SexpExtensions
      # Utility methods for :send nodes.
      module SendNode
        ATTR_DEFN_METHODS = [:attr_writer, :attr_accessor].freeze

        def receiver
          children.first
        end

        def name
          children[1]
        end

        def args
          children[2..-1]
        end

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

        def module_creation_call?
          object_creation_call? && module_creation_receiver?
        end

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

        def object_creation_call?
          name == :new
        end

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

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

      Op_AsgnNode = SendNode
      CSendNode = SendNode
    end
  end
end

Version data entries

27 entries across 25 versions & 2 rubygems

Version Path
reek-6.0.6 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.5 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.4 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.3 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.2 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.1 lib/reek/ast/sexp_extensions/send.rb
reek-6.0.0 lib/reek/ast/sexp_extensions/send.rb
reek-5.6.0 lib/reek/ast/sexp_extensions/send.rb
reek-5.5.0 lib/reek/ast/sexp_extensions/send.rb
reek-5.4.1 lib/reek/ast/sexp_extensions/send.rb
reek-5.4.0 lib/reek/ast/sexp_extensions/send.rb
reek-5.3.2 lib/reek/ast/sexp_extensions/send.rb
reek-5.3.1 lib/reek/ast/sexp_extensions/send.rb
reek-5.3.0 lib/reek/ast/sexp_extensions/send.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/sexp_extensions/send.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/sexp_extensions/send.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/sexp_extensions/send.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/lib/reek/ast/sexp_extensions/send.rb
reek-5.2.0 lib/reek/ast/sexp_extensions/send.rb
reek-5.1.0 lib/reek/ast/sexp_extensions/send.rb