From 684f67938c7f7e8c0f3cee638f03f2603e0e1e3f Mon Sep 17 00:00:00 2001 From: Aleksei Gusev Date: Sun, 8 Jun 2025 23:49:40 +0300 Subject: [PATCH] =?UTF-8?q?Add=20compilation=20regexp=20to=20match=20?= =?UTF-8?q?=E2=80=98dbg!=E2=80=99=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While debugging tests it’s annoying when ‘compilation-mode’ matches ‘dbg!’ output incorrectly. Currently, rust-mode’s regexps assign it as an error and incorrectly include ‘[’. The proposed change adds a regexp to match such things and assign them info level. --- rust-compile.el | 9 +++++++++ rust-mode-tests.el | 7 +++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/rust-compile.el b/rust-compile.el index 04ac6b6..abeb753 100644 --- a/rust-compile.el +++ b/rust-compile.el @@ -48,6 +48,12 @@ See `compilation-error-regexp-alist' for help on their format.") "Specifications for matching panics in cargo test invocations. See `compilation-error-regexp-alist' for help on their format.") +(defvar rustc-dbg!-compilation-regexps + (let ((re (concat "\\[" rustc-compilation-location "\\]"))) + (cons re '(2 3 4 0 1))) + "Specifications for matching dbg! output. +See `compilation-error-regexp-alist' for help on their format.") + (defun rustc-scroll-down-after-next-error () "In the new style error messages, the regular expression matches on the file name (which appears after `-->`), but the @@ -85,6 +91,9 @@ the compilation window until the top of the error is visible." (cons 'rustc-panics rustc-panics-compilation-regexps)) (add-to-list 'compilation-error-regexp-alist 'rustc-panics) (add-to-list 'compilation-error-regexp-alist 'cargo) + (add-to-list 'compilation-error-regexp-alist-alist + (cons 'rust-dbg! rustc-dbg!-compilation-regexps)) + (add-to-list 'compilation-error-regexp-alist 'rust-dbg!) (add-hook 'next-error-hook #'rustc-scroll-down-after-next-error))) ;;; _ diff --git a/rust-mode-tests.el b/rust-mode-tests.el index a0ee0bb..56d759c 100644 --- a/rust-mode-tests.el +++ b/rust-mode-tests.el @@ -3693,6 +3693,7 @@ let b = 1;" (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") (insert "thread 'main' panicked at src/file7.rs:12:34:\n\n") + (insert "[src/file8.rs:159:5] symbol_value(SOME_VAR) = Some(\n\n") ;; should not match (insert "werror found a -> b\n --> no_match.rs:12:34\n\n") (insert "error[E0061]: this function takes 1 parameter but 2 parameters were supplied\n --> file6.rs:132:34 @@ -3712,12 +3713,14 @@ let b = 1;" (("file5.rs" "12" "34" compilation-info "file5.rs:12:34")) ((like-previous-one "82" back-to-indentation compilation-info "82") (like-previous-one "132" back-to-indentation compilation-info "132")) - (("src/file7.rs" "12" "34" nil "src/file7.rs:12:34"))) + (("src/file7.rs" "12" "34" nil "src/file7.rs:12:34")) + (("src/file8.rs" "159" "5" compilation-info "src/file8.rs:159:5"))) (mapcar #'rust-collect-matches (list rustc-compilation-regexps rustc-colon-compilation-regexps rustc-refs-compilation-regexps - rustc-panics-compilation-regexps)))))) + rustc-panics-compilation-regexps + rustc-dbg!-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.