forked from aniani/vim
patch 8.0.0176: cannot use :change inside a function definition
Problem: Using :change in between :function and :endfunction fails. Solution: Recognize :change inside a function. (ichizok, closes #1374)
This commit is contained in:
@@ -1238,6 +1238,77 @@ func Test_num64()
|
||||
call assert_equal(rng, sort(range(0x100000001, 0xFFFFffff, -1), 'N'))
|
||||
endfunc
|
||||
|
||||
"-------------------------------------------------------------------------------
|
||||
" Test 95: lines of :append, :change, :insert {{{1
|
||||
"-------------------------------------------------------------------------------
|
||||
|
||||
function! DefineFunction(name, body)
|
||||
let func = join(['function! ' . a:name . '()'] + a:body + ['endfunction'], "\n")
|
||||
exec func
|
||||
endfunction
|
||||
|
||||
func Test_script_lines()
|
||||
" :append
|
||||
try
|
||||
call DefineFunction('T_Append', [
|
||||
\ 'append',
|
||||
\ 'py <<EOS',
|
||||
\ '.',
|
||||
\ ])
|
||||
catch
|
||||
call assert_false(1, "Can't define function")
|
||||
endtry
|
||||
try
|
||||
call DefineFunction('T_Append', [
|
||||
\ 'append',
|
||||
\ 'abc',
|
||||
\ ])
|
||||
call assert_false(1, "Shouldn't be able to define function")
|
||||
catch
|
||||
call assert_exception('Vim(function):E126: Missing :endfunction')
|
||||
endtry
|
||||
|
||||
" :change
|
||||
try
|
||||
call DefineFunction('T_Change', [
|
||||
\ 'change',
|
||||
\ 'py <<EOS',
|
||||
\ '.',
|
||||
\ ])
|
||||
catch
|
||||
call assert_false(1, "Can't define function")
|
||||
endtry
|
||||
try
|
||||
call DefineFunction('T_Change', [
|
||||
\ 'change',
|
||||
\ 'abc',
|
||||
\ ])
|
||||
call assert_false(1, "Shouldn't be able to define function")
|
||||
catch
|
||||
call assert_exception('Vim(function):E126: Missing :endfunction')
|
||||
endtry
|
||||
|
||||
" :insert
|
||||
try
|
||||
call DefineFunction('T_Insert', [
|
||||
\ 'insert',
|
||||
\ 'py <<EOS',
|
||||
\ '.',
|
||||
\ ])
|
||||
catch
|
||||
call assert_false(1, "Can't define function")
|
||||
endtry
|
||||
try
|
||||
call DefineFunction('T_Insert', [
|
||||
\ 'insert',
|
||||
\ 'abc',
|
||||
\ ])
|
||||
call assert_false(1, "Shouldn't be able to define function")
|
||||
catch
|
||||
call assert_exception('Vim(function):E126: Missing :endfunction')
|
||||
endtry
|
||||
endfunc
|
||||
|
||||
"-------------------------------------------------------------------------------
|
||||
" Modelines {{{1
|
||||
" vim: ts=8 sw=4 tw=80 fdm=marker
|
||||
|
@@ -2085,9 +2085,14 @@ ex_function(exarg_T *eap)
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for ":append" or ":insert". */
|
||||
/* Check for ":append", ":change", ":insert". */
|
||||
p = skip_range(p, NULL);
|
||||
if ((p[0] == 'a' && (!ASCII_ISALPHA(p[1]) || p[1] == 'p'))
|
||||
|| (p[0] == 'c'
|
||||
&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'h'
|
||||
&& (!ASCII_ISALPHA(p[2]) || (p[2] == 'a'
|
||||
&& (STRNCMP(&p[3], "nge", 3) != 0
|
||||
|| !ASCII_ISALPHA(p[6])))))))
|
||||
|| (p[0] == 'i'
|
||||
&& (!ASCII_ISALPHA(p[1]) || (p[1] == 'n'
|
||||
&& (!ASCII_ISALPHA(p[2]) || (p[2] == 's'))))))
|
||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
176,
|
||||
/**/
|
||||
175,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user