summaryrefslogtreecommitdiff
path: root/bindgen/codegen/postprocessing/sort_semantically.rs
diff options
context:
space:
mode:
authorChristian Poveda <31802960+pvdrz@users.noreply.github.com>2022-10-10 09:46:26 -0500
committerGitHub <noreply@github.com>2022-10-10 09:46:26 -0500
commitd241e9554c393ba39e18aa3ef3fc3e14175a2b08 (patch)
treee00ac5a1c686a55ed9a9288ab796e274a9a63900 /bindgen/codegen/postprocessing/sort_semantically.rs
parentc8d569930e006a7e0975dfbaaf5e5d591749b30a (diff)
parent4dd91ff6d72fb5df122e5957f31d1368e84d80a2 (diff)
Merge pull request #2299 from ferrous-systems/more-robust-postprocessing
Make postprocessing more robust
Diffstat (limited to 'bindgen/codegen/postprocessing/sort_semantically.rs')
-rw-r--r--bindgen/codegen/postprocessing/sort_semantically.rs58
1 files changed, 36 insertions, 22 deletions
diff --git a/bindgen/codegen/postprocessing/sort_semantically.rs b/bindgen/codegen/postprocessing/sort_semantically.rs
index 96596cb0..4f23ab73 100644
--- a/bindgen/codegen/postprocessing/sort_semantically.rs
+++ b/bindgen/codegen/postprocessing/sort_semantically.rs
@@ -1,24 +1,38 @@
-use syn::Item;
+use syn::{
+ visit_mut::{visit_item_mod_mut, VisitMut},
+ Item, ItemMod,
+};
-pub(super) fn sort_semantically(items: &mut [Item]) {
- 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,
- });
+pub(super) fn sort_semantically(item_mod: &mut ItemMod) {
+ 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)
+ }
}