Skip to content

Commit

Permalink
Extract maybeValue variable
Browse files Browse the repository at this point in the history
  • Loading branch information
sormuras committed Nov 30, 2022
1 parent 1965a51 commit d211703
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 22 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 24 additions & 21 deletions main/main/ArgumentsSplitter.java
Expand Up @@ -227,31 +227,34 @@ private Object[] split(ArrayDeque<String> pendingArguments) {
int separator = argument.indexOf('=');
var noValue = separator == -1;
var maybeName = noValue ? argument : argument.substring(0, separator);
var maybeValue = noValue ? "" : argument.substring(separator + 1);
// try well-known option first
if (optionsByName.containsKey(maybeName)) {
var option = optionsByName.get(maybeName);
var name = option.name();
workspace.put(name, switch (option.type()) {
case FLAG -> noValue || parseBoolean(argument.substring(separator + 1));
case KEY_VALUE -> {
var value =
option.nestedSchema() != null
? splitNested(pendingArguments, option)
: noValue ? pendingArguments.pop() : argument.substring(separator + 1);
yield Optional.of(value);
}
case REPEATABLE -> {
var value =
option.nestedSchema() != null
? List.of(splitNested(pendingArguments, option))
: noValue
? List.of(pendingArguments.pop())
: List.of(argument.substring(separator + 1).split(","));
var elements = (List<?>) workspace.get(name);
yield Stream.concat(elements.stream(), value.stream()).toList();
}
case VARARGS, REQUIRED -> throw new AssertionError();
});
workspace.put(
name,
switch (option.type()) {
case FLAG -> noValue || parseBoolean(maybeValue);
case KEY_VALUE -> {
var value =
option.nestedSchema() != null
? splitNested(pendingArguments, option)
: noValue ? pendingArguments.pop() : maybeValue;
yield Optional.of(value);
}
case REPEATABLE -> {
var value =
option.nestedSchema() != null
? List.of(splitNested(pendingArguments, option))
: noValue
? List.of(pendingArguments.pop())
: List.of(maybeValue.split(","));
var elements = (List<?>) workspace.get(name);
yield Stream.concat(elements.stream(), value.stream()).toList();
}
case VARARGS, REQUIRED -> throw new AssertionError("Unnamed name? " + name);
});
continue;
}
// maybe a combination of single letter flags?
Expand Down

0 comments on commit d211703

Please sign in to comment.