# File 'lib/thor/base.rb', line 44definitialize(args=[],local_options={},config={})# rubocop:disable MethodLength
parse_options=self.class.class_options# The start method splits inbound arguments at the first argument
# that looks like an option (starts with - or --). It then calls
# new, passing in the two halves of the arguments Array as the
# first two parameters.
command_options=config.delete(:command_options)# hook for start
parse_options=parse_options.merge(command_options)ifcommand_optionsiflocal_options.is_a?(Array)array_options,hash_options=local_options,{}else# Handle the case where the class was explicitly instantiated
# with pre-parsed options.
array_options,hash_options=[],local_optionsend# Let Thor::Options parse the options first, so it can remove
# declared options from the array. This will leave us with
# a list of arguments that weren't declared.
stop_on_unknown=self.class.stop_on_unknown_option?config[:current_command]opts=Thor::Options.new(parse_options,hash_options,stop_on_unknown)self.options=opts.parse(array_options)self.options=config[:class_options].merge(options)ifconfig[:class_options]# If unknown options are disallowed, make sure that none of the
# remaining arguments looks like an option.
opts.check_unknown!ifself.class.check_unknown_options?(config)# Add the remaining arguments from the options parser to the
# arguments passed in to initialize. Then remove any positional
# arguments declared using #argument (this is primarily used
# by Thor::Group). Tis will leave us with the remaining
# positional arguments.
to_parse=argsto_parse+=opts.remainingunlessself.class.strict_args_position?(config)thor_args=Thor::Arguments.new(self.class.arguments)thor_args.parse(to_parse).each{|k,v|__send__("#{k}=",v)}@args=thor_args.remainingend