runtime(vim): Update base-syntax, improve variable matching

Commit: 
https://github.com/vim/vim/commit/1aa287e0480ff9e6c8d7029b0665b565b7cd6e59
Author: Doug Kearns <dougkea...@gmail.com>
Date:   Mon Feb 10 22:00:27 2025 +0100

    runtime(vim): Update base-syntax, improve variable matching
    
    - Match variables after operators, including line continuations.
    - Match option variables without leading whitespace.
    - Explicitly match expression subscripts.
    - Match Vim9 variables in LHS of assignments and method calls.
    - Match option variables (&option) with a dedicated syntax group like
      environment variables.
    - Match list literals, fixes: #5830
    - Match :{un}lockvar arguments.
    - Match registers and environment variables in :let unpack lists.
    - Match lambda expressions
    - Match Vim9 scope blocks
    - Match variables in :for subject
    - Highlight user variables with Normal
    - Improve this/super keyword matching, fixes: #15970
    
    closes: #16476
    
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/syntax/generator/vim.vim.base 
b/runtime/syntax/generator/vim.vim.base
index c30034c14..452cec2de 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -2,7 +2,7 @@
 " Language:       Vim script
 " Maintainer:     Hirohito Higashi <h.east.727 ATMARK gmail.com>
 "         Doug Kearns <dougkea...@gmail.com>
-" Last Change:    2025 Feb 03
+" Last Change:    2025 Feb 08
 " Former Maintainer: Charles E. Campbell
 
 " DO NOT CHANGE DIRECTLY.
@@ -192,32 +192,51 @@ Vim9 syn keyword vim9Boolean      true false
 " Numbers {{{2
 " =======
 syn case ignore
-syn match      vimNumber       '\<\d\+\%(\.\d\+\%(e[+-]\=\d\+\)\=\)\=' 
skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match      vimNumber       '\<0b[01]\+'                    skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match      vimNumber       '\<0o\=\o\+'                    skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match      vimNumber       '\<0x\x\+'                      skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match      vimNumber       '\<\d\+'                        skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match      vimNumber       '\<\d\+\.\d\+\%(e[+-]\=\d\+\)\='                
skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match      vimNumber       '\<0b[01]\+'                    skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match      vimNumber       '\<0o\=\o\+'                    skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
+syn match      vimNumber       '\<0x\x\+'                      skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
 syn match      vimNumber       '\<0z\>'                        skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment
-syn match      vimNumber       '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*'    
skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment
+syn match      vimNumber       '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*'    
skipwhite nextgroup=vimGlobal,vimSubst1,@vimComment,vimSubscript
 syn match      vimNumber       '\%(^\|\A\)\zs#\x\{6}'          skipwhite 
nextgroup=vimGlobal,vimSubst1,@vimComment
 syn case match
 
 " All vimCommands are contained by vimIsCommand. {{{2
-syn cluster vimCmdList 
contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
+syn cluster vimCmdList 
contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList
 syn cluster vim9CmdList        
contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
 syn match vimCmdSep    "[:|]\+"        skipwhite 
nextgroup=@vimCmdList,vimSubst1
 syn match vimCount     contained       "\d\+"
 syn match vimIsCommand "\<\%(\h\w*\|[23]mat\%[ch]\)\>"  nextgroup=vimBang 
contains=vimCommand
 syn match vimBang            contained "!"
-syn match vimVar             contained "\<\h[a-zA-Z0-9#_]*\>"
-syn match vimVar               "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn match vimVar               "\s\zs&\%([lg]:\)\= \+\>"
-syn match vimVar               "\s\zs&t_\S[a-zA-Z0-9]\>"
-syn match vimVar               "\s\zs&t_k;"
-syn match vimFBVar      contained   "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"
-syn keyword vimCommand  contained      in
 
