Sha256: 0ab8200a6d6db88d93ba98d3a19b4d0d173b02ee218c569d3229cfedcc0fadc8

Contents?: true

Size: 1.24 KB

Versions: 41

Compression:

Stored size: 1.24 KB

Contents

# typed: strict
# frozen_string_literal: true

module Tapioca
  module Gem
    module Listeners
      class Subconstants < Base
        extend T::Sig

        include Runtime::Reflection

        private

        sig { override.params(event: ScopeNodeAdded).void }
        def on_scope(event)
          symbol = event.symbol
          return if @pipeline.symbol_in_payload?(symbol) && event.node.empty?

          prefix = symbol == "Object" ? "" : symbol

          constant = event.constant
          constants_of(constant).sort.uniq.map do |constant_name|
            name = "#{prefix}::#{constant_name}"
            subconstant = constantize(name)

            # Don't compile modules of Object because Object::Foo == Foo
            # Don't compile modules of BasicObject because BasicObject::BasicObject == BasicObject
            next if (Object == constant || BasicObject == constant) && Module === subconstant
            next unless Runtime::Reflection.constant_defined?(subconstant)

            @pipeline.push_constant(name, subconstant)
          end
        end

        sig { override.params(event: NodeAdded).returns(T::Boolean) }
        def ignore?(event)
          event.is_a?(Tapioca::Gem::ForeignScopeNodeAdded)
        end
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 2 rubygems

Version Path
tapioca-0.16.8 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.7 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.6 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.5 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.4 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.3 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.2 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.1 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.16.0 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.15.1 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.15.0 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.14.4 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.14.3 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.13.3 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.13.2 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.13.1 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.13.0 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.12.0 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.11.17 lib/tapioca/gem/listeners/subconstants.rb
tapioca-0.11.16 lib/tapioca/gem/listeners/subconstants.rb