Fix parsing & remove useless short version

This commit is contained in:
linarphy 2024-06-18 16:23:07 +02:00
parent 94edd899d0
commit d2a1deb392
No known key found for this signature in database
GPG key ID: E61920135EFF2295
3 changed files with 31 additions and 17 deletions

View file

@ -30,6 +30,7 @@ packages = ["src/command_parser"]
[tool.ruff] [tool.ruff]
line-length = 72 line-length = 72
builtins = ["_"]
[tool.ruff.format] [tool.ruff.format]
quote-style = "double" quote-style = "double"

View file

@ -36,12 +36,6 @@ class Option:
else: else:
return self.single_char return self.single_char
def short(self) -> str:
"""
Return short version of the option (-h, -V, etc.)
"""
return "-{one}".format(one=self.one())
def long(self) -> str: def long(self) -> str:
""" """
Return long version of the option (--help=, --version=, etc.) Return long version of the option (--help=, --version=, etc.)

View file

@ -17,7 +17,7 @@ def parse(line: str, flags: list[Flag], values: list[Value]):
_("parsing element {element}".format(element=element)) _("parsing element {element}".format(element=element))
) )
try: try:
if element[0] != "-": if element[0] != "-": # don't start with -
for flag in flags: for flag in flags:
if flag.one() in element: if flag.one() in element:
flag.apply() flag.apply()
@ -28,19 +28,38 @@ def parse(line: str, flags: list[Flag], values: list[Value]):
flag.one(), "" flag.one(), ""
) )
for value in values: for value in values:
if value.one() == element: if value.one() in element:
value.apply(elements[index + 1]) if value.one() != element[0]:
index += 2 continue # wait until it's the first one to pick the good associated value (hacky but work)
elif element[1] != "-": value.apply(elements.pop(index + 1))
if len(element) == 1:
index += 1 # element already removed with pop
else:
elements[index] = element.replace(
value.one(), ""
)
elif element[1] != "-": # start with one -
for flag in flags: for flag in flags:
if flag.short() == element: if flag.one() in element:
flag.apply() flag.apply()
index += 1 if len(element) == 2:
index += 1
else:
elements[index] = element.replace(
flag.one(), ""
)
for value in values: for value in values:
if value.one() == element: if value.one() in element:
value.apply(elements[index + 1]) if value.one() != element[1]:
index += 2 continue # wait until it's the first one to pick the good associated value (hacky but work)
else: value.apply(elements.pop(index + 1))
if len(element) == 2:
index += 1
else:
elements[index] = element.replace(
value.one(), ""
)
else: # start with more than one -
for flag in flags: for flag in flags:
if flag.long() == element: if flag.long() == element:
flag.apply() flag.apply()