74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | # typed: strict | ||
|  | # frozen_string_literal: true | ||
|  | 
 | ||
|  | require "utils/formatter" | ||
|  | 
 | ||
|  | module Homebrew | ||
|  |   module CLI | ||
|  |     class OptionConstraintError < UsageError | ||
|  |       sig { params(arg1: String, arg2: String, missing: T::Boolean).void } | ||
|  |       def initialize(arg1, arg2, missing: false) | ||
|  |         message = if missing | ||
|  |           "`#{arg2}` cannot be passed without `#{arg1}`." | ||
|  |         else | ||
|  |           "`#{arg1}` and `#{arg2}` should be passed together." | ||
|  |         end | ||
|  |         super message | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     class OptionConflictError < UsageError | ||
|  |       sig { params(args: T::Array[String]).void } | ||
|  |       def initialize(args) | ||
|  |         args_list = args.map { Formatter.option(_1) }.join(" and ") | ||
|  |         super "Options #{args_list} are mutually exclusive." | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     class InvalidConstraintError < UsageError | ||
|  |       sig { params(arg1: String, arg2: String).void } | ||
|  |       def initialize(arg1, arg2) | ||
|  |         super "`#{arg1}` and `#{arg2}` cannot be mutually exclusive and mutually dependent simultaneously." | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     class MaxNamedArgumentsError < UsageError | ||
|  |       sig { params(maximum: Integer, types: T::Array[Symbol]).void } | ||
|  |       def initialize(maximum, types: []) | ||
|  |         super case maximum | ||
|  |         when 0
 | ||
|  |           "This command does not take named arguments." | ||
|  |         else | ||
|  |           types << :named if types.empty? | ||
|  |           arg_types = types.map { |type| type.to_s.tr("_", " ") } | ||
|  |                            .to_sentence two_words_connector: " or ", last_word_connector: " or " | ||
|  | 
 | ||
|  |           "This command does not take more than #{maximum} #{arg_types} #{Utils.pluralize("argument", maximum)}." | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     class MinNamedArgumentsError < UsageError | ||
|  |       sig { params(minimum: Integer, types: T::Array[Symbol]).void } | ||
|  |       def initialize(minimum, types: []) | ||
|  |         types << :named if types.empty? | ||
|  |         arg_types = types.map { |type| type.to_s.tr("_", " ") } | ||
|  |                          .to_sentence two_words_connector: " or ", last_word_connector: " or " | ||
|  | 
 | ||
|  |         super "This command requires at least #{minimum} #{arg_types} #{Utils.pluralize("argument", minimum)}." | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     class NumberOfNamedArgumentsError < UsageError | ||
|  |       sig { params(minimum: Integer, types: T::Array[Symbol]).void } | ||
|  |       def initialize(minimum, types: []) | ||
|  |         types << :named if types.empty? | ||
|  |         arg_types = types.map { |type| type.to_s.tr("_", " ") } | ||
|  |                          .to_sentence two_words_connector: " or ", last_word_connector: " or " | ||
|  | 
 | ||
|  |         super "This command requires exactly #{minimum} #{arg_types} #{Utils.pluralize("argument", minimum)}." | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |