-
Notifications
You must be signed in to change notification settings - Fork 2.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bad error message when a strong dep features's depedency is an unused optional dependency #14016
Comments
|
|
We discussed this in today's team meeting and lean towards |
fix(fix): Address problems with implicit -> explicit feature migration ### What does this PR try to resolve? Within the scope of `cargo fix` there are two problems - We wipe out existing feature activations if it has the same name as an optional dependency - The `Cargo.toml` isn't parseable because the unused optional dependency won't "exist" if just `dep_name/feature_name` is used Fixes #14010 ### How should we test and review this PR? As for the unused optional dependency not "existing" error, - #14015 is for improving the message for weak dep features - #14016 is for re-evaluating how we handle this for strong dep features Depending on what solution we go with for #14016, we might want to revisit the second migration within this PR. This is one reason I made the commit separate (in addition to just making it clearer whats happening as this gets into some finer details of features). ### Additional information
This doesn't revert the last commit of rust-lang#14018 so that it works properly on Editions 2021 and 2024. Fixes rust-lang#14016
This doesn't revert the last commit of rust-lang#14018 so that it works properly on Editions 2021 and 2024. Fixes rust-lang#14016
Fixes rust-lang#14283 by re-opening rust-lang#14016 so we don't block people testing other Edition 2024 changes. This reverts commit 99fae91.
Revert "fix: Ensure dep/feature activates the dependency on 2024" ### What does this PR try to resolve? Fixes #14283 by re-opening #14016 so we don't block people testing other Edition 2024 changes. ### How should we test and review this PR? This reverts commit 99fae91. I initially held off on reverting in case we quickly had a clear direction to go. Since we're still doing some investigation, I decided to move forward with this. ### Additional information
`all-is-cubes-port` is used only by the glTF test, so the `gltf` feature should enable it and there's no need for enabling specific features. This is a workaround for <rust-lang/cargo#14016> affecting my testing against nightly & edition 2024. I'm not sure whether I prefer it overall.
When we tried to fix this with #14221, we caused #14283. The following content is adapted from #14283 and https://blog.rust-lang.org/inside-rust/2024/08/15/this-development-cycle-in-cargo-1.81.html#removing-implicit-features Let's step back to the beginning of how all of this works. package.edition = "2021"
[features]
feature = ["dep/feature"]
[dependencies]
dep = { version = "1", optional = true } will cause a As we want to suppress implicit features in 2024, we strip all optional dependencies like that. This led to a new problem: package.edition = "2024"
[features]
feature = ["dep/feature"]
[dependencies]
dep = { version = "1", optional = true } As We solved this by implicitly adding Logically, checking
We could break this cycle by making a lot of assumptions about the unresolved forms. If we solved this now, we would be stuck with it forever. In examining the potential alternatives, it seemed better to design a more holistic solution rather than being stuck with the maintenance burden that solving this now would cause. Other options include
Whatever we design, we need to keep in mind that
|
Due to problems we ran into with rust-lang#14016, we're removing implicit features from the 2024 edition to give ourselves more time to design it as we should. I could have added a new flag for this or made an EditionNext but I decided to remove it in the hopes to avoid any path dependency in solving this the next time.
Due to problems we ran into with rust-lang#14016, we're removing implicit features from the 2024 edition to give ourselves more time to design it as we should. I could have added a new flag for this or made an EditionNext but I decided to remove it in the hopes to avoid any path dependency in solving this the next time.
fix: Remove implicit feature removal ### What does this PR try to resolve? Due to problems we ran into with #14016, we're removing implicit features from the 2024 edition to give ourselves more time to design it as we should. ### How should we test and review this PR? ### Additional information I could have added a new flag for this or made an EditionNext but I decided to remove it in the hopes to avoid any path dependency in solving this the next time.
Problem
If nothing can activate an optional dependency, cargo acts as if the dependency doesn't exist which creates poor error messages.
Also, with how things are arranged, the unused optional dependency lint doesn't get reported which could at least reduce the burden on the error message.
Steps
Baseline
Cargo.toml
:Add the following to
Cargo.toml
:Possible Solution(s)
dep:serde
ifserde/derive
is usedserde/derive
syntax, removing it in a new edition (Transition out weak feature syntax in an edition #10556)Notes
This was split out of #14015 assuming we'll go with a different solution than it
Version
No response
The text was updated successfully, but these errors were encountered: