From 8ea18de95941dc0532838762e4ebdec33759db0e Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 11 Jun 2025 07:35:59 +0800 Subject: [PATCH] vim-patch:274efcc: runtime(vim): Update base-syntax, contain let-heredocs (#34431) Limit heredoc matches to assignment statements. Matching these at the top level is very slow. closes: vim/vim#17473 https://github.com/vim/vim/commit/274efcc7e697cebdfc5fce911fe09e8618e11264 Co-authored-by: Doug Kearns --- runtime/syntax/vim.vim | 96 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 17 deletions(-) diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 2c7a46d141..901e8d088f 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -244,15 +244,16 @@ syn match vimVimVar "\" contains=vim9Super,vim9This -Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript -Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This +Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+[-+/*%]\==" +Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s\+\.\.=" +Vim9 syn match vim9LhsVariable "\s\=\%([bwgt]:\)\=\h[a-zA-Z0-9#_]*\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVarScope +Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\[" nextgroup=vimSubscript +Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\." nextgroup=vimOper contains=vim9Super,vim9This +Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->" contains=vim9Super,vim9This -Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar -Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+[-+/*%]\==" contains=vimVar,@vimSpecialVar +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+=<<" skipwhite nextgroup=vimLetHeredoc contains=vimVar,@vimSpecialVar +Vim9 syn match vim9LhsVariableList "\[\_[^]]\+]\ze\s\+\.\.=" contains=vimVar,@vimSpecialVar Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\==" @@ -427,7 +428,7 @@ syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgrou syn cluster vimFuncList contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncScope,vimFuncSID,Tag syn cluster vimDefList contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncScope,vimFuncSID,Tag -syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHeredoc,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold +syn cluster vimFuncBodyCommon contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold syn cluster vimFuncBodyList contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimInsert,vimConst,vimLet,vimSearch syn cluster vimDefBodyList contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Block,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9LhsVariable,vim9LhsVariableList,vim9LhsRegister,vim9Search,@vimSpecialVar @@ -956,11 +957,20 @@ syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)" " Variable Declarations: {{{2 " ===================== -VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList -VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList +VimL syn keyword vimLet let skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar +VimL syn keyword vimConst cons[t] skipwhite nextgroup=@vimSpecialVar,vimVar,vimVarList,vimLetVar syn region vimVarList contained \ start="\[" end="]" + \ skipwhite nextgroup=vimLetHeredoc \ contains=@vimContinue,@vimSpecialVar,vimVar +syn match vimLetVar contained "\<\%([bwglstav]:\)\=\h[a-zA-Z0-9#_]*\>\ze\%(\[.*]\)\=\s*=<<" skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc contains=vimVarScope,vimSubscript +hi link vimLetVar vimVar +syn region vimLetVarSubscript contained + \ matchgroup=vimSubscriptBracket + \ start="\S\@1<=\[" + \ end="]" + \ skipwhite nextgroup=vimLetVarSubscript,vimLetHeredoc + \ contains=@vimExprList VimL syn keyword vimUnlet unl[et] skipwhite nextgroup=vimUnletBang,vimUnletVars syn match vimUnletBang contained "\a\@1<=!" skipwhite nextgroup=vimUnletVars @@ -969,17 +979,68 @@ syn region vimUnletVars contained \ nextgroup=vimCmdSep,vimComment \ contains=@vimContinue,vimEnvvar,vimVar,vimVimVar -VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop end='^\z1\=\z2$' extend -VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart start='=<<\%(\s*\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop end='^\z1$' extend -VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart start='\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop end='^\z1\=\z2$' contains=@vimStringInterpolation extend -VimFoldh syn region vimLetHeredoc matchgroup=vimLetHeredocStart start='=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)' matchgroup=vimLetHeredocStop end='^\z1$' contains=@vimStringInterpolation extend +" TODO: type error after register or environment variables (strings) +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*trim\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1\=\z2$" + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="=<<\%(\s*\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop end="^\z1$" + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="\%(^\z(\s*\)\S.*\)\@<==<<\s*\%(trim\s\+eval\|eval\s\+trim\)\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1\=\z2$" + \ contains=@vimStringInterpolation + \ extend +VimFoldh syn region vimLetHeredoc contained + \ matchgroup=vimLetHeredocStart + \ start="=<<\s*eval\%(\s\+\)\@>\z(\L\S*\)" + \ matchgroup=vimLetHeredocStop + \ end="^\z1$" + \ contains=@vimStringInterpolation + \ extend Vim9 syn keyword vim9Const const skipwhite nextgroup=vim9Variable,vim9VariableList Vim9 syn keyword vim9Final final skipwhite nextgroup=vim9Variable,vim9VariableList Vim9 syn keyword vim9Var var skipwhite nextgroup=vim9Variable,vim9VariableList -syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vimTypeSep,vimLetHeredoc,vimOper -syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable +syn match vim9Variable contained "\<\h\w*\>" skipwhite nextgroup=vim9VariableTypeSep,vimLetHeredoc,vimOper +syn region vim9VariableList contained start="\[" end="]" contains=@vimContinue,@vimSpecialVar,vim9Variable skipwhite nextgroup=vimLetHeredoc + +syn match vim9VariableTypeSep contained "\S\@1<=:\%(\s\|\n\)\@=" skipwhite nextgroup=@vim9VariableType +syn keyword vim9VariableType contained any blob bool channel float job number string void skipwhite nextgroup=vimLetHeredoc +syn match vim9VariableType contained "\<\%(func\)\>" skipwhite nextgroup=vimLetHeredoc +syn region vim9VariableCompoundType contained + \ matchgroup=vim9VariableType + \ start="\" skipwhite nextgroup=vimLetHeredoc + +syn cluster vim9VariableType contains=vim9VariableType,vim9VariableCompoundType,vim9VariableUserType " Lockvar and Unlockvar: {{{2 " ===================== @@ -2356,6 +2417,7 @@ if !exists("skip_vim_syntax_inits") hi def link vim9Type vimCommand hi def link vim9TypeEquals vimOper hi def link vim9Variable vimVar + hi def link vim9VariableType vimType hi def link vim9Var vimCommand hi def link vim9Vim9ScriptArg Special hi def link vim9Vim9Script vimCommand