vim-patch:8.1.1828: not strict enough checking syntax of method invocation

Problem:    Not strict enough checking syntax of method invocation.
Solution:   Check there is no white space inside ->method(.
5184132ec0
This commit is contained in:
Sean Dewar
2021-08-06 21:04:17 +01:00
parent daedbd9312
commit 32589341a4
3 changed files with 26 additions and 4 deletions

View File

@@ -1053,12 +1053,19 @@ For methods that are also available as global functions this is the same as: >
name(expr8 [, args]) name(expr8 [, args])
There can also be methods specifically for the type of "expr8". There can also be methods specifically for the type of "expr8".
"->name(" must not contain white space. There can be white space before "->" This allows for chaining, passing the value that one method returns to the
and after the "(". next method: >
This allows for chaining, using the type that the method returns: >
mylist->filter(filterexpr)->map(mapexpr)->sort()->join() mylist->filter(filterexpr)->map(mapexpr)->sort()->join()
< <
*E274*
"->name(" must not contain white space. There can be white space before the
"->" and after the "(", thus you can split the lines like this: >
mylist
\ ->filter(filterexpr)
\ ->map(mapexpr)
\ ->sort()
\ ->join()
<
*expr9* *expr9*
number number

View File

@@ -4134,6 +4134,11 @@ static int eval_method(char_u **const arg, typval_T *const rettv,
EMSG2(_(e_missingparen), name); EMSG2(_(e_missingparen), name);
} }
ret = FAIL; ret = FAIL;
} else if (ascii_iswhite((*arg)[-1])) {
if (verbose) {
EMSG(_("E274: No white space allowed before parenthesis"));
}
ret = FAIL;
} else { } else {
ret = eval_func(arg, name, len, rettv, evaluate, &base); ret = eval_func(arg, name, len, rettv, evaluate, &base);
} }

View File

@@ -118,4 +118,14 @@ func Test_method_funcref()
delfunc Concat delfunc Concat
endfunc endfunc
func Test_method_syntax()
eval [1, 2, 3] ->sort( )
eval [1, 2, 3]
\ ->sort(
\ )
call assert_fails('eval [1, 2, 3]-> sort()', 'E260:')
call assert_fails('eval [1, 2, 3]->sort ()', 'E274:')
call assert_fails('eval [1, 2, 3]-> sort ()', 'E260:')
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab