use serde::{Deserialize, Serialize};
use crate::{FxHashMap, String};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum LintRuleSeverity {
Off,
Warn,
Error,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(default, rename_all = "camelCase")]
pub struct LinterConfig {
pub enabled: bool,
pub preset: Option<String>,
pub rules: FxHashMap<String, LintRuleSeverity>,
}
impl LinterConfig {
pub fn is_default(&self) -> bool {
self == &Self::default()
}
pub fn disabled_rules(&self) -> Vec<String> {
let mut rules = self
.rules
.iter()
.filter(|(_, severity)| matches!(severity, LintRuleSeverity::Off))
.map(|(rule, _)| rule.clone())
.collect::<Vec<_>>();
rules.sort();
rules
}
}
impl Default for LinterConfig {
fn default() -> Self {
Self {
enabled: true,
preset: None,
rules: FxHashMap::default(),
}
}
}