@@ -3563,4 +3563,86 @@ def baz = nil
35633563 end
35643564 end
35653565 end
3566+
3567+ def test_inline_instance_variable_declarations
3568+ SignatureManager . new do |manager |
3569+ manager . add_ruby_file ( "person.rb" , <<~RUBY )
3570+ class Person
3571+ # @rbs @name: String
3572+ # @rbs @age: Integer?
3573+
3574+ def initialize(name, age)
3575+ @name = name
3576+ @age = age
3577+ end
3578+ end
3579+ RUBY
3580+
3581+ manager . build do |env |
3582+ builder = DefinitionBuilder . new ( env : env )
3583+
3584+ builder . build_instance ( type_name ( "::Person" ) ) . tap do |definition |
3585+ assert_instance_of Definition , definition
3586+
3587+ # Verify instance variables are present
3588+ assert_equal [ :@name , :@age ] . sort , definition . instance_variables . keys . sort
3589+
3590+ # Check @name type
3591+ definition . instance_variables [ :@name ] . tap do |variable |
3592+ assert_instance_of Definition ::Variable , variable
3593+ assert_equal parse_type ( "::String" ) , variable . type
3594+ assert_equal type_name ( "::Person" ) , variable . declared_in
3595+ end
3596+
3597+ # Check @age type
3598+ definition . instance_variables [ :@age ] . tap do |variable |
3599+ assert_instance_of Definition ::Variable , variable
3600+ assert_equal parse_type ( "::Integer?" ) , variable . type
3601+ assert_equal type_name ( "::Person" ) , variable . declared_in
3602+ end
3603+ end
3604+ end
3605+ end
3606+ end
3607+
3608+ def test_inline_instance_variable_with_complex_types
3609+ SignatureManager . new do |manager |
3610+ manager . add_ruby_file ( "container.rb" , <<~RUBY )
3611+ class Container
3612+ # @rbs @items: Array[String]
3613+ # @rbs @metadata: Integer
3614+
3615+ def initialize
3616+ @items = ""
3617+ @metadata = 42
3618+ end
3619+ end
3620+ RUBY
3621+
3622+ manager . build do |env |
3623+ builder = DefinitionBuilder . new ( env : env )
3624+
3625+ builder . build_instance ( type_name ( "::Container" ) ) . tap do |definition |
3626+ assert_instance_of Definition , definition
3627+
3628+ # Verify instance variables are present
3629+ assert_equal [ :@items , :@metadata ] . sort , definition . instance_variables . keys . sort
3630+
3631+ # Check @items type
3632+ definition . instance_variables [ :@items ] . tap do |variable |
3633+ assert_instance_of Definition ::Variable , variable
3634+ assert_equal "Array[::String]" , variable . type . to_s
3635+ assert_equal type_name ( "::Container" ) , variable . declared_in
3636+ end
3637+
3638+ # Check @metadata type
3639+ definition . instance_variables [ :@metadata ] . tap do |variable |
3640+ assert_instance_of Definition ::Variable , variable
3641+ assert_equal parse_type ( "::Integer" ) , variable . type
3642+ assert_equal type_name ( "::Container" ) , variable . declared_in
3643+ end
3644+ end
3645+ end
3646+ end
3647+ end
35663648end
0 commit comments