summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2020-02-14 21:26:20 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2020-02-17 11:23:41 +0100
commit96a269d045091bcf7ed424a7a039385727f6e694 (patch)
treee00db489aab4770550cd116e7d21f169e5540205 /lisp
parentefc9d4fe3ef256e6c546c1690bf7dd968f1fdac8 (diff)
downloademacs-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.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/compile.el20
1 files changed, 16 insertions, 4 deletions
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\\)\\)\\)"