From f33bc67dcdce2e18388edaad39ef751ff4e732f9 Mon Sep 17 00:00:00 2001 From: Julian Date: Tue, 1 Jul 2025 19:37:20 +0200 Subject: [PATCH 1/2] ok --- .../src/analyser/linter/rules.rs | 8 +++++++ xtask/codegen/src/generate_configuration.rs | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/crates/pgt_configuration/src/analyser/linter/rules.rs b/crates/pgt_configuration/src/analyser/linter/rules.rs index 8db5a0ab..d45199b0 100644 --- a/crates/pgt_configuration/src/analyser/linter/rules.rs +++ b/crates/pgt_configuration/src/analyser/linter/rules.rs @@ -121,6 +121,14 @@ impl Rules { } enabled_rules.difference(&disabled_rules).copied().collect() } + #[doc = r" It returns the disabled rules by configuration."] + pub fn as_disabled_rules(&self) -> FxHashSet> { + let mut disabled_rules = FxHashSet::default(); + if let Some(group) = self.safety.as_ref() { + disabled_rules.extend(&group.get_disabled_rules()); + } + disabled_rules + } } #[derive(Clone, Debug, Default, Deserialize, Eq, Merge, PartialEq, Serialize)] #[cfg_attr(feature = "schema", derive(JsonSchema))] diff --git a/xtask/codegen/src/generate_configuration.rs b/xtask/codegen/src/generate_configuration.rs index 3799f19b..661f44b5 100644 --- a/xtask/codegen/src/generate_configuration.rs +++ b/xtask/codegen/src/generate_configuration.rs @@ -61,6 +61,8 @@ fn generate_for_groups( let mut group_idents = Vec::with_capacity(groups.len()); let mut group_strings = Vec::with_capacity(groups.len()); let mut group_as_default_rules = Vec::with_capacity(groups.len()); + let mut group_as_disabled_rules = Vec::with_capacity(groups.len()); + for (group, rules) in groups { let group_pascal_ident = quote::format_ident!("{}", &Case::Pascal.convert(group)); let group_ident = quote::format_ident!("{}", group); @@ -95,6 +97,12 @@ fn generate_for_groups( } }); + group_as_disabled_rules.push(quote! { + if let Some(group) = self.#group_ident.as_ref() { + disabled_rules.extend(&group.get_disabled_rules()); + } + }); + group_pascal_idents.push(group_pascal_ident); group_idents.push(group_ident); group_strings.push(Literal::string(group)); @@ -246,6 +254,13 @@ fn generate_for_groups( #( #group_as_default_rules )* enabled_rules } + + /// It returns the disabled rules by configuration. + pub fn as_disabled_rules(&self) -> FxHashSet> { + let mut disabled_rules = FxHashSet::default(); + #( #group_as_disabled_rules )* + disabled_rules + } } #( #struct_groups )* @@ -358,6 +373,13 @@ fn generate_for_groups( enabled_rules.difference(&disabled_rules).copied().collect() } + + /// It returns the disabled rules by configuration. + pub fn as_disabled_rules(&self) -> FxHashSet> { + let mut disabled_rules = FxHashSet::default(); + #( #group_as_disabled_rules )* + disabled_rules + } } #( #struct_groups )* From bc704c1b6fba77d6db2259dc2094a145089fcc42 Mon Sep 17 00:00:00 2001 From: Julian Date: Tue, 1 Jul 2025 19:45:56 +0200 Subject: [PATCH 2/2] fix(analyser): recognize disabled rules --- .../src/workspace/server/analyser.rs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/crates/pgt_workspace/src/workspace/server/analyser.rs b/crates/pgt_workspace/src/workspace/server/analyser.rs index d4b08ba1..4defc79e 100644 --- a/crates/pgt_workspace/src/workspace/server/analyser.rs +++ b/crates/pgt_workspace/src/workspace/server/analyser.rs @@ -68,6 +68,7 @@ impl<'a, 'b> LintVisitor<'a, 'b> { fn finish(mut self) -> (FxHashSet>, FxHashSet>) { let has_only_filter = !self.only.is_empty(); + if !has_only_filter { let enabled_rules = self .settings @@ -75,7 +76,15 @@ impl<'a, 'b> LintVisitor<'a, 'b> { .map(|rules| rules.as_enabled_rules()) .unwrap_or_default(); self.enabled_rules.extend(enabled_rules); + + let disabled_rules = self + .settings + .as_linter_rules() + .map(|rules| rules.as_disabled_rules()) + .unwrap_or_default(); + self.disabled_rules.extend(disabled_rules); } + (self.enabled_rules, self.disabled_rules) } @@ -127,3 +136,42 @@ impl RegistryVisitor for LintVisitor<'_, '_> { self.push_rule::() } } + +#[cfg(test)] +mod tests { + use pgt_analyse::RuleFilter; + use pgt_configuration::{RuleConfiguration, Rules, analyser::Safety}; + + use crate::{ + settings::{LinterSettings, Settings}, + workspace::server::analyser::AnalyserVisitorBuilder, + }; + + #[test] + fn recognizes_disabled_rules() { + let settings = Settings { + linter: LinterSettings { + rules: Some(Rules { + safety: Some(Safety { + ban_drop_column: Some(RuleConfiguration::Plain( + pgt_configuration::RulePlainConfiguration::Off, + )), + ..Default::default() + }), + ..Default::default() + }), + ..Default::default() + }, + ..Default::default() + }; + + let (_, disabled_rules) = AnalyserVisitorBuilder::new(&settings) + .with_linter_rules(&[], &[]) + .finish(); + + assert_eq!( + disabled_rules, + vec![RuleFilter::Rule("safety", "banDropColumn")] + ) + } +}