use std::collections::HashMap;
use lsp_types::DiagnosticSeverity;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::DiagnosticCode;
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone)]
#[serde(rename_all = "camelCase")]
pub struct EmmyrcDiagnostic {
#[serde(default)]
pub disable: Vec<DiagnosticCode>,
#[serde(default = "default_true")]
pub enable: bool,
#[serde(default)]
pub globals: Vec<String>,
#[serde(default)]
pub globals_regex: Vec<String>,
#[serde(default)]
pub severity: HashMap<DiagnosticCode, DiagnosticSeveritySetting>,
#[serde(default)]
pub enables: Vec<DiagnosticCode>,
#[schemars(extend("x-vscode-setting" = true))]
pub diagnostic_interval: Option<u64>,
}
impl Default for EmmyrcDiagnostic {
fn default() -> Self {
Self {
disable: Vec::new(),
enable: default_true(),
globals: Vec::new(),
globals_regex: Vec::new(),
severity: HashMap::new(),
enables: Vec::new(),
diagnostic_interval: Some(500),
}
}
}
fn default_true() -> bool {
true
}
#[derive(Serialize, Deserialize, Debug, JsonSchema, Clone, Copy)]
#[serde(rename_all = "camelCase")]
pub enum DiagnosticSeveritySetting {
Error,
Warning,
Information,
Hint,
}
impl From<DiagnosticSeveritySetting> for DiagnosticSeverity {
fn from(severity: DiagnosticSeveritySetting) -> Self {
match severity {
DiagnosticSeveritySetting::Error => DiagnosticSeverity::ERROR,
DiagnosticSeveritySetting::Warning => DiagnosticSeverity::WARNING,
DiagnosticSeveritySetting::Information => DiagnosticSeverity::INFORMATION,
DiagnosticSeveritySetting::Hint => DiagnosticSeverity::HINT,
}
}
}