diff --git a/src/command_parser/flag.py b/src/command_parser/flag.py index 8ddfa81..6aa9052 100644 --- a/src/command_parser/flag.py +++ b/src/command_parser/flag.py @@ -16,3 +16,9 @@ class Flag(Option): Toogle the flag """ self.value = not self.value + + def long(self) -> str: + """ + Return long version of the option (--verbose, etc.) + """ + return "--{long}".format(long=self.name) diff --git a/src/command_parser/option.py b/src/command_parser/option.py index 795e50e..ccf2d5d 100644 --- a/src/command_parser/option.py +++ b/src/command_parser/option.py @@ -35,9 +35,3 @@ class Option: return self.name[0] else: return self.single_char - - def long(self) -> str: - """ - Return long version of the option (--help=, --version=, etc.) - """ - return "--{long}=".format(long=self.name) diff --git a/src/command_parser/parser.py b/src/command_parser/parser.py index ae8bc90..9d811ad 100644 --- a/src/command_parser/parser.py +++ b/src/command_parser/parser.py @@ -12,6 +12,7 @@ def parse(line: str, flags: list[Flag], values: list[Value]): elements = line.split(" ") index = 0 while index < len(elements): + prev_index = index element = elements[index] logger.debug( _("parsing element {element}".format(element=element)) @@ -68,6 +69,11 @@ def parse(line: str, flags: list[Flag], values: list[Value]): if value.long() == element[: len(value.long())]: value.apply(element[len(value.long()) :]) index += 1 + if index == prev_index: + logger.warning(_("unknown {element}, ignoring").format( + element = element + )) + index += 1 except IndexError: logger.warning(_("empty value")) index += 1 diff --git a/src/command_parser/value.py b/src/command_parser/value.py index 6bcc89b..5140fd3 100644 --- a/src/command_parser/value.py +++ b/src/command_parser/value.py @@ -47,3 +47,9 @@ class Value(Option): option=self.name, ) ) + + def long(self) -> str: + """ + Return long version of the option (--help=, --version=, etc.) + """ + return "--{long}=".format(long=self.name)