Mercurial > vim
comparison src/testdir/test_vim9_assign.vim @ 23072:4b398a229b0b v8.2.2082
patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Commit: https://github.com/vim/vim/commit/e0de171ecd2ff7acd56deda2cf81f0d13a69c803
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Dec 2 17:36:54 2020 +0100
patch 8.2.2082: Vim9: can still use the depricated #{} dict syntax
Problem: Vim9: can still use the depricated #{} dict syntax.
Solution: Remove support for #{} in Vim9 script. (closes https://github.com/vim/vim/issues/7406, closes https://github.com/vim/vim/issues/7405)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 02 Dec 2020 17:45:05 +0100 |
parents | 6a70803f4cbe |
children | c713358da074 |
comparison
equal
deleted
inserted
replaced
23071:20dac5998fa6 | 23072:4b398a229b0b |
---|---|
358 | 358 |
359 def Test_extend_dict() | 359 def Test_extend_dict() |
360 var lines =<< trim END | 360 var lines =<< trim END |
361 vim9script | 361 vim9script |
362 var d: dict<number> | 362 var d: dict<number> |
363 extend(d, #{a: 1}) | 363 extend(d, {a: 1}) |
364 assert_equal(#{a: 1}, d) | 364 assert_equal({a: 1}, d) |
365 | 365 |
366 var d2: dict<number> | 366 var d2: dict<number> |
367 d2['one'] = 1 | 367 d2['one'] = 1 |
368 assert_equal(#{one: 1}, d2) | 368 assert_equal({one: 1}, d2) |
369 END | 369 END |
370 CheckScriptSuccess(lines) | 370 CheckScriptSuccess(lines) |
371 | 371 |
372 lines =<< trim END | 372 lines =<< trim END |
373 vim9script | 373 vim9script |
374 var d: dict<string> = test_null_dict() | 374 var d: dict<string> = test_null_dict() |
375 extend(d, #{a: 'x'}) | 375 extend(d, {a: 'x'}) |
376 assert_equal(#{a: 'x'}, d) | 376 assert_equal({a: 'x'}, d) |
377 END | 377 END |
378 CheckScriptSuccess(lines) | 378 CheckScriptSuccess(lines) |
379 | 379 |
380 lines =<< trim END | 380 lines =<< trim END |
381 vim9script | 381 vim9script |
382 extend(test_null_dict(), #{a: 'x'}) | 382 extend(test_null_dict(), {a: 'x'}) |
383 END | 383 END |
384 CheckScriptFailure(lines, 'E1133:', 2) | 384 CheckScriptFailure(lines, 'E1133:', 2) |
385 enddef | 385 enddef |
386 | 386 |
387 def Test_single_letter_vars() | 387 def Test_single_letter_vars() |
485 END | 485 END |
486 CheckScriptSuccess(lines) | 486 CheckScriptSuccess(lines) |
487 enddef | 487 enddef |
488 | 488 |
489 def Test_assignment_dict() | 489 def Test_assignment_dict() |
490 var dict1: dict<bool> = #{one: false, two: true} | 490 var dict1: dict<bool> = {one: false, two: true} |
491 var dict2: dict<number> = #{one: 1, two: 2} | 491 var dict2: dict<number> = {one: 1, two: 2} |
492 var dict3: dict<string> = #{key: 'value'} | 492 var dict3: dict<string> = {key: 'value'} |
493 var dict4: dict<any> = #{one: 1, two: '2'} | 493 var dict4: dict<any> = {one: 1, two: '2'} |
494 var dict5: dict<blob> = #{one: 0z01, two: 0z02} | 494 var dict5: dict<blob> = {one: 0z01, two: 0z02} |
495 | 495 |
496 # overwrite | 496 # overwrite |
497 dict3['key'] = 'another' | 497 dict3['key'] = 'another' |
498 assert_equal(dict3, #{key: 'another'}) | 498 assert_equal(dict3, {key: 'another'}) |
499 dict3.key = 'yet another' | 499 dict3.key = 'yet another' |
500 assert_equal(dict3, #{key: 'yet another'}) | 500 assert_equal(dict3, {key: 'yet another'}) |
501 | 501 |
502 var lines =<< trim END | 502 var lines =<< trim END |
503 var dd = #{one: 1} | 503 var dd = {one: 1} |
504 dd.one) = 2 | 504 dd.one) = 2 |
505 END | 505 END |
506 CheckDefFailure(lines, 'E15:', 2) | 506 CheckDefFailure(lines, 'E15:', 2) |
507 | 507 |
508 # empty key can be used | 508 # empty key can be used |
509 var dd = {} | 509 var dd = {} |
510 dd[""] = 6 | 510 dd[""] = 6 |
511 assert_equal({'': 6}, dd) | 511 assert_equal({['']: 6}, dd) |
512 | 512 |
513 # type becomes dict<any> | 513 # type becomes dict<any> |
514 var somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'} | 514 var somedict = rand() > 0 ? {a: 1, b: 2} : {a: 'a', b: 'b'} |
515 | 515 |
516 # assignment to script-local dict | 516 # assignment to script-local dict |
517 lines =<< trim END | 517 lines =<< trim END |
518 vim9script | 518 vim9script |
519 var test: dict<any> = {} | 519 var test: dict<any> = {} |
520 def FillDict(): dict<any> | 520 def FillDict(): dict<any> |
521 test['a'] = 43 | 521 test['a'] = 43 |
522 return test | 522 return test |
523 enddef | 523 enddef |
524 assert_equal(#{a: 43}, FillDict()) | 524 assert_equal({a: 43}, FillDict()) |
525 END | 525 END |
526 CheckScriptSuccess(lines) | 526 CheckScriptSuccess(lines) |
527 | 527 |
528 lines =<< trim END | 528 lines =<< trim END |
529 vim9script | 529 vim9script |
542 g:test = {} | 542 g:test = {} |
543 def FillDict(): dict<any> | 543 def FillDict(): dict<any> |
544 g:test['a'] = 43 | 544 g:test['a'] = 43 |
545 return g:test | 545 return g:test |
546 enddef | 546 enddef |
547 assert_equal(#{a: 43}, FillDict()) | 547 assert_equal({a: 43}, FillDict()) |
548 END | 548 END |
549 CheckScriptSuccess(lines) | 549 CheckScriptSuccess(lines) |
550 | 550 |
551 # assignment to buffer dict | 551 # assignment to buffer dict |
552 lines =<< trim END | 552 lines =<< trim END |
554 b:test = {} | 554 b:test = {} |
555 def FillDict(): dict<any> | 555 def FillDict(): dict<any> |
556 b:test['a'] = 43 | 556 b:test['a'] = 43 |
557 return b:test | 557 return b:test |
558 enddef | 558 enddef |
559 assert_equal(#{a: 43}, FillDict()) | 559 assert_equal({a: 43}, FillDict()) |
560 END | 560 END |
561 CheckScriptSuccess(lines) | 561 CheckScriptSuccess(lines) |
562 enddef | 562 enddef |
563 | 563 |
564 def Test_assignment_local() | 564 def Test_assignment_local() |
634 var thechannel: channel | 634 var thechannel: channel |
635 assert_equal(test_null_channel(), thechannel) | 635 assert_equal(test_null_channel(), thechannel) |
636 | 636 |
637 if has('unix') && executable('cat') | 637 if has('unix') && executable('cat') |
638 # check with non-null job and channel, types must match | 638 # check with non-null job and channel, types must match |
639 thejob = job_start("cat ", #{}) | 639 thejob = job_start("cat ", {}) |
640 thechannel = job_getchannel(thejob) | 640 thechannel = job_getchannel(thejob) |
641 job_stop(thejob, 'kill') | 641 job_stop(thejob, 'kill') |
642 endif | 642 endif |
643 endif | 643 endif |
644 | 644 |
825 CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') | 825 CheckScriptFailure(['vim9script', 'def Func()', 'var dummy = s:notfound', 'enddef', 'defcompile'], 'E1108:') |
826 | 826 |
827 CheckDefFailure(['var name: list<string> = [123]'], 'expected list<string> but got list<number>') | 827 CheckDefFailure(['var name: list<string> = [123]'], 'expected list<string> but got list<number>') |
828 CheckDefFailure(['var name: list<number> = ["xx"]'], 'expected list<number> but got list<string>') | 828 CheckDefFailure(['var name: list<number> = ["xx"]'], 'expected list<number> but got list<string>') |
829 | 829 |
830 CheckDefFailure(['var name: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>') | 830 CheckDefFailure(['var name: dict<string> = {key: 123}'], 'expected dict<string> but got dict<number>') |
831 CheckDefFailure(['var name: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>') | 831 CheckDefFailure(['var name: dict<number> = {key: "xx"}'], 'expected dict<number> but got dict<string>') |
832 | 832 |
833 CheckDefFailure(['var name = feedkeys("0")'], 'E1031:') | 833 CheckDefFailure(['var name = feedkeys("0")'], 'E1031:') |
834 CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void') | 834 CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void') |
835 | 835 |
836 CheckDefFailure(['var name: dict <number>'], 'E1068:') | 836 CheckDefFailure(['var name: dict <number>'], 'E1068:') |
881 | 881 |
882 var nrd: dict<number> = {} | 882 var nrd: dict<number> = {} |
883 for i in range(3) | 883 for i in range(3) |
884 nrd[i] = i | 884 nrd[i] = i |
885 endfor | 885 endfor |
886 assert_equal({'0': 0, '1': 1, '2': 2}, nrd) | 886 assert_equal({0: 0, 1: 1, 2: 2}, nrd) |
887 | 887 |
888 CheckDefFailure(["var d: dict<number> = #{a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1) | 888 CheckDefFailure(["var d: dict<number> = {a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1) |
889 CheckDefFailure(["var d: dict<dict<number>> = #{x: #{a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1) | 889 CheckDefFailure(["var d: dict<dict<number>> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1) |
890 enddef | 890 enddef |
891 | 891 |
892 def Test_assign_dict_unknown_type() | 892 def Test_assign_dict_unknown_type() |
893 var lines =<< trim END | 893 var lines =<< trim END |
894 vim9script | 894 vim9script |
895 var mylist = [] | 895 var mylist = [] |
896 mylist += [#{one: 'one'}] | 896 mylist += [{one: 'one'}] |
897 def Func() | 897 def Func() |
898 var dd = mylist[0] | 898 var dd = mylist[0] |
899 assert_equal('one', dd.one) | 899 assert_equal('one', dd.one) |
900 enddef | 900 enddef |
901 Func() | 901 Func() |
903 CheckScriptSuccess(lines) | 903 CheckScriptSuccess(lines) |
904 | 904 |
905 lines =<< trim END | 905 lines =<< trim END |
906 vim9script | 906 vim9script |
907 var mylist = [[]] | 907 var mylist = [[]] |
908 mylist[0] += [#{one: 'one'}] | 908 mylist[0] += [{one: 'one'}] |
909 def Func() | 909 def Func() |
910 var dd = mylist[0][0] | 910 var dd = mylist[0][0] |
911 assert_equal('one', dd.one) | 911 assert_equal('one', dd.one) |
912 enddef | 912 enddef |
913 Func() | 913 Func() |
1008 var s:other: number | 1008 var s:other: number |
1009 other = 1234 | 1009 other = 1234 |
1010 g:other_var = other | 1010 g:other_var = other |
1011 | 1011 |
1012 # type is inferred | 1012 # type is inferred |
1013 s:dict = {'a': 222} | 1013 s:dict = {['a']: 222} |
1014 def GetDictVal(key: any) | 1014 def GetDictVal(key: any) |
1015 g:dict_val = s:dict[key] | 1015 g:dict_val = s:dict[key] |
1016 enddef | 1016 enddef |
1017 GetDictVal('a') | 1017 GetDictVal('a') |
1018 END | 1018 END |