Merge pull request #2864 from topecongiro/issue-2863

Modify the rule for reordering impl items
This commit is contained in:
Nick Cameron 2018-07-27 16:24:46 +12:00 committed by GitHub
commit 69ad879d52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 3 deletions

View File

@ -591,23 +591,31 @@ impl<'a> FmtVisitor<'a> {
buffer.push((self.buffer.clone(), item.clone()));
self.buffer.clear();
}
// type -> const -> macro -> method
// type -> existential -> const -> macro -> method
use ast::ImplItemKind::*;
fn need_empty_line(a: &ast::ImplItemKind, b: &ast::ImplItemKind) -> bool {
match (a, b) {
(Type(..), Type(..)) | (Const(..), Const(..)) => false,
(Type(..), Type(..))
| (Const(..), Const(..))
| (Existential(..), Existential(..)) => false,
_ => true,
}
}
buffer.sort_by(|(_, a), (_, b)| match (&a.node, &b.node) {
(Type(..), Type(..))
| (Const(..), Const(..))
| (Macro(..), Macro(..))
| (Existential(..), Existential(..)) => a.ident.as_str().cmp(&b.ident.as_str()),
(Method(..), Method(..)) => a.span.lo().cmp(&b.span.lo()),
(Type(..), _) => Ordering::Less,
(_, Type(..)) => Ordering::Greater,
(Existential(..), _) => Ordering::Less,
(_, Existential(..)) => Ordering::Greater,
(Const(..), _) => Ordering::Less,
(_, Const(..)) => Ordering::Greater,
(Macro(..), _) => Ordering::Less,
(_, Macro(..)) => Ordering::Greater,
_ => a.span.lo().cmp(&b.span.lo()),
});
let mut prev_kind = None;
for (buf, item) in buffer {

View File

@ -0,0 +1,25 @@
// rustfmt-reorder_impl_items: true
impl<T> IntoIterator for SafeVec<T> {
existential type F: Trait;
type IntoIter = self::IntoIter<T>;
type Item = T;
// comment on foo()
fn foo() {println!("hello, world");}
type Bar = u32;
fn foo1() {println!("hello, world");}
type FooBar = u32;
fn foo2() {println!("hello, world");}
fn foo3() {println!("hello, world");}
const SomeConst: i32 = 100;
fn foo4() {println!("hello, world");}
fn foo5() {println!("hello, world");}
// comment on FoooooBar
type FoooooBar = u32;
fn foo6() {println!("hello, world");}
fn foo7() {println!("hello, world");}
type BarFoo = u32;
existential type E: Trait;
const AnotherConst: i32 = 100;
fn foo8() {println!("hello, world");}
}

View File

@ -0,0 +1,54 @@
// rustfmt-reorder_impl_items: true
impl<T> IntoIterator for SafeVec<T> {
type Bar = u32;
type BarFoo = u32;
type FooBar = u32;
// comment on FoooooBar
type FoooooBar = u32;
type IntoIter = self::IntoIter<T>;
type Item = T;
existential type E: Trait;
existential type F: Trait;
const AnotherConst: i32 = 100;
const SomeConst: i32 = 100;
// comment on foo()
fn foo() {
println!("hello, world");
}
fn foo1() {
println!("hello, world");
}
fn foo2() {
println!("hello, world");
}
fn foo3() {
println!("hello, world");
}
fn foo4() {
println!("hello, world");
}
fn foo5() {
println!("hello, world");
}
fn foo6() {
println!("hello, world");
}
fn foo7() {
println!("hello, world");
}
fn foo8() {
println!("hello, world");
}
}