diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2020-02-15 16:08:14 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2020-02-17 11:23:41 +0100 |
commit | f765aad28baf946666eb225b97228038167fade8 (patch) | |
tree | 0c32ae8b0077c7dd5a80e657aae9796e60d140d4 | |
parent | 39410cfc5a7a2a721f9f50e36d2d48dc33980e08 (diff) | |
download | emacs-f765aad28baf946666eb225b97228038167fade8.tar.gz |
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).
-rw-r--r-- | etc/compilation.txt | 16 | ||||
-rw-r--r-- | lisp/progmodes/compile.el | 6 | ||||
-rw-r--r-- | 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 c465b4b94aa..ebce6a14d06 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 21c3153b8a3..455f181f501 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 c3cec01f8b0..75962566f14 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))))) |