forked from rust-lang/rust-bindgen
/
sort_semantically.rs
44 lines (40 loc) · 1.2 KB
/
sort_semantically.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use syn::{
visit_mut::{visit_item_mod_mut, VisitMut},
Item, ItemMod,
};
use crate::BindgenOptions;
#[inline]
pub(super) fn sort_semantically(
item_mod: &mut ItemMod,
_options: &BindgenOptions,
) {
Visitor.visit_item_mod_mut(item_mod)
}
struct Visitor;
impl VisitMut for Visitor {
fn visit_item_mod_mut(&mut self, item_mod: &mut ItemMod) {
if let Some((_, ref mut items)) = item_mod.content {
items.sort_by_key(|item| match item {
Item::Type(_) => 0,
Item::Struct(_) => 1,
Item::Const(_) => 2,
Item::Fn(_) => 3,
Item::Enum(_) => 4,
Item::Union(_) => 5,
Item::Static(_) => 6,
Item::Trait(_) => 7,
Item::TraitAlias(_) => 8,
Item::Impl(_) => 9,
Item::Mod(_) => 10,
Item::Use(_) => 11,
Item::Verbatim(_) => 12,
Item::ExternCrate(_) => 13,
Item::ForeignMod(_) => 14,
Item::Macro(_) => 15,
Item::Macro2(_) => 16,
_ => 18,
});
}
visit_item_mod_mut(self, item_mod)
}
}