From 62e38860b90238f901ce6d5ea7ce7ca0108b51e5 Mon Sep 17 00:00:00 2001 From: topecongiro Date: Fri, 29 Sep 2017 15:08:48 +0900 Subject: [PATCH] Handle 'extern "Rust"' in format_abi() --- src/items.rs | 10 +++------- src/types.rs | 14 ++++++-------- src/utils.rs | 6 ++++-- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/items.rs b/src/items.rs index a22d1ec292b..f32ea1c803f 100644 --- a/src/items.rs +++ b/src/items.rs @@ -10,6 +10,7 @@ // Formatting top-level items - functions, structs, enums, traits, impls. +use std::borrow::Cow; use std::cmp::min; use syntax::{abi, ast, ptr, symbol}; @@ -126,7 +127,7 @@ impl Rewrite for ast::Local { #[allow(dead_code)] struct Item<'a> { keyword: &'static str, - abi: String, + abi: Cow<'static, str>, vis: Option<&'a ast::Visibility>, body: Vec>, span: Span, @@ -134,14 +135,9 @@ struct Item<'a> { impl<'a> Item<'a> { fn from_foreign_mod(fm: &'a ast::ForeignMod, span: Span, config: &Config) -> Item<'a> { - let abi = if fm.abi == abi::Abi::C && !config.force_explicit_abi() { - "extern".into() - } else { - format!("extern {}", fm.abi) - }; Item { keyword: "", - abi: abi, + abi: format_abi(fm.abi, config.force_explicit_abi(), true), vis: None, body: fm.items .iter() diff --git a/src/types.rs b/src/types.rs index 311192889d3..1d6c80fb939 100644 --- a/src/types.rs +++ b/src/types.rs @@ -11,7 +11,6 @@ use std::iter::ExactSizeIterator; use std::ops::Deref; -use syntax::abi; use syntax::ast::{self, FunctionRetTy, Mutability}; use syntax::codemap::{self, BytePos, Span}; use syntax::print::pprust; @@ -26,7 +25,7 @@ use lists::{definitive_tactic, itemize_list, write_list, ListFormatting, ListTac SeparatorPlace, SeparatorTactic}; use rewrite::{Rewrite, RewriteContext}; use shape::Shape; -use utils::{colon_spaces, extra_offset, format_mutability, last_line_width, mk_sp}; +use utils::{colon_spaces, extra_offset, format_abi, format_mutability, last_line_width, mk_sp}; #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum PathContext { @@ -792,12 +791,11 @@ fn rewrite_bare_fn( result.push_str(::utils::format_unsafety(bare_fn.unsafety)); - if bare_fn.abi != abi::Abi::Rust { - result.push_str(&::utils::format_abi( - bare_fn.abi, - context.config.force_explicit_abi(), - )); - } + result.push_str(&format_abi( + bare_fn.abi, + context.config.force_explicit_abi(), + false, + )); result.push_str("fn"); diff --git a/src/utils.rs b/src/utils.rs index 3c97044f5c4..a01e22aae29 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -88,8 +88,10 @@ pub fn format_mutability(mutability: ast::Mutability) -> &'static str { } #[inline] -pub fn format_abi(abi: abi::Abi, explicit_abi: bool) -> Cow<'static, str> { - if abi == abi::Abi::C && !explicit_abi { +pub fn format_abi(abi: abi::Abi, explicit_abi: bool, is_mod: bool) -> Cow<'static, str> { + if abi == abi::Abi::Rust && !is_mod { + Cow::from("") + } else if abi == abi::Abi::C && !explicit_abi { Cow::from("extern ") } else { Cow::from(format!("extern {} ", abi))