use serde::Deserialize;
#[derive(Debug, Deserialize, Clone)]
pub struct LanguageConfig {
#[serde(default)]
pub servers: Vec<String>,
#[serde(default)]
pub min_severity: Option<String>,
#[serde(default)]
pub inherit: Option<String>,
}
pub const DEFAULT_INHERIT: &[(&str, &str)] = &[
("typescriptreact", "typescript"),
("javascriptreact", "javascript"),
];
#[must_use]
pub fn resolve_language<'a>(
language: &'a std::collections::HashMap<String, LanguageConfig>,
key: &'a str,
) -> Option<(&'a str, LanguageConfig)> {
let lang_config = language.get(key)?;
if let Some(ref target) = lang_config.inherit {
let base = language.get(target.as_str())?;
let mut resolved = base.clone();
if !lang_config.servers.is_empty() {
resolved.servers.clone_from(&lang_config.servers);
}
if lang_config.min_severity.is_some() {
resolved.min_severity.clone_from(&lang_config.min_severity);
}
resolved.inherit = None;
Some((target.as_str(), resolved))
} else {
Some((key, lang_config.clone()))
}
}