crates/diagnostics/src/types.rs
use line_index::LineCol;
use rowan::TextRange;
use syntax::BuildError;
use url::Url;
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum TexError {
UnexpectedRCurly,
ExpectingRCurly,
MismatchedEnvironment,
UnusedLabel,
UndefinedLabel,
UndefinedCitation,
DuplicateLabel(Vec<(Url, TextRange)>),
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum BibError {
ExpectingLCurly,
ExpectingKey,
ExpectingRCurly,
ExpectingEq,
ExpectingFieldValue,
UnusedEntry,
DuplicateEntry(Vec<(Url, TextRange)>),
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct ChktexError {
pub start: LineCol,
pub end: LineCol,
pub message: String,
pub severity: ChktexSeverity,
pub code: String,
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum ChktexSeverity {
Error,
Warning,
Message,
}
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Diagnostic {
Tex(TextRange, TexError),
Bib(TextRange, BibError),
Build(TextRange, BuildError),
Chktex(ChktexError),
}
impl Diagnostic {
pub fn message(&self) -> &str {
match self {
Diagnostic::Tex(_, error) => match error {
TexError::UnexpectedRCurly => "Unexpected \"}\"",
TexError::ExpectingRCurly => "Expecting a curly bracket: \"}\"",
TexError::MismatchedEnvironment => "Mismatched environment",
TexError::UnusedLabel => "Unused label",
TexError::UndefinedLabel => "Undefined reference",
TexError::UndefinedCitation => "Undefined reference",
TexError::DuplicateLabel(_) => "Duplicate label",
},
Diagnostic::Bib(_, error) => match error {
BibError::ExpectingLCurly => "Expecting a curly bracket: \"{\"",
BibError::ExpectingKey => "Expecting a key",
BibError::ExpectingRCurly => "Expecting a curly bracket: \"}\"",
BibError::ExpectingEq => "Expecting an equality sign: \"=\"",
BibError::ExpectingFieldValue => "Expecting a field value",
BibError::UnusedEntry => "Unused entry",
BibError::DuplicateEntry(_) => "Duplicate entry key",
},
Diagnostic::Build(_, error) => &error.message,
Diagnostic::Chktex(error) => &error.message,
}
}
}