refactor: Consolidate feature name validation logic

This commit is contained in:
Ed Page 2023-12-12 10:33:07 -06:00
parent 58745cb1c5
commit b0ce24a79d

View file

@ -191,18 +191,6 @@ fn build_feature_map(
// Validate features are listed properly.
for (feature, fvs) in &map {
if feature.starts_with("dep:") {
bail!(
"feature named `{}` is not allowed to start with `dep:`",
feature
);
}
if feature.contains('/') {
bail!(
"feature named `{}` is not allowed to contain slashes",
feature
);
}
validate_feature_name(pkg_id, feature)?;
for fv in fvs {
// Find data for the referenced dependency...
@ -434,6 +422,13 @@ fn validate_feature_name(pkg_id: PackageId, name: &str) -> CargoResult<()> {
if name.is_empty() {
bail!("feature name cannot be empty");
}
if name.starts_with("dep:") {
bail!("feature named `{name}` is not allowed to start with `dep:`",);
}
if name.contains('/') {
bail!("feature named `{name}` is not allowed to contain slashes",);
}
let mut chars = name.chars();
if let Some(ch) = chars.next() {
if !(unicode_xid::UnicodeXID::is_xid_start(ch) || ch == '_' || ch.is_digit(10)) {