From 10662a9e6eae75cdeb3c7522e086e4eb97f5e06c Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 26 Jul 2020 14:58:15 +0800 Subject: [PATCH] style: code style --- src/main.rs | 132 +++++++++++++++----------------------------------- src/parser.rs | 4 +- src/regex.rs | 7 +-- src/token.rs | 2 +- 4 files changed, 45 insertions(+), 100 deletions(-) diff --git a/src/main.rs b/src/main.rs index afd65f9..adfe6c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,54 +19,17 @@ use crate::token::Token; fn main() -> std::io::Result<()> { let matches = App::new("Cargo-todo") - .author("Clément Guiton ") - .about("cargo tool to find TODOs in your code") - .arg(Arg::with_name("inline") - .short("i") - .long("inline") - .value_name("inline") - .help("display todos in one line") - .takes_value(false)) - .arg(Arg::with_name("filter") - .help("Filter todos to show") - .short("f") - .long("filter") - .takes_value(true) - .multiple(true) - .min_values(1)) - .arg(Arg::with_name("verbose") - .short("v") - .long("verbose") - .multiple(true) - .help("Sets the level of verbosity")) - .arg(Arg::with_name("exclude") - .short("x") - .long("exclude") - .takes_value(true) - .multiple(true) - .help("Exclude some todos from the list")) - .arg(Arg::with_name("list") - .short("l") - .long("list") - .takes_value(true) - .help("Number of values to display")) - .arg(Arg::with_name("sort") - .short("s") - .long("sort") - .takes_value(true) - .possible_values(&["priority", "deadline", "member"]) - .help("Sort todos")) - .arg(Arg::with_name("member") - .short("m") - .long("member") - .takes_value(true) - .multiple(true) - .min_values(1) - .help("Filter from member")) - .subcommand(SubCommand::with_name("legacy") - .about("Launch program in legacy mode (supports todo!(), etc...")) - .get_matches(); - + .author("Clément Guiton ") + .about("cargo tool to find TODOs in your code") + .arg(Arg::with_name("inline").short("i").long("inline").value_name("inline").takes_value(false).help("display todos in one line")) + .arg(Arg::with_name("filter").short("f").long("filter").takes_value(true).multiple(true).min_values(1).help("Filter todos to show")) + .arg(Arg::with_name("verbose").short("v").long("verbose").multiple(true).help("Sets the level of verbosity")) + .arg(Arg::with_name("exclude").short("x").long("exclude").takes_value(true).multiple(true).help("Exclude some todos from the list")) + .arg(Arg::with_name("list").short("l").long("list").takes_value(true).help("Number of values to display")) + .arg(Arg::with_name("sort").short("s").long("sort").takes_value(true).possible_values(&["priority", "deadline", "member"]).help("Sort todos")) + .arg(Arg::with_name("member").short("m").long("member").takes_value(true).multiple(true).min_values(1).help("Filter from member")) + .subcommand(SubCommand::with_name("legacy").about("Launch program in legacy mode (supports todo!(), etc...")) + .get_matches(); if let Some(_matches) = matches.subcommand_matches("legacy") { let mut parsers : Vec = vec!(); @@ -75,21 +38,21 @@ fn main() -> std::io::Result<()> { path.push_str("/**/*.rs"); //we add a parser looking for the //todo keyword - parsers.push(Parser::new(String::from("//todo"), Box::from(|x : Vec| {if x.last().unwrap() == &'\n' {return true;} else { return false}}))); + parsers.push(Parser::new(String::from("//todo"), Box::from(|x : Vec| x.last().unwrap() == &'\n'))); //we add a parser looking for the todo!() token let _todo_macro_callback = Box::from(|mut text : String, line : usize, file : &str| { text.retain(|c| c != '\"'); println!("{} {} {} {} : {}",file,"TODO".green() ,"Line ".green(), line.to_string().green(), text.blue()); }); - parsers.push(Parser::new_callback(String::from("todo!("), Box::from(|x : Vec| {if x.last().unwrap() == &')' {return true;} else { return false}}), _todo_macro_callback)); + parsers.push(Parser::new_callback(String::from("todo!("), Box::from(|x : Vec| x.last().unwrap() == &')'), _todo_macro_callback)); //support for unimplemented let _unimplemented_macro_callback = Box::from(|text : String, line : usize, file : &str| { println!("{} {} {} {} : {}{}{} ",file,"TODO".green() ,"Line ".green(), line.to_string().green(), "unimplemented!(".blue(), text.magenta(), ")".blue()); }); - parsers.push(Parser::new_callback(String::from("unimplemented!("), Box::from(|x : Vec| {if x.last().unwrap() == &')' {return true;} else { return false}}), _unimplemented_macro_callback)); + parsers.push(Parser::new_callback(String::from("unimplemented!("), Box::from(|x : Vec| x.last().unwrap() == &')'), _unimplemented_macro_callback)); - parsers.push(Parser::new(String::from("//fix"), Box::from(|x : Vec| {if x.last().unwrap() == &'\n' {return true;} else { return false}}))); + parsers.push(Parser::new(String::from("//fix"), Box::from(|x : Vec| x.last().unwrap() == &'\n'))); //loop on every file within the current dir @@ -176,45 +139,25 @@ fn main() -> std::io::Result<()> { Err(e) => eprintln!{"{}", e}, } } - } - } if matches.is_present("sort") { if matches.value_of("sort").unwrap() == "priority" { - fn token_priority_sort(t : &Token) -> String { - - if t.priority.is_none() { - return String::from("z"); - } - else { - return t.priority.clone().unwrap() - } + fn token_priority_sort(t : &Token) -> String { + t.priority.clone().unwrap_or_else(|| "z".into()) } tokens.sort_unstable_by_key(token_priority_sort); } else if matches.value_of("sort").unwrap() == "deadline" { - fn token_deadline_sort(t : &Token) -> NaiveDate { - - if t.date.is_none() { - return NaiveDate::from_ymd(3000,01,01); - } - else { - return t.date.clone().unwrap() - } + fn token_deadline_sort(t : &Token) -> NaiveDate { + t.date.clone().unwrap_or_else(|| NaiveDate::from_ymd(3000, 1, 1)) } tokens.sort_unstable_by_key(token_deadline_sort); } else if matches.value_of("sort").unwrap() == "member" { - fn token_member_sort(t : &Token) -> String { - - if t.priority.is_none() { - return String::from("z"); - } - else { - return t.priority.clone().unwrap() - } + fn token_member_sort(t : &Token) -> String { + t.priority.clone().unwrap_or_else(|| "z".into()) } tokens.sort_unstable_by_key(token_member_sort); } @@ -226,28 +169,29 @@ fn main() -> std::io::Result<()> { Err(_) => { eprintln!("{}", "list argument should be a valid number!".red()); panic!() - }}; - - let mut new_tokens : Vec = Vec::new(); - for i in tokens{ - if new_tokens.len() < lines { - &new_tokens.push(i.clone()); - } else { - break; - } } + }; + + let mut new_tokens : Vec = vec![]; + for i in tokens { + if new_tokens.len() < lines { + new_tokens.push(i.clone()); + } else { + break; + } + } tokens = new_tokens; } if matches.is_present("member") { let filters : Vec<&str> = matches.values_of("member").unwrap().collect(); - let mut new_tokens : Vec = Vec::new(); + let mut new_tokens : Vec = vec![]; for i in tokens{ // println!("{}", i); for y in &filters { if i.member.clone().is_some() && i.member.clone().unwrap() == *y.to_string(){ println!("pushing"); - &new_tokens.push(i.clone()); + new_tokens.push(i.clone()); break; } } @@ -257,11 +201,11 @@ fn main() -> std::io::Result<()> { if matches.is_present("filter") { let filters : Vec<&str> = matches.values_of("filter").unwrap().collect(); - let mut new_tokens : Vec = Vec::new(); + let mut new_tokens : Vec = vec![]; for i in tokens { for y in &filters { - if i.keyword == String::from(*y){ - &new_tokens.push(i.clone()); + if i.keyword == *y { + new_tokens.push(i.clone()); break; } } @@ -275,11 +219,11 @@ fn main() -> std::io::Result<()> { let mut new_tokens : Vec = vec![]; for i in tokens{ for y in 0..excludes.len() { - if i.keyword == String::from(excludes[y]) { + if i.keyword == excludes[y] { break; } else if y == excludes.len() -1{ - &new_tokens.push(i.clone()); + new_tokens.push(i.clone()); } } diff --git a/src/parser.rs b/src/parser.rs index fd86ac2..93d0534 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -25,11 +25,11 @@ impl Parser { self.keyword.clone() } - fn get_end_filter(&self) -> &Box) -> bool> { + fn get_end_filter(&self) -> &dyn Fn(Vec) -> bool { &self.end_filter } - fn get_callback(&self) -> &Box { + fn get_callback(&self) -> &dyn Fn(String, usize, &str) { &self.callback } diff --git a/src/regex.rs b/src/regex.rs index 0cf5a57..2e598f1 100644 --- a/src/regex.rs +++ b/src/regex.rs @@ -14,9 +14,10 @@ fn read_lines

(filename: P) -> io::Result>> wher pub fn regex_parser(path : &str, regex : Vec, verbosity : i8) -> Result, io::Error> { let set = RegexSet::new(regex).unwrap(); let mut tokens = vec![]; - let mut line_cpt = 0; - for line in read_lines(path)? { - line_cpt +=1; + // let mut line_cpt = 0; + for (line_cpt, line) in (read_lines(path)?).enumerate() { // ? PLUS 1 + // for line in read_lines(path)? { + // line_cpt +=1; let line = line.unwrap(); if set.is_match(line.to_lowercase().as_str()) { tokens.push(Token::new(path.to_string(), line_cpt, line, verbosity)); diff --git a/src/token.rs b/src/token.rs index defe718..a6041d0 100644 --- a/src/token.rs +++ b/src/token.rs @@ -47,7 +47,7 @@ impl Token { } else if number_regex.is_match(fields[i]) { t.priority = Some(fields[i].to_string()); } else if date_regex.is_match(fields[i]) { - let date : Vec<&str> = fields[i].split("/").collect(); + let date : Vec<&str> = fields[i].split('/').collect(); t.date = NaiveDate::from_ymd_opt(date[0].parse::().unwrap(), date[1].parse::().unwrap(), date[2].parse::().unwrap()); // t.date = Some(fields[i].to_string()); } else if member_regex.is_match(fields[i]) {