From 6e30d150e38d0dd327547885fb8b2a33be4c20b4 Mon Sep 17 00:00:00 2001 From: kwakubiney Date: Thu, 23 Jan 2025 02:25:14 +0000 Subject: [PATCH] Refactor argument formatting with recursion and quote removal Signed-off-by: kwakubiney --- compiler/annotations_utils/util_parsing.py | 3 --- compiler/shell_ast/ast_util.py | 24 ++++++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/compiler/annotations_utils/util_parsing.py b/compiler/annotations_utils/util_parsing.py index 94303049f..0db8340f3 100644 --- a/compiler/annotations_utils/util_parsing.py +++ b/compiler/annotations_utils/util_parsing.py @@ -66,9 +66,6 @@ def parse_arg_list_to_command_invocation( command, flags_options_operands ) -> CommandInvocationInitial: cmd_name = format_arg_chars(command) - #strip quotes from command where necessary - #quoted commands are interpreted as non-parallelizable - cmd_name = cmd_name.strip().strip('"').strip("'") json_data = get_json_data(cmd_name) set_of_all_flags: Set[str] = get_set_of_all_flags(json_data) dict_flag_to_primary_repr: dict[str, str] = get_dict_flag_to_primary_repr(json_data) diff --git a/compiler/shell_ast/ast_util.py b/compiler/shell_ast/ast_util.py index 4f695328c..9c1137fb5 100644 --- a/compiler/shell_ast/ast_util.py +++ b/compiler/shell_ast/ast_util.py @@ -44,15 +44,23 @@ def __init__(self, text): def check_if_ast_is_supported(construct, arguments, **kwargs): return - -def format_args(args): - formatted_args = [format_arg_chars(arg_chars) for arg_chars in args] - return formatted_args - - def format_arg_chars(arg_chars): - chars = [format_arg_char(arg_char) for arg_char in arg_chars] - return "".join(chars) + return traverse_and_format(arg_chars) + +def traverse_and_format(arg_char): + if isinstance(arg_char, list): + return "".join(traverse_and_format(c) for c in arg_char) + elif isinstance(arg_char, QArgChar): + return remove_quotes_from_quoted_content(arg_char.format()) + elif isinstance(arg_char, (CArgChar, EArgChar)): + return format_arg_char(arg_char) + else: + # Fallback: not sure what the fallback for non recognized characters should be? + return format_arg_char(arg_char) + +def remove_quotes_from_quoted_content(arg_char): + formatted_content = traverse_and_format(arg_char) + return formatted_content.strip('"').strip("'") def format_arg_char(arg_char: ArgChar) -> str: