Mercurial > vim
diff src/testdir/test_vim9_script.vim @ 26980:8796f1384750 v8.2.4019
patch 8.2.4019: Vim9: import mechanism is too complicated
Commit: https://github.com/vim/vim/commit/d5f400c607182db6d4fbe2964471d796277f67e8
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jan 6 21:10:28 2022 +0000
patch 8.2.4019: Vim9: import mechanism is too complicated
Problem: Vim9: import mechanism is too complicated.
Solution: Do not use the Javascript mechanism but a much simpler one.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 06 Jan 2022 22:15:04 +0100 |
parents | be85735650f7 |
children | 4b8d836db103 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -1172,47 +1172,43 @@ def Undo_export_script_lines() enddef def Test_vim9_import_export() + writefile(s:export_script_lines, 'Xexport.vim') var import_script_lines =<< trim END vim9script - import {exported, Exported, ExportedValue} from './Xexport.vim' - g:exported1 = exported - exported += 3 - g:exported2 = exported - g:exported3 = ExportedValue() - - import ExportedInc from './Xexport.vim' - ExportedInc() - g:exported_i1 = exported - g:exported_i2 = ExportedValue() - - exported = 11 - g:exported_s1 = exported - g:exported_s2 = ExportedValue() - - g:imported_func = Exported() + var dir = './' + var ext = ".vim" + import dir .. 'Xexport' .. ext as expo + + g:exported1 = expo.exported + expo.exported += 3 + g:exported2 = expo.exported + g:exported3 = expo.ExportedValue() + + expo.ExportedInc() + g:exported_i1 = expo.exported + g:exported_i2 = expo.ExportedValue() + + expo.exported = 11 + g:exported_s1 = expo.exported + g:exported_s2 = expo.ExportedValue() + + g:imported_func = expo.Exported() def GetExported(): string - var local_dict = {ref: Exported} + var local_dict = {ref: expo.Exported} return local_dict.ref() enddef g:funcref_result = GetExported() - var dir = './' - var ext = ".vim" - import {exp_name} from dir .. 'Xexport' .. ext - g:imported_name = exp_name - exp_name ..= ' Doe' - g:imported_name_appended = exp_name - g:exported_later = exported - - import theList from './Xexport.vim' - theList->add(2) - assert_equal([1, 2], theList) + g:imported_name = expo.exp_name + expo.exp_name ..= ' Doe' + g:imported_name_appended = expo.exp_name + g:exported_later = expo.exported + + expo.theList->add(2) + assert_equal([1, 2], expo.theList) END - writefile(import_script_lines, 'Ximport.vim') - writefile(s:export_script_lines, 'Xexport.vim') - source Ximport.vim assert_equal('bobbie', g:result) @@ -1248,16 +1244,12 @@ def Test_vim9_import_export() # similar, with line breaks var import_line_break_script_lines =<< trim END vim9script - import { - exported, - Exported, - } - from - './Xexport.vim' - g:exported = exported - exported += 7 - g:exported_added = exported - g:imported_func = Exported() + import './Xexport.vim' + as expo + g:exported = expo.exported + expo.exported += 7 + g:exported_added = expo.exported + g:imported_func = expo.Exported() END writefile(import_line_break_script_lines, 'Ximport_lbr.vim') source Ximport_lbr.vim @@ -1275,7 +1267,7 @@ def Test_vim9_import_export() var import_star_as_lines =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export def UseExport() g:exported_def = Export.exported enddef @@ -1294,7 +1286,7 @@ def Test_vim9_import_export() var import_star_as_lines_no_dot =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export def Func() var dummy = 1 var imported = Export + dummy @@ -1306,7 +1298,7 @@ def Test_vim9_import_export() var import_star_as_lines_dot_space =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export def Func() var imported = Export . exported enddef @@ -1317,8 +1309,8 @@ def Test_vim9_import_export() var import_func_duplicated =<< trim END vim9script - import ExportedInc from './Xexport.vim' - import ExportedInc from './Xexport.vim' + import './Xexport.vim' as expo + import './Xexport.vim' as expo ExportedInc() END @@ -1327,9 +1319,9 @@ def Test_vim9_import_export() var import_star_as_duplicated =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export var some = 'other' - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export defcompile END writefile(import_star_as_duplicated, 'Ximport.vim') @@ -1337,7 +1329,7 @@ def Test_vim9_import_export() var import_star_as_lines_script_no_dot =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export g:imported_script = Export exported END writefile(import_star_as_lines_script_no_dot, 'Ximport.vim') @@ -1345,7 +1337,7 @@ def Test_vim9_import_export() var import_star_as_lines_script_space_after_dot =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export g:imported_script = Export. exported END writefile(import_star_as_lines_script_space_after_dot, 'Ximport.vim') @@ -1353,7 +1345,7 @@ def Test_vim9_import_export() var import_star_as_lines_missing_name =<< trim END vim9script - import * as Export from './Xexport.vim' + import './Xexport.vim' as Export def Func() var imported = Export. enddef @@ -1364,10 +1356,8 @@ def Test_vim9_import_export() var import_star_as_lbr_lines =<< trim END vim9script - import * + import './Xexport.vim' as Export - from - './Xexport.vim' def UseExport() g:exported = Export.exported enddef @@ -1378,44 +1368,20 @@ def Test_vim9_import_export() assert_equal(18, g:exported) unlet g:exported - var import_star_lines =<< trim END - vim9script - import * from './Xexport.vim' - END - writefile(import_star_lines, 'Ximport.vim') - assert_fails('source Ximport.vim', 'E1045:', '', 2, 'Ximport.vim') - - # try to import something that exists but is not exported + # try to use something that exists but is not exported var import_not_exported_lines =<< trim END vim9script - import name from './Xexport.vim' + import './Xexport.vim' as expo + echo expo.name END writefile(import_not_exported_lines, 'Ximport.vim') - assert_fails('source Ximport.vim', 'E1049:', '', 2, 'Ximport.vim') + assert_fails('source Ximport.vim', 'E1049:', '', 3, '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') - assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') - - # 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') - assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') - - # try to import something that is already defined - import_already_defined =<< trim END - vim9script - var exported = 'something' - import {exported} from './Xexport.vim' + import './Xexport.vim' as exported END writefile(import_already_defined, 'Ximport.vim') assert_fails('source Ximport.vim', 'E1054:', '', 3, 'Ximport.vim') @@ -1423,9 +1389,9 @@ def Test_vim9_import_export() # try changing an imported const var import_assign_to_const =<< trim END vim9script - import CONST from './Xexport.vim' + import './Xexport.vim' as expo def Assign() - CONST = 987 + expo.CONST = 987 enddef defcompile END @@ -1435,54 +1401,39 @@ def Test_vim9_import_export() # try changing an imported final var import_assign_to_final =<< trim END vim9script - import theList from './Xexport.vim' + import './Xexport.vim' as expo def Assign() - theList = [2] + expo.theList = [2] enddef defcompile END writefile(import_assign_to_final, 'Ximport.vim') assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') - # import a very long name, requires making a copy - var import_long_name_lines =<< trim END + var import_no_as_lines =<< trim END vim9script - import name012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 from './Xexport.vim' + import './Xexport.vim' name 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') + writefile(import_no_as_lines, 'Ximport.vim') + assert_fails('source Ximport.vim', 'E488:', '', 2, 'Ximport.vim') var import_invalid_string_lines =<< trim END vim9script - import name from Xexport.vim + import Xexport.vim END writefile(import_invalid_string_lines, 'Ximport.vim') assert_fails('source Ximport.vim', 'E121:', '', 2, 'Ximport.vim') var import_wrong_name_lines =<< trim END vim9script - import name from './XnoExport.vim' + import './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 - writefile(import_missing_comma_lines, 'Ximport3.vim') - assert_fails('source Ximport3.vim', 'E1046:', '', 2, 'Ximport3.vim') - var import_redefining_lines =<< trim END vim9script - import exported from './Xexport.vim' + import './Xexport.vim' as exported var exported = 5 END writefile(import_redefining_lines, 'Ximport.vim') @@ -1490,19 +1441,19 @@ def Test_vim9_import_export() var import_assign_wrong_type_lines =<< trim END vim9script - import exported from './Xexport.vim' - exported = 'xxx' + import './Xexport.vim' as expo + expo.exported = 'xxx' END writefile(import_assign_wrong_type_lines, 'Ximport.vim') assert_fails('source Ximport.vim', 'E1012: Type mismatch; expected number but got string', '', 3) var import_assign_const_lines =<< trim END vim9script - import CONST from './Xexport.vim' - CONST = 4321 + import './Xexport.vim' as expo + expo.CONST = 4321 END writefile(import_assign_const_lines, 'Ximport.vim') - assert_fails('source Ximport.vim', 'E741: Value is locked: CONST', '', 3) + assert_fails('source Ximport.vim', 'E46: Cannot change read-only variable "CONST"', '', 3) delete('Ximport.vim') delete('Ximport3.vim') @@ -1541,12 +1492,12 @@ def Test_import_funcref() lines =<< trim END vim9script - import {G} from './Xlib.vim' - const Foo = G() + import './Xlib.vim' as lib + const Foo = lib.G() assert_equal(42, Foo) def DoTest() - const Goo = G() + const Goo = lib.G() assert_equal(42, Goo) enddef DoTest() @@ -1559,30 +1510,30 @@ enddef def Test_import_star_fails() writefile([], 'Xfoo.vim') var lines =<< trim END - import * as foo from './Xfoo.vim' + import './Xfoo.vim' as foo foo = 'bar' END CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use foo itself']) lines =<< trim END vim9script - import * as foo from './Xfoo.vim' + import './Xfoo.vim' as foo var that = foo END CheckScriptFailure(lines, 'E1029: Expected ''.''') lines =<< trim END vim9script - import * as 9foo from './Xfoo.vim' + import './Xfoo.vim' as 9foo END CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script - import * as the#foo from './Xfoo.vim' + import './Xfoo.vim' as the#foo END CheckScriptFailure(lines, 'E1047:') lines =<< trim END vim9script - import * as g:foo from './Xfoo.vim' + import './Xfoo.vim' as g:foo END CheckScriptFailure(lines, 'E1047:') @@ -1597,53 +1548,13 @@ def Test_import_star_fails() END writefile([], 'Xthat.vim') lines =<< trim END - import * as That from './Xthat.vim' + import './Xthat.vim' as That That() END CheckDefAndScriptFailure(lines, ['E1094:', 'E1236: Cannot use That itself']) delete('Xthat.vim') enddef -def Test_import_as() - var export_lines =<< trim END - vim9script - export var one = 1 - export var yes = 'yes' - export var slist: list<string> - END - writefile(export_lines, 'XexportAs') - - var import_lines =<< trim END - vim9script - var one = 'notused' - var yes = 777 - import one as thatOne from './XexportAs' - assert_equal(1, thatOne) - import yes as yesYes from './XexportAs' - assert_equal('yes', yesYes) - END - CheckScriptSuccess(import_lines) - - import_lines =<< trim END - vim9script - import {one as thatOne, yes as yesYes} from './XexportAs' - assert_equal(1, thatOne) - assert_equal('yes', yesYes) - assert_fails('echo one', 'E121:') - assert_fails('echo yes', 'E121:') - END - CheckScriptSuccess(import_lines) - - import_lines =<< trim END - vim9script - import {slist as impSlist} from './XexportAs' - impSlist->add(123) - END - CheckScriptFailure(import_lines, 'E1012: Type mismatch; expected string but got number') - - delete('XexportAs') -enddef - func g:Trigger() source Ximport.vim return "echo 'yes'\<CR>" @@ -1661,8 +1572,8 @@ def Test_import_export_expr_map() var import_lines =<< trim END vim9script - import That from './Xexport_that.vim' - assert_equal('yes', That()) + import './Xexport_that.vim' as that + assert_equal('yes', that.That()) END writefile(import_lines, 'Ximport.vim') @@ -1685,8 +1596,8 @@ def Test_import_in_filetype() var import_lines =<< trim END vim9script - import That from './Xexport_ft.vim' - assert_equal('yes', That) + import './Xexport_ft.vim' as ft + assert_equal('yes', ft.That) g:did_load_mytpe = 1 END writefile(import_lines, 'ftplugin/qf.vim') @@ -1704,30 +1615,32 @@ def Test_import_in_filetype() &rtp = save_rtp enddef -def Test_use_import_in_mapping() - var lines =<< trim END - vim9script - export def Funcx() - g:result = 42 - enddef - END - writefile(lines, 'XsomeExport.vim') - lines =<< trim END - vim9script - import Funcx from './XsomeExport.vim' - nnoremap <F3> :call <sid>Funcx()<cr> - END - writefile(lines, 'Xmapscript.vim') - - source Xmapscript.vim - feedkeys("\<F3>", "xt") - assert_equal(42, g:result) - - unlet g:result - delete('XsomeExport.vim') - delete('Xmapscript.vim') - nunmap <F3> -enddef +" FIXME +"def Test_use_import_in_mapping() +" var lines =<< trim END +" vim9script +" export def Funcx() +" g:result = 42 +" enddef +" END +" writefile(lines, 'XsomeExport.vim') +" lines =<< trim END +" vim9script +" import './XsomeExport.vim' as some +" var Funcy = some.Funcx +" nnoremap <F3> :call <sid>Funcy()<cr> +" END +" writefile(lines, 'Xmapscript.vim') +" +" source Xmapscript.vim +" feedkeys("\<F3>", "xt") +" assert_equal(42, g:result) +" +" unlet g:result +" delete('XsomeExport.vim') +" delete('Xmapscript.vim') +" nunmap <F3> +"enddef def Test_vim9script_mix() var lines =<< trim END @@ -1754,7 +1667,6 @@ 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:') @@ -1802,14 +1714,13 @@ def Test_vim9script_reload_noclear() vim9script noclear g:loadCount += 1 var s:reloaded = 'init' - import exported from './XExportReload' + import './XExportReload' as exp def Again(): string return 'again' enddef - import TheFunc from './XExportReload' - TheFunc() + exp.TheFunc() if exists('s:loaded') | finish | endif var s:loaded = true @@ -1817,7 +1728,7 @@ def Test_vim9script_reload_noclear() var s:notReloaded = 'yes' s:reloaded = 'first' def g:Values(): list<string> - return [s:reloaded, s:notReloaded, Again(), Once(), exported] + return [s:reloaded, s:notReloaded, Again(), Once(), exp.exported] enddef def Once(): string @@ -2022,14 +1933,14 @@ def Test_vim9script_funcref() var lines =<< trim END vim9script - import FastSort from './Xsort.vim' + import './Xsort.vim' def Test() - g:result = FastSort() + g:result = Xsort.FastSort() enddef Test() # using a function imported with "as" - import * as anAlias from './Xsort.vim' + import './Xsort.vim' as anAlias assert_equal('yes', anAlias.GetString('yes')) # using the function from a compiled function @@ -2075,13 +1986,13 @@ def Test_vim9script_funcref_other_script var lines =<< trim END vim9script - import {FilterFunc, FastFilter, FastFilterDirect} from './Xfilter.vim' + import './Xfilter.vim' as filter def Test() - var x: list<number> = FastFilter() + var x: list<number> = filter.FastFilter() enddef Test() def TestDirect() - var x: list<number> = FastFilterDirect() + var x: list<number> = filter.FastFilterDirect() enddef TestDirect() END @@ -2155,11 +2066,11 @@ enddef def Test_import_absolute() var import_lines = [ 'vim9script', - 'import exported from "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim"', + 'import "' .. escape(getcwd(), '\') .. '/Xexport_abs.vim" as abs', 'def UseExported()', - ' g:imported_abs = exported', - ' exported = 8888', - ' g:imported_after = exported', + ' g:imported_abs = abs.exported', + ' abs.exported = 8888', + ' g:imported_after = abs.exported', 'enddef', 'UseExported()', 'g:import_disassembled = execute("disass UseExported")', @@ -2172,13 +2083,13 @@ def Test_import_absolute() assert_equal(9876, g:imported_abs) assert_equal(8888, g:imported_after) assert_match('<SNR>\d\+_UseExported\_s*' .. - 'g:imported_abs = exported\_s*' .. + 'g:imported_abs = abs.exported\_s*' .. '0 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. '1 STOREG g:imported_abs\_s*' .. - 'exported = 8888\_s*' .. + 'abs.exported = 8888\_s*' .. '2 PUSHNR 8888\_s*' .. '3 STORESCRIPT exported-2 in .*Xexport_abs.vim\_s*' .. - 'g:imported_after = exported\_s*' .. + 'g:imported_after = abs.exported\_s*' .. '4 LOADSCRIPT exported-2 from .*Xexport_abs.vim\_s*' .. '5 STOREG g:imported_after', g:import_disassembled) @@ -2194,8 +2105,8 @@ enddef def Test_import_rtp() var import_lines = [ 'vim9script', - 'import exported from "Xexport_rtp.vim"', - 'g:imported_rtp = exported', + 'import "Xexport_rtp.vim" as rtp', + 'g:imported_rtp = rtp.exported', ] writefile(import_lines, 'Ximport_rtp.vim') mkdir('import', 'p') @@ -2225,9 +2136,9 @@ def Test_import_compile_error() var import_lines = [ 'vim9script', - 'import ExpFunc from "./Xexported.vim"', + 'import "./Xexported.vim" as expo', 'def ImpFunc()', - ' echo ExpFunc()', + ' echo expo.ExpFunc()', 'enddef', 'defcompile', ] @@ -2279,16 +2190,16 @@ def Test_func_overrules_import_fails() var lines =<< trim END vim9script - import Func from './XexportedFunc.vim' + import './XexportedFunc.vim' as Func def Func() echo 'local to function' enddef END - CheckScriptFailure(lines, 'E1041:') + CheckScriptFailure(lines, 'E1236:') lines =<< trim END vim9script - import Func from './XexportedFunc.vim' + import './XexportedFunc.vim' as Func def Outer() def Func() echo 'local to function' @@ -2296,7 +2207,7 @@ def Test_func_overrules_import_fails() enddef defcompile END - CheckScriptFailure(lines, 'E1073:') + CheckScriptFailure(lines, 'E1236:') delete('XexportedFunc.vim') enddef @@ -3941,15 +3852,15 @@ def Test_source_vim9_from_legacy() call assert_equal('global', global) call assert_equal('global', g:global) - " imported variable becomes script-local - import exported from './Xvim9_script.vim' - call assert_equal('exported', s:exported) - call assert_false(exists('exported')) - - " imported function becomes script-local - import GetText from './Xvim9_script.vim' - call assert_equal('text', s:GetText()) - call assert_false(exists('*GetText')) + "" imported variable becomes script-local + "import exported from './Xvim9_script.vim' + "call assert_equal('exported', s:exported) + "call assert_false(exists('exported')) + + "" imported function becomes script-local + "import GetText from './Xvim9_script.vim' + "call assert_equal('text', s:GetText()) + "call assert_false(exists('*GetText')) END writefile(legacy_lines, 'Xlegacy_script.vim') @@ -4248,7 +4159,8 @@ def Test_cmdline_win() writefile(export_lines, 'rtp/syntax/Xexport.vim') var import_lines =<< trim END vim9script - import That from './Xexport.vim' + import './Xexport.vim' as exp + echo exp.That END writefile(import_lines, 'rtp/syntax/vim.vim') var save_rtp = &rtp @@ -4594,36 +4506,36 @@ def Test_script_var_gone_when_sourced_tw unlet g:guard enddef -def Test_import_gone_when_sourced_twice() - var exportlines =<< trim END - vim9script - if exists('g:guard') - finish - endif - g:guard = 1 - export var name = 'someName' - END - writefile(exportlines, 'XexportScript.vim') - - var lines =<< trim END - vim9script - import name from './XexportScript.vim' - def g:GetName(): string - return name - enddef - END - writefile(lines, 'XscriptImport.vim') - so XscriptImport.vim - assert_equal('someName', g:GetName()) - - so XexportScript.vim - assert_fails('call g:GetName()', 'E1149:') - - delfunc g:GetName - delete('XexportScript.vim') - delete('XscriptImport.vim') - unlet g:guard -enddef +"def Test_import_gone_when_sourced_twice() +" var exportlines =<< trim END +" vim9script +" if exists('g:guard') +" finish +" endif +" g:guard = 1 +" export var name = 'someName' +" END +" writefile(exportlines, 'XexportScript.vim') +" +" var lines =<< trim END +" vim9script +" import name from './XexportScript.vim' +" def g:GetName(): string +" return name +" enddef +" END +" writefile(lines, 'XscriptImport.vim') +" so XscriptImport.vim +" assert_equal('someName', g:GetName()) +" +" so XexportScript.vim +" assert_fails('call g:GetName()', 'E1149:') +" +" delfunc g:GetName +" delete('XexportScript.vim') +" delete('XscriptImport.vim') +" unlet g:guard +"enddef def Test_unsupported_commands() var lines =<< trim END