diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-06-12 16:42:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-12 16:42:12 +0200 |
commit | 07bf90779b41449451683aeacda7a3629382ee5c (patch) | |
tree | 1e78a2593e660652cf2b6a6874c57488043dbbe9 | |
parent | e9424bf6b59b4e27c2691b70879cb1de874f98ce (diff) |
feat(lint): add --rules flag (#6264)
-rw-r--r-- | cli/flags.rs | 33 | ||||
-rw-r--r-- | cli/lint.rs | 9 | ||||
-rw-r--r-- | cli/main.rs | 16 |
3 files changed, 53 insertions, 5 deletions
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<String>, + 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 @@ -930,6 +935,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) .multiple(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<String>) -> 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<String>) -> Result<(), ErrBox> { +async fn lint_command( + flags: Flags, + files: Vec<String>, + 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<String>) -> 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 { |