Skip to content

Not dealing with return type #19858

@daniel-pfeiffer

Description

@daniel-pfeiffer

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.

Activity

ChayimFriedman2

ChayimFriedman2 commented on May 24, 2025

@ChayimFriedman2
Contributor

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

daniel-pfeiffer commented on May 25, 2025

@daniel-pfeiffer
Author

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

ChayimFriedman2 commented on May 25, 2025

@ChayimFriedman2
Contributor

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!

It's probably spread across places in the code, i.e. parts of the error are shown in different places.

Veykril

Veykril commented on May 26, 2025

@Veykril
Member

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 just expected type. But as Chayim said, our parse error infra is pretty weak overall.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsdiagnostics / error reportingA-parserparser issuesC-bugCategory: bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @Veykril@daniel-pfeiffer@ChayimFriedman2

        Issue actions

          Not dealing with return type · Issue #19858 · rust-lang/rust-analyzer