Subject: Re: bug#70794: 30.0.50; Add Rust compilation regex

From: Ergus <[email-masked]>
Date: Wed, 15 May 2024 15:10:02 +0200

On Sat, May 11, 2024 at 11:51:04AM GMT, Eli Zaretskii wrote:
>> Date: Mon, 06 May 2024 03:28:43 +0200
>> From:  Ergus via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <[email-masked]>
>>
>> Recently working with rust I have noticed that emacs does not recognizes
>> the rust/cargo error patterns.
>>
>> Considering that emacs has now the rust-ts-mode, it may worth adding
>> the rust/cargo error patterns to compile when using that mode
>>
>> In my system so far I have this:
>>
>> ```
>> (with-eval-after-load 'rust-ts-mode
>>   (with-eval-after-load 'compile
>>     (add-to-list
>>      'compilation-error-regexp-alist-alist
>>      `(cargo
>>        "\\(?:\\(?4:error\\)\\|\\(?5:warning\\)\\):[^\0]+?--> \\(?1:[^:]+\\):\\(?2:[[:digit:]]+\\):\\(?3:[[:digit:]]+\\)"
>>        1 2 3 (5)
>>        nil
>>        (5 compilation-warning-face)
>>        (4 compilation-error-face)))
>>
>>     (add-to-list 'compilation-error-regexp-alist 'cargo)))
>>
>> ```
>>
>> Maybe a more frequent rust user has a more general regex to
>> recommend. But this one works for me.
>>
>> WDYT?
>
>Thanks, but could you please also send the examples of Rust messages,
>because we need to add them to etc/compilation.txt?

Hi Eli:

Typically they look like this:

```
error[E0425]: cannot find function `ruun` in module `broot::cli`
   --> src/main.rs:6:23
    |
6  |     match broot::cli::ruun() {
    |                       ^^^^ help: a function with a similar name exists: `run`
    |
   ::: /tmp/broot/src/cli/mod.rs:49:1
    |
49 | pub fn run() -> Result<Option<Launchable>, ProgramError> {
    | -------------------------------------------------------- similarly
    named function `run` defined here
```

or

```
error: cannot find macro `deebug` in this scope
    --> src/main.rs:5:5
     |
5   |     deebug!("env::args(): {:#?}", std::env::args().collect::<Vec<String>>());
     |     ^^^^^^ help: a macro with a similar name exists: `debug`
     |
    ::: /home/ergo/.cargo/registry/src/index.crates.io-6f17d22bba15001f/log-0.4.21/src/macros.rs:154:1
     |
154 | macro_rules! debug {
     | ------------------ similarly named macro `debug` defined here
```

```
warning: crate-level attribute should be an inner attribute: add an exclamation mark: `#![foo]`
  --> src/main.rs:3:1
   |
3 | #[feature(proc_macro_diagnostic)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(unused_attributes)]` on by default
```

Two details:

1. As you can see the [] is optional
2. The path is always relative to project's root