runtime(make): Move target greedy match after $() to avoid region matching 
overflow

Commit: 
https://github.com/vim/vim/commit/aded55463a150bc9c77852f8e2c931535bedad3e
Author: Yiyang Wu <[email protected]>
Date:   Tue Dec 23 21:25:04 2025 +0000

    runtime(make): Move target greedy match after $() to avoid region matching 
overflow
    
    Partially revert 2a33b499a3d7f46dc307234847a6562cef6cf1d8, where all
    syn match makeIdent are moved before syn region makeIdent to match $()
    (reason: see https://github.com/vim/vim/pull/18403#issuecomment-3341161566)
    
    However this results in https://github.com/vim/vim/issues/18890 ,
    because lines like
    `$(a) =`
    will first start a region search beginning with `$(`
    but then the whole target including `)` will be matched by
    `syn match makeIdent "^ *[^:#=      ]*\s*="me=e-1`
    which leaves the region search for the never-found `)` and let the
    region matching overflow.
    
    Same for
    
    `$(a) ::`
    `$(a) +=`
    
    The solution is to move those greedy target match back, so they take
    priority and prevents region match from happening.
    
    fixes:  #18890
    closes: #18938
    
    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 338150fa9..dc649b125 100644
--- a/runtime/syntax/make.vim
+++ b/runtime/syntax/make.vim
@@ -7,6 +7,7 @@
 " 2025 Apr 15 by Vim project: rework Make flavor detection (#17089)
 " 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)
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -40,10 +41,6 @@ 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
@@ -55,6 +52,10 @@ else
   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    "^ *[^:#=       ]*\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_]\+@"
diff --git a/runtime/syntax/testdir/dumps/make_01_00.dump 
b/runtime/syntax/testdir/dumps/make_01_00.dump
new file mode 100644
index 000000000..3ac6700ec
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/make_01_00.dump
@@ -0,0 +1,20 @@
+>#+0#0000e05#ffffff0| |c|o|m@1|e|n|t| +0#0000000&@65
+@75
+|a+0#00e0e07&| |=+0#0000000&| |b| @69
+|$+0#00e0e07&|(|a|)| |=+0#0000000&| |1| @66
+@75
+|$+0#00e0e07&|(|a|)|:@1| +0#0000000&@68
+| +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
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|,|1| @10|A|l@1| 
diff --git a/runtime/syntax/testdir/input/make_01.mak 
b/runtime/syntax/testdir/input/make_01.mak
new file mode 100644
index 000000000..28c6147e6
--- /dev/null
+++ b/runtime/syntax/testdir/input/make_01.mak
@@ -0,0 +1,9 @@
+# comment
+
+a = b
+$(a) = 1
+
+$(a)::
+       @echo double-colon rule
+
+$(a) += output

-- 
-- 
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/E1vY9xD-00CKJc-Ll%40256bit.org.

Raspunde prin e-mail lui