patch 8.2.1744: Vim9: using ":const!" is weird
Problem: Vim9: using ":const!" is weird.
Solution: Use "var" - "final" - "const" like Dart. "let" still works for
now.
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 4c825e8..94861e5 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -12,30 +12,30 @@
let g:astring = 'text'
def Test_assignment_bool()
- let bool1: bool = true
+ var bool1: bool = true
assert_equal(v:true, bool1)
- let bool2: bool = false
+ var bool2: bool = false
assert_equal(v:false, bool2)
- let bool3: bool = 0
+ var bool3: bool = 0
assert_equal(false, bool3)
- let bool4: bool = 1
+ var bool4: bool = 1
assert_equal(true, bool4)
- let bool5: bool = 'yes' && 'no'
+ var bool5: bool = 'yes' && 'no'
assert_equal(true, bool5)
- let bool6: bool = [] && 99
+ var bool6: bool = [] && 99
assert_equal(false, bool6)
- let bool7: bool = [] || #{a: 1} && 99
+ var bool7: bool = [] || #{a: 1} && 99
assert_equal(true, bool7)
- let lines =<< trim END
+ var lines =<< trim END
vim9script
def GetFlag(): bool
- let flag: bool = 1
+ var flag: bool = 1
return flag
enddef
- let flag: bool = GetFlag()
+ var flag: bool = GetFlag()
assert_equal(true, flag)
flag = 0
assert_equal(false, flag)
@@ -47,41 +47,42 @@
assert_equal(false, flag)
END
CheckScriptSuccess(lines)
- CheckDefAndScriptFailure(['let x: bool = 2'], 'E1012:')
- CheckDefAndScriptFailure(['let x: bool = -1'], 'E1012:')
- CheckDefAndScriptFailure(['let x: bool = [1]'], 'E1012:')
- CheckDefAndScriptFailure(['let x: bool = {}'], 'E1012:')
- CheckDefAndScriptFailure(['let x: bool = "x"'], 'E1012:')
+ CheckDefAndScriptFailure(['var x: bool = 2'], 'E1012:')
+ CheckDefAndScriptFailure(['var x: bool = -1'], 'E1012:')
+ CheckDefAndScriptFailure(['var x: bool = [1]'], 'E1012:')
+ CheckDefAndScriptFailure(['var x: bool = {}'], 'E1012:')
+ CheckDefAndScriptFailure(['var x: bool = "x"'], 'E1012:')
enddef
def Test_syntax()
- let var = 234
- let other: list<string> = ['asdf']
+ var var = 234
+ var other: list<string> = ['asdf']
enddef
def Test_assignment()
- CheckDefFailure(['let x:string'], 'E1069:')
- CheckDefFailure(['let x:string = "x"'], 'E1069:')
- CheckDefFailure(['let a:string = "x"'], 'E1069:')
- CheckDefFailure(['let lambda = {-> "lambda"}'], 'E704:')
+ CheckDefFailure(['var x:string'], 'E1069:')
+ CheckDefFailure(['var x:string = "x"'], 'E1069:')
+ CheckDefFailure(['var a:string = "x"'], 'E1069:')
+ CheckDefFailure(['var lambda = {-> "lambda"}'], 'E704:')
+ CheckScriptFailure(['var x = "x"'], 'E1124:')
- let nr: number = 1234
- CheckDefFailure(['let nr: number = "asdf"'], 'E1012:')
+ var nr: number = 1234
+ CheckDefFailure(['var nr: number = "asdf"'], 'E1012:')
- let a: number = 6 #comment
+ var a: number = 6 #comment
assert_equal(6, a)
if has('channel')
- let chan1: channel
- let job1: job
- let job2: job = job_start('willfail')
+ var chan1: channel
+ var job1: job
+ var job2: job = job_start('willfail')
endif
if has('float')
- let float1: float = 3.4
+ var float1: float = 3.4
endif
- let Funky1: func
- let Funky2: func = function('len')
- let Party2: func = funcref('g:Test_syntax')
+ var Funky1: func
+ var Funky2: func = function('len')
+ var Party2: func = funcref('g:Test_syntax')
g:newvar = 'new' #comment
assert_equal('new', g:newvar)
@@ -97,7 +98,7 @@
assert_equal('foobar', $ENVVAR)
$ENVVAR = ''
- let lines =<< trim END
+ var lines =<< trim END
vim9script
$ENVVAR = 'barfoo'
assert_equal('barfoo', $ENVVAR)
@@ -126,15 +127,15 @@
assert_equal(2, &ts)
if has('float')
- let f100: float = 100.0
+ var f100: float = 100.0
f100 /= 5
assert_equal(20.0, f100)
- let f200: float = 200.0
+ var f200: float = 200.0
f200 /= 5.0
assert_equal(40.0, f200)
- CheckDefFailure(['let nr: number = 200', 'nr /= 5.0'], 'E1012:')
+ CheckDefFailure(['var nr: number = 200', 'nr /= 5.0'], 'E1012:')
endif
lines =<< trim END
@@ -163,11 +164,11 @@
CheckDefFailure(['&path += 3'], 'E1012:')
CheckDefExecFailure(['&bs = "asdf"'], 'E474:')
# test freeing ISN_STOREOPT
- CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
+ CheckDefFailure(['&ts = 3', 'var asdf'], 'E1022:')
&ts = 8
lines =<< trim END
- let save_TI = &t_TI
+ var save_TI = &t_TI
&t_TI = ''
assert_equal('', &t_TI)
&t_TI = 'xxx'
@@ -179,8 +180,8 @@
CheckDefFailure(['&t_TI = 123'], 'E1012:')
CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:')
- CheckDefFailure(['let s:var = 123'], 'E1101:')
- CheckDefFailure(['let s:var: number'], 'E1101:')
+ CheckDefFailure(['var s:var = 123'], 'E1101:')
+ CheckDefFailure(['var s:var: number'], 'E1101:')
lines =<< trim END
vim9script
@@ -217,20 +218,20 @@
# this should not leak
if 0
- let text =<< trim END
+ var text =<< trim END
some text
END
endif
enddef
def Test_extend_list()
- let lines =<< trim END
+ var lines =<< trim END
vim9script
- let l: list<number>
+ var l: list<number>
l += [123]
assert_equal([123], l)
- let d: dict<number>
+ var d: dict<number>
d['one'] = 1
assert_equal(#{one: 1}, d)
END
@@ -239,41 +240,41 @@
def Test_single_letter_vars()
# single letter variables
- let a: number = 123
+ var a: number = 123
a = 123
assert_equal(123, a)
- let b: number
+ var b: number
b = 123
assert_equal(123, b)
- let g: number
+ var g: number
g = 123
assert_equal(123, g)
- let s: number
+ var s: number
s = 123
assert_equal(123, s)
- let t: number
+ var t: number
t = 123
assert_equal(123, t)
- let v: number
+ var v: number
v = 123
assert_equal(123, v)
- let w: number
+ var w: number
w = 123
assert_equal(123, w)
enddef
def Test_vim9_single_char_vars()
- let lines =<< trim END
+ var lines =<< trim END
vim9script
# single character variable declarations work
- let a: string
- let b: number
- let l: list<any>
- let s: string
- let t: number
- let v: number
- let w: number
+ var a: string
+ var b: number
+ var l: list<any>
+ var s: string
+ var t: number
+ var v: number
+ var w: number
# script-local variables can be used without s: prefix
a = 'script-a'
@@ -298,14 +299,14 @@
enddef
def Test_assignment_list()
- let list1: list<bool> = [false, true, false]
- let list2: list<number> = [1, 2, 3]
- let list3: list<string> = ['sdf', 'asdf']
- let list4: list<any> = ['yes', true, 1234]
- let list5: list<blob> = [0z01, 0z02]
+ var list1: list<bool> = [false, true, false]
+ var list2: list<number> = [1, 2, 3]
+ var list3: list<string> = ['sdf', 'asdf']
+ var list4: list<any> = ['yes', true, 1234]
+ var list5: list<blob> = [0z01, 0z02]
- let listS: list<string> = []
- let listN: list<number> = []
+ var listS: list<string> = []
+ var listN: list<number> = []
assert_equal([1, 2, 3], list2)
list2[-1] = 99
@@ -320,19 +321,19 @@
list3 += ['end']
assert_equal(['sdf', 'asdf', 'end'], list3)
- CheckDefExecFailure(['let ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:')
- CheckDefExecFailure(['let [v1, v2] = [1, 2]'], 'E1092:')
+ CheckDefExecFailure(['var ll = [1, 2, 3]', 'll[-4] = 6'], 'E684:')
+ CheckDefExecFailure(['var [v1, v2] = [1, 2]'], 'E1092:')
# type becomes list<any>
- let somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
+ var somelist = rand() > 0 ? [1, 2, 3] : ['a', 'b', 'c']
enddef
def Test_assignment_list_vim9script()
- let lines =<< trim END
+ var lines =<< trim END
vim9script
- let v1: number
- let v2: number
- let v3: number
+ var v1: number
+ var v2: number
+ var v3: number
[v1, v2, v3] = [1, 2, 3]
assert_equal([1, 2, 3], [v1, v2, v3])
END
@@ -340,27 +341,27 @@
enddef
def Test_assignment_dict()
- let dict1: dict<bool> = #{one: false, two: true}
- let dict2: dict<number> = #{one: 1, two: 2}
- let dict3: dict<string> = #{key: 'value'}
- let dict4: dict<any> = #{one: 1, two: '2'}
- let dict5: dict<blob> = #{one: 0z01, two: 0z02}
+ var dict1: dict<bool> = #{one: false, two: true}
+ var dict2: dict<number> = #{one: 1, two: 2}
+ var dict3: dict<string> = #{key: 'value'}
+ var dict4: dict<any> = #{one: 1, two: '2'}
+ var dict5: dict<blob> = #{one: 0z01, two: 0z02}
# overwrite
dict3['key'] = 'another'
# empty key can be used
- let dd = {}
+ var dd = {}
dd[""] = 6
assert_equal({'': 6}, dd)
# type becomes dict<any>
- let somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
+ var somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
# assignment to script-local dict
- let lines =<< trim END
+ var lines =<< trim END
vim9script
- let test: dict<any> = {}
+ var test: dict<any> = {}
def FillDict(): dict<any>
test['a'] = 43
return test
@@ -371,7 +372,7 @@
lines =<< trim END
vim9script
- let test: dict<any>
+ var test: dict<any>
def FillDict(): dict<any>
test['a'] = 43
return test
@@ -408,7 +409,7 @@
def Test_assignment_local()
# Test in a separated file in order not to the current buffer/window/tab is
# changed.
- let script_lines: list<string> =<< trim END
+ var script_lines: list<string> =<< trim END
let b:existing = 'yes'
let w:existing = 'yes'
let t:existing = 'yes'
@@ -446,37 +447,37 @@
def Test_assignment_default()
# Test default values.
- let thebool: bool
+ var thebool: bool
assert_equal(v:false, thebool)
- let thenumber: number
+ var thenumber: number
assert_equal(0, thenumber)
if has('float')
- let thefloat: float
+ var thefloat: float
assert_equal(0.0, thefloat)
endif
- let thestring: string
+ var thestring: string
assert_equal('', thestring)
- let theblob: blob
+ var theblob: blob
assert_equal(0z, theblob)
- let Thefunc: func
+ var Thefunc: func
assert_equal(test_null_function(), Thefunc)
- let thelist: list<any>
+ var thelist: list<any>
assert_equal([], thelist)
- let thedict: dict<any>
+ var thedict: dict<any>
assert_equal({}, thedict)
if has('channel')
- let thejob: job
+ var thejob: job
assert_equal(test_null_job(), thejob)
- let thechannel: channel
+ var thechannel: channel
assert_equal(test_null_channel(), thechannel)
if has('unix') && executable('cat')
@@ -487,14 +488,14 @@
endif
endif
- let nr = 1234 | nr = 5678
+ var nr = 1234 | nr = 5678
assert_equal(5678, nr)
enddef
def Test_assignment_var_list()
- let v1: string
- let v2: string
- let vrem: list<string>
+ var v1: string
+ var v2: string
+ var vrem: list<string>
[v1] = ['aaa']
assert_equal('aaa', v1)
@@ -519,18 +520,18 @@
enddef
def Test_assignment_vim9script()
- let lines =<< trim END
+ var lines =<< trim END
vim9script
def Func(): list<number>
return [1, 2]
enddef
- let var1: number
- let var2: number
+ var var1: number
+ var var2: number
[var1, var2] =
Func()
assert_equal(1, var1)
assert_equal(2, var2)
- let ll =
+ var ll =
Func()
assert_equal([1, 2], ll)
@@ -551,15 +552,15 @@
assert_equal('plus', @+)
endif
- let a: number = 123
+ var a: number = 123
assert_equal(123, a)
- let s: string = 'yes'
+ var s: string = 'yes'
assert_equal('yes', s)
- let b: number = 42
+ var b: number = 42
assert_equal(42, b)
- let w: number = 43
+ var w: number = 43
assert_equal(43, w)
- let t: number = 44
+ var t: number = 44
assert_equal(44, t)
END
CheckScriptSuccess(lines)
@@ -571,80 +572,80 @@
enddef
def Test_assignment_failure()
- CheckDefFailure(['let var=234'], 'E1004:')
- CheckDefFailure(['let var =234'], 'E1004:')
- CheckDefFailure(['let var= 234'], 'E1004:')
+ CheckDefFailure(['var var=234'], 'E1004:')
+ CheckDefFailure(['var var =234'], 'E1004:')
+ CheckDefFailure(['var var= 234'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var=234'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var=234'], "before and after '='")
- CheckScriptFailure(['vim9script', 'let var =234'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var= 234'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var = 234', 'var+=234'], "before and after '+='")
- CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], 'E1004:')
- CheckScriptFailure(['vim9script', 'let var = "x"', 'var..="y"'], "before and after '..='")
+ CheckScriptFailure(['vim9script', 'var var=234'], 'E1004:')
+ CheckScriptFailure(['vim9script', 'var var=234'], "before and after '='")
+ CheckScriptFailure(['vim9script', 'var var =234'], 'E1004:')
+ CheckScriptFailure(['vim9script', 'var var= 234'], 'E1004:')
+ CheckScriptFailure(['vim9script', 'var var = 234', 'var+=234'], 'E1004:')
+ CheckScriptFailure(['vim9script', 'var var = 234', 'var+=234'], "before and after '+='")
+ CheckScriptFailure(['vim9script', 'var var = "x"', 'var..="y"'], 'E1004:')
+ CheckScriptFailure(['vim9script', 'var var = "x"', 'var..="y"'], "before and after '..='")
- CheckDefFailure(['let true = 1'], 'E1034:')
- CheckDefFailure(['let false = 1'], 'E1034:')
+ CheckDefFailure(['var true = 1'], 'E1034:')
+ CheckDefFailure(['var false = 1'], 'E1034:')
CheckDefFailure(['[a; b; c] = g:list'], 'E452:')
- CheckDefExecFailure(['let a: number',
+ CheckDefExecFailure(['var a: number',
'[a] = test_null_list()'], 'E1093:')
- CheckDefExecFailure(['let a: number',
+ CheckDefExecFailure(['var a: number',
'[a] = []'], 'E1093:')
- CheckDefExecFailure(['let x: number',
- 'let y: number',
+ CheckDefExecFailure(['var x: number',
+ 'var y: number',
'[x, y] = [1]'], 'E1093:')
- CheckDefExecFailure(['let x: number',
- 'let y: number',
- 'let z: list<number>',
+ CheckDefExecFailure(['var x: number',
+ 'var y: number',
+ 'var z: list<number>',
'[x, y; z] = [1]'], 'E1093:')
- CheckDefFailure(['let somevar'], "E1022:")
- CheckDefFailure(['let &tabstop = 4'], 'E1052:')
+ CheckDefFailure(['var somevar'], "E1022:")
+ CheckDefFailure(['var &tabstop = 4'], 'E1052:')
CheckDefFailure(['&g:option = 5'], 'E113:')
- CheckScriptFailure(['vim9script', 'let &tabstop = 4'], 'E1052:')
+ CheckScriptFailure(['vim9script', 'var &tabstop = 4'], 'E1052:')
- CheckDefFailure(['let $VAR = 5'], 'E1016: Cannot declare an environment variable:')
- CheckScriptFailure(['vim9script', 'let $ENV = "xxx"'], 'E1016:')
+ CheckDefFailure(['var $VAR = 5'], 'E1016: Cannot declare an environment variable:')
+ CheckScriptFailure(['vim9script', 'var $ENV = "xxx"'], 'E1016:')
if has('dnd')
- CheckDefFailure(['let @~ = 5'], 'E1066:')
+ CheckDefFailure(['var @~ = 5'], 'E1066:')
else
- CheckDefFailure(['let @~ = 5'], 'E354:')
+ CheckDefFailure(['var @~ = 5'], 'E354:')
CheckDefFailure(['@~ = 5'], 'E354:')
endif
- CheckDefFailure(['let @a = 5'], 'E1066:')
- CheckDefFailure(['let @/ = "x"'], 'E1066:')
- CheckScriptFailure(['vim9script', 'let @a = "abc"'], 'E1066:')
+ CheckDefFailure(['var @a = 5'], 'E1066:')
+ CheckDefFailure(['var @/ = "x"'], 'E1066:')
+ CheckScriptFailure(['vim9script', 'var @a = "abc"'], 'E1066:')
- CheckDefFailure(['let g:var = 5'], 'E1016: Cannot declare a global variable:')
- CheckDefFailure(['let w:var = 5'], 'E1016: Cannot declare a window variable:')
- CheckDefFailure(['let b:var = 5'], 'E1016: Cannot declare a buffer variable:')
- CheckDefFailure(['let t:var = 5'], 'E1016: Cannot declare a tab variable:')
+ CheckDefFailure(['var g:var = 5'], 'E1016: Cannot declare a global variable:')
+ CheckDefFailure(['var w:var = 5'], 'E1016: Cannot declare a window variable:')
+ CheckDefFailure(['var b:var = 5'], 'E1016: Cannot declare a buffer variable:')
+ CheckDefFailure(['var t:var = 5'], 'E1016: Cannot declare a tab variable:')
- CheckDefFailure(['let anr = 4', 'anr ..= "text"'], 'E1019:')
- CheckDefFailure(['let xnr += 4'], 'E1020:', 1)
- CheckScriptFailure(['vim9script', 'let xnr += 4'], 'E1020:')
- CheckDefFailure(["let xnr = xnr + 1"], 'E1001:', 1)
- CheckScriptFailure(['vim9script', 'let xnr = xnr + 4'], 'E121:')
+ CheckDefFailure(['var anr = 4', 'anr ..= "text"'], 'E1019:')
+ CheckDefFailure(['var xnr += 4'], 'E1020:', 1)
+ CheckScriptFailure(['vim9script', 'var xnr += 4'], 'E1020:')
+ CheckDefFailure(["var xnr = xnr + 1"], 'E1001:', 1)
+ CheckScriptFailure(['vim9script', 'var xnr = xnr + 4'], 'E121:')
- CheckScriptFailure(['vim9script', 'def Func()', 'let dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:')
+ CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:')
- CheckDefFailure(['let var: list<string> = [123]'], 'expected list<string> but got list<number>')
- CheckDefFailure(['let var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
+ CheckDefFailure(['var var: list<string> = [123]'], 'expected list<string> but got list<number>')
+ CheckDefFailure(['var var: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
- CheckDefFailure(['let var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
- CheckDefFailure(['let var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
+ CheckDefFailure(['var var: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
+ CheckDefFailure(['var var: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
- CheckDefFailure(['let var = feedkeys("0")'], 'E1031:')
- CheckDefFailure(['let var: number = feedkeys("0")'], 'expected number but got void')
+ CheckDefFailure(['var var = feedkeys("0")'], 'E1031:')
+ CheckDefFailure(['var var: number = feedkeys("0")'], 'expected number but got void')
- CheckDefFailure(['let var: dict <number>'], 'E1068:')
- CheckDefFailure(['let var: dict<number'], 'E1009:')
+ CheckDefFailure(['var var: dict <number>'], 'E1068:')
+ CheckDefFailure(['var var: dict<number'], 'E1009:')
assert_fails('s/^/\=Mess()/n', 'E794:')
- CheckDefFailure(['let var: dict<number'], 'E1009:')
+ CheckDefFailure(['var var: dict<number'], 'E1009:')
CheckDefFailure(['w:foo: number = 10'],
'E488: Trailing characters: : number = 1')
@@ -657,7 +658,7 @@
enddef
def Test_assign_list()
- let l: list<string> = []
+ var l: list<string> = []
l[0] = 'value'
assert_equal('value', l[0])
@@ -667,7 +668,7 @@
assert_equal('asdf', l[-1])
assert_equal('value', l[-2])
- let nrl: list<number> = []
+ var nrl: list<number> = []
for i in range(5)
nrl[i] = i
endfor
@@ -675,7 +676,7 @@
enddef
def Test_assign_dict()
- let d: dict<string> = {}
+ var d: dict<string> = {}
d['key'] = 'value'
assert_equal('value', d['key'])
@@ -683,7 +684,7 @@
assert_equal('qwerty', d[123])
assert_equal('qwerty', d['123'])
- let nrd: dict<number> = {}
+ var nrd: dict<number> = {}
for i in range(3)
nrd[i] = i
endfor
@@ -691,12 +692,12 @@
enddef
def Test_assign_dict_unknown_type()
- let lines =<< trim END
+ var lines =<< trim END
vim9script
- let mylist = []
+ var mylist = []
mylist += [#{one: 'one'}]
def Func()
- let dd = mylist[0]
+ var dd = mylist[0]
assert_equal('one', dd.one)
enddef
Func()
@@ -706,10 +707,10 @@
# doesn't work yet
#lines =<< trim END
# vim9script
- # let mylist = [[]]
+ # var mylist = [[]]
# mylist[0] += [#{one: 'one'}]
# def Func()
- # let dd = mylist[0][0]
+ # var dd = mylist[0][0]
# assert_equal('one', dd.one)
# enddef
# Func()
@@ -719,13 +720,13 @@
def Test_assign_lambda()
# check if assign a lambda to a variable which type is func or any.
- let lines =<< trim END
+ var lines =<< trim END
vim9script
- let FuncRef = {->123}
+ var FuncRef = {->123}
assert_equal(123, FuncRef())
- let FuncRef_Func: func = {->123}
+ var FuncRef_Func: func = {->123}
assert_equal(123, FuncRef_Func())
- let FuncRef_Any: any = {->123}
+ var FuncRef_Any: any = {->123}
assert_equal(123, FuncRef_Any())
END
CheckScriptSuccess(lines)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index f63ecfc..2f82b8d 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -193,21 +193,21 @@
enddef
def Test_const()
- CheckDefFailure(['const var = 234', 'var = 99'], 'E1018:')
- CheckDefFailure(['const one = 234', 'let one = 99'], 'E1017:')
- CheckDefFailure(['const list = [1, 2]', 'let list = [3, 4]'], 'E1017:')
- CheckDefFailure(['const two'], 'E1021:')
- CheckDefFailure(['const &option'], 'E996:')
+ CheckDefFailure(['final var = 234', 'var = 99'], 'E1018:')
+ CheckDefFailure(['final one = 234', 'let one = 99'], 'E1017:')
+ CheckDefFailure(['final list = [1, 2]', 'let list = [3, 4]'], 'E1017:')
+ CheckDefFailure(['final two'], 'E1125:')
+ CheckDefFailure(['final &option'], 'E996:')
let lines =<< trim END
- const list = [1, 2, 3]
+ final list = [1, 2, 3]
list[0] = 4
list->assert_equal([4, 2, 3])
- const! other = [5, 6, 7]
+ const other = [5, 6, 7]
other->assert_equal([5, 6, 7])
let varlist = [7, 8]
- const! constlist = [1, varlist, 3]
+ const constlist = [1, varlist, 3]
varlist[0] = 77
# TODO: does not work yet
# constlist[1][1] = 88
@@ -216,7 +216,7 @@
constlist->assert_equal([1, [77, 88], 3])
let vardict = #{five: 5, six: 6}
- const! constdict = #{one: 1, two: vardict, three: 3}
+ const constdict = #{one: 1, two: vardict, three: 3}
vardict['five'] = 55
# TODO: does not work yet
# constdict['two']['six'] = 66
@@ -229,35 +229,35 @@
def Test_const_bang()
let lines =<< trim END
- const! var = 234
+ const var = 234
var = 99
END
CheckDefExecFailure(lines, 'E1018:', 2)
CheckScriptFailure(['vim9script'] + lines, 'E46:', 3)
lines =<< trim END
- const! ll = [2, 3, 4]
+ const ll = [2, 3, 4]
ll[0] = 99
END
CheckDefExecFailure(lines, 'E1119:', 2)
CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
lines =<< trim END
- const! ll = [2, 3, 4]
+ const ll = [2, 3, 4]
ll[3] = 99
END
CheckDefExecFailure(lines, 'E1118:', 2)
CheckScriptFailure(['vim9script'] + lines, 'E684:', 3)
lines =<< trim END
- const! dd = #{one: 1, two: 2}
+ const dd = #{one: 1, two: 2}
dd["one"] = 99
END
CheckDefExecFailure(lines, 'E1121:', 2)
CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
lines =<< trim END
- const! dd = #{one: 1, two: 2}
+ const dd = #{one: 1, two: 2}
dd["three"] = 99
END
CheckDefExecFailure(lines, 'E1120:')
@@ -2532,6 +2532,12 @@
def Test_let_declaration_fails()
let lines =<< trim END
vim9script
+ final var: string
+ END
+ CheckScriptFailure(lines, 'E1125:')
+
+ lines =<< trim END
+ vim9script
const var: string
END
CheckScriptFailure(lines, 'E1021:')