Auto merge of #51955 - zackmdavis:item_semi, r=oli-obk
clarify why we're suggesting removing semicolon after braced items Previously (issue #46186, pull-request #46258), a suggestion was added to remove the semicolon after we fail to parse an item, but issue #51603 complains that it's still insufficiently obvious why. Let's add a note. Resolves #51603.
This commit is contained in:
@@ -6135,6 +6135,22 @@ impl<'a> Parser<'a> {
|
|||||||
err.span_suggestion_short_with_applicability(
|
err.span_suggestion_short_with_applicability(
|
||||||
self.span, msg, "".to_string(), Applicability::MachineApplicable
|
self.span, msg, "".to_string(), Applicability::MachineApplicable
|
||||||
);
|
);
|
||||||
|
if !items.is_empty() { // Issue #51603
|
||||||
|
let previous_item = &items[items.len()-1];
|
||||||
|
let previous_item_kind_name = match previous_item.node {
|
||||||
|
// say "braced struct" because tuple-structs and
|
||||||
|
// braceless-empty-struct declarations do take a semicolon
|
||||||
|
ItemKind::Struct(..) => Some("braced struct"),
|
||||||
|
ItemKind::Enum(..) => Some("enum"),
|
||||||
|
ItemKind::Trait(..) => Some("trait"),
|
||||||
|
ItemKind::Union(..) => Some("union"),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
if let Some(name) = previous_item_kind_name {
|
||||||
|
err.help(&format!("{} declarations are not followed by a semicolon",
|
||||||
|
name));
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
err.span_label(self.span, "expected item");
|
err.span_label(self.span, "expected item");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ error: expected item, found `;`
|
|||||||
|
|
|
|
||||||
LL | }; //~ ERROR expected item, found `;`
|
LL | }; //~ ERROR expected item, found `;`
|
||||||
| ^ help: consider removing this semicolon
|
| ^ help: consider removing this semicolon
|
||||||
|
|
|
||||||
|
= help: braced struct declarations are not followed by a semicolon
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user