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

- old
+ new

@@ -189,18 +189,19 @@ rescue NameError [name, nil] end unprocessable_constants = constant_map.select { |_, v| v.nil? } + unless unprocessable_constants.empty? unprocessable_constants.each do |name, _| say("Error: Cannot find constant '#{name}'", :red) filename = dsl_rbi_filename(name) remove_file(filename) if File.file?(filename) end - exit(1) + raise Thor::Error, "" end constant_map.values end @@ -209,16 +210,17 @@ compiler_map = compiler_names.to_h do |name| [name, resolve(name)] end unprocessable_compilers = compiler_map.select { |_, v| v.nil? } + unless unprocessable_compilers.empty? - unprocessable_compilers.each do |name, _| - say("Error: Cannot find compiler '#{name}'", :red) - end + message = unprocessable_compilers.map do |name, _| + set_color("Error: Cannot find compiler '#{name}'", :red) + end.join("\n") - exit(1) + raise Thor::Error, message end T.cast(compiler_map.values, T::Array[T.class_of(Tapioca::Dsl::Compiler)]) end @@ -330,21 +332,21 @@ sig { params(diff: T::Hash[String, Symbol], command: Symbol).void } def report_diff_and_exit_if_out_of_date(diff, command) if diff.empty? say("Nothing to do, all RBIs are up-to-date.") else - say("RBI files are out-of-date. In your development environment, please run:", :green) - say(" `#{default_command(command)}`", [:green, :bold]) - say("Once it is complete, be sure to commit and push any changes", :green) + reasons = diff.group_by(&:last).sort.map do |cause, diff_for_cause| + build_error_for_files(cause, diff_for_cause.map(&:first)) + end.join("\n") - say("") + raise Thor::Error, <<~ERROR + #{set_color("RBI files are out-of-date. In your development environment, please run:", :green)} + #{set_color("`#{default_command(command)}`", [:green, :bold])} + #{set_color("Once it is complete, be sure to commit and push any changes", :green)} - say("Reason:", [:red]) - diff.group_by(&:last).sort.each do |cause, diff_for_cause| - say(build_error_for_files(cause, diff_for_cause.map(&:first))) - end - - exit(1) + #{set_color("Reason:", :red)} + #{reasons} + ERROR end end sig { params(path: Pathname).returns(T::Array[Pathname]) } def rbi_files_in(path)