diff options
| author | yukang <moorekang@gmail.com> | 2022-09-15 15:18:23 +0800 |
|---|---|---|
| committer | yukang <moorekang@gmail.com> | 2022-09-15 16:15:38 +0800 |
| commit | 98e20c097cbb402ee2c6f4056fe8b4acca9679f9 (patch) | |
| tree | c6e559c39bf19dc722bd1a7ad84f3ed12bce2b7f | |
| parent | c3f59295fecb9a7cb067bc4a5b50f779e159a55b (diff) | |
| download | rust-98e20c097cbb402ee2c6f4056fe8b4acca9679f9.tar.gz rust-98e20c097cbb402ee2c6f4056fe8b4acca9679f9.zip | |
fix #101797: Suggest associated const for incorrect use of let in traits
| -rw-r--r-- | compiler/rustc_parse/src/parser/item.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/parser/suggest-assoc-const.fixed | 10 | ||||
| -rw-r--r-- | src/test/ui/parser/suggest-assoc-const.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/parser/suggest-assoc-const.stderr | 8 |
4 files changed, 43 insertions, 4 deletions
diff --git a/compiler/rustc_parse/src/parser/item.rs b/compiler/rustc_parse/src/parser/item.rs index b190a7062de..045dc7357f1 100644 --- a/compiler/rustc_parse/src/parser/item.rs +++ b/compiler/rustc_parse/src/parser/item.rs @@ -698,11 +698,22 @@ impl<'a> Parser<'a> { let semicolon_span = self.token.span; // We have to bail or we'll potentially never make progress. let non_item_span = self.token.span; - self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes); + let is_let = self.token.is_keyword(kw::Let); + let mut err = self.struct_span_err(non_item_span, "non-item in item list"); - err.span_label(open_brace_span, "item list starts here") - .span_label(non_item_span, "non-item starts here") - .span_label(self.prev_token.span, "item list ends here"); + self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes); + if is_let { + err.span_suggestion( + non_item_span, + "considering use `const` instead of `let` for associated const", + "const", + Applicability::MachineApplicable, + ); + } else { + err.span_label(open_brace_span, "item list starts here") + .span_label(non_item_span, "non-item starts here") + .span_label(self.prev_token.span, "item list ends here"); + } if is_unnecessary_semicolon { err.span_suggestion( semicolon_span, diff --git a/src/test/ui/parser/suggest-assoc-const.fixed b/src/test/ui/parser/suggest-assoc-const.fixed new file mode 100644 index 00000000000..259f37b23a5 --- /dev/null +++ b/src/test/ui/parser/suggest-assoc-const.fixed @@ -0,0 +1,10 @@ +// Issue: 101797, Suggest associated const for incorrect use of let in traits +// run-rustfix +trait Trait { + const _X: i32; + //~^ ERROR non-item in item list +} + +fn main() { + +} diff --git a/src/test/ui/parser/suggest-assoc-const.rs b/src/test/ui/parser/suggest-assoc-const.rs new file mode 100644 index 00000000000..c7be712ec07 --- /dev/null +++ b/src/test/ui/parser/suggest-assoc-const.rs @@ -0,0 +1,10 @@ +// Issue: 101797, Suggest associated const for incorrect use of let in traits +// run-rustfix +trait Trait { + let _X: i32; + //~^ ERROR non-item in item list +} + +fn main() { + +} diff --git a/src/test/ui/parser/suggest-assoc-const.stderr b/src/test/ui/parser/suggest-assoc-const.stderr new file mode 100644 index 00000000000..b92e399c905 --- /dev/null +++ b/src/test/ui/parser/suggest-assoc-const.stderr @@ -0,0 +1,8 @@ +error: non-item in item list + --> $DIR/suggest-assoc-const.rs:4:5 + | +LL | let _X: i32; + | ^^^ help: considering use `const` instead of `let` for associated const: `const` + +error: aborting due to previous error + |
