Sha256: 73747ddb9ab2849f10093413295f673bb9cfac7c0bd1d676f5215813d35aa40d

Contents?: true

Size: 1.55 KB

Versions: 6

Compression:

Stored size: 1.55 KB

Contents

require_relative 'code_context'
require_relative 'singleton_method_context'

module Reek
  module Context
    # Semi-transparent context to represent a metaclass while building the
    # context tree. This context will not be part of the resulting tree, but
    # will track context and visibility separately while building is in
    # progress.
    class GhostContext < ModuleContext
      attr_reader :children

      def register_with_parent(parent)
        @parent = parent
      end

      def append_child_context(child)
        real_parent = parent.append_child_context(child)
        super
        real_parent
      end

      # Return the correct class for child method contexts (representing nodes
      # of type `:def`). For GhostContext, this is the class that represents
      # singleton methods.
      def method_context_class
        SingletonMethodContext
      end

      # Return the correct class for child attribute contexts. For
      # GhostContext, this is the class that represents singleton attributes.
      def attribute_context_class
        SingletonAttributeContext
      end

      def track_visibility(visibility, names)
        visibility_tracker.track_visibility children: children,
                                            visibility: visibility,
                                            names: names
      end

      def track_singleton_visibility(_visibility, _names)
      end

      def record_use_of_self
        parent.record_use_of_self
      end

      def statement_counter
        parent.statement_counter
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
reek-3.11 lib/reek/context/ghost_context.rb
reek-3.10.2 lib/reek/context/ghost_context.rb
reek-3.10.1 lib/reek/context/ghost_context.rb
reek-3.10.0 lib/reek/context/ghost_context.rb
reek-3.9.1 lib/reek/context/ghost_context.rb
reek-3.9.0 lib/reek/context/ghost_context.rb