neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit a0adc51dacb766df12599b9846a64df955b55d50
parent 558e4191f049662065984677a9c7cdbb1518092a
Author: bfredl <bjorn.linse@gmail.com>
Date:   Fri, 21 Apr 2023 17:28:52 +0200

Merge pull request #23250 from bfredl/vimvim

refactor(build): move the last generator from scripts/ to src/nvim/generators
Diffstat:
Mruntime/CMakeLists.txt | 5++---
Dscripts/genvimvim.lua | 158-------------------------------------------------------------------------------
Asrc/nvim/generators/gen_vimvim.lua | 148+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 150 insertions(+), 161 deletions(-)

diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt @@ -1,4 +1,4 @@ -set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genvimvim.lua) +set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/src/nvim/generators/gen_vimvim.lua) set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime) set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim) set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags) @@ -13,8 +13,7 @@ get_directory_property(LUA_GEN DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITI get_directory_property(LUA_GEN_DEPS DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITION LUA_GEN_DEPS) add_custom_command(OUTPUT ${GENERATED_SYN_VIM} - COMMAND ${LUA_GEN} ${SYN_VIM_GENERATOR} - ${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_SYN_VIM} ${FUNCS_DATA} + COMMAND ${LUA_GEN} ${SYN_VIM_GENERATOR} ${GENERATED_SYN_VIM} ${FUNCS_DATA} DEPENDS ${LUA_GEN_DEPS} ${SYN_VIM_GENERATOR} diff --git a/scripts/genvimvim.lua b/scripts/genvimvim.lua @@ -1,158 +0,0 @@ -local mpack = vim.mpack - -if arg[1] == '--help' then - print('Usage: lua genvimvim.lua src/nvim runtime/syntax/vim/generated.vim') - os.exit(0) -end - -local nvimsrcdir = arg[1] -local syntax_file = arg[2] -local funcs_file = arg[3] - -package.path = nvimsrcdir .. '/?.lua;' .. package.path - -_G.vim = loadfile(nvimsrcdir..'/../../runtime/lua/vim/shared.lua')() - -local lld = {} -local syn_fd = io.open(syntax_file, 'w') -lld.line_length = 0 -local function w(s) - syn_fd:write(s) - if s:find('\n') then - lld.line_length = #(s:gsub('.*\n', '')) - else - lld.line_length = lld.line_length + #s - end -end - -local options = require('options') -local auevents = require('auevents') -local ex_cmds = require('ex_cmds') - -local function cmd_kw(prev_cmd, cmd) - if not prev_cmd then - return cmd:sub(1, 1) .. '[' .. cmd:sub(2) .. ']' - else - local shift = 1 - while cmd:sub(shift, shift) == prev_cmd:sub(shift, shift) do - shift = shift + 1 - end - if cmd:sub(1, shift) == 'def' then - shift = shift + 1 - end - if shift >= #cmd then - return cmd - else - return cmd:sub(1, shift) .. '[' .. cmd:sub(shift + 1) .. ']' - end - end -end - --- Exclude these from the vimCommand keyword list, they are handled specially --- in syntax/vim.vim (vimAugroupKey, vimAutoCmd, vimGlobal, vimSubst). #9327 -local function is_special_cased_cmd(cmd) - return (cmd == 'augroup' - or cmd == 'autocmd' - or cmd == 'doautocmd' - or cmd == 'doautoall' - or cmd == 'global' - or cmd == 'substitute') -end - -local vimcmd_start = 'syn keyword vimCommand contained ' -w(vimcmd_start) -local prev_cmd = nil -for _, cmd_desc in ipairs(ex_cmds.cmds) do - if lld.line_length > 850 then - w('\n' .. vimcmd_start) - end - local cmd = cmd_desc.command - if cmd:match('%w') and cmd ~= 'z' and not is_special_cased_cmd(cmd) then - w(' ' .. cmd_kw(prev_cmd, cmd)) - end - if cmd == 'delete' then - -- Add special abbreviations of :delete - w(' ' .. cmd_kw('d', 'dl')) - w(' ' .. cmd_kw('del', 'dell')) - w(' ' .. cmd_kw('dele', 'delel')) - w(' ' .. cmd_kw('delet', 'deletl')) - w(' ' .. cmd_kw('delete', 'deletel')) - w(' ' .. cmd_kw('d', 'dp')) - w(' ' .. cmd_kw('de', 'dep')) - w(' ' .. cmd_kw('del', 'delp')) - w(' ' .. cmd_kw('dele', 'delep')) - w(' ' .. cmd_kw('delet', 'deletp')) - w(' ' .. cmd_kw('delete', 'deletep')) - end - prev_cmd = cmd -end - -local vimopt_start = 'syn keyword vimOption contained ' -w('\n\n' .. vimopt_start) - -for _, opt_desc in ipairs(options.options) do - if not opt_desc.varname or opt_desc.varname:sub(1, 7) ~= 'p_force' then - if lld.line_length > 850 then - w('\n' .. vimopt_start) - end - w(' ' .. opt_desc.full_name) - if opt_desc.abbreviation then - w(' ' .. opt_desc.abbreviation) - end - if opt_desc.type == 'bool' then - w(' inv' .. opt_desc.full_name) - w(' no' .. opt_desc.full_name) - if opt_desc.abbreviation then - w(' inv' .. opt_desc.abbreviation) - w(' no' .. opt_desc.abbreviation) - end - end - end -end - -w('\n\nsyn case ignore') -local vimau_start = 'syn keyword vimAutoEvent contained ' -w('\n\n' .. vimau_start) - -for _, au in ipairs(auevents.events) do - if not auevents.nvim_specific[au] then - if lld.line_length > 850 then - w('\n' .. vimau_start) - end - w(' ' .. au) - end -end -for au, _ in pairs(auevents.aliases) do - if not auevents.nvim_specific[au] then - if lld.line_length > 850 then - w('\n' .. vimau_start) - end - w(' ' .. au) - end -end - -local nvimau_start = 'syn keyword nvimAutoEvent contained ' -w('\n\n' .. nvimau_start) - -for au, _ in vim.spairs(auevents.nvim_specific) do - if lld.line_length > 850 then - w('\n' .. nvimau_start) - end - w(' ' .. au) -end - -w('\n\nsyn case match') -local vimfun_start = 'syn keyword vimFuncName contained ' -w('\n\n' .. vimfun_start) -local funcs = mpack.decode(io.open(funcs_file, 'rb'):read("*all")) -for _, name in ipairs(funcs) do - if name then - if lld.line_length > 850 then - w('\n' .. vimfun_start) - end - w(' ' .. name) - end -end - -w('\n') -syn_fd:close() diff --git a/src/nvim/generators/gen_vimvim.lua b/src/nvim/generators/gen_vimvim.lua @@ -0,0 +1,148 @@ +local mpack = vim.mpack + +local syntax_file = arg[1] +local funcs_file = arg[2] + +local lld = {} +local syn_fd = io.open(syntax_file, 'w') +lld.line_length = 0 +local function w(s) + syn_fd:write(s) + if s:find('\n') then + lld.line_length = #(s:gsub('.*\n', '')) + else + lld.line_length = lld.line_length + #s + end +end + +local options = require('options') +local auevents = require('auevents') +local ex_cmds = require('ex_cmds') + +local function cmd_kw(prev_cmd, cmd) + if not prev_cmd then + return cmd:sub(1, 1) .. '[' .. cmd:sub(2) .. ']' + else + local shift = 1 + while cmd:sub(shift, shift) == prev_cmd:sub(shift, shift) do + shift = shift + 1 + end + if cmd:sub(1, shift) == 'def' then + shift = shift + 1 + end + if shift >= #cmd then + return cmd + else + return cmd:sub(1, shift) .. '[' .. cmd:sub(shift + 1) .. ']' + end + end +end + +-- Exclude these from the vimCommand keyword list, they are handled specially +-- in syntax/vim.vim (vimAugroupKey, vimAutoCmd, vimGlobal, vimSubst). #9327 +local function is_special_cased_cmd(cmd) + return (cmd == 'augroup' + or cmd == 'autocmd' + or cmd == 'doautocmd' + or cmd == 'doautoall' + or cmd == 'global' + or cmd == 'substitute') +end + +local vimcmd_start = 'syn keyword vimCommand contained ' +w(vimcmd_start) +local prev_cmd = nil +for _, cmd_desc in ipairs(ex_cmds.cmds) do + if lld.line_length > 850 then + w('\n' .. vimcmd_start) + end + local cmd = cmd_desc.command + if cmd:match('%w') and cmd ~= 'z' and not is_special_cased_cmd(cmd) then + w(' ' .. cmd_kw(prev_cmd, cmd)) + end + if cmd == 'delete' then + -- Add special abbreviations of :delete + w(' ' .. cmd_kw('d', 'dl')) + w(' ' .. cmd_kw('del', 'dell')) + w(' ' .. cmd_kw('dele', 'delel')) + w(' ' .. cmd_kw('delet', 'deletl')) + w(' ' .. cmd_kw('delete', 'deletel')) + w(' ' .. cmd_kw('d', 'dp')) + w(' ' .. cmd_kw('de', 'dep')) + w(' ' .. cmd_kw('del', 'delp')) + w(' ' .. cmd_kw('dele', 'delep')) + w(' ' .. cmd_kw('delet', 'deletp')) + w(' ' .. cmd_kw('delete', 'deletep')) + end + prev_cmd = cmd +end + +local vimopt_start = 'syn keyword vimOption contained ' +w('\n\n' .. vimopt_start) + +for _, opt_desc in ipairs(options.options) do + if not opt_desc.varname or opt_desc.varname:sub(1, 7) ~= 'p_force' then + if lld.line_length > 850 then + w('\n' .. vimopt_start) + end + w(' ' .. opt_desc.full_name) + if opt_desc.abbreviation then + w(' ' .. opt_desc.abbreviation) + end + if opt_desc.type == 'bool' then + w(' inv' .. opt_desc.full_name) + w(' no' .. opt_desc.full_name) + if opt_desc.abbreviation then + w(' inv' .. opt_desc.abbreviation) + w(' no' .. opt_desc.abbreviation) + end + end + end +end + +w('\n\nsyn case ignore') +local vimau_start = 'syn keyword vimAutoEvent contained ' +w('\n\n' .. vimau_start) + +for _, au in ipairs(auevents.events) do + if not auevents.nvim_specific[au] then + if lld.line_length > 850 then + w('\n' .. vimau_start) + end + w(' ' .. au) + end +end +for au, _ in pairs(auevents.aliases) do + if not auevents.nvim_specific[au] then + if lld.line_length > 850 then + w('\n' .. vimau_start) + end + w(' ' .. au) + end +end + +local nvimau_start = 'syn keyword nvimAutoEvent contained ' +w('\n\n' .. nvimau_start) + +for au, _ in vim.spairs(auevents.nvim_specific) do + if lld.line_length > 850 then + w('\n' .. nvimau_start) + end + w(' ' .. au) +end + +w('\n\nsyn case match') +local vimfun_start = 'syn keyword vimFuncName contained ' +w('\n\n' .. vimfun_start) +local funcs = mpack.decode(io.open(funcs_file, 'rb'):read("*all")) +for _, name in ipairs(funcs) do + if name then + if lld.line_length > 850 then + w('\n' .. vimfun_start) + end + w(' ' .. name) + end +end + +w('\n') +syn_fd:close()