mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-26 13:56:27 +00:00
Upgrade to latest Rust, and move options code
This commit is contained in:
parent
95388e6e90
commit
0e473bf37b
21
src/exa.rs
21
src/exa.rs
@ -12,7 +12,6 @@ use std::os::{args, set_exit_status};
|
||||
use dir::Dir;
|
||||
use file::File;
|
||||
use options::Options;
|
||||
use options::Error::*;
|
||||
|
||||
pub mod column;
|
||||
pub mod dir;
|
||||
@ -90,25 +89,9 @@ fn main() {
|
||||
|
||||
match Options::getopts(args.tail()) {
|
||||
Ok(options) => exa(&options),
|
||||
Err(Help(text)) => {
|
||||
println!("{}", text);
|
||||
set_exit_status(2);
|
||||
},
|
||||
Err(InvalidOptions(e)) => {
|
||||
Err(e) => {
|
||||
println!("{}", e);
|
||||
set_exit_status(3);
|
||||
},
|
||||
Err(Conflict(a, b)) => {
|
||||
println!("Option --{} conflicts with option {}", a, b);
|
||||
set_exit_status(3);
|
||||
},
|
||||
Err(Useless(a, false, b)) => {
|
||||
println!("Option --{} is useless without option --{}", a, b);
|
||||
set_exit_status(3);
|
||||
},
|
||||
Err(Useless(a, true, b)) => {
|
||||
println!("Option --{} is useless given option --{}", a, b);
|
||||
set_exit_status(3);
|
||||
set_exit_status(e.error_code());
|
||||
},
|
||||
};
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ impl<'a> File<'a> {
|
||||
// The extension is the series of characters after a dot at
|
||||
// the end of a filename. This deliberately also counts
|
||||
// dotfiles - the ".git" folder has the extension "git".
|
||||
name.rfind('.').map(|pos| name.slice_from(pos + 1).to_string())
|
||||
name.rfind('.').map(|p| name[p+1..].to_string())
|
||||
}
|
||||
|
||||
pub fn is_dotfile(&self) -> bool {
|
||||
|
@ -9,8 +9,11 @@ use term::dimensions;
|
||||
|
||||
use std::ascii::AsciiExt;
|
||||
use std::slice::Iter;
|
||||
use std::fmt;
|
||||
|
||||
#[derive(PartialEq, Show)]
|
||||
use self::Error::*;
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum SortField {
|
||||
Unsorted, Name, Extension, Size, FileInode
|
||||
}
|
||||
@ -34,7 +37,7 @@ fn no_sort_field(field: &str) -> Error {
|
||||
Error::InvalidOptions(getopts::Fail::UnrecognizedOption(format!("--sort {}", field)))
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Show)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct Options {
|
||||
pub list_dirs: bool,
|
||||
pub path_strs: Vec<String>,
|
||||
@ -44,7 +47,7 @@ pub struct Options {
|
||||
pub view: View,
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Show)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub enum Error {
|
||||
InvalidOptions(getopts::Fail),
|
||||
Help(String),
|
||||
@ -52,6 +55,25 @@ pub enum Error {
|
||||
Useless(&'static str, bool, &'static str),
|
||||
}
|
||||
|
||||
impl Error {
|
||||
pub fn error_code(&self) -> isize {
|
||||
if let Help(_) = *self { 2 }
|
||||
else { 3 }
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match *self {
|
||||
InvalidOptions(ref e) => write!(f, "{}", e),
|
||||
Help(ref text) => write!(f, "{}", text),
|
||||
Conflict(a, b) => write!(f, "Option --{} conflicts with option {}", a, b),
|
||||
Useless(a, false, b) => write!(f, "Option --{} is useless without option --{}", a, b),
|
||||
Useless(a, true, b) => write!(f, "Option --{} is useless given option --{}", a, b),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Options {
|
||||
pub fn getopts(args: &[String]) -> Result<Options, Error> {
|
||||
let opts = &[
|
||||
@ -215,6 +237,8 @@ mod test {
|
||||
use super::Error;
|
||||
use super::Error::*;
|
||||
|
||||
use std::fmt;
|
||||
|
||||
fn is_helpful(error: Result<Options, Error>) -> bool {
|
||||
match error {
|
||||
Err(Help(_)) => true,
|
||||
@ -222,6 +246,12 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Options {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{:?}", self)
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn help() {
|
||||
let opts = Options::getopts(&[ "--help".to_string() ]);
|
||||
@ -275,6 +305,4 @@ mod test {
|
||||
let opts = Options::getopts(&[ "--oneline".to_string(), "--across".to_string() ]);
|
||||
assert_eq!(opts.unwrap_err(), Error::Useless("across", true, "oneline"))
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user