shell-functools icon indicating copy to clipboard operation
shell-functools copied to clipboard

Offering: Add array support to `format` function

Open jdhedden opened this issue 2 years ago • 1 comments

The current format function only support single-valued inputs. The below permits it to take arrays as inputs:

For ft/ft/functions.py:

@register("format")
@typed(None, T_STRING)
def format(format_str, inp):
    try:
        if type(inp) == list:
            args = list(map(lambda v: v.value, inp))
            return format_str.value.format(*args)
        else:
            return format_str.value.format(inp)
    except ValueError:
        panic("Incorrect format string '{}' for input '{}'.".format(format_str.value, inp))
    except IndexError:
        if type(inp) == list:
            count = len(inp)
        else:
            count = 1
        panic("Not enough arguments (only {} given) for format string '{}'.".format(count, format_str.value))

Example:

> echo -e '1\tone' | map format "'{}' is spelled '{}'"
'1' is spelled 'one'

jdhedden avatar May 09 '22 19:05 jdhedden

Great idea. Note that I'm not using this project myself anymore, so I'm not really actively maintaining it. I'd be happy to merge a PR with proper tests though.

sharkdp avatar May 22 '22 09:05 sharkdp