comparison src/testdir/test_vim9_script.vim @ 27669:5c4ab8d4472c v8.2.4360

patch 8.2.4360: Vim9: allowing use of "s:" leads to inconsistencies Commit: https://github.com/vim/vim/commit/a749a42ed25534c88c636e5ab6603f1f97b857a4 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Feb 12 19:52:25 2022 +0000 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.
author Bram Moolenaar <Bram@vim.org>
date Sat, 12 Feb 2022 21:00:03 +0100
parents a6ffe874a24b
children fae9567b8024
comparison
equal deleted inserted replaced
27668:407a08328369 27669:5c4ab8d4472c
67 v9.CheckScriptSuccess([ 67 v9.CheckScriptSuccess([
68 'vim9script', 68 'vim9script',
69 'func CheckMe()', 69 'func CheckMe()',
70 ' return 123', 70 ' return 123',
71 'endfunc', 71 'endfunc',
72 'assert_equal(123, s:CheckMe())', 72 'func DoTest()',
73 ' call assert_equal(123, s:CheckMe())',
74 'endfunc',
75 'DoTest()',
73 ]) 76 ])
74 77
75 # Check function in script namespace cannot be deleted 78 # Check function in script namespace cannot be deleted
76 v9.CheckScriptFailure([ 79 v9.CheckScriptFailure([
77 'vim9script', 80 'vim9script',
176 179
177 v9.CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:') 180 v9.CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:')
178 v9.CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:') 181 v9.CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:')
179 enddef 182 enddef
180 183
184 def Test_script_namespace()
185 # defining a function or variable with s: is not allowed
186 var lines =<< trim END
187 vim9script
188 def s:Function()
189 enddef
190 END
191 v9.CheckScriptFailure(lines, 'E1268:')
192
193 for decl in ['var', 'const', 'final']
194 lines =<< trim END
195 vim9script
196 var s:var = 'var'
197 END
198 v9.CheckScriptFailure([
199 'vim9script',
200 decl .. ' s:var = "var"',
201 ], 'E1268:')
202 endfor
203
204 # Calling a function or using a variable with s: is not allowed at script
205 # level
206 lines =<< trim END
207 vim9script
208 def Function()
209 enddef
210 s:Function()
211 END
212 v9.CheckScriptFailure(lines, 'E1268:')
213 lines =<< trim END
214 vim9script
215 def Function()
216 enddef
217 call s:Function()
218 END
219 v9.CheckScriptFailure(lines, 'E1268:')
220 lines =<< trim END
221 vim9script
222 var var = 'var'
223 echo s:var
224 END
225 v9.CheckScriptFailure(lines, 'E1268:')
226 enddef
227
181 def Test_script_wrong_type() 228 def Test_script_wrong_type()
182 var lines =<< trim END 229 var lines =<< trim END
183 vim9script 230 vim9script
184 var s:dict: dict<string> 231 var dict: dict<string>
185 s:dict['a'] = ['x'] 232 dict['a'] = ['x']
186 END 233 END
187 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3) 234 v9.CheckScriptFailure(lines, 'E1012: Type mismatch; expected string but got list<string>', 3)
188 enddef 235 enddef
189 236
190 def Test_const() 237 def Test_const()