Skip to main content

rumdl_lib/rules/md040_fenced_code_language/
md040_config.rs

1use crate::rule_config_serde::RuleConfig;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5/// Style for language label normalization
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
7#[serde(rename_all = "kebab-case")]
8pub enum LanguageStyle {
9    /// No normalization, only check for missing language (default)
10    #[default]
11    Disabled,
12    /// Normalize to most prevalent alias per canonical language
13    Consistent,
14}
15
16/// Action to take for unknown language labels
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
18#[serde(rename_all = "kebab-case")]
19pub enum UnknownLanguageAction {
20    /// Silently ignore unknown languages (default)
21    #[default]
22    Ignore,
23    /// Emit a warning for unknown languages
24    Warn,
25    /// Treat unknown languages as errors
26    Error,
27}
28
29/// Configuration for MD040 (Fenced code language)
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
31#[serde(rename_all = "kebab-case")]
32pub struct MD040Config {
33    /// Language normalization style
34    #[serde(default)]
35    pub style: LanguageStyle,
36
37    /// Override preferred label for specific languages
38    /// Keys: Linguist canonical names (case-insensitive), Values: preferred alias
39    #[serde(default, alias = "preferred_aliases")]
40    pub preferred_aliases: HashMap<String, String>,
41
42    /// Only allow these languages (empty = allow all)
43    /// Uses Linguist canonical language names (case-insensitive)
44    #[serde(default, alias = "allowed_languages")]
45    pub allowed_languages: Vec<String>,
46
47    /// Block these languages (ignored if allowed_languages is non-empty)
48    /// Uses Linguist canonical language names (case-insensitive)
49    #[serde(default, alias = "disallowed_languages")]
50    pub disallowed_languages: Vec<String>,
51
52    /// Action for unknown language labels not in Linguist
53    #[serde(default, alias = "unknown_language_action")]
54    pub unknown_language_action: UnknownLanguageAction,
55}
56
57impl RuleConfig for MD040Config {
58    const RULE_NAME: &'static str = "MD040";
59}