diff --git a/lib/rbs/definition_builder.rb b/lib/rbs/definition_builder.rb index ab0f6067d..b8ac5d405 100644 --- a/lib/rbs/definition_builder.rb +++ b/lib/rbs/definition_builder.rb @@ -936,7 +936,7 @@ def define_method(methods, definition, method, subst, self_type_methods, defined raise InvalidOverloadMethodError.new( type_name: definition.type_name, method_name: method.name, - kind: :instance, + kind: definition.class_type? ? :singleton : :instance, members: method.overloads ) end diff --git a/test/rbs/definition_builder_test.rb b/test/rbs/definition_builder_test.rb index b82a2d020..b05bc7f0d 100644 --- a/test/rbs/definition_builder_test.rb +++ b/test/rbs/definition_builder_test.rb @@ -1727,6 +1727,26 @@ def foo: (Integer) -> String | ... end end + def test_definition_singleton_method_type_def_overload_from_super_no_super + SignatureManager.new do |manager| + manager.files.merge!(Pathname("foo.rbs") => <<-EOF) +class Hello + def self.foo: (Integer) -> String | ... +end + EOF + manager.build do |env| + builder = DefinitionBuilder.new(env: env) + + assert_raises RBS::InvalidOverloadMethodError do + builder.build_singleton(type_name("::Hello")) + end.tap do |error| + assert_equal :singleton, error.kind + assert_include error.message, "Invalid method overloading: ::Hello.foo" + end + end + end + end + def test_new_from_included_initialize SignatureManager.new do |manager| manager.files.merge!(Pathname("foo.rbs") => <<-EOF)