Skip to content

Commit f270bb1

Browse files
committed
Recover from pub let inside function
1 parent 13471d3 commit f270bb1

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

compiler/rustc_parse/locales/en-US.ftl

+3
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,9 @@ parse_visibility_not_followed_by_item = visibility `{$vis}` is not followed by a
439439
.label = the visibility
440440
.help = you likely meant to define an item, e.g., `{$vis} fn foo() {"{}"}`
441441
442+
parse_visibility_followed_by_let = visibility does not apply to `let` statement
443+
.suggestion = remove pub
444+
442445
parse_default_not_followed_by_item = `default` is not followed by an item
443446
.label = the `default` qualifier
444447
.note = only `fn`, `const`, `type`, or `impl` items may be prefixed by `default`

compiler/rustc_parse/src/errors.rs

+8
Original file line numberDiff line numberDiff line change
@@ -1403,6 +1403,14 @@ pub(crate) struct VisibilityNotFollowedByItem {
14031403
pub vis: Visibility,
14041404
}
14051405

1406+
#[derive(Diagnostic)]
1407+
#[diag(parse_visibility_followed_by_let)]
1408+
pub(crate) struct VisibilityFollowedByLet {
1409+
#[primary_span]
1410+
#[suggestion(code = "let", applicability = "machine-applicable")]
1411+
pub span: Span,
1412+
}
1413+
14061414
#[derive(Diagnostic)]
14071415
#[diag(parse_default_not_followed_by_item)]
14081416
#[note]

compiler/rustc_parse/src/parser/stmt.rs

+5
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ impl<'a> Parser<'a> {
111111
// Do not attempt to parse an expression if we're done here.
112112
self.error_outer_attrs(attrs);
113113
self.mk_stmt(lo, StmtKind::Empty)
114+
} else if self.prev_token.is_keyword(kw::Pub) && self.token.is_keyword(kw::Let) {
115+
let err = self.sess.create_err(errors::VisibilityFollowedByLet {
116+
span: self.prev_token.span.to(self.token.span),
117+
});
118+
return Err(err);
114119
} else if self.token != token::CloseDelim(Delimiter::Brace) {
115120
// Remainder are line-expr stmts.
116121
let e = match force_collect {

0 commit comments

Comments
 (0)