scriban icon indicating copy to clipboard operation
scriban copied to clipboard

Function pointer parsing when not the last argument

Open barclayadam opened this issue 2 years ago • 1 comments

I am looking to implement an array.any function that can be passed a function, which in many cases needs to be curried with additional arguments. For example:

{{ ["", "200",  "400"] | array.any @string.contains '20' }}

This is using a function declared as:

public static bool Any(TemplateContext context, SourceSpan span, IEnumerable? list, object? function, object[] args)

Given the above an error is thrown:

Invalid number of arguments `1` passed to `string.contains '20'` while expecting `2` arguments

It appears that during parsing this is being treated as a function call to string.contains, instead of a function pointer plus additional arguments to the array.any function call

I tried using named arguments, but that does not help (i.e. array.any function: @string.contains args: '20')

I think the @ operator needs to be less greedy, to only capture the function itself (which may be from a member access), but to not parse as an actual function call, but not sure if this is intended / desired or if there is possibly a different workaround

barclayadam avatar Aug 23 '23 16:08 barclayadam

I think the @ operator needs to be less greedy, to only capture the function itself (which may be from a member access), but to not parse as an actual function call, but not sure if this is intended / desired or if there is possibly a different workaround

Agreed, might be a bug.

xoofx avatar Sep 06 '23 18:09 xoofx