From 2274975fc4eaa391af6851c8c40dc06a24add028 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Fri, 6 Dec 2024 11:23:17 +0900 Subject: [PATCH] Introduces a new `target.*` syntax for everything in the target --- lib/steep/cli.rb | 11 ++++- lib/steep/drivers/check.rb | 6 +-- lib/steep/server/type_check_controller.rb | 4 +- sig/steep/drivers/check.rbs | 2 +- test/cli_test.rb | 52 +++++++++++++++++++++++ 5 files changed, 67 insertions(+), 8 deletions(-) diff --git a/lib/steep/cli.rb b/lib/steep/cli.rb index 19ea47d5..ab68bc94 100644 --- a/lib/steep/cli.rb +++ b/lib/steep/cli.rb @@ -128,10 +128,17 @@ def process_check end opts.on("--group=GROUP", "Specify target/group name to type check") do |arg| - # @type var group: String + # @type var arg: String target, group = arg.split(".") target or raise - command.active_group_names << [target.to_sym, group&.to_sym] + case group + when "*" + command.active_group_names << [target.to_sym, true] + when nil + command.active_group_names << [target.to_sym, nil] + else + command.active_group_names << [target.to_sym, group.to_sym] + end end opts.on("--[no-]type-check", "Type check Ruby code") do |v| diff --git a/lib/steep/drivers/check.rb b/lib/steep/drivers/check.rb index ecaeed9a..1ae061c6 100644 --- a/lib/steep/drivers/check.rb +++ b/lib/steep/drivers/check.rb @@ -38,12 +38,12 @@ def active_group?(group) case group when Project::Target active_group_names.any? {|target_name, group_name| - target_name == group.name && group_name == nil + target_name == group.name && (group_name == nil || group_name == true) } when Project::Group active_group_names.any? {|target_name, group_name| target_name == group.target.name && - (group_name == group.name || group_name.nil?) + (group_name == group.name || group_name == true) } end end @@ -206,7 +206,7 @@ def run def load_files(files, target, group, params:) if type_check_code - files.each_group_source_path(group) do |path| + files.each_group_source_path(group, true) do |path| params[:code_paths] << [target.name.to_s, target.project.absolute_path(path).to_s] end end diff --git a/lib/steep/server/type_check_controller.rb b/lib/steep/server/type_check_controller.rb index 8a20b586..c2b8602e 100644 --- a/lib/steep/server/type_check_controller.rb +++ b/lib/steep/server/type_check_controller.rb @@ -266,7 +266,7 @@ def make_group_request(groups, progress:) request.code_paths << [target_group.name, path] end else - group_set = groups.map do |group_name| + group_set = groups.filter_map do |group_name| target_name, group_name = group_name.split(".", 2) target_name or raise @@ -280,7 +280,7 @@ def make_group_request(groups, progress:) else project.targets.find {|target| target.name == target_name } end - end.compact.to_set + end.to_set files.signature_paths.each do |path, target_group| if group_set.include?(target_group) diff --git a/sig/steep/drivers/check.rbs b/sig/steep/drivers/check.rbs index e3a7e942..4c47e49f 100644 --- a/sig/steep/drivers/check.rbs +++ b/sig/steep/drivers/check.rbs @@ -17,7 +17,7 @@ module Steep attr_reader jobs_option: Utils::JobsOption - attr_reader active_group_names: Array[[Symbol, Symbol?]] + attr_reader active_group_names: Array[[Symbol, Symbol | true | nil]] attr_accessor type_check_code: bool diff --git a/test/cli_test.rb b/test/cli_test.rb index 729f7811..f05666be 100644 --- a/test/cli_test.rb +++ b/test/cli_test.rb @@ -179,6 +179,58 @@ def test_check_group__group end end + def test_check_group__group__target + in_tmpdir do + (current_dir + "Steepfile").write(<<-EOF) +target :app do + group :foo do + check "foo.rb" + end + + group :bar do + check "bar.rb" + end + + check "baz.rb" +end + EOF + + (current_dir + "foo.rb").write(<<-EOF) +1 + "2" + EOF + (current_dir + "bar.rb").write(<<-EOF) +1 + "2" + EOF + (current_dir + "baz.rb").write(<<-EOF) +1 + "2" + EOF + + stdout, _ = sh(*steep, "check", "--group=app.foo") + + assert_match(/^foo.rb:1:0/, stdout) + refute_match(/^bar.rb/, stdout) + refute_match(/^baz.rb/, stdout) + + stdout, _ = sh(*steep, "check", "--group=app.bar") + + refute_match(/^foo.rb/, stdout) + assert_match(/^bar.rb:1:0/, stdout) + refute_match(/^baz.rb/, stdout) + + stdout, _ = sh(*steep, "check", "--group=app.*") + + assert_match(/^foo.rb:1:0/, stdout) + assert_match(/^bar.rb:1:0/, stdout) + assert_match(/^baz.rb:1:0/, stdout) + + stdout, _ = sh(*steep, "check", "--group=app") + + refute_match(/^foo.rb/, stdout) + refute_match(/^bar.rb/, stdout) + assert_match(/^baz.rb:1:0/, stdout) + end + end + def test_check_failure_severity_level in_tmpdir do (current_dir + "Steepfile").write(<<-EOF)