1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-29 12:07:46 +00:00

Merge pull request #3524 from tertsdiepraam/clap-value-hints

Clap value hints
This commit is contained in:
Sylvestre Ledru 2022-05-14 09:18:04 +02:00 committed by GitHub
commit 0a7ff713e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
77 changed files with 240 additions and 74 deletions

View file

@ -123,7 +123,12 @@ pub fn base_app<'a>(about: &'a str, usage: &'a str) -> Command<'a> {
) )
// "multiple" arguments are used to check whether there is more than one // "multiple" arguments are used to check whether there is more than one
// file passed in. // file passed in.
.arg(Arg::new(options::FILE).index(1).multiple_occurrences(true)) .arg(
Arg::new(options::FILE)
.index(1)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
)
} }
pub fn get_input<'a>(config: &Config, stdin_ref: &'a Stdin) -> UResult<Box<dyn Read + 'a>> { pub fn get_input<'a>(config: &Config, stdin_ref: &'a Stdin) -> UResult<Box<dyn Read + 'a>> {

View file

@ -102,6 +102,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::NAME) Arg::new(options::NAME)
.multiple_occurrences(true) .multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath)
.hide(true), .hide(true),
) )
.arg( .arg(

View file

@ -249,7 +249,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::SHOW_ALL) Arg::new(options::SHOW_ALL)

View file

@ -197,6 +197,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::REFERENCE) .long(options::REFERENCE)
.takes_value(true) .takes_value(true)
.value_name("RFILE") .value_name("RFILE")
.value_hint(clap::ValueHint::FilePath)
.conflicts_with_all(&[options::USER, options::ROLE, options::TYPE, options::RANGE]) .conflicts_with_all(&[options::USER, options::ROLE, options::TYPE, options::RANGE])
.help( .help(
"Use security context of RFILE, rather than specifying \ "Use security context of RFILE, rather than specifying \
@ -210,6 +211,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::USER) .long(options::USER)
.takes_value(true) .takes_value(true)
.value_name("USER") .value_name("USER")
.value_hint(clap::ValueHint::Username)
.help("Set user USER in the target security context.") .help("Set user USER in the target security context.")
.allow_invalid_utf8(true), .allow_invalid_utf8(true),
) )
@ -294,6 +296,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new("FILE") Arg::new("FILE")
.multiple_occurrences(true) .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath)
.min_values(1) .min_values(1)
.allow_invalid_utf8(true), .allow_invalid_utf8(true),
) )

View file

@ -113,6 +113,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::REFERENCE) Arg::new(options::REFERENCE)
.long(options::REFERENCE) .long(options::REFERENCE)
.value_name("RFILE") .value_name("RFILE")
.value_hint(clap::ValueHint::FilePath)
.help("use RFILE's group rather than specifying GROUP values") .help("use RFILE's group rather than specifying GROUP values")
.takes_value(true) .takes_value(true)
.multiple_occurrences(false), .multiple_occurrences(false),

View file

@ -157,6 +157,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::REFERENCE) Arg::new(options::REFERENCE)
.long("reference") .long("reference")
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::FilePath)
.help("use RFILE's mode instead of MODE values"), .help("use RFILE's mode instead of MODE values"),
) )
.arg( .arg(
@ -170,7 +171,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.required_unless_present(options::MODE) .required_unless_present(options::MODE)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -134,6 +134,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::REFERENCE) .long(options::REFERENCE)
.help("use RFILE's owner and group rather than specifying OWNER:GROUP values") .help("use RFILE's owner and group rather than specifying OWNER:GROUP values")
.value_name("RFILE") .value_name("RFILE")
.value_hint(clap::ValueHint::FilePath)
.min_values(1), .min_values(1),
) )
.arg( .arg(

View file

@ -102,6 +102,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.infer_long_args(true) .infer_long_args(true)
.arg( .arg(
Arg::new(options::NEWROOT) Arg::new(options::NEWROOT)
.value_hint(clap::ValueHint::DirPath)
.hide(true) .hide(true)
.required(true) .required(true)
.index(1), .index(1),
@ -139,6 +140,7 @@ pub fn uu_app<'a>() -> Command<'a> {
) )
.arg( .arg(
Arg::new(options::COMMAND) Arg::new(options::COMMAND)
.value_hint(clap::ValueHint::CommandName)
.hide(true) .hide(true)
.multiple_occurrences(true) .multiple_occurrences(true)
.index(2), .index(2),

View file

@ -150,6 +150,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -173,6 +173,14 @@ pub fn uu_app<'a>() -> Command<'a> {
.default_value(options::DELIMITER_DEFAULT) .default_value(options::DELIMITER_DEFAULT)
.hide_default_value(true), .hide_default_value(true),
) )
.arg(Arg::new(options::FILE_1).required(true)) .arg(
.arg(Arg::new(options::FILE_2).required(true)) Arg::new(options::FILE_1)
.required(true)
.value_hint(clap::ValueHint::FilePath),
)
.arg(
Arg::new(options::FILE_2)
.required(true)
.value_hint(clap::ValueHint::FilePath),
)
} }

View file

@ -314,6 +314,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.conflicts_with(options::NO_TARGET_DIRECTORY) .conflicts_with(options::NO_TARGET_DIRECTORY)
.long(options::TARGET_DIRECTORY) .long(options::TARGET_DIRECTORY)
.value_name(options::TARGET_DIRECTORY) .value_name(options::TARGET_DIRECTORY)
.value_hint(clap::ValueHint::DirPath)
.takes_value(true) .takes_value(true)
.validator(|s| { .validator(|s| {
if Path::new(s).is_dir() { if Path::new(s).is_dir() {
@ -464,7 +465,8 @@ pub fn uu_app<'a>() -> Command<'a> {
// END TODO // END TODO
.arg(Arg::new(options::PATHS) .arg(Arg::new(options::PATHS)
.multiple_occurrences(true)) .multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath))
} }
#[uucore::main] #[uucore::main]

View file

@ -797,7 +797,12 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::ELIDE_EMPTY_FILES) .long(options::ELIDE_EMPTY_FILES)
.help("remove empty output files"), .help("remove empty output files"),
) )
.arg(Arg::new(options::FILE).hide(true).required(true)) .arg(
Arg::new(options::FILE)
.hide(true)
.required(true)
.value_hint(clap::ValueHint::FilePath),
)
.arg( .arg(
Arg::new(options::PATTERN) Arg::new(options::PATTERN)
.hide(true) .hide(true)

View file

@ -614,6 +614,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true) .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath)
) )
} }

View file

@ -272,6 +272,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.short('f') .short('f')
.long(OPT_FILE) .long(OPT_FILE)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::FilePath)
.help("like --date; once for each line of DATEFILE"), .help("like --date; once for each line of DATEFILE"),
) )
.arg( .arg(
@ -303,6 +304,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.short('r') .short('r')
.long(OPT_REFERENCE) .long(OPT_REFERENCE)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::AnyPath)
.help("display the last modification time of FILE"), .help("display the last modification time of FILE"),
) )
.arg( .arg(

View file

@ -742,6 +742,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::INFILE) .long(options::INFILE)
.overrides_with(options::INFILE) .overrides_with(options::INFILE)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::FilePath)
.require_equals(true) .require_equals(true)
.value_name("FILE") .value_name("FILE")
.help("(alternatively if=FILE) specifies the file used for input. When not specified, stdin is used instead") .help("(alternatively if=FILE) specifies the file used for input. When not specified, stdin is used instead")
@ -751,6 +752,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::OUTFILE) .long(options::OUTFILE)
.overrides_with(options::OUTFILE) .overrides_with(options::OUTFILE)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::FilePath)
.require_equals(true) .require_equals(true)
.value_name("FILE") .value_name("FILE")
.help("(alternatively of=FILE) specifies the file used for output. When not specified, stdout is used instead") .help("(alternatively of=FILE) specifies the file used for output. When not specified, stdout is used instead")

View file

@ -583,7 +583,11 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.help("limit listing to file systems not of type TYPE"), .help("limit listing to file systems not of type TYPE"),
) )
.arg(Arg::new(OPT_PATHS).multiple_occurrences(true)) .arg(
Arg::new(OPT_PATHS)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath),
)
} }
#[cfg(test)] #[cfg(test)]

View file

@ -187,6 +187,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.value_hint(clap::ValueHint::FilePath)
.multiple_occurrences(true), .multiple_occurrences(true),
) )
} }

View file

@ -88,5 +88,10 @@ pub fn uu_app<'a>() -> Command<'a> {
.short('z') .short('z')
.help("separate output with NUL rather than newline"), .help("separate output with NUL rather than newline"),
) )
.arg(Arg::new(options::DIR).hide(true).multiple_occurrences(true)) .arg(
Arg::new(options::DIR)
.hide(true)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath),
)
} }

View file

@ -884,6 +884,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.short('X') .short('X')
.long("exclude-from") .long("exclude-from")
.value_name("FILE") .value_name("FILE")
.value_hint(clap::ValueHint::FilePath)
.help("exclude files that match any pattern in FILE") .help("exclude files that match any pattern in FILE")
.multiple_occurrences(true) .multiple_occurrences(true)
@ -913,6 +914,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.value_hint(clap::ValueHint::AnyPath)
.multiple_occurrences(true) .multiple_occurrences(true)
) )
} }

View file

@ -144,6 +144,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.takes_value(true) .takes_value(true)
.number_of_values(1) .number_of_values(1)
.value_name("DIR") .value_name("DIR")
.value_hint(clap::ValueHint::DirPath)
.help("change working directory to DIR")) .help("change working directory to DIR"))
.arg(Arg::new("null") .arg(Arg::new("null")
.short('0') .short('0')
@ -156,6 +157,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.takes_value(true) .takes_value(true)
.number_of_values(1) .number_of_values(1)
.value_name("PATH") .value_name("PATH")
.value_hint(clap::ValueHint::FilePath)
.multiple_occurrences(true) .multiple_occurrences(true)
.help("read and set variables from a \".env\"-style configuration file (prior to any \ .help("read and set variables from a \".env\"-style configuration file (prior to any \
unset and/or set)")) unset and/or set)"))

View file

@ -207,6 +207,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.hide(true) .hide(true)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::FilePath)
) )
} }

View file

@ -344,6 +344,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -99,7 +99,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -112,6 +112,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::USERS) Arg::new(options::USERS)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.value_name(options::USERS), .value_name(options::USERS)
.value_hint(clap::ValueHint::Username),
) )
} }

View file

@ -423,6 +423,7 @@ pub fn uu_app_common<'a>() -> Command<'a> {
.index(1) .index(1)
.multiple_occurrences(true) .multiple_occurrences(true)
.value_name("FILE") .value_name("FILE")
.value_hint(clap::ValueHint::FilePath)
.allow_invalid_utf8(true), .allow_invalid_utf8(true),
) )
} }

View file

@ -107,7 +107,11 @@ pub fn uu_app<'a>() -> Command<'a> {
.help("line delimiter is NUL, not newline") .help("line delimiter is NUL, not newline")
.overrides_with(options::ZERO_NAME), .overrides_with(options::ZERO_NAME),
) )
.arg(Arg::new(options::FILES_NAME).multiple_occurrences(true)) .arg(
Arg::new(options::FILES_NAME)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
)
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]

View file

@ -105,7 +105,11 @@ pub fn uu_app<'a>() -> Command<'a> {
.overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT]) .overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT])
.help("Display the short hostname (the portion before the first dot) if possible"), .help("Display the short hostname (the portion before the first dot) if possible"),
) )
.arg(Arg::new(OPT_HOST).allow_invalid_utf8(true)) .arg(
Arg::new(OPT_HOST)
.allow_invalid_utf8(true)
.value_hint(clap::ValueHint::Hostname),
)
} }
fn display_hostname(matches: &ArgMatches) -> UResult<()> { fn display_hostname(matches: &ArgMatches) -> UResult<()> {

View file

@ -443,7 +443,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::ARG_USERS) Arg::new(options::ARG_USERS)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.value_name(options::ARG_USERS), .value_name(options::ARG_USERS)
.value_hint(clap::ValueHint::Username),
) )
} }

View file

@ -248,6 +248,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.help("set ownership (super-user only)") .help("set ownership (super-user only)")
.value_name("OWNER") .value_name("OWNER")
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::Username)
) )
.arg( .arg(
Arg::new(OPT_PRESERVE_TIMESTAMPS) Arg::new(OPT_PRESERVE_TIMESTAMPS)
@ -266,6 +267,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(OPT_STRIP_PROGRAM) .long(OPT_STRIP_PROGRAM)
.help("program used to strip binaries (no action Windows)") .help("program used to strip binaries (no action Windows)")
.value_name("PROGRAM") .value_name("PROGRAM")
.value_hint(clap::ValueHint::CommandName)
) )
.arg( .arg(
backup_control::arguments::suffix() backup_control::arguments::suffix()
@ -277,6 +279,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(OPT_TARGET_DIRECTORY) .long(OPT_TARGET_DIRECTORY)
.help("move all SOURCE arguments into DIRECTORY") .help("move all SOURCE arguments into DIRECTORY")
.value_name("DIRECTORY") .value_name("DIRECTORY")
.value_hint(clap::ValueHint::DirPath)
) )
.arg( .arg(
// TODO implement flag // TODO implement flag
@ -307,7 +310,13 @@ pub fn uu_app<'a>() -> Command<'a> {
.help("(unimplemented) set security context of files and directories") .help("(unimplemented) set security context of files and directories")
.value_name("CONTEXT") .value_name("CONTEXT")
) )
.arg(Arg::new(ARG_FILES).multiple_occurrences(true).takes_value(true).min_values(1)) .arg(
Arg::new(ARG_FILES)
.multiple_occurrences(true)
.takes_value(true)
.min_values(1)
.value_hint(clap::ValueHint::AnyPath)
)
} }
/// Check for unimplemented command line arguments. /// Check for unimplemented command line arguments.

View file

@ -801,12 +801,14 @@ FILENUM is 1 or 2, corresponding to FILE1 or FILE2",
Arg::new("file1") Arg::new("file1")
.required(true) .required(true)
.value_name("FILE1") .value_name("FILE1")
.value_hint(clap::ValueHint::FilePath)
.hide(true), .hide(true),
) )
.arg( .arg(
Arg::new("file2") Arg::new("file2")
.required(true) .required(true)
.value_name("FILE2") .value_name("FILE2")
.value_hint(clap::ValueHint::FilePath)
.hide(true), .hide(true),
) )
} }

View file

@ -46,6 +46,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.min_values(2) .min_values(2)
.max_values(2) .max_values(2)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::AnyPath)
.allow_invalid_utf8(true), .allow_invalid_utf8(true),
) )
} }

View file

@ -232,6 +232,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::TARGET_DIRECTORY) .long(options::TARGET_DIRECTORY)
.help("specify the DIRECTORY in which to create the links") .help("specify the DIRECTORY in which to create the links")
.value_name("DIRECTORY") .value_name("DIRECTORY")
.value_hint(clap::ValueHint::DirPath)
.conflicts_with(options::NO_TARGET_DIRECTORY), .conflicts_with(options::NO_TARGET_DIRECTORY),
) )
.arg( .arg(
@ -257,6 +258,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.value_hint(clap::ValueHint::AnyPath)
.required(true) .required(true)
.min_values(1), .min_values(1),
) )

View file

@ -1402,7 +1402,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::PATHS) Arg::new(options::PATHS)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.allow_invalid_utf8(true), .value_hint(clap::ValueHint::AnyPath)
.allow_invalid_utf8(true)
) )
.after_help( .after_help(
"The TIME_STYLE argument can be full-iso, long-iso, iso. \ "The TIME_STYLE argument can be full-iso, long-iso, iso. \

View file

@ -137,7 +137,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.min_values(1) .min_values(1)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::DirPath),
) )
} }

View file

@ -102,6 +102,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FIFO) Arg::new(options::FIFO)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -162,7 +162,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.value_name("NAME") .value_name("NAME")
.help("name of the new file") .help("name of the new file")
.required(true) .required(true)
.index(1), .index(1)
.value_hint(clap::ValueHint::AnyPath),
) )
.arg( .arg(
Arg::new("type") Arg::new("type")

View file

@ -202,7 +202,8 @@ pub fn uu_app<'a>() -> Command<'a> {
be an absolute name; unlike with -t, TEMPLATE may contain \ be an absolute name; unlike with -t, TEMPLATE may contain \
slashes, but mktemp creates only the final component", slashes, but mktemp creates only the final component",
) )
.value_name("DIR"), .value_name("DIR")
.value_hint(clap::ValueHint::DirPath),
) )
.arg(Arg::new(OPT_T).short('t').help( .arg(Arg::new(OPT_T).short('t').help(
"Generate a template (using the supplied prefix and TMPDIR (TMP on windows) if set) \ "Generate a template (using the supplied prefix and TMPDIR (TMP on windows) if set) \

View file

@ -183,7 +183,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::FILES) Arg::new(options::FILES)
.required(false) .required(false)
.multiple_occurrences(true) .multiple_occurrences(true)
.help("Path to the files to be read"), .help("Path to the files to be read")
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -156,14 +156,15 @@ pub fn uu_app<'a>() -> Command<'a> {
.help("move all SOURCE arguments into DIRECTORY") .help("move all SOURCE arguments into DIRECTORY")
.takes_value(true) .takes_value(true)
.value_name("DIRECTORY") .value_name("DIRECTORY")
.value_hint(clap::ValueHint::DirPath)
.conflicts_with(OPT_NO_TARGET_DIRECTORY) .conflicts_with(OPT_NO_TARGET_DIRECTORY)
.allow_invalid_utf8(true) .allow_invalid_utf8(true)
) )
.arg( .arg(
Arg::new(OPT_NO_TARGET_DIRECTORY) Arg::new(OPT_NO_TARGET_DIRECTORY)
.short('T') .short('T')
.long(OPT_NO_TARGET_DIRECTORY). .long(OPT_NO_TARGET_DIRECTORY)
help("treat DEST as a normal file") .help("treat DEST as a normal file")
) )
.arg( .arg(
Arg::new(OPT_UPDATE) Arg::new(OPT_UPDATE)
@ -183,6 +184,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.min_values(2) .min_values(2)
.required(true) .required(true)
.allow_invalid_utf8(true) .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::AnyPath)
) )
} }

View file

@ -117,5 +117,9 @@ pub fn uu_app<'a>() -> Command<'a> {
.takes_value(true) .takes_value(true)
.allow_hyphen_values(true), .allow_hyphen_values(true),
) )
.arg(Arg::new(options::COMMAND).multiple_occurrences(true)) .arg(
Arg::new(options::COMMAND)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::CommandName),
)
} }

View file

@ -154,7 +154,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::BODY_NUMBERING) Arg::new(options::BODY_NUMBERING)

View file

@ -126,7 +126,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::CMD) Arg::new(options::CMD)
.hide(true) .hide(true)
.required(true) .required(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::CommandName),
) )
.trailing_var_arg(true) .trailing_var_arg(true)
.infer_long_args(true) .infer_long_args(true)

View file

@ -512,7 +512,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILENAME) Arg::new(options::FILENAME)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -71,7 +71,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::FILE) Arg::new(options::FILE)
.value_name("FILE") .value_name("FILE")
.multiple_occurrences(true) .multiple_occurrences(true)
.default_value("-"), .default_value("-")
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -108,7 +108,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::PATH) Arg::new(options::PATH)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -179,7 +179,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::USER) Arg::new(options::USER)
.takes_value(true) .takes_value(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::Username),
) )
.arg( .arg(
// Redefine the help argument to not include the short flag // Redefine the help argument to not include the short flag

View file

@ -372,6 +372,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::FILES) Arg::new(options::FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.multiple_values(true) .multiple_values(true)
.value_hint(clap::ValueHint::FilePath)
) )
} }

View file

@ -754,7 +754,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::AUTO_REFERENCE) Arg::new(options::AUTO_REFERENCE)
@ -826,7 +827,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::BREAK_FILE) .long(options::BREAK_FILE)
.help("word break characters in this FILE") .help("word break characters in this FILE")
.value_name("FILE") .value_name("FILE")
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::IGNORE_CASE) Arg::new(options::IGNORE_CASE)
@ -849,7 +851,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::IGNORE_FILE) .long(options::IGNORE_FILE)
.help("read ignore word list from FILE") .help("read ignore word list from FILE")
.value_name("FILE") .value_name("FILE")
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::ONLY_FILE) Arg::new(options::ONLY_FILE)
@ -857,7 +860,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::ONLY_FILE) .long(options::ONLY_FILE)
.help("read only word list from this FILE") .help("read only word list from this FILE")
.value_name("FILE") .value_name("FILE")
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::REFERENCES) Arg::new(options::REFERENCES)

View file

@ -161,7 +161,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -130,7 +130,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.min_values(1), .min_values(1)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -87,6 +87,15 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg(Arg::new(options::DIR).short('d').takes_value(true).help( .arg(Arg::new(options::DIR).short('d').takes_value(true).help(
"If any of FROM and TO is not subpath of DIR, output absolute path instead of relative", "If any of FROM and TO is not subpath of DIR, output absolute path instead of relative",
)) ))
.arg(Arg::new(options::TO).required(true).takes_value(true)) .arg(
.arg(Arg::new(options::FROM).takes_value(true)) Arg::new(options::TO)
.required(true)
.takes_value(true)
.value_hint(clap::ValueHint::AnyPath),
)
.arg(
Arg::new(options::FROM)
.takes_value(true)
.value_hint(clap::ValueHint::AnyPath),
)
} }

View file

@ -227,6 +227,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.min_values(1) .min_values(1)
.value_hint(clap::ValueHint::AnyPath)
) )
} }

View file

@ -197,6 +197,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.takes_value(true) .takes_value(true)
.min_values(1) .min_values(1)
.required(true) .required(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::DirPath),
) )
} }

View file

@ -156,7 +156,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new("ARG") Arg::new("ARG")
.multiple_occurrences(true) .multiple_occurrences(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::CommandName),
) )
// Once "ARG" is parsed, everything after that belongs to it. // Once "ARG" is parsed, everything after that belongs to it.
// //

View file

@ -374,7 +374,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -158,14 +158,16 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::OUTPUT) .long(options::OUTPUT)
.takes_value(true) .takes_value(true)
.value_name("FILE") .value_name("FILE")
.help("write result to FILE instead of standard output"), .help("write result to FILE instead of standard output")
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::RANDOM_SOURCE) Arg::new(options::RANDOM_SOURCE)
.long(options::RANDOM_SOURCE) .long(options::RANDOM_SOURCE)
.takes_value(true) .takes_value(true)
.value_name("FILE") .value_name("FILE")
.help("get random bytes from FILE"), .help("get random bytes from FILE")
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::REPEAT) Arg::new(options::REPEAT)
@ -179,7 +181,11 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::ZERO_TERMINATED) .long(options::ZERO_TERMINATED)
.help("line delimiter is NUL, not newline"), .help("line delimiter is NUL, not newline"),
) )
.arg(Arg::new(options::FILE).takes_value(true)) .arg(
Arg::new(options::FILE)
.takes_value(true)
.value_hint(clap::ValueHint::FilePath),
)
} }
fn read_input_file(filename: &str) -> UResult<Vec<u8>> { fn read_input_file(filename: &str) -> UResult<Vec<u8>> {

View file

@ -1397,7 +1397,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::OUTPUT) .long(options::OUTPUT)
.help("write output to FILENAME instead of stdout") .help("write output to FILENAME instead of stdout")
.takes_value(true) .takes_value(true)
.value_name("FILENAME"), .value_name("FILENAME")
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::REVERSE) Arg::new(options::REVERSE)
@ -1461,13 +1462,15 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::TMP_DIR) .long(options::TMP_DIR)
.help("use DIR for temporaries, not $TMPDIR or /tmp") .help("use DIR for temporaries, not $TMPDIR or /tmp")
.takes_value(true) .takes_value(true)
.value_name("DIR"), .value_name("DIR")
.value_hint(clap::ValueHint::DirPath),
) )
.arg( .arg(
Arg::new(options::COMPRESS_PROG) Arg::new(options::COMPRESS_PROG)
.long(options::COMPRESS_PROG) .long(options::COMPRESS_PROG)
.help("compress temporary files with PROG, decompress with PROG -d; PROG has to take input from stdin and output to stdout") .help("compress temporary files with PROG, decompress with PROG -d; PROG has to take input from stdin and output to stdout")
.value_name("PROG"), .value_name("PROG")
.value_hint(clap::ValueHint::CommandName),
) )
.arg( .arg(
Arg::new(options::BATCH_SIZE) Arg::new(options::BATCH_SIZE)
@ -1482,7 +1485,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.takes_value(true) .takes_value(true)
.value_name("NUL_FILES") .value_name("NUL_FILES")
.multiple_occurrences(true) .multiple_occurrences(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::DEBUG) Arg::new(options::DEBUG)
@ -1493,7 +1497,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::FILES) Arg::new(options::FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -111,9 +111,11 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(OPT_FILTER) Arg::new(OPT_FILTER)
.long(OPT_FILTER) .long(OPT_FILTER)
.takes_value(true) .takes_value(true)
.value_name("COMMAND")
.value_hint(clap::ValueHint::CommandName)
.help( .help(
"write to shell COMMAND file name is $FILE (Currently not implemented for Windows)", "write to shell COMMAND; file name is $FILE (Currently not implemented for Windows)",
), ),
) )
.arg( .arg(
Arg::new(OPT_ELIDE_EMPTY_FILES) Arg::new(OPT_ELIDE_EMPTY_FILES)
@ -162,7 +164,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(ARG_INPUT) Arg::new(ARG_INPUT)
.takes_value(true) .takes_value(true)
.default_value("-") .default_value("-")
.index(1), .index(1)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(ARG_PREFIX) Arg::new(ARG_PREFIX)

View file

@ -1043,6 +1043,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.allow_invalid_utf8(true) .allow_invalid_utf8(true)
.min_values(1), .min_values(1)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -232,6 +232,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.hide(true) .hide(true)
.required(true), .required(true)
.value_hint(clap::ValueHint::CommandName),
) )
} }

View file

@ -150,7 +150,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.multiple_occurrences(true) .multiple_occurrences(true)
.hide(true), .hide(true)
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::BSD_COMPATIBLE) Arg::new(options::BSD_COMPATIBLE)

View file

@ -217,7 +217,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true), .takes_value(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -91,7 +91,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.arg( .arg(
Arg::new(options::FILE) Arg::new(options::FILE)
.hide(true) .hide(true)
.multiple_occurrences(true), .multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -351,7 +351,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::ARG_FILES) Arg::new(options::ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.min_values(1), .min_values(1)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -74,7 +74,11 @@ pub fn uu_app<'a>() -> Command<'a> {
.short('i') .short('i')
.help("ignore interrupt signals (ignored on non-Unix platforms)"), .help("ignore interrupt signals (ignored on non-Unix platforms)"),
) )
.arg(Arg::new(options::FILE).multiple_occurrences(true)) .arg(
Arg::new(options::FILE)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath),
)
} }
#[cfg(unix)] #[cfg(unix)]

View file

@ -170,6 +170,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.index(2) .index(2)
.required(true) .required(true)
.multiple_occurrences(true) .multiple_occurrences(true)
.value_hint(clap::ValueHint::CommandName)
) )
.trailing_var_arg(true) .trailing_var_arg(true)
.infer_long_args(true) .infer_long_args(true)

View file

@ -219,7 +219,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.long(options::sources::REFERENCE) .long(options::sources::REFERENCE)
.help("use this file's times instead of the current time") .help("use this file's times instead of the current time")
.value_name("FILE") .value_name("FILE")
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::AnyPath),
) )
.arg( .arg(
Arg::new(options::TIME) Arg::new(options::TIME)
@ -238,7 +239,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.min_values(1) .min_values(1)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::AnyPath),
) )
.group(ArgGroup::new(options::SOURCES).args(&[ .group(ArgGroup::new(options::SOURCES).args(&[
options::sources::CURRENT, options::sources::CURRENT,

View file

@ -143,7 +143,6 @@ pub fn uu_app<'a>() -> Command<'a> {
.about(ABOUT) .about(ABOUT)
.override_usage(format_usage(USAGE)) .override_usage(format_usage(USAGE))
.infer_long_args(true) .infer_long_args(true)
.infer_long_args(true)
.arg( .arg(
Arg::new(options::COMPLEMENT) Arg::new(options::COMPLEMENT)
.visible_short_alias('C') .visible_short_alias('C')

View file

@ -162,6 +162,7 @@ pub fn uu_app<'a>() -> Command<'a> {
.required_unless_present(options::SIZE) .required_unless_present(options::SIZE)
.help("base the size of each file on the size of RFILE") .help("base the size of each file on the size of RFILE")
.value_name("RFILE") .value_name("RFILE")
.value_hint(clap::ValueHint::FilePath)
) )
.arg( .arg(
Arg::new(options::SIZE) Arg::new(options::SIZE)
@ -176,7 +177,8 @@ pub fn uu_app<'a>() -> Command<'a> {
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.required(true) .required(true)
.min_values(1)) .min_values(1)
.value_hint(clap::ValueHint::FilePath))
} }
/// Truncate the named file to the specified size. /// Truncate the named file to the specified size.

View file

@ -99,7 +99,12 @@ pub fn uu_app<'a>() -> Command<'a> {
.override_usage(format_usage(USAGE)) .override_usage(format_usage(USAGE))
.about(SUMMARY) .about(SUMMARY)
.infer_long_args(true) .infer_long_args(true)
.arg(Arg::new(options::FILE).default_value("-").hide(true)) .arg(
Arg::new(options::FILE)
.default_value("-")
.hide(true)
.value_hint(clap::ValueHint::FilePath),
)
} }
// We use String as a representation of node here // We use String as a representation of node here

View file

@ -109,7 +109,12 @@ pub fn uu_app<'a>() -> Command<'a> {
.override_usage(format_usage(USAGE)) .override_usage(format_usage(USAGE))
.about(SUMMARY) .about(SUMMARY)
.infer_long_args(true) .infer_long_args(true)
.arg(Arg::new(options::FILE).hide(true).multiple_occurrences(true)) .arg(
Arg::new(options::FILE)
.hide(true)
.multiple_occurrences(true)
.value_hint(clap::ValueHint::FilePath)
)
.arg( .arg(
Arg::new(options::ALL) Arg::new(options::ALL)
.short('a') .short('a')

View file

@ -392,7 +392,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.max_values(2), .max_values(2)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -36,6 +36,7 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(OPT_PATH) Arg::new(OPT_PATH)
.required(true) .required(true)
.hide(true) .hide(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::AnyPath),
) )
} }

View file

@ -64,5 +64,10 @@ pub fn uu_app<'a>() -> Command<'a> {
.about(ABOUT) .about(ABOUT)
.override_usage(format_usage(USAGE)) .override_usage(format_usage(USAGE))
.infer_long_args(true) .infer_long_args(true)
.arg(Arg::new(ARG_FILES).takes_value(true).max_values(1)) .arg(
Arg::new(ARG_FILES)
.takes_value(true)
.max_values(1)
.value_hint(clap::ValueHint::FilePath),
)
} }

View file

@ -210,7 +210,8 @@ pub fn uu_app<'a>() -> Command<'a> {
"read input from the files specified by "read input from the files specified by
NUL-terminated names in file F; NUL-terminated names in file F;
If F is - then read names from standard input", If F is - then read names from standard input",
), )
.value_hint(clap::ValueHint::FilePath),
) )
.arg( .arg(
Arg::new(options::LINES) Arg::new(options::LINES)
@ -234,7 +235,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(ARG_FILES) Arg::new(ARG_FILES)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.allow_invalid_utf8(true), .allow_invalid_utf8(true)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -250,7 +250,8 @@ pub fn uu_app<'a>() -> Command<'a> {
Arg::new(options::FILE) Arg::new(options::FILE)
.takes_value(true) .takes_value(true)
.min_values(1) .min_values(1)
.max_values(2), .max_values(2)
.value_hint(clap::ValueHint::FilePath),
) )
} }

View file

@ -456,6 +456,7 @@ pub fn chown_base<'a>(
command = command.arg( command = command.arg(
Arg::new(options::ARG_FILES) Arg::new(options::ARG_FILES)
.value_name(options::ARG_FILES) .value_name(options::ARG_FILES)
.value_hint(clap::ValueHint::FilePath)
.multiple_occurrences(true) .multiple_occurrences(true)
.takes_value(true) .takes_value(true)
.required(true) .required(true)