Skip to content

Diagnostics: suggest using from_str when calling parse on a type that implements FromStr #77843

Open
@yoshuawuyts

Description

@yoshuawuyts

Problem

I find myself confusing the parse and from_str methods quite often. Take for example:

error[E0599]: no function or associated item named `parse` found for struct `connection_string::JdbcString` in the current scope
   --> src\connector\mssql.rs:363:55
    |
363 |         let mut jdbc = connection_string::JdbcString::parse(input)?;
    |                                                       ^^^^^ function or associated item not found in `connection_string::JdbcString`

parse doesn't exist on JdbcString; from_str does. So the way to fix it would be to write:

// either call `from_str`
let mut jdbc = connection_string::JdbcString::from_str(input)?;

// or flip it and call `parse` on the string
let mut jdbc: connection_string::JdbcString = input.parse()?;

Solution

It'd be great if the diagnostic could detect if parse was called on a type that implements FromStr and suggest to use from_str instead:

error[E0599]: no function or associated item named `parse` found for struct `connection_string::JdbcString` in the current scope
   --> src\connector\mssql.rs:363:55
    |
363 |         let mut jdbc = connection_string::JdbcString::parse(input)?;
    |                                                       ^^^^^ function or associated item not found in `connection_string::JdbcString`
    |                                                       |
    |                                                       help: did you mean to call `connection_string::JdbcString::from_str`?

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`A-trait-systemArea: Trait systemC-enhancementCategory: An issue proposing an enhancement or a PR with one.D-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions