diff --git a/lib/tapioca/gem/listeners/sorbet_props.rb b/lib/tapioca/gem/listeners/sorbet_props.rb index 32eddfff8..1886dd045 100644 --- a/lib/tapioca/gem/listeners/sorbet_props.rb +++ b/lib/tapioca/gem/listeners/sorbet_props.rb @@ -19,7 +19,7 @@ def on_scope(event) constant.props.map do |name, prop| type = prop.fetch(:type_object, "T.untyped").to_s.gsub(".returns()", ".void") - default = prop.key?(:default) ? "T.unsafe(nil)" : nil + 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 diff --git a/spec/tapioca/gem/pipeline_spec.rb b/spec/tapioca/gem/pipeline_spec.rb index af0cc38e0..999dfbf03 100644 --- a/spec/tapioca/gem/pipeline_spec.rb +++ b/spec/tapioca/gem/pipeline_spec.rb @@ -2459,6 +2459,7 @@ class Bar < T::Struct prop :bar, String const :baz, T::Hash[String, T.untyped] prop :quux, T.untyped, default: [1, 2, 3] + const :quuz, Integer, factory: -> { 1 } end RUBY @@ -2602,6 +2603,7 @@ class Bar < ::T::Struct const :baz, T::Hash[::String, T.untyped] const :foo, ::Integer prop :quux, T.untyped, default: T.unsafe(nil) + const :quuz, ::Integer, default: T.unsafe(nil) class << self def inherited(s); end