summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-06-12 16:42:12 +0200
committerGitHub <noreply@github.com>2020-06-12 16:42:12 +0200
commit07bf90779b41449451683aeacda7a3629382ee5c (patch)
tree1e78a2593e660652cf2b6a6874c57488043dbbe9
parente9424bf6b59b4e27c2691b70879cb1de874f98ce (diff)
feat(lint): add --rules flag (#6264)
-rw-r--r--cli/flags.rs33
-rw-r--r--cli/lint.rs9
-rw-r--r--cli/main.rs16
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 {