@@ -107,8 +107,7 @@ defmodule OptionParser do
107107 """
108108 @ spec parse ( argv , options ) :: { parsed , argv , errors }
109109 def parse ( argv , opts \\ [ ] ) when is_list ( argv ) and is_list ( opts ) do
110- config = compile_config ( opts , true )
111- do_parse ( argv , config , [ ] , [ ] , [ ] )
110+ do_parse ( argv , compile_config ( opts ) , [ ] , [ ] , [ ] , true )
112111 end
113112
114113 @ doc """
@@ -128,37 +127,36 @@ defmodule OptionParser do
128127 """
129128 @ spec parse_head ( argv , options ) :: { parsed , argv , errors }
130129 def parse_head ( argv , opts \\ [ ] ) when is_list ( argv ) and is_list ( opts ) do
131- config = compile_config ( opts , false )
132- do_parse ( argv , config , [ ] , [ ] , [ ] )
130+ do_parse ( argv , compile_config ( opts ) , [ ] , [ ] , [ ] , false )
133131 end
134132
135- defp do_parse ( [ ] , _config , opts , args , invalid ) do
133+ defp do_parse ( [ ] , _config , opts , args , invalid , _all? ) do
136134 { Enum . reverse ( opts ) , Enum . reverse ( args ) , Enum . reverse ( invalid ) }
137135 end
138136
139- defp do_parse ( argv , { aliases , switches , strict , all } = config , opts , args , invalid ) do
137+ defp do_parse ( argv , { aliases , switches , strict } = config , opts , args , invalid , all? ) do
140138 case next ( argv , aliases , switches , strict ) do
141139 { :ok , option , value , rest } ->
142140 # the option exist and it was successfully parsed
143141 kinds = List . wrap Keyword . get ( switches , option )
144142 new_opts = do_store_option ( opts , option , value , kinds )
145- do_parse ( rest , config , new_opts , args , invalid )
143+ do_parse ( rest , config , new_opts , args , invalid , all? )
146144
147145 { :invalid , option , value , rest } ->
148146 # the option exist but it has wrong value
149- do_parse ( rest , config , opts , args , [ { option , value } | invalid ] )
147+ do_parse ( rest , config , opts , args , [ { option , value } | invalid ] , all? )
150148
151149 { :undefined , option , _value , rest } ->
152150 # the option does not exist (for strict cases)
153- do_parse ( rest , config , opts , args , [ { option , nil } | invalid ] )
151+ do_parse ( rest , config , opts , args , [ { option , nil } | invalid ] , all? )
154152
155153 { :error , [ "--" | rest ] } ->
156154 { Enum . reverse ( opts ) , Enum . reverse ( args , rest ) , Enum . reverse ( invalid ) }
157155
158156 { :error , [ arg | rest ] = remaining_args } ->
159157 # there is no option
160- if all do
161- do_parse ( rest , config , opts , [ arg | args ] , invalid )
158+ if all? do
159+ do_parse ( rest , config , opts , [ arg | args ] , invalid , all? )
162160 else
163161 { Enum . reverse ( opts ) , Enum . reverse ( args , remaining_args ) , Enum . reverse ( invalid ) }
164162 end
@@ -192,7 +190,7 @@ defmodule OptionParser do
192190 { :error , argv }
193191
194192 def next ( argv , opts \\ [ ] ) when is_list ( argv ) and is_list ( opts ) do
195- { aliases , switches , strict , _ } = compile_config ( opts , true )
193+ { aliases , switches , strict } = compile_config ( opts )
196194 next ( argv , aliases , switches , strict )
197195 end
198196
@@ -235,7 +233,7 @@ defmodule OptionParser do
235233
236234 ## Helpers
237235
238- defp compile_config ( opts , all ) do
236+ defp compile_config ( opts ) do
239237 aliases = opts [ :aliases ] || [ ]
240238
241239 { switches , strict } = cond do
@@ -247,7 +245,7 @@ defmodule OptionParser do
247245 { [ ] , false }
248246 end
249247
250- { aliases , switches , strict , all }
248+ { aliases , switches , strict }
251249 end
252250
253251 defp validate_option ( value , kinds ) do
0 commit comments