diff --git a/src/cargo/util/command_prelude.rs b/src/cargo/util/command_prelude.rs index ee9146ce9..486fee26b 100644 --- a/src/cargo/util/command_prelude.rs +++ b/src/cargo/util/command_prelude.rs @@ -345,7 +345,22 @@ pub trait CommandExt: Sized { self._arg( opt("lockfile-path", "Path to Cargo.lock (unstable)") .value_name("PATH") - .help_heading(heading::MANIFEST_OPTIONS), + .help_heading(heading::MANIFEST_OPTIONS) + .add(clap_complete::engine::ArgValueCompleter::new( + clap_complete::engine::PathCompleter::any().filter(|path: &Path| { + let file_name = match path.file_name() { + Some(name) => name, + None => return false, + }; + + // allow directories + if path.is_dir() { + return true; + } + // allow `Cargo.lock` file + file_name == OsStr::new("Cargo.lock") + }), + )), ) }