Variable: compilation-error-regexp-alist-alist

compilation-error-regexp-alist-alist is a variable defined in compile.el.gz.

Value

Large value
((cider
  "^\\(?:[^z-a]*?\\(?1:warning\\), \\(?2:[^z-a]*?\\):\\(?3:[[:digit:]-]+\\)\\(?::\\(?4:[[:digit:]-]+\\)\\)? - \\|\\(?:Syntax error reading source \\|\\(?:\\(?:Syntax\\|Unexpected\\) error \\)[^z-a]*?\\(?:\\(?:compil\\|macroexpand\\)ing \\)[^z-a]*?\\)at [^z-a]*?(\\(?2:[^z-a]*?\\):\\(?3:[[:digit:]-]+\\)\\(?::\\(?4:[[:digit:]-]+\\)\\)?)\\.\\)"
  2 3 4 (1))
 (dotnet-warning "[[:blank:]]*\\([^
\n]+\\) : warning [A-Z]+[0-9]+:"
		 1 nil nil 1)
 (dotnet-error "[[:blank:]]*\\([^
\n]+\\) : error [A-Z]+[0-9]+:" 1)
 (msbuild-warning
  "^[[:blank:]]*\\(?:[[:digit:]]+>\\)?\\([^(
\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): warning [[:alnum:]]+: [^
\n]+\\[\\([^]
\n]+\\)\\]$"
  csharp--compilation-error-file-resolve 2 3 1 nil
  (1 compilation-warning-face) (4 compilation-warning-face))
 (msbuild-error
  "^[[:blank:]]*\\(?:[[:digit:]]+>\\)?\\([^(
\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?): error [[:alnum:]]+: [^
\n]+\\[\\([^]
\n]+\\)\\]$"
  csharp--compilation-error-file-resolve 2 3 2 nil
  (1 compilation-error-face) (4 compilation-error-face))
 (xbuild-warning
  "^[[:blank:]]*\\(?:[[:digit:]]+>\\)?\\([^(
\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?\\(?:,\\([0-9]+\\)\\)*): warning [[:alnum:]]+: .+$"
  1 2 3 1)
 (xbuild-error
  "^[[:blank:]]*\\(?:[[:digit:]]+>\\)?\\([^(
\n)]+\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?\\(?:,\\([0-9]+\\)\\)*): error [[:alnum:]]+: .+$"
  1 2 3 2)
 (dotnet-testfail
  "[[:blank:]]+Stack Trace:\n[[:blank:]]+at [^\n]+ in \\([^\n]+\\):line \\([0-9]+\\)"
  1 2)
 (less-css
  "^\\(?:\\[31m\\)?\\([^\n]*\\|FileError:.*\n\\)\\(?:\\[39m\\[31m\\)? in \\(?:\\[39m\\)?\\([^ 
\n	]+\\)\\(?:\\[90m\\)?\\(?::\\| on line \\)\\([0-9]+\\)\\(?::\\|, column \\)\\([0-9]+\\):?\\(?:\\[39m\\)?"
  2 3 4 nil 1)
 (absoft
  "^\\(?:[Ee]rror on \\|[Ww]arning on\\( \\)\\)?[Ll]ine[        ]+\\([0-9]+\\)[         ]+of[   ]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:"
  3 2 nil (1))
 (ada "\\(warning: .*\\)? at \\([^ \n]+\\):\\([0-9]+\\)$" 2 3 nil (1))
 (aix " in line \\([0-9]+\\) of file \\([^ \n]+[^. \n]\\)\\.? " 2 1)
 (ant
  "^[   ]*\\(?:\\[[^] \n]+\\][  ]*\\)\\{1,2\\}\\(\\(?:[A-Za-z]:\\)?[^: \n]+\\):\\([0-9]+\\):\\(?:\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\):\\)?\\( warning\\)?"
  1 (2 . 4) (3 . 5) (6))
 (bash "^\\([^: \n	]+\\): line \\([0-9]+\\):" 1 2)
 (borland
  "^\\(?:Error\\|Warnin\\(g\\)\\) \\(?:[FEW][0-9]+ \\)?\\([a-zA-Z]?:?[^:(       \n]+\\) \\([0-9]+\\)\\(?:[)     ]\\|:[^0-9\n]\\)"
  2 3 nil (1))
 (python-tracebacks-and-caml
  "^[   ]*File \\(\"?\\)\\([^,\" \n	<>]+\\)\\1, lines? \\([0-9]+\\)-?\\([0-9]+\\)?\\(?:$\\|,\\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:\\)?\\([ \n]Warning\\(?: [0-9]+\\)?:\\)?\\)"
  2 (3 . 4) (5 . 6) (7))
 (cmake
  "^CMake \\(?:Error\\|\\(Warning\\)\\) at \\(.*\\):\\([1-9][0-9]*\\) ([^)]+):$"
  2 3 nil (1))
 (cmake-info "^  \\(?: \\*\\)?\\(.*\\):\\([1-9][0-9]*\\) ([^)]+)$" 1 2
	     nil 0)
 (comma
  "^\"\\([^,\" \n	]+\\)\", line \\([0-9]+\\)\\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?"
  1 2 3 (4))
 (msft
  "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ :(	\n][^:(	\n]*\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?) ?: \\(?:see declaration\\|\\(?:warnin\\(g\\)\\|[a-z ]+\\) C[0-9]+:\\)"
  2 3 4 (5))
 (edg-1
  "^\\([^ \n]+\\)(\\([0-9]+\\)): \\(?:error\\|warnin\\(g\\)\\|remar\\(k\\)\\)"
  1 2 nil (3 . 4))
 (edg-2 "at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$" 2 1 nil 0)
 (epc "^Error [0-9]+ at (\\([0-9]+\\):\\([^)\n]+\\))" 2 1)
 (ftnchek
  "\\(^Warning .*\\)? line[ \n]\\([0-9]+\\)[ \n]\\(?:col \\([0-9]+\\)[ \n]\\)?file \\([^ :;\n]+\\)"
  4 2 3 (1))
 (gradle-kotlin
  "^\\(?:\\(w\\)\\|\\([iv]\\)\\|e\\): file://\\(\\(?:[A-Za-z]:\\)?[^\n:]+\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\) "
  3 4 5 (1 . 2))
 (gradle-kotlin-legacy
  "^\\(?:\\(w\\)\\|\\([iv]\\)\\|e\\): \\(\\(?:[A-Za-z]:\\)?[^\n:]+\\): (\\([[:digit:]]+\\), \\([[:digit:]]+\\)): "
  3 4 5 (1 . 2))
 (gradle-android "^ *ERROR:\\(?1:[^\n:]+\\):\\(?2:[[:digit:]]+\\): " 1
		 2)
 (iar
  "^\"\\(.*\\)\",\\([0-9]+\\)\\s-+\\(?:Error\\|Warnin\\(g\\)\\)\\[[0-9]+\\]:"
  1 2 nil (3))
 (ibm
  "^\\([^( \n	]+\\)(\\([0-9]+\\):\\([0-9]+\\)) : \\(?:warnin\\(g\\)\\|informationa\\(l\\)\\)?"
  1 2 3 (4 . 5))
 (irix
  "^[-[:alnum:]_/ ]+: \\(?:\\(?:[sS]evere\\|[eE]rror\\|[wW]arnin\\(g\\)\\|[iI]nf\\(o\\)\\)[0-9 ]*: \\)?\\([^,\" \n	]+\\)\\(?:, line\\|:\\) \\([0-9]+\\):"
  3 4 nil (1 . 2))
 (java
  "^\\(?:[      ]+at \\|==[0-9]+== +\\(?:at\\|b\\(y\\)\\)\\).+(\\([^()\n]+\\):\\([0-9]+\\))$"
  2 3 nil (1))
 (javac
  "^\\(\\(?:[A-Za-z]:\\)?[^\n:]+\\):\\([0-9]+\\): \\(warning: \\)?.*\n.*\n *\\^$"
  1 2 current-column (3))
 (jikes-file "^\\(?:Found\\|Issued\\) .* compiling \"\\(.+\\)\":$" 1
	     nil nil 0)
 (maven
  "^\\(?:\\[\\(?:ERROR\\|\\(?1:WARNING\\)\\|\\(?2:INFO\\)\\)] \\)?\\(?3:[^\n []\\(?:[^\n :]\\| [^\n/-]\\|:[^\n []\\)*\\):\\[\\(?4:[[:digit:]]+\\),\\(?5:[[:digit:]]+\\)] "
  3 4 5 (1 . 2))
 (jikes-line
  "^ *\\([0-9]+\\)\\.[  ]+.*\n +\\(<-*>\n\\*\\*\\* \\(?:Error\\|Warnin\\(g\\)\\)\\)"
  nil 1 nil 2 0 (2 (compilation-face '(3))))
 (clang-include "^In file included from \\([^\n:]+\\):\\([0-9]+\\):$"
		1 2 nil 0)
 (gcc-include
  "^\\(?:In file included \\|                 \\|	\\)from \\([0-9]*[^0-9\n]\\(?:[^\n :]\\| [^-/\n]\\|:[^ \n]\\)*?\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?\\(?:\\([:,]\\|$\\)\\)?"
  1 2 3 (nil . 4))
 (ruby-Test::Unit
  "^    [[ ]?\\([^ (].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)
 (lua
  "^[^	\n]+?: \\([^	\n]+?\\):\\([0-9]+\\): .+\nstack traceback:\n	"
  1 2 nil 2 1)
 (lua-stack
  "^	\\(?:\\[C]:\\|\\([^	\n]+?\\):\\(?:\\([0-9]+\\):\\)?\\) in "
  1 2 nil 0 1)
 (gmake ": \\*\\*\\* \\[\\(\\(.+?\\):\\([0-9]+\\): .+\\)\\]" 2 3 nil 0
	1)
 (gnu
  "^\\(?:[[:alpha:]][.[:alnum:]-]+: ?\\| +|\\)?\\(?1:\\(?:[^	\n 0-9]\\|[0-9]+[^\n0-9]\\)\\(?:[^\n :]\\| [^\n/-]\\|:[^\n ]\\)*?\\): ?\\(?2:[0-9]+\\)\\(?:-\\(?4:[0-9]+\\)\\(?:\\.\\(?5:[0-9]+\\)\\)?\\|[.:]\\(?3:[0-9]+\\)\\(?:-\\(?:\\(?4:[0-9]+\\)\\.\\)?\\(?5:[0-9]+\\)\\)?\\)?:\\(?: *\\(?6:\\(?:FutureWarning\\|RuntimeWarning\\|W\\(?::\\|arning\\)\\|warning\\)\\)\\| *\\(?7:\\(?:I\\(?::\\|nfo\\(?:rmation\\(?:al\\)?\\)?\\)\\|Note\\|in\\(?:fo\\(?:rmation\\(?:al\\)?\\)?\\|stantiated from\\)\\|note\\|required from\\)\\|\\[ skipping .+ ]\\)\\| *\\(?:[Ee]rror\\)\\|[0-9]?\\(?:[^\n0-9]\\|$\\)\\|[0-9][0-9][0-9]\\)"
  1 (2 . 4) (3 . 5) (6 . 7))
 (cucumber
  "\\(?:^\\(?:cucumber\\(?: -p [^[:space:]]+\\)?\\|     \\)\\|#\\) \\([^(].*\\):\\([1-9][0-9]*\\)"
  1 2)
 (lcc
  "^\\(?:E\\|\\(W\\)\\), \\([^(\n]+\\)(\\([0-9]+\\),[   ]*\\([0-9]+\\)"
  2 3 4 (1))
 (makepp
  "^makepp\\(?:\\(?:: warning\\(:\\).*?\\|\\(: Scanning\\|: [LR]e?l?oading makefile\\|: Imported\\|log:.*?\\) \\|: .*?\\)`\\(\\(\\S +?\\)\\(?::\\([0-9]+\\)\\)?\\)['(]\\)"
  4 5 nil (1 . 2) 3
  (0
   (progn
     (save-match-data
       (compilation-parse-errors (match-end 0) (line-end-position)
				 `
				 ("`\\(\\(\\S +?\\)\\(?::\\([0-9]+\\)\\)?\\)['(]"
				  2 3 nil
				  ,(cond ((match-end 1) 1)
					 ((match-end 2) 0) (t 2))
				  1)))
     (end-of-line) nil)))
 (mips-1 " (\\([0-9]+\\)) in \\([^ \n]+\\)" 2 1)
 (mips-2 " in \\([^()\n ]+\\)(\\([0-9]+\\))$" 1 2)
 (omake "^\\*\\*\\* omake: file \\(.*\\) changed" 1 nil nil nil nil
	(0
	 (progn
	   (compilation--flush-file-structure (match-string 1)) nil)))
 (oracle
  "^\\(?:Semantic error\\|Error\\|PCC-[0-9]+:\\).* line \\([0-9]+\\)\\(?:\\(?:,\\| at\\)? column \\([0-9]+\\)\\)?\\(?:,\\| in\\| of\\)? file \\(.*?\\):?$"
  3 1 2)
 (perl
  " at \\([^ \n]+\\) line \\([0-9]+\\)\\(?:[,.]\\|$\\| during global destruction\\.$\\)"
  1 2)
 (php
  "\\(?:Parse\\|Fatal\\) error: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)"
  2 3 nil nil)
 (rust
  "^\\(?:\\(?1:error\\)\\|\\(?2:warning\\)\\|\\(?3:note\\)\\)\\(?:\\[[0-9A-Z]+]\\)?:.*\n +--> \\(?4:.+\\):\\(?5:[0-9]+\\):\\(?6:[0-9]+\\)"
  4 5 6 (2 . 3) nil (1 compilation-error-face)
  (2 compilation-warning-face) (3 compilation-info-face))
 (rxp
  "^\\(?:Error\\|Warnin\\(g\\)\\):.*\n.* line \\([0-9]+\\) char \\([0-9]+\\) of file://\\(.+\\)"
  4 2 3 (1))
 (shellcheck "^In \\(.+\\) line \\([0-9]+\\):" 1 2)
 (sparc-pascal-file
  "^\\w\\w\\w \\w\\w\\w +[0-3]?[0-9] +[0-2][0-9]:[0-5][0-9]:[0-5][0-9] [12][09][0-9][0-9] +\\(.*\\):$"
  1 nil nil 0)
 (sparc-pascal-line
  "^\\(\\(?:E\\|\\(w\\)\\) +[0-9]+\\) line \\([0-9]+\\) -  " nil 3 nil
  (2) nil (1 (compilation-face '(2))))
 (sparc-pascal-example
  "^ +\\([0-9]+\\) +.*\n\\(\\(?:e\\|\\(w\\)\\) [0-9]+\\)-+" nil 1 nil
  (3) nil (2 (compilation-face '(3))))
 (sun
  ": \\(?:ERROR\\|WARNIN\\(G\\)\\|REMAR\\(K\\)\\) \\(?:[[:alnum:] ]+, \\)?File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = \\([0-9]+\\)\\)?"
  3 4 5 (1 . 2))
 (sun-ada
  "^\\([^, \n	]+\\), line \\([0-9]+\\), char \\([0-9]+\\)[:., (-]" 1
  2 3)
 (watcom
  "^[   ]*\\(\\(?:[a-zA-Z]:\\)?[^ :(	\n][^:(	\n]*\\)(\\([0-9]+\\)): ?\\(?:\\(Error! E[0-9]+\\)\\|\\(Warning! W[0-9]+\\)\\):"
  1 2 nil (4))
 (4bsd
  "\\(?:^\\|::  \\|\\S ( \\)\\(/[^ \n	()]+\\)(\\([0-9]+\\))\\(?:: \\(warning:\\)?\\|$\\| ),\\)"
  1 2 nil (3))
 (gcov-file "^ *-: *\\(0\\):Source:\\(.+\\)$" 2 1 nil 0 nil)
 (gcov-header
  "^ *-: *\\(0\\):\\(?:Object\\|Graph\\|Data\\|Runs\\|Programs\\):.+$"
  nil 1 nil 0 nil)
 (gcov-nomark "^ *-: *\\([1-9]\\|[0-9]\\{2,\\}\\):.*$" nil 1 nil 0 nil
	      (0 'default) (1 compilation-line-face))
 (gcov-called-line "^ *\\([0-9]+\\): *\\([0-9]+\\):.*$" nil 2 nil 0
		   nil (0 'default) (1 compilation-info-face)
		   (2 compilation-line-face))
 (gcov-never-called "^ *\\(#####\\): *\\([0-9]+\\):.*$" nil 2 nil 2
		    nil (0 'default) (1 compilation-error-face)
		    (2 compilation-line-face))
 (perl--Pod::Checker
  "^\\*\\*\\* \\(?:ERROR\\|\\(WARNING\\)\\).* \\(?:at\\|on\\) line \\([0-9]+\\) \\(?:.* \\)?in file \\([^       \n]+\\)"
  3 2 nil (1))
 (perl--Test
  "^# Failed test [0-9]+ in \\([^       
\n]+\\) at line \\([0-9]+\\)"
  1 2)
 (perl--Test2
  "^\\(.*NOK.*\\)?# Test [0-9]+ got:.* (\\([^   
\n]+\\) at line \\([0-9]+\\)\\( fail #[0-9]+\\)?)"
  2 3)
 (perl--Test::Harness
  "^.*NOK.* \\([^       
\n]+\\) at line \\([0-9]+\\)" 1 2)
 (weblint "^\\([^       
\n(]+\\) (\\([0-9]+\\):\\([0-9]+\\)) " 1 2 3)
 (guile-file "^In \\(.+\\..+\\):\n" 1 nil nil 0)
 (guile-line "^ *\\([0-9]+\\): *\\([0-9]+\\)" nil 1 2)
 (typescript-tsc-plain
  "^\\([^	\n ()][^\n()]*\\)(\\([0-9]+\\),\\([0-9]+\\)): error [0-9A-Z]+: "
  1 2 3 2)
 (typescript-tsc-pretty
  "^\\([^	\n ()][^\n()]*\\):\\([0-9]+\\):\\([0-9]+\\) - error [0-9A-Z]+: "
  1 2 3 2))

Documentation

Alist of values for compilation-error-regexp-alist.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/compile.el.gz
;; If you make any changes to `compilation-error-regexp-alist-alist',
;; be sure to run the ERT test in test/lisp/progmodes/compile-tests.el.
;; emacs -batch -l compile-tests.el -f ert-run-tests-batch-and-exit

(defvar compilation-error-regexp-alist-alist
 (eval-when-compile
   ;; The order of this list is the default order of items in
   ;; `compilation-error-regexp-alist' which is also the matching order,
   ;; so don't add things in alphabetic order just out of habit.
   ;; FIXME: We should sort it by frequency (less often used ones in the back),
   ;; but individual patterns also have their own partial order.
  `((absoft
     "^\\(?:[Ee]rror on \\|[Ww]arning on\\( \\)\\)?[Ll]ine[ \t]+\\([0-9]+\\)[ \t]+\
of[ \t]+\"?\\([a-zA-Z]?:?[^\":\n]+\\)\"?:" 3 2 nil (1))

    (ada
     "\\(warning: .*\\)? at \\([^ \n]+\\):\\([0-9]+\\)$" 2 3 nil (1))

    (aix
     " in line \\([0-9]+\\) of file \\([^ \n]+[^. \n]\\)\\.? " 2 1)

    ;; Checkstyle task may report its own severity level: "[checkstyle] [ERROR] ..."
    ;; (see AuditEventDefaultFormatter.java in checkstyle sources).
    (ant
     "^[ \t]*\\(?:\\[[^] \n]+\\][ \t]*\\)\\{1,2\\}\\(\\(?:[A-Za-z]:\\)?[^: \n]+\\):\
\\([0-9]+\\):\\(?:\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\):\\)?\\( warning\\)?"
     1 (2 . 4) (3 . 5) (6))

    (bash
     "^\\([^: \n\t]+\\): line \\([0-9]+\\):" 1 2)

    (borland
     "^\\(?:Error\\|Warnin\\(g\\)\\) \\(?:[FEW][0-9]+ \\)?\
\\([a-zA-Z]?:?[^:( \t\n]+\\)\
 \\([0-9]+\\)\\(?:[) \t]\\|:[^0-9\n]\\)" 2 3 nil (1))

    (python-tracebacks-and-caml
     "^[ \t]*File \\(\"?\\)\\([^,\" \n\t<>]+\\)\\1, lines? \\([0-9]+\\)-?\\([0-9]+\\)?\\(?:$\\|,\
\\(?: characters? \\([0-9]+\\)-?\\([0-9]+\\)?:\\)?\\([ \n]Warning\\(?: [0-9]+\\)?:\\)?\\)"
     2 (3 . 4) (5 . 6) (7))

    (cmake
     "^CMake \\(?:Error\\|\\(Warning\\)\\) at \\(.*\\):\\([1-9][0-9]*\\) ([^)]+):$"
     2 3 nil (1))
    (cmake-info
     "^  \\(?: \\*\\)?\\(.*\\):\\([1-9][0-9]*\\) ([^)]+)$"
     1 2 nil 0)

    (comma
     "^\"\\([^,\" \n\t]+\\)\", line \\([0-9]+\\)\
\\(?:[(. pos]+\\([0-9]+\\))?\\)?[:.,; (-]\\( warning:\\|[-0-9 ]*(W)\\)?" 1 2 3 (4))

    (msft
     ;; Must be before edg-1, so that MSVC's longer messages are
     ;; considered before EDG.
     ;; The message may be a "warning", "error", or "fatal error" with
     ;; an error code, or "see declaration of" without an error code.
     "^ *\\([0-9]+>\\)?\\(\\(?:[a-zA-Z]:\\)?[^ :(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)\\(?:,\\([0-9]+\\)\\)?) ?\
: \\(?:see declaration\\|\\(?:warnin\\(g\\)\\|[a-z ]+\\) C[0-9]+:\\)"
     2 3 4 (5))

    (edg-1
     "^\\([^ \n]+\\)(\\([0-9]+\\)): \\(?:error\\|warnin\\(g\\)\\|remar\\(k\\)\\)"
     1 2 nil (3 . 4))
    (edg-2
     "at line \\([0-9]+\\) of \"\\([^ \n]+\\)\"$"
     2 1 nil 0)

    (epc
     "^Error [0-9]+ at (\\([0-9]+\\):\\([^)\n]+\\))" 2 1)

    (ftnchek
     "\\(^Warning .*\\)? line[ \n]\\([0-9]+\\)[ \n]\\(?:col \\([0-9]+\\)[ \n]\\)?file \\([^ :;\n]+\\)"
     4 2 3 (1))

    ;; Introduced in Kotlin 1.8 and current as of Kotlin 2.0.
    ;; Emitted by `GradleStyleMessagerRenderer' in Kotlin sources.
    (gradle-kotlin
     ,(rx bol
          (| (group "w")                ; 1: warning
             (group (in "iv"))          ; 2: info
             "e")                       ; error
          ": "
          "file://"
          (group                        ; 3: file
           (? (in "A-Za-z") ":")
           (+ (not (in "\n:"))))
          ":"
          (group (+ digit))             ; 4: line
          ":"
          (group (+ digit))             ; 5: column
          " ")
     3 4 5 (1 . 2))

    ;; Obsoleted in Kotlin 1.8 Beta, released on Nov 15, 2022.
    ;; See commit `93a0cdbf973' in Kotlin Git repository.
    (gradle-kotlin-legacy
     ,(rx bol
          (| (group "w")                ; 1: warning
             (group (in "iv"))          ; 2: info
             "e")                       ; error
          ": "
          (group                        ; 3: file
           (? (in "A-Za-z") ":")
           (+ (not (in "\n:"))))
          ": ("
          (group (+ digit))             ; 4: line
          ", "
          (group (+ digit))             ; 5: column
          "): ")
     3 4 5 (1 . 2))

    (gradle-android
     ,(rx bol (* " ") "ERROR:"
          (group-n 1                    ; file
                   (+ (not (in ":\n"))))
          ":"
          (group-n 2 (+ digit))         ; line
          ": ")
     1 2)

   (iar
     "^\"\\(.*\\)\",\\([0-9]+\\)\\s-+\\(?:Error\\|Warnin\\(g\\)\\)\\[[0-9]+\\]:"
     1 2 nil (3))

    (ibm
     "^\\([^( \n\t]+\\)(\\([0-9]+\\):\\([0-9]+\\)) :\
 \\(?:warnin\\(g\\)\\|informationa\\(l\\)\\)?" 1 2 3 (4 . 5))

    ;; fixme: should be `mips'
    (irix
     "^[-[:alnum:]_/ ]+: \\(?:\\(?:[sS]evere\\|[eE]rror\\|[wW]arnin\\(g\\)\\|[iI]nf\\(o\\)\\)[0-9 ]*: \\)?\
\\([^,\" \n\t]+\\)\\(?:, line\\|:\\) \\([0-9]+\\):" 3 4 nil (1 . 2))

    (java
     "^\\(?:[ \t]+at \\|==[0-9]+== +\\(?:at\\|b\\(y\\)\\)\\).+(\\([^()\n]+\\):\\([0-9]+\\))$" 2 3 nil (1))

    (javac
     ,(rx bol
          (group                        ; file
           (? (in "A-Za-z") ":")
           (+ (not (in "\n:"))))
          ":"
          (group (+ (in "0-9")))        ; line number
          ": "
          (? (group "warning: "))       ; type (optional)
          (* nonl) "\n"                 ; message
          (* nonl) "\n"                 ; source line containing error
          (* " ") "^"                   ; caret line; ^ marks error
          eol)
     1 2
     ,#'current-column
     (3))

    (jikes-file
     "^\\(?:Found\\|Issued\\) .* compiling \"\\(.+\\)\":$" 1 nil nil 0)

    (maven
     ;; Maven is a popular free software build tool for Java.
     ,(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\\)\\)\\)"
     nil 1 nil 2 0
     (2 (compilation-face '(3))))

    (clang-include
     ,(rx bol "In file included from "
          (group (+ (not (any ?\n ?:)))) ?:
          (group (+ (any (?0 . ?9)))) ?:
          eol)
     1 2 nil 0)

    (gcc-include
     "^\\(?:In file included \\|                 \\|\t\\)from \
\\([0-9]*[^0-9\n]\\(?:[^\n :]\\| [^-/\n]\\|:[^ \n]\\)*?\\):\
\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?\\(?:\\([:,]\\|$\\)\\)?"
     1 2 3 (nil . 4))

    (ruby-Test::Unit
     "^    [[ ]?\\([^ (].*\\):\\([1-9][0-9]*\\)\\(\\]\\)?:in " 1 2)

    ;; Tested with Lua 5.1, 5.2, 5.3, 5.4, and LuaJIT 2.1.
    (lua
     ,(rx bol
          (+? (not (in "\t\n")))
          ": "
          (group (+? (not (in "\t\n"))))
          ":"
          (group (+ (in "0-9")))
          ": "
          (+ nonl)
          "\nstack traceback:\n\t")
     1 2 nil 2 1)
    (lua-stack
     ,(rx bol "\t"
          (| "[C]:"
             (: (group (+? (not (in "\t\n"))))
                ":"
                (? (group (+ (in "0-9")))
                   ":")))
          " in ")
     1 2 nil 0 1)

    (gmake
     ;; Set GNU make error messages as INFO level.
     ;; It starts with the name of the make program which is variable,
     ;; so don't try to match it.
     ": \\*\\*\\* \\[\\(\\(.+?\\):\\([0-9]+\\): .+\\)\\]" 2 3 nil 0 1)

    (gnu
     ;; The `gnu' message syntax is
     ;;   [PROGRAM:]FILE:LINE[-ENDLINE]:[COL[-ENDCOL]:] MESSAGE
     ;; or
     ;;   [PROGRAM:]FILE:LINE[.COL][-ENDLINE[.ENDCOL]]: MESSAGE
     ,(rx
       bol
       ;; Match an optional program name which is used for
       ;; non-interactive programs other than compilers (e.g. the
       ;; "jade:" entry in compilation.txt).
       (? (| (: alpha (+ (in ?. ?- alnum)) ":" (? " "))
             ;; Skip indentation generated by GCC's -fanalyzer.
             (: (+ " ") "|")))

       ;; File name group.
       (group-n 1
         ;; Avoid matching the file name as a program in the pattern
         ;; above by disallowing file names entirely composed of digits.
         ;; Do not allow file names beginning with a space.
         (| (not (in "0-9" "\n\t "))
            (: (+ (in "0-9"))
               (not (in "0-9" "\n"))))
         ;; A file name can be composed of any non-newline char, but
         ;; rule out some valid but unlikely cases, such as a trailing
         ;; space or a space followed by a -, or a colon followed by a
         ;; space.
         (*? (| (not (in "\n :"))
                (: " " (not (in ?- "/\n")))
                (: ":" (not (in " \n"))))))
       ":" (? " ")

       ;; Line number group.
       (group-n 2 (+ (in "0-9")))
       (? (| (: "-"
                (group-n 4 (+ (in "0-9")))               ; ending line
                (? "." (group-n 5 (+ (in "0-9")))))      ; ending column
             (: (in ".:")
                (group-n 3 (+ (in "0-9")))               ; starting column
                (? "-"
                   (? (group-n 4 (+ (in "0-9"))) ".")    ; ending line
                   (group-n 5 (+ (in "0-9")))))))        ; ending column
       ":"
       (| (: (* " ")
             (group-n 6 (| "FutureWarning"
                           "RuntimeWarning"
                           "Warning" "warning"
                           "W:")))
          (: (* " ")
             (group-n 7
               (| (| "Info" "info"
                     "Information" "information"
                     "Informational" "informational"
                     "I:"
                     "instantiated from"
                     "required from"
                     "Note" "note")
                  (: "[ skipping " (+ nonl) " ]"))))
          (: (* " ")
             (| "Error" "error"))

          ;; Avoid matching time stamps on the form "HH:MM:SS" where
          ;; MM is interpreted as a line number by trying to rule out
          ;; messages where the text after the line number starts with
          ;; a 2-digit number.
          (: (? (in "0-9"))
             (| (not (in "0-9\n"))
                eol))
          (: (in "0-9") (in "0-9") (in "0-9"))))
     1 (2 . 4) (3 . 5) (6 . 7))

    (cucumber
     ,(rx (| (: bol
                (| (: "cucumber" (? " -p " (+ (not space))))
                   "     "))
             "#")
          " "
          (group (not "(") (* nonl))          ; file
          ":"
          (group (in "1-9") (* (in "0-9"))))  ; line
     1 2)

    (lcc
     "^\\(?:E\\|\\(W\\)\\), \\([^(\n]+\\)(\\([0-9]+\\),[ \t]*\\([0-9]+\\)"
     2 3 4 (1))

    (makepp
     "^makepp\\(?:\\(?:: warning\\(:\\).*?\\|\\(: Scanning\\|: [LR]e?l?oading makefile\\|: Imported\\|log:.*?\\) \\|: .*?\\)\
`\\(\\(\\S +?\\)\\(?::\\([0-9]+\\)\\)?\\)['(]\\)"
     4 5 nil (1 . 2) 3
     (0 (progn (save-match-data
                 (compilation-parse-errors
                  (match-end 0) (line-end-position)
                  `("`\\(\\(\\S +?\\)\\(?::\\([0-9]+\\)\\)?\\)['(]"
                    2 3 nil
                    ,(cond ((match-end 1) 1) ((match-end 2) 0) (t 2))
                    1)))
               (end-of-line)
               nil)))

    ;; Should be lint-1, lint-2 (SysV lint)
    (mips-1
     " (\\([0-9]+\\)) in \\([^ \n]+\\)" 2 1)
    (mips-2
     " in \\([^()\n ]+\\)(\\([0-9]+\\))$" 1 2)

    (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
     ;; 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.
     (0 (progn (compilation--flush-file-structure (match-string 1))
               nil)))

    (oracle
     "^\\(?:Semantic error\\|Error\\|PCC-[0-9]+:\\).* line \\([0-9]+\\)\
\\(?:\\(?:,\\| at\\)? column \\([0-9]+\\)\\)?\
\\(?:,\\| in\\| of\\)? file \\(.*?\\):?$"
     3 1 2)

    ;; "during global destruction": This comes out under "use
    ;; warnings" in recent perl when breaking circular references
    ;; during program or thread exit.
    (perl
     " at \\([^ \n]+\\) line \\([0-9]+\\)\\(?:[,.]\\|$\\| \
during global destruction\\.$\\)" 1 2)

    (php
     "\\(?:Parse\\|Fatal\\) error: \\(.*\\) in \\(.*\\) on line \\([0-9]+\\)"
     2 3 nil nil)

    (rust
     ,(rx bol (or (group-n 1 "error") (group-n 2 "warning") (group-n 3 "note"))
          (? "[" (+ (in "A-Z" "0-9")) "]") ":" (* nonl)
          "\n" (+ " ") "-->"
          " " (group-n 4 (+ nonl))        ; file
          ":" (group-n 5 (+ (in "0-9")))  ; line
          ":" (group-n 6 (+ (in "0-9")))) ; column
     4 5 6 (2 . 3)
     nil
     (1 compilation-error-face)
     (2 compilation-warning-face)
     (3 compilation-info-face))

    (rxp
     "^\\(?:Error\\|Warnin\\(g\\)\\):.*\n.* line \\([0-9]+\\) char\
 \\([0-9]+\\) of file://\\(.+\\)"
     4 2 3 (1))

    (shellcheck
     "^In \\(.+\\) line \\([0-9]+\\):" 1 2)

    (sparc-pascal-file
     "^\\w\\w\\w \\w\\w\\w +[0-3]?[0-9] +[0-2][0-9]:[0-5][0-9]:[0-5][0-9]\
 [12][09][0-9][0-9] +\\(.*\\):$"
     1 nil nil 0)
    (sparc-pascal-line
     "^\\(\\(?:E\\|\\(w\\)\\) +[0-9]+\\) line \\([0-9]+\\) -  "
     nil 3 nil (2) nil (1 (compilation-face '(2))))
    (sparc-pascal-example
     "^ +\\([0-9]+\\) +.*\n\\(\\(?:e\\|\\(w\\)\\) [0-9]+\\)-+"
     nil 1 nil (3) nil (2 (compilation-face '(3))))

    (sun
     ": \\(?:ERROR\\|WARNIN\\(G\\)\\|REMAR\\(K\\)\\) \\(?:[[:alnum:] ]+, \\)?\
File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = \\([0-9]+\\)\\)?"
     3 4 5 (1 . 2))

    (sun-ada
     "^\\([^, \n\t]+\\), line \\([0-9]+\\), char \\([0-9]+\\)[:., (-]" 1 2 3)

    (watcom
     "^[ \t]*\\(\\(?:[a-zA-Z]:\\)?[^ :(\t\n][^:(\t\n]*\\)(\\([0-9]+\\)): ?\
\\(?:\\(Error! E[0-9]+\\)\\|\\(Warning! W[0-9]+\\)\\):"
     1 2 nil (4))

    (4bsd
     "\\(?:^\\|::  \\|\\S ( \\)\\(/[^ \n\t()]+\\)(\\([0-9]+\\))\
\\(?:: \\(warning:\\)?\\|$\\| ),\\)" 1 2 nil (3))

    (gcov-file
     "^ *-: *\\(0\\):Source:\\(.+\\)$"
     2 1 nil 0 nil)
    (gcov-header
     "^ *-: *\\(0\\):\\(?:Object\\|Graph\\|Data\\|Runs\\|Programs\\):.+$"
     nil 1 nil 0 nil)
    ;; Underlines over all lines of gcov output are too uncomfortable to read.
    ;; However, hyperlinks embedded in the lines are useful.
    ;; So I put default face on the lines; and then put
    ;; compilation-*-face by manually to eliminate the underlines.
    ;; The hyperlinks are still effective.
    (gcov-nomark
     "^ *-: *\\([1-9]\\|[0-9]\\{2,\\}\\):.*$"
     nil 1 nil 0 nil
     (0 'default)
     (1 compilation-line-face))
    (gcov-called-line
     "^ *\\([0-9]+\\): *\\([0-9]+\\):.*$"
     nil 2 nil 0 nil
     (0 'default)
     (1 compilation-info-face) (2 compilation-line-face))
    (gcov-never-called
     "^ *\\(#####\\): *\\([0-9]+\\):.*$"
     nil 2 nil 2 nil
     (0 'default)
     (1 compilation-error-face) (2 compilation-line-face))

    (perl--Pod::Checker
     ;; podchecker error messages, per Pod::Checker.
     ;; The style is from the Pod::Checker::poderror() function, eg.
     ;; *** ERROR: Spurious text after =cut at line 193 in file foo.pm
     ;;
     ;; Plus end_pod() can give "at line EOF" instead of a
     ;; number, so for that match "on line N" which is the
     ;; originating spot, eg.
     ;; *** ERROR: =over on line 37 without closing =back at line EOF in file bar.pm
     ;;
     ;; Plus command() can give both "on line N" and "at line N";
     ;; the latter is desired and is matched because the .* is
     ;; greedy.
     ;; *** ERROR: =over on line 1 without closing =back (at head1) at line 3 in file x.pod
     ;;
     "^\\*\\*\\* \\(?:ERROR\\|\\(WARNING\\)\\).* \\(?:at\\|on\\) line \
\\([0-9]+\\) \\(?:.* \\)?in file \\([^ \t\n]+\\)"
     3 2 nil (1))
    (perl--Test
     ;; perl Test module error messages.
     ;; Style per the ok() function "$context", eg.
     ;; # Failed test 1 in foo.t at line 6
     ;;
     "^# Failed test [0-9]+ in \\([^ \t\r\n]+\\) at line \\([0-9]+\\)"
     1 2)
    (perl--Test2
     ;; Or when comparing got/want values, with a "fail #n" if repeated
     ;; # Test 2 got: "xx" (t-compilation-perl-2.t at line 10)
     ;; # Test 3 got: "xx" (t-compilation-perl-2.t at line 10 fail #2)
     ;;
     ;; And under Test::Harness they're preceded by progress stuff with
     ;; \r and "NOK",
     ;; ... NOK 1# Test 1 got: "1234" (t/foo.t at line 46)
     ;;
     "^\\(.*NOK.*\\)?# Test [0-9]+ got:.* (\\([^ \t\r\n]+\\) at line \
\\([0-9]+\\)\\( fail #[0-9]+\\)?)"
     2 3)
    (perl--Test::Harness
     ;; perl Test::Harness output, eg.
     ;; NOK 1# Test 1 got: "1234" (t/foo.t at line 46)
     ;;
     ;; Test::Harness is slightly designed for tty output, since
     ;; it prints CRs to overwrite progress messages, but if you
     ;; run it in with M-x compile this pattern can at least step
     ;; through the failures.
     ;;
     "^.*NOK.* \\([^ \t\r\n]+\\) at line \\([0-9]+\\)"
     1 2)
    (weblint
     ;; The style comes from HTML::Lint::Error::as_string(), eg.
     ;; index.html (13:1) Unknown element <fdjsk>
     ;;
     ;; The pattern only matches filenames without spaces, since that
     ;; should be usual and should help reduce the chance of a false
     ;; match of a message from some unrelated program.
     ;;
     ;; This message style is quite close to the "ibm" entry which is
     ;; for IBM C, though that ibm bit doesn't put a space after the
     ;; filename.
     ;;
     "^\\([^ \t\r\n(]+\\) (\\([0-9]+\\):\\([0-9]+\\)) "
     1 2 3)

    ;; Guile compilation yields file-headers in the following format:
    ;;
    ;;   In sourcefile.scm:
    ;;
    ;; We need to catch those, but we also need to be aware that Emacs
    ;; byte-compilation yields compiler headers in similar form of
    ;; those:
    ;;
    ;;   In toplevel form:
    ;;   In end of data:
    ;;
    ;; We want to catch the Guile file-headers but not the Emacs
    ;; byte-compilation headers, because that will cause next-error
    ;; and prev-error to break, because the files "toplevel form" and
    ;; "end of data" does not exist.
    ;;
    ;; To differentiate between these two cases, we require that the
    ;; file-match must always contain an extension.
    ;;
    ;; We should also only treat this as "info", not "error", because
    ;; we do not know what lines will follow.
    (guile-file "^In \\(.+\\..+\\):\n" 1 nil nil 0)
    (guile-line "^ *\\([0-9]+\\): *\\([0-9]+\\)" nil 1 2)

    ;; Typescript compilation prior to tsc version 2.7, "plain" format:
    ;; greeter.ts(30,12): error TS2339: Property 'foo' does not exist.
    (typescript-tsc-plain
     ,(rx bol
          (group (not (in " \t\n()"))   ; 1: file
                 (* (not (in "\n()"))))
          "("
          (group (+ (in "0-9")))        ; 2: line
          ","
          (group (+ (in "0-9")))        ; 3: column
          "): error "
          (+ (in "0-9A-Z"))             ; error code
          ": ")
     1 2 3 2)

    ;; Typescript compilation after tsc version 2.7, "pretty" format:
    ;; src/resources/document.ts:140:22 - error TS2362: something.
    (typescript-tsc-pretty
     ,(rx bol
          (group (not (in " \t\n()"))   ; 1: file
                 (* (not (in "\n()"))))
          ":"
          (group (+ (in "0-9")))        ; 2: line
          ":"
          (group (+ (in "0-9")))        ; 3: column
          " - error "
          (+ (in "0-9A-Z"))             ; error code
          ": ")
     1 2 3 2)
    ))
  "Alist of values for `compilation-error-regexp-alist'.")