@@ -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 ( "\n Note: 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 ( "\n Note: 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 ) }
0 commit comments