Merge pull request #2862 from topecongiro/issue-2852

Preserve parens in trait bounds
This commit is contained in:
Nick Cameron 2018-07-27 16:24:11 +12:00 committed by GitHub
commit 814f6339b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 2 deletions

View file

@ -521,7 +521,24 @@ impl Rewrite for ast::GenericBound {
impl Rewrite for ast::GenericBounds { impl Rewrite for ast::GenericBounds {
fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> { fn rewrite(&self, context: &RewriteContext, shape: Shape) -> Option<String> {
join_bounds(context, shape, self, true) if self.is_empty() {
return Some(String::new());
}
let span = mk_sp(self.get(0)?.span().lo(), self.last()?.span().hi());
let has_paren = context.snippet(span).starts_with("(");
let bounds_shape = if has_paren {
shape.offset_left(1)?.sub_width(1)?
} else {
shape
};
join_bounds(context, bounds_shape, self, true).map(|s| {
if has_paren {
format!("({})", s)
} else {
s
}
})
} }
} }

View file

@ -1,5 +1,7 @@
#![feature(dyn_trait)] #![feature(dyn_trait)]
fn main() { fn main() {
// #2506
// checks rustfmt doesn't remove dyn // checks rustfmt doesn't remove dyn
trait MyTrait { trait MyTrait {
fn method(&self) -> u64; fn method(&self) -> u64;
@ -13,4 +15,6 @@ fn main() {
fn f2(a: Box<dyn Very_______________________Long__________________Name____________________Trait+ 'static,>) {} fn f2(a: Box<dyn Very_______________________Long__________________Name____________________Trait+ 'static,>) {}
// #2582
let _: &dyn (::std::any::Any) = &msg;
} }

View file

@ -1,5 +1,7 @@
#![feature(dyn_trait)] #![feature(dyn_trait)]
fn main() { fn main() {
// #2506
// checks rustfmt doesn't remove dyn // checks rustfmt doesn't remove dyn
trait MyTrait { trait MyTrait {
fn method(&self) -> u64; fn method(&self) -> u64;
@ -19,4 +21,7 @@ fn main() {
>, >,
) { ) {
} }
// #2582
let _: &dyn (::std::any::Any) = &msg;
} }

View file

@ -107,4 +107,4 @@ pub(crate) fn init() {}
crate fn init() {} crate fn init() {}
// #2630 // #2630
fn make_map<T, F: Fn(&T) -> String>(records: &Vec<T>, key_fn: F) -> HashMap<String, usize> {} fn make_map<T, F: (Fn(&T) -> String)>(records: &Vec<T>, key_fn: F) -> HashMap<String, usize> {}