Closed
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.