@@ -290,13 +290,14 @@ impl Crate {
290
290
291
291
/// Validates a whole feature string, `features = ["THIS", "and/THIS", "dep:THIS", "dep?/THIS"]`.
292
292
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)
300
301
}
301
302
}
302
303
@@ -587,5 +588,7 @@ mod tests {
587
588
assert ! ( Crate :: valid_feature( "foo?bar" ) . is_err( ) ) ;
588
589
assert ! ( Crate :: valid_feature( "bar.web" ) . is_ok( ) ) ;
589
590
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( ) ) ;
590
593
}
591
594
}
0 commit comments