Skip to content

Commit

Permalink
Rollup merge of #100750 - akabinds:akabinds/improved-invalid-function…
Browse files Browse the repository at this point in the history
…-qual-error, r=davidtwco

improved diagnostic for function defined with `def`, `fun`, `func`, or `function` instead of `fn`

Closes #99751
  • Loading branch information
matthiaskrgr committed Aug 20, 2022
2 parents 1e47e8a + 1b54ad0 commit af89769
Show file tree
Hide file tree
Showing 9 changed files with 89 additions and 0 deletions.
9 changes: 9 additions & 0 deletions compiler/rustc_parse/src/parser/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,15 @@ impl<'a> Parser<'a> {
appl,
);
}

if ["def", "fun", "func", "function"].contains(&symbol.as_str()) {
err.span_suggestion_short(
self.prev_token.span,
&format!("write `fn` instead of `{symbol}` to declare a function"),
"fn",
appl,
);
}
}

// Add suggestion for a missing closing angle bracket if '>' is included in expected_tokens
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-def.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Check what happens when `def` is used to define a function, instead of `fn`
// edition:2021

#![allow(dead_code)]

def foo() {}
//~^ ERROR expected one of `!` or `::`, found `foo`
//~^^ HELP write `fn` instead of `def` to declare a function

fn main() {}
10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-def.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
error: expected one of `!` or `::`, found `foo`
--> $DIR/fn-defined-using-def.rs:6:5
|
LL | def foo() {}
| --- ^^^ expected one of `!` or `::`
| |
| help: write `fn` instead of `def` to declare a function

error: aborting due to previous error

10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-fun.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Check what happens when `fun` is used to define a function, instead of `fn`
// edition:2021

#![allow(dead_code)]

fun foo() {}
//~^ ERROR expected one of `!` or `::`, found `foo`
//~^^ HELP write `fn` instead of `fun` to declare a function

fn main() {}
10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-fun.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
error: expected one of `!` or `::`, found `foo`
--> $DIR/fn-defined-using-fun.rs:6:5
|
LL | fun foo() {}
| --- ^^^ expected one of `!` or `::`
| |
| help: write `fn` instead of `fun` to declare a function

error: aborting due to previous error

10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-func.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Check what happens when `func` is used to define a function, instead of `fn`
// edition:2021

#![allow(dead_code)]

func foo() {}
//~^ ERROR expected one of `!` or `::`, found `foo`
//~^^ HELP write `fn` instead of `func` to declare a function

fn main() {}
10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-func.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
error: expected one of `!` or `::`, found `foo`
--> $DIR/fn-defined-using-func.rs:6:6
|
LL | func foo() {}
| ---- ^^^ expected one of `!` or `::`
| |
| help: write `fn` instead of `func` to declare a function

error: aborting due to previous error

10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-function.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Check what happens when `function` is used to define a function, instead of `fn`
// edition:2021

#![allow(dead_code)]

function foo() {}
//~^ ERROR expected one of `!` or `::`, found `foo`
//~^^ HELP write `fn` instead of `function` to declare a function

fn main() {}
10 changes: 10 additions & 0 deletions src/test/ui/parser/fn-defined-using-function.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
error: expected one of `!` or `::`, found `foo`
--> $DIR/fn-defined-using-function.rs:6:10
|
LL | function foo() {}
| -------- ^^^ expected one of `!` or `::`
| |
| help: write `fn` instead of `function` to declare a function

error: aborting due to previous error

0 comments on commit af89769

Please sign in to comment.