ass_core/tokenizer/state/
collector.rs1use super::issue::TokenIssue;
7use alloc::{string::String, vec::Vec};
8
9#[derive(Debug, Clone, Default)]
14pub struct IssueCollector<'a> {
15 issues: Vec<TokenIssue<'a>>,
17}
18
19impl<'a> IssueCollector<'a> {
20 #[must_use]
22 pub const fn new() -> Self {
23 Self { issues: Vec::new() }
24 }
25
26 pub fn add_issue(&mut self, issue: TokenIssue<'a>) {
28 self.issues.push(issue);
29 }
30
31 pub fn add_warning(&mut self, message: String, span: &'a str, line: usize, column: usize) {
33 self.add_issue(TokenIssue::warning(message, span, line, column));
34 }
35
36 pub fn add_error(&mut self, message: String, span: &'a str, line: usize, column: usize) {
38 self.add_issue(TokenIssue::error(message, span, line, column));
39 }
40
41 pub fn add_critical(&mut self, message: String, span: &'a str, line: usize, column: usize) {
43 self.add_issue(TokenIssue::critical(message, span, line, column));
44 }
45
46 #[must_use]
48 pub fn issues(&self) -> &[TokenIssue<'a>] {
49 &self.issues
50 }
51
52 #[must_use]
54 pub fn has_issues(&self) -> bool {
55 !self.issues.is_empty()
56 }
57
58 pub fn has_errors(&self) -> bool {
60 self.issues.iter().any(TokenIssue::is_error)
61 }
62
63 #[must_use]
65 pub fn issue_count(&self) -> usize {
66 self.issues.len()
67 }
68
69 pub fn clear(&mut self) {
71 self.issues.clear();
72 }
73
74 pub fn take_issues(&mut self) -> Vec<TokenIssue<'a>> {
76 core::mem::take(&mut self.issues)
77 }
78}