summaryrefslogtreecommitdiff
path: root/cli/flags.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2021-09-03 17:01:58 +0200
committerGitHub <noreply@github.com>2021-09-03 17:01:58 +0200
commitd93570a6195d2be5fe448bb0d33d4f64e839676e (patch)
treea44431235693f484308aad70cda66827605f4568 /cli/flags.rs
parentc3001fe280add8c695c288fe26b8f81b5f2f0261 (diff)
feat(lint): add support for config file and CLI flags for rules (#11776)
This commit adds support for following flags in deno lint subcommand: --config - allows to load configuration file and parses "lint" object --rules-tags=<tags> - allows specifying which set of tagged rules should be run --rules-include=<rules> - allow specifying which rules should be run --rules-exclude=<rules> - allow specifying which rules should not be run
Diffstat (limited to 'cli/flags.rs')
-rw-r--r--cli/flags.rs108
1 files changed, 108 insertions, 0 deletions
diff --git a/cli/flags.rs b/cli/flags.rs
index 63182753a..03167adc6 100644
--- a/cli/flags.rs
+++ b/cli/flags.rs
@@ -90,6 +90,9 @@ pub enum DenoSubcommand {
files: Vec<PathBuf>,
ignore: Vec<PathBuf>,
rules: bool,
+ rules_tags: Vec<String>,
+ rules_include: Vec<String>,
+ rules_exclude: Vec<String>,
json: bool,
},
Repl {
@@ -953,6 +956,35 @@ Ignore linting a file by adding an ignore comment at the top of the file:
.help("List available rules"),
)
.arg(
+ Arg::with_name("rules-tags")
+ .long("rules-tags")
+ .require_equals(true)
+ .takes_value(true)
+ .use_delimiter(true)
+ .empty_values(true)
+ .conflicts_with("rules")
+ .help("Use set of rules with a tag"),
+ )
+ .arg(
+ Arg::with_name("rules-include")
+ .long("rules-include")
+ .require_equals(true)
+ .takes_value(true)
+ .use_delimiter(true)
+ .conflicts_with("rules")
+ .help("Include lint rules"),
+ )
+ .arg(
+ Arg::with_name("rules-exclude")
+ .long("rules-exclude")
+ .require_equals(true)
+ .takes_value(true)
+ .use_delimiter(true)
+ .conflicts_with("rules")
+ .help("Exclude lint rules"),
+ )
+ .arg(config_arg())
+ .arg(
Arg::with_name("ignore")
.long("ignore")
.takes_value(true)
@@ -1722,6 +1754,7 @@ fn lsp_parse(flags: &mut Flags, _matches: &clap::ArgMatches) {
}
fn lint_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
+ config_arg_parse(flags, matches);
let files = match matches.values_of("files") {
Some(f) => f.map(PathBuf::from).collect(),
None => vec![],
@@ -1731,10 +1764,25 @@ fn lint_parse(flags: &mut Flags, matches: &clap::ArgMatches) {
None => vec![],
};
let rules = matches.is_present("rules");
+ let rules_tags = match matches.values_of("rules-tags") {
+ Some(f) => f.map(String::from).collect(),
+ None => vec![],
+ };
+ let rules_include = match matches.values_of("rules-include") {
+ Some(f) => f.map(String::from).collect(),
+ None => vec![],
+ };
+ let rules_exclude = match matches.values_of("rules-exclude") {
+ Some(f) => f.map(String::from).collect(),
+ None => vec![],
+ };
let json = matches.is_present("json");
flags.subcommand = DenoSubcommand::Lint {
files,
rules,
+ rules_tags,
+ rules_include,
+ rules_exclude,
ignore,
json,
};
@@ -2456,6 +2504,9 @@ mod tests {
PathBuf::from("script_2.ts")
],
rules: false,
+ rules_tags: vec![],
+ rules_include: vec![],
+ rules_exclude: vec![],
json: false,
ignore: vec![],
},
@@ -2471,6 +2522,9 @@ mod tests {
subcommand: DenoSubcommand::Lint {
files: vec![],
rules: false,
+ rules_tags: vec![],
+ rules_include: vec![],
+ rules_exclude: vec![],
json: false,
ignore: vec![
PathBuf::from("script_1.ts"),
@@ -2488,6 +2542,32 @@ mod tests {
subcommand: DenoSubcommand::Lint {
files: vec![],
rules: true,
+ rules_tags: vec![],
+ rules_include: vec![],
+ rules_exclude: vec![],
+ json: false,
+ ignore: vec![],
+ },
+ ..Flags::default()
+ }
+ );
+
+ let r = flags_from_vec(svec![
+ "deno",
+ "lint",
+ "--rules-tags=",
+ "--rules-include=ban-untagged-todo,no-undef",
+ "--rules-exclude=no-const-assign"
+ ]);
+ assert_eq!(
+ r.unwrap(),
+ Flags {
+ subcommand: DenoSubcommand::Lint {
+ files: vec![],
+ rules: false,
+ rules_tags: svec![""],
+ rules_include: svec!["ban-untagged-todo", "no-undef"],
+ rules_exclude: svec!["no-const-assign"],
json: false,
ignore: vec![],
},
@@ -2502,9 +2582,37 @@ mod tests {
subcommand: DenoSubcommand::Lint {
files: vec![PathBuf::from("script_1.ts")],
rules: false,
+ rules_tags: vec![],
+ rules_include: vec![],
+ rules_exclude: vec![],
+ json: true,
+ ignore: vec![],
+ },
+ ..Flags::default()
+ }
+ );
+
+ let r = flags_from_vec(svec![
+ "deno",
+ "lint",
+ "--config",
+ "Deno.jsonc",
+ "--json",
+ "script_1.ts"
+ ]);
+ assert_eq!(
+ r.unwrap(),
+ Flags {
+ subcommand: DenoSubcommand::Lint {
+ files: vec![PathBuf::from("script_1.ts")],
+ rules: false,
+ rules_tags: vec![],
+ rules_include: vec![],
+ rules_exclude: vec![],
json: true,
ignore: vec![],
},
+ config_path: Some("Deno.jsonc".to_string()),
..Flags::default()
}
);