use std::path::PathBuf;
use mago_reporting::Level;
use mago_reporting::baseline::BaselineVariant;
use schemars::JsonSchema;
use serde::Deserialize;
use serde::Serialize;
use mago_linter::integration::Integration;
use mago_linter::integration::IntegrationSet;
use mago_linter::rule::filter_rules_settings;
use mago_linter::settings::RulesSettings;
use mago_php_version::PHPVersion;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(default, rename_all = "kebab-case", deny_unknown_fields)]
pub struct LinterConfiguration {
pub excludes: Vec<String>,
pub integrations: Vec<Integration>,
pub rules: RulesSettings,
pub baseline: Option<PathBuf>,
pub baseline_variant: BaselineVariant,
pub minimum_fail_level: Level,
}
impl Default for LinterConfiguration {
fn default() -> Self {
Self {
excludes: vec![],
integrations: vec![],
rules: RulesSettings::default(),
baseline: None,
baseline_variant: BaselineVariant::default(),
minimum_fail_level: Level::Error,
}
}
}
impl LinterConfiguration {
#[must_use]
pub fn to_filtered_value(&self, php_version: PHPVersion) -> serde_json::Value {
let integrations = IntegrationSet::from_slice(&self.integrations);
let filtered_rules = filter_rules_settings(&self.rules, php_version, integrations);
serde_json::json!({
"excludes": self.excludes,
"integrations": self.integrations,
"rules": filtered_rules,
"baseline": self.baseline,
"baseline-variant": self.baseline_variant,
})
}
}