]> git.eshelyaron.com Git - emacs.git/commitdiff
Make OMake support slightly less expensive (bug#39595)
authorMattias Engdegård <mattiase@acm.org>
Sat, 15 Feb 2020 15:08:14 +0000 (16:08 +0100)
committerMattias Engdegård <mattiase@acm.org>
Mon, 17 Feb 2020 10:23:41 +0000 (11:23 +0100)
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
lisp/progmodes/compile.el
test/lisp/progmodes/compile-tests.el

index c465b4b94aa57f2d19f3fa3009f55ebcd7921d4f..ebce6a14d060bb18d950f8242fb36d9967bcfcbb 100644 (file)
@@ -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
index 21c3153b8a3cfef7e6959523417aece0b3ec2c23..455f181f5017003e5ea6d38c56b60ed6cc27cf95 100644 (file)
@@ -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)))
index c3cec01f8b06442922bee54c3e285393192f5c3d..75962566f14a839d5b21db4c27b7cb89233f67c1 100644 (file)
      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)))))