Also add a test case for inserting a semicolon on extern fns.
Without this fix, we got an error like this:
error: expected one of `->`, `where`, or `{`, found `}`
--> chk.rs:3:1
|
2 | fn foo()
| --- - expected one of `->`, `where`, or `{`
| |
| while parsing this `fn`
3 | }
| ^ unexpected token
Since this is inside an extern block, you're required to write function
prototypes with no body. This fixes a regression, and adds a test case
for it.
&mut self,
force_collect: ForceCollect,
) -> PResult<'a, Option<Option<P<ForeignItem>>>> {
- let fn_parse_mode = FnParseMode { req_name: |_| true, req_body: true };
+ let fn_parse_mode = FnParseMode { req_name: |_| true, req_body: false };
Ok(self.parse_item_(fn_parse_mode, force_collect)?.map(
|Item { attrs, id, span, vis, ident, kind, tokens }| {
let kind = match ForeignItemKind::try_from(kind) {
--- /dev/null
+// run-rustfix
+
+#[allow(dead_code)]
+
+extern "C" {
+ fn foo(); //~ERROR expected `;`
+}
+
+fn main() {}
--- /dev/null
+// run-rustfix
+
+#[allow(dead_code)]
+
+extern "C" {
+ fn foo() //~ERROR expected `;`
+}
+
+fn main() {}
--- /dev/null
+error: expected `;`, found `}`
+ --> $DIR/suggest-semicolon-for-fn-in-extern-block.rs:6:11
+ |
+LL | fn foo()
+ | ^ help: add `;` here
+LL | }
+ | - unexpected token
+
+error: aborting due to previous error
+