Skip to content

Commit 0cd6cf5

Browse files
committed
Show skipped gem RBI generation
1 parent 5d7aba6 commit 0cd6cf5

3 files changed

Lines changed: 84 additions & 6 deletions

File tree

lib/tapioca/commands/abstract_gem.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def initialize(
7171
@include_doc = include_doc #: bool
7272
@include_loc = include_loc #: bool
7373
@include_exported_rbis = include_exported_rbis
74+
@skipped_gems = [] #: Array[String]
7475
@halt_upon_load_error = halt_upon_load_error
7576
end
7677

lib/tapioca/commands/gem_generate.rb

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def execute
1717
halt_upon_load_error: @halt_upon_load_error,
1818
)
1919

20-
gem_queue = gems_to_generate(@gem_names).reject { |gem| @exclude.include?(gem.name) }
20+
gem_queue = gems_to_generate(@gem_names)
21+
gem_queue.reject! { |gem| @exclude.include?(gem.name) }
2122
anything_done = [
2223
perform_removals,
2324
gem_queue.any?,
@@ -30,6 +31,17 @@ def execute
3031
end
3132
end
3233

34+
user_excluded_gems = @gem_names & @exclude
35+
36+
unless @skipped_gems.empty?
37+
say("\nNote: Tapioca skipped RBI generation for the following gems because they are ignored by default:", [:yellow, :bold])
38+
say(@skipped_gems.join(", "), [:yellow, :bold])
39+
end
40+
unless user_excluded_gems.empty?
41+
say("\nNote: Tapioca skipped RBI generation for the following gems because they were excluded:", [:yellow, :bold])
42+
say(user_excluded_gems.join(", "), [:yellow, :bold])
43+
end
44+
3345
if anything_done
3446
validate_rbi_files(
3547
command: default_command(:gem, @gem_names.join(" ")),
@@ -52,15 +64,19 @@ def execute
5264
def gems_to_generate(gem_names)
5365
return @bundle.dependencies if gem_names.empty?
5466

55-
(gem_names - @exclude).each_with_object([]) do |gem_name, gems|
67+
gem_names.each_with_object([]) do |gem_name, gems|
5668
gem = @bundle.gem(gem_name)
5769

5870
if gem.nil?
59-
next if @lsp_addon
60-
61-
raise Tapioca::Error, set_color("Error: Cannot find gem '#{gem_name}'", :red)
71+
if @lsp_addon
72+
next
73+
elsif Gemfile::GemSpec::IGNORED_GEMS.include?(gem_name)
74+
@skipped_gems << gem_name
75+
next
76+
else
77+
raise Tapioca::Error, set_color("Error: Cannot find gem '#{gem_name}'", :red)
78+
end
6279
end
63-
6480
gems.concat(gem_dependencies(gem)) if @include_dependencies
6581
gems << gem
6682
end

spec/tapioca/cli/gem_spec.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,67 @@ class Secret; end
877877
assert_success_status(result)
878878
end
879879

880+
it "reports explicitly requested ignored gems" do
881+
result = @project.tapioca("gem sorbet", exclude: [])
882+
883+
assert_stdout_includes(result, <<~OUT)
884+
Note: Tapioca skipped RBI generation for the following gems because they are ignored by default:
885+
sorbet
886+
OUT
887+
refute_includes(result.out, "Compiled sorbet")
888+
889+
assert_empty_stderr(result)
890+
assert_success_status(result)
891+
end
892+
893+
it "reports gems excluded by built-in and user configuration" do
894+
result = @project.tapioca("gem sorbet rbi --exclude rbi")
895+
896+
assert_stdout_includes(result, <<~OUT)
897+
Note: Tapioca skipped RBI generation for the following gems because they are ignored by default:
898+
sorbet
899+
OUT
900+
assert_stdout_includes(result, <<~OUT)
901+
Note: Tapioca skipped RBI generation for the following gems because they were excluded:
902+
rbi
903+
OUT
904+
refute_includes(result.out, "Compiled rbi")
905+
906+
assert_empty_stderr(result)
907+
assert_success_status(result)
908+
end
909+
910+
it "reports gems excluded by user configuration" do
911+
result = @project.tapioca("gem rbi --exclude rbi")
912+
913+
assert_stdout_includes(result, <<~OUT)
914+
Note: Tapioca skipped RBI generation for the following gems because they were excluded:
915+
rbi
916+
OUT
917+
refute_includes(result.out, "Compiled rbi")
918+
919+
assert_empty_stderr(result)
920+
assert_success_status(result)
921+
end
922+
923+
it "does not report exclusions when no gems are explicitly requested" do
924+
result = @project.tapioca("gem --exclude rbi")
925+
926+
refute_includes(result.out, "because they were excluded")
927+
928+
assert_empty_stderr(result)
929+
assert_success_status(result)
930+
end
931+
932+
it "does not report exclusions when all gems are requested" do
933+
result = @project.tapioca("gem --all --exclude rbi")
934+
935+
refute_includes(result.out, "because they were excluded")
936+
937+
assert_empty_stderr(result)
938+
assert_success_status(result)
939+
end
940+
880941
it "fails with error when gem cannot be found" do
881942
result = @project.tapioca("gem non_existent_gem")
882943

0 commit comments

Comments
 (0)