Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/rbs/definition_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ def build_singleton(type_name)
if entry.is_a?(Environment::ClassEntry)
new_method = definition.methods[:new]

if new_method.defs.all? {|d| d.defined_in == BuiltinNames::Class.name }
if new_method && new_method.defs.all? {|d| d.defined_in == BuiltinNames::Class.name }
# The method is _untyped new_.

alias_methods = definition.methods.each.with_object([]) do |entry, array|
Expand Down
33 changes: 33 additions & 0 deletions test/rbs/definition_builder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1313,6 +1313,39 @@ def initialize: (Integer) -> void
end
end

def test_initialize_new_without_class_new
SignatureManager.new do |manager|
manager.files[Pathname("builtin.rbs")] = <<EOF
class BasicObject
end

class Object < BasicObject
end

class Module
end

class Class < Module
end
EOF
manager.files[Pathname("foo.rbs")] = <<EOF
class C
def initialize: (Integer) -> void
end
EOF

manager.build do |env|
builder = DefinitionBuilder.new(env: env)

builder.build_singleton(type_name("::C")).tap do |definition|
assert_instance_of Definition, definition

refute_operator definition.methods, :key?, :new
end
end
end
end

def test_initialize_new_generic
SignatureManager.new do |manager|
manager.files[Pathname("foo.rbs")] = <<EOF
Expand Down
Loading