-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
A-diagnosticsdiagnostics / error reportingdiagnostics / error reportingA-parserparser issuesparser issuesC-bugCategory: bugCategory: bug
Description
rust-analyzer version: 0.4.2470-standalone
rustc version: 1.87.0 (17067e9ac 2025-05-09)
editor or extension: VSCode 1.100.2
I guess this problem is partly between RA and compiler and partly between RA and VSCode. I had reported it on irlo compiler, but they point me to you.
Rustlings functions4.rs made me notice several things.
This (both for return spec -
or ->
) gives an unrusty, very terse error message with no suggestion:
fn sale_price(price: i64) -> {
if is_even(price) {
price - 10
} else {
price - 3
}
}
Syntax Error: expected type rust-analyzer(syntax-error)
Removing the arrow dramatically improves the message:
error[E0308]: mismatched types
--> exercises/02_functions/functions4.rs:13:9
|
11 | fn sale_price(price: i64) {
| - help: try adding a return type: `-> i64`
12 | if is_even(price) {
13 | price - 10
| ^^^^^^^^^^ expected `()`, found `i64`
I see that one is syntax and the other logic, but from user’s perspective it’s pretty much the same error. In both cases VScode doesn’t suggest the obvious quick fix.
Metadata
Metadata
Assignees
Labels
A-diagnosticsdiagnostics / error reportingdiagnostics / error reportingA-parserparser issuesparser issuesC-bugCategory: bugCategory: bug
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
ChayimFriedman2 commentedon May 24, 2025
The first error is from rust-analyzer and the second from rustc. r-a's error messages are not great in general, especially compared to rustc's.
daniel-pfeiffer commentedon May 25, 2025
Thanks for the clarification! I hope the RA messages can be gradually be brought up to par!
And even though the 2nd is very clear and helpful, VScode doesn’t see that. I’ve no clue if they parse most messages, except this one. Or does RA need to give meta-data and hasn’t gotten round to providing it in this case? Rhetorical question, just hoping this will be fixed – especially as it’s from Rustlings, i.e. beginners face this!
ChayimFriedman2 commentedon May 25, 2025
It's probably spread across places in the code, i.e. parts of the error are shown in different places.
Veykril commentedon May 26, 2025
The main issue is with rendering the nice error diagnostics from rustc in VSCode, which is quite difficult as VSCode's user facing error machinery is pretty weak.
As for r-a's error here, we should report
expected type, found
{`` like rustc does instead of justexpected type
. But as Chayim said, our parse error infra is pretty weak overall.