From 86089385354aa4e2bc2c595c62ad95ffbfb43a58 Mon Sep 17 00:00:00 2001 From: apiraino Date: Wed, 17 Mar 2021 16:14:33 +0100 Subject: [PATCH] Sort crate features by name This patch changes one detail implemented in #1144. The features flag sorting was by "number of subfeatures". Now it by feature alphabetically. It also ensure that the "default" feature stays on top of the list. --- src/web/features.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/web/features.rs b/src/web/features.rs index 6e9ab0aa5..c35808963 100644 --- a/src/web/features.rs +++ b/src/web/features.rs @@ -60,6 +60,7 @@ pub fn build_features_handler(req: &mut Request) -> IronResult { let row = cexpect!(req, rows.get(0)); let mut features = None; + // features enabled by the default feature flag let mut default_len = 0; if let Some(raw) = row.get(0) { @@ -79,15 +80,22 @@ pub fn build_features_handler(req: &mut Request) -> IronResult { fn order_features_and_count_default_len(raw: Vec) -> (Vec, usize) { let mut feature_map = get_feature_map(raw); let mut features = get_tree_structure_from_default(&mut feature_map); - let mut remaining: Vec<_> = feature_map + let remaining: Vec<_> = feature_map .into_iter() .map(|(_, feature)| feature) .collect(); - remaining.sort_by_key(|feature| feature.subfeatures.len()); let default_len = features.len(); features.extend(remaining.into_iter().rev()); + features.sort_by(|a, b| { + // 'default' feature is special and should always stay on top + if b.name == "default" { + std::cmp::Ordering::Greater + } else { + a.name.partial_cmp(&b.name).unwrap() + } + }); (features, default_len) }