diff --git a/lib/rbs/cli.rb b/lib/rbs/cli.rb index bf3a3c22a..5f0413490 100644 --- a/lib/rbs/cli.rb +++ b/lib/rbs/cli.rb @@ -1061,7 +1061,7 @@ def run_test(args, options) env_hash = { 'RUBYOPT' => "#{ENV['RUBYOPT']} -rrbs/test/setup", 'RBS_TEST_OPT' => test_opt(options), - 'RBS_TEST_LOGLEVEL' => %w(DEBUG INFO WARN ERROR FATAL)[RBS.logger_level || 5] || "UNKNOWN", + 'RBS_TEST_LOGLEVEL' => RBS.logger_level || "UNKNOWN", 'RBS_TEST_SAMPLE_SIZE' => sample_size, 'RBS_TEST_DOUBLE_SUITE' => double_suite, 'RBS_TEST_UNCHECKED_CLASSES' => (unchecked_classes.join(',') unless unchecked_classes.empty?), diff --git a/lib/rbs/environment_loader.rb b/lib/rbs/environment_loader.rb index de3cb8fa0..833a9c893 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 (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/cli_test.rb b/test/rbs/cli_test.rb index a9becac11..2e8666398 100644 --- a/test/rbs/cli_test.rb +++ b/test/rbs/cli_test.rb @@ -1044,6 +1044,22 @@ def test_prototype__runtime__todo def test_test Dir.mktmpdir do |dir| dir = Pathname(dir) + dir.join('foo.rb').write(<<~RB) + class Foo + def foo(*) + end + end + + module Bar + class Baz + def foo + end + end + end + + # violates type definition + Foo.new.foo(1) + RB dir.join('foo.rbs').write(<<~RBS) class Foo def foo: () -> void @@ -1059,10 +1075,12 @@ def foo: () -> void with_cli do |cli| # `exit` is a common shell built-in command. assert_rbs_test_no_errors(cli, dir, %w(--target ::Foo exit)) + assert_rbs_test_no_errors(cli, dir, %w(--target ::Foo exit), %w(--log-level debug)) refute_cli_success cli.run(%w(test)) refute_cli_success cli.run(%W(-I #{dir} test)) refute_cli_success cli.run(%W(-I #{dir} test --target ::Foo)) + refute_cli_success cli.run(%W(-I #{dir} test --target ::Foo ruby #{dir}/foo.rb)) end end end @@ -1715,8 +1733,8 @@ def x: () -> untyped end end - def assert_rbs_test_no_errors cli, dir, arg_array - args = ['-I', dir.to_s, 'test', *arg_array] + def assert_rbs_test_no_errors cli, dir, arg_array, env_array = [] + args = ['-I', dir.to_s, *env_array, 'test', *arg_array] exit_status = cli.run(args) assert_instance_of Integer, exit_status assert_predicate exit_status, :zero? diff --git a/test/rbs/environment_loader_test.rb b/test/rbs/environment_loader_test.rb index 893699000..27100f80a 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