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}