Skip to content

Commit

Permalink
fix(deno-lint): ignore ban-unknown-rule-code error without this rule
Browse files Browse the repository at this point in the history
  • Loading branch information
Brooooooklyn committed Oct 21, 2021
1 parent fcc3387 commit 7468e6f
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 49 deletions.
9 changes: 5 additions & 4 deletions .denolint.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{
"rules": {
"tags": [
"recommended"
],
"tags": ["recommended"],
"exclude": [
"no-explicit-any",
"camelcase",
Expand All @@ -16,5 +14,8 @@
"no-case-declarations",
"no-this-alias"
]
},
"files": {
"exclude": ["./packages/deno-lint/cli.js"]
}
}
}
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ coverage
.nyc_output
*.d.ts
target
packages/deno-lint/cli.js
packages/deno-lint/cli.d.ts
4 changes: 2 additions & 2 deletions packages/deno-lint/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ crate-type = ["cdylib"]
[dependencies]
annotate-snippets = {version = "0.9", features = ["color"]}
anyhow = "1"
deno_ast = "0.2"
deno_lint = "0.16"
deno_ast = "0.4.1"
deno_lint = "0.18.1"
env_logger = "0.9"
globwalk = "0.8"
ignore = "0.4"
Expand Down
23 changes: 11 additions & 12 deletions packages/deno-lint/src/config.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
// Copyright 2020-2021 the Deno authors. All rights reserved. MIT license.
use std::path::Path;
use std::sync::Arc;

use deno_lint::rules::{get_filtered_rules, LintRule};
use serde::Deserialize;
use std::path::Path;
use std::sync::Arc;

#[derive(Debug, Default, Deserialize)]
#[serde(default)]
Expand All @@ -24,11 +23,11 @@ pub struct FilesConfig {
#[serde(default)]
pub struct Config {
pub rules: RulesConfig,
pub ignore: Option<Vec<String>>,
pub files: FilesConfig,
}

impl Config {
pub fn get_rules(&self) -> Arc<Vec<Box<dyn LintRule>>> {
pub fn get_rules(&self) -> Vec<Arc<dyn LintRule>> {
get_filtered_rules(
Some(self.rules.tags.clone()),
Some(self.rules.exclude.clone()),
Expand Down Expand Up @@ -60,7 +59,7 @@ mod tests {
}}
}

fn into_codes(rules: &Vec<Box<dyn LintRule>>) -> HashSet<&'static str> {
fn into_codes(rules: Vec<Arc<dyn LintRule>>) -> HashSet<&'static str> {
rules.iter().map(|rule| rule.code()).collect()
}

Expand All @@ -84,8 +83,8 @@ mod tests {
},
..Default::default()
};
let recommended_rules_codes = into_codes(&get_recommended_rules());
assert_eq!(into_codes(&config.get_rules()), recommended_rules_codes);
let recommended_rules_codes = into_codes(get_recommended_rules());
assert_eq!(into_codes(config.get_rules()), recommended_rules_codes);

// even if "recommended" is specified in `tags` and `include` contains a rule
// code that is in the "recommended" set, we have to make sure that each
Expand All @@ -98,8 +97,8 @@ mod tests {
},
..Default::default()
};
let recommended_rules_codes = into_codes(&get_recommended_rules());
assert_eq!(into_codes(&config.get_rules()), recommended_rules_codes);
let recommended_rules_codes = into_codes(get_recommended_rules());
assert_eq!(into_codes(config.get_rules()), recommended_rules_codes);

// `include` has higher precedence over `exclude`
let config = Config {
Expand All @@ -110,7 +109,7 @@ mod tests {
},
..Default::default()
};
assert_eq!(into_codes(&config.get_rules()), set!["eqeqeq"]);
assert_eq!(into_codes(config.get_rules()), set!["eqeqeq"]);

// if unknown rule is specified, just ignore it
let config = Config {
Expand All @@ -121,6 +120,6 @@ mod tests {
},
..Default::default()
};
assert_eq!(into_codes(&config.get_rules()), set![]);
assert_eq!(into_codes(config.get_rules()), set![]);
}
}
41 changes: 10 additions & 31 deletions packages/deno-lint/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ use std::env;
use std::fs;
use std::path;
use std::str;
use std::sync::Arc;

use deno_ast::swc::parser::{Syntax, TsConfig};
use deno_lint::ast_parser::get_default_ts_config;
use deno_lint::linter::LinterBuilder;
use deno_lint::rules::{get_all_rules, get_recommended_rules};
use ignore::types::TypesBuilder;
Expand Down Expand Up @@ -50,7 +47,6 @@ fn lint(ctx: CallContext) -> Result<JsObject> {
} else {
get_recommended_rules()
})
.syntax(get_default_ts_config())
.ignore_diagnostic_directive("eslint-disable-next-line")
.build();

Expand Down Expand Up @@ -99,9 +95,9 @@ fn lint_command(ctx: CallContext) -> Result<JsBoolean> {

let (rules, cfg_ignore_files) = if config_existed {
let cfg = config::load_from_json(path::Path::new(&config_path))?;
(cfg.get_rules(), cfg.ignore)
(cfg.get_rules(), cfg.files.exclude)
} else {
(get_recommended_rules(), None)
(get_recommended_rules(), vec![])
};

let mut eslint_ignore_file = cwd.clone();
Expand All @@ -112,12 +108,6 @@ fn lint_command(ctx: CallContext) -> Result<JsBoolean> {

denolint_ignore_file.push(".denolintignore");

if let Some(ignore_files) = cfg_ignore_files {
for i in ignore_files {
denolint_ignore_file.push(i);
}
}

let mut type_builder = TypesBuilder::new();

type_builder
Expand Down Expand Up @@ -151,33 +141,22 @@ fn lint_command(ctx: CallContext) -> Result<JsBoolean> {
Err(_) => __dirname.as_str()?,
},
};

for entry in WalkBuilder::new(cwd)
let mut dir_walker = WalkBuilder::new(cwd);
dir_walker
.add_custom_ignore_filename(ignore_file_path)
.types(types)
.follow_links(true)
.build()
.filter_map(|v| v.ok())
{
.follow_links(true);
for i in cfg_ignore_files {
dir_walker.add_custom_ignore_filename(i);
}
for entry in dir_walker.build().filter_map(|v| v.ok()) {
let p = entry.path();
if !p.is_dir() {
let file_content = fs::read_to_string(&p)
.map_err(|e| Error::from_reason(format!("Read file {:?} failed: {}", p, e)))?;

let ts_config = TsConfig {
dynamic_import: true,
decorators: true,
tsx: p
.extension()
.and_then(|ext| ext.to_str())
.map(|ext| ext == "tsx")
.unwrap_or(false),
..Default::default()
};
let syntax = Syntax::Typescript(ts_config);
let linter = LinterBuilder::default()
.rules(Arc::clone(&rules))
.syntax(syntax)
.rules(rules.clone())
.ignore_file_directive("eslint-disable")
.ignore_diagnostic_directive("eslint-disable-next-line")
.build();
Expand Down

0 comments on commit 7468e6f

Please sign in to comment.