]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(make): Makefile highlighting breaks with ')' in string
authorBeleswar Prasad Padhi <beleswarprasad@gmail.com>
Tue, 23 Dec 2025 21:32:10 +0000 (21:32 +0000)
committerChristian Brabandt <cb@256bit.org>
Tue, 23 Dec 2025 21:32:10 +0000 (21:32 +0000)
Problem:  Makefile syntax highlighting incorrectly ends function calls
          when encountering ')' inside double or single quoted strings,
          causing incorrect highlighting for the remainder of the line.
Solution: Add makeDString and makeSString to the contains list for
          makeIdent regions. This allows strings to be recognized inside
          variable references and function calls.

fixes:  #18687
closes: #18818

Signed-off-by: Beleswar Prasad Padhi <beleswarprasad@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/syntax/make.vim
runtime/syntax/testdir/dumps/make_01_00.dump
runtime/syntax/testdir/input/make_01.mak

index dc649b1258937d189608a753d8db8f3b3cdbba37..8af09954be1e142c74347779b3302704848254a5 100644 (file)
@@ -8,6 +8,7 @@
 " 2025 Oct 12 by Vim project: update makeDefine highlighting (#18403)
 " 2025 Oct 25 by Vim project: update makeTargetinDefine highlighting (#18570)
 " 2025 Dec 23 by Vim project: fix too greedy match (#18938)
+" 2025 Dec 23 by Vim project: wrong highlight with paranthesis inside quotes (#18818)
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -42,15 +43,15 @@ syn match makeIdent "\$\$\$\$\w*" containedin=makeDefine
 syn match makeIdent    "\$[^({]"
 syn match makeIdent    "\$\$[^({]" containedin=makeDefine
 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
+  syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\$\$(" end=")" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\$\${" end="}" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString
 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
+  syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\$\$(" skip="\\)\|\\\\" end=")" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString
+  syn region makeIdent start="\$\${" skip="\\}\|\\\\" end="}" containedin=makeDefine contains=makeStatement,makeIdent,makeDString,makeSString
 endif
 syn match makeIdent    "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
 syn match makeIdent    "^ *[^:#= \t]*\s*::="me=e-3
index 3ac6700ec8a0343cc22ce49bcb93ba1d006adecd..d476fcd2ace696ec8bb7835ca596a879aa481c22 100644 (file)
@@ -7,14 +7,14 @@
 | +0#e000e06&@7|@|e+0#e000002&|c|h|o| |d|o|u|b|l|e|-|c|o|l|o|n| |r|u|l|e| +0#0000000&@43
 @75
 |$+0#00e0e07&|(|a|)| |++0#0000000&|=| |o|u|t|p|u|t| @60
+@75
+|d+0#e000e06&|e|f|i|n|e| |s|a|y| +0#0000000&@64
+| +0#e000e06&@7|e|c|h|o| |$+0#00e0e07&|1| +0#0000000&@59
+|e+0#e000e06&|n|d|e|f| +0#0000000&@69
+@75
+|d+0#00e0e07&|e|f|a|u|l|t|:| +0#0000000&@66
+| +0#e000002&@7|$+0#00e0e07&|(|c+0#af5f00255&|a|l@1| +0#00e0e07&|s|a|y|,|"+0#e000002&|H|e|l@1|o| |(|w|o|r|l|d|)|!|"|)+0#00e0e07&| +0#0000000&@38
 |~+0#4040ff13&| @73
 |~| @73
 |~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
 | +0#0000000&@56|1|,|1| @10|A|l@1| 
index 28c6147e6a5d679ca294ff37c76aae1f31c47044..e97c13c0aa09d72f6c88bb0fea19be5ddf56b8fa 100644 (file)
@@ -7,3 +7,10 @@ $(a)::
        @echo double-colon rule
 
 $(a) += output
+
+define say
+       echo $1
+endef
+
+default:
+       $(call say,"Hello (world)!")