forked from aniani/vim
runtime(vim): Update base-syntax and generator, only match valid predefined variables
- Only match valid predefined and option variables. - Match scope dictionaries. - Highlight scope prefixed variables as a scope dictionary accessor. The vimVarScope syntax group can be linked to vimVar to disable this. - Include support for Neovim-only predefined and option variables. Temporary collateral damage - scope dictionaries match instead of keys in dictionary literals. closes: #16727 Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
42e498d9c4
commit
3dca512939
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file generator
|
||||
" Language: Vim script
|
||||
" Maintainer: Hirohito Higashi (h_east)
|
||||
" Last Change: 2025 Feb 08
|
||||
" Last Change: 2025 Mar 09
|
||||
|
||||
let s:keepcpo= &cpo
|
||||
set cpo&vim
|
||||
@@ -581,6 +581,38 @@ function s:parse_vim_addr_name(li)
|
||||
endtry
|
||||
endfunc
|
||||
|
||||
" ------------------------------------------------------------------------------
|
||||
function s:parse_vim_var(li)
|
||||
try
|
||||
let file_name = $VIM_SRCDIR . '/evalvars.c'
|
||||
let item = {}
|
||||
|
||||
new
|
||||
exec 'read ' . file_name
|
||||
norm! gg
|
||||
exec '/^} vimvars\[VV_LEN] =\n{$/+1;/^};$/-1yank'
|
||||
%delete _
|
||||
|
||||
put
|
||||
g!/^\s*{VV_NAME(/d
|
||||
|
||||
for line in getline(1, line('$'))
|
||||
let list = matchlist(line, '^\s*{VV_NAME("\(\w\+\)"')
|
||||
let item.name = list[1]
|
||||
call add(a:li, copy(item))
|
||||
endfor
|
||||
|
||||
quit!
|
||||
|
||||
if empty(a:li)
|
||||
throw 'var is empty'
|
||||
endif
|
||||
catch /.*/
|
||||
call s:err_gen('')
|
||||
throw 'exit'
|
||||
endtry
|
||||
endfunc
|
||||
|
||||
" ------------------------------------------------------------------------------
|
||||
function s:append_syn_any(lnum, str_info, li)
|
||||
let ret_lnum = a:lnum
|
||||
@@ -665,6 +697,15 @@ function s:update_syntax_vim_file(vim_info)
|
||||
let lnum = s:search_and_check(kword . ' term output code', base_fname, str_info)
|
||||
let lnum = s:append_syn_any(lnum, str_info, li)
|
||||
|
||||
" vimOption - normal variable
|
||||
let li = a:vim_info.opt
|
||||
let lnum = s:search_and_check(kword . ' normal variable', base_fname, str_info)
|
||||
let lnum = s:append_syn_vimopt(lnum, str_info, li, '', 0)
|
||||
" vimOption - term output code variable
|
||||
let li = a:vim_info.term_out_code
|
||||
let lnum = s:search_and_check(kword . ' term output code variable', base_fname, str_info)
|
||||
let lnum = s:append_syn_any(lnum, str_info, li)
|
||||
|
||||
" Missing vimOption
|
||||
let li = a:vim_info.missing_opt
|
||||
let lnum = s:search_and_check('Missing vimOption', base_fname, str_info)
|
||||
@@ -687,6 +728,11 @@ function s:update_syntax_vim_file(vim_info)
|
||||
let lnum = s:search_and_check('vimFuncName', base_fname, str_info)
|
||||
let lnum = s:append_syn_any(lnum, str_info, li)
|
||||
|
||||
" vimVarName
|
||||
let li = a:vim_info.var
|
||||
let lnum = s:search_and_check('vimVarName', base_fname, str_info)
|
||||
let lnum = s:append_syn_any(lnum, str_info, li)
|
||||
|
||||
" vimUserAttrbCmplt
|
||||
let li = a:vim_info.compl_name
|
||||
let lnum = s:search_and_check('vimUserCmdAttrCmplt', base_fname, str_info)
|
||||
@@ -874,6 +920,7 @@ try
|
||||
let s:vim_info.hlgroup = []
|
||||
let s:vim_info.compl_name = []
|
||||
let s:vim_info.addr_name = []
|
||||
let s:vim_info.var = []
|
||||
|
||||
set lazyredraw
|
||||
if !$CHECK_HELP_DOC
|
||||
@@ -885,6 +932,7 @@ try
|
||||
silent call s:parse_vim_hlgroup(s:vim_info.hlgroup)
|
||||
silent call s:parse_vim_complete_name(s:vim_info.compl_name)
|
||||
silent call s:parse_vim_addr_name(s:vim_info.addr_name)
|
||||
silent call s:parse_vim_var(s:vim_info.var)
|
||||
|
||||
call s:update_syntax_vim_file(s:vim_info)
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user