From 0b8205484b703b4a5a569cd1b0ed876bbb13901f Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 27 Feb 2025 19:17:33 +0100 Subject: [PATCH] runtime(lua): Improve 'include' and make '*expr' functions script-local - Prevent 'include' from matching variable assignments as calls to require() and others. - Use script-local functions for 'includeexpr' and 'foldexpr'. - Formatting fixes. closes: #16746 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/ftplugin/lua.vim | 67 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim index 9687d55e9f..cc042c5dc4 100644 --- a/runtime/ftplugin/lua.vim +++ b/runtime/ftplugin/lua.vim @@ -6,7 +6,7 @@ " C.D. MacEachern " Tyler Miller " Phạm Bình An -" Last Change: 2025 Feb 25 +" Last Change: 2025 Feb 27 if exists("b:did_ftplugin") finish @@ -32,11 +32,11 @@ setlocal formatoptions-=t formatoptions+=croql let &l:define = '\= 5.03 ? [fname .. ".lua", fname .. "/init.lua"] : [fname .. ".lua"] + for path in paths + if filereadable(path) + return path + endif + endfor + return fname +endfunction + let s:patterns = [ \ ['do', 'end'], \ ['if\s+.+\s+then', 'end'], @@ -86,47 +97,35 @@ let s:patterns = [ \ ['local\s+function\s+.+', 'end'], \ ] -function LuaInclude(fname) abort - let lua_ver = str2float(printf("%d.%02d", g:lua_version, g:lua_subversion)) - let fname = tr(a:fname, '.', '/') - let paths = lua_ver >= 5.03 ? [ fname.'.lua', fname.'/init.lua' ] : [ fname.'.lua' ] - for path in paths - if filereadable(path) - return path - endif - endfor - return fname -endfunction - -function LuaFold(lnum) abort +function s:LuaFold(lnum) abort if b:lua_lasttick == b:changedtick - return b:lua_foldlists[a:lnum-1] + return b:lua_foldlists[a:lnum - 1] endif let b:lua_lasttick = b:changedtick let b:lua_foldlists = [] let foldlist = [] - let buf = getline(1, '$') + let buf = getline(1, "$") for line in buf for t in s:patterns - let tagopen = '\v^\s*'..t[0]..'\s*$' - let tagclose = '\v^\s*'..t[1]..'\s*$' + let tagopen = '\v^\s*' .. t[0] ..'\s*$' + let tagclose = '\v^\s*' .. t[1] ..'\s*$' if line =~# tagopen - call add(foldlist, t) - break + call add(foldlist, t) + break elseif line =~# tagclose - if len(foldlist) > 0 && line =~# foldlist[-1][1] - call remove(foldlist, -1) - else - let foldlist = [] - endif - break + if len(foldlist) > 0 && line =~# foldlist[-1][1] + call remove(foldlist, -1) + else + let foldlist = [] + endif + break endif endfor call add(b:lua_foldlists, len(foldlist)) endfor - return lua_foldlists[a:lnum-1] + return lua_foldlists[a:lnum - 1] endfunction let &cpo = s:cpo_save