Sha256: b9bbdd4b9cf0c2d6543ca40c770f1cb2b19da7b5fcaedb1832660dd03cd20fdb

Contents?: true

Size: 1.05 KB

Versions: 18

Compression:

Stored size: 1.05 KB

Contents

# typed: strict
# frozen_string_literal: true

module Tapioca
  module Gem
    module Listeners
      class SorbetProps < Base
        extend T::Sig
        include RBIHelper

        private

        sig { override.params(event: ScopeNodeAdded).void }
        def on_scope(event)
          constant = event.constant
          node = event.node

          return unless T::Props::ClassMethods === constant

          constant.props.map do |name, prop|
            type = sanitize_signature_types(prop.fetch(:type_object, "T.untyped").to_s)

            default = prop.key?(:default) || prop.key?(:factory) ? "T.unsafe(nil)" : nil
            node << if prop.fetch(:immutable, false)
              RBI::TStructConst.new(name.to_s, type, default: default)
            else
              RBI::TStructProp.new(name.to_s, type, default: default)
            end
          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

18 entries across 18 versions & 1 rubygems

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