lib/tapioca/commands/check_shims.rb in tapioca-0.9.3 vs lib/tapioca/commands/check_shims.rb in tapioca-0.9.4

- old
+ new

@@ -13,30 +13,41 @@ gem_rbi_dir: String, dsl_rbi_dir: String, annotations_rbi_dir: String, shim_rbi_dir: String, todo_rbi_file: String, - payload: T::Boolean + payload: T::Boolean, + number_of_workers: T.nilable(Integer) ).void end - def initialize(gem_rbi_dir:, dsl_rbi_dir:, annotations_rbi_dir:, shim_rbi_dir:, todo_rbi_file:, payload:) + def initialize( + gem_rbi_dir:, + dsl_rbi_dir:, + annotations_rbi_dir:, + shim_rbi_dir:, + todo_rbi_file:, + payload:, + number_of_workers: + ) super() @gem_rbi_dir = gem_rbi_dir @dsl_rbi_dir = dsl_rbi_dir @annotations_rbi_dir = annotations_rbi_dir @shim_rbi_dir = shim_rbi_dir @todo_rbi_file = todo_rbi_file @payload = payload + @number_of_workers = number_of_workers end sig { override.void } def execute index = RBI::Index.new if (!Dir.exist?(@shim_rbi_dir) || Dir.empty?(@shim_rbi_dir)) && !File.exist?(@todo_rbi_file) say("No shim RBIs to check", :green) - exit(0) + + return end payload_path = T.let(nil, T.nilable(String)) if @payload @@ -44,48 +55,58 @@ Dir.mktmpdir do |dir| payload_path = dir result = sorbet("--no-config --print=payload-sources:#{payload_path}") unless result.status - say_error("Sorbet failed to dump payload") - say_error(result.err) - exit(1) + raise Thor::Error, <<~ERROR + "Sorbet failed to dump payload" + #{result.err} + ERROR end - index_payload(index, payload_path) + index_rbis(index, "payload", payload_path, number_of_workers: @number_of_workers) end else - say_error("The version of Sorbet used in your Gemfile.lock does not support `--print=payload-sources`") - say_error("Current: v#{SORBET_GEM_SPEC.version}") - say_error("Required: #{FEATURE_REQUIREMENTS[:print_payload_sources]}") - exit(1) + raise Thor::Error, <<~ERROR + The version of Sorbet used in your Gemfile.lock does not support `--print=payload-sources` + Current: v#{SORBET_GEM_SPEC.version} + Required: #{FEATURE_REQUIREMENTS[:print_payload_sources]} + ERROR end end index_rbi(index, "todo", @todo_rbi_file) - index_rbis(index, "shim", @shim_rbi_dir) - index_rbis(index, "gem", @gem_rbi_dir) - index_rbis(index, "dsl", @dsl_rbi_dir) - index_rbis(index, "annotation", @annotations_rbi_dir) + index_rbis(index, "shim", @shim_rbi_dir, number_of_workers: @number_of_workers) + index_rbis(index, "gem", @gem_rbi_dir, number_of_workers: @number_of_workers) + index_rbis(index, "dsl", @dsl_rbi_dir, number_of_workers: @number_of_workers) + index_rbis(index, "annotation", @annotations_rbi_dir, number_of_workers: @number_of_workers) duplicates = duplicated_nodes_from_index(index, shim_rbi_dir: @shim_rbi_dir, todo_rbi_file: @todo_rbi_file) + unless duplicates.empty? + messages = [] + duplicates.each do |key, nodes| - say_error("\nDuplicated RBI for #{key}:", :red) + messages << set_color("\nDuplicated RBI for #{key}:", :red) + nodes.each do |node| node_loc = node.loc + next unless node_loc loc_string = location_to_payload_url(node_loc, path_prefix: payload_path) - say_error(" * #{loc_string}", :red) + messages << set_color(" * #{loc_string}", :red) end end - say_error("\nPlease remove the duplicated definitions from #{@shim_rbi_dir} and #{@todo_rbi_file}", :red) - exit(1) + + messages << set_color( + "\nPlease remove the duplicated definitions from #{@shim_rbi_dir} and #{@todo_rbi_file}", :red + ) + + raise Thor::Error, messages.join("\n") end say("\nNo duplicates found in shim RBIs", :green) - exit(0) end end end end