Sha256: 9be791a3c2b87c318b50aefc224433db0de47eca1273140a903517e5be30e905

Contents?: true

Size: 1.7 KB

Versions: 6

Compression:

Stored size: 1.7 KB

Contents

module Reek
  module AST
    module SexpExtensions
      # Base module for utility methods for :def and :defs nodes.
      module MethodNodeBase
        def arguments
          parameters.reject(&:block?)
        end

        def arg_names
          arguments.map(&:name)
        end

        def parameters
          argslist.components
        end

        def parameter_names
          parameters.map(&:name)
        end

        def name_without_bang
          name.to_s.chop
        end

        def ends_with_bang?
          name[-1] == '!'
        end

        def body_nodes(types, ignoring = [])
          if body
            body.find_nodes(types, ignoring)
          else
            []
          end
        end
      end

      # Utility methods for :def nodes.
      module DefNode
        include MethodNodeBase

        def name
          children.first
        end

        def argslist
          children[1]
        end

        def body
          children[2]
        end

        def full_name(outer)
          [outer, name].reject(&:empty?).join('#')
        end

        def depends_on_instance?
          ReferenceCollector.new(self).num_refs_to_self > 0
        end
      end

      # Utility methods for :defs nodes.
      module DefsNode
        include MethodNodeBase

        def receiver
          children.first
        end

        def name
          children[1]
        end

        def argslist
          children[2]
        end

        def body
          children[3]
        end

        def full_name(outer)
          prefix = outer == '' ? '' : "#{outer}#"
          "#{prefix}#{receiver.name}.#{name}"
        end

        def depends_on_instance?
          false
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
reek-3.11 lib/reek/ast/sexp_extensions/methods.rb
reek-3.10.2 lib/reek/ast/sexp_extensions/methods.rb
reek-3.10.1 lib/reek/ast/sexp_extensions/methods.rb
reek-3.10.0 lib/reek/ast/sexp_extensions/methods.rb
reek-3.9.1 lib/reek/ast/sexp_extensions/methods.rb
reek-3.9.0 lib/reek/ast/sexp_extensions/methods.rb