Skip to main content

wxml_parser_rs/parser/
ir.rs

1#[derive(Clone, Copy, Debug)]
2pub struct Span {
3  pub start_idx: usize,
4  pub end_idx: usize,
5  pub start_line: usize,
6  pub start_col: usize,
7  pub end_line: usize,
8  pub end_col: usize,
9}
10
11#[derive(Clone, Debug)]
12pub struct ParseErrorIr {
13  pub typ: &'static str,
14  pub raw_type: Option<&'static str>,
15  pub value: String,
16  pub span: Span,
17}
18
19#[derive(Clone, Copy, Debug)]
20#[allow(dead_code)]
21pub struct LocIr {
22  pub start_line: usize,
23  pub start_col: usize,
24  pub end_line: usize,
25  pub end_col: usize,
26}
27
28#[derive(Clone, Copy, Debug)]
29pub struct InterpolationIr<'a> {
30  pub typ: &'a str,
31  pub raw_value: &'a str,
32  pub value: &'a str,
33  pub span: Span,
34}
35
36#[derive(Clone, Debug)]
37pub struct AttributeIr<'a> {
38  pub key: &'a str,
39  pub quote: Option<&'a str>,
40  pub value: Option<String>,
41  pub raw_value: Option<String>,
42  pub children: Vec<NodeIr<'a>>,
43  pub interpolations: Vec<InterpolationIr<'a>>,
44  pub span: Span,
45}
46
47#[derive(Clone, Debug)]
48pub struct StartTagIr<'a> {
49  pub name: &'a str,
50  pub attributes: Vec<AttributeIr<'a>>,
51  pub self_closing: bool,
52  pub span: Span,
53}
54
55#[derive(Clone, Debug)]
56pub struct EndTagIr<'a> {
57  pub name: &'a str,
58  pub span: Span,
59}
60
61#[derive(Clone, Debug)]
62pub struct ScriptErrorIr {
63  pub value: String,
64  pub span: Span,
65  pub line: usize,
66  pub column: usize,
67}
68
69#[derive(Clone, Debug)]
70pub struct ScriptNodeIr<'a> {
71  pub name: &'static str,
72  pub value: Option<&'a str>,
73  pub start_tag: Option<StartTagIr<'a>>,
74  pub end_tag: Option<EndTagIr<'a>>,
75  pub body: Option<ScriptProgramIr>,
76  pub error: Option<ScriptErrorIr>,
77  pub span: Span,
78}
79
80#[derive(Clone, Debug)]
81pub enum NodeIr<'a> {
82  Text { value: &'a str, span: Span },
83  Comment { value: &'a str, span: Span },
84  Interpolation(InterpolationIr<'a>),
85  Element {
86    name: &'a str,
87    children: Vec<NodeIr<'a>>,
88    start_tag: Option<StartTagIr<'a>>,
89    end_tag: Option<EndTagIr<'a>>,
90    span: Span,
91  },
92  Script(ScriptNodeIr<'a>),
93}
94
95#[derive(Clone, Debug)]
96pub struct ParsedProgram<'a> {
97  pub body: Vec<NodeIr<'a>>,
98  pub comment_indices: Vec<usize>,
99  pub errors: Vec<ParseErrorIr>,
100  pub end_line: usize,
101  pub end_col: usize,
102  pub code_len: usize,
103}
104
105#[derive(Clone, Debug)]
106pub struct ScriptLocIr {
107  pub start_line: usize,
108  pub start_col: usize,
109  pub end_line: usize,
110  pub end_col: usize,
111}
112
113#[derive(Clone, Debug)]
114pub enum ScriptBodyIr {
115  MemberExpression { loc: ScriptLocIr },
116}
117
118#[derive(Clone, Debug)]
119pub struct ScriptCommentIr {
120  pub typ: String,
121  pub loc: ScriptLocIr,
122}
123
124#[derive(Clone, Debug)]
125pub struct ScriptProgramIr {
126  pub body: Vec<ScriptBodyIr>,
127  pub comments: Vec<ScriptCommentIr>,
128  pub loc: ScriptLocIr,
129}