# File lib/bundler/vendor/thor/base.rb, line 156
      def argument(name, options={})
        is_thor_reserved_word?(name, :argument)
        no_tasks { attr_accessor name }

        required = if options.key?(:optional)
          !options[:optional]
        elsif options.key?(:required)
          options[:required]
        else
          options[:default].nil?
        end

        remove_argument name

        arguments.each do |argument|
          next if argument.required?
          raise ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " <<
                               "the non-required argument #{argument.human_name.inspect}."
        end if required

        arguments << Thor::Argument.new(name, options[:desc], required, options[:type],
                                              options[:default], options[:banner])
      end