mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
Merge pull request #2864 from topecongiro/issue-2863
Modify the rule for reordering impl items
This commit is contained in:
commit
69ad879d52
14
src/items.rs
14
src/items.rs
@ -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 {
|
||||
|
25
tests/source/issue-2863.rs
Normal file
25
tests/source/issue-2863.rs
Normal 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");}
|
||||
}
|
54
tests/target/issue-2863.rs
Normal file
54
tests/target/issue-2863.rs
Normal 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");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user