Subject: Re: bug#70797: [PATCH] Make the Compilation mode recognize non-legacy Kotlin/Gradle errors

From: Rudolf (Rudy) Adamkovic <[email-masked]>
Date: Thu, 13 Jun 2024 16:44:04 +0200

Eli Zaretskii <[email-masked]> writes:

>   . applying this fails compile-tests in the test suite, so I guess
>     some adjustment there is also needed;

Oops!  In the new patch, attached below, I

- adjust the existing legacy Gradle/Kotlin tests and
- add new tests for the non-legacy Gradle/Kotlin warnings/errors.

I also improved the commit message a bit.

>   . you removed the comment with the pointer to kotlin sources, which
>     might be still useful for the legacy format (unless the URL is no
>     longer valid), so please restore that if the pointer can still be
>     useful

Smart!  All right, I did a bit of research, and documented

- the first and last Kotlin version that emits the current format,
- the last Kotlin version that used the legacy format,
- the official Git commit that removed the legacy format,
- the public release date of the current format, and
- the Kotlin class where the current format is defined.

All of it is packed into two short comments.

Rudy

>From d9ab03624d868ee5f6a40390e321544c941cb9d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rudolf=20Adamkovi=C4=8D?= <[email-masked]>
Date: Thu, 2 May 2024 19:06:11 +0200
Subject: [PATCH] Make the Compilation mode recognize non-legacy Kotlin/Gradle
 errors

The Compilation mode recognizes Kotlin/Gradle errors but only in the now
legacy format.  The current format, which has been in wide use for about
a year, is not supported.  This patch adds support for the current
format.

* etc/compilation.txt:
(symbols): Add examples of non-legacy Kotlin/Gradle warnings and errors.
* lisp/progmodes/compile.el:
(compilation-error-regexp-alist-alist): Rename 'gradle-kotlin' to
'gradle-kotlin-legacy' and add 'grade-kotlin' that matches the errors
and warnings outputted by the current (non-legacy) Kotlin/Gradle.
* test/lisp/progmodes/compile-tests.el
(compile-tests--test-regexps-data): Rename 'gradle-kotlin' to
'gradle-kotlin-legacy' and add two test cases for the newly added,
non-legacy Kotlin/Gradle warnings and errors.
---
 etc/compilation.txt                  | 13 +++++++++++--
 lisp/progmodes/compile.el            | 24 +++++++++++++++++++++---
 test/lisp/progmodes/compile-tests.el | 20 ++++++++++++--------
 3 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/etc/compilation.txt b/etc/compilation.txt
index 05f0829864c..e4e361ecfc7 100644
--- a/etc/compilation.txt
+++ b/etc/compilation.txt
@@ -186,13 +186,22 @@ Warning near line 10 file arrayclash.f: Module contains no executable
 Nonportable usage near line 31 col 9 file assign.f: mixed default and explicit

-* Gradle with kotlin-gradle-plugin
+* Gradle with Kotlin plugin
 
-symbol: gradle-kotlin
+symbol: grade-kotlin
+
+e: file:///src/Test.kt:267:5 foo: bar
+w: file:///src/Test.kt:267:5 foo: bar
+
+
+* Gradle with Kotlin plugin (legacy)
+
+symbol: gradle-kotlin-legacy
 
 e: /src/Test.kt: (34, 15): foo: bar
 w: /src/Test.kt: (34, 15): foo: bar
 
+
 * Gradle Android resource linking
 
 symbol: gradle-android
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index e31af774bd0..4d43a715fef 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -263,10 +263,28 @@ compilation-error-regexp-alist-alist
      "\\(^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).
+    ;; 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
diff --git a/test/lisp/progmodes/compile-tests.el b/test/lisp/progmodes/compile-tests.el
index 20beed955d2..b1187426ccf 100644
--- a/test/lisp/progmodes/compile-tests.el
+++ b/test/lisp/progmodes/compile-tests.el
@@ -270,20 +270,24 @@ compile-tests--test-regexps-data
      1 nil 27041 "{standard input}")
     (gnu "boost/container/detail/flat_tree.hpp:589:25:   [ skipping 5 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]"
      1 25 589 "boost/container/detail/flat_tree.hpp" 0)
-    ;; gradle-kotlin
+    ;; Gradle/Kotlin
     (gradle-kotlin
-     "e: /src/Test.kt: (34, 15): foo: bar" 4 15 34 "/src/Test.kt" 2)
+     "e: file:///src/Test.kt:267:5 foo: bar" 4 5 267 "/src/Test.kt" 2)
     (gradle-kotlin
+     "w: file:///src/Test.kt:267:5 foo: bar" 4 5 267 "/src/Test.kt" 1)
+    (gradle-kotlin-legacy
+     "e: /src/Test.kt: (34, 15): foo: bar" 4 15 34 "/src/Test.kt" 2)
+    (gradle-kotlin-legacy
      "w: /src/Test.kt: (11, 98): foo: bar" 4 98 11 "/src/Test.kt" 1)
-    (gradle-kotlin
+    (gradle-kotlin-legacy
      "e: e:/cygwin/src/Test.kt: (34, 15): foo: bar"
      4 15 34 "e:/cygwin/src/Test.kt" 2)
-    (gradle-kotlin
+    (gradle-kotlin-legacy
      "w: e:/cygwin/src/Test.kt: (11, 98): foo: bar"
      4 98 11 "e:/cygwin/src/Test.kt" 1)
-    (gradle-kotlin
+    (gradle-kotlin-legacy
      "e: e:\\src\\Test.kt: (34, 15): foo: bar" 4 15 34 "e:\\src\\Test.kt" 2)
-    (gradle-kotlin
+    (gradle-kotlin-legacy
      "w: e:\\src\\Test.kt: (11, 98): foo: bar" 4 98 11 "e:\\src\\Test.kt" 1)
     (gradle-android
      "     ERROR:/Users/salutis/src/AndroidSchemeExperiment/app/build/intermediates/incremental/debug/mergeDebugResources/stripped.dir/layout/item.xml:3: AAPT: error: '16dpw' is incompatible with attribute padding (attr) dimension."
@@ -534,8 +538,8 @@ compile-test-error-regexps
                    1 15 5 "alpha.c")))
         (compile--test-error-line test))
 
-      (should (eq compilation-num-errors-found 106))
-      (should (eq compilation-num-warnings-found 35))
+      (should (eq compilation-num-errors-found 107))
+      (should (eq compilation-num-warnings-found 36))
       (should (eq compilation-num-infos-found 35)))))
 
 (ert-deftest compile-test-grep-regexps ()
-- 
2.39.3 (Apple Git-146)

-- 
"Mathematics takes us still further from what is human into the region
of absolute necessity, to which not only the actual world, but every
possible world, must conform."  --- Bertrand Russell, 1902

Rudolf Adamkovič <[email-masked]> [he/him]
http://adamkovic.org