-
-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Closed
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsC-bugCategory: This is a bug.Category: This is a bug.WG-diagnosticsWorking group: DiagnosticsWorking group: Diagnostics
Description
Steps to Reproduce
Given this code:
use std::env;
pub struct Foo {
text: String
}
pub fn parse() -> Foo {
let args: Vec<String> = env::args().collect();
let text = args[1].clone();
pub Foo { text } // NB: Syntax error here
}
fn main() { }Expected Output
The syntax error is diagnosed
Actual Output
- There are 2 errors, one actual and one nonsensical
- The nonsensical error uses more visual space (we can't really fault it for that) and it comes last, so it takes all the attention
error: unmatched visibility `pub`
--> src/main.rs:11:5
|
11 | pub Foo { text }
| ^^^
error[E0308]: mismatched types
--> src/main.rs:7:23
|
7 | pub fn parse() -> Foo {
| _______________________^
8 | | let args: Vec<String> = env::args().collect();
9 | | let text = args[1].clone();
10 | |
11 | | pub Foo { text }
12 | | }
| |_^ expected struct `Foo`, found ()
|
= note: expected type `Foo`
found type `()`I'm sorry to be so harsh on the diagnostics; but we can be better at showing the user relevant diagnostics. (I remember g++ and having to learn to ignore everything after the first error. And those error outputs were long..)
This bug was reported after a discussion in #rust-beginners after a user was struggling with similar code and they came asking about error no. 2. Not about both errors, but about error no. 2.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsC-bugCategory: This is a bug.Category: This is a bug.WG-diagnosticsWorking group: DiagnosticsWorking group: Diagnostics