Skip to content

Commit 7533cff

Browse files
authored
Don't drop blocks on foreign functions (#4314)
2 parents 4b7e90d + 3e60ac2 commit 7533cff

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

src/formatting/items.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3160,7 +3160,23 @@ impl Rewrite for ast::ForeignItem {
31603160
let span = mk_sp(self.span.lo(), self.span.hi() - BytePos(1));
31613161

31623162
let item_str = match self.kind {
3163-
ast::ForeignItemKind::Fn(_, ref fn_sig, ref generics, _) => rewrite_fn_base(
3163+
ast::ForeignItemKind::Fn(defaultness, ref fn_sig, ref generics, Some(ref body)) => {
3164+
let mut visitor = FmtVisitor::from_context(context);
3165+
visitor.block_indent = shape.indent;
3166+
visitor.last_pos = self.span.lo();
3167+
let inner_attrs = inner_attributes(&self.attrs);
3168+
let fn_ctxt = visit::FnCtxt::Foreign;
3169+
visitor.visit_fn(
3170+
visit::FnKind::Fn(fn_ctxt, self.ident, &fn_sig, &self.vis, Some(body)),
3171+
generics,
3172+
&fn_sig.decl,
3173+
self.span,
3174+
defaultness,
3175+
Some(&inner_attrs),
3176+
);
3177+
Some(visitor.buffer.to_owned())
3178+
}
3179+
ast::ForeignItemKind::Fn(_, ref fn_sig, ref generics, None) => rewrite_fn_base(
31643180
context,
31653181
shape.indent,
31663182
self.ident,

src/formatting/visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
403403

404404
// Note that this only gets called for function definitions. Required methods
405405
// on traits do not get handled here.
406-
fn visit_fn(
406+
pub(crate) fn visit_fn(
407407
&mut self,
408408
fk: visit::FnKind<'_>,
409409
generics: &ast::Generics,

tests/target/issue-4313.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
extern "C" {
2+
fn f() {
3+
fn g() {}
4+
}
5+
}

0 commit comments

Comments
 (0)