mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-11 07:10:56 +00:00
Merge pull request #122 from quodlibetor/include-legal-args-in-error-messages
Add legal values to error messages
This commit is contained in:
commit
6d3e6b7cad
@ -218,7 +218,10 @@ impl SortField {
|
|||||||
"cr" | "created" => Ok(SortField::CreatedDate),
|
"cr" | "created" => Ok(SortField::CreatedDate),
|
||||||
"none" => Ok(SortField::Unsorted),
|
"none" => Ok(SortField::Unsorted),
|
||||||
"inode" => Ok(SortField::FileInode),
|
"inode" => Ok(SortField::FileInode),
|
||||||
field => Err(Misfire::bad_argument("sort", field))
|
field => Err(Misfire::bad_argument("sort", field, &[
|
||||||
|
"name", "Name", "size", "extension", "Extension",
|
||||||
|
"modified", "accessed", "created", "inode", "none"]
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -13,7 +13,9 @@ FILTERING AND SORTING OPTIONS
|
|||||||
-a, --all show dot-files
|
-a, --all show dot-files
|
||||||
-d, --list-dirs list directories as regular files
|
-d, --list-dirs list directories as regular files
|
||||||
-r, --reverse reverse order of files
|
-r, --reverse reverse order of files
|
||||||
-s, --sort WORD field to sort by
|
-s, --sort SORT_FIELD field to sort by. Choices: name,
|
||||||
|
size, extension, modified,
|
||||||
|
accessed, created, inode, none
|
||||||
--group-directories-first list directories before other files
|
--group-directories-first list directories before other files
|
||||||
"##;
|
"##;
|
||||||
|
|
||||||
@ -28,10 +30,11 @@ LONG VIEW OPTIONS
|
|||||||
-L, --level DEPTH maximum depth of recursion
|
-L, --level DEPTH maximum depth of recursion
|
||||||
-m, --modified display timestamp of most recent modification
|
-m, --modified display timestamp of most recent modification
|
||||||
-S, --blocks show number of file system blocks
|
-S, --blocks show number of file system blocks
|
||||||
-t, --time WORD which timestamp to show for a file
|
-t, --time FIELD which timestamp to show for a file. Choices:
|
||||||
|
modified, accessed, created
|
||||||
-u, --accessed display timestamp of last access for a file
|
-u, --accessed display timestamp of last access for a file
|
||||||
-U, --created display timestamp of creation for a file
|
-U, --created display timestamp of creation for a file
|
||||||
"##;
|
"##;
|
||||||
|
|
||||||
pub static GIT_HELP: &'static str = r##" --git show git status for files"##;
|
pub static GIT_HELP: &'static str = r##" --git show git status for files"##;
|
||||||
pub static EXTENDED_HELP: &'static str = r##" -@, --extended display extended attribute keys and sizes"##;
|
pub static EXTENDED_HELP: &'static str = r##" -@, --extended display extended attribute keys and sizes"##;
|
||||||
|
@ -4,6 +4,16 @@ use std::num::ParseIntError;
|
|||||||
use getopts;
|
use getopts;
|
||||||
|
|
||||||
|
|
||||||
|
/// A list of legal choices for an argument-taking option
|
||||||
|
#[derive(PartialEq, Debug)]
|
||||||
|
pub struct Choices(Vec<&'static str>);
|
||||||
|
|
||||||
|
impl fmt::Display for Choices {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "(choices: {})", self.0.join(" "))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A **misfire** is a thing that can happen instead of listing files -- a
|
/// A **misfire** is a thing that can happen instead of listing files -- a
|
||||||
/// catch-all for anything outside the program’s normal execution.
|
/// catch-all for anything outside the program’s normal execution.
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
@ -12,6 +22,9 @@ pub enum Misfire {
|
|||||||
/// The getopts crate didn’t like these arguments.
|
/// The getopts crate didn’t like these arguments.
|
||||||
InvalidOptions(getopts::Fail),
|
InvalidOptions(getopts::Fail),
|
||||||
|
|
||||||
|
/// The user supplied an illegal choice to an argument
|
||||||
|
BadArgument(getopts::Fail, Choices),
|
||||||
|
|
||||||
/// The user asked for help. This isn’t strictly an error, which is why
|
/// The user asked for help. This isn’t strictly an error, which is why
|
||||||
/// this enum isn’t named Error!
|
/// this enum isn’t named Error!
|
||||||
Help(String),
|
Help(String),
|
||||||
@ -46,8 +59,10 @@ impl Misfire {
|
|||||||
/// argument. This has to use one of the `getopts` failure
|
/// argument. This has to use one of the `getopts` failure
|
||||||
/// variants--it’s meant to take just an option name, rather than an
|
/// variants--it’s meant to take just an option name, rather than an
|
||||||
/// option *and* an argument, but it works just as well.
|
/// option *and* an argument, but it works just as well.
|
||||||
pub fn bad_argument(option: &str, otherwise: &str) -> Misfire {
|
pub fn bad_argument(option: &str, otherwise: &str, legal: &[&'static str]) -> Misfire {
|
||||||
Misfire::InvalidOptions(getopts::Fail::UnrecognizedOption(format!("--{} {}", option, otherwise)))
|
Misfire::BadArgument(getopts::Fail::UnrecognizedOption(format!(
|
||||||
|
"--{} {}",
|
||||||
|
option, otherwise)), Choices(legal.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,14 +71,15 @@ impl fmt::Display for Misfire {
|
|||||||
use self::Misfire::*;
|
use self::Misfire::*;
|
||||||
|
|
||||||
match *self {
|
match *self {
|
||||||
InvalidOptions(ref e) => write!(f, "{}", e),
|
InvalidOptions(ref e) => write!(f, "{}", e),
|
||||||
Help(ref text) => write!(f, "{}", text),
|
BadArgument(ref e, ref c) => write!(f, "{} {}", e, c),
|
||||||
Version => write!(f, "exa {}", env!("CARGO_PKG_VERSION")),
|
Help(ref text) => write!(f, "{}", text),
|
||||||
Conflict(a, b) => write!(f, "Option --{} conflicts with option {}.", a, b),
|
Version => write!(f, "exa {}", env!("CARGO_PKG_VERSION")),
|
||||||
Useless(a, false, b) => write!(f, "Option --{} is useless without option --{}.", a, b),
|
Conflict(a, b) => write!(f, "Option --{} conflicts with option {}.", a, b),
|
||||||
Useless(a, true, b) => write!(f, "Option --{} is useless given option --{}.", a, b),
|
Useless(a, false, b) => write!(f, "Option --{} is useless without option --{}.", a, b),
|
||||||
Useless2(a, b1, b2) => write!(f, "Option --{} is useless without options --{} or --{}.", a, b1, b2),
|
Useless(a, true, b) => write!(f, "Option --{} is useless given option --{}.", a, b),
|
||||||
FailedParse(ref e) => write!(f, "Failed to parse number: {}", e),
|
Useless2(a, b1, b2) => write!(f, "Option --{} is useless without options --{} or --{}.", a, b1, b2),
|
||||||
|
FailedParse(ref e) => write!(f, "Failed to parse number: {}", e),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,8 @@ impl TimeTypes {
|
|||||||
"mod" | "modified" => Ok(TimeTypes { accessed: false, modified: true, created: false }),
|
"mod" | "modified" => Ok(TimeTypes { accessed: false, modified: true, created: false }),
|
||||||
"acc" | "accessed" => Ok(TimeTypes { accessed: true, modified: false, created: false }),
|
"acc" | "accessed" => Ok(TimeTypes { accessed: true, modified: false, created: false }),
|
||||||
"cr" | "created" => Ok(TimeTypes { accessed: false, modified: false, created: true }),
|
"cr" | "created" => Ok(TimeTypes { accessed: false, modified: false, created: true }),
|
||||||
otherwise => Err(Misfire::bad_argument("time", otherwise)),
|
otherwise => Err(Misfire::bad_argument("time", otherwise,
|
||||||
|
&["modified", "accessed", "created"])),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if modified || created || accessed {
|
else if modified || created || accessed {
|
||||||
@ -345,7 +346,8 @@ impl TerminalColours {
|
|||||||
"always" => Ok(TerminalColours::Always),
|
"always" => Ok(TerminalColours::Always),
|
||||||
"auto" | "automatic" => Ok(TerminalColours::Automatic),
|
"auto" | "automatic" => Ok(TerminalColours::Automatic),
|
||||||
"never" => Ok(TerminalColours::Never),
|
"never" => Ok(TerminalColours::Never),
|
||||||
otherwise => Err(Misfire::bad_argument("color", otherwise))
|
otherwise => Err(Misfire::bad_argument("color", otherwise,
|
||||||
|
&["always", "auto", "never"]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user