From 07bf90779b41449451683aeacda7a3629382ee5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Fri, 12 Jun 2020 16:42:12 +0200 Subject: feat(lint): add --rules flag (#6264) --- cli/flags.rs | 33 ++++++++++++++++++++++++++++++--- cli/lint.rs | 9 +++++++++ cli/main.rs | 16 ++++++++++++++-- 3 files changed, 53 insertions(+), 5 deletions(-) (limited to 'cli') diff --git a/cli/flags.rs b/cli/flags.rs index bd7ea462f..61ce401a4 100644 --- a/cli/flags.rs +++ b/cli/flags.rs @@ -52,6 +52,7 @@ pub enum DenoSubcommand { }, Lint { files: Vec, + rules: bool, }, Repl, Run { @@ -592,7 +593,8 @@ fn lint_parse(flags: &mut Flags, matches: &clap::ArgMatches) { Some(f) => f.map(String::from).collect(), None => vec![], }; - flags.subcommand = DenoSubcommand::Lint { files }; + let rules = matches.is_present("rules"); + flags.subcommand = DenoSubcommand::Lint { files, rules }; } fn types_subcommand<'a, 'b>() -> App<'a, 'b> { @@ -913,6 +915,9 @@ fn lint_subcommand<'a, 'b>() -> App<'a, 'b> { deno lint --unstable deno lint --unstable myfile1.ts myfile2.js +List available rules: + deno lint --unstable --rules + Ignore diagnostics on the next line by preceding it with an ignore comment and rule name: // deno-lint-ignore no-explicit-any @@ -929,6 +934,11 @@ Ignore linting a file by adding an ignore comment at the top of the file: ", ) .arg(unstable_arg()) + .arg( + Arg::with_name("rules") + .long("rules") + .help("List available rules"), + ) .arg( Arg::with_name("files") .takes_value(true) @@ -1658,7 +1668,8 @@ mod tests { r.unwrap(), Flags { subcommand: DenoSubcommand::Lint { - files: vec!["script_1.ts".to_string(), "script_2.ts".to_string()] + files: vec!["script_1.ts".to_string(), "script_2.ts".to_string()], + rules: false, }, unstable: true, ..Flags::default() @@ -1669,7 +1680,23 @@ mod tests { assert_eq!( r.unwrap(), Flags { - subcommand: DenoSubcommand::Lint { files: vec![] }, + subcommand: DenoSubcommand::Lint { + files: vec![], + rules: false, + }, + unstable: true, + ..Flags::default() + } + ); + + let r = flags_from_vec_safe(svec!["deno", "lint", "--unstable", "--rules"]); + assert_eq!( + r.unwrap(), + Flags { + subcommand: DenoSubcommand::Lint { + files: vec![], + rules: true + }, unstable: true, ..Flags::default() } diff --git a/cli/lint.rs b/cli/lint.rs index 16d3c3021..901e678ce 100644 --- a/cli/lint.rs +++ b/cli/lint.rs @@ -64,6 +64,15 @@ pub async fn lint_files(args: Vec) -> Result<(), ErrBox> { Ok(()) } +pub fn print_rules_list() { + let lint_rules = rules::get_recommended_rules(); + + println!("Available rules:"); + for rule in lint_rules { + println!(" - {}", rule.code()); + } +} + fn create_linter() -> Linter { Linter::new( "deno-lint-ignore-file".to_string(), diff --git a/cli/main.rs b/cli/main.rs index 193a8df81..b8ac2ae42 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -316,7 +316,11 @@ async fn install_command( .map_err(ErrBox::from) } -async fn lint_command(flags: Flags, files: Vec) -> Result<(), ErrBox> { +async fn lint_command( + flags: Flags, + files: Vec, + list_rules: bool, +) -> Result<(), ErrBox> { let global_state = GlobalState::new(flags)?; // TODO(bartlomieju): refactor, it's non-sense to create @@ -331,6 +335,12 @@ async fn lint_command(flags: Flags, files: Vec) -> Result<(), ErrBox> { )?; state.check_unstable("lint"); + + if list_rules { + lint::print_rules_list(); + return Ok(()); + } + lint::lint_files(files).await } @@ -708,7 +718,9 @@ pub fn main() { } => { install_command(flags, module_url, args, name, root, force).boxed_local() } - DenoSubcommand::Lint { files } => lint_command(flags, files).boxed_local(), + DenoSubcommand::Lint { files, rules } => { + lint_command(flags, files, rules).boxed_local() + } DenoSubcommand::Repl => run_repl(flags).boxed_local(), DenoSubcommand::Run { script } => run_command(flags, script).boxed_local(), DenoSubcommand::Test { -- cgit v1.2.3