diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2020-02-14 21:26:20 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2020-02-17 11:23:41 +0100 |
commit | 96a269d045091bcf7ed424a7a039385727f6e694 (patch) | |
tree | e00db489aab4770550cd116e7d21f169e5540205 | |
parent | efc9d4fe3ef256e6c546c1690bf7dd968f1fdac8 (diff) | |
download | emacs-96a269d045091bcf7ed424a7a039385727f6e694.tar.gz |
Speed up 'maven' compilation error message regexp
Anchor the regexp at line-start to prevent quadratic behaviour when
it doesn't match (bug#39595). It's unclear whether the type tag, like
[ERROR], is always present; we keep it optional just in case.
* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
Rewrite 'maven' regexp, using rx for clarity.
* etc/compilation.txt (maven): More examples.
* test/lisp/progmodes/compile-tests.el
(compile-tests--test-regexps-data): No leading spaces; they seems to
stem from a misunderstanding in bug#11517.
-rw-r--r-- | etc/compilation.txt | 2 | ||||
-rw-r--r-- | lisp/progmodes/compile.el | 20 | ||||
-rw-r--r-- | test/lisp/progmodes/compile-tests.el | 2 |
3 files changed, 19 insertions, 5 deletions
diff --git a/etc/compilation.txt b/etc/compilation.txt index a597216daaf..c465b4b94aa 100644 --- a/etc/compilation.txt +++ b/etc/compilation.txt @@ -341,6 +341,8 @@ makepp: bla bla `/foo/bar.c' and `/foo/bar.h' symbol: maven FooBar.java:[111,53] no interface expected here +[ERROR] /Users/cinsk/hello.java:[651,96] ';' expected +[WARNING] /foo/bar/Test.java:[27,43] unchecked conversion * MIPS lint; looks good for SunPro lint also diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index 48ac85a73b7..9959c829dfd 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -268,12 +268,24 @@ of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1)) (jikes-file "^\\(?:Found\\|Issued\\) .* compiling \"\\(.+\\)\":$" 1 nil nil 0) - - ;; This used to be pathologically slow on long lines (Bug#3441), - ;; due to matching filenames via \\(.*?\\). This might be faster. (maven ;; Maven is a popular free software build tool for Java. - "\\(\\[WARNING\\] *\\)?\\([^ \n]\\(?:[^\n :]\\| [^-/\n]\\|:[^ \n]\\)*?\\):\\[\\([0-9]+\\),\\([0-9]+\\)\\] " 2 3 4 (1)) + ,(rx bol + ;; It is unclear whether the initial [type] tag is always present. + (? "[" + (or "ERROR" (group-n 1 "WARNING") (group-n 2 "INFO")) + "] ") + (group-n 3 ; File + (not (any "\n [")) + (* (or (not (any "\n :")) + (: " " (not (any "\n/-"))) + (: ":" (not (any "\n [")))))) + ":[" + (group-n 4 (+ digit)) ; Line + "," + (group-n 5 (+ digit)) ; Column + "] ") + 3 4 5 (1 . 2)) (jikes-line "^ *\\([0-9]+\\)\\.[ \t]+.*\n +\\(<-*>\n\\*\\*\\* \\(?:Error\\|Warnin\\(g\\)\\)\\)" diff --git a/test/lisp/progmodes/compile-tests.el b/test/lisp/progmodes/compile-tests.el index 350b4eb400f..c3cec01f8b0 100644 --- a/test/lisp/progmodes/compile-tests.el +++ b/test/lisp/progmodes/compile-tests.el @@ -242,7 +242,7 @@ ;; maven ("FooBar.java:[111,53] no interface expected here" 1 53 111 "FooBar.java" 2) - (" [ERROR] /Users/cinsk/hello.java:[651,96] ';' expected" + ("[ERROR] /Users/cinsk/hello.java:[651,96] ';' expected" 15 96 651 "/Users/cinsk/hello.java" 2) ;Bug#11517. ("[WARNING] /foo/bar/Test.java:[27,43] unchecked conversion" 11 43 27 "/foo/bar/Test.java" 1) ;Bug#20556 |