diff --git a/lib/tapioca/dsl/compilers/active_record_fixtures.rb b/lib/tapioca/dsl/compilers/active_record_fixtures.rb index b9f080e09..a688b536e 100644 --- a/lib/tapioca/dsl/compilers/active_record_fixtures.rb +++ b/lib/tapioca/dsl/compilers/active_record_fixtures.rb @@ -26,10 +26,10 @@ module Compilers # # test_case.rbi # # typed: true # class ActiveSupport::TestCase - # sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) } - # sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) } - # sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) - # .returns(T::Array[Post]) } + # sig { returns(T::Array[Post]) } # No names: returns an Array of all fixtures + # sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } # One name: returns the requested fixture + # sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) # Many names: returns an Array of the requested fixtures + # .returns(T::Array[Post]) } # def posts(fixture_name = nil, *other_fixtures); end # end # ~~~ @@ -110,19 +110,16 @@ def create_fixture_method(mod, name) node.add_opt_param("fixture_name", "nil") node.add_rest_param("other_fixtures") - node.add_sig do |sig| - sig.add_param("fixture_name", "NilClass") - sig.add_param("other_fixtures", "NilClass") + node.add_sig do |sig| # No-parameter overload: returns an Array of all fixtures sig.return_type = "T::Array[#{return_type}]" end - node.add_sig do |sig| + node.add_sig do |sig| # One parameter overload: returns the requested fixture sig.add_param("fixture_name", "T.any(String, Symbol)") - sig.add_param("other_fixtures", "NilClass") sig.return_type = return_type end - node.add_sig do |sig| + node.add_sig do |sig| # Multi-parameter overload: returns an Array of the requested fixtures sig.add_param("fixture_name", "T.any(String, Symbol)") sig.add_param("other_fixtures", "T.any(String, Symbol)") sig.return_type = "T::Array[#{return_type}]" diff --git a/manual/compiler_activerecordfixtures.md b/manual/compiler_activerecordfixtures.md index b7ff85e3e..b34fbf4db 100644 --- a/manual/compiler_activerecordfixtures.md +++ b/manual/compiler_activerecordfixtures.md @@ -18,10 +18,10 @@ The generated RBI by this compiler will produce the following # test_case.rbi # typed: true class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) - .returns(T::Array[Post]) } + sig { returns(T::Array[Post]) } # No names: returns an Array of all fixtures + sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } # One name: returns the requested fixture + sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)) # Many names: returns an Array of the requested fixtures + .returns(T::Array[Post]) } def posts(fixture_name = nil, *other_fixtures); end end ~~~ diff --git a/spec/tapioca/dsl/compilers/active_record_fixtures_spec.rb b/spec/tapioca/dsl/compilers/active_record_fixtures_spec.rb index af311d073..dd72389ea 100644 --- a/spec/tapioca/dsl/compilers/active_record_fixtures_spec.rb +++ b/spec/tapioca/dsl/compilers/active_record_fixtures_spec.rb @@ -79,8 +79,8 @@ class Post < ActiveRecord::Base # typed: strong class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) } + sig { returns(T::Array[Post]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) } def posts(fixture_name = nil, *other_fixtures); end end @@ -107,8 +107,8 @@ class Post < ActiveRecord::Base # typed: strong class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) } + sig { returns(T::Array[Post]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) } def posts(fixture_name = nil, *other_fixtures); end end @@ -146,13 +146,13 @@ class User < ActiveRecord::Base # typed: strong class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Blog::Post]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Blog::Post) } + sig { returns(T::Array[Blog::Post]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(Blog::Post) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Blog::Post]) } def blog_posts(fixture_name = nil, *other_fixtures); end - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[User]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(User) } + sig { returns(T::Array[User]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(User) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[User]) } def users(fixture_name = nil, *other_fixtures); end end @@ -181,8 +181,8 @@ class Post < ActiveRecord::Base # typed: strong class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[Post]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(Post) } + sig { returns(T::Array[Post]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(Post) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[Post]) } def posts_with_other_names(fixture_name = nil, *other_fixtures); end end @@ -204,8 +204,8 @@ def posts_with_other_names(fixture_name = nil, *other_fixtures); end # typed: strong class ActiveSupport::TestCase - sig { params(fixture_name: NilClass, other_fixtures: NilClass).returns(T::Array[T.untyped]) } - sig { params(fixture_name: T.any(String, Symbol), other_fixtures: NilClass).returns(T.untyped) } + sig { returns(T::Array[T.untyped]) } + sig { params(fixture_name: T.any(String, Symbol)).returns(T.untyped) } sig { params(fixture_name: T.any(String, Symbol), other_fixtures: T.any(String, Symbol)).returns(T::Array[T.untyped]) } def posts(fixture_name = nil, *other_fixtures); end end