Skip to content

Commit 72d9e08

Browse files
Rollup merge of #101843 - chenyukang:fix-101797, r=oli-obk
Suggest associated const for incorrect use of let in traits Fixes #101797
2 parents 8ba133f + 4bf7d2c commit 72d9e08

File tree

4 files changed

+43
-4
lines changed

4 files changed

+43
-4
lines changed

compiler/rustc_parse/src/parser/item.rs

+15-4
Original file line numberDiff line numberDiff line change
@@ -698,11 +698,22 @@ impl<'a> Parser<'a> {
698698
let semicolon_span = self.token.span;
699699
// We have to bail or we'll potentially never make progress.
700700
let non_item_span = self.token.span;
701-
self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes);
701+
let is_let = self.token.is_keyword(kw::Let);
702+
702703
let mut err = self.struct_span_err(non_item_span, "non-item in item list");
703-
err.span_label(open_brace_span, "item list starts here")
704-
.span_label(non_item_span, "non-item starts here")
705-
.span_label(self.prev_token.span, "item list ends here");
704+
self.consume_block(Delimiter::Brace, ConsumeClosingDelim::Yes);
705+
if is_let {
706+
err.span_suggestion(
707+
non_item_span,
708+
"consider using `const` instead of `let` for associated const",
709+
"const",
710+
Applicability::MachineApplicable,
711+
);
712+
} else {
713+
err.span_label(open_brace_span, "item list starts here")
714+
.span_label(non_item_span, "non-item starts here")
715+
.span_label(self.prev_token.span, "item list ends here");
716+
}
706717
if is_unnecessary_semicolon {
707718
err.span_suggestion(
708719
semicolon_span,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Issue: 101797, Suggest associated const for incorrect use of let in traits
2+
// run-rustfix
3+
trait Trait {
4+
const _X: i32;
5+
//~^ ERROR non-item in item list
6+
}
7+
8+
fn main() {
9+
10+
}
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Issue: 101797, Suggest associated const for incorrect use of let in traits
2+
// run-rustfix
3+
trait Trait {
4+
let _X: i32;
5+
//~^ ERROR non-item in item list
6+
}
7+
8+
fn main() {
9+
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: non-item in item list
2+
--> $DIR/suggest-assoc-const.rs:4:5
3+
|
4+
LL | let _X: i32;
5+
| ^^^ help: consider using `const` instead of `let` for associated const: `const`
6+
7+
error: aborting due to previous error
8+

0 commit comments

Comments
 (0)