From 5030a01b4920b388ed72ed7c653a67e78cad9510 Mon Sep 17 00:00:00 2001 From: HoneyryderChuck Date: Wed, 22 Apr 2026 15:00:43 +0100 Subject: [PATCH] feat: load local dependencies from manifest.yaml this circumvents the need to be explicit about what to require via RBS_TEST_OPT when a manifest.yaml is already present (as it's considered a recommendation for gems as per the collection.md doc page). --- lib/rbs/environment_loader.rb | 8 ++++++++ test/rbs/environment_loader_test.rb | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/rbs/environment_loader.rb b/lib/rbs/environment_loader.rb index de3cb8fa09..e93d689f54 100644 --- a/lib/rbs/environment_loader.rb +++ b/lib/rbs/environment_loader.rb @@ -49,6 +49,14 @@ def add(path: nil, library: nil, version: nil, resolve_dependencies: true) case when path dirs << path + + # search for manifest.yaml + if path.directory? && (manifest = path.each_entry.find { |s| s.basename.to_s == "manifest.yaml" }) + local_lib = RBS::Collection::Sources::Local.new(path: path, base_directory: Pathname.pwd) + local_lib.dependencies_of("", "")&.each do |dep| + add(library: dep['name'], version: nil) + end + end when library if libs.add?(Library.new(name: library, version: version)) && resolve_dependencies resolve_dependencies(library: library, version: version) diff --git a/test/rbs/environment_loader_test.rb b/test/rbs/environment_loader_test.rb index 893699000b..27100f80a6 100644 --- a/test/rbs/environment_loader_test.rb +++ b/test/rbs/environment_loader_test.rb @@ -82,6 +82,22 @@ def test_loading_stdlib end end + def test_loading_stdlib_via_manifest + mktmpdir do |path| + path.join("manifest.yaml").write(<<-RBS) +dependencies: + - name: uri + RBS + loader = EnvironmentLoader.new + loader.add(path: path) + + env = Environment.new + loader.load(env: env) + + assert_operator env.class_decls, :key?, RBS::TypeName.parse("::URI") + end + end + def test_loading_library_from_gem_repo mktmpdir do |path| (path + "gems").mkdir