runtime(vim): Update base-syntax, improve variable matching
Commit:
https://github.com/vim/vim/commit/1aa287e0480ff9e6c8d7029b0665b565b7cd6e59
Author: Doug Kearns <[email protected]>
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
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 <[email protected]>
-" 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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1thb7S-001L1j-DF%40256bit.org.