Skip to content

Commit 7468e6f

Browse files
committed
fix(deno-lint): ignore ban-unknown-rule-code error without this rule
1 parent fcc3387 commit 7468e6f

File tree

5 files changed

+30
-49
lines changed

5 files changed

+30
-49
lines changed

.denolint.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
{
22
"rules": {
3-
"tags": [
4-
"recommended"
5-
],
3+
"tags": ["recommended"],
64
"exclude": [
75
"no-explicit-any",
86
"camelcase",
@@ -16,5 +14,8 @@
1614
"no-case-declarations",
1715
"no-this-alias"
1816
]
17+
},
18+
"files": {
19+
"exclude": ["./packages/deno-lint/cli.js"]
1920
}
20-
}
21+
}

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ coverage
77
.nyc_output
88
*.d.ts
99
target
10+
packages/deno-lint/cli.js
11+
packages/deno-lint/cli.d.ts

packages/deno-lint/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ crate-type = ["cdylib"]
1010
[dependencies]
1111
annotate-snippets = {version = "0.9", features = ["color"]}
1212
anyhow = "1"
13-
deno_ast = "0.2"
14-
deno_lint = "0.16"
13+
deno_ast = "0.4.1"
14+
deno_lint = "0.18.1"
1515
env_logger = "0.9"
1616
globwalk = "0.8"
1717
ignore = "0.4"

packages/deno-lint/src/config.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// Copyright 2020-2021 the Deno authors. All rights reserved. MIT license.
2-
use std::path::Path;
3-
use std::sync::Arc;
4-
52
use deno_lint::rules::{get_filtered_rules, LintRule};
63
use serde::Deserialize;
4+
use std::path::Path;
5+
use std::sync::Arc;
76

87
#[derive(Debug, Default, Deserialize)]
98
#[serde(default)]
@@ -24,11 +23,11 @@ pub struct FilesConfig {
2423
#[serde(default)]
2524
pub struct Config {
2625
pub rules: RulesConfig,
27-
pub ignore: Option<Vec<String>>,
26+
pub files: FilesConfig,
2827
}
2928

3029
impl Config {
31-
pub fn get_rules(&self) -> Arc<Vec<Box<dyn LintRule>>> {
30+
pub fn get_rules(&self) -> Vec<Arc<dyn LintRule>> {
3231
get_filtered_rules(
3332
Some(self.rules.tags.clone()),
3433
Some(self.rules.exclude.clone()),
@@ -60,7 +59,7 @@ mod tests {
6059
}}
6160
}
6261

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

@@ -84,8 +83,8 @@ mod tests {
8483
},
8584
..Default::default()
8685
};
87-
let recommended_rules_codes = into_codes(&get_recommended_rules());
88-
assert_eq!(into_codes(&config.get_rules()), recommended_rules_codes);
86+
let recommended_rules_codes = into_codes(get_recommended_rules());
87+
assert_eq!(into_codes(config.get_rules()), recommended_rules_codes);
8988

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

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

115114
// if unknown rule is specified, just ignore it
116115
let config = Config {
@@ -121,6 +120,6 @@ mod tests {
121120
},
122121
..Default::default()
123122
};
124-
assert_eq!(into_codes(&config.get_rules()), set![]);
123+
assert_eq!(into_codes(config.get_rules()), set![]);
125124
}
126125
}

packages/deno-lint/src/lib.rs

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ use std::env;
88
use std::fs;
99
use std::path;
1010
use std::str;
11-
use std::sync::Arc;
1211

13-
use deno_ast::swc::parser::{Syntax, TsConfig};
14-
use deno_lint::ast_parser::get_default_ts_config;
1512
use deno_lint::linter::LinterBuilder;
1613
use deno_lint::rules::{get_all_rules, get_recommended_rules};
1714
use ignore::types::TypesBuilder;
@@ -50,7 +47,6 @@ fn lint(ctx: CallContext) -> Result<JsObject> {
5047
} else {
5148
get_recommended_rules()
5249
})
53-
.syntax(get_default_ts_config())
5450
.ignore_diagnostic_directive("eslint-disable-next-line")
5551
.build();
5652

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

10096
let (rules, cfg_ignore_files) = if config_existed {
10197
let cfg = config::load_from_json(path::Path::new(&config_path))?;
102-
(cfg.get_rules(), cfg.ignore)
98+
(cfg.get_rules(), cfg.files.exclude)
10399
} else {
104-
(get_recommended_rules(), None)
100+
(get_recommended_rules(), vec![])
105101
};
106102

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

113109
denolint_ignore_file.push(".denolintignore");
114110

115-
if let Some(ignore_files) = cfg_ignore_files {
116-
for i in ignore_files {
117-
denolint_ignore_file.push(i);
118-
}
119-
}
120-
121111
let mut type_builder = TypesBuilder::new();
122112

123113
type_builder
@@ -151,33 +141,22 @@ fn lint_command(ctx: CallContext) -> Result<JsBoolean> {
151141
Err(_) => __dirname.as_str()?,
152142
},
153143
};
154-
155-
for entry in WalkBuilder::new(cwd)
144+
let mut dir_walker = WalkBuilder::new(cwd);
145+
dir_walker
156146
.add_custom_ignore_filename(ignore_file_path)
157147
.types(types)
158-
.follow_links(true)
159-
.build()
160-
.filter_map(|v| v.ok())
161-
{
148+
.follow_links(true);
149+
for i in cfg_ignore_files {
150+
dir_walker.add_custom_ignore_filename(i);
151+
}
152+
for entry in dir_walker.build().filter_map(|v| v.ok()) {
162153
let p = entry.path();
163154
if !p.is_dir() {
164155
let file_content = fs::read_to_string(&p)
165156
.map_err(|e| Error::from_reason(format!("Read file {:?} failed: {}", p, e)))?;
166157

167-
let ts_config = TsConfig {
168-
dynamic_import: true,
169-
decorators: true,
170-
tsx: p
171-
.extension()
172-
.and_then(|ext| ext.to_str())
173-
.map(|ext| ext == "tsx")
174-
.unwrap_or(false),
175-
..Default::default()
176-
};
177-
let syntax = Syntax::Typescript(ts_config);
178158
let linter = LinterBuilder::default()
179-
.rules(Arc::clone(&rules))
180-
.syntax(syntax)
159+
.rules(rules.clone())
181160
.ignore_file_directive("eslint-disable")
182161
.ignore_diagnostic_directive("eslint-disable-next-line")
183162
.build();

0 commit comments

Comments
 (0)