Skip to content

Commit 8608938

Browse files
committed
Sort crate features by name
This patch changes one detail implemented in rust-lang#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.
1 parent a0438c4 commit 8608938

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/web/features.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ pub fn build_features_handler(req: &mut Request) -> IronResult<Response> {
6060
let row = cexpect!(req, rows.get(0));
6161

6262
let mut features = None;
63+
// features enabled by the default feature flag
6364
let mut default_len = 0;
6465

6566
if let Some(raw) = row.get(0) {
@@ -79,15 +80,22 @@ pub fn build_features_handler(req: &mut Request) -> IronResult<Response> {
7980
fn order_features_and_count_default_len(raw: Vec<Feature>) -> (Vec<Feature>, usize) {
8081
let mut feature_map = get_feature_map(raw);
8182
let mut features = get_tree_structure_from_default(&mut feature_map);
82-
let mut remaining: Vec<_> = feature_map
83+
let remaining: Vec<_> = feature_map
8384
.into_iter()
8485
.map(|(_, feature)| feature)
8586
.collect();
86-
remaining.sort_by_key(|feature| feature.subfeatures.len());
8787

8888
let default_len = features.len();
8989

9090
features.extend(remaining.into_iter().rev());
91+
features.sort_by(|a, b| {
92+
// 'default' feature is special and should always stay on top
93+
if b.name == "default" {
94+
std::cmp::Ordering::Greater
95+
} else {
96+
a.name.partial_cmp(&b.name).unwrap()
97+
}
98+
});
9199
(features, default_len)
92100
}
93101

0 commit comments

Comments
 (0)