diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2025-03-09 22:07:39 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2025-03-09 22:07:39 -0400 |
commit | c4a282316633bdc6a21077350650ecd97868934c (patch) | |
tree | 99fb457b217fa4323985cd8708f922794ad58573 /lisp/progmodes/make-mode.el | |
parent | 5176eeb3003a4d31053b07a9c6045da723fa257d (diff) | |
download | emacs-c4a282316633bdc6a21077350650ecd97868934c.tar.gz emacs-c4a282316633bdc6a21077350650ecd97868934c.tar.bz2 emacs-c4a282316633bdc6a21077350650ecd97868934c.zip |
(makefile-dependency-regex): Fix bug#76759
* lisp/progmodes/make-mode.el (makefile-dependency-regex):
Decompose the regexp to be more understandable, and then change
it so the target part can't accidentally match a TAB.
* test/lisp/progmodes/make-mode-tests.el (make-mode-tests--bug17400):
New test.
Diffstat (limited to 'lisp/progmodes/make-mode.el')
-rw-r--r-- | lisp/progmodes/make-mode.el | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lisp/progmodes/make-mode.el b/lisp/progmodes/make-mode.el index 782e0168ed8..d5fdd063825 100644 --- a/lisp/progmodes/make-mode.el +++ b/lisp/progmodes/make-mode.el @@ -225,8 +225,18 @@ not be enclosed in { } or ( )." ;; that if you change this regexp you might have to fix the imenu ;; index in makefile-imenu-generic-expression. (defvar makefile-dependency-regex - ;; Allow for two nested levels $(v1:$(v2:$(v3:a=b)=c)=d) - "^\\(\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[^({]\\|.[^\n$#})]+?[})]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#:=]\\)+?\\)\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)" + (letrec ((elems-re + (lambda (n &optional outer) + (if (< n 1) + "[^\n$#})]+?" + (concat "\\(?:\\$\\(?:" + "[({]" (funcall elems-re (- n 1)) "[})]" + "\\|[^({]\\)" + "\\|[^\n$#" (if outer "\t:=" ")}") "]\\)+?"))))) + (concat + ;; Allow for two nested levels $(v1:$(v2:$(v3:a=b)=c)=d) + "^\\(" (funcall elems-re 3 'outer) + "\\)\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)")) "Regex used to find dependency lines in a makefile.") (defconst makefile-bsdmake-dependency-regex |