sentri_core/
analysis_context.rs1use crate::model::ProgramModel;
4
5#[derive(Debug, Clone)]
7pub struct AnalysisWarning {
8 pub message: String,
10 pub file: String,
12 pub line: usize,
14 pub column: Option<usize>,
16 pub source_line: Option<String>,
18}
19
20#[derive(Debug, Clone)]
22pub struct AnalysisContext {
23 pub program: ProgramModel,
25 pub is_valid: bool,
27 pub warnings: Vec<AnalysisWarning>,
29}
30
31impl AnalysisContext {
32 pub fn new(program: ProgramModel) -> Self {
34 Self {
35 program,
36 is_valid: true,
37 warnings: Vec::new(),
38 }
39 }
40
41 pub fn add_warning(
43 &mut self,
44 message: String,
45 file: String,
46 line: usize,
47 column: Option<usize>,
48 source_line: Option<String>,
49 ) {
50 self.warnings.push(AnalysisWarning {
51 message,
52 file,
53 line,
54 column,
55 source_line,
56 });
57 }
58
59 pub fn mark_invalid(&mut self) {
61 self.is_valid = false;
62 }
63
64 pub fn warning_count(&self) -> usize {
66 self.warnings.len()
67 }
68
69 pub fn has_warnings(&self) -> bool {
71 !self.warnings.is_empty()
72 }
73}