Merge pull request #766 from ConnorGBrewster/fix-#489
Added option for tighter punctuation in types. fixes #489
This commit is contained in:
commit
ba465e0fc2
4 changed files with 32 additions and 2 deletions
|
@ -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";
|
||||
|
|
15
src/types.rs
15
src/types.rs
|
@ -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))))
|
||||
|
|
5
tests/source/type-punctuation.rs
Normal file
5
tests/source/type-punctuation.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
// rustfmt-type_punctuation_density: Compressed
|
||||
|
||||
fn Foo<T = Foo, Output = Expr<'tcx> + Foo>() {
|
||||
let i = 6;
|
||||
}
|
5
tests/target/type-punctuation.rs
Normal file
5
tests/target/type-punctuation.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
// rustfmt-type_punctuation_density: Compressed
|
||||
|
||||
fn Foo<T=Foo, Output=Expr<'tcx>+Foo>() {
|
||||
let i = 6;
|
||||
}
|
Loading…
Reference in a new issue