Skip to content

Commit b23fe07

Browse files
committed
Fix the validation for optional dep
Signed-off-by: hi-rustin <rustin.liu@gmail.com>
1 parent 028a235 commit b23fe07

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

Diff for: src/models/krate.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,14 @@ impl Crate {
290290

291291
/// Validates a whole feature string, `features = ["THIS", "and/THIS", "dep:THIS", "dep?/THIS"]`.
292292
pub fn valid_feature(name: &str) -> AppResult<()> {
293-
match name.split_once('/') {
294-
Some((dep, dep_feat)) => {
295-
let dep = dep.strip_suffix('?').unwrap_or(dep);
296-
Crate::valid_dependency_name(dep)?;
297-
Crate::valid_feature_name(dep_feat)
298-
}
299-
None => Crate::valid_feature_name(name.strip_prefix("dep:").unwrap_or(name)),
293+
if let Some((dep, dep_feat)) = name.split_once('/') {
294+
let dep = dep.strip_suffix('?').unwrap_or(dep);
295+
Crate::valid_dependency_name(dep)?;
296+
Crate::valid_feature_name(dep_feat)
297+
} else if let Some((_, dep)) = name.split_once("dep:") {
298+
Crate::valid_dependency_name(dep)
299+
} else {
300+
Crate::valid_feature_name(name)
300301
}
301302
}
302303

@@ -587,5 +588,7 @@ mod tests {
587588
assert!(Crate::valid_feature("foo?bar").is_err());
588589
assert!(Crate::valid_feature("bar.web").is_ok());
589590
assert!(Crate::valid_feature("foo/bar.web").is_ok());
591+
assert!(Crate::valid_feature("dep:0foo").is_err());
592+
assert!(Crate::valid_feature("0foo?/bar.web").is_err());
590593
}
591594
}

0 commit comments

Comments
 (0)