Patch 8.2.1756
Problem: Vim9: :let will soon be disallowed.
Solution: Add v:disallow_let temporarily. Fix tests.
Files: src/vim.h, src/errors.h, src/evalvars.c, src/vim9compile.c,
src/userfunc.c, src/testdir/test_vim9_script.vim
*** ../vim-8.2.1755/src/vim.h 2020-09-26 15:08:52.885779899 +0200
--- src/vim.h 2020-09-27 14:31:28.181237171 +0200
***************
*** 1992,1998 ****
#define VV_ECHOSPACE 93
#define VV_ARGV 94
#define VV_COLLATE 95
! #define VV_LEN 96 // number of v: vars
// used for v_number in VAR_BOOL and VAR_SPECIAL
#define VVAL_FALSE 0L // VAR_BOOL
--- 1992,1999 ----
#define VV_ECHOSPACE 93
#define VV_ARGV 94
#define VV_COLLATE 95
! #define VV_DISALLOW_LET 96 // TODO: remove again
! #define VV_LEN 97 // number of v: vars
// used for v_number in VAR_BOOL and VAR_SPECIAL
#define VVAL_FALSE 0L // VAR_BOOL
*** ../vim-8.2.1755/src/errors.h 2020-09-26 15:08:52.881779910 +0200
--- src/errors.h 2020-09-27 14:33:13.360937745 +0200
***************
*** 274,277 ****
--- 274,279 ----
INIT(= N_("E1124: \"%s\" cannot be used in legacy Vim script"));
EXTERN char e_final_requires_a_value[]
INIT(= N_("E1125: Final requires a value"));
+ EXTERN char e_cannot_use_let_in_vim9_script[]
+ INIT(= N_("E1126: Cannot use :let in Vim9 script"));
#endif
*** ../vim-8.2.1755/src/evalvars.c 2020-09-27 14:22:45.006688671 +0200
--- src/evalvars.c 2020-09-27 14:42:47.575282572 +0200
***************
*** 146,151 ****
--- 146,152 ----
{VV_NAME("echospace", VAR_NUMBER), VV_RO},
{VV_NAME("argv", VAR_LIST), VV_RO},
{VV_NAME("collate", VAR_STRING), VV_RO},
+ {VV_NAME("disallow_let", VAR_NUMBER), 0}, // TODO: remove
};
// shorthand
***************
*** 734,739 ****
--- 735,746 ----
ex_finally(eap);
return;
}
+ if (get_vim_var_nr(VV_DISALLOW_LET)
+ && eap->cmdidx == CMD_let && vim9script)
+ {
+ emsg(_(e_cannot_use_let_in_vim9_script));
+ return;
+ }
if (eap->cmdidx == CMD_const && !vim9script && !eap->forceit)
// In legacy Vim script ":const" works like ":final".
eap->cmdidx = CMD_final;
*** ../vim-8.2.1755/src/vim9compile.c 2020-09-27 14:22:45.006688671 +0200
--- src/vim9compile.c 2020-09-27 14:37:05.980270494 +0200
***************
*** 6979,6984 ****
--- 6979,6990 ----
break;
case CMD_let:
+ if (get_vim_var_nr(VV_DISALLOW_LET))
+ {
+ emsg(_(e_cannot_use_let_in_vim9_script));
+ break;
+ }
+ // FALLTHROUGH
case CMD_var:
case CMD_final:
case CMD_const:
*** ../vim-8.2.1755/src/userfunc.c 2020-09-21 22:02:44.276720646 +0200
--- src/userfunc.c 2020-09-27 15:00:15.681046658 +0200
***************
*** 3214,3232 ****
is_heredoc = TRUE;
}
! // Check for ":let v =<< [trim] EOF"
! // and ":let [a, b] =<< [trim] EOF"
arg = skipwhite(skiptowhite(p));
if (*arg == '[')
arg = vim_strchr(arg, ']');
if (arg != NULL)
{
arg = skipwhite(skiptowhite(arg));
! if ( arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
! && ((p[0] == 'l'
! && p[1] == 'e'
! && (!ASCII_ISALNUM(p[2])
! || (p[2] == 't' && !ASCII_ISALNUM(p[3]))))))
{
p = skipwhite(arg + 3);
if (STRNCMP(p, "trim", 4) == 0)
--- 3214,3233 ----
is_heredoc = TRUE;
}
! // Check for ":cmd v =<< [trim] EOF"
! // and ":cmd [a, b] =<< [trim] EOF"
! // Where "cmd" can be "let", "var", "final" or "const".
arg = skipwhite(skiptowhite(p));
if (*arg == '[')
arg = vim_strchr(arg, ']');
if (arg != NULL)
{
arg = skipwhite(skiptowhite(arg));
! if (arg[0] == '=' && arg[1] == '<' && arg[2] =='<'
! && (checkforcmd(&p, "let", 2)
! || checkforcmd(&p, "var", 3)
! || checkforcmd(&p, "final", 5)
! || checkforcmd(&p, "const", 5)))
{
p = skipwhite(arg + 3);
if (STRNCMP(p, "trim", 4) == 0)
*** ../vim-8.2.1755/src/testdir/test_vim9_script.vim 2020-09-26
17:20:49.693186820 +0200
--- src/testdir/test_vim9_script.vim 2020-09-27 15:10:01.431599549 +0200
***************
*** 6,11 ****
--- 6,14 ----
source vim9.vim
source shared.vim
+ " TODO: remove later
+ let v:disallow_let = 1
+
def Test_range_only()
new
setline(1, ['blah', 'Blah'])
***************
*** 45,61 ****
CheckScriptFailure([
'vim9script',
! 'let svar = 123',
'unlet svar',
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'let svar = 123',
'unlet s:svar',
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'let svar = 123',
'def Func()',
' unlet svar',
'enddef',
--- 48,64 ----
CheckScriptFailure([
'vim9script',
! 'var svar = 123',
'unlet svar',
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'var svar = 123',
'unlet s:svar',
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'var svar = 123',
'def Func()',
' unlet svar',
'enddef',
***************
*** 63,69 ****
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'let svar = 123',
'def Func()',
' unlet s:svar',
'enddef',
--- 66,72 ----
], 'E1081:')
CheckScriptFailure([
'vim9script',
! 'var svar = 123',
'def Func()',
' unlet s:svar',
'enddef',
***************
*** 119,125 ****
], 'E1084:')
# Check that global :def function can be replaced and deleted
! let lines =<< trim END
vim9script
def g:Global(): string
return "yes"
--- 122,128 ----
], 'E1084:')
# Check that global :def function can be replaced and deleted
! var lines =<< trim END
vim9script
def g:Global(): string
return "yes"
***************
*** 168,226 ****
enddef
def Test_wrong_type()
! CheckDefFailure(['let var: list<nothing>'], 'E1010:')
! CheckDefFailure(['let var: list<list<nothing>>'], 'E1010:')
! CheckDefFailure(['let var: dict<nothing>'], 'E1010:')
! CheckDefFailure(['let var: dict<dict<nothing>>'], 'E1010:')
!
! CheckDefFailure(['let var: dict<number'], 'E1009:')
! CheckDefFailure(['let var: dict<list<number>'], 'E1009:')
!
! CheckDefFailure(['let var: ally'], 'E1010:')
! CheckDefFailure(['let var: bram'], 'E1010:')
! CheckDefFailure(['let var: cathy'], 'E1010:')
! CheckDefFailure(['let var: dom'], 'E1010:')
! CheckDefFailure(['let var: freddy'], 'E1010:')
! CheckDefFailure(['let var: john'], 'E1010:')
! CheckDefFailure(['let var: larry'], 'E1010:')
! CheckDefFailure(['let var: ned'], 'E1010:')
! CheckDefFailure(['let var: pam'], 'E1010:')
! CheckDefFailure(['let var: sam'], 'E1010:')
! CheckDefFailure(['let var: vim'], 'E1010:')
! CheckDefFailure(['let Ref: number', 'Ref()'], 'E1085:')
! CheckDefFailure(['let Ref: string', 'let res = Ref()'], 'E1085:')
enddef
def Test_const()
! 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
final list = [1, 2, 3]
list[0] = 4
list->assert_equal([4, 2, 3])
const other = [5, 6, 7]
other->assert_equal([5, 6, 7])
! let varlist = [7, 8]
const constlist = [1, varlist, 3]
varlist[0] = 77
# TODO: does not work yet
# constlist[1][1] = 88
! let cl = constlist[1]
cl[1] = 88
constlist->assert_equal([1, [77, 88], 3])
! let vardict = #{five: 5, six: 6}
const constdict = #{one: 1, two: vardict, three: 3}
vardict['five'] = 55
# TODO: does not work yet
# constdict['two']['six'] = 66
! let cd = constdict['two']
cd['six'] = 66
constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3})
END
--- 171,229 ----
enddef
def Test_wrong_type()
! CheckDefFailure(['var name: list<nothing>'], 'E1010:')
! CheckDefFailure(['var name: list<list<nothing>>'], 'E1010:')
! CheckDefFailure(['var name: dict<nothing>'], 'E1010:')
! CheckDefFailure(['var name: dict<dict<nothing>>'], 'E1010:')
!
! CheckDefFailure(['var name: dict<number'], 'E1009:')
! CheckDefFailure(['var name: dict<list<number>'], 'E1009:')
!
! CheckDefFailure(['var name: ally'], 'E1010:')
! CheckDefFailure(['var name: bram'], 'E1010:')
! CheckDefFailure(['var name: cathy'], 'E1010:')
! CheckDefFailure(['var name: dom'], 'E1010:')
! CheckDefFailure(['var name: freddy'], 'E1010:')
! CheckDefFailure(['var name: john'], 'E1010:')
! CheckDefFailure(['var name: larry'], 'E1010:')
! CheckDefFailure(['var name: ned'], 'E1010:')
! CheckDefFailure(['var name: pam'], 'E1010:')
! CheckDefFailure(['var name: sam'], 'E1010:')
! CheckDefFailure(['var name: vim'], 'E1010:')
! CheckDefFailure(['var Ref: number', 'Ref()'], 'E1085:')
! CheckDefFailure(['var Ref: string', 'var res = Ref()'], 'E1085:')
enddef
def Test_const()
! CheckDefFailure(['final name = 234', 'name = 99'], 'E1018:')
! CheckDefFailure(['final one = 234', 'var one = 99'], 'E1017:')
! CheckDefFailure(['final list = [1, 2]', 'var list = [3, 4]'], 'E1017:')
CheckDefFailure(['final two'], 'E1125:')
CheckDefFailure(['final &option'], 'E996:')
! var lines =<< trim END
final list = [1, 2, 3]
list[0] = 4
list->assert_equal([4, 2, 3])
const other = [5, 6, 7]
other->assert_equal([5, 6, 7])
! var varlist = [7, 8]
const constlist = [1, varlist, 3]
varlist[0] = 77
# TODO: does not work yet
# constlist[1][1] = 88
! var cl = constlist[1]
cl[1] = 88
constlist->assert_equal([1, [77, 88], 3])
! var vardict = #{five: 5, six: 6}
const constdict = #{one: 1, two: vardict, three: 3}
vardict['five'] = 55
# TODO: does not work yet
# constdict['two']['six'] = 66
! var cd = constdict['two']
cd['six'] = 66
constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3})
END
***************
*** 228,234 ****
enddef
def Test_const_bang()
! let lines =<< trim END
const var = 234
var = 99
END
--- 231,237 ----
enddef
def Test_const_bang()
! var lines =<< trim END
const var = 234
var = 99
END
***************
*** 273,281 ****
def Test_block()
! let outer = 1
{
! let inner = 2
assert_equal(1, outer)
assert_equal(2, inner)
}
--- 276,284 ----
def Test_block()
! var outer = 1
{
! var inner = 2
assert_equal(1, outer)
assert_equal(2, inner)
}
***************
*** 283,289 ****
enddef
def Test_block_failure()
! CheckDefFailure(['{', 'let inner = 1', '}', 'echo inner'], 'E1001:')
CheckDefFailure(['}'], 'E1025:')
CheckDefFailure(['{', 'echo 1'], 'E1026:')
enddef
--- 286,292 ----
enddef
def Test_block_failure()
! CheckDefFailure(['{', 'var inner = 1', '}', 'echo inner'], 'E1001:')
CheckDefFailure(['}'], 'E1025:')
CheckDefFailure(['{', 'echo 1'], 'E1026:')
enddef
***************
*** 293,299 ****
endfunc
def Test_try_catch()
! let l = []
try # comment
add(l, '1')
throw 'wrong'
--- 296,302 ----
endfunc
def Test_try_catch()
! var l = []
try # comment
add(l, '1')
throw 'wrong'
***************
*** 321,327 ****
endtry
assert_equal(['1', 'caught', 'finally'], l)
! let n: number
try
n = l[3]
catch /E684:/
--- 324,330 ----
endtry
assert_equal(['1', 'caught', 'finally'], l)
! var n: number
try
n = l[3]
catch /E684:/
***************
*** 358,364 ****
endtry
assert_equal(121, n)
! let d = #{one: 1}
try
n = d[g:astring]
catch /E716:/
--- 361,367 ----
endtry
assert_equal(121, n)
! var d = #{one: 1}
try
n = d[g:astring]
catch /E716:/
***************
*** 387,393 ****
endtry
assert_equal(255, n)
! let nd: dict<any>
try
nd = {g:anumber: 1}
catch /E1012:/
--- 390,396 ----
endtry
assert_equal(255, n)
! var nd: dict<any>
try
nd = {g:anumber: 1}
catch /E1012:/
***************
*** 452,458 ****
endtry
assert_equal(355, n)
! let P = function('g:NoSuchFunc')
delfunc g:NoSuchFunc
try
echo P()
--- 455,461 ----
endtry
assert_equal(355, n)
! var P = function('g:NoSuchFunc')
delfunc g:NoSuchFunc
try
echo P()
***************
*** 553,559 ****
def TryTwo(n: number): string
try
! let x = {}
catch
endtry
return 'text'
--- 556,562 ----
def TryTwo(n: number): string
try
! var x = {}
catch
endtry
return 'text'
***************
*** 564,570 ****
enddef
def Test_try_catch_match()
! let seq = 'a'
try
throw 'something'
catch /nothing/
--- 567,573 ----
enddef
def Test_try_catch_match()
! var seq = 'a'
try
throw 'something'
catch /nothing/
***************
*** 599,605 ****
def Test_throw_vimscript()
# only checks line continuation
! let lines =<< trim END
vim9script
try
throw 'one'
--- 602,608 ----
def Test_throw_vimscript()
# only checks line continuation
! var lines =<< trim END
vim9script
try
throw 'one'
***************
*** 613,619 ****
def Test_error_in_nested_function()
# an error in a nested :function aborts executin in the calling :def
function
! let lines =<< trim END
vim9script
def Func()
Error()
--- 616,622 ----
def Test_error_in_nested_function()
# an error in a nested :function aborts executin in the calling :def
function
! var lines =<< trim END
vim9script
def Func()
Error()
***************
*** 632,638 ****
def Test_cexpr_vimscript()
# only checks line continuation
set errorformat=File\ %f\ line\ %l
! let lines =<< trim END
vim9script
cexpr 'File'
.. ' someFile' ..
--- 635,641 ----
def Test_cexpr_vimscript()
# only checks line continuation
set errorformat=File\ %f\ line\ %l
! var lines =<< trim END
vim9script
cexpr 'File'
.. ' someFile' ..
***************
*** 645,651 ****
def Test_statusline_syntax()
# legacy syntax is used for 'statusline'
! let lines =<< trim END
vim9script
func g:Status()
return '%{"x" is# "x"}'
--- 648,654 ----
def Test_statusline_syntax()
# legacy syntax is used for 'statusline'
! var lines =<< trim END
vim9script
func g:Status()
return '%{"x" is# "x"}'
***************
*** 659,667 ****
def Test_list_vimscript()
# checks line continuation and comments
! let lines =<< trim END
vim9script
! let mylist = [
'one',
# comment
'two', # empty line follows
--- 662,670 ----
def Test_list_vimscript()
# checks line continuation and comments
! var lines =<< trim END
vim9script
! var mylist = [
'one',
# comment
'two', # empty line follows
***************
*** 702,708 ****
let s:export_script_lines =<< trim END
vim9script
! let name: string = 'bob'
def Concat(arg: string): string
return name .. arg
enddef
--- 705,711 ----
let s:export_script_lines =<< trim END
vim9script
! var name: string = 'bob'
def Concat(arg: string): string
return name .. arg
enddef
***************
*** 710,717 ****
g:localname = name
export const CONST = 1234
! export let exported = 9876
! export let exp_name = 'John'
export def Exported(): string
return 'Exported'
enddef
--- 713,720 ----
g:localname = name
export const CONST = 1234
! export var exported = 9876
! export var exp_name = 'John'
export def Exported(): string
return 'Exported'
enddef
***************
*** 723,729 ****
enddef
def Test_vim9_import_export()
! let import_script_lines =<< trim END
vim9script
import {exported, Exported} from './Xexport.vim'
g:imported = exported
--- 726,732 ----
enddef
def Test_vim9_import_export()
! var import_script_lines =<< trim END
vim9script
import {exported, Exported} from './Xexport.vim'
g:imported = exported
***************
*** 732,738 ****
g:imported_func = Exported()
def GetExported(): string
! let local_dict = #{ref: Exported}
return local_dict.ref()
enddef
g:funcref_result = GetExported()
--- 735,741 ----
g:imported_func = Exported()
def GetExported(): string
! var local_dict = #{ref: Exported}
return local_dict.ref()
enddef
g:funcref_result = GetExported()
***************
*** 769,775 ****
delete('Ximport.vim')
# similar, with line breaks
! let import_line_break_script_lines =<< trim END
vim9script
import {
exported,
--- 772,778 ----
delete('Ximport.vim')
# similar, with line breaks
! var import_line_break_script_lines =<< trim END
vim9script
import {
exported,
***************
*** 797,803 ****
delete('Ximport_lbr.vim')
# import inside :def function
! let import_in_def_lines =<< trim END
vim9script
def ImportInDef()
import exported from './Xexport.vim'
--- 800,806 ----
delete('Ximport_lbr.vim')
# import inside :def function
! var import_in_def_lines =<< trim END
vim9script
def ImportInDef()
import exported from './Xexport.vim'
***************
*** 816,822 ****
unlet g:imported_added
delete('Ximport2.vim')
! let import_star_as_lines =<< trim END
vim9script
import * as Export from './Xexport.vim'
def UseExport()
--- 819,825 ----
unlet g:imported_added
delete('Ximport2.vim')
! var import_star_as_lines =<< trim END
vim9script
import * as Export from './Xexport.vim'
def UseExport()
***************
*** 828,868 ****
source Ximport.vim
assert_equal(9883, g:imported)
! let import_star_as_lines_no_dot =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! let dummy = 1
! let imported = Export + dummy
enddef
defcompile
END
writefile(import_star_as_lines_no_dot, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
! let import_star_as_lines_dot_space =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! let imported = Export . exported
enddef
defcompile
END
writefile(import_star_as_lines_dot_space, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
! let import_star_as_lines_missing_name =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! let imported = Export.
enddef
defcompile
END
writefile(import_star_as_lines_missing_name, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
! let import_star_as_lbr_lines =<< trim END
vim9script
import *
as Export
--- 831,871 ----
source Ximport.vim
assert_equal(9883, g:imported)
! var import_star_as_lines_no_dot =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! var dummy = 1
! var imported = Export + dummy
enddef
defcompile
END
writefile(import_star_as_lines_no_dot, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1060:', '', 2, 'Func')
! var import_star_as_lines_dot_space =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! var imported = Export . exported
enddef
defcompile
END
writefile(import_star_as_lines_dot_space, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1074:', '', 1, 'Func')
! var import_star_as_lines_missing_name =<< trim END
vim9script
import * as Export from './Xexport.vim'
def Func()
! var imported = Export.
enddef
defcompile
END
writefile(import_star_as_lines_missing_name, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1048:', '', 1, 'Func')
! var import_star_as_lbr_lines =<< trim END
vim9script
import *
as Export
***************
*** 877,883 ****
source Ximport.vim
assert_equal(9883, g:imported)
! let import_star_lines =<< trim END
vim9script
import * from './Xexport.vim'
END
--- 880,886 ----
source Ximport.vim
assert_equal(9883, g:imported)
! var import_star_lines =<< trim END
vim9script
import * from './Xexport.vim'
END
***************
*** 885,891 ****
assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
# try to import something that exists but is not exported
! let import_not_exported_lines =<< trim END
vim9script
import name from './Xexport.vim'
END
--- 888,894 ----
assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim')
# try to import something that exists but is not exported
! var import_not_exported_lines =<< trim END
vim9script
import name from './Xexport.vim'
END
***************
*** 893,901 ****
assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
# try to import something that is already defined
! let import_already_defined =<< trim END
vim9script
! let exported = 'something'
import exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
--- 896,904 ----
assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim')
# try to import something that is already defined
! var import_already_defined =<< trim END
vim9script
! var exported = 'something'
import exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
***************
*** 904,910 ****
# try to import something that is already defined
import_already_defined =<< trim END
vim9script
! let exported = 'something'
import * as exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
--- 907,913 ----
# try to import something that is already defined
import_already_defined =<< trim END
vim9script
! var exported = 'something'
import * as exported from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
***************
*** 913,954 ****
# try to import something that is already defined
import_already_defined =<< trim END
vim9script
! let exported = 'something'
import {exported} from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
# import a very long name, requires making a copy
! let import_long_name_lines =<< trim END
vim9script
import
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
from './Xexport.vim'
END
writefile(import_long_name_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
! let import_no_from_lines =<< trim END
vim9script
import name './Xexport.vim'
END
writefile(import_no_from_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
! let import_invalid_string_lines =<< trim END
vim9script
import name from Xexport.vim
END
writefile(import_invalid_string_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
! let import_wrong_name_lines =<< trim END
vim9script
import name from './XnoExport.vim'
END
writefile(import_wrong_name_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
! let import_missing_comma_lines =<< trim END
vim9script
import {exported name} from './Xexport.vim'
END
--- 916,957 ----
# try to import something that is already defined
import_already_defined =<< trim END
vim9script
! var exported = 'something'
import {exported} from './Xexport.vim'
END
writefile(import_already_defined, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim')
# import a very long name, requires making a copy
! var import_long_name_lines =<< trim END
vim9script
import
name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
from './Xexport.vim'
END
writefile(import_long_name_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1048:', '', 2, 'Ximport.vim')
! var import_no_from_lines =<< trim END
vim9script
import name './Xexport.vim'
END
writefile(import_no_from_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1070:', '', 2, 'Ximport.vim')
! var import_invalid_string_lines =<< trim END
vim9script
import name from Xexport.vim
END
writefile(import_invalid_string_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1071:', '', 2, 'Ximport.vim')
! var import_wrong_name_lines =<< trim END
vim9script
import name from './XnoExport.vim'
END
writefile(import_wrong_name_lines, 'Ximport.vim')
assert_fails('source Ximport.vim', 'E1053:', '', 2, 'Ximport.vim')
! var import_missing_comma_lines =<< trim END
vim9script
import {exported name} from './Xexport.vim'
END
***************
*** 961,968 ****
# Check that in a Vim9 script 'cpo' is set to the Vim default.
set cpo&vi
! let cpo_before = &cpo
! let lines =<< trim END
vim9script
g:cpo_in_vim9script = &cpo
END
--- 964,971 ----
# Check that in a Vim9 script 'cpo' is set to the Vim default.
set cpo&vi
! var cpo_before = &cpo
! var lines =<< trim END
vim9script
g:cpo_in_vim9script = &cpo
END
***************
*** 981,987 ****
def Test_import_export_expr_map()
# check that :import and :export work when buffer is locked
! let export_lines =<< trim END
vim9script
export def That(): string
return 'yes'
--- 984,990 ----
def Test_import_export_expr_map()
# check that :import and :export work when buffer is locked
! var export_lines =<< trim END
vim9script
export def That(): string
return 'yes'
***************
*** 989,995 ****
END
writefile(export_lines, 'Xexport_that.vim')
! let import_lines =<< trim END
vim9script
import That from './Xexport_that.vim'
assert_equal('yes', That())
--- 992,998 ----
END
writefile(export_lines, 'Xexport_that.vim')
! var import_lines =<< trim END
vim9script
import That from './Xexport_that.vim'
assert_equal('yes', That())
***************
*** 1007,1019 ****
def Test_import_in_filetype()
# check that :import works when the buffer is locked
mkdir('ftplugin', 'p')
! let export_lines =<< trim END
vim9script
! export let That = 'yes'
END
writefile(export_lines, 'ftplugin/Xexport_ft.vim')
! let import_lines =<< trim END
vim9script
import That from './Xexport_ft.vim'
assert_equal('yes', That)
--- 1010,1022 ----
def Test_import_in_filetype()
# check that :import works when the buffer is locked
mkdir('ftplugin', 'p')
! var export_lines =<< trim END
vim9script
! export var That = 'yes'
END
writefile(export_lines, 'ftplugin/Xexport_ft.vim')
! var import_lines =<< trim END
vim9script
import That from './Xexport_ft.vim'
assert_equal('yes', That)
***************
*** 1021,1027 ****
END
writefile(import_lines, 'ftplugin/qf.vim')
! let save_rtp = &rtp
&rtp = getcwd() .. ',' .. &rtp
filetype plugin on
--- 1024,1030 ----
END
writefile(import_lines, 'ftplugin/qf.vim')
! var save_rtp = &rtp
&rtp = getcwd() .. ',' .. &rtp
filetype plugin on
***************
*** 1035,1041 ****
enddef
def Test_use_import_in_mapping()
! let lines =<< trim END
vim9script
export def Funcx()
g:result = 42
--- 1038,1044 ----
enddef
def Test_use_import_in_mapping()
! var lines =<< trim END
vim9script
export def Funcx()
g:result = 42
***************
*** 1062,1073 ****
def Test_vim9script_fails()
CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
! CheckScriptFailure(['export let some = 123'], 'E1042:')
CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:')
! CheckScriptFailure(['vim9script', 'export let g:some'], 'E1022:')
CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
! CheckScriptFailure(['vim9script', 'let str: string', 'str = 1234'],
'E1012:')
CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'],
'E46:')
assert_fails('vim9script', 'E1038:')
--- 1065,1076 ----
def Test_vim9script_fails()
CheckScriptFailure(['scriptversion 2', 'vim9script'], 'E1039:')
CheckScriptFailure(['vim9script', 'scriptversion 2'], 'E1040:')
! CheckScriptFailure(['export var some = 123'], 'E1042:')
CheckScriptFailure(['import some from "./Xexport.vim"'], 'E1048:')
! CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
CheckScriptFailure(['vim9script', 'export echo 134'], 'E1043:')
! CheckScriptFailure(['vim9script', 'var str: string', 'str = 1234'],
'E1012:')
CheckScriptFailure(['vim9script', 'const str = "asdf"', 'str = "xxx"'],
'E46:')
assert_fails('vim9script', 'E1038:')
***************
*** 1082,1088 ****
endfunc
def Run_Test_import_fails_on_command_line()
! let export =<< trim END
vim9script
export def Foo(): number
return 0
--- 1085,1091 ----
endfunc
def Run_Test_import_fails_on_command_line()
! var export =<< trim END
vim9script
export def Foo(): number
return 0
***************
*** 1090,1096 ****
END
writefile(export, 'XexportCmd.vim')
! let buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{
rows: 6, wait_for_ruler: 0})
WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))})
--- 1093,1099 ----
END
writefile(export, 'XexportCmd.vim')
! var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{
rows: 6, wait_for_ruler: 0})
WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))})
***************
*** 1099,1114 ****
enddef
def Test_vim9script_reload_import()
! let lines =<< trim END
vim9script
const var = ''
! let valone = 1234
def MyFunc(arg: string)
valone = 5678
enddef
END
! let morelines =<< trim END
! let valtwo = 222
export def GetValtwo(): number
return valtwo
enddef
--- 1102,1117 ----
enddef
def Test_vim9script_reload_import()
! var lines =<< trim END
vim9script
const var = ''
! var valone = 1234
def MyFunc(arg: string)
valone = 5678
enddef
END
! var morelines =<< trim END
! var valtwo = 222
export def GetValtwo(): number
return valtwo
enddef
***************
*** 1118,1124 ****
source Xreload.vim
source Xreload.vim
! let testlines =<< trim END
vim9script
def TheFunc()
import GetValtwo from './Xreload.vim'
--- 1121,1127 ----
source Xreload.vim
source Xreload.vim
! var testlines =<< trim END
vim9script
def TheFunc()
import GetValtwo from './Xreload.vim'
***************
*** 1137,1144 ****
# cannot declare a var twice
lines =<< trim END
vim9script
! let valone = 1234
! let valone = 5678
END
writefile(lines, 'Xreload.vim')
assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
--- 1140,1147 ----
# cannot declare a var twice
lines =<< trim END
vim9script
! var valone = 1234
! var valone = 5678
END
writefile(lines, 'Xreload.vim')
assert_fails('source Xreload.vim', 'E1041:', '', 3, 'Xreload.vim')
***************
*** 1154,1160 ****
" Not exported function that is referenced needs to be accessed by the
" script-local name.
def Test_vim9script_funcref()
! let sortlines =<< trim END
vim9script
def Compare(i1: number, i2: number): number
return i2 - i1
--- 1157,1163 ----
" Not exported function that is referenced needs to be accessed by the
" script-local name.
def Test_vim9script_funcref()
! var sortlines =<< trim END
vim9script
def Compare(i1: number, i2: number): number
return i2 - i1
***************
*** 1166,1172 ****
END
writefile(sortlines, 'Xsort.vim')
! let lines =<< trim END
vim9script
import FastSort from './Xsort.vim'
def Test()
--- 1169,1175 ----
END
writefile(sortlines, 'Xsort.vim')
! var lines =<< trim END
vim9script
import FastSort from './Xsort.vim'
def Test()
***************
*** 1183,1189 ****
delete('Xsort.vim')
delete('Xscript.vim')
! let Funcref = function('s:RetSome')
assert_equal('some', Funcref())
enddef
--- 1186,1192 ----
delete('Xsort.vim')
delete('Xscript.vim')
! var Funcref = function('s:RetSome')
assert_equal('some', Funcref())
enddef
***************
*** 1191,1197 ****
" script where FastFilter() is called from, both as a string and as a direct
" function reference.
def Test_vim9script_funcref_other_script()
! let filterLines =<< trim END
vim9script
export def FilterFunc(idx: number, val: number): bool
return idx % 2 == 1
--- 1194,1200 ----
" script where FastFilter() is called from, both as a string and as a direct
" function reference.
def Test_vim9script_funcref_other_script()
! var filterLines =<< trim END
vim9script
export def FilterFunc(idx: number, val: number): bool
return idx % 2 == 1
***************
*** 1205,1219 ****
END
writefile(filterLines, 'Xfilter.vim')
! let lines =<< trim END
vim9script
import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim'
def Test()
! let x: list<number> = FastFilter()
enddef
Test()
def TestDirect()
! let x: list<number> = FastFilterDirect()
enddef
TestDirect()
END
--- 1208,1222 ----
END
writefile(filterLines, 'Xfilter.vim')
! var lines =<< trim END
vim9script
import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim'
def Test()
! var x: list<number> = FastFilter()
enddef
Test()
def TestDirect()
! var x: list<number> = FastFilterDirect()
enddef
TestDirect()
END
***************
*** 1222,1234 ****
enddef
def Test_vim9script_reload_delfunc()
! let first_lines =<< trim END
vim9script
def FuncYes(): string
return 'yes'
enddef
END
! let withno_lines =<< trim END
def FuncNo(): string
return 'no'
enddef
--- 1225,1237 ----
enddef
def Test_vim9script_reload_delfunc()
! var first_lines =<< trim END
vim9script
def FuncYes(): string
return 'yes'
enddef
END
! var withno_lines =<< trim END
def FuncNo(): string
return 'no'
enddef
***************
*** 1237,1243 ****
assert_equal('no', FuncNo())
enddef
END
! let nono_lines =<< trim END
def g:DoCheck(no_exists: bool)
assert_equal('yes', FuncYes())
assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
--- 1240,1246 ----
assert_equal('no', FuncNo())
enddef
END
! var nono_lines =<< trim END
def g:DoCheck(no_exists: bool)
assert_equal('yes', FuncYes())
assert_fails('FuncNo()', 'E117:', '', 2, 'DoCheck')
***************
*** 1264,1272 ****
def Test_vim9script_reload_delvar()
# write the script with a script-local variable
! let lines =<< trim END
vim9script
! let var = 'string'
END
writefile(lines, 'XreloadVar.vim')
source XreloadVar.vim
--- 1267,1275 ----
def Test_vim9script_reload_delvar()
# write the script with a script-local variable
! var lines =<< trim END
vim9script
! var name = 'string'
END
writefile(lines, 'XreloadVar.vim')
source XreloadVar.vim
***************
*** 1275,1281 ****
lines =<< trim END
vim9script
def Func()
! let var = 'string'
enddef
END
writefile(lines, 'XreloadVar.vim')
--- 1278,1284 ----
lines =<< trim END
vim9script
def Func()
! var name = 'string'
enddef
END
writefile(lines, 'XreloadVar.vim')
***************
*** 1285,1291 ****
enddef
def Test_import_absolute()
! let import_lines = [
'vim9script',
'import exported from "' .. escape(getcwd(), '\') ..
'/Xexport_abs.vim"',
'def UseExported()',
--- 1288,1294 ----
enddef
def Test_import_absolute()
! var import_lines = [
'vim9script',
'import exported from "' .. escape(getcwd(), '\') ..
'/Xexport_abs.vim"',
'def UseExported()',
***************
*** 1323,1329 ****
enddef
def Test_import_rtp()
! let import_lines = [
'vim9script',
'import exported from "Xexport_rtp.vim"',
'g:imported_rtp = exported',
--- 1326,1332 ----
enddef
def Test_import_rtp()
! var import_lines = [
'vim9script',
'import exported from "Xexport_rtp.vim"',
'g:imported_rtp = exported',
***************
*** 1332,1338 ****
mkdir('import')
writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
! let save_rtp = &rtp
&rtp = getcwd()
source Ximport_rtp.vim
&rtp = save_rtp
--- 1335,1341 ----
mkdir('import')
writefile(s:export_script_lines, 'import/Xexport_rtp.vim')
! var save_rtp = &rtp
&rtp = getcwd()
source Ximport_rtp.vim
&rtp = save_rtp
***************
*** 1346,1352 ****
enddef
def Test_import_compile_error()
! let export_lines = [
'vim9script',
'export def ExpFunc(): string',
' return notDefined',
--- 1349,1355 ----
enddef
def Test_import_compile_error()
! var export_lines = [
'vim9script',
'export def ExpFunc(): string',
' return notDefined',
***************
*** 1354,1360 ****
]
writefile(export_lines, 'Xexported.vim')
! let import_lines = [
'vim9script',
'import ExpFunc from "./Xexported.vim"',
'def ImpFunc()',
--- 1357,1363 ----
]
writefile(export_lines, 'Xexported.vim')
! var import_lines = [
'vim9script',
'import ExpFunc from "./Xexported.vim"',
'def ImpFunc()',
***************
*** 1377,1383 ****
enddef
def Test_func_redefine_error()
! let lines = [
'vim9script',
'def Func()',
' eval [][0]',
--- 1380,1386 ----
enddef
def Test_func_redefine_error()
! var lines = [
'vim9script',
'def Func()',
' eval [][0]',
***************
*** 1400,1406 ****
enddef
def Test_func_overrules_import_fails()
! let export_lines =<< trim END
vim9script
export def Func()
echo 'imported'
--- 1403,1409 ----
enddef
def Test_func_overrules_import_fails()
! var export_lines =<< trim END
vim9script
export def Func()
echo 'imported'
***************
*** 1408,1414 ****
END
writefile(export_lines, 'XexportedFunc.vim')
! let lines =<< trim END
vim9script
import Func from './XexportedFunc.vim'
def Func()
--- 1411,1417 ----
END
writefile(export_lines, 'XexportedFunc.vim')
! var lines =<< trim END
vim9script
import Func from './XexportedFunc.vim'
def Func()
***************
*** 1433,1439 ****
enddef
def Test_func_redefine_fails()
! let lines =<< trim END
vim9script
def Func()
echo 'one'
--- 1436,1442 ----
enddef
def Test_func_redefine_fails()
! var lines =<< trim END
vim9script
def Func()
echo 'one'
***************
*** 1450,1456 ****
return 'foo'
enddef
def Func()
! let Foo = {-> 'lambda'}
enddef
defcompile
END
--- 1453,1459 ----
return 'foo'
enddef
def Func()
! var Foo = {-> 'lambda'}
enddef
defcompile
END
***************
*** 1459,1465 ****
def Test_fixed_size_list()
# will be allocated as one piece of memory, check that changes work
! let l = [1, 2, 3, 4]
l->remove(0)
l->add(5)
l->insert(99, 1)
--- 1462,1468 ----
def Test_fixed_size_list()
# will be allocated as one piece of memory, check that changes work
! var l = [1, 2, 3, 4]
l->remove(0)
l->add(5)
l->insert(99, 1)
***************
*** 1485,1491 ****
enddef
def IfElse(what: number): string
! let res = ''
if what == 1
res = "one"
elseif what == 2
--- 1488,1494 ----
enddef
def IfElse(what: number): string
! var res = ''
if what == 1
res = "one"
elseif what == 2
***************
*** 1514,1520 ****
let g:bool_false = v:false
def Test_if_const_expr()
! let res = false
if true ? true : false
res = true
endif
--- 1517,1523 ----
let g:bool_false = v:false
def Test_if_const_expr()
! var res = false
if true ? true : false
res = true
endif
***************
*** 1643,1649 ****
enddef
def RunNested(i: number): number
! let x: number = 0
if i % 2
if 1
# comment
--- 1646,1652 ----
enddef
def RunNested(i: number): number
! var x: number = 0
if i % 2
if 1
# comment
***************
*** 1671,1691 ****
execute "setline(1, 'execute-string')"
assert_equal('execute-string', getline(1))
! let cmd1 = 'setline(1,'
! let cmd2 = '"execute-var")'
execute cmd1 cmd2 # comment
assert_equal('execute-var', getline(1))
execute cmd1 cmd2 '|setline(1, "execute-var-string")'
assert_equal('execute-var-string', getline(1))
! let cmd_first = 'call '
! let cmd_last = 'setline(1, "execute-var-var")'
execute cmd_first .. cmd_last
assert_equal('execute-var-var', getline(1))
bwipe!
! let n = true
execute 'echomsg' (n ? '"true"' : '"no"')
assert_match('^true$', Screenline(&lines))
--- 1674,1694 ----
execute "setline(1, 'execute-string')"
assert_equal('execute-string', getline(1))
! var cmd1 = 'setline(1,'
! var cmd2 = '"execute-var")'
execute cmd1 cmd2 # comment
assert_equal('execute-var', getline(1))
execute cmd1 cmd2 '|setline(1, "execute-var-string")'
assert_equal('execute-var-string', getline(1))
! var cmd_first = 'call '
! var cmd_last = 'setline(1, "execute-var-var")'
execute cmd_first .. cmd_last
assert_equal('execute-var-var', getline(1))
bwipe!
! var n = true
execute 'echomsg' (n ? '"true"' : '"no"')
assert_match('^true$', Screenline(&lines))
***************
*** 1699,1705 ****
def Test_execute_cmd_vimscript()
# only checks line continuation
! let lines =<< trim END
vim9script
execute 'g:someVar'
.. ' = ' ..
--- 1702,1708 ----
def Test_execute_cmd_vimscript()
# only checks line continuation
! var lines =<< trim END
vim9script
execute 'g:someVar'
.. ' = ' ..
***************
*** 1719,1726 ****
echon "thing"
assert_match('^something$', Screenline(&lines))
! let str1 = 'some'
! let str2 = 'more'
echo str1 str2
assert_match('^some more$', Screenline(&lines))
--- 1722,1729 ----
echon "thing"
assert_match('^something$', Screenline(&lines))
! var str1 = 'some'
! var str2 = 'more'
echo str1 str2
assert_match('^some more$', Screenline(&lines))
***************
*** 1739,1745 ****
def Test_echomsg_cmd_vimscript()
# only checks line continuation
! let lines =<< trim END
vim9script
echomsg 'here'
.. ' is ' ..
--- 1742,1748 ----
def Test_echomsg_cmd_vimscript()
# only checks line continuation
! var lines =<< trim END
vim9script
echomsg 'here'
.. ' is ' ..
***************
*** 1759,1765 ****
def Test_echoerr_cmd_vimscript()
# only checks line continuation
! let lines =<< trim END
vim9script
try
echoerr 'this'
--- 1762,1768 ----
def Test_echoerr_cmd_vimscript()
# only checks line continuation
! var lines =<< trim END
vim9script
try
echoerr 'this'
***************
*** 1773,1779 ****
enddef
def Test_for_outside_of_function()
! let lines =<< trim END
vim9script
new
for var in range(0, 3)
--- 1776,1782 ----
enddef
def Test_for_outside_of_function()
! var lines =<< trim END
vim9script
new
for var in range(0, 3)
***************
*** 1788,1794 ****
enddef
def Test_for_loop()
! let result = ''
for cnt in range(7)
if cnt == 4
break
--- 1791,1797 ----
enddef
def Test_for_loop()
! var result = ''
for cnt in range(7)
if cnt == 4
break
***************
*** 1800,1806 ****
endfor
assert_equal('0_1_3_', result)
! let concat = ''
for str in eval('["one", "two"]')
concat ..= str
endfor
--- 1803,1809 ----
endfor
assert_equal('0_1_3_', result)
! var concat = ''
for str in eval('["one", "two"]')
concat ..= str
endfor
***************
*** 1810,1816 ****
def Test_for_loop_fails()
CheckDefFailure(['for # in range(5)'], 'E690:')
CheckDefFailure(['for i In range(5)'], 'E690:')
! CheckDefFailure(['let x = 5', 'for x in range(5)'], 'E1017:')
CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef',
'defcompile'], 'E1006:')
CheckDefFailure(['for i in "text"'], 'E1012:')
CheckDefFailure(['for i in xxx'], 'E1001:')
--- 1813,1819 ----
def Test_for_loop_fails()
CheckDefFailure(['for # in range(5)'], 'E690:')
CheckDefFailure(['for i In range(5)'], 'E690:')
! CheckDefFailure(['var x = 5', 'for x in range(5)'], 'E1017:')
CheckScriptFailure(['def Func(arg: any)', 'for arg in range(5)', 'enddef',
'defcompile'], 'E1006:')
CheckDefFailure(['for i in "text"'], 'E1012:')
CheckDefFailure(['for i in xxx'], 'E1001:')
***************
*** 1819,1826 ****
enddef
def Test_while_loop()
! let result = ''
! let cnt = 0
while cnt < 555
if cnt == 3
break
--- 1822,1829 ----
enddef
def Test_while_loop()
! var result = ''
! var cnt = 0
while cnt < 555
if cnt == 3
break
***************
*** 1845,1852 ****
enddef
def Test_interrupt_loop()
! let caught = false
! let x = 0
try
while 1
x += 1
--- 1848,1855 ----
enddef
def Test_interrupt_loop()
! var caught = false
! var x = 0
try
while 1
x += 1
***************
*** 1864,1877 ****
enddef
def Test_automatic_line_continuation()
! let mylist = [
'one',
'two',
'three',
] # comment
assert_equal(['one', 'two', 'three'], mylist)
! let mydict = {
'one': 1,
'two': 2,
'three':
--- 1867,1880 ----
enddef
def Test_automatic_line_continuation()
! var mylist = [
'one',
'two',
'three',
] # comment
assert_equal(['one', 'two', 'three'], mylist)
! var mydict = {
'one': 1,
'two': 2,
'three':
***************
*** 2340,2371 ****
CheckScriptFailure([
'vim9script',
! 'let g:var = 123',
], 'E1016: Cannot declare a global variable:')
CheckScriptFailure([
'vim9script',
! 'let b:var = 123',
], 'E1016: Cannot declare a buffer variable:')
CheckScriptFailure([
'vim9script',
! 'let w:var = 123',
], 'E1016: Cannot declare a window variable:')
CheckScriptFailure([
'vim9script',
! 'let t:var = 123',
], 'E1016: Cannot declare a tab variable:')
CheckScriptFailure([
'vim9script',
! 'let v:version = 123',
], 'E1016: Cannot declare a v: variable:')
CheckScriptFailure([
'vim9script',
! 'let $VARIABLE = "text"',
], 'E1016: Cannot declare an environment variable:')
CheckScriptFailure([
--- 2343,2379 ----
CheckScriptFailure([
'vim9script',
! 'let var = 123',
! ], 'E1126: Cannot use :let in Vim9 script')
!
! CheckScriptFailure([
! 'vim9script',
! 'var g:var = 123',
], 'E1016: Cannot declare a global variable:')
CheckScriptFailure([
'vim9script',
! 'var b:var = 123',
], 'E1016: Cannot declare a buffer variable:')
CheckScriptFailure([
'vim9script',
! 'var w:var = 123',
], 'E1016: Cannot declare a window variable:')
CheckScriptFailure([
'vim9script',
! 'var t:var = 123',
], 'E1016: Cannot declare a tab variable:')
CheckScriptFailure([
'vim9script',
! 'var v:version = 123',
], 'E1016: Cannot declare a v: variable:')
CheckScriptFailure([
'vim9script',
! 'var $VARIABLE = "text"',
], 'E1016: Cannot declare an environment variable:')
CheckScriptFailure([
***************
*** 2406,2417 ****
CheckScriptSuccess([
'vim9script',
! 'let v = 1 # comment5',
])
CheckScriptFailure([
'vim9script',
! 'let v = 1# comment6',
], 'E15:')
CheckScriptSuccess([
--- 2414,2425 ----
CheckScriptSuccess([
'vim9script',
! 'var v = 1 # comment5',
])
CheckScriptFailure([
'vim9script',
! 'var v = 1# comment6',
], 'E15:')
CheckScriptSuccess([
***************
*** 2439,2445 ****
enddef
def Test_finish()
! let lines =<< trim END
vim9script
g:res = 'one'
if v:false | finish | endif
--- 2447,2453 ----
enddef
def Test_finish()
! var lines =<< trim END
vim9script
g:res = 'one'
if v:false | finish | endif
***************
*** 2456,2462 ****
enddef
def Test_let_func_call()
! let lines =<< trim END
vim9script
func GetValue()
if exists('g:count')
--- 2464,2470 ----
enddef
def Test_let_func_call()
! var lines =<< trim END
vim9script
func GetValue()
if exists('g:count')
***************
*** 2466,2474 ****
endif
return 'this'
endfunc
! let val: string = GetValue()
# env var is always a string
! let env = $TERM
END
writefile(lines, 'Xfinished')
source Xfinished
--- 2474,2482 ----
endif
return 'this'
endfunc
! var val: string = GetValue()
# env var is always a string
! var env = $TERM
END
writefile(lines, 'Xfinished')
source Xfinished
***************
*** 2480,2511 ****
enddef
def Test_let_missing_type()
! let lines =<< trim END
vim9script
! let var = g:unknown
END
CheckScriptFailure(lines, 'E121:')
lines =<< trim END
vim9script
! let nr: number = 123
! let var = nr
END
CheckScriptSuccess(lines)
enddef
def Test_let_declaration()
! let lines =<< trim END
vim9script
! let var: string
! g:var_uninit = var
! var = 'text'
! g:var_test = var
# prefixing s: is optional
! s:var = 'prefixed'
! g:var_prefixed = s:var
! let s:other: number
other = 1234
g:other_var = other
--- 2488,2519 ----
enddef
def Test_let_missing_type()
! var lines =<< trim END
vim9script
! var name = g:unknown
END
CheckScriptFailure(lines, 'E121:')
lines =<< trim END
vim9script
! var nr: number = 123
! var name = nr
END
CheckScriptSuccess(lines)
enddef
def Test_let_declaration()
! var lines =<< trim END
vim9script
! var name: string
! g:var_uninit = name
! name = 'text'
! g:var_test = name
# prefixing s: is optional
! s:name = 'prefixed'
! g:var_prefixed = s:name
! var s:other: number
other = 1234
g:other_var = other
***************
*** 2530,2536 ****
enddef
def Test_let_declaration_fails()
! let lines =<< trim END
vim9script
final var: string
END
--- 2538,2544 ----
enddef
def Test_let_declaration_fails()
! var lines =<< trim END
vim9script
final var: string
END
***************
*** 2544,2584 ****
lines =<< trim END
vim9script
! let 9var: string
END
CheckScriptFailure(lines, 'E475:')
enddef
def Test_let_type_check()
! let lines =<< trim END
vim9script
! let var: string
! var = 1234
END
CheckScriptFailure(lines, 'E1012:')
lines =<< trim END
vim9script
! let var:string
END
CheckScriptFailure(lines, 'E1069:')
lines =<< trim END
vim9script
! let var: asdf
END
CheckScriptFailure(lines, 'E1010:')
lines =<< trim END
vim9script
! let s:l: list<number>
s:l = []
END
CheckScriptSuccess(lines)
lines =<< trim END
vim9script
! let s:d: dict<number>
s:d = {}
END
CheckScriptSuccess(lines)
--- 2552,2592 ----
lines =<< trim END
vim9script
! var 9var: string
END
CheckScriptFailure(lines, 'E475:')
enddef
def Test_let_type_check()
! var lines =<< trim END
vim9script
! var name: string
! name = 1234
END
CheckScriptFailure(lines, 'E1012:')
lines =<< trim END
vim9script
! var name:string
END
CheckScriptFailure(lines, 'E1069:')
lines =<< trim END
vim9script
! var name: asdf
END
CheckScriptFailure(lines, 'E1010:')
lines =<< trim END
vim9script
! var s:l: list<number>
s:l = []
END
CheckScriptSuccess(lines)
lines =<< trim END
vim9script
! var s:d: dict<number>
s:d = {}
END
CheckScriptSuccess(lines)
***************
*** 2587,2614 ****
let g:dict_number = #{one: 1, two: 2}
def Test_let_list_dict_type()
! let ll: list<number>
ll = [1, 2, 2, 3, 3, 3]->uniq()
ll->assert_equal([1, 2, 3])
! let dd: dict<number>
dd = g:dict_number
dd->assert_equal(g:dict_number)
! let lines =<< trim END
! let ll: list<number>
ll = [1, 2, 3]->map('"one"')
END
CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list<number> but
got list<string>')
enddef
def Test_forward_declaration()
! let lines =<< trim END
vim9script
def GetValue(): string
return theVal
enddef
! let theVal = 'something'
g:initVal = GetValue()
theVal = 'else'
g:laterVal = GetValue()
--- 2595,2622 ----
let g:dict_number = #{one: 1, two: 2}
def Test_let_list_dict_type()
! var ll: list<number>
ll = [1, 2, 2, 3, 3, 3]->uniq()
ll->assert_equal([1, 2, 3])
! var dd: dict<number>
dd = g:dict_number
dd->assert_equal(g:dict_number)
! var lines =<< trim END
! var ll: list<number>
ll = [1, 2, 3]->map('"one"')
END
CheckDefExecFailure(lines, 'E1012: Type mismatch; expected list<number> but
got list<string>')
enddef
def Test_forward_declaration()
! var lines =<< trim END
vim9script
def GetValue(): string
return theVal
enddef
! var theVal = 'something'
g:initVal = GetValue()
theVal = 'else'
g:laterVal = GetValue()
***************
*** 2624,2630 ****
enddef
def Test_source_vim9_from_legacy()
! let legacy_lines =<< trim END
source Xvim9_script.vim
call assert_false(exists('local'))
--- 2632,2638 ----
enddef
def Test_source_vim9_from_legacy()
! var legacy_lines =<< trim END
source Xvim9_script.vim
call assert_false(exists('local'))
***************
*** 2645,2655 ****
END
writefile(legacy_lines, 'Xlegacy_script.vim')
! let vim9_lines =<< trim END
vim9script
! let local = 'local'
g:global = 'global'
! export let exported = 'exported'
export def GetText(): string
return 'text'
enddef
--- 2653,2663 ----
END
writefile(legacy_lines, 'Xlegacy_script.vim')
! var vim9_lines =<< trim END
vim9script
! var local = 'local'
g:global = 'global'
! export var exported = 'exported'
export def GetText(): string
return 'text'
enddef
***************
*** 2669,2675 ****
" check that items defined in Vim9 script are script-local, not global
let vim9lines =<< trim END
vim9script
! let var = 'local'
func TheFunc()
echo 'local'
endfunc
--- 2677,2683 ----
" check that items defined in Vim9 script are script-local, not global
let vim9lines =<< trim END
vim9script
! var name = 'local'
func TheFunc()
echo 'local'
endfunc
***************
*** 2709,2715 ****
" test using a vim9script that is auto-loaded from an autocmd
def Test_vim9_autoload()
! let lines =<< trim END
vim9script
def foo#test()
echomsg getreg('"')
--- 2717,2723 ----
" test using a vim9script that is auto-loaded from an autocmd
def Test_vim9_autoload()
! var lines =<< trim END
vim9script
def foo#test()
echomsg getreg('"')
***************
*** 2718,2724 ****
mkdir('Xdir/autoload', 'p')
writefile(lines, 'Xdir/autoload/foo.vim')
! let save_rtp = &rtp
exe 'set rtp^=' .. getcwd() .. '/Xdir'
augroup test
autocmd TextYankPost * call foo#test()
--- 2726,2732 ----
mkdir('Xdir/autoload', 'p')
writefile(lines, 'Xdir/autoload/foo.vim')
! var save_rtp = &rtp
exe 'set rtp^=' .. getcwd() .. '/Xdir'
augroup test
autocmd TextYankPost * call foo#test()
***************
*** 2735,2741 ****
" This was causing a crash because suppress_errthrow wasn't reset.
def Test_vim9_autoload_error()
! let lines =<< trim END
vim9script
def crash#func()
try
--- 2743,2749 ----
" This was causing a crash because suppress_errthrow wasn't reset.
def Test_vim9_autoload_error()
! var lines =<< trim END
vim9script
def crash#func()
try
***************
*** 2775,2781 ****
def Test_script_var_in_autocmd()
# using a script variable from an autocommand, defined in a :def function
in a
# legacy Vim script, cannot check the variable type.
! let lines =<< trim END
let s:counter = 1
def s:Func()
au! CursorHold
--- 2783,2789 ----
def Test_script_var_in_autocmd()
# using a script variable from an autocommand, defined in a :def function
in a
# legacy Vim script, cannot check the variable type.
! var lines =<< trim END
let s:counter = 1
def s:Func()
au! CursorHold
***************
*** 2793,2809 ****
# if the Vim syntax highlighting uses Vim9 constructs they can be used from
# the command line window.
mkdir('rtp/syntax', 'p')
! let export_lines =<< trim END
vim9script
! export let That = 'yes'
END
writefile(export_lines, 'rtp/syntax/Xexport.vim')
! let import_lines =<< trim END
vim9script
import That from './Xexport.vim'
END
writefile(import_lines, 'rtp/syntax/vim.vim')
! let save_rtp = &rtp
&rtp = getcwd() .. '/rtp' .. ',' .. &rtp
syntax on
augroup CmdWin
--- 2801,2817 ----
# if the Vim syntax highlighting uses Vim9 constructs they can be used from
# the command line window.
mkdir('rtp/syntax', 'p')
! var export_lines =<< trim END
vim9script
! export var That = 'yes'
END
writefile(export_lines, 'rtp/syntax/Xexport.vim')
! var import_lines =<< trim END
vim9script
import That from './Xexport.vim'
END
writefile(import_lines, 'rtp/syntax/vim.vim')
! var save_rtp = &rtp
&rtp = getcwd() .. '/rtp' .. ',' .. &rtp
syntax on
augroup CmdWin
***************
*** 2830,2838 ****
enddef
def Test_unset_any_variable()
! let lines =<< trim END
! let var: any
! assert_equal(0, var)
END
CheckDefAndScriptSuccess(lines)
enddef
--- 2838,2846 ----
enddef
def Test_unset_any_variable()
! var lines =<< trim END
! var name: any
! assert_equal(0, name)
END
CheckDefAndScriptSuccess(lines)
enddef
***************
*** 2846,2852 ****
def Run_Test_define_func_at_command_line()
# run in a separate Vim instance to avoid the script context
! let lines =<< trim END
func CheckAndQuit()
call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc')
call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd')
--- 2854,2860 ----
def Run_Test_define_func_at_command_line()
# run in a separate Vim instance to avoid the script context
! var lines =<< trim END
func CheckAndQuit()
call assert_fails('call Afunc()', 'E117: Unknown function: Bfunc')
call writefile(['errors: ' .. string(v:errors)], 'Xdidcmd')
***************
*** 2854,2860 ****
END
writefile([''], 'Xdidcmd')
writefile(lines, 'XcallFunc')
! let buf = RunVimInTerminal('-S XcallFunc', #{rows: 6})
# define Afunc() on the command line
term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
--- 2862,2868 ----
END
writefile([''], 'Xdidcmd')
writefile(lines, 'XcallFunc')
! var buf = RunVimInTerminal('-S XcallFunc', #{rows: 6})
# define Afunc() on the command line
term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
***************
*** 2874,2880 ****
bwipe!
# also when the context is Vim9 script
! let lines =<< trim END
vim9script
new
setline(1, 'something')
--- 2882,2888 ----
bwipe!
# also when the context is Vim9 script
! var lines =<< trim END
vim9script
new
setline(1, 'something')
*** ../vim-8.2.1755/src/version.c 2020-09-27 14:22:45.006688671 +0200
--- src/version.c 2020-09-27 15:10:35.323511869 +0200
***************
*** 752,753 ****
--- 752,755 ----
{ /* Add new patch number below this line */
+ /**/
+ 1756,
/**/
--
All good vision statements are created by groups of people with bloated
bladders who would rather be doing anything else.
(Scott Adams - The Dilbert principle)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202009271319.08RDJusM157829%40masaka.moolenaar.net.