Skip to main content

luaur_analysis/methods/
ast_json_encoder_ast_visitor.rs

1//! Source: `Analysis/src/AstJsonEncoder.cpp:1174-1518` (hand-ported)
2use crate::records::ast_json_encoder::AstJsonEncoder;
3use luaur_ast::records::ast_visitor::AstVisitor;
4
5// The C++ encoder's 54 `bool visit(class AstX*) override`s. Each trait hook
6// receives the type-erased node pointer the dispatcher hands out and forwards
7// to the typed inherent method (the per-override graph item). NB: C++ does NOT
8// override visit(AstExprConstantInteger*) -- integer constants fall through to
9// the AstNode default (return true), so neither do we.
10impl AstVisitor for AstJsonEncoder {
11    fn visit_type_group(&mut self, node: *mut core::ffi::c_void) -> bool {
12        self.visit_ast_type_group(node as *mut luaur_ast::records::ast_type_group::AstTypeGroup)
13    }
14
15    fn visit_type_singleton_bool(&mut self, node: *mut core::ffi::c_void) -> bool {
16        self.visit_ast_type_singleton_bool(
17            node as *mut luaur_ast::records::ast_type_singleton_bool::AstTypeSingletonBool,
18        )
19    }
20
21    fn visit_type_singleton_string(&mut self, node: *mut core::ffi::c_void) -> bool {
22        self.visit_ast_type_singleton_string(
23            node as *mut luaur_ast::records::ast_type_singleton_string::AstTypeSingletonString,
24        )
25    }
26
27    fn visit_expr_group(&mut self, node: *mut core::ffi::c_void) -> bool {
28        self.visit_ast_expr_group(node as *mut luaur_ast::records::ast_expr_group::AstExprGroup)
29    }
30
31    fn visit_expr_constant_nil(&mut self, node: *mut core::ffi::c_void) -> bool {
32        self.visit_ast_expr_constant_nil(
33            node as *mut luaur_ast::records::ast_expr_constant_nil::AstExprConstantNil,
34        )
35    }
36
37    fn visit_expr_constant_bool(&mut self, node: *mut core::ffi::c_void) -> bool {
38        self.visit_ast_expr_constant_bool(
39            node as *mut luaur_ast::records::ast_expr_constant_bool::AstExprConstantBool,
40        )
41    }
42
43    fn visit_expr_constant_number(&mut self, node: *mut core::ffi::c_void) -> bool {
44        self.visit_ast_expr_constant_number(
45            node as *mut luaur_ast::records::ast_expr_constant_number::AstExprConstantNumber,
46        )
47    }
48
49    fn visit_expr_constant_string(&mut self, node: *mut core::ffi::c_void) -> bool {
50        self.visit_ast_expr_constant_string(
51            node as *mut luaur_ast::records::ast_expr_constant_string::AstExprConstantString,
52        )
53    }
54
55    fn visit_expr_if_else(&mut self, node: *mut core::ffi::c_void) -> bool {
56        self.visit_ast_expr_if_else(
57            node as *mut luaur_ast::records::ast_expr_if_else::AstExprIfElse,
58        )
59    }
60
61    fn visit_expr_interp_string(&mut self, node: *mut core::ffi::c_void) -> bool {
62        self.visit_ast_expr_interp_string(
63            node as *mut luaur_ast::records::ast_expr_interp_string::AstExprInterpString,
64        )
65    }
66
67    fn visit_expr_local(&mut self, node: *mut core::ffi::c_void) -> bool {
68        self.visit_ast_expr_local(node as *mut luaur_ast::records::ast_expr_local::AstExprLocal)
69    }
70
71    fn visit_expr_global(&mut self, node: *mut core::ffi::c_void) -> bool {
72        self.visit_ast_expr_global(node as *mut luaur_ast::records::ast_expr_global::AstExprGlobal)
73    }
74
75    fn visit_expr_varargs(&mut self, node: *mut core::ffi::c_void) -> bool {
76        self.visit_ast_expr_varargs(
77            node as *mut luaur_ast::records::ast_expr_varargs::AstExprVarargs,
78        )
79    }
80
81    fn visit_expr_call(&mut self, node: *mut core::ffi::c_void) -> bool {
82        self.visit_ast_expr_call(node as *mut luaur_ast::records::ast_expr_call::AstExprCall)
83    }
84
85    fn visit_expr_index_name(&mut self, node: *mut core::ffi::c_void) -> bool {
86        self.visit_ast_expr_index_name(
87            node as *mut luaur_ast::records::ast_expr_index_name::AstExprIndexName,
88        )
89    }
90
91    fn visit_expr_index_expr(&mut self, node: *mut core::ffi::c_void) -> bool {
92        self.visit_ast_expr_index_expr(
93            node as *mut luaur_ast::records::ast_expr_index_expr::AstExprIndexExpr,
94        )
95    }
96
97    fn visit_expr_function(&mut self, node: *mut core::ffi::c_void) -> bool {
98        self.visit_ast_expr_function(
99            node as *mut luaur_ast::records::ast_expr_function::AstExprFunction,
100        )
101    }
102
103    fn visit_expr_table(&mut self, node: *mut core::ffi::c_void) -> bool {
104        self.visit_ast_expr_table(node as *mut luaur_ast::records::ast_expr_table::AstExprTable)
105    }
106
107    fn visit_expr_unary(&mut self, node: *mut core::ffi::c_void) -> bool {
108        self.visit_ast_expr_unary(node as *mut luaur_ast::records::ast_expr_unary::AstExprUnary)
109    }
110
111    fn visit_expr_binary(&mut self, node: *mut core::ffi::c_void) -> bool {
112        self.visit_ast_expr_binary(node as *mut luaur_ast::records::ast_expr_binary::AstExprBinary)
113    }
114
115    fn visit_expr_type_assertion(&mut self, node: *mut core::ffi::c_void) -> bool {
116        self.visit_ast_expr_type_assertion(
117            node as *mut luaur_ast::records::ast_expr_type_assertion::AstExprTypeAssertion,
118        )
119    }
120
121    fn visit_expr_error(&mut self, node: *mut core::ffi::c_void) -> bool {
122        self.visit_ast_expr_error(node as *mut luaur_ast::records::ast_expr_error::AstExprError)
123    }
124
125    fn visit_stat_block(&mut self, node: *mut core::ffi::c_void) -> bool {
126        self.visit_ast_stat_block(node as *mut luaur_ast::records::ast_stat_block::AstStatBlock)
127    }
128
129    fn visit_stat_if(&mut self, node: *mut core::ffi::c_void) -> bool {
130        self.visit_ast_stat_if(node as *mut luaur_ast::records::ast_stat_if::AstStatIf)
131    }
132
133    fn visit_stat_while(&mut self, node: *mut core::ffi::c_void) -> bool {
134        self.visit_ast_stat_while(node as *mut luaur_ast::records::ast_stat_while::AstStatWhile)
135    }
136
137    fn visit_stat_repeat(&mut self, node: *mut core::ffi::c_void) -> bool {
138        self.visit_ast_stat_repeat(node as *mut luaur_ast::records::ast_stat_repeat::AstStatRepeat)
139    }
140
141    fn visit_stat_break(&mut self, node: *mut core::ffi::c_void) -> bool {
142        self.visit_ast_stat_break(node as *mut luaur_ast::records::ast_stat_break::AstStatBreak)
143    }
144
145    fn visit_stat_continue(&mut self, node: *mut core::ffi::c_void) -> bool {
146        self.visit_ast_stat_continue(
147            node as *mut luaur_ast::records::ast_stat_continue::AstStatContinue,
148        )
149    }
150
151    fn visit_stat_return(&mut self, node: *mut core::ffi::c_void) -> bool {
152        self.visit_ast_stat_return(node as *mut luaur_ast::records::ast_stat_return::AstStatReturn)
153    }
154
155    fn visit_stat_expr(&mut self, node: *mut core::ffi::c_void) -> bool {
156        self.visit_ast_stat_expr(node as *mut luaur_ast::records::ast_stat_expr::AstStatExpr)
157    }
158
159    fn visit_stat_local(&mut self, node: *mut core::ffi::c_void) -> bool {
160        self.visit_ast_stat_local(node as *mut luaur_ast::records::ast_stat_local::AstStatLocal)
161    }
162
163    fn visit_stat_for(&mut self, node: *mut core::ffi::c_void) -> bool {
164        self.visit_ast_stat_for(node as *mut luaur_ast::records::ast_stat_for::AstStatFor)
165    }
166
167    fn visit_stat_for_in(&mut self, node: *mut core::ffi::c_void) -> bool {
168        self.visit_ast_stat_for_in(node as *mut luaur_ast::records::ast_stat_for_in::AstStatForIn)
169    }
170
171    fn visit_stat_assign(&mut self, node: *mut core::ffi::c_void) -> bool {
172        self.visit_ast_stat_assign(node as *mut luaur_ast::records::ast_stat_assign::AstStatAssign)
173    }
174
175    fn visit_stat_compound_assign(&mut self, node: *mut core::ffi::c_void) -> bool {
176        self.visit_ast_stat_compound_assign(
177            node as *mut luaur_ast::records::ast_stat_compound_assign::AstStatCompoundAssign,
178        )
179    }
180
181    fn visit_stat_function(&mut self, node: *mut core::ffi::c_void) -> bool {
182        self.visit_ast_stat_function(
183            node as *mut luaur_ast::records::ast_stat_function::AstStatFunction,
184        )
185    }
186
187    fn visit_stat_local_function(&mut self, node: *mut core::ffi::c_void) -> bool {
188        self.visit_ast_stat_local_function(
189            node as *mut luaur_ast::records::ast_stat_local_function::AstStatLocalFunction,
190        )
191    }
192
193    fn visit_stat_type_alias(&mut self, node: *mut core::ffi::c_void) -> bool {
194        self.visit_ast_stat_type_alias(
195            node as *mut luaur_ast::records::ast_stat_type_alias::AstStatTypeAlias,
196        )
197    }
198
199    fn visit_stat_declare_function(&mut self, node: *mut core::ffi::c_void) -> bool {
200        self.visit_ast_stat_declare_function(
201            node as *mut luaur_ast::records::ast_stat_declare_function::AstStatDeclareFunction,
202        )
203    }
204
205    fn visit_stat_declare_global(&mut self, node: *mut core::ffi::c_void) -> bool {
206        self.visit_ast_stat_declare_global(
207            node as *mut luaur_ast::records::ast_stat_declare_global::AstStatDeclareGlobal,
208        )
209    }
210
211    fn visit_stat_declare_extern_type(&mut self, node: *mut core::ffi::c_void) -> bool {
212        self.visit_ast_stat_declare_extern_type(
213            node as *mut luaur_ast::records::ast_stat_declare_extern_type::AstStatDeclareExternType,
214        )
215    }
216
217    fn visit_stat_error(&mut self, node: *mut core::ffi::c_void) -> bool {
218        self.visit_ast_stat_error(node as *mut luaur_ast::records::ast_stat_error::AstStatError)
219    }
220
221    fn visit_type_reference(&mut self, node: *mut core::ffi::c_void) -> bool {
222        self.visit_ast_type_reference(
223            node as *mut luaur_ast::records::ast_type_reference::AstTypeReference,
224        )
225    }
226
227    fn visit_type_table(&mut self, node: *mut core::ffi::c_void) -> bool {
228        self.visit_ast_type_table(node as *mut luaur_ast::records::ast_type_table::AstTypeTable)
229    }
230
231    fn visit_type_function(&mut self, node: *mut core::ffi::c_void) -> bool {
232        self.visit_ast_type_function(
233            node as *mut luaur_ast::records::ast_type_function::AstTypeFunction,
234        )
235    }
236
237    fn visit_type_typeof(&mut self, node: *mut core::ffi::c_void) -> bool {
238        self.visit_ast_type_typeof(node as *mut luaur_ast::records::ast_type_typeof::AstTypeTypeof)
239    }
240
241    fn visit_type_optional(&mut self, node: *mut core::ffi::c_void) -> bool {
242        self.visit_ast_type_optional(
243            node as *mut luaur_ast::records::ast_type_optional::AstTypeOptional,
244        )
245    }
246
247    fn visit_type_union(&mut self, node: *mut core::ffi::c_void) -> bool {
248        self.visit_ast_type_union(node as *mut luaur_ast::records::ast_type_union::AstTypeUnion)
249    }
250
251    fn visit_type_intersection(&mut self, node: *mut core::ffi::c_void) -> bool {
252        self.visit_ast_type_intersection(
253            node as *mut luaur_ast::records::ast_type_intersection::AstTypeIntersection,
254        )
255    }
256
257    fn visit_type_error(&mut self, node: *mut core::ffi::c_void) -> bool {
258        self.visit_ast_type_error(node as *mut luaur_ast::records::ast_type_error::AstTypeError)
259    }
260
261    fn visit_type_pack(&mut self, node: *mut core::ffi::c_void) -> bool {
262        self.visit_ast_type_pack(node as *mut luaur_ast::records::ast_type_pack::AstTypePack)
263    }
264
265    fn visit_type_pack_explicit(&mut self, node: *mut core::ffi::c_void) -> bool {
266        self.visit_ast_type_pack_explicit(
267            node as *mut luaur_ast::records::ast_type_pack_explicit::AstTypePackExplicit,
268        )
269    }
270
271    fn visit_type_pack_variadic(&mut self, node: *mut core::ffi::c_void) -> bool {
272        self.visit_ast_type_pack_variadic(
273            node as *mut luaur_ast::records::ast_type_pack_variadic::AstTypePackVariadic,
274        )
275    }
276
277    fn visit_type_pack_generic(&mut self, node: *mut core::ffi::c_void) -> bool {
278        self.visit_ast_type_pack_generic(
279            node as *mut luaur_ast::records::ast_type_pack_generic::AstTypePackGeneric,
280        )
281    }
282}