Skip to content

Commit 2a33b49

Browse files
littlewu2508chrisbra
authored andcommitted
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 <xgreenlandforwyy@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
1 parent 7e9ccdd commit 2a33b49

1 file changed

Lines changed: 22 additions & 8 deletions

File tree

runtime/syntax/make.vim

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim
66
" Last Change: 2022 Nov 06
77
" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089)
8+
" 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403)
89

910
" quit when a syntax file was already loaded
1011
if exists("b:current_syntax")
@@ -23,7 +24,7 @@ syn match makeNextLine "\\\n\s*"
2324

2425
" catch unmatched define/endef keywords. endef only matches it is by itself on a line, possibly followed by a commend
2526
syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$"
26-
\ contains=makeStatement,makeIdent,makePreCondit,makeDefine
27+
\ contains=makeStatement,makeIdent,makePreCondit,makeDefine,makeComment,makeTargetinDefine
2728

2829
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
2930
" Microsoft Makefile specials
@@ -33,20 +34,26 @@ if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
3334
syn case match
3435
endif
3536

36-
" identifiers
37+
" identifiers; treat $$X like $X inside makeDefine
38+
syn match makeIdent "\$\$\w*"
39+
syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine
40+
syn match makeIdent "\$[^({]"
41+
syn match makeIdent "\$\$[^({]" containedin=makeDefine
42+
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
43+
syn match makeIdent "^ *[^:#= \t]*\s*::="me=e-3
44+
syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1
45+
syn match makeIdent "%"
3746
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
3847
syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
3948
syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
49+
syn region makeIdent start="\$\$(" end=")" containedin=makeDefine contains=makeStatement,makeIdent
50+
syn region makeIdent start="\$\${" end="}" containedin=makeDefine contains=makeStatement,makeIdent
4051
else
4152
syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
4253
syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
54+
syn region makeIdent start="\$\$(" skip="\\)\|\\\\" end=")" containedin=makeDefine contains=makeStatement,makeIdent
55+
syn region makeIdent start="\$\${" skip="\\}\|\\\\" end="}" containedin=makeDefine contains=makeStatement,makeIdent
4356
endif
44-
syn match makeIdent "\$\$\w*"
45-
syn match makeIdent "\$[^({]"
46-
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
47-
syn match makeIdent "^ *[^:#= \t]*\s*::="me=e-3
48-
syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1
49-
syn match makeIdent "%"
5057

5158
" Makefile.in variables
5259
syn match makeConfig "@[A-Za-z0-9_]\+@"
@@ -55,6 +62,12 @@ syn match makeConfig "@[A-Za-z0-9_]\+@"
5562
syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1
5663
syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2
5764

65+
syn region makeTargetinDefine transparent matchgroup=makeTargetinDefine
66+
\ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1
67+
\ end="[^\\]$"
68+
syn match makeTargetinDefine "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%*@-]*&\?::\=\s*$"
69+
\ contains=makeIdent,makeSpecTarget,makeComment
70+
5871
syn region makeTarget transparent matchgroup=makeTarget
5972
\ start="^[~A-Za-z0-9_./$(){}%-][A-Za-z0-9_./\t ${}()%-]*&\?:\?:\{1,2}[^:=]"rs=e-1
6073
\ end="[^\\]$"
@@ -155,6 +168,7 @@ hi def link makeCommands Number
155168
endif
156169
hi def link makeImplicit Function
157170
hi def link makeTarget Function
171+
hi def link makeTargetinDefine Function
158172
hi def link makeInclude Include
159173
hi def link makePreCondit PreCondit
160174
hi def link makeStatement Statement

0 commit comments

Comments
 (0)