emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/rust-mode 15a077a 458/486: rustc-colon-compilation-regexps


From: ELPA Syncer
Subject: [nongnu] elpa/rust-mode 15a077a 458/486: rustc-colon-compilation-regexps: improve highlighting.
Date: Sat, 7 Aug 2021 09:26:14 -0400 (EDT)

branch: elpa/rust-mode
commit 15a077a61743f49076eb9a1c5c77a4279e01a736
Author: Nathan Moreau <nathan.moreau@m4x.org>
Commit: Nathan Moreau <nathan.moreau@m4x.org>

    rustc-colon-compilation-regexps: improve highlighting.
---
 rust-mode-tests.el | 60 +++++++++++++++++++++++++++++++-----------------------
 rust-mode.el       | 19 ++++++++---------
 2 files changed, 44 insertions(+), 35 deletions(-)

diff --git a/rust-mode-tests.el b/rust-mode-tests.el
index 363d73c..da874ec 100644
--- a/rust-mode-tests.el
+++ b/rust-mode-tests.el
@@ -3338,6 +3338,31 @@ impl Two<'a> {
       (let ((default-directory test-dir))
         (should (equal (expand-file-name (rust-buffer-project)) 
manifest-file))))))
 
+(defun rust-collect-matches (spec)
+  (let ((matches nil))
+    (goto-char (point-min))
+    (while (re-search-forward (car spec) nil t)
+      (push
+       (mapcar (lambda (r)
+                 (let ((match-pos
+                        (nth (cdr r) spec)))
+                   (if (eq :type (car r))
+                       (cond ((consp match-pos)
+                              (compilation-face match-pos))
+                             (t
+                              (cdr (assoc match-pos '((1 . compilation-warning)
+                                                      (0 . compilation-info)
+                                                      (2 . 
compilation-error))))))
+                     (match-string match-pos))))
+               ;; see compilation-error-regexp-alist
+               '((:file . 1)
+                 (:line . 2)
+                 (:column . 3)
+                 (:type . 4)
+                 (:mouse-highlight . 5)))
+       matches))
+    (nreverse matches)))
+
 (ert-deftest compilation-regexp-dashes ()
   (with-temp-buffer
     ;; should match
@@ -3345,34 +3370,19 @@ impl Two<'a> {
     (insert "error[E1234]: found a -> b\n  --> file2.rs:12:34\n\n")
     (insert "warning found a -> b\n  --> file3.rs:12:34\n\n")
     (insert "note: `ZZZ` could also refer to the constant imported here -> b\n 
 --> file4.rs:12:34\n\n")
+    (insert "    ::: file5.rs:12:34\n\n")
     ;; should not match
     (insert "werror found a -> b\n  --> no_match.rs:12:34\n\n")
 
-    (goto-char (point-min))
-    (let ((matches nil))
-      (while (re-search-forward (car rustc-compilation-regexps) nil t)
-        (push
-         (mapcar (lambda (r)
-                   (let ((match-pos
-                          (nth (cdr r) rustc-compilation-regexps)))
-                     (if (eq :type (car r))
-                         (compilation-face match-pos)
-                       (match-string match-pos))))
-                 ;; see compilation-error-regexp-alist
-                 '((:file . 1)
-                   (:line . 2)
-                   (:column . 3)
-                   (:type . 4)
-                   (:mouse-highlight . 5)))
-         matches))
-      (setq matches (reverse matches))
-
-      (should (equal
-               '(("file1.rs" "12" "34" compilation-error "file1.rs:12:34")
-                 ("file2.rs" "12" "34" compilation-error "file2.rs:12:34")
-                 ("file3.rs" "12" "34" compilation-warning "file3.rs:12:34")
-                 ("file4.rs" "12" "34" compilation-info "file4.rs:12:34"))
-               matches)))))
+    (should (equal
+             '((("file1.rs" "12" "34" compilation-error "file1.rs:12:34")
+                ("file2.rs" "12" "34" compilation-error "file2.rs:12:34")
+                ("file3.rs" "12" "34" compilation-warning "file3.rs:12:34")
+                ("file4.rs" "12" "34" compilation-info "file4.rs:12:34"))
+               (("file5.rs" "12" "34" compilation-info "file5.rs:12:34")))
+             (mapcar #'rust-collect-matches
+                     (list rustc-compilation-regexps
+                           rustc-colon-compilation-regexps))))))
 
 ;; If electric-pair-mode is available, load it and run the tests that use it.  
If not,
 ;; no error--the tests will be skipped.
diff --git a/rust-mode.el b/rust-mode.el
index a53d320..0e95575 100644
--- a/rust-mode.el
+++ b/rust-mode.el
@@ -1928,23 +1928,22 @@ Return the created process."
         (or (rust--format-error-handler)
             (message "rustfmt detected problems, see *rustfmt* for more."))))))
 
-(defvar rustc-compilation-regexps
+(defvar rustc-compilation-location
   (let ((file "\\([^\n]+\\)")
         (start-line "\\([0-9]+\\)")
         (start-col "\\([0-9]+\\)"))
-    (let ((re (concat "^\\(?:error\\|\\(warning\\)\\|\\(note\\)\\)[^\0]+?--> 
\\("
-                      file ":" start-line ":" start-col "\\)")))
-      (cons re '(4 5 6 (1 . 2) 3))))
+    (concat "\\(" file ":" start-line ":" start-col "\\)")))
+
+(defvar rustc-compilation-regexps
+  (let ((re (concat "^\\(?:error\\|\\(warning\\)\\|\\(note\\)\\)[^\0]+?--> "
+                    rustc-compilation-location)))
+    (cons re '(4 5 6 (1 . 2) 3)))
   "Specifications for matching errors in rustc invocations.
 See `compilation-error-regexp-alist' for help on their format.")
 
 (defvar rustc-colon-compilation-regexps
-  (let ((file "\\([^\n]+\\)")
-        (start-line "\\([0-9]+\\)")
-        (start-col  "\\([0-9]+\\)"))
-    (let ((re (concat "^ *::: " file ":" start-line ":" start-col ; ::: 
foo/bar.rs
-                      )))
-      (cons re '(1 2 3 0)))) ;; 0 for info type
+  (let ((re (concat "^ *::: " rustc-compilation-location)))
+    (cons re '(2 3 4 0 1)))
   "Specifications for matching `:::` hints in rustc invocations.
 See `compilation-error-regexp-alist' for help on their format.")
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]