diff --git a/src/testdir/runtest.vim b/src/testdir/runtest.vim
index 1a83227..3ff8c67 100644
--- a/src/testdir/runtest.vim
+++ b/src/testdir/runtest.vim
@@ -355,6 +355,9 @@
   qall!
 endfunc
 
+" TODO: remove later
+let v:disallow_let = 1
+
 " Source the test script.  First grab the file name, in case the script
 " navigates away.  g:testname can be used by the tests.
 let g:testname = expand('%')
diff --git a/src/testdir/test_maparg.vim b/src/testdir/test_maparg.vim
index b2ace6f..ea921d6 100644
--- a/src/testdir/test_maparg.vim
+++ b/src/testdir/test_maparg.vim
@@ -83,13 +83,13 @@
 
 def Test_vim9_maparg()
   nmap { w
-  let one: string = maparg('{')
+  var one: string = maparg('{')
   assert_equal('w', one)
-  let two: string = maparg('{', 'n')
+  var two: string = maparg('{', 'n')
   assert_equal('w', two)
-  let three: string = maparg('{', 'n', 0)
+  var three: string = maparg('{', 'n', 0)
   assert_equal('w', three)
-  let four: dict<any> = maparg('{', 'n', 0, 1)
+  var four: dict<any> = maparg('{', 'n', 0, 1)
   assert_equal(['{', 'w', 'n'], [four.lhs, four.rhs, four.mode])
   nunmap {
 enddef
diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index fdd9ac4..ea2ee3b 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2690,7 +2690,7 @@
   split
   wincmd b
   assert_equal(2, winnr())
-  let buf = term_start(&shell, #{hidden: 1})
+  var buf = term_start(&shell, #{hidden: 1})
   popup_create(buf, {})
   TermWait(buf, 100)
   popup_clear(true)
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index dbf393f..b459413 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -226,8 +226,8 @@
     endfor
   endfor
   cursor(1, 8)
-  let expected = {'lnum': 1, 'id': 0, 'col': 14, 'end': 1, 'type': 'misspell', 'length': 2, 'start': 1}
-  let result = prop_find(#{type: 'misspell', skipstart: true}, 'f')
+  var expected = {'lnum': 1, 'id': 0, 'col': 14, 'end': 1, 'type': 'misspell', 'length': 2, 'start': 1}
+  var result = prop_find(#{type: 'misspell', skipstart: true}, 'f')
   assert_equal(expected, result)
 
   prop_type_delete('misspell')
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index b892e90..74ccd97 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -3,9 +3,6 @@
 source check.vim
 source vim9.vim
 
-" TODO: remove later
-let v:disallow_let = 1
-
 let s:appendToMe = 'xxx'
 let s:addToMe = 111
 let g:existing = 'yes'
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index 2e59286..060b083 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -4,9 +4,6 @@
 source vim9.vim
 source view_util.vim
 
-" TODO: remove later
-let v:disallow_let = 1
-
 def Test_edit_wildcards()
   var filename = 'Xtest'
   edit `=filename`
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 1c24f77..f1f358a 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2,9 +2,6 @@
 
 source check.vim
 
-" TODO: remove later
-let v:disallow_let = 1
-
 func NotCompiled()
   echo "not"
 endfunc
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index d9babed..0a0bcb4 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -3,9 +3,6 @@
 source check.vim
 source vim9.vim
 
-" TODO: remove later
-let v:disallow_let = 1
-
 let g:cond = v:false
 def FuncOne(arg: number): string
   return 'yes'
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index f50ec85..7bc46d8 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -88,7 +88,7 @@
 enddef
 
 def MyVarargs(arg: string, ...rest: list<string>): string
-  let res = arg
+  var res = arg
   for s in rest
     res ..= ',' .. s
   endfor
@@ -160,7 +160,7 @@
 endfunc
 
 def Test_nested_global_function()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       def Outer()
           def g:Inner(): string
@@ -209,7 +209,7 @@
 enddef
 
 def Test_global_local_function()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       def g:Func(): string
           return 'global'
@@ -233,13 +233,13 @@
 enddef
 
 def Test_local_function_shadows_global()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       def g:Gfunc(): string
         return 'global'
       enddef
       def AnotherFunc(): number
-        let Gfunc = function('len')
+        var Gfunc = function('len')
         return Gfunc('testing')
       enddef
       g:Gfunc()->assert_equal('global')
@@ -272,7 +272,7 @@
   CheckDefFailure(['bufnr(xxx)'], 'E1001:')
   CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:')
 
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def Func(s: string)
       echo s
@@ -292,7 +292,7 @@
     defcompile
   END
   writefile(lines, 'Xscript')
-  let didCatch = false
+  var didCatch = false
   try
     source Xscript
   catch
@@ -328,7 +328,7 @@
 
 " Default arg and varargs
 def MyDefVarargs(one: string, two = 'foo', ...rest: list<string>): string
-  let res = one .. ',' .. two
+  var res = one .. ',' .. two
   for s in rest
     res ..= ',' .. s
   endfor
@@ -345,7 +345,7 @@
   CheckDefFailure(['MyDefVarargs("one", "two", 123)'],
       'E1013: Argument 3: type mismatch, expected string but got number')
 
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       def Func(...l: list<string>)
         echo l
@@ -410,7 +410,7 @@
 enddef
 
 def Test_call_call()
-  let l = [3, 2, 1]
+  var l = [3, 2, 1]
   call('reverse', [l])
   l->assert_equal([1, 2, 3])
 enddef
@@ -430,30 +430,30 @@
 enddef
 
 def Test_func_type_varargs()
-  let RefDefArg: func(?string)
+  var RefDefArg: func(?string)
   RefDefArg = FuncOneDefArg
   RefDefArg()
   s:value->assert_equal('text')
   RefDefArg('some')
   s:value->assert_equal('some')
 
-  let RefDef2Arg: func(?number, ?string): string
+  var RefDef2Arg: func(?number, ?string): string
   RefDef2Arg = FuncTwoDefArg
   RefDef2Arg()->assert_equal('123text')
   RefDef2Arg(99)->assert_equal('99text')
   RefDef2Arg(77, 'some')->assert_equal('77some')
 
-  CheckDefFailure(['let RefWrong: func(string?)'], 'E1010:')
-  CheckDefFailure(['let RefWrong: func(?string, string)'], 'E1007:')
+  CheckDefFailure(['var RefWrong: func(string?)'], 'E1010:')
+  CheckDefFailure(['var RefWrong: func(?string, string)'], 'E1007:')
 
-  let RefVarargs: func(...list<string>): string
+  var RefVarargs: func(...list<string>): string
   RefVarargs = FuncVarargs
   RefVarargs()->assert_equal('')
   RefVarargs('one')->assert_equal('one')
   RefVarargs('one', 'two')->assert_equal('one,two')
 
-  CheckDefFailure(['let RefWrong: func(...list<string>, string)'], 'E110:')
-  CheckDefFailure(['let RefWrong: func(...list<string>, ?string)'], 'E110:')
+  CheckDefFailure(['var RefWrong: func(...list<string>, string)'], 'E110:')
+  CheckDefFailure(['var RefWrong: func(...list<string>, ?string)'], 'E110:')
 enddef
 
 " Only varargs
@@ -470,7 +470,7 @@
 enddef
 
 def Test_using_var_as_arg()
-  writefile(['def Func(x: number)',  'let x = 234', 'enddef', 'defcompile'], 'Xdef')
+  writefile(['def Func(x: number)',  'var x = 234', 'enddef', 'defcompile'], 'Xdef')
   assert_fails('so Xdef', 'E1006:', '', 1, 'Func')
   delete('Xdef')
 enddef
@@ -485,10 +485,10 @@
 
 def Test_assign_to_argument()
   # works for dict and list
-  let d: dict<string> = {}
+  var d: dict<string> = {}
   DictArg(d)
   d['key']->assert_equal('value')
-  let l: list<string> = []
+  var l: list<string> = []
   ListArg(l)
   l[0]->assert_equal('value')
 
@@ -518,12 +518,12 @@
   assert_fails('NotAFunc()', 'E117:', '', 2, 'Test_call_funcref') # comment after call
   assert_fails('g:NotAFunc()', 'E117:', '', 3, 'Test_call_funcref')
 
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def RetNumber(): number
       return 123
     enddef
-    let Funcref: func: number = function('RetNumber')
+    var Funcref: func: number = function('RetNumber')
     Funcref()->assert_equal(123)
   END
   CheckScriptSuccess(lines)
@@ -536,7 +536,7 @@
     def Bar(F: func: number): number
       return F()
     enddef
-    let Funcref = function('RetNumber')
+    var Funcref = function('RetNumber')
     Bar(Funcref)->assert_equal(123)
   END
   CheckScriptSuccess(lines)
@@ -546,7 +546,7 @@
     def UseNumber(nr: number)
       echo nr
     enddef
-    let Funcref: func(number) = function('UseNumber')
+    var Funcref: func(number) = function('UseNumber')
     Funcref(123)
   END
   CheckScriptSuccess(lines)
@@ -556,7 +556,7 @@
     def UseNumber(nr: number)
       echo nr
     enddef
-    let Funcref: func(string) = function('UseNumber')
+    var Funcref: func(string) = function('UseNumber')
   END
   CheckScriptFailure(lines, 'E1012: Type mismatch; expected func(string) but got func(number)')
 
@@ -565,7 +565,7 @@
     def EchoNr(nr = 34)
       g:echo = nr
     enddef
-    let Funcref: func(?number) = function('EchoNr')
+    var Funcref: func(?number) = function('EchoNr')
     Funcref()
     g:echo->assert_equal(34)
     Funcref(123)
@@ -578,7 +578,7 @@
     def EchoList(...l: list<number>)
       g:echo = l
     enddef
-    let Funcref: func(...list<number>) = function('EchoList')
+    var Funcref: func(...list<number>) = function('EchoList')
     Funcref()
     g:echo->assert_equal([])
     Funcref(1, 2, 3)
@@ -593,7 +593,7 @@
       g:listarg = l
       return nr
     enddef
-    let Funcref: func(number, ?number, ...list<number>): number = function('OptAndVar')
+    var Funcref: func(number, ?number, ...list<number>): number = function('OptAndVar')
     Funcref(10)->assert_equal(10)
     g:optarg->assert_equal(12)
     g:listarg->assert_equal([])
@@ -614,21 +614,21 @@
 
 def CombineFuncrefTypes()
   # same arguments, different return type
-  let Ref1: func(bool): string
-  let Ref2: func(bool): number
-  let Ref3: func(bool): any
+  var Ref1: func(bool): string
+  var Ref2: func(bool): number
+  var Ref3: func(bool): any
   Ref3 = g:cond ? Ref1 : Ref2
 
   # different number of arguments
-  let Refa1: func(bool): number
-  let Refa2: func(bool, number): number
-  let Refa3: func: number
+  var Refa1: func(bool): number
+  var Refa2: func(bool, number): number
+  var Refa3: func: number
   Refa3 = g:cond ? Refa1 : Refa2
 
   # different argument types
-  let Refb1: func(bool, string): number
-  let Refb2: func(string, number): number
-  let Refb3: func(any, any): number
+  var Refb1: func(bool, string): number
+  var Refb2: func(string, number): number
+  var Refb3: func(any, any): number
   Refb3 = g:cond ? Refb1 : Refb2
 enddef
 
@@ -698,31 +698,31 @@
 enddef
 
 def Test_vim9script_call()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
-    let var = ''
+    var name = ''
     def MyFunc(arg: string)
-       var = arg
+       name = arg
     enddef
     MyFunc('foobar')
-    var->assert_equal('foobar')
+    name->assert_equal('foobar')
 
-    let str = 'barfoo'
+    var str = 'barfoo'
     str->MyFunc()
-    var->assert_equal('barfoo')
+    name->assert_equal('barfoo')
 
     g:value = 'value'
     g:value->MyFunc()
-    var->assert_equal('value')
+    name->assert_equal('value')
 
-    let listvar = []
+    var listvar = []
     def ListFunc(arg: list<number>)
        listvar = arg
     enddef
     [1, 2, 3]->ListFunc()
     listvar->assert_equal([1, 2, 3])
 
-    let dictvar = {}
+    var dictvar = {}
     def DictFunc(arg: dict<number>)
        dictvar = arg
     enddef
@@ -738,28 +738,28 @@
     dictvar->assert_equal(#{a: 3, b: 4})
 
     ('text')->MyFunc()
-    var->assert_equal('text')
+    name->assert_equal('text')
     ("some")->MyFunc()
-    var->assert_equal('some')
+    name->assert_equal('some')
 
     # line starting with single quote is not a mark
     # line starting with double quote can be a method call
     'asdfasdf'->MyFunc()
-    var->assert_equal('asdfasdf')
+    name->assert_equal('asdfasdf')
     "xyz"->MyFunc()
-    var->assert_equal('xyz')
+    name->assert_equal('xyz')
 
     def UseString()
       'xyork'->MyFunc()
     enddef
     UseString()
-    var->assert_equal('xyork')
+    name->assert_equal('xyork')
 
     def UseString2()
       "knife"->MyFunc()
     enddef
     UseString2()
-    var->assert_equal('knife')
+    name->assert_equal('knife')
 
     # prepending a colon makes it a mark
     new
@@ -773,7 +773,7 @@
         'continued'
         )
     assert_equal('continued',
-            var
+            name
             )
 
     call MyFunc(
@@ -783,7 +783,7 @@
         )
     assert_equal(
         'morelines',
-        var)
+        name)
   END
   writefile(lines, 'Xcall.vim')
   source Xcall.vim
@@ -791,11 +791,11 @@
 enddef
 
 def Test_vim9script_call_fail_decl()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
-    let var = ''
+    var name = ''
     def MyFunc(arg: string)
-       let var = 123
+       var name = 123
     enddef
     defcompile
   END
@@ -803,7 +803,7 @@
 enddef
 
 def Test_vim9script_call_fail_type()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def MyFunc(arg: string)
       echo arg
@@ -814,7 +814,7 @@
 enddef
 
 def Test_vim9script_call_fail_const()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     const var = ''
     def MyFunc(arg: string)
@@ -831,7 +831,7 @@
 " recognized.
 func Test_function_python()
   CheckFeature python3
-  let py = 'python3'
+  var py = 'python3'
   execute py "<< EOF"
 def do_something():
   return 1
@@ -839,7 +839,7 @@
 endfunc
 
 def Test_delfunc()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def g:GoneSoon()
       echo 'hello'
@@ -881,7 +881,7 @@
 enddef
 
 def Test_vim9script_func()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     func Func(arg)
       echo a:arg
@@ -992,13 +992,13 @@
 enddef
 
 def Test_func_type()
-  let Ref1: func()
+  var Ref1: func()
   s:funcResult = 0
   Ref1 = FuncNoArgNoRet
   Ref1()
   s:funcResult->assert_equal(11)
 
-  let Ref2: func
+  var Ref2: func
   s:funcResult = 0
   Ref2 = FuncNoArgNoRet
   Ref2()
@@ -1021,7 +1021,7 @@
 enddef
 
 def Test_repeat_return_type()
-  let res = 0
+  var res = 0
   for n in repeat([1], 3)
     res += n
   endfor
@@ -1036,7 +1036,7 @@
 
 def Test_argv_return_type()
   next fileone filetwo
-  let res = ''
+  var res = ''
   for name in argv()
     res ..= name
   endfor
@@ -1044,60 +1044,60 @@
 enddef
 
 def Test_func_type_part()
-  let RefVoid: func: void
+  var RefVoid: func: void
   RefVoid = FuncNoArgNoRet
   RefVoid = FuncOneArgNoRet
-  CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number')
-  CheckDefFailure(['let RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string')
+  CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...) but got func(): number')
+  CheckDefFailure(['var RefVoid: func: void', 'RefVoid = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...) but got func(): string')
 
-  let RefAny: func(): any
+  var RefAny: func(): any
   RefAny = FuncNoArgRetNumber
   RefAny = FuncNoArgRetString
-  CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()')
-  CheckDefFailure(['let RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)')
+  CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func()')
+  CheckDefFailure(['var RefAny: func(): any', 'RefAny = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func(): any but got func(number)')
 
-  let RefNr: func: number
+  var RefNr: func: number
   RefNr = FuncNoArgRetNumber
   RefNr = FuncOneArgRetNumber
-  CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()')
-  CheckDefFailure(['let RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string')
+  CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): number but got func()')
+  CheckDefFailure(['var RefNr: func: number', 'RefNr = FuncNoArgRetString'], 'E1012: Type mismatch; expected func(...): number but got func(): string')
 
-  let RefStr: func: string
+  var RefStr: func: string
   RefStr = FuncNoArgRetString
   RefStr = FuncOneArgRetString
-  CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()')
-  CheckDefFailure(['let RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number')
+  CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgNoRet'], 'E1012: Type mismatch; expected func(...): string but got func()')
+  CheckDefFailure(['var RefStr: func: string', 'RefStr = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func(...): string but got func(): number')
 enddef
 
 def Test_func_type_fails()
-  CheckDefFailure(['let ref1: func()'], 'E704:')
+  CheckDefFailure(['var ref1: func()'], 'E704:')
 
-  CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number')
-  CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)')
-  CheckDefFailure(['let Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number')
-  CheckDefFailure(['let Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)')
-  CheckDefFailure(['let Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)')
-  CheckDefFailure(['let Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)')
+  CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncNoArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(): number')
+  CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgNoRet'], 'E1012: Type mismatch; expected func() but got func(number)')
+  CheckDefFailure(['var Ref1: func()', 'Ref1 = FuncOneArgRetNumber'], 'E1012: Type mismatch; expected func() but got func(number): number')
+  CheckDefFailure(['var Ref1: func(bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(bool) but got func(bool, number)')
+  CheckDefFailure(['var Ref1: func(?bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(?bool) but got func(bool, number)')
+  CheckDefFailure(['var Ref1: func(...bool)', 'Ref1 = FuncTwoArgNoRet'], 'E1012: Type mismatch; expected func(...bool) but got func(bool, number)')
 
-  CheckDefFailure(['let RefWrong: func(string ,number)'], 'E1068:')
-  CheckDefFailure(['let RefWrong: func(string,number)'], 'E1069:')
-  CheckDefFailure(['let RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:')
-  CheckDefFailure(['let RefWrong: func(bool):string'], 'E1069:')
+  CheckDefFailure(['var RefWrong: func(string ,number)'], 'E1068:')
+  CheckDefFailure(['var RefWrong: func(string,number)'], 'E1069:')
+  CheckDefFailure(['var RefWrong: func(bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool)'], 'E1005:')
+  CheckDefFailure(['var RefWrong: func(bool):string'], 'E1069:')
 enddef
 
 def Test_func_return_type()
-  let nr: number
+  var nr: number
   nr = FuncNoArgRetNumber()
   nr->assert_equal(1234)
 
   nr = FuncOneArgRetAny(122)
   nr->assert_equal(122)
 
-  let str: string
+  var str: string
   str = FuncOneArgRetAny('yes')
   str->assert_equal('yes')
 
-  CheckDefFailure(['let str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number')
+  CheckDefFailure(['var str: string', 'str = FuncNoArgRetNumber()'], 'E1012: Type mismatch; expected string but got number')
 enddef
 
 def MultiLine(
@@ -1161,7 +1161,7 @@
 
 def Test_error_reporting()
   # comment lines at the start of the function
-  let lines =<< trim END
+  var lines =<< trim END
     " comment
     def Func()
       # comment
@@ -1183,7 +1183,7 @@
   lines =<< trim END
     " comment
     def Func()
-      let x = 1234
+      var x = 1234
       # comment
       # comment
       invalid
@@ -1202,9 +1202,9 @@
   lines =<< trim END
     vim9script
     def Func()
-      let db = #{foo: 1, bar: 2}
+      var db = #{foo: 1, bar: 2}
       # comment
-      let x = db.asdf
+      var x = db.asdf
     enddef
     defcompile
     Func()
@@ -1222,14 +1222,14 @@
 
 def Test_deleted_function()
   CheckDefExecFailure([
-      'let RefMe: func = function("g:DelMe")',
+      'var RefMe: func = function("g:DelMe")',
       'delfunc g:DelMe',
       'echo RefMe()'], 'E117:')
 enddef
 
 def Test_unknown_function()
   CheckDefExecFailure([
-      'let Ref: func = function("NotExist")',
+      'var Ref: func = function("NotExist")',
       'delfunc g:NotExist'], 'E700:')
 enddef
 
@@ -1238,12 +1238,12 @@
 enddef
 
 def Test_closure_simple()
-  let local = 'some '
+  var local = 'some '
   RefFunc({s -> local .. s})->assert_equal('some more')
 enddef
 
 def MakeRef()
-  let local = 'some '
+  var local = 'some '
   g:Ref = {s -> local .. s}
 enddef
 
@@ -1254,7 +1254,7 @@
 enddef
 
 def MakeTwoRefs()
-  let local = ['some']
+  var local = ['some']
   g:Extend = {s -> local->add(s)}
   g:Read = {-> local}
 enddef
@@ -1292,12 +1292,12 @@
 enddef
 
 def MakeArgRefs(theArg: string)
-  let local = 'loc_val'
+  var local = 'loc_val'
   g:UseArg = {s -> theArg .. '/' .. local .. '/' .. s}
 enddef
 
 def MakeArgRefsVarargs(theArg: string, ...rest: list<string>)
-  let local = 'the_loc'
+  var local = 'the_loc'
   g:UseVararg = {s -> theArg .. '/' .. local .. '/' .. s .. '/' .. join(rest)}
 enddef
 
@@ -1313,7 +1313,7 @@
 enddef
 
 def MakeGetAndAppendRefs()
-  let local = 'a'
+  var local = 'a'
 
   def Append(arg: string)
     local ..= arg
@@ -1339,7 +1339,7 @@
 enddef
 
 def Test_nested_closure()
-  let local = 'text'
+  var local = 'text'
   def Closure(arg: string): string
     return local .. arg
   enddef
@@ -1351,19 +1351,19 @@
 endfunc
 
 def Test_call_closure_not_compiled()
-  let text = 'text'
+  var text = 'text'
   g:Ref = {s ->  s .. text}
   GetResult(g:Ref)->assert_equal('sometext')
 enddef
 
 def Test_double_closure_fails()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def Func()
-    let var = 0
-    for i in range(2)
-	timer_start(0, {-> var})
-    endfor
+      var name = 0
+      for i in range(2)
+          timer_start(0, {-> name})
+      endfor
     enddef
     Func()
   END
@@ -1371,7 +1371,7 @@
 enddef
 
 def Test_nested_closure_fails()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def FuncA()
       FuncB(0)
@@ -1385,40 +1385,40 @@
 enddef
 
 def Test_sort_return_type()
-  let res: list<number>
+  var res: list<number>
   res = [1, 2, 3]->sort()
 enddef
 
 def Test_sort_argument()
-  let res = ['b', 'a', 'c']->sort('i')
+  var res = ['b', 'a', 'c']->sort('i')
   res->assert_equal(['a', 'b', 'c'])
 enddef
 
 def Test_getqflist_return_type()
-  let l = getqflist()
+  var l = getqflist()
   l->assert_equal([])
 
-  let d = getqflist(#{items: 0})
+  var d = getqflist(#{items: 0})
   d->assert_equal(#{items: []})
 enddef
 
 def Test_getloclist_return_type()
-  let l = getloclist(1)
+  var l = getloclist(1)
   l->assert_equal([])
 
-  let d = getloclist(1, #{items: 0})
+  var d = getloclist(1, #{items: 0})
   d->assert_equal(#{items: []})
 enddef
 
 def Test_copy_return_type()
-  let l = copy([1, 2, 3])
-  let res = 0
+  var l = copy([1, 2, 3])
+  var res = 0
   for n in l
     res += n
   endfor
   res->assert_equal(6)
 
-  let dl = deepcopy([1, 2, 3])
+  var dl = deepcopy([1, 2, 3])
   res = 0
   for n in dl
     res += n
@@ -1429,8 +1429,8 @@
 enddef
 
 def Test_extend_return_type()
-  let l = extend([1, 2], [3])
-  let res = 0
+  var l = extend([1, 2], [3])
+  var res = 0
   for n in l
     res += n
   endfor
@@ -1442,8 +1442,8 @@
 enddef
 
 def Test_insert_return_type()
-  let l = insert([2, 1], 3)
-  let res = 0
+  var l = insert([2, 1], 3)
+  var res = 0
   for n in l
     res += n
   endfor
@@ -1456,8 +1456,8 @@
 enddef
 
 def Test_reverse_return_type()
-  let l = reverse([1, 2, 3])
-  let res = 0
+  var l = reverse([1, 2, 3])
+  var res = 0
   for n in l
     res += n
   endfor
@@ -1465,8 +1465,8 @@
 enddef
 
 def Test_remove_return_type()
-  let l = remove(#{one: [1, 2], two: [3, 4]}, 'one')
-  let res = 0
+  var l = remove(#{one: [1, 2], two: [3, 4]}, 'one')
+  var res = 0
   for n in l
     res += n
   endfor
@@ -1474,8 +1474,8 @@
 enddef
 
 def Test_filter_return_type()
-  let l = filter([1, 2, 3], {-> 1})
-  let res = 0
+  var l = filter([1, 2, 3], {-> 1})
+  var res = 0
   for n in l
     res += n
   endfor
@@ -1483,7 +1483,7 @@
 enddef
 
 def Test_bufnr()
-  let buf = bufnr()
+  var buf = bufnr()
   bufnr('%')->assert_equal(buf)
 
   buf = bufnr('Xdummy', true)
@@ -1502,9 +1502,9 @@
 enddef
 
 def Test_getreg_return_type()
-  let s1: string = getreg('"')
-  let s2: string = getreg('"', 1)
-  let s3: list<string> = getreg('"', 1, 1)
+  var s1: string = getreg('"')
+  var s2: string = getreg('"', 1)
+  var s3: list<string> = getreg('"', 1, 1)
 enddef
 
 def Wrong_dict_key_type(items: list<number>): list<number>
@@ -1516,10 +1516,10 @@
 enddef
 
 def Line_continuation_in_def(dir: string = ''): string
-    let path: string = empty(dir)
-            \ ? 'empty'
-            \ : 'full'
-    return path
+  var path: string = empty(dir)
+          \ ? 'empty'
+          \ : 'full'
+  return path
 enddef
 
 def Test_line_continuation_in_def()
@@ -1527,7 +1527,7 @@
 enddef
 
 def Line_continuation_in_lambda(): list<string>
-  let x = range(97, 100)
+  var x = range(97, 100)
       ->map({_, v -> nr2char(v)
           ->toupper()})
       ->reverse()
@@ -1571,9 +1571,9 @@
 enddef
 
 def Test_bufwinid()
-  let origwin = win_getid()
+  var origwin = win_getid()
   below split SomeFile
-  let SomeFileID = win_getid()
+  var SomeFileID = win_getid()
   below split OtherFile
   below split SomeFile
   bufwinid('SomeFile')->assert_equal(SomeFileID)
@@ -1596,7 +1596,7 @@
 enddef
 
 def Test_getbufinfo()
-  let bufinfo = getbufinfo(bufnr())
+  var bufinfo = getbufinfo(bufnr())
   getbufinfo('%')->assert_equal(bufinfo)
 
   edit Xtestfile1
@@ -1609,9 +1609,9 @@
 
 def Test_getbufline()
   e SomeFile
-  let buf = bufnr()
+  var buf = bufnr()
   e #
-  let lines = ['aaa', 'bbb', 'ccc']
+  var lines = ['aaa', 'bbb', 'ccc']
   setbufline(buf, 1, lines)
   getbufline('#', 1, '$')->assert_equal(lines)
 
@@ -1621,7 +1621,7 @@
 def Test_getchangelist()
   new
   setline(1, 'some text')
-  let changelist = bufnr()->getchangelist()
+  var changelist = bufnr()->getchangelist()
   getchangelist('%')->assert_equal(changelist)
   bwipe!
 enddef
@@ -1634,13 +1634,13 @@
 
 def Test_getcompletion()
   set wildignore=*.vim,*~
-  let l = getcompletion('run', 'file', true)
+  var l = getcompletion('run', 'file', true)
   l->assert_equal([])
   set wildignore&
 enddef
 
 def Test_getreg()
-  let lines = ['aaa', 'bbb', 'ccc']
+  var lines = ['aaa', 'bbb', 'ccc']
   setreg('a', lines)
   getreg('a', true, true)->assert_equal(lines)
 enddef
@@ -1669,8 +1669,8 @@
 enddef
 
 def Test_list2str_str2list_utf8()
-  let s = "\u3042\u3044"
-  let l = [0x3042, 0x3044]
+  var s = "\u3042\u3044"
+  var l = [0x3042, 0x3044]
   str2list(s, true)->assert_equal(l)
   list2str(l, true)->assert_equal(s)
 enddef
@@ -1682,7 +1682,7 @@
 enddef
 
 def Test_maparg()
-  let lnum = str2nr(expand('<sflnum>'))
+  var lnum = str2nr(expand('<sflnum>'))
   map foo bar
   maparg('foo', '', false, true)->assert_equal(#{
         lnum: lnum + 1,
@@ -1718,7 +1718,7 @@
 def Test_search()
   new
   setline(1, ['foo', 'bar'])
-  let val = 0
+  var val = 0
   # skip expr returns boolean
   search('bar', 'W', 0, 0, {-> val == 1})->assert_equal(2)
   :1
@@ -1766,15 +1766,15 @@
 enddef
 
 def Test_setloclist()
-  let items = [#{filename: '/tmp/file', lnum: 1, valid: true}]
-  let what = #{items: items}
+  var items = [#{filename: '/tmp/file', lnum: 1, valid: true}]
+  var what = #{items: items}
   setqflist([], ' ', what)
   setloclist(0, [], ' ', what)
 enddef
 
 def Test_setreg()
   setreg('a', ['aaa', 'bbb', 'ccc'])
-  let reginfo = getreginfo('a')
+  var reginfo = getreginfo('a')
   setreg('a', reginfo)
   getreginfo('a')->assert_equal(reginfo)
 enddef 
@@ -1800,10 +1800,10 @@
 enddef
 
 def Test_submatch()
-  let pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)'
-  let Rep = {-> range(10)->map({_, v -> submatch(v, true)})->string()}
-  let actual = substitute('A123456789', pat, Rep, '')
-  let expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]"
+  var pat = 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)'
+  var Rep = {-> range(10)->map({_, v -> submatch(v, true)})->string()}
+  var actual = substitute('A123456789', pat, Rep, '')
+  var expected = "[['A123456789'], ['1'], ['2'], ['3'], ['4'], ['5'], ['6'], ['7'], ['8'], ['9']]"
   actual->assert_equal(expected)
 enddef
 
@@ -1818,7 +1818,7 @@
   if !has('terminal')
     MissingFeature 'terminal'
   else
-    let buf = Run_shell_in_terminal({})
+    var buf = Run_shell_in_terminal({})
     term_gettty(buf, true)->assert_notequal('')
     StopShellInTerminal(buf)
   endif
@@ -1829,7 +1829,7 @@
     MissingFeature 'terminal'
   else
     botright new
-    let winnr = winnr()
+    var winnr = winnr()
     term_start(&shell, #{curwin: true})
     winnr()->assert_equal(winnr)
     bwipe!
@@ -1837,9 +1837,9 @@
 enddef
 
 def Test_timer_paused()
-  let id = timer_start(50, {-> 0})
+  var id = timer_start(50, {-> 0})
   timer_pause(id, true)
-  let info = timer_info(id)
+  var info = timer_info(id)
   info[0]['paused']->assert_equal(1)
   timer_stop(id)
 enddef
@@ -1884,7 +1884,7 @@
 enddef
 
 def Test_partial_call()
-  let Xsetlist = function('setloclist', [0])
+  var Xsetlist = function('setloclist', [0])
   Xsetlist([], ' ', {'title': 'test'})
   getloclist(0, {'title': 1})->assert_equal({'title': 'test'})
 
@@ -1909,7 +1909,7 @@
 def Test_restore_modifiers()
   # check that when compiling a :def function command modifiers are not messed
   # up.
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       set eventignore=
       autocmd QuickFixCmdPost * copen
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 4d226b2..95eccdd 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -6,9 +6,6 @@
 source vim9.vim
 source shared.vim
 
-" TODO: remove later
-let v:disallow_let = 1
-
 def Test_range_only()
   new
   setline(1, ['blah', 'Blah'])
diff --git a/src/version.c b/src/version.c
index 9eef50a..7a2b4f8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1766,
+/**/
     1765,
 /**/
     1764,
