mirror of
https://github.com/vim/vim.git
synced 2025-09-30 04:44:14 -04:00
patch 8.2.0650: Vim9: script function can be deleted
Problem: Vim9: script function can be deleted. Solution: Disallow deleting script function. Delete functions when sourcing a script again.
This commit is contained in:
@@ -53,7 +53,7 @@ def Test_assignment()
|
||||
endif
|
||||
let Funky1: func
|
||||
let Funky2: func = function('len')
|
||||
let Party2: func = funcref('Test_syntax')
|
||||
let Party2: func = funcref('g:Test_syntax')
|
||||
|
||||
# type becomes list<any>
|
||||
let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
|
||||
@@ -282,6 +282,49 @@ def Test_unlet()
|
||||
assert_equal('', $ENVVAR)
|
||||
enddef
|
||||
|
||||
def Test_delfunction()
|
||||
" Check function is defined in script namespace
|
||||
CheckScriptSuccess([
|
||||
'vim9script',
|
||||
'func CheckMe()',
|
||||
' return 123',
|
||||
'endfunc',
|
||||
'assert_equal(123, s:CheckMe())',
|
||||
])
|
||||
|
||||
" Check function in script namespace cannot be deleted
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'func DeleteMe1()',
|
||||
'endfunc',
|
||||
'delfunction DeleteMe1',
|
||||
], 'E1084:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'func DeleteMe2()',
|
||||
'endfunc',
|
||||
'def DoThat()',
|
||||
' delfunction DeleteMe2',
|
||||
'enddef',
|
||||
'DoThat()',
|
||||
], 'E1084:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'def DeleteMe3()',
|
||||
'enddef',
|
||||
'delfunction DeleteMe3',
|
||||
], 'E1084:')
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'def DeleteMe4()',
|
||||
'enddef',
|
||||
'def DoThat()',
|
||||
' delfunction DeleteMe4',
|
||||
'enddef',
|
||||
'DoThat()',
|
||||
], 'E1084:')
|
||||
enddef
|
||||
|
||||
func Test_wrong_type()
|
||||
call CheckDefFailure(['let var: list<nothing>'], 'E1010:')
|
||||
call CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
|
||||
@@ -649,7 +692,7 @@ def Test_vim9script_fails()
|
||||
assert_fails('export something', 'E1043')
|
||||
enddef
|
||||
|
||||
def Test_vim9script_reload()
|
||||
def Test_vim9script_reload_import()
|
||||
let lines =<< trim END
|
||||
vim9script
|
||||
const var = ''
|
||||
@@ -700,6 +743,47 @@ def Test_vim9script_reload()
|
||||
delete('Ximport.vim')
|
||||
enddef
|
||||
|
||||
def Test_vim9script_reload_delfunc()
|
||||
let first_lines =<< trim END
|
||||
vim9script
|
||||
def FuncYes(): string
|
||||
return 'yes'
|
||||
enddef
|
||||
END
|
||||
let middle_lines =<< trim END
|
||||
def FuncNo(): string
|
||||
return 'no'
|
||||
enddef
|
||||
END
|
||||
let final_lines =<< trim END
|
||||
def g:DoCheck(no_exists: bool)
|
||||
assert_equal('yes', FuncYes())
|
||||
if no_exists
|
||||
assert_equal('no', FuncNo())
|
||||
else
|
||||
assert_fails('call FuncNo()', 'E117:')
|
||||
endif
|
||||
enddef
|
||||
END
|
||||
|
||||
# FuncNo() is defined
|
||||
writefile(first_lines + middle_lines + final_lines, 'Xreloaded.vim')
|
||||
source Xreloaded.vim
|
||||
g:DoCheck(true)
|
||||
|
||||
# FuncNo() is not redefined
|
||||
writefile(first_lines + final_lines, 'Xreloaded.vim')
|
||||
source Xreloaded.vim
|
||||
g:DoCheck(false)
|
||||
|
||||
# FuncNo() is back
|
||||
writefile(first_lines + middle_lines + final_lines, 'Xreloaded.vim')
|
||||
source Xreloaded.vim
|
||||
g:DoCheck(true)
|
||||
|
||||
delete('Xreloaded.vim')
|
||||
enddef
|
||||
|
||||
def Test_import_absolute()
|
||||
let import_lines = [
|
||||
'vim9script',
|
||||
@@ -1445,15 +1529,15 @@ def Test_vim9_comment()
|
||||
|
||||
CheckScriptSuccess([
|
||||
'vim9script',
|
||||
'func DeleteMe()',
|
||||
'func g:DeleteMeA()',
|
||||
'endfunc',
|
||||
'delfunction DeleteMe # comment',
|
||||
'delfunction g:DeleteMeA # comment',
|
||||
])
|
||||
CheckScriptFailure([
|
||||
'vim9script',
|
||||
'func DeleteMe()',
|
||||
'func g:DeleteMeB()',
|
||||
'endfunc',
|
||||
'delfunction DeleteMe# comment',
|
||||
'delfunction g:DeleteMeB# comment',
|
||||
], 'E488:')
|
||||
|
||||
CheckScriptSuccess([
|
||||
|
Reference in New Issue
Block a user