Skip to content

Improve error message when edition = "2018" has not been set #4454

Closed
@johnhamelink

Description

@johnhamelink

Describe the bug

Hi there,

I just spent about 4 hours puzzling about why my emacs configuration was producing the following error:

error[E0670]: `async fn` is not permitted in the 2015 edition
 --> <stdin>:7:1
  |
7 | async fn async_main() {
  | ^^^^^ to use `async fn`, switch to Rust 2018
  |
  = help: set `edition = "2018"` in `Cargo.toml`
  = note: for more on editions, read https://doc.rust-lang.org/edition-guide

Despite having edition = "2018" set in Cargo.toml, the error was in fact due to edition = "2018" not being set in rustfmt.toml. As you might imagine, this was very confusing!

I am not the only one who's experienced this issue:

brotzeit/rustic#128
brotzeit/rustic#27
rust-lang/rls#1688

To Reproduce

Create a new cargo project, set the edition = "2018" in cargo.toml, add an async fn to the project, and then without any sort of configuration applied to rustfmt, run it as you normally would.

Run cargo check manually to verify that the error is not shown when running cargo.

Expected behavior

If it's not practical to change the default behaviour to edition 2018, I understand fully, but perhaps the error could be improved to point the developer in the direction of rustfmt.toml and not the cargo.toml?

Meta

  • rustfmt version: rustfmt 1.4.18-stable (8157a3f 2020-07-15)
  • From where did you install rustfmt?: rustup
  • How do you run rustfmt: via rustic on emacs

Activity

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

    bugPanic, non-idempotency, invalid code, etc.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions