GNU bug report logs -
#76759
[PATCH] 31.0.50; makefile-mode: incorrectly highlights make-instructions as make targets
Previous Next
Reported by: Jostein Kjønigsen <jostein <at> secure.kjonigsen.net>
Date: Wed, 5 Mar 2025 09:34:02 UTC
Severity: normal
Tags: confirmed, patch
Merged with 17400,
33681,
33900,
35299,
36245,
37934,
45037,
46052,
46221,
48052
Found in version 26.1
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#76759: GNUmakefile mode wrong color sometime beyond TAB
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 35299 <at> debbugs.gnu.org.
--
76759: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=76759
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
> Any news on this one?
Looks OK, tho I think it's a bit more strict than necessary: the TABs we
need to avoid can be only at the beginning of the line, so not inside
the $(...).
So it's only one of the [^...] that needs the \t.
Here's what I did:
- Start from the current monster:
"^\\(\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[^({]\\|.[^\n$#})]+?[})]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#:=]\\)+?\\)\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)"
- Change the `\\(?:[^({]\\|.` to `\\(?:[^({]\\|[({]` because I think
the `.` was just an optimization. And since the two alternatives are
now mutually exclusive, swap them:
\\(?:[^({]\\|.[^\n$#})]+?[})]\\)
=>
\\(?:[({][^\n$#})]+?[})]\\|[^({]\\)
- Now the regexp has become:
"^\\(\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[({]\\(?:\\$\\(?:[({][^\n$#})]+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#)}]\\)+?[})]\\|[^({]\\)\\|[^\n$#:=]\\)+?\\)\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)"
- Make the nested construction explicit, so it's a bit more manageable:
(letrec ((elems-re
(lambda (n &optional outer)
(if (< n 1)
"[^\n$#})]+?"
(concat "\\(?:\\$\\(?:"
"[({]" (funcall elems-re (- n 1)) "[})]"
"\\|[^({]\\)"
"\\|[^\n$#" (if outer ":=" ")}") "]\\)+?")))))
(concat
;; Allow for two nested levels $(v1:$(v2:$(v3:a=b)=c)=d)
"^\\(" (funcall elems-re 3 'outer)
"\\)\\(:\\)\\(?:[ \t]*$\\|[^=\n]\\(?:[^#\n]*?;[ \t]*\\(.+\\)\\)?\\)"))
- Disallow TABs in the outer case by replacing ":=" with "\t:=" (that's
one of the TABs you added in your version of the patch).
This is still not quite right, since AFAIK TABs are allowed to appear
outside of $(...) as long as they're not at BOL, but I think it's better
than what we've had so far (and the regexp still has several other
limitations anyway).
Pushed to `master`.
Stefan
[Message part 3 (message/rfc822, inline)]
$ cat Makefile
external_robots:
mech-dump --links index.html|perl -nwle 'next unless m!http://[^/]+/!; print $$& . "robots.txt"'|xargs -n 1 wwwoffle
scp:
set -x -- $$(find * -type f -cmin -$${min-111}); for i do $${TEST} scp $$i $J:$J/$$i; done
$ emacs Makefile
The last line is mostly blue!
This bug report was last modified 71 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.