@@ -107,8 +107,7 @@ defmodule OptionParser do
107
107
"""
108
108
@ spec parse ( argv , options ) :: { parsed , argv , errors }
109
109
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 )
112
111
end
113
112
114
113
@ doc """
@@ -128,37 +127,36 @@ defmodule OptionParser do
128
127
"""
129
128
@ spec parse_head ( argv , options ) :: { parsed , argv , errors }
130
129
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 )
133
131
end
134
132
135
- defp do_parse ( [ ] , _config , opts , args , invalid ) do
133
+ defp do_parse ( [ ] , _config , opts , args , invalid , _all? ) do
136
134
{ Enum . reverse ( opts ) , Enum . reverse ( args ) , Enum . reverse ( invalid ) }
137
135
end
138
136
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
140
138
case next ( argv , aliases , switches , strict ) do
141
139
{ :ok , option , value , rest } ->
142
140
# the option exist and it was successfully parsed
143
141
kinds = List . wrap Keyword . get ( switches , option )
144
142
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? )
146
144
147
145
{ :invalid , option , value , rest } ->
148
146
# 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? )
150
148
151
149
{ :undefined , option , _value , rest } ->
152
150
# 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? )
154
152
155
153
{ :error , [ "--" | rest ] } ->
156
154
{ Enum . reverse ( opts ) , Enum . reverse ( args , rest ) , Enum . reverse ( invalid ) }
157
155
158
156
{ :error , [ arg | rest ] = remaining_args } ->
159
157
# 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? )
162
160
else
163
161
{ Enum . reverse ( opts ) , Enum . reverse ( args , remaining_args ) , Enum . reverse ( invalid ) }
164
162
end
@@ -192,7 +190,7 @@ defmodule OptionParser do
192
190
{ :error , argv }
193
191
194
192
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 )
196
194
next ( argv , aliases , switches , strict )
197
195
end
198
196
@@ -235,7 +233,7 @@ defmodule OptionParser do
235
233
236
234
## Helpers
237
235
238
- defp compile_config ( opts , all ) do
236
+ defp compile_config ( opts ) do
239
237
aliases = opts [ :aliases ] || [ ]
240
238
241
239
{ switches , strict } = cond do
@@ -247,7 +245,7 @@ defmodule OptionParser do
247
245
{ [ ] , false }
248
246
end
249
247
250
- { aliases , switches , strict , all }
248
+ { aliases , switches , strict }
251
249
end
252
250
253
251
defp validate_option ( value , kinds ) do
0 commit comments