Skip to content

Commit 91b331e

Browse files
committed
Update Environment and confirms DefinitionBuilder is working
1 parent 13bd8e7 commit 91b331e

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

lib/rbs/environment.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,12 @@ def resolve_ruby_member(resolver, member, context:)
854854
member.buffer,
855855
resolved_annotation
856856
)
857+
when AST::Ruby::Members::ModuleSelfMember
858+
resolved_annotation = member.annotation.map_type_name {|name| absolute_type_name(resolver, nil, name, context: context) }
859+
AST::Ruby::Members::ModuleSelfMember.new(
860+
member.buffer,
861+
resolved_annotation
862+
)
857863
else
858864
raise "Unknown member type: #{member.class}"
859865
end

test/rbs/definition_builder_test.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3844,4 +3844,65 @@ def bar = ""
38443844
end
38453845
end
38463846
end
3847+
3848+
def test_inline_decl__module_self
3849+
SignatureManager.new do |manager|
3850+
manager.files[Pathname("foo.rbs")] = <<~RBS
3851+
interface _StringConvertible
3852+
def to_str: () -> String
3853+
end
3854+
RBS
3855+
3856+
manager.add_ruby_file("a.rb", <<~RUBY)
3857+
# @rbs module-self: _StringConvertible
3858+
module M
3859+
# @rbs () -> String
3860+
def display
3861+
to_str
3862+
end
3863+
end
3864+
RUBY
3865+
3866+
manager.build do |env|
3867+
builder = DefinitionBuilder.new(env: env)
3868+
3869+
builder.build_instance(type_name("::M")).tap do |definition|
3870+
assert_equal Set[:to_str, :display], Set.new(definition.methods.keys)
3871+
assert_method_definition definition.methods[:to_str], ["() -> ::String"], accessibility: :public
3872+
assert_method_definition definition.methods[:display], ["() -> ::String"], accessibility: :public
3873+
end
3874+
end
3875+
end
3876+
end
3877+
3878+
def test_inline_decl__module_self_multiple
3879+
SignatureManager.new do |manager|
3880+
manager.files[Pathname("foo.rbs")] = <<~RBS
3881+
interface _Each[T]
3882+
def each: () { (T) -> void } -> void
3883+
end
3884+
3885+
interface _Size
3886+
def size: () -> Integer
3887+
end
3888+
RBS
3889+
3890+
manager.add_ruby_file("a.rb", <<~RUBY)
3891+
# @rbs module-self: _Each[String]
3892+
# @rbs module-self: _Size
3893+
module M
3894+
end
3895+
RUBY
3896+
3897+
manager.build do |env|
3898+
builder = DefinitionBuilder.new(env: env)
3899+
3900+
builder.build_instance(type_name("::M")).tap do |definition|
3901+
assert_equal Set[:each, :size], Set.new(definition.methods.keys)
3902+
assert_method_definition definition.methods[:each], ["() { (::String) -> void } -> void"], accessibility: :public
3903+
assert_method_definition definition.methods[:size], ["() -> ::Integer"], accessibility: :public
3904+
end
3905+
end
3906+
end
3907+
end
38473908
end

0 commit comments

Comments
 (0)