Skip to content

Commit bcc671b

Browse files
committed
Update gem generation output
1 parent 4e37e67 commit bcc671b

3 files changed

Lines changed: 71 additions & 5 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: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ 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+
user_excluded_gems = user_excluded_gem_names(gem_queue)
22+
gem_queue.reject! { |gem| @exclude.include?(gem.name) }
2123
anything_done = [
2224
perform_removals,
2325
gem_queue.any?,
@@ -44,6 +46,14 @@ def execute
4446
else
4547
say("No operations performed, all RBIs are up-to-date.", [:green, :bold])
4648
end
49+
unless @skipped_gems.empty?
50+
say("\nNote: Tapioca is skipping gem rbi generation for following gems due to the built-in configuration:", [:yellow, :bold])
51+
say(@skipped_gems.join(", "), [:yellow, :bold])
52+
end
53+
unless user_excluded_gems.empty?
54+
say("\nNote: Tapioca is skipping gem rbi generation for following gems due to user configuration:", [:yellow, :bold])
55+
say(user_excluded_gems.join(", "), [:yellow, :bold])
56+
end
4757
ensure
4858
GitAttributes.create_generated_attribute_file(@outpath)
4959
end
@@ -56,16 +66,28 @@ def gems_to_generate(gem_names)
5666
gem = @bundle.gem(gem_name)
5767

5868
if gem.nil?
59-
next if @lsp_addon
60-
61-
raise Tapioca::Error, set_color("Error: Cannot find gem '#{gem_name}'", :red)
69+
if @lsp_addon
70+
next
71+
elsif Gemfile::GemSpec::IGNORED_GEMS.include?(gem_name)
72+
@skipped_gems << gem_name
73+
next
74+
else
75+
raise Tapioca::Error, set_color("Error: Cannot find gem '#{gem_name}'", :red)
76+
end
6277
end
63-
6478
gems.concat(gem_dependencies(gem)) if @include_dependencies
6579
gems << gem
6680
end
6781
end
6882

83+
#: (Array[Gemfile::GemSpec] gem_queue) -> Array[String]
84+
def user_excluded_gem_names(gem_queue)
85+
@exclude.uniq.select do |gem_name|
86+
@bundle.gem(gem_name) &&
87+
(@gem_names.include?(gem_name) || gem_queue.any? { |gem| gem.name == gem_name })
88+
end
89+
end
90+
6991
#: (Gemfile::GemSpec gem, ?Array[Gemfile::GemSpec] dependencies) -> Array[Gemfile::GemSpec]
7092
def gem_dependencies(gem, dependencies = [])
7193
direct_dependencies = gem.dependencies.filter_map { |dependency| @bundle.gem(dependency.name) }

spec/tapioca/cli/gem_spec.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,49 @@ 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 is skipping gem rbi generation for following gems due to the built-in configuration:
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 is skipping gem rbi generation for following gems due to the built-in configuration:
898+
sorbet
899+
OUT
900+
assert_stdout_includes(result, <<~OUT)
901+
Note: Tapioca is skipping gem rbi generation for following gems due to user configuration:
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 is skipping gem rbi generation for following gems due to user configuration:
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+
880923
it "fails with error when gem cannot be found" do
881924
result = @project.tapioca("gem non_existent_gem")
882925

0 commit comments

Comments
 (0)