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 "\\([^
\n]+\\) : warning [A-Z]+[0-9]+:" 1 nil nil 1)
 (dotnet-error "\\([^
\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\\): \\(\\(?:[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)
 (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)
 (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
  `((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))

    ;; Gradle with kotlin-gradle-plugin (see
    ;; GradleStyleMessagerRenderer.kt in kotlin sources, see
    ;; https://youtrack.jetbrains.com/issue/KT-34683).
    (gradle-kotlin
     ,(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)

    (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)

    (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'.")