out: epage
cargo yank
with a message/reason. Slowed down by crates.io, they would like to have experimental feature in crates.io. That has not yet been implemented. Plan to look at this after finishing what I'm currently working on.cargo-util-schemas
incorporated into crates.io. Was working on adding the determination if a package has a library or a binary. There are some problems with trying to make that distinction. Tried to solve that in cargo-manifest. Release model doesn't match crates.io release process. There were some concerns about using cargo-util-schemas
. There seems to be some resistance.cargo-util-schemas
, has alternative solution, cargo-manifest
could use cargo-util-schemas
. Need someone to help step up to support.
out: epage
--partial-build=<reserved-name>
to avoid polluting the namespace that is more extensible without adding more--compile-time-deps
flag seems confusing.Cargo.toml
.config.toml
.Cargo.toml
, and override in config.toml
if you want.base="workspace"
.
cargo-*
or something like that.Source
?
.crate
files: https://lawngno.me/blog/2024/06/10/divine-provenance.htmldep_name/feature_name
: https://github.com/rust-lang/cargo/issues/14016
foo/feature_name
, and only have ["dep:dep_name", "dep_name?/feature_name"]
?
, but walking back on that since I think it could be too confusing.foo/feature_name
imply dep:foo
.
dep:
.cargo test
(normally only available in cargo rustc
).cargo rustc
?
cargo rustc
cargo rustc
?cargo test
exactly which units it applies to. (lib versus test)enables
. Could be other things like activate
.enables
is the obvious answer.
deps=[...], features=[..]
so we aren't using string parsing to interpret. Downside is very bikesheddable which could block this.required
could be confusingenables
, a more common english word, easier to typeenable
) would have an error message suggesting the correct form.Cargo.toml
published version be normalized to avoid msrv? But not concerned about that. The implementation might just happen to do that, though.cargo_toml
or cargo_manifest
? Should we ping them?
resolver.rust-version
yanked
would be a global option to enable.
--precise
to override that.incompatible-rust-version = "fallback"
--json emitted-artifacts
in rustc could limit which artifacts are emitted
--emit
.deps
, and not "uplifting" to the output directory.cargo metadata
, it does not link to cargo
.--emit
to cargo rustc
, so that cargo knows what you are trying to accomplish and can provide all the information (JSON, uplifting the output, etc.).cargo rustc
, you are already reaching for a direct usage of rustc
, so accessing raw details like --emit
should be fine.panic = "abort"
in custom harness
#[cfg(panic = "unwind")]
profile
which is across all targets and we intentionally ignore it in tests to avoid bins being aborted to affect testsprofile.test.panic = "unwind"
if that is the behavior you want.build.rs = '''
fn main() {
...
}
'''
# or
build.rs.output = '''
cargo::directive=...
'''
build.rs
seems pretty rarebuild.rs
being out of scope for cargo-script)--precise <yanked|pre-release>
pre-release
matching logic to semver
<3.0
match 3.0-alpha
? This could be a weird expectation.semver
maintainer, could help get feedback.update --precise
.Cargo.lock
?update --precise
, but there are possibly inconsistent semantics with operators. <2
versus ^2
, would like to have those to have semantics and behavior that make sense so that pre-releases are not both <
and >
.diagnostic
table? Would there be other ideas of things that would go there?diagnostic
table:
diagnostics.install-lib = {packages=[...]}
diagnostic
namespace?-
unexpected_cfgs
, not unexpected-cfgs
lints.rust.unexpected-cfgs.check-cfg
, this gives an unused manifest key warning.lints.rust
, would it be ok to support both to be consistent with rustc?
'
versus "
for shipping this feature?_
and -
issue is also an issue for feature names and dependencies, where it is externally defined.[lints]
table?
check-cfg
without the level. The level="warn"
is restating the default, so doesn't seem necessary.[package]
at top-level? This would be convenient for cargo-script, to allow writing just edtion = "2024"
rather than package.edition = "2024"
.
#[serde(flatten)]
causes annoyances with things like unused manifest keys, maybe error messagesCargo.toml
s.Cargo.toml
.
envs
for example.--check-cfg
[cfg]
, but what about
[lints.rust]
unexpected_cfg = "allow"
unexpected_cfg = { level = "allow", check-cfg = ["cfg(any)"] }
unexpected_cfg = { check-cfg = ["cfg(any)"] }
build.rs
solution timely.-Aunexpected-cfg
.[lints]
config.level="warn"
in the sub-table, but that appears to be required.unexpected_cfg
is the lint name, and it needs to be able to set the level as a string, so it can't be something else.level
to be optional?
cargo fix --edition
?
-Zno-index-update
just for crater.emit_warnings
only called for compilation commands and cargo fetch
cargo publish
will do this for the published-manifest unless --no-verify
is usedcargo verify-project
cargo metadata
but if/when we do json output for diagnostics things would be confusing to parsecargo tree
?cargo vendor
as it could affect vendoring?cargo metadata
).cargo metadata
since that isn't human consumable right now. cargo publish --no-verify
is one of the stranger ones, but I guess that since you are saying "no verify", then it is ok not to tell the user.[project]
table.cargo metadata
? What that would see would probably be too minor.out: epage, josh
all@
email).cfg
checking
Cargo.toml
, but we decided not to support that since it created a parallel system to cargo features, and we didn't want to create that, and instead extend cargo features to support the use cases (global features, private features, etc.)
warning: unexpected `cfg` condition name: `foo`
--> src/main.rs:2:13
|
2 | if cfg!(foo) {}
| ^^^
|
= help: expected names are: `clippy`, `debug_assertions`, `doc`, `docsrs`, `doctest`, `feature`, `miri`, `overflow_checks`, `panic`, `proc_macro`, `relocation_model`, `rustfmt`, `sanitize`, `sanitizer_cfi_generalize_pointers`, `sanitizer_cfi_normalize_integers`, `target_abi`, `target_arch`, `target_endian`, `target_env`, `target_family`, `target_feature`, `target_has_atomic`, `target_has_atomic_equal_alignment`, `target_has_atomic_load_store`, `target_os`, `target_pointer_width`, `target_thread_local`, `target_vendor`, `test`, `ub_checks`, `unix`, `windows`
= help: consider using a Cargo feature instead or adding `println!("cargo::rustc-check-cfg=cfg(foo)");` to the top of the `build.rs`
= note: see <https://doc.rust-lang.org/nightly/cargo/reference/build-scripts.html#rustc-check-cfg> for more information about checking conditional configuration
= note: `#[warn(unexpected_cfgs)]` on by default
allow(unexpected_cfgs)
rustc
.fuzzing
?
fuzzing
isn't clear if you do or don't want your dependencies to behave differently when fuzzing
is enabled.*.worker.js
-C link-args=-pthread
rustc
tell cargo what files should be copied, just never got around to designing that.worker.js
to the list of special files (we already have .wasm.map
).out: jacob, rustin
[lints]
on package/publish?
[lints.cargo]
on publish to avoid accidential MSRV bumps[lints]
stabilizationlints
table itself wasn't an error (thus not an MSRV requirement), but random tools (sub-tables) are an error, and lints.cargo
generates an error.lints.cargo
require an msrv bump.[workspace]
..crate
file manually.package.metadata
.lints.cargo
is already a warning, this would only affect other tools.-
and _
in [lints.cargo]
?
_
internally, but allowed -
and _
to be used in [lints.cargo]
rustc-dev-guide
, and RFC #0344, though it appears both are referring to attribute macros, not rustc's CLI-
, as -D unused_imports
gets rewritten to -D unused-imports
when used in note: requested on the command line with
messages-
to _
internally when specified on the command linedev_dependencies
vs dependencies
-
and _
:
-
and _
(see the rustc lints section)-
and emitting a warning with a suggestion when _
is encounteredlints.cargo
support underscores and dashes? Or just dashes? Or just underscores?lints.cargo
).dependencies.bit-vec = {}
bit-vec = "*"
CARGO_BUILD_SBOM
vs using a profileCargo.toml
, the other is someone building software as a distribution and I want to set it for everything (like config.toml
/env var)._
deprecation still some small work left.dev
inherit release
cargo::dev
and cargo::release
and allow dev
to do whatever it wantsrun
profile
cargo run
to it--release
in #!
header on platforms where that is supporteddev
Cargo.toml
. There is some intentional limitations in what a script can do (ie build-scripts, multiple file, etc.)default-profile = "release"
. In the manifest format. Take the opportunity for config options to go in the manifest.cargo install
) not where it is run. In that case, the script author might be able to control that.~/.cargo/config.toml
).cargo install
reloads before). There are some config options, like profiles, that are loaded early during workspace loading.default-profile
option or similar.cargo <foo>
test
can't be invoked as cargo test
, only cargo ./test
cargo-script
binary./
, which requires it to be on the path (possibly by having the working directory in the path), seems sufficiently uncommon that this doesn't seem critical to fix. And if you put a script into a directory on the path, you probably give it a reasonable name.test
which won't work.test
.AT_EXECFN
.Cargo.lock
or should they be ignored?
[target.'cfg()']
that evaluates to never.v
field in the index.Cargo.lock
, possibly different from what they had before.
cargo fix --edition
.Cargo.toml
manifest is in the index? Some feedback from infra suggests that the size of the index files does not seem to be a concern.Summary
/ before publishfalse
, but that's because readme
has auto-discovery.[project]
(replaced with [package]
)
cargo package
cargo metadata
, may need to do some jq
magic.src/
" from nested packages
cargo deny
is changing the "unmaintained" status from a warning to an error. The database is agnostic to the severity of the warning. Unfortunately it is getting presented all as the same level.xz
.
cargo-deny
(embark), cargo-audit
(official), and cargo-audit
github action. cargo-audit
classifies as a warning. cargo-deny
is more flexible of warnings versus errors. GitHub action generates issues.
cargo deny
officially part of cargo, but things like this identify the kind of quagmire that has. But perhaps there could be a subset of less controversial things (like checking licenses) in cargo, and have the more opinionated parts farther away.
.crate
files. Requires an opt-in via Cargo.toml
fields.publish="nested"
, then it cannot be published by default.use lib::main;
#[test]
instead of a separate binarypub
moniker that indicates that it only exists for certain crates (in the namespace?)..crate
is to avoid needing to deal with version numbers, metadata (like licenses). Workspace cargo publish
can help, but there is still overhead for managing the set of packages.pub
idea, can this be enforced?
cargo vendor
makes it a little difficult to do things like modifying vendored dependencies. Nested packages goes against that intention of discouraging that.-sys
crate for an FFI library could be a private crate. Include the considerations for when to use these nested packages.path
only.Cargo.toml
?Cargo.toml
for this.