Skip to content

Commit

Permalink
refactor: update ABI/Extern handling
Browse files Browse the repository at this point in the history
Updates to account for changes in
rust-lang/rust#66271
  • Loading branch information
calebcartwright committed Jan 15, 2020
1 parent 53cb6fb commit e3e04af
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 12 deletions.
24 changes: 15 additions & 9 deletions rustfmt-core/rustfmt-lib/src/items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ impl<'a> Item<'a> {
fn from_foreign_mod(fm: &'a ast::ForeignMod, span: Span, config: &Config) -> Item<'a> {
Item {
keyword: "",
abi: format_abi(fm.abi, config.force_explicit_abi(), true),
abi: format_extern(ast::Extern::from_abi(fm.abi), config.force_explicit_abi(), true),
vis: None,
body: fm
.items
Expand All @@ -219,7 +219,8 @@ enum BodyElement<'a> {
pub(crate) struct FnSig<'a> {
decl: &'a ast::FnDecl,
generics: &'a ast::Generics,
abi: abi::Abi,
ext: ast::Extern,
// abi: abi::Abi,
is_async: Cow<'a, ast::IsAsync>,
constness: ast::Constness,
defaultness: ast::Defaultness,
Expand All @@ -236,7 +237,7 @@ impl<'a> FnSig<'a> {
FnSig {
decl,
generics,
abi: abi::Abi::Rust,
ext: ast::Extern::None,
is_async: Cow::Owned(ast::IsAsync::NotAsync),
constness: ast::Constness::NotConst,
defaultness: ast::Defaultness::Final,
Expand All @@ -246,15 +247,20 @@ impl<'a> FnSig<'a> {
}

pub(crate) fn from_method_sig(
method_sig: &'a ast::MethodSig,
method_sig: &'a ast::FnSig,
generics: &'a ast::Generics,
) -> FnSig<'a> {
// let abi = match method_sig.header.ext {
// ast::Extern::None => abi::Abi::Rust,
// ast::Extern::Implicit => abi::Abi::C,
// ast::Extern::Explicit(abi) => self.lower_abi(abi),
// };
FnSig {
unsafety: method_sig.header.unsafety,
is_async: Cow::Borrowed(&method_sig.header.asyncness.node),
constness: method_sig.header.constness.node,
defaultness: ast::Defaultness::Final,
abi: method_sig.header.abi,
ext: method_sig.header.ext,
decl: &*method_sig.decl,
generics,
visibility: DEFAULT_VISIBILITY,
Expand All @@ -271,7 +277,7 @@ impl<'a> FnSig<'a> {
visit::FnKind::ItemFn(_, fn_header, visibility, _) => FnSig {
decl,
generics,
abi: fn_header.abi,
ext: fn_header.ext,
constness: fn_header.constness.node,
is_async: Cow::Borrowed(&fn_header.asyncness.node),
defaultness,
Expand All @@ -296,8 +302,8 @@ impl<'a> FnSig<'a> {
result.push_str(format_constness(self.constness));
result.push_str(format_async(&self.is_async));
result.push_str(format_unsafety(self.unsafety));
result.push_str(&format_abi(
self.abi,
result.push_str(&format_extern(
self.ext,
context.config.force_explicit_abi(),
false,
));
Expand Down Expand Up @@ -383,7 +389,7 @@ impl<'a> FmtVisitor<'a> {
&mut self,
indent: Indent,
ident: ast::Ident,
sig: &ast::MethodSig,
sig: &ast::FnSig,
generics: &ast::Generics,
span: Span,
) -> Option<String> {
Expand Down
6 changes: 3 additions & 3 deletions rustfmt-core/rustfmt-lib/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use crate::shape::Shape;
use crate::source_map::SpanUtils;
use crate::spanned::Spanned;
use crate::utils::{
colon_spaces, extra_offset, first_line_width, format_abi, format_mutability,
colon_spaces, extra_offset, first_line_width, format_extern, format_mutability,
last_line_extendable, last_line_width, mk_sp, rewrite_ident,
};

Expand Down Expand Up @@ -772,8 +772,8 @@ fn rewrite_bare_fn(

result.push_str(crate::utils::format_unsafety(bare_fn.unsafety));

result.push_str(&format_abi(
bare_fn.abi,
result.push_str(&format_extern(
bare_fn.ext,
context.config.force_explicit_abi(),
false,
));
Expand Down
10 changes: 10 additions & 0 deletions rustfmt-core/rustfmt-lib/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,16 @@ pub(crate) fn format_mutability(mutability: ast::Mutability) -> &'static str {
}
}

#[inline]
pub(crate) fn format_extern(ext: ast::Extern, explicit_abi: bool, is_mod: bool) -> Cow<'static, str> {
match (ext, explicit_abi, is_mod) {
(ast::Extern::None, _, false) => Cow::from(""),
(ast::Extern::Implicit, false, _) => Cow::from("extern "),
(ast::Extern::Explicit(abi), _, _) => Cow::from(format!("extern {} ", abi.symbol_unescaped.as_str())),
(_, _, _) => unreachable!(),
}
}

#[inline]
pub(crate) fn format_abi(abi: abi::Abi, explicit_abi: bool, is_mod: bool) -> Cow<'static, str> {
if abi == abi::Abi::Rust && !is_mod {
Expand Down

0 comments on commit e3e04af

Please sign in to comment.