From: Filipp Gunbin <fgunbin@fastmail.fm>
To: emacs-devel@gnu.org
Subject: Review request: javac in compilation-error-regexp-alist-alist
Date: Thu, 27 Feb 2020 21:17:05 +0300 [thread overview]
Message-ID: <m2blpjzyhq.fsf@fastmail.fm> (raw)
Hi, I've made an attempt to teach compilation-parse-errors to handle
javac output.
We don't have column number there in the compiler output, and it's very
inconvenient, so I'm deducing it from where the visual pointer ("^")
points.
Is this approach fine, or too dirty to be committed?
BTW I fixed a small bug where we check whether file/line/col is consp,
and at the same time allow it to be function, so lambda/closure will
erroneously match.
Besides that, `java' symbol in the said list is a misnomer: it handles
java exceptions (why? we would never normally have them in the
compilation output), and valgrind output. Looks like we should just
rename it to `valgrind'.
Thanks,
Filipp
diff --git a/etc/compilation.txt b/etc/compilation.txt
index ebce6a14d0..ed2eecd778 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -237,6 +237,19 @@ Register 6 contains wrong type
==1332== by 0x8008621: main (vtest.c:180)
+* javac Java compiler
+
+symbol: javac
+
+Should also work when compiling Java with Gradle. We don't have
+column number, but we try to deduce it from position of "^".
+
+Test.java:5: error: ';' expected
+ foo foo
+ ^
+1 error
+
+
* IBM jikes
symbols: jikes-file jikes-line
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 455f181f50..890b04864a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -265,6 +265,23 @@ compilation-error-regexp-alist-alist
(java
"^\\(?:[ \t]+at \\|==[0-9]+== +\\(?:at\\|b\\(y\\)\\)\\).+(\\([^()\n]+\\):\\([0-9]+\\))$" 2 3 nil (1))
+ (javac
+ ,(concat
+ ;; line1
+ "^\\(\\(?:[A-Za-z]:\\)?[^:\n]+\\): *" ;file
+ "\\([0-9]+\\): *" ;line
+ "\\(?:error:\\|\\(warning\\):\\)?[^\n]*\n" ;type (optional) and message
+ ;; line2: source line containing error
+ "[^\n]*\n"
+ ;; line3: single "^" under error position in line2
+ "[[:space:]]*\\^\n")
+ 1 2
+ (lambda ()
+ (save-excursion
+ (backward-char 2) ; move back over "^\n"
+ (current-column)))
+ (3))
+
(jikes-file
"^\\(?:Found\\|Issued\\) .* compiling \"\\(.+\\)\":$" 1 nil nil 0)
@@ -1455,9 +1472,15 @@ compilation-parse-errors
nil) ;; Not anchored or anchored but already allows empty spaces.
(t (setq pat (concat "^\\(?: \\)?" (substring pat 1)))))
- (if (consp file) (setq fmt (cdr file) file (car file)))
- (if (consp line) (setq end-line (cdr line) line (car line)))
- (if (consp col) (setq end-col (cdr col) col (car col)))
+ (if (and (consp file) (not (functionp file)))
+ (setq fmt (cdr file)
+ file (car file)))
+ (if (and (consp line) (not (functionp line)))
+ (setq end-line (cdr line)
+ line (car line)))
+ (if (and (consp col) (not (functionp col)))
+ (setq end-col (cdr col)
+ col (car col)))
(unless (or (null (nth 5 item)) (integerp (nth 5 item)))
(error "HYPERLINK should be an integer: %s" (nth 5 item)))
diff --git a/test/lisp/progmodes/compile-tests.el b/test/lisp/progmodes/compile-tests.el
index 75962566f1..81452c1c38 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -176,6 +176,9 @@ compile-tests--test-regexps-data
13 nil 217 "../src/Lib/System.cpp")
("==1332== by 0x8008621: main (vtest.c:180)"
13 nil 180 "vtest.c")
+ ;; javac
+ ("/src/Test.java:5: ';' expected\n foo foo\n ^\n" 1 15 5 "/src/Test.java" 2)
+ ("e:\\src\\Test.java: 7: warning: ';' expected\n foo foo\n ^\n" 1 10 7 "e:\\src\\Test.java" 1)
;; jikes-file jikes-line
("Found 2 semantic errors compiling \"../javax/swing/BorderFactory.java\":"
1 nil nil "../javax/swing/BorderFactory.java")
@@ -431,8 +434,8 @@ compile-test-error-regexps
(compilation-num-warnings-found 0)
(compilation-num-infos-found 0))
(mapc #'compile--test-error-line compile-tests--test-regexps-data)
- (should (eq compilation-num-errors-found 93))
- (should (eq compilation-num-warnings-found 36))
+ (should (eq compilation-num-errors-found 94))
+ (should (eq compilation-num-warnings-found 37))
(should (eq compilation-num-infos-found 26)))))
(ert-deftest compile-test-grep-regexps ()
next reply other threads:[~2020-02-27 18:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-27 18:17 Filipp Gunbin [this message]
2020-02-28 17:11 ` Review request: javac in compilation-error-regexp-alist-alist Mattias Engdegård
2020-02-28 23:02 ` Filipp Gunbin
2020-02-29 10:58 ` Mattias Engdegård
2020-04-01 0:34 ` Filipp Gunbin
2020-04-01 11:08 ` Mattias Engdegård
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m2blpjzyhq.fsf@fastmail.fm \
--to=fgunbin@fastmail.fm \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).