Comments (8)
When there is a ["foo/feature_name"] syntax in the [features] table, and dep:foo isn't found anywhere in the [features] table, it should be rewritten to be ["dep:foo", "foo/feature_name"]
Why does it need to be re-written, rather than ignored? I thought "foo/feature_name"
was "dep:foo", "foo?/feature_name"
.
from cargo.
I think it is the same in spirit, but just serde/derive
fails in the new edition with:
error: failed to parse manifest at `/Users/eric/Temp/foo/Cargo.toml`
Caused by:
feature `x` includes `serde/derive`, but `serde` is not a dependency
To be honest, I don't understand that error "is not a dependency". I'm guessing since the implicit feature is missing, perhaps it just fails to look it up in the features hash map? I have not looked.
from cargo.
The error is because the implementation strips unused optional dependencies.
I'll look into this to make sure we correctly detect what should be unused dependencies and update things accordingly.
from cargo.
Huh, this is surprising
Baseline:
[package]
name = "cargo-14010"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0.203", optional = true }
[features]
cargo +1.64 metadata | jq '.packages[0].features'
{
"serde": [
"dep:serde"
]
}
w/
foo = ["dep:serde"]
{
"foo": [
"dep:serde"
]
}
w/
foo = ["serde/derive"]
{
"foo": [
"serde/derive"
],
"serde": [
"dep:serde"
]
}
w/
foo = ["dep:serde", "serde?/derive"]
{
"foo": [
"dep:serde",
"serde?/derive"
]
}
So "dep_name/feature_name"
is different from "dep:dep_name", "dep_name?/feature_name"
in that the implicit feature doesn't get suppressed.
I'm guessing we had looked at the code when implementing the lint and stuff but I partially copied it but didn't think it through but went off of my incorrect intuition.
from cargo.
This makes me worried about dep_name/feature_name
syntax on Edition 2024. It now requires also adding dep:dep_name
at which point it isn't much different than dep_name?/feature_name
.
I had missing this part in past discussions (e.g. this zulip topic). It seems like we should have either changed it in Edition 2024 to not need dep:dep_name
or transition out the syntax according to #10556. I worry that changing the meaning of dep_name/feature_name
would be too subtle. Maybe we should at least go forward with the deprecation of dep_name/feature_name
as mentioned in the comments of #10556?
from cargo.
Also, another reason why deprecating implicit features doesn't play well with dep_name/feature_name
is that
[features]
foo = ["dep:dep_name"]
bar = ["dep_name/feature_name"]
and
[features]
bar = ["dep:dep_name", "dep_name/feature_name"]
are valid while the following is not
[features]
bar = ["dep_name/feature_name"]
That inconsistency feels weird.
from cargo.
So "dep_name/feature_name" is different from "dep:dep_name", "dep_name?/feature_name" in that the implicit feature doesn't get suppressed.
Yes, I suppose so.
And then the most important step is:
Then If the dep_name/dep_name_feature
or dep_name?/dep_name_feature
exists, then we should keep them when applying Cargo fix
?
from cargo.
I've split out the general cargo behavior questions in #14015 and #14016 so this can focus on just cargo fix
.
My thought is that we can fix this as suggested (adding dep:dep_name
) for now and if we deprecate dep_name/feature_name
then the fix for that can run on top of the fix for this.
from cargo.
Related Issues (20)
- workspace.default-members causes cargo run --bin from-other-crate to fail with an unhelpful error HOT 3
- shell_completions test issues HOT 3
- Different `RUSTFLAGS` between `cargo build` and `cargo clippy` invalidate "core" crate when using build-std HOT 1
- Saving a specific `message-format` to a file, while also producing "normal" output
- Duplicate warnings of `config` on Windows OS When using git-bash HOT 3
- Who is .cargo/config.toml meant for? HOT 2
- Option to ignore missing workspace members when building HOT 14
- cannot add `{}` as a dependency to itself HOT 2
- `cargo check --all-targets` gives bad error details when tests are disabled but benches aren't
- Better Toolchain Error and Help Messages HOT 7
- Inconsistent behavior when adding dependency tracked in workspace to member HOT 1
- Cargo incorrectly uses `-C linker-plugin-lto` to request bitcode only crates HOT 4
- no instructions on how to build cargo without a cargo installation. HOT 1
- Vendoring a git dependency with `+` in branch name is broken HOT 2
- cargo-timing.html supports dark mode HOT 1
- Next `tar-rs` update creates sparse entries by default HOT 4
- Default cargo output should prioritize warnings over "Compiling foo" line spam HOT 1
- `cfg(doc)` isn't set in build scripts HOT 1
- Loading of a git source is slow due to always checking if the submodule is updated HOT 5
- Downstream dependencies of a crate are rebuilt despite the changes not being public-facing HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cargo.