From 4cc9208b2542d92adfd36563518f6345ff0dbb8e Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Tue, 12 Sep 2023 09:16:36 +0800 Subject: [PATCH 1/7] lint: follow convention no capitcal letter in first word --- clippy.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clippy.toml b/clippy.toml index 050cc871638..f50e3658819 100644 --- a/clippy.toml +++ b/clippy.toml @@ -1,8 +1,8 @@ allow-print-in-tests = true allow-dbg-in-tests = true disallowed-methods = [ - { path = "std::env::var", reason = "Use `Config::get_env` instead. See rust-lang/cargo#11588" }, - { path = "std::env::var_os", reason = "Use `Config::get_env_os` instead. See rust-lang/cargo#11588" }, - { path = "std::env::vars", reason = "Not recommended to use in Cargo. See rust-lang/cargo#11588" }, - { path = "std::env::vars_os", reason = "Not recommended to use in Cargo. See rust-lang/cargo#11588" }, + { path = "std::env::var", reason = "use `Config::get_env` instead. See rust-lang/cargo#11588" }, + { path = "std::env::var_os", reason = "use `Config::get_env_os` instead. See rust-lang/cargo#11588" }, + { path = "std::env::vars", reason = "not recommended to use in Cargo. See rust-lang/cargo#11588" }, + { path = "std::env::vars_os", reason = "not recommended to use in Cargo. See rust-lang/cargo#11588" }, ] From f9d82a17030c5519b18e95b08f37ecc9a3b6f7fd Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Tue, 12 Sep 2023 10:12:12 +0800 Subject: [PATCH 2/7] lint: remove unused `dbg!` --- crates/cargo-test-support/src/registry.rs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/crates/cargo-test-support/src/registry.rs b/crates/cargo-test-support/src/registry.rs index 8ab44f4ad5f..05af009ce84 100644 --- a/crates/cargo-test-support/src/registry.rs +++ b/crates/cargo-test-support/src/registry.rs @@ -846,7 +846,6 @@ impl HttpServer { if footer.url != "https://github.com/rust-lang/crates.io-index" && footer.url != &format!("sparse+http://{}/index/", self.addr.to_string()) { - dbg!(footer.url); return false; } @@ -869,13 +868,11 @@ impl HttpServer { return false; } if private_key_subject.as_deref() != message.sub { - dbg!(message.sub); return false; } // - If the claim v is set, that it has the value of 1. if let Some(v) = message.v { if v != 1 { - dbg!(message.v); return false; } } @@ -885,22 +882,18 @@ impl HttpServer { if let Some(mutation) = mutation { // - That the operation matches the mutation field and is one of publish, yank, or unyank. if message.mutation != Some(mutation.mutation) { - dbg!(message.mutation); return false; } // - That the package, and version match the request. if message.name != mutation.name { - dbg!(message.name); return false; } if message.vers != mutation.vers { - dbg!(message.vers); return false; } // - If the mutation is publish, that the version has not already been published, and that the hash matches the request. if mutation.mutation == "publish" { if message.cksum != mutation.cksum { - dbg!(message.cksum); return false; } } From 437942ee7e71517eb03029344d9907866cfbf8e6 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Tue, 12 Sep 2023 11:27:16 +0800 Subject: [PATCH 3/7] lint: use `eprintln` for human-facing outputs --- crates/mdman/src/main.rs | 2 +- crates/resolver-tests/src/lib.rs | 2 +- crates/semver-check/src/main.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/mdman/src/main.rs b/crates/mdman/src/main.rs index 8fa912b2aae..facaa512047 100644 --- a/crates/mdman/src/main.rs +++ b/crates/mdman/src/main.rs @@ -48,7 +48,7 @@ fn run() -> Result<(), Error> { if same_file::is_same_file(source, &out_path).unwrap_or(false) { bail!("cannot output to the same file as the source"); } - println!("Converting {} -> {}", source.display(), out_path.display()); + eprintln!("Converting {} -> {}", source.display(), out_path.display()); let result = mdman::convert(&source, opts.format, opts.url.clone(), opts.man_map.clone()) .with_context(|| format!("failed to translate {}", source.display()))?; diff --git a/crates/resolver-tests/src/lib.rs b/crates/resolver-tests/src/lib.rs index 166936dae81..12f6171b120 100644 --- a/crates/resolver-tests/src/lib.rs +++ b/crates/resolver-tests/src/lib.rs @@ -163,7 +163,7 @@ pub fn resolve_with_config_raw( if std::thread::panicking() && self.list.len() != self.used.len() { // we found a case that causes a panic and did not use all of the input. // lets print the part of the input that was used for minimization. - println!( + eprintln!( "{:?}", PrettyPrintRegistry( self.list diff --git a/crates/semver-check/src/main.rs b/crates/semver-check/src/main.rs index 1ba405f576a..9ea0d1244a0 100644 --- a/crates/semver-check/src/main.rs +++ b/crates/semver-check/src/main.rs @@ -20,7 +20,7 @@ use std::process::{Command, Output}; fn main() { if let Err(e) = doit() { - println!("error: {}", e); + eprintln!("error: {}", e); std::process::exit(1); } } @@ -103,7 +103,7 @@ fn doit() -> Result<(), Box> { result }; let expect_success = parts[0][0].contains("MINOR"); - println!("Running test from line {}", block_start); + eprintln!("Running test from line {}", block_start); let result = run_test( join(parts[1]), From 85a3e9ace0dde1bb23453953b505bcbd72613940 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Thu, 25 May 2023 09:29:04 +0100 Subject: [PATCH 4/7] lint: move module-level doc comment to top --- src/cargo/lib.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/cargo/lib.rs b/src/cargo/lib.rs index d562667e905..913c041b6af 100644 --- a/src/cargo/lib.rs +++ b/src/cargo/lib.rs @@ -1,16 +1,3 @@ -// For various reasons, some idioms are still allow'ed, but we would like to -// test and enforce them. -#![warn(rust_2018_idioms)] -// Due to some of the default clippy lints being somewhat subjective and not -// necessarily an improvement, we prefer to not use them at this time. -#![allow(clippy::all)] -#![warn(clippy::disallowed_methods)] -#![warn(clippy::self_named_module_files)] -#![warn(clippy::print_stdout)] -#![warn(clippy::print_stderr)] -#![warn(clippy::dbg_macro)] -#![allow(rustdoc::private_intra_doc_links)] - //! # Cargo as a library //! //! There are two places you can find API documentation of cargo-the-library, @@ -144,6 +131,20 @@ //! [The Cargo Book]: https://doc.rust-lang.org/cargo/ //! [Cargo Contributor Guide]: https://doc.crates.io/contrib/ +// TODO: consider removing these lint attributes when `-Zlints` hits stable. +// For various reasons, some idioms are still allow'ed, but we would like to +// test and enforce them. +#![warn(rust_2018_idioms)] +// Due to some of the default clippy lints being somewhat subjective and not +// necessarily an improvement, we prefer to not use them at this time. +#![allow(clippy::all)] +#![warn(clippy::disallowed_methods)] +#![warn(clippy::self_named_module_files)] +#![warn(clippy::print_stdout)] +#![warn(clippy::print_stderr)] +#![warn(clippy::dbg_macro)] +#![allow(rustdoc::private_intra_doc_links)] + use crate::core::shell::Verbosity::Verbose; use crate::core::Shell; use anyhow::Error; From aef3bd22d32b9cb5599000de37935ebba12bb3e5 Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Tue, 12 Sep 2023 12:01:34 +0800 Subject: [PATCH 5/7] lint: fix errors for rust 2018 idioms --- crates/cargo-platform/src/error.rs | 4 ++-- crates/cargo-test-macro/src/lib.rs | 2 -- crates/cargo-test-support/src/registry.rs | 7 ++++--- crates/mdman/src/hbs.rs | 12 +++++------ crates/mdman/src/lib.rs | 2 +- crates/xtask-bump-check/src/xtask.rs | 6 +++--- .../cargo-credential-1password/src/main.rs | 4 ++-- .../cargo-credential-libsecret/src/lib.rs | 10 +++++----- .../cargo-credential-wincred/src/lib.rs | 4 ++-- .../examples/file-provider.rs | 4 ++-- .../examples/stdout-redirected.rs | 4 ++-- credential/cargo-credential/src/lib.rs | 20 +++++++++---------- 12 files changed, 39 insertions(+), 40 deletions(-) diff --git a/crates/cargo-platform/src/error.rs b/crates/cargo-platform/src/error.rs index bf4b35f271d..2d5b315f9e7 100644 --- a/crates/cargo-platform/src/error.rs +++ b/crates/cargo-platform/src/error.rs @@ -21,7 +21,7 @@ pub enum ParseErrorKind { } impl fmt::Display for ParseError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "failed to parse `{}` as a cfg expression: {}", @@ -31,7 +31,7 @@ impl fmt::Display for ParseError { } impl fmt::Display for ParseErrorKind { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use ParseErrorKind::*; match self { UnterminatedString => write!(f, "unterminated string in cfg"), diff --git a/crates/cargo-test-macro/src/lib.rs b/crates/cargo-test-macro/src/lib.rs index aa06f477de0..937fbce6be5 100644 --- a/crates/cargo-test-macro/src/lib.rs +++ b/crates/cargo-test-macro/src/lib.rs @@ -1,5 +1,3 @@ -extern crate proc_macro; - use proc_macro::*; use std::process::Command; use std::sync::Once; diff --git a/crates/cargo-test-support/src/registry.rs b/crates/cargo-test-support/src/registry.rs index 05af009ce84..f70bacf044f 100644 --- a/crates/cargo-test-support/src/registry.rs +++ b/crates/cargo-test-support/src/registry.rs @@ -790,7 +790,7 @@ impl HttpServer { } } - fn check_authorized(&self, req: &Request, mutation: Option) -> bool { + fn check_authorized(&self, req: &Request, mutation: Option>) -> bool { let (private_key, private_key_subject) = if mutation.is_some() || self.auth_required { match &self.token { Token::Plaintext(token) => return Some(token) == req.authorization.as_ref(), @@ -832,7 +832,8 @@ impl HttpServer { url: &'a str, kip: &'a str, } - let footer: Footer = t!(serde_json::from_slice(untrusted_token.untrusted_footer()).ok()); + let footer: Footer<'_> = + t!(serde_json::from_slice(untrusted_token.untrusted_footer()).ok()); if footer.kip != paserk_pub_key_id { return false; } @@ -861,7 +862,7 @@ impl HttpServer { _challenge: Option<&'a str>, // todo: PASETO with challenges v: Option, } - let message: Message = t!(serde_json::from_str(trusted_token.payload()).ok()); + let message: Message<'_> = t!(serde_json::from_str(trusted_token.payload()).ok()); let token_time = t!(OffsetDateTime::parse(message.iat, &Rfc3339).ok()); let now = OffsetDateTime::now_utc(); if (now - token_time) > Duration::MINUTE { diff --git a/crates/mdman/src/hbs.rs b/crates/mdman/src/hbs.rs index 81ad7ee458d..055eb3f2894 100644 --- a/crates/mdman/src/hbs.rs +++ b/crates/mdman/src/hbs.rs @@ -12,7 +12,7 @@ use std::path::Path; type FormatterRef<'a> = &'a (dyn Formatter + Send + Sync); /// Processes the handlebars template at the given file. -pub fn expand(file: &Path, formatter: FormatterRef) -> Result { +pub fn expand(file: &Path, formatter: FormatterRef<'_>) -> Result { let mut handlebars = Handlebars::new(); handlebars.set_strict_mode(true); handlebars.register_helper("lower", Box::new(lower)); @@ -174,10 +174,10 @@ impl HelperDef for ManLinkHelper<'_> { /// /// This sets a variable to a value within the template context. fn set_decorator( - d: &Decorator, - _: &Handlebars, + d: &Decorator<'_, '_>, + _: &Handlebars<'_>, _ctx: &Context, - rc: &mut RenderContext, + rc: &mut RenderContext<'_, '_>, ) -> Result<(), RenderError> { let data_to_set = d.hash(); for (k, v) in data_to_set { @@ -187,7 +187,7 @@ fn set_decorator( } /// Sets a variable to a value within the context. -fn set_in_context(rc: &mut RenderContext, key: &str, value: serde_json::Value) { +fn set_in_context(rc: &mut RenderContext<'_, '_>, key: &str, value: serde_json::Value) { let mut ctx = match rc.context() { Some(c) => (*c).clone(), None => Context::wraps(serde_json::Value::Object(serde_json::Map::new())).unwrap(), @@ -201,7 +201,7 @@ fn set_in_context(rc: &mut RenderContext, key: &str, value: serde_json::Value) { } /// Removes a variable from the context. -fn remove_from_context(rc: &mut RenderContext, key: &str) { +fn remove_from_context(rc: &mut RenderContext<'_, '_>, key: &str) { let ctx = rc.context().expect("cannot remove from null context"); let mut ctx = (*ctx).clone(); if let serde_json::Value::Object(m) = ctx.data_mut() { diff --git a/crates/mdman/src/lib.rs b/crates/mdman/src/lib.rs index 01c3c8d3154..5cfb3f4cac9 100644 --- a/crates/mdman/src/lib.rs +++ b/crates/mdman/src/lib.rs @@ -64,7 +64,7 @@ pub fn convert( type EventIter<'a> = Box, Range)> + 'a>; /// Creates a new markdown parser with the given input. -pub(crate) fn md_parser(input: &str, url: Option) -> EventIter { +pub(crate) fn md_parser(input: &str, url: Option) -> EventIter<'_> { let mut options = Options::empty(); options.insert(Options::ENABLE_TABLES); options.insert(Options::ENABLE_FOOTNOTES); diff --git a/crates/xtask-bump-check/src/xtask.rs b/crates/xtask-bump-check/src/xtask.rs index c50d51efdc3..5af9491bb55 100644 --- a/crates/xtask-bump-check/src/xtask.rs +++ b/crates/xtask-bump-check/src/xtask.rs @@ -105,7 +105,7 @@ fn config_configure(config: &mut Config, args: &ArgMatches) -> CliResult { /// Main entry of `xtask-bump-check`. /// /// Assumption: version number are incremental. We never have point release for old versions. -fn bump_check(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> CargoResult<()> { +fn bump_check(args: &clap::ArgMatches, config: &cargo::util::Config) -> CargoResult<()> { let ws = args.workspace(config)?; let repo = git2::Repository::open(ws.root())?; let base_commit = get_base_commit(config, args, &repo)?; @@ -184,7 +184,7 @@ fn bump_check(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> Carg status("no version bump needed for member crates.")?; - return Ok(()); + Ok(()) } /// Returns the commit of upstream `master` branch if `base-rev` is missing. @@ -256,7 +256,7 @@ fn get_referenced_commit<'a>( repo: &'a git2::Repository, base: &git2::Commit<'a>, ) -> CargoResult>> { - let [beta, stable] = beta_and_stable_branch(&repo)?; + let [beta, stable] = beta_and_stable_branch(repo)?; let rev_id = base.id(); let stable_commit = stable.get().peel_to_commit()?; let beta_commit = beta.get().peel_to_commit()?; diff --git a/credential/cargo-credential-1password/src/main.rs b/credential/cargo-credential-1password/src/main.rs index a2607fd2f60..921b521456a 100644 --- a/credential/cargo-credential-1password/src/main.rs +++ b/credential/cargo-credential-1password/src/main.rs @@ -255,8 +255,8 @@ pub struct OnePasswordCredential {} impl Credential for OnePasswordCredential { fn perform( &self, - registry: &RegistryInfo, - action: &Action, + registry: &RegistryInfo<'_>, + action: &Action<'_>, args: &[&str], ) -> Result { let op = OnePasswordKeychain::new(args)?; diff --git a/credential/cargo-credential-libsecret/src/lib.rs b/credential/cargo-credential-libsecret/src/lib.rs index f83b424ee51..ee179760539 100644 --- a/credential/cargo-credential-libsecret/src/lib.rs +++ b/credential/cargo-credential-libsecret/src/lib.rs @@ -104,16 +104,16 @@ mod linux { impl Credential for LibSecretCredential { fn perform( &self, - registry: &RegistryInfo, - action: &Action, + registry: &RegistryInfo<'_>, + action: &Action<'_>, _args: &[&str], ) -> Result { // Dynamically load libsecret to avoid users needing to install // additional -dev packages when building this provider. let lib; - let secret_password_lookup_sync: Symbol; - let secret_password_store_sync: Symbol; - let secret_password_clear_sync: Symbol; + let secret_password_lookup_sync: Symbol<'_, SecretPasswordLookupSync>; + let secret_password_store_sync: Symbol<'_, SecretPasswordStoreSync>; + let secret_password_clear_sync: Symbol<'_, SecretPasswordClearSync>; unsafe { lib = Library::new("libsecret-1.so").context( "failed to load libsecret: try installing the `libsecret` \ diff --git a/credential/cargo-credential-wincred/src/lib.rs b/credential/cargo-credential-wincred/src/lib.rs index 9200ca58fd6..24b072ee28a 100644 --- a/credential/cargo-credential-wincred/src/lib.rs +++ b/credential/cargo-credential-wincred/src/lib.rs @@ -38,8 +38,8 @@ mod win { impl Credential for WindowsCredential { fn perform( &self, - registry: &RegistryInfo, - action: &Action, + registry: &RegistryInfo<'_>, + action: &Action<'_>, _args: &[&str], ) -> Result { match action { diff --git a/credential/cargo-credential/examples/file-provider.rs b/credential/cargo-credential/examples/file-provider.rs index d119585360d..3ed312cb833 100644 --- a/credential/cargo-credential/examples/file-provider.rs +++ b/credential/cargo-credential/examples/file-provider.rs @@ -12,8 +12,8 @@ struct FileCredential; impl Credential for FileCredential { fn perform( &self, - registry: &RegistryInfo, - action: &Action, + registry: &RegistryInfo<'_>, + action: &Action<'_>, _args: &[&str], ) -> Result { if registry.index_url != "https://github.com/rust-lang/crates.io-index" { diff --git a/credential/cargo-credential/examples/stdout-redirected.rs b/credential/cargo-credential/examples/stdout-redirected.rs index 0b9bcc2f7af..75a2d16d1eb 100644 --- a/credential/cargo-credential/examples/stdout-redirected.rs +++ b/credential/cargo-credential/examples/stdout-redirected.rs @@ -7,8 +7,8 @@ struct MyCredential; impl Credential for MyCredential { fn perform( &self, - _registry: &RegistryInfo, - _action: &Action, + _registry: &RegistryInfo<'_>, + _action: &Action<'_>, _args: &[&str], ) -> Result { // Informational messages should be sent on stderr. diff --git a/credential/cargo-credential/src/lib.rs b/credential/cargo-credential/src/lib.rs index 85ff9919ee0..60bce65be54 100644 --- a/credential/cargo-credential/src/lib.rs +++ b/credential/cargo-credential/src/lib.rs @@ -61,8 +61,8 @@ pub struct UnsupportedCredential; impl Credential for UnsupportedCredential { fn perform( &self, - _registry: &RegistryInfo, - _action: &Action, + _registry: &RegistryInfo<'_>, + _action: &Action<'_>, _args: &[&str], ) -> Result { Err(Error::UrlNotSupported) @@ -215,8 +215,8 @@ pub trait Credential { /// Retrieves a token for the given registry. fn perform( &self, - registry: &RegistryInfo, - action: &Action, + registry: &RegistryInfo<'_>, + action: &Action<'_>, args: &[&str], ) -> Result; } @@ -260,7 +260,7 @@ fn doit( fn deserialize_request( value: &str, ) -> Result, Box> { - let request: CredentialRequest = serde_json::from_str(&value)?; + let request: CredentialRequest<'_> = serde_json::from_str(&value)?; if request.v != PROTOCOL_VERSION_1 { return Err(format!("unsupported protocol version {}", request.v).into()); } @@ -276,8 +276,8 @@ pub fn read_line() -> Result { /// Prompt the user for a token. pub fn read_token( - login_options: &LoginOptions, - registry: &RegistryInfo, + login_options: &LoginOptions<'_>, + registry: &RegistryInfo<'_>, ) -> Result, Error> { if let Some(token) = &login_options.token { return Ok(token.to_owned()); @@ -387,7 +387,7 @@ mod tests { r#"{"v":1,"registry":{"index-url":"url"},"kind":"get","operation":"owners","name":"pkg"}"# ); - let cr: CredentialRequest = + let cr: CredentialRequest<'_> = serde_json::from_str(r#"{"extra-1":true,"v":1,"registry":{"index-url":"url","extra-2":true},"kind":"get","operation":"owners","name":"pkg","args":[]}"#).unwrap(); assert_eq!(cr, get_oweners); } @@ -405,7 +405,7 @@ mod tests { action: Action::Logout, }; - let cr: CredentialRequest = serde_json::from_str( + let cr: CredentialRequest<'_> = serde_json::from_str( r#"{"v":1,"registry":{"index-url":"url"},"kind":"logout","extra-1":true,"args":[]}"#, ) .unwrap(); @@ -425,7 +425,7 @@ mod tests { action: Action::Unknown, }; - let cr: CredentialRequest = serde_json::from_str( + let cr: CredentialRequest<'_> = serde_json::from_str( r#"{"v":1,"registry":{"index-url":""},"kind":"unexpected-1","extra-1":true,"args":[]}"#, ) .unwrap(); From 463622ad81256f5c0c418d426e4fa2307b4dd61f Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Tue, 12 Sep 2023 12:20:59 +0800 Subject: [PATCH 6/7] lint: fix errors for self-named module files --- crates/mdman/src/{format.rs => format/mod.rs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename crates/mdman/src/{format.rs => format/mod.rs} (100%) diff --git a/crates/mdman/src/format.rs b/crates/mdman/src/format/mod.rs similarity index 100% rename from crates/mdman/src/format.rs rename to crates/mdman/src/format/mod.rs From c4f9712a42498ba91dce22f2b55b33219ab9848b Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Thu, 14 Sep 2023 14:44:37 +0800 Subject: [PATCH 7/7] chore: bump patch version due to refactor --- Cargo.lock | 4 ++-- credential/cargo-credential-libsecret/Cargo.toml | 2 +- credential/cargo-credential-wincred/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a9377f8a57a..fe16465f1d5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,7 +359,7 @@ dependencies = [ [[package]] name = "cargo-credential-libsecret" -version = "0.3.1" +version = "0.3.2" dependencies = [ "anyhow", "cargo-credential", @@ -376,7 +376,7 @@ dependencies = [ [[package]] name = "cargo-credential-wincred" -version = "0.3.0" +version = "0.3.1" dependencies = [ "cargo-credential", "windows-sys", diff --git a/credential/cargo-credential-libsecret/Cargo.toml b/credential/cargo-credential-libsecret/Cargo.toml index 1bd4bb7d063..5bedad3b9cb 100644 --- a/credential/cargo-credential-libsecret/Cargo.toml +++ b/credential/cargo-credential-libsecret/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-credential-libsecret" -version = "0.3.1" +version = "0.3.2" edition.workspace = true license.workspace = true repository = "https://github.com/rust-lang/cargo" diff --git a/credential/cargo-credential-wincred/Cargo.toml b/credential/cargo-credential-wincred/Cargo.toml index 8c609dc4ef4..6da6578a5c2 100644 --- a/credential/cargo-credential-wincred/Cargo.toml +++ b/credential/cargo-credential-wincred/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cargo-credential-wincred" -version = "0.3.0" +version = "0.3.1" edition.workspace = true license.workspace = true repository = "https://github.com/rust-lang/cargo"