skullbrain_parser/ast/
span.rs1use super::*;
2use cstree::text::TextRange;
3
4pub trait Span {
6 fn span(&self) -> TextRange;
9}
10
11impl Span for Ident {
12 fn span(&self) -> TextRange {
13 self.span
14 }
15}
16impl Span for Literal {
17 fn span(&self) -> TextRange {
18 self.span
19 }
20}
21impl Span for BinaryExpr {
22 fn span(&self) -> TextRange {
23 self.left().span().cover(self.right().span())
24 }
25}
26impl Span for UnaryExpr {
27 fn span(&self) -> TextRange {
28 self.expr.span()
29 }
30}
31impl Span for ChainExpr {
32 fn span(&self) -> TextRange {
33 self.object().span().cover(self.method().span())
34 }
35}
36impl Span for ParenExpr {
37 fn span(&self) -> TextRange {
38 self.span
39 }
40}
41impl Span for BlockExpr {
42 fn span(&self) -> TextRange {
43 self.span
44 }
45}
46impl Span for Break {
47 fn span(&self) -> TextRange {
48 self.span
49 }
50}
51impl Span for Continue {
52 fn span(&self) -> TextRange {
53 self.span
54 }
55}
56impl Span for Return {
57 fn span(&self) -> TextRange {
58 self.span
59 }
60}
61impl Span for Throw {
62 fn span(&self) -> TextRange {
63 self.span
64 }
65}
66
67impl Span for While {
68 fn span(&self) -> TextRange {
69 self.span
70 }
71}
72impl Span for ForLoop {
73 fn span(&self) -> TextRange {
74 self.span
75 }
76}
77impl Span for TryCatch {
78 fn span(&self) -> TextRange {
79 self.span
80 }
81}
82impl Span for CatchArm {
83 fn span(&self) -> TextRange {
84 self.span
85 }
86}
87
88impl Span for VariableStmt {
89 fn span(&self) -> TextRange {
90 self.span
91 }
92}
93impl Span for TypeAlias {
94 fn span(&self) -> TextRange {
95 self.span
96 }
97}
98impl Span for Type {
99 fn span(&self) -> TextRange {
100 match self {
101 Type::Ident(ident) => ident.span,
102 Type::Function(function_signature) => function_signature.span(),
103 }
104 }
105}
106
107impl Span for FunctionSignature {
108 fn span(&self) -> TextRange {
109 self.span
110 }
111}
112
113impl Span for IfElse {
114 fn span(&self) -> TextRange {
115 self.span
116 }
117}
118
119impl Span for ElseBranch {
120 fn span(&self) -> TextRange {
121 self.span
122 }
123}
124impl Span for Match {
125 fn span(&self) -> TextRange {
126 self.span
127 }
128}
129
130impl Span for ImportStmt {
131 fn span(&self) -> TextRange {
132 self.span
133 }
134}
135impl Span for Function {
136 fn span(&self) -> TextRange {
137 self.span
138 }
139}
140impl Span for FunctionItem {
141 fn span(&self) -> TextRange {
142 self.span
143 }
144}
145
146impl Span for Enum {
147 fn span(&self) -> TextRange {
148 self.span
149 }
150}
151impl Span for Class {
152 fn span(&self) -> TextRange {
153 self.span
154 }
155}
156impl Span for Trait {
157 fn span(&self) -> TextRange {
158 self.span
159 }
160}
161impl Span for TraitImpl {
162 fn span(&self) -> TextRange {
163 self.span
164 }
165}
166
167impl Span for Expr {
168 fn span(&self) -> TextRange {
169 match self {
170 Expr::Literal(literal) => literal.span(),
171 Expr::Ident(ident) => ident.span(),
172 Expr::Binary(binary_expr) => binary_expr.span(),
173 Expr::Unary(unary_expr) => unary_expr.span(),
174 Expr::Chain(chain_expr) => chain_expr.span(),
175 Expr::Paren(paren_expr) => paren_expr.span(),
176 Expr::Block(block_expr) => block_expr.span(),
177 Expr::Break(v) => v.span(),
178 Expr::Continue(v) => v.span(),
179 Expr::Return(v) => v.span(),
180 Expr::Throw(throw) => throw.span(),
181 Expr::While(v) => v.span(),
182 Expr::For(for_loop) => for_loop.span(),
183 Expr::If(if_else) => if_else.span(),
184 Expr::Match(v) => v.span(),
185 Expr::TryCatch(try_catch) => try_catch.span(),
186 Expr::Variable(variable_stmt) => variable_stmt.span(),
187 Expr::Function(function) => function.span(),
188 Expr::Class(class) => class.span(),
189 Expr::Trait(v) => v.span(),
190 Expr::TraitImpl(trait_impl) => trait_impl.span(),
191 Expr::Enum(v) => v.span(),
192 Expr::TypeAlias(type_alias) => type_alias.span(),
193 Expr::Import(import_stmt) => import_stmt.span(),
194 }
195 }
196}