Added option for tighter punctuation in types. fixes #489
This commit is contained in:
Marcus Klaas de Vries 2016-01-12 22:52:34 +01:00
commit ba465e0fc2
4 changed files with 32 additions and 2 deletions

View file

@ -73,6 +73,13 @@ configuration_option_enum! { Density:
CompressedIfEmpty,
}
configuration_option_enum! { TypeDensity:
// No spaces around "=" and "+"
Compressed,
// Spaces around " = " and " + "
Wide,
}
impl Density {
pub fn to_list_tactic(self) -> ListTactic {
match self {
@ -279,6 +286,8 @@ create_config! {
fn_args_density: Density, Density::Tall, "Argument density in functions";
fn_args_layout: StructLitStyle, StructLitStyle::Visual, "Layout of function arguments";
fn_arg_indent: BlockIndentStyle, BlockIndentStyle::Visual, "Indent on function arguments";
type_punctuation_density: TypeDensity, TypeDensity::Wide,
"Determines if '+' or '=' are wrapped in spaces in the punctuation of types";
// Should we at least try to put the where clause on the same line as the rest of the
// function decl?
where_density: Density, Density::CompressedIfEmpty, "Density of a where clause";

View file

@ -21,6 +21,7 @@ use lists::{format_item_list, itemize_list, format_fn_args};
use rewrite::{Rewrite, RewriteContext};
use utils::{extra_offset, span_after, format_mutability, wrap_str};
use expr::{rewrite_unary_prefix, rewrite_pair, rewrite_tuple};
use config::TypeDensity;
// Does not wrap on simple segments.
pub fn rewrite_path(context: &RewriteContext,
@ -424,7 +425,12 @@ impl Rewrite for ast::TyParam {
result.push_str(&bounds);
}
if let Some(ref def) = self.default {
result.push_str(" = ");
let eq_str = match context.config.type_punctuation_density {
TypeDensity::Compressed => "=",
TypeDensity::Wide => " = ",
};
result.push_str(eq_str);
let budget = try_opt!(width.checked_sub(result.len()));
let rewrite = try_opt!(def.rewrite(context, budget, offset + result.len()));
result.push_str(&rewrite);
@ -467,8 +473,13 @@ impl Rewrite for ast::Ty {
ast::TyObjectSum(ref ty, ref bounds) => {
let ty_str = try_opt!(ty.rewrite(context, width, offset));
let overhead = ty_str.len() + 3;
Some(format!("{} + {}",
let plus_str = match context.config.type_punctuation_density {
TypeDensity::Compressed => "+",
TypeDensity::Wide => " + ",
};
Some(format!("{}{}{}",
ty_str,
plus_str,
try_opt!(bounds.rewrite(context,
try_opt!(width.checked_sub(overhead)),
offset + overhead))))

View file

@ -0,0 +1,5 @@
// rustfmt-type_punctuation_density: Compressed
fn Foo<T = Foo, Output = Expr<'tcx> + Foo>() {
let i = 6;
}

View file

@ -0,0 +1,5 @@
// rustfmt-type_punctuation_density: Compressed
fn Foo<T=Foo, Output=Expr<'tcx>+Foo>() {
let i = 6;
}