]> code.delx.au - gnu-emacs/commitdiff
(compilation-error-regexp-alist-alist): Tone down guile-file
authorJostein Kjønigsen <jostein@secure.kjonigsen.net>
Sun, 20 Sep 2015 19:46:28 +0000 (15:46 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 20 Sep 2015 19:46:28 +0000 (15:46 -0400)
* lisp/progmodes/compile.el (compilation-error-regexp-alist-alist):
Make guile-file a bit less enthusiastic (bug#21496).

Copyright-paperwork-exempt: yes

lisp/progmodes/compile.el

index f9c097e00ecdb3546db48cd3ac136ed2e488228e..9cb367aa6336b3eb236ccbb4ce6e9d8bead4d2a9 100644 (file)
@@ -477,7 +477,29 @@ File = \\(.+\\), Line = \\([0-9]+\\)\\(?:, Column = \\([0-9]+\\)\\)?"
      ;;
      "^\\([^ \t\r\n(]+\\) (\\([0-9]+\\):\\([0-9]+\\)) "
      1 2 3)
-    (guile-file "^In \\(.+\\):\n" 1)
+
+    ;; 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)
     )
   "Alist of values for `compilation-error-regexp-alist'.")