conjure_cp_essence_parser/diagnostics/
diagnostics_api.rs1use serde::{Deserialize, Serialize};
2
3use crate::diagnostics::error_detection::collect_errors::detect_errors;
4use tree_sitter::Tree;
5#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
9#[serde(rename_all = "camelCase")]
10pub struct Position {
11 pub line: u32,
12 pub character: u32,
13}
14
15#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
16#[serde(rename_all = "camelCase")]
17pub struct Range {
18 pub start: Position,
19 pub end: Position,
20}
21
22#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
24#[serde(rename_all = "camelCase")]
25pub enum Severity {
26 Error = 1,
27 Warn = 2,
28 Info = 3,
29 Hint = 4,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
34#[serde(rename_all = "camelCase")]
35pub struct Diagnostic {
36 pub range: Range,
37 pub severity: Severity,
38 pub message: String,
39 pub source: &'static str,
40}
41
42#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub enum SymbolKind {
47 Integer = 0,
48 Decimal = 1,
49 Function = 2,
50 Letting = 3,
51 Find = 4,
52 Variable = 5,
53 Constant = 6,
54 Domain = 7,
55 FindVar = 8,
56 LettingVar = 9,
57 Given = 10,
58 GivenVar = 11,
59} #[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct DocumentSymbol {
66 pub name: String,
67 pub detail: Option<String>,
68 pub kind: SymbolKind,
69 pub range: Range,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub children: Option<Vec<DocumentSymbol>>,
72}
73
74pub fn get_diagnostics(source: &str, cst: &Tree) -> Vec<Diagnostic> {
76 let mut diagnostics = Vec::new();
77
78 diagnostics.extend(detect_errors(source, cst));
79
80 diagnostics
81}
82
83