@@ -692,8 +692,14 @@ fn resolve_dependencies<'a>(
692
692
693
693
let mut deps = BTreeMap :: new ( ) ;
694
694
for ( name_in_toml, v) in dependencies. iter ( ) {
695
- let mut resolved =
696
- dependency_inherit_with ( v. clone ( ) , name_in_toml, inherit, package_root, warnings) ?;
695
+ let mut resolved = dependency_inherit_with (
696
+ v. clone ( ) ,
697
+ name_in_toml,
698
+ inherit,
699
+ package_root,
700
+ edition,
701
+ warnings,
702
+ ) ?;
697
703
if let manifest:: TomlDependency :: Detailed ( ref mut d) = resolved {
698
704
deprecated_underscore (
699
705
& d. default_features2 ,
@@ -949,12 +955,13 @@ fn dependency_inherit_with<'a>(
949
955
name : & str ,
950
956
inherit : & dyn Fn ( ) -> CargoResult < & ' a InheritableFields > ,
951
957
package_root : & Path ,
958
+ edition : Edition ,
952
959
warnings : & mut Vec < String > ,
953
960
) -> CargoResult < manifest:: TomlDependency > {
954
961
match dependency {
955
962
manifest:: InheritableDependency :: Value ( value) => Ok ( value) ,
956
963
manifest:: InheritableDependency :: Inherit ( w) => {
957
- inner_dependency_inherit_with ( w, name, inherit, package_root, warnings) . with_context ( || {
964
+ inner_dependency_inherit_with ( w, name, inherit, package_root, edition , warnings) . with_context ( || {
958
965
format ! (
959
966
"error inheriting `{name}` from workspace root manifest's `workspace.dependencies.{name}`" ,
960
967
)
@@ -968,6 +975,7 @@ fn inner_dependency_inherit_with<'a>(
968
975
name : & str ,
969
976
inherit : & dyn Fn ( ) -> CargoResult < & ' a InheritableFields > ,
970
977
package_root : & Path ,
978
+ edition : Edition ,
971
979
warnings : & mut Vec < String > ,
972
980
) -> CargoResult < manifest:: TomlDependency > {
973
981
let ws_dep = inherit ( ) ?. get_dependency ( name, package_root) ?;
@@ -1002,12 +1010,12 @@ fn inner_dependency_inherit_with<'a>(
1002
1010
// workspace: default-features = true should ignore member
1003
1011
// default-features
1004
1012
( Some ( false ) , Some ( true ) ) => {
1005
- deprecated_ws_default_features ( name, Some ( true ) , warnings) ;
1013
+ deprecated_ws_default_features ( name, Some ( true ) , edition , warnings) ? ;
1006
1014
}
1007
1015
// member: default-features = false and
1008
1016
// workspace: dep = "1.0" should ignore member default-features
1009
1017
( Some ( false ) , None ) => {
1010
- deprecated_ws_default_features ( name, None , warnings) ;
1018
+ deprecated_ws_default_features ( name, None , edition , warnings) ? ;
1011
1019
}
1012
1020
_ => { }
1013
1021
}
@@ -1030,18 +1038,24 @@ fn inner_dependency_inherit_with<'a>(
1030
1038
fn deprecated_ws_default_features (
1031
1039
label : & str ,
1032
1040
ws_def_feat : Option < bool > ,
1041
+ edition : Edition ,
1033
1042
warnings : & mut Vec < String > ,
1034
- ) {
1043
+ ) -> CargoResult < ( ) > {
1035
1044
let ws_def_feat = match ws_def_feat {
1036
1045
Some ( true ) => "true" ,
1037
1046
Some ( false ) => "false" ,
1038
1047
None => "not specified" ,
1039
1048
} ;
1040
- warnings. push ( format ! (
1041
- "`default-features` is ignored for {label}, since `default-features` was \
1049
+ if Edition :: Edition2024 <= edition {
1050
+ anyhow:: bail!( "`default-features = false` cannot override workspace's `default-features`" ) ;
1051
+ } else {
1052
+ warnings. push ( format ! (
1053
+ "`default-features` is ignored for {label}, since `default-features` was \
1042
1054
{ws_def_feat} for `workspace.dependencies.{label}`, \
1043
1055
this could become a hard error in the future"
1044
- ) )
1056
+ ) ) ;
1057
+ }
1058
+ Ok ( ( ) )
1045
1059
}
1046
1060
1047
1061
#[ tracing:: instrument( skip_all) ]
0 commit comments