use std::collections::BTreeMap;
use serde::Serialize;
use sqruff_lib_core::errors::SQLBaseError;
impl From<SQLBaseError> for Diagnostic {
fn from(value: SQLBaseError) -> Self {
Diagnostic {
range: Range {
start: Position::new(value.line_no as u32, value.line_pos as u32),
end: Position::new(value.line_no as u32, value.line_pos as u32),
},
message: value.description,
severity: if value.warning {
DiagnosticSeverity::Warning
} else {
DiagnosticSeverity::Error
},
source: Some("sqruff".to_string()),
}
}
}
#[derive(Serialize)]
struct Position {
line: u32,
character: u32,
}
impl Position {
fn new(line: u32, character: u32) -> Self {
Self { line, character }
}
}
#[derive(Serialize)]
struct Range {
start: Position,
end: Position,
}
#[derive(Serialize)]
pub struct Diagnostic {
range: Range,
message: String,
pub severity: DiagnosticSeverity,
source: Option<String>,
}
#[derive(Serialize)]
pub enum DiagnosticSeverity {
Error = 0,
Warning = 1,
Information = 2,
Hint = 3,
}
pub type DiagnosticCollection = BTreeMap<String, Vec<Diagnostic>>;