[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-27 f765aad 3/3: Make OMake support slightly less expensive (bug#39
From: |
Mattias Engdegård |
Subject: |
emacs-27 f765aad 3/3: Make OMake support slightly less expensive (bug#39595) |
Date: |
Mon, 17 Feb 2020 05:30:37 -0500 (EST) |
branch: emacs-27
commit f765aad28baf946666eb225b97228038167fade8
Author: Mattias Engdegård <address@hidden>
Commit: Mattias Engdegård <address@hidden>
Make OMake support slightly less expensive (bug#39595)
When run with -p or -P, OMake regurgitates error messages that
prevented further progress, indented by 6 spaces. Use that fact
to ameliorate the modification done to other error message regexps.
* lisp/progmodes/compile.el (compilation-parse-errors):
When 'omake' is enabled, allow error messages to be indented by 0 or 6
spaces instead of any number of spaces, to avoid pathological
behaviour.
(compilation-error-regexp-alist-alist): Anchor the 'omake' pattern to
bol for performance. Repair the 'ruby-Test::Unit' pattern, which
relied on the previously over-generous 'omake' hack.
* etc/compilation.txt (OMake): Add examples.
* test/lisp/progmodes/compile-tests.el (compile-tests--test-regexps-data)
(compile-test-error-regexps): Add test for OMake (indented error).
---
etc/compilation.txt | 16 ++++++++++++++++
lisp/progmodes/compile.el | 6 +++---
test/lisp/progmodes/compile-tests.el | 5 ++++-
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/etc/compilation.txt b/etc/compilation.txt
index c465b4b..ebce6a1 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -384,6 +384,22 @@ symbol: watcom
..\src\ctrl\lister.c(120): Warning! W201: Unreachable code
+* OMake
+
+symbol: omake
+
+When using in -p or -P mode, OMake will detect changes to files and
+report critical build errors indented by 6 spaces.
+
+*** omake: file alpha.c changed
+*** omake: targets were not rebuilt because of errors:
+ alpha.o
+ depends on: alpha.c
+ - build . alpha.o
+ + cc -I. -c -o alpha.o alpha.c
+ alpha.c:5:15: error: expected ';' after expression
+
+
* Oracle pro*c
symbol: oracle
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 21c3153..455f181 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -306,7 +306,7 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
1 2 3 (4 . 5))
(ruby-Test::Unit
- "^[\t ]*\\[\\([^(].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)
+ "^ [[ ]?\\([^ (].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)
(gmake
;; Set GNU make error messages as INFO level.
@@ -406,7 +406,7 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))
(omake
;; "omake -P" reports "file foo changed"
;; (useful if you do "cvs up" and want to see what has changed)
- "omake: file \\(.*\\) changed" 1 nil nil nil nil
+ "^\\*\\*\\* omake: file \\(.*\\) changed" 1 nil nil nil nil
;; FIXME-omake: This tries to prevent reusing pre-existing markers
;; for subsequent messages, since those messages's line numbers
;; are about another version of the file.
@@ -1453,7 +1453,7 @@ to `compilation-error-regexp-alist' if RULES is nil."
((not (memq 'omake compilation-error-regexp-alist)) nil)
((string-match "\\`\\([^^]\\|\\^\\( \\*\\|\\[\\)\\)" pat)
nil) ;; Not anchored or anchored but already allows empty spaces.
- (t (setq pat (concat "^ *" (substring pat 1)))))
+ (t (setq pat (concat "^\\(?: \\)?" (substring pat 1)))))
(if (consp file) (setq fmt (cdr file) file (car file)))
(if (consp line) (setq end-line (cdr line) line (car line)))
diff --git a/test/lisp/progmodes/compile-tests.el
b/test/lisp/progmodes/compile-tests.el
index c3cec01..7596256 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -269,6 +269,9 @@
1 nil 109 "..\\src\\ctrl\\lister.c")
("..\\src\\ctrl\\lister.c(120): Warning! W201: Unreachable code"
1 nil 120 "..\\src\\ctrl\\lister.c")
+ ;; omake
+ (" alpha.c:5:15: error: expected ';' after expression"
+ 1 15 5 "alpha.c")
;; oracle
("Semantic error at line 528, column 5, file erosacqdb.pc:"
1 5 528 "erosacqdb.pc")
@@ -428,7 +431,7 @@ The test data is in `compile-tests--test-regexps-data'."
(compilation-num-warnings-found 0)
(compilation-num-infos-found 0))
(mapc #'compile--test-error-line compile-tests--test-regexps-data)
- (should (eq compilation-num-errors-found 92))
+ (should (eq compilation-num-errors-found 93))
(should (eq compilation-num-warnings-found 36))
(should (eq compilation-num-infos-found 26)))))