Skip to main content

panache_parser/parser/yaml/
model.rs

1#[derive(Debug, Clone, PartialEq, Eq)]
2pub struct YamlDiagnostic {
3    pub code: &'static str,
4    pub message: &'static str,
5    pub byte_start: usize,
6    pub byte_end: usize,
7}
8
9#[derive(Debug, Clone)]
10pub struct YamlParseReport {
11    pub tree: Option<crate::syntax::SyntaxNode>,
12    pub diagnostics: Vec<YamlDiagnostic>,
13}
14
15pub mod diagnostic_codes {
16    pub const LEX_ERROR: &str = "YAML_LEX_ERROR";
17    pub const LEX_TRAILING_CONTENT_AFTER_DOCUMENT_START: &str =
18        "YAML_LEX_TRAILING_CONTENT_AFTER_DOCUMENT_START";
19    pub const LEX_TRAILING_CONTENT_AFTER_DOCUMENT_END: &str =
20        "YAML_LEX_TRAILING_CONTENT_AFTER_DOCUMENT_END";
21    pub const LEX_INVALID_DOUBLE_QUOTED_ESCAPE: &str = "YAML_LEX_INVALID_DOUBLE_QUOTED_ESCAPE";
22    pub const LEX_WRONG_INDENTED_FLOW: &str = "YAML_LEX_WRONG_INDENTED_FLOW";
23    pub const LEX_REQUIRED_SIMPLE_KEY_NOT_FOUND: &str = "YAML_LEX_REQUIRED_SIMPLE_KEY_NOT_FOUND";
24    pub const LEX_BLOCK_ENTRY_NOT_ALLOWED: &str = "YAML_LEX_BLOCK_ENTRY_NOT_ALLOWED";
25    pub const LEX_KEY_INDICATOR_NOT_ALLOWED: &str = "YAML_LEX_KEY_INDICATOR_NOT_ALLOWED";
26    pub const LEX_VALUE_INDICATOR_NOT_ALLOWED: &str = "YAML_LEX_VALUE_INDICATOR_NOT_ALLOWED";
27    pub const LEX_UNTERMINATED_QUOTED_SCALAR: &str = "YAML_LEX_UNTERMINATED_QUOTED_SCALAR";
28    pub const LEX_COMMENT_NOT_PRECEDED_BY_SPACE: &str = "YAML_LEX_COMMENT_NOT_PRECEDED_BY_SPACE";
29
30    pub const PARSE_EXPECTED_FLOW_SEQUENCE_START: &str = "YAML_PARSE_EXPECTED_FLOW_SEQUENCE_START";
31    pub const PARSE_TRAILING_CONTENT_AFTER_FLOW_END: &str =
32        "YAML_PARSE_TRAILING_CONTENT_AFTER_FLOW_END";
33    pub const PARSE_INVALID_FLOW_SEQUENCE_COMMA: &str = "YAML_PARSE_INVALID_FLOW_SEQUENCE_COMMA";
34    pub const PARSE_UNTERMINATED_FLOW_SEQUENCE: &str = "YAML_PARSE_UNTERMINATED_FLOW_SEQUENCE";
35    pub const PARSE_EXPECTED_FLOW_MAP_START: &str = "YAML_PARSE_EXPECTED_FLOW_MAP_START";
36    pub const PARSE_UNTERMINATED_FLOW_MAP: &str = "YAML_PARSE_UNTERMINATED_FLOW_MAP";
37    pub const PARSE_UNEXPECTED_FLOW_CLOSER: &str = "YAML_PARSE_UNEXPECTED_FLOW_CLOSER";
38    pub const PARSE_UNEXPECTED_INDENT: &str = "YAML_PARSE_UNEXPECTED_INDENT";
39    pub const PARSE_UNEXPECTED_DEDENT: &str = "YAML_PARSE_UNEXPECTED_DEDENT";
40    pub const PARSE_INVALID_KEY_TOKEN: &str = "YAML_PARSE_INVALID_KEY_TOKEN";
41    pub const PARSE_MISSING_COLON: &str = "YAML_PARSE_MISSING_COLON";
42    pub const PARSE_UNTERMINATED_BLOCK_MAP: &str = "YAML_PARSE_UNTERMINATED_BLOCK_MAP";
43    pub const PARSE_DIRECTIVE_AFTER_CONTENT: &str = "YAML_PARSE_DIRECTIVE_AFTER_CONTENT";
44    pub const PARSE_DIRECTIVE_WITHOUT_DOCUMENT_START: &str =
45        "YAML_PARSE_DIRECTIVE_WITHOUT_DOCUMENT_START";
46    pub const PARSE_DUPLICATE_YAML_DIRECTIVE: &str = "YAML_PARSE_DUPLICATE_YAML_DIRECTIVE";
47    pub const PARSE_MALFORMED_YAML_DIRECTIVE: &str = "YAML_PARSE_MALFORMED_YAML_DIRECTIVE";
48    pub const PARSE_INVALID_PLAIN_SCALAR_IN_FLOW: &str = "YAML_PARSE_INVALID_PLAIN_SCALAR_IN_FLOW";
49    pub const PARSE_ANCHOR_DECORATES_ALIAS: &str = "YAML_PARSE_ANCHOR_DECORATES_ALIAS";
50    pub const PARSE_INVALID_TAG_CHARACTER: &str = "YAML_PARSE_INVALID_TAG_CHARACTER";
51    pub const PARSE_UNDEFINED_TAG_HANDLE: &str = "YAML_PARSE_UNDEFINED_TAG_HANDLE";
52    pub const PARSE_MULTIPLE_ANCHORS_ON_NODE: &str = "YAML_PARSE_MULTIPLE_ANCHORS_ON_NODE";
53    pub const PARSE_ANCHOR_BEFORE_BLOCK_INDICATOR: &str =
54        "YAML_PARSE_ANCHOR_BEFORE_BLOCK_INDICATOR";
55    pub const PARSE_ANCHOR_WITHOUT_TARGET: &str = "YAML_PARSE_ANCHOR_WITHOUT_TARGET";
56    pub const PARSE_NODE_PROPERTY_UNDERINDENTED: &str = "YAML_PARSE_NODE_PROPERTY_UNDERINDENTED";
57
58    // Consumer-only diagnostics: valid YAML 1.2 that a real consumer
59    // (pandoc/libyaml or quarto/js-yaml) rejects. Emitted only under a
60    // production `YamlValidationContext`, never on the 1.2 substrate path.
61    // See crates/panache-parser/tests/yaml/consumer-matrix.md.
62    pub const CONSUMER_IMPLICIT_EMPTY_KEY: &str = "YAML_CONSUMER_IMPLICIT_EMPTY_KEY";
63    pub const CONSUMER_DUPLICATE_KEY: &str = "YAML_CONSUMER_DUPLICATE_KEY";
64}