From a628d8b01e38921059b6e46c68b4e5a777b35de9 Mon Sep 17 00:00:00 2001 From: dak2 <32436625+dak2@users.noreply.github.com> Date: Wed, 28 Oct 2026 10:08:50 +0900 Subject: [PATCH] Fix InvalidOverloadMethodError message for singleton methods An invalid overload such as `def self.foo: () -> void | ...` was reported as `::Hello#foo` because the error kind was hardcoded to `:instance`. The message pointed users to an instance method that doesn't exist. --- lib/rbs/definition_builder.rb | 2 +- test/rbs/definition_builder_test.rb | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) 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)