#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum Severity {
Error,
Warning,
Info,
Hint,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Source {
Syntax,
Semantic,
Lint,
Server,
}
impl Source {
pub fn label(&self) -> &str {
match self {
Source::Syntax => "syntax",
Source::Semantic => "semantic",
Source::Lint => "lint",
Source::Server => "server",
}
}
}
#[derive(Debug, Clone)]
pub struct Diagnostic {
pub row: usize,
pub col_start: usize,
pub col_end: usize,
pub message: String,
pub severity: Severity,
pub source: Source,
}
impl Diagnostic {
pub fn from_engine(d: crate::sql_engine::diagnostics::Diagnostic) -> Self {
use crate::sql_engine::diagnostics::{DiagnosticSeverity, DiagnosticSource};
Self {
row: d.row,
col_start: d.col_start,
col_end: d.col_end,
message: d.message,
severity: match d.severity {
DiagnosticSeverity::Error => Severity::Error,
DiagnosticSeverity::Warning => Severity::Warning,
DiagnosticSeverity::Info => Severity::Info,
DiagnosticSeverity::Hint => Severity::Hint,
},
source: match d.source {
DiagnosticSource::Syntax => Source::Syntax,
DiagnosticSource::Semantic => Source::Semantic,
DiagnosticSource::Lint => Source::Lint,
DiagnosticSource::Server => Source::Server,
},
}
}
}