Skip to content

Commit

Permalink
Suggest where feature should be placed
Browse files Browse the repository at this point in the history
  • Loading branch information
jhpratt committed Nov 16, 2021
1 parent 77b0613 commit 2a82d1c
Showing 1 changed file with 39 additions and 6 deletions.
45 changes: 39 additions & 6 deletions src/tools/tidy/src/features.rs
Expand Up @@ -258,7 +258,7 @@ fn collect_lang_features_in(base: &Path, file: &str, bad: &mut bool) -> Features
let mut next_feature_omits_tracking_issue = false;

let mut in_feature_group = false;
let mut prev_name = None;
let mut prev_names = vec![];

contents
.lines()
Expand Down Expand Up @@ -291,11 +291,11 @@ fn collect_lang_features_in(base: &Path, file: &str, bad: &mut bool) -> Features
}

in_feature_group = true;
prev_name = None;
prev_names = vec![];
return None;
} else if line.starts_with(FEATURE_GROUP_END_PREFIX) {
in_feature_group = false;
prev_name = None;
prev_names = vec![];
return None;
}

Expand Down Expand Up @@ -325,16 +325,49 @@ fn collect_lang_features_in(base: &Path, file: &str, bad: &mut bool) -> Features
}
};
if in_feature_group {
if prev_name > Some(name) {
if prev_names.last() > Some(&name) {
// This assumes the user adds the feature name at the end of the list, as we're
// not looking ahead.
let correct_index = match prev_names.binary_search(&name) {
Ok(_) => {
// This only occurs when the feature name has already been declared.
tidy_error!(
bad,
"{}:{}: duplicate feature {}",
path.display(),
line_number,
name,
);
// skip any additional checks for this line
return None;
}
Err(index) => index,
};

let correct_placement = if correct_index == 0 {
"at the beginning of the feature group".to_owned()
} else if correct_index == prev_names.len() {
// I don't believe this is reachable given the above assumption, but it
// doesn't hurt to be safe.
"at the end of the feature group".to_owned()
} else {
format!(
"between {} and {}",
prev_names[correct_index - 1],
prev_names[correct_index],
)
};

tidy_error!(
bad,
"{}:{}: feature {} is not sorted by feature name",
"{}:{}: feature {} is not sorted by feature name (should be {})",
path.display(),
line_number,
name,
correct_placement,
);
}
prev_name = Some(name);
prev_names.push(name);
}

let issue_str = parts.next().unwrap().trim();
Expand Down

0 comments on commit 2a82d1c

Please sign in to comment.