Skip to content

Commit 2fc76fe

Browse files
author
José Valim
committed
Don't keep all in the option parser config
1 parent e541a56 commit 2fc76fe

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

lib/elixir/lib/option_parser.ex

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)