use crate::ast::*;
use hax_rust_engine_macros::*;
pub use hax_types::diagnostics::Kind as DiagnosticInfoKind;
#[derive_group_for_ast]
pub struct Diagnostic {
node: Box<Fragment>,
info: DiagnosticInfo,
}
#[derive_group_for_ast]
#[must_use]
pub struct DiagnosticInfo {
pub context: Context,
pub span: Span,
pub kind: DiagnosticInfoKind,
}
impl DiagnosticInfo {
pub fn emit(&self) {
crate::hax_io::write(&hax_types::engine_api::protocol::FromEngine::Diagnostic(
hax_types::diagnostics::Diagnostics {
kind: self.kind.clone(),
span: self.span.data.clone(),
context: format!("{:?}", self.context),
owner_id: None,
},
))
}
}
impl Diagnostic {
pub fn info(&self) -> &DiagnosticInfo {
&self.info
}
pub fn node(&self) -> &Fragment {
&self.node
}
pub fn new(node: impl Into<Fragment>, info: DiagnosticInfo) -> Self {
let node = node.into();
info.emit();
Self {
node: Box::new(node),
info,
}
}
}
#[derive_group_for_ast]
pub enum Context {
Import,
NameView,
}