runtime(make): syntax highlighting update for makeDefine
Commit:
https://github.com/vim/vim/commit/2a33b499a3d7f46dc307234847a6562cef6cf1d8
Author: Yiyang Wu <[email protected]>
Date: Sun Oct 12 15:20:28 2025 +0000
runtime(make): syntax highlighting update for makeDefine
Previously contents in makeDefine are nearly highlighted as Define, so
comments and targets shares the same color as Define, making it hard to
distinguish if someone write large block of targets-recipes as defined
function.
Such scenario is common in building data analysis pipeline. Recipes are
reused and targets may have multiple variables, and a single % implicit
rule is not enough.
closes: #18403
Signed-off-by: Yiyang Wu <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim
index a6d8ad47e..8b6f04cbc 100644
--- a/runtime/syntax/make.vim
+++ b/runtime/syntax/make.vim
@@ -5,6 +5,7 @@
" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim
" Last Change: 2022 Nov 06
" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089)
+" 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403)
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -23,7 +24,7 @@ syn match makeNextLine "\
\s*"
" catch unmatched define/endef keywords. endef only matches it is by itself
on a line, possibly followed by a commend
syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$"
- \ contains=makeStatement,makeIdent,makePreCondit,makeDefine
+ \
contains=makeStatement,makeIdent,makePreCondit,makeDefine,makeComment,makeTargetinDefine
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
" Microsoft Makefile specials
@@ -33,20 +34,26 @@ if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
syn case match
endif
-" identifiers
+" identifiers; treat $$X like $X inside makeDefine
+syn match makeIdent "\$\$\w*"
+syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine
+syn match makeIdent "\$[^({]"
+syn match makeIdent "\$\$[^({]" containedin=makeDefine
+syn match makeIdent "^ *[^:#= ]*\s*[:+?!*]="me=e-2
+syn match makeIdent "^ *[^:#= ]*\s*::="me=e-3
+syn match makeIdent "^ *[^:#= ]*\s*="me=e-1
+syn match makeIdent "%"
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
+ syn region makeIdent start="\$\$(" end=")" containedin=makeDefine
contains=makeStatement,makeIdent
+ syn region makeIdent start="\$\${" end="}" containedin=makeDefine
contains=makeStatement,makeIdent
else
syn region makeIdent start="\$(" skip="\)\|\\" end=")"
contains=makeStatement,makeIdent
syn region makeIdent start="\${" skip="\}\|\\" end="}"
contains=makeStatement,makeIdent
+ syn region makeIdent start="\$\$(" skip="\)\|\\" end=")"
containedin=makeDefine contains=makeStatement,makeIdent
+ syn region makeIdent start="\$\${" skip="\}\|\\" end="}"
containedin=makeDefine contains=makeStatement,makeIdent
endif
-syn match makeIdent "\$\$\w*"
-syn match makeIdent "\$[^({]"
-syn match makeIdent "^ *[^:#= ]*\s*[:+?!*]="me=e-2
-syn match makeIdent "^ *[^:#= ]*\s*::="me=e-3
-syn match makeIdent "^ *[^:#= ]*\s*="me=e-1
-syn match makeIdent "%"
" Makefile.in variables
syn match makeConfig "@[A-Za-z0-9_]\+@"
@@ -55,6 +62,12 @@ syn match makeConfig "@[A-Za-z0-9_]\+@"
syn match makeImplicit "^\.[A-Za-z0-9_./ -]\+\s*:$"me=e-1
syn match makeImplicit "^\.[A-Za-z0-9_./ -]\+\s*:[^=]"me=e-2
+syn region makeTargetinDefine transparent matchgroup=makeTargetinDefine
+ \ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./
${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1
+ \ end="[^\]$"
+syn match makeTargetinDefine "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./
$(){}%*@-]*&\?::\=\s*$"
+ \ contains=makeIdent,makeSpecTarget,makeComment
+
syn region makeTarget transparent matchgroup=makeTarget
\ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./
${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1
\ end="[^\]$"
@@ -155,6 +168,7 @@ hi def link makeCommands Number
endif
hi def link makeImplicit Function
hi def link makeTarget Function
+hi def link makeTargetinDefine Function
hi def link makeInclude Include
hi def link makePreCondit PreCondit
hi def link makeStatement Statement
--
--
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/E1v7y1R-00AMvB-67%40256bit.org.