Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2e21f2e

Browse files
fix(analyser): recognize disabled rules (#438)
1 parent 1535b76 commit 2e21f2e

File tree

3 files changed

+78
-0
lines changed

3 files changed

+78
-0
lines changed

‎crates/pgt_configuration/src/analyser/linter/rules.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ impl Rules {
121121
}
122122
enabled_rules.difference(&disabled_rules).copied().collect()
123123
}
124+
#[doc = r" It returns the disabled rules by configuration."]
125+
pub fn as_disabled_rules(&self) -> FxHashSet<RuleFilter<'static>> {
126+
let mut disabled_rules = FxHashSet::default();
127+
if let Some(group) = self.safety.as_ref() {
128+
disabled_rules.extend(&group.get_disabled_rules());
129+
}
130+
disabled_rules
131+
}
124132
}
125133
#[derive(Clone, Debug, Default, Deserialize, Eq, Merge, PartialEq, Serialize)]
126134
#[cfg_attr(feature = "schema", derive(JsonSchema))]

‎crates/pgt_workspace/src/workspace/server/analyser.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,23 @@ impl<'a, 'b> LintVisitor<'a, 'b> {
6868

6969
fn finish(mut self) -> (FxHashSet<RuleFilter<'a>>, FxHashSet<RuleFilter<'a>>) {
7070
let has_only_filter = !self.only.is_empty();
71+
7172
if !has_only_filter {
7273
let enabled_rules = self
7374
.settings
7475
.as_linter_rules()
7576
.map(|rules| rules.as_enabled_rules())
7677
.unwrap_or_default();
7778
self.enabled_rules.extend(enabled_rules);
79+
80+
let disabled_rules = self
81+
.settings
82+
.as_linter_rules()
83+
.map(|rules| rules.as_disabled_rules())
84+
.unwrap_or_default();
85+
self.disabled_rules.extend(disabled_rules);
7886
}
87+
7988
(self.enabled_rules, self.disabled_rules)
8089
}
8190

@@ -127,3 +136,42 @@ impl RegistryVisitor for LintVisitor<'_, '_> {
127136
self.push_rule::<R>()
128137
}
129138
}
139+
140+
#[cfg(test)]
141+
mod tests {
142+
use pgt_analyse::RuleFilter;
143+
use pgt_configuration::{RuleConfiguration, Rules, analyser::Safety};
144+
145+
use crate::{
146+
settings::{LinterSettings, Settings},
147+
workspace::server::analyser::AnalyserVisitorBuilder,
148+
};
149+
150+
#[test]
151+
fn recognizes_disabled_rules() {
152+
let settings = Settings {
153+
linter: LinterSettings {
154+
rules: Some(Rules {
155+
safety: Some(Safety {
156+
ban_drop_column: Some(RuleConfiguration::Plain(
157+
pgt_configuration::RulePlainConfiguration::Off,
158+
)),
159+
..Default::default()
160+
}),
161+
..Default::default()
162+
}),
163+
..Default::default()
164+
},
165+
..Default::default()
166+
};
167+
168+
let (_, disabled_rules) = AnalyserVisitorBuilder::new(&settings)
169+
.with_linter_rules(&[], &[])
170+
.finish();
171+
172+
assert_eq!(
173+
disabled_rules,
174+
vec![RuleFilter::Rule("safety", "banDropColumn")]
175+
)
176+
}
177+
}

‎xtask/codegen/src/generate_configuration.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ fn generate_for_groups(
6161
let mut group_idents = Vec::with_capacity(groups.len());
6262
let mut group_strings = Vec::with_capacity(groups.len());
6363
let mut group_as_default_rules = Vec::with_capacity(groups.len());
64+
let mut group_as_disabled_rules = Vec::with_capacity(groups.len());
65+
6466
for (group, rules) in groups {
6567
let group_pascal_ident = quote::format_ident!("{}", &Case::Pascal.convert(group));
6668
let group_ident = quote::format_ident!("{}", group);
@@ -95,6 +97,12 @@ fn generate_for_groups(
9597
}
9698
});
9799

100+
group_as_disabled_rules.push(quote! {
101+
if let Some(group) = self.#group_ident.as_ref() {
102+
disabled_rules.extend(&group.get_disabled_rules());
103+
}
104+
});
105+
98106
group_pascal_idents.push(group_pascal_ident);
99107
group_idents.push(group_ident);
100108
group_strings.push(Literal::string(group));
@@ -246,6 +254,13 @@ fn generate_for_groups(
246254
#( #group_as_default_rules )*
247255
enabled_rules
248256
}
257+
258+
/// It returns the disabled rules by configuration.
259+
pub fn as_disabled_rules(&self) -> FxHashSet<RuleFilter<'static>> {
260+
let mut disabled_rules = FxHashSet::default();
261+
#( #group_as_disabled_rules )*
262+
disabled_rules
263+
}
249264
}
250265

251266
#( #struct_groups )*
@@ -358,6 +373,13 @@ fn generate_for_groups(
358373

359374
enabled_rules.difference(&disabled_rules).copied().collect()
360375
}
376+
377+
/// It returns the disabled rules by configuration.
378+
pub fn as_disabled_rules(&self) -> FxHashSet<RuleFilter<'static>> {
379+
let mut disabled_rules = FxHashSet::default();
380+
#( #group_as_disabled_rules )*
381+
disabled_rules
382+
}
361383
}
362384

363385
#( #struct_groups )*

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /