Skip to content

Commit 3f4a14d

Browse files
committed
Support multi class/module declarations in inline RBS
1 parent 30cff1a commit 3f4a14d

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

lib/rbs/environment.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -378,11 +378,10 @@ def insert_ruby_decl(decl, context:, namespace:)
378378
if entry.is_a?(ModuleEntry)
379379
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
380380
end
381+
else
382+
entry = class_decls[name] = ClassEntry.new(name)
381383
end
382384

383-
entry = ClassEntry.new(name)
384-
class_decls[name] = entry
385-
386385
entry << [context, decl]
387386

388387
inner_context = [context, name] #: Resolver::context
@@ -400,11 +399,10 @@ def insert_ruby_decl(decl, context:, namespace:)
400399
if entry.is_a?(ClassEntry)
401400
raise DuplicatedDeclarationError.new(name, decl, *entry.each_decl.to_a)
402401
end
402+
else
403+
entry = class_decls[name] = ModuleEntry.new(name)
403404
end
404405

405-
entry = ModuleEntry.new(name)
406-
class_decls[name] = entry
407-
408406
entry << [context, decl]
409407

410408
inner_context = [context, name] #: Resolver::context

test/rbs/environment_test.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,4 +719,31 @@ class C
719719
end
720720
end
721721
end
722+
723+
def test__ruby__multiple_decls
724+
result = parse_inline(<<~RUBY)
725+
class Hello
726+
end
727+
728+
class Hello
729+
end
730+
731+
module World
732+
end
733+
734+
module World
735+
end
736+
RUBY
737+
738+
env = Environment.new
739+
env.add_source(RBS::Source::Ruby.new(result.buffer, result.prism_result, result.declarations, result.diagnostics))
740+
741+
env.resolve_type_names.tap do |env|
742+
class_decl = env.class_decls[RBS::TypeName.parse("::Hello")]
743+
assert_equal 2, class_decl.context_decls.size
744+
745+
module_decl = env.class_decls[RBS::TypeName.parse("::World")]
746+
assert_equal 2, module_decl.context_decls.size
747+
end
748+
end
722749
end

0 commit comments

Comments
 (0)