-syn cluster vimExprList        
contains=vimEnvvar,vimFunc,vimNumber,vimOper,vimOperParen,vimLetRegister,vimString,vimVar,@vim9ExprList
-syn cluster vim9ExprList       contains=vim9Boolean,vim9Null
+syn region vimSubscript contained      matchgroup=vimSubscriptBracket 
start="\[" end="]" nextgroup=vimSubscript contains=@vimExprList
+
+syn match vimVar             contained "\<\h[a-zA-Z0-9#_]*\>"  
nextgroup=vimSubscript contains=vim9Super,vim9This
+syn match vimVar               "\<[bwglstav]:\h[a-zA-Z0-9#_]*\>"       
nextgroup=vimSubscript
+syn match vimVar               "\<a:\%(000\|\d\+\)\>"  nextgroup=vimSubscript
+syn match vimFBVar      contained   "\<[bwglsta]:\h[a-zA-Z0-9#_]*\>"   
nextgroup=vimSubscript
+
+syn match vimVimVar    "\<v:\h\w*\>"           nextgroup=vimSubscript
+syn match vimOptionVar         "&\%([lg]:\)\= \+\>"    nextgroup=vimSubscript
+syn match vimOptionVar "&t_\S[a-zA-Z0-9]\>"    nextgroup=vimSubscript
+syn match vimOptionVar         "&t_k;"         nextgroup=vimSubscript
+syn cluster vimSpecialVar      
contains=vimEnvvar,vimLetRegister,vimOptionVar,vimVimVar
+
+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\=\h[a-zA-Z0-9#_]*\ze\s\+=<<"
+Vim9 syn match vim9LhsVariable "\s\=\h[a-zA-Z0-9#_]*\ze\s*->"          
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 vim9LhsVariableList     "\[\_[^]]\+]\ze\s\+[-+/*%]\=="  
contains=vimVar,@vimSpecialVar
+Vim9 syn match vim9LhsVariableList     "\[\_[^]]\+]\ze\s\+\.\.="       
contains=vimVar,@vimSpecialVar
+
+Vim9 syn match vim9LhsRegister "@["0-9\-a-zA-Z#=*+_/]\ze\s\+\%(\.\.\)\=="
+
+syn cluster vimExprList        
contains=@vimSpecialVar,vimFunc,vimNumber,vimOper,vimOperParen,vimLambda,vimString,vimVar,@vim9ExprList
+syn cluster vim9ExprList       contains=vim9Boolean,vim9LambdaParams,vim9Null
 
 " Insertions And Appends: insert append {{{2
 "   (buftype != nofile test avoids having append, change, insert show up in 
the command window)
@@ -268,7 +287,7 @@ syn keyword vimFTOption contained   detect indent off on 
plugin
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing 
problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END 
error checking.
-syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn cluster vimAugroupList     
contains=@vimCmdList,vimFilter,vimFunc,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,@vimComment,vimString,vimSubst,vimRegister,vimCmplxRepeat,vimNotation,vimCtrlChar,vimContinue
 syn match   vimAugroup "\<aug\%[roup]\>" contains=vimAugroupKey,vimAugroupBang 
skipwhite nextgroup=vimAugroupBang,vimAutoCmdGroup
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
   syn region  vimAugroup  fold 
start="\<aug\%[roup]\>\ze\s\+\%([eE][nN][dD]\)\@!\S\+" matchgroup=vimAugroupKey 
end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" 
contains=vimAutoCmd,@vimAugroupList,vimAugroupkey skipwhite 
nextgroup=vimAugroupEnd
@@ -286,31 +305,64 @@ syn keyword vimAugroupKey contained aug[roup]  skipwhite 
nextgroup=vimAugroupBan
 
 " Operators: {{{2
 " =========
-syn cluster    vimOperGroup    
contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vimNull
-syn match      vimOper " \@<!!"                        skipwhite 
nextgroup=vimString,vimSpecFile
-syn match      vimOper "||\|&&\|[-+*/%.]"              skipwhite 
nextgroup=vimString,vimSpecFile
-syn match      vimOper "?"                     skipwhite nextgroup=@vimExprList
+syn cluster    vimOperGroup    
contains=@vimSpecialVar,vimFunc,vimLambda,vimOper,vimOperParen,vimNumber,vimString,vimRegister,@vimContinue,vim9Comment,vimVar,vimBoolean,vim9LambdaParams,vimNull
+syn match      vimOper " \@<!!"                        skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match      vimOper "||\|&&\|[-+*/%.]"              skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match      vimOper "?"                     skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList
 " distinguish ternary : from ex-colon
-syn match      vimOper "\s\@1<=:\ze\s\|\s\@1<=:$"              skipwhite 
nextgroup=@vimExprList
-syn match      vimOper "??"                    skipwhite nextgroup=@vimExprList
-syn match      vimOper "="                     skipwhite 
nextgroup=vimString,vimSpecFile
-syn match      vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\="        
skipwhite nextgroup=vimString,vimSpecFile
-syn match      vimOper "\<is\%(not\)\=\>"              skipwhite 
nextgroup=vimString,vimSpecFile
-syn match      vimOper "\<is\%(not\)\=[?#]"            skipwhite 
nextgroup=vimString,vimSpecFile
-syn region     vimOperParen    matchgroup=vimParenSep  start="(" end=")" 
contains=@vimOperGroup
-syn region     vimOperParen    matchgroup=vimSep               start="#\={" 
end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+syn match      vimOper "\s\@1<=:\ze\s\|\s\@1<=:$"              skipwhite 
skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match      vimOper "??"                    skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList
+syn match      vimOper "="                     skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match      vimOper "\%#=1\%(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\)[?#]\="        
skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match      vimOper "\<is\%(not\)\=\>"              skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn match      vimOper "\<is\%(not\)\=[?#]"            skipwhite skipnl 
nextgroup=@vimOperContinue,@vimExprList,vimSpecFile
+syn region     vimOperParen            matchgroup=vimParenSep start="("    
end=")" contains=@vimOperGroup nextgroup=vimSubscript
+syn region     vimOperParen            matchgroup=vimSep            
start="#\={" end="}" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
+syn region     vimOperParen    contained       matchgroup=vimSep            
start="\[" end="]" contains=@vimOperGroup nextgroup=vimSubscript,vimVar
 if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
  syn match     vimOperError    ")"
 endif
 
+syn match      vimOperContinue         contained       "^\s*\zs\"       
skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn match         vimOperContinueComment       contained       '^\s*\zs["#]\ 
.*' skipwhite skipnl nextgroup=@vimOperContinue,@vimExprList
+syn cluster    vimOperContinue         
contains=vimOperContinue,vimOperContinueComment
+
+" Lambda Expressions: {{{2
+" ==================
+syn match      vimLambdaOperator       contained       "->" skipwhite 
nextgroup=@vimExprList
+syn region     vimLambda       contained       matchgroup=Delimiter 
start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*
\s*\\|\s*
\s*"\ + contains=@vimContinue,@vimExprList,vimLambdaParams
+syn match      vimLambdaParams contained       "{\@1<=.\{-}\%(->\)\@=" 
nextgroup=vimLambdaOperator contains=vimFuncParam
+
+syn match      vim9LambdaOperator    contained "=>" skipwhite skipempty 
nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+syn match      vim9LambdaParamsParen contained "[()]"
+syn region     vim9LambdaParams            contained
+      \ matchgroup=vim9LambdaParamsParen
+      \ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+      \ start="(\ze\s*

+        "\ line continuations
+        \%(\s*\%(#\ .*\|\\s*\)
\)*\s*\\s*
+        "\ parameter names
+        \(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
+      \ end=")\ze\%(:\s\|\s\+=>\)"
+      \ matchgroup=vimContinue
+      \ end="^\s*\\ze\s\+=>"
+      \ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
+      \ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
+syn match      vim9LambdaParams            contained     
"(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite 
nextgroup=vim9LambdaReturnType,vim9LambdaOperator 
contains=vimDefParam,vim9LambdaParamsParen
+
+syn region     vim9LambdaReturnType  contained start=":\s" end="$" end="\ze#" 
end="\ze=>" skipwhite skipempty 
nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep 
transparent
+syn region     vim9LambdaBlock     contained   matchgroup=vimSep start="{" 
end="^\s*\zs}" contains=@vimDefBodyList
+
+syn match      vim9LambdaOperatorComment contained "#.*" skipwhite skipempty 
nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
+
 " Functions: Tag is provided for those who wish to highlight tagged functions 
{{{2
 " =========
-syn cluster    vimFuncList     
contains=vimFuncBang,vimFunctionError,vimFuncKey,vimFuncSID,Tag
-syn cluster    vimDefList      
contains=vimFuncBang,vimFunctionError,vimDefKey,vimFuncSID,Tag
+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,vimEnvvar,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegister,vimSpecFile,vimString,vimSubst,vimFuncFold,vimDefFold
-syn cluster    vimFuncBodyList 
contains=@vimFuncBodyCommon,vimComment,vimLineComment,vimFuncVar,vimInsert,vimConst,vimLet,vimSearch
-syn cluster    vimDefBodyList  
contains=@vimFuncBodyCommon,vim9Comment,vim9LineComment,vim9Const,vim9Final,vim9Var,vim9Null,vim9Boolean,vim9For,vim9Search
+syn cluster    vimFuncBodyCommon       
contains=@vimCmdList,vimCmplxRepeat,vimContinue,vimCtrlChar,vimDef,vimFBVar,vimFunc,vimFunction,vimLetHereDoc,vimNotation,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
 
 syn region     vimFuncPattern  contained               matchgroup=vimOper 
start="/" end="$" contains=@vimSubstList
 syn match      vimFunction     "\<fu\%[nction]\>"      skipwhite 
nextgroup=vimCmdSep,vimComment,vimFuncPattern contains=vimFuncKey
@@ -324,7 +376,7 @@ syn match   vimDefComment   contained       "#.*" skipwhite 
skipempty nextgroup=vimDefBody
 
 syn match      vimFuncBang     contained       "!"
 syn match      vimFuncSID      contained       "

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1thb7S-001L1j-DF%40256bit.org.

Raspunde prin e-mail lui