conjure_cp_essence_parser/diagnostics/
diagnostics_api.rs1use serde::{Deserialize, Serialize};
2
3use crate::diagnostics::error_detection::semantic_errors::detect_semantic_errors;
4use crate::diagnostics::error_detection::syntactic_errors::detect_syntactic_errors;
5
6#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
10#[serde(rename_all = "camelCase")]
11pub struct Position {
12 pub line: u32,
13 pub character: u32,
14}
15
16#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
17#[serde(rename_all = "camelCase")]
18pub struct Range {
19 pub start: Position,
20 pub end: Position,
21}
22
23#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
25#[serde(rename_all = "camelCase")]
26pub enum Severity {
27 Error = 1,
28 Warn = 2,
29 Info = 3,
30 Hint = 4,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
35#[serde(rename_all = "camelCase")]
36pub struct Diagnostic {
37 pub range: Range,
38 pub severity: Severity,
39 pub message: String,
40 pub source: &'static str,
41}
42
43#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub enum SymbolKind {
48 Integer = 0,
49 Decimal = 1,
50 Function = 2,
51 Letting = 3,
52 Find = 4,
53} #[derive(Debug, Clone, Serialize, Deserialize)]
58#[serde(rename_all = "camelCase")]
59pub struct DocumentSymbol {
60 pub name: String,
61 pub detail: Option<String>,
62 pub kind: SymbolKind,
63 pub range: Range,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub children: Option<Vec<DocumentSymbol>>,
66}
67
68pub fn get_diagnostics(source: &str) -> Vec<Diagnostic> {
70 let mut diagnostics = Vec::new();
71
72 diagnostics.extend(detect_semantic_errors(source)); diagnostics.extend(detect_syntactic_errors(source)); diagnostics
79}
80
81