@@ -290,13 +290,16 @@ 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)
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 {
298
+ if let Some ( ( _, dep) ) = name. split_once ( "dep:" ) {
299
+ Crate :: valid_dependency_name ( dep)
300
+ } else {
301
+ Crate :: valid_feature_name ( name)
298
302
}
299
- None => Crate :: valid_feature_name ( name. strip_prefix ( "dep:" ) . unwrap_or ( name) ) ,
300
303
}
301
304
}
302
305
@@ -587,5 +590,7 @@ mod tests {
587
590
assert ! ( Crate :: valid_feature( "foo?bar" ) . is_err( ) ) ;
588
591
assert ! ( Crate :: valid_feature( "bar.web" ) . is_ok( ) ) ;
589
592
assert ! ( Crate :: valid_feature( "foo/bar.web" ) . is_ok( ) ) ;
593
+ assert ! ( Crate :: valid_feature( "dep:0foo" ) . is_err( ) ) ;
594
+ assert ! ( Crate :: valid_feature( "0foo?/bar.web" ) . is_err( ) ) ;
590
595
}
591
596
}
0 commit comments