0
0
mirror of https://github.com/vim/vim.git synced 2025-10-04 05:25:06 -04:00

patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies

Problem:    Vim9: allowing use of "s:" leads to inconsistencies.
Solution:   Disallow using "s:" in Vim9 script at the script level.
This commit is contained in:
Bram Moolenaar
2022-02-12 19:52:25 +00:00
parent 6e28703a8e
commit a749a42ed2
15 changed files with 151 additions and 61 deletions

View File

@@ -69,7 +69,10 @@ def Test_delfunction()
'func CheckMe()',
' return 123',
'endfunc',
'assert_equal(123, s:CheckMe())',
'func DoTest()',
' call assert_equal(123, s:CheckMe())',
'endfunc',
'DoTest()',
])
# Check function in script namespace cannot be deleted
@@ -178,11 +181,55 @@ def Test_wrong_type()
v9.CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:')
enddef
def Test_script_namespace()
# defining a function or variable with s: is not allowed
var lines =<< trim END
vim9script
def s:Function()
enddef
END
v9.CheckScriptFailure(lines, 'E1268:')
for decl in ['var', 'const', 'final']
lines =<< trim END
vim9script
var s:var = 'var'
END
v9.CheckScriptFailure([
'vim9script',
decl .. ' s:var = "var"',
], 'E1268:')
endfor
# Calling a function or using a variable with s: is not allowed at script
# level
lines =<< trim END
vim9script
def Function()
enddef
s:Function()
END
v9.CheckScriptFailure(lines, 'E1268:')
lines =<< trim END
vim9script
def Function()
enddef
call s:Function()
END
v9.CheckScriptFailure(lines, 'E1268:')
lines =<< trim END
vim9script
var var = 'var'
echo s:var
END
v9.CheckScriptFailure(lines, 'E1268:')
enddef
def Test_script_wrong_type()
var lines =<< trim END
vim9script
var s:dict: dict<string>
s:dict['a'] = ['x']
var dict: dict<string>
dict['a'] = ['x']
END
v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3)
enddef