emmylua_parser/syntax/node/
mod.rs

1mod doc;
2mod lua;
3mod test;
4mod token;
5
6#[allow(unused)]
7pub use doc::*;
8#[allow(unused)]
9pub use lua::*;
10#[allow(unused)]
11pub use token::*;
12
13use crate::kind::LuaSyntaxKind;
14
15use super::{traits::LuaAstNode, LuaSyntaxNode};
16
17#[allow(unused)]
18#[derive(Debug, Clone, PartialEq, Eq, Hash)]
19pub enum LuaAst {
20    LuaChunk(LuaChunk),
21    LuaBlock(LuaBlock),
22    // stats
23    LuaAssignStat(LuaAssignStat),
24    LuaLocalStat(LuaLocalStat),
25    LuaCallExprStat(LuaCallExprStat),
26    LuaLabelStat(LuaLabelStat),
27    LuaBreakStat(LuaBreakStat),
28    LuaGotoStat(LuaGotoStat),
29    LuaDoStat(LuaDoStat),
30    LuaWhileStat(LuaWhileStat),
31    LuaRepeatStat(LuaRepeatStat),
32    LuaIfStat(LuaIfStat),
33    LuaForStat(LuaForStat),
34    LuaForRangeStat(LuaForRangeStat),
35    LuaFuncStat(LuaFuncStat),
36    LuaLocalFuncStat(LuaLocalFuncStat),
37    LuaReturnStat(LuaReturnStat),
38
39    // exprs
40    LuaNameExpr(LuaNameExpr),
41    LuaIndexExpr(LuaIndexExpr),
42    LuaTableExpr(LuaTableExpr),
43    LuaBinaryExpr(LuaBinaryExpr),
44    LuaUnaryExpr(LuaUnaryExpr),
45    LuaParenExpr(LuaParenExpr),
46    LuaCallExpr(LuaCallExpr),
47    LuaLiteralExpr(LuaLiteralExpr),
48    LuaClosureExpr(LuaClosureExpr),
49
50    // other lua struct
51    LuaTableField(LuaTableField),
52    LuaParamList(LuaParamList),
53    LuaParamName(LuaParamName),
54    LuaCallArgList(LuaCallArgList),
55    LuaLocalName(LuaLocalName),
56    LuaLocalAttribute(LuaLocalAttribute),
57    LuaElseIfClauseStat(LuaElseIfClauseStat),
58    LuaElseClauseStat(LuaElseClauseStat),
59
60    // comment
61    LuaComment(LuaComment),
62    // doc tag
63    LuaDocTagClass(LuaDocTagClass),
64    LuaDocTagEnum(LuaDocTagEnum),
65    LuaDocTagAlias(LuaDocTagAlias),
66    LuaDocTagType(LuaDocTagType),
67    LuaDocTagParam(LuaDocTagParam),
68    LuaDocTagReturn(LuaDocTagReturn),
69    LuaDocTagOverload(LuaDocTagOverload),
70    LuaDocTagField(LuaDocTagField),
71    LuaDocTagModule(LuaDocTagModule),
72    LuaDocTagSee(LuaDocTagSee),
73    LuaDocTagDiagnostic(LuaDocTagDiagnostic),
74    LuaDocTagDeprecated(LuaDocTagDeprecated),
75    LuaDocTagVersion(LuaDocTagVersion),
76    LuaDocTagCast(LuaDocTagCast),
77    LuaDocTagSource(LuaDocTagSource),
78    LuaDocTagOther(LuaDocTagOther),
79    LuaDocTagNamespace(LuaDocTagNamespace),
80    LuaDocTagUsing(LuaDocTagUsing),
81    LuaDocTagMeta(LuaDocTagMeta),
82    LuaDocTagNodiscard(LuaDocTagNodiscard),
83    LuaDocTagReadonly(LuaDocTagReadonly),
84    LuaDocTagOperator(LuaDocTagOperator),
85    LuaDocTagGeneric(LuaDocTagGeneric),
86    LuaDocTagAsync(LuaDocTagAsync),
87    LuaDocTagAs(LuaDocTagAs),
88
89    // doc type
90    LuaDocNameType(LuaDocNameType),
91    LuaDocArrayType(LuaDocArrayType),
92    LuaDocFuncType(LuaDocFuncType),
93    LuaDocObjectType(LuaDocObjectType),
94    LuaDocBinaryType(LuaDocBinaryType),
95    LuaDocUnaryType(LuaDocUnaryType),
96    LuaDocConditionalType(LuaDocConditionalType),
97    LuaDocTupleType(LuaDocTupleType),
98    LuaDocLiteralType(LuaDocLiteralType),
99    LuaDocVariadicType(LuaDocVariadicType),
100    LuaDocNullableType(LuaDocNullableType),
101    LuaDocGenericType(LuaDocGenericType),
102    LuaDocStrTplType(LuaDocStrTplType),
103    LuaDocMultiLineUnionType(LuaDocMultiLineUnionType),
104    // other structure do not need enum here
105}
106
107impl LuaAstNode for LuaAst {
108    fn syntax(&self) -> &LuaSyntaxNode {
109        match self {
110            LuaAst::LuaChunk(node) => node.syntax(),
111            LuaAst::LuaBlock(node) => node.syntax(),
112            LuaAst::LuaAssignStat(node) => node.syntax(),
113            LuaAst::LuaLocalStat(node) => node.syntax(),
114            LuaAst::LuaCallExprStat(node) => node.syntax(),
115            LuaAst::LuaLabelStat(node) => node.syntax(),
116            LuaAst::LuaBreakStat(node) => node.syntax(),
117            LuaAst::LuaGotoStat(node) => node.syntax(),
118            LuaAst::LuaDoStat(node) => node.syntax(),
119            LuaAst::LuaWhileStat(node) => node.syntax(),
120            LuaAst::LuaRepeatStat(node) => node.syntax(),
121            LuaAst::LuaIfStat(node) => node.syntax(),
122            LuaAst::LuaForStat(node) => node.syntax(),
123            LuaAst::LuaForRangeStat(node) => node.syntax(),
124            LuaAst::LuaFuncStat(node) => node.syntax(),
125            LuaAst::LuaLocalFuncStat(node) => node.syntax(),
126            LuaAst::LuaReturnStat(node) => node.syntax(),
127            LuaAst::LuaNameExpr(node) => node.syntax(),
128            LuaAst::LuaIndexExpr(node) => node.syntax(),
129            LuaAst::LuaTableExpr(node) => node.syntax(),
130            LuaAst::LuaBinaryExpr(node) => node.syntax(),
131            LuaAst::LuaUnaryExpr(node) => node.syntax(),
132            LuaAst::LuaParenExpr(node) => node.syntax(),
133            LuaAst::LuaCallExpr(node) => node.syntax(),
134            LuaAst::LuaLiteralExpr(node) => node.syntax(),
135            LuaAst::LuaClosureExpr(node) => node.syntax(),
136            LuaAst::LuaComment(node) => node.syntax(),
137            LuaAst::LuaTableField(node) => node.syntax(),
138            LuaAst::LuaParamList(node) => node.syntax(),
139            LuaAst::LuaParamName(node) => node.syntax(),
140            LuaAst::LuaCallArgList(node) => node.syntax(),
141            LuaAst::LuaLocalName(node) => node.syntax(),
142            LuaAst::LuaLocalAttribute(node) => node.syntax(),
143            LuaAst::LuaElseIfClauseStat(node) => node.syntax(),
144            LuaAst::LuaElseClauseStat(node) => node.syntax(),
145            LuaAst::LuaDocTagClass(node) => node.syntax(),
146            LuaAst::LuaDocTagEnum(node) => node.syntax(),
147            LuaAst::LuaDocTagAlias(node) => node.syntax(),
148            LuaAst::LuaDocTagType(node) => node.syntax(),
149            LuaAst::LuaDocTagParam(node) => node.syntax(),
150            LuaAst::LuaDocTagReturn(node) => node.syntax(),
151            LuaAst::LuaDocTagOverload(node) => node.syntax(),
152            LuaAst::LuaDocTagField(node) => node.syntax(),
153            LuaAst::LuaDocTagModule(node) => node.syntax(),
154            LuaAst::LuaDocTagSee(node) => node.syntax(),
155            LuaAst::LuaDocTagDiagnostic(node) => node.syntax(),
156            LuaAst::LuaDocTagDeprecated(node) => node.syntax(),
157            LuaAst::LuaDocTagVersion(node) => node.syntax(),
158            LuaAst::LuaDocTagCast(node) => node.syntax(),
159            LuaAst::LuaDocTagSource(node) => node.syntax(),
160            LuaAst::LuaDocTagOther(node) => node.syntax(),
161            LuaAst::LuaDocTagNamespace(node) => node.syntax(),
162            LuaAst::LuaDocTagUsing(node) => node.syntax(),
163            LuaAst::LuaDocTagMeta(node) => node.syntax(),
164            LuaAst::LuaDocTagNodiscard(node) => node.syntax(),
165            LuaAst::LuaDocTagReadonly(node) => node.syntax(),
166            LuaAst::LuaDocTagOperator(node) => node.syntax(),
167            LuaAst::LuaDocTagGeneric(node) => node.syntax(),
168            LuaAst::LuaDocTagAsync(node) => node.syntax(),
169            LuaAst::LuaDocTagAs(node) => node.syntax(),
170            LuaAst::LuaDocNameType(node) => node.syntax(),
171            LuaAst::LuaDocArrayType(node) => node.syntax(),
172            LuaAst::LuaDocFuncType(node) => node.syntax(),
173            LuaAst::LuaDocObjectType(node) => node.syntax(),
174            LuaAst::LuaDocBinaryType(node) => node.syntax(),
175            LuaAst::LuaDocUnaryType(node) => node.syntax(),
176            LuaAst::LuaDocConditionalType(node) => node.syntax(),
177            LuaAst::LuaDocTupleType(node) => node.syntax(),
178            LuaAst::LuaDocLiteralType(node) => node.syntax(),
179            LuaAst::LuaDocVariadicType(node) => node.syntax(),
180            LuaAst::LuaDocNullableType(node) => node.syntax(),
181            LuaAst::LuaDocGenericType(node) => node.syntax(),
182            LuaAst::LuaDocStrTplType(node) => node.syntax(),
183            LuaAst::LuaDocMultiLineUnionType(node) => node.syntax(),
184        }
185    }
186
187    fn can_cast(kind: LuaSyntaxKind) -> bool
188    where
189        Self: Sized,
190    {
191        match kind {
192            LuaSyntaxKind::Chunk => true,
193            LuaSyntaxKind::Block => true,
194            LuaSyntaxKind::AssignStat => true,
195            LuaSyntaxKind::LocalStat => true,
196            LuaSyntaxKind::CallExprStat => true,
197            LuaSyntaxKind::LabelStat => true,
198            LuaSyntaxKind::BreakStat => true,
199            LuaSyntaxKind::GotoStat => true,
200            LuaSyntaxKind::DoStat => true,
201            LuaSyntaxKind::WhileStat => true,
202            LuaSyntaxKind::RepeatStat => true,
203            LuaSyntaxKind::IfStat => true,
204            LuaSyntaxKind::ForStat => true,
205            LuaSyntaxKind::ForRangeStat => true,
206            LuaSyntaxKind::FuncStat => true,
207            LuaSyntaxKind::LocalFuncStat => true,
208            LuaSyntaxKind::ReturnStat => true,
209            LuaSyntaxKind::NameExpr => true,
210            LuaSyntaxKind::IndexExpr => true,
211            LuaSyntaxKind::TableEmptyExpr
212            | LuaSyntaxKind::TableArrayExpr
213            | LuaSyntaxKind::TableObjectExpr => true,
214            LuaSyntaxKind::BinaryExpr => true,
215            LuaSyntaxKind::UnaryExpr => true,
216            LuaSyntaxKind::ParenExpr => true,
217            LuaSyntaxKind::CallExpr
218            | LuaSyntaxKind::AssertCallExpr
219            | LuaSyntaxKind::ErrorCallExpr
220            | LuaSyntaxKind::RequireCallExpr
221            | LuaSyntaxKind::TypeCallExpr => true,
222            LuaSyntaxKind::LiteralExpr => true,
223            LuaSyntaxKind::ClosureExpr => true,
224            LuaSyntaxKind::ParamList => true,
225            LuaSyntaxKind::CallArgList => true,
226            LuaSyntaxKind::LocalName => true,
227            LuaSyntaxKind::TableFieldAssign | LuaSyntaxKind::TableFieldValue => true,
228            LuaSyntaxKind::ParamName => true,
229            LuaSyntaxKind::Attribute => true,
230            LuaSyntaxKind::ElseIfClauseStat => true,
231            LuaSyntaxKind::ElseClauseStat => true,
232            LuaSyntaxKind::Comment => true,
233            LuaSyntaxKind::DocTagClass => true,
234            LuaSyntaxKind::DocTagEnum => true,
235            LuaSyntaxKind::DocTagAlias => true,
236            LuaSyntaxKind::DocTagType => true,
237            LuaSyntaxKind::DocTagParam => true,
238            LuaSyntaxKind::DocTagReturn => true,
239            LuaSyntaxKind::DocTagOverload => true,
240            LuaSyntaxKind::DocTagField => true,
241            LuaSyntaxKind::DocTagModule => true,
242            LuaSyntaxKind::DocTagSee => true,
243            LuaSyntaxKind::DocTagDiagnostic => true,
244            LuaSyntaxKind::DocTagDeprecated => true,
245            LuaSyntaxKind::DocTagVersion => true,
246            LuaSyntaxKind::DocTagCast => true,
247            LuaSyntaxKind::DocTagSource => true,
248            LuaSyntaxKind::DocTagOther => true,
249            LuaSyntaxKind::DocTagNamespace => true,
250            LuaSyntaxKind::DocTagUsing => true,
251            LuaSyntaxKind::DocTagMeta => true,
252            LuaSyntaxKind::DocTagNodiscard => true,
253            LuaSyntaxKind::DocTagReadonly => true,
254            LuaSyntaxKind::DocTagOperator => true,
255            LuaSyntaxKind::DocTagGeneric => true,
256            LuaSyntaxKind::DocTagAsync => true,
257            LuaSyntaxKind::DocTagAs => true,
258            LuaSyntaxKind::TypeName => true,
259            LuaSyntaxKind::TypeArray => true,
260            LuaSyntaxKind::TypeFun => true,
261            LuaSyntaxKind::TypeObject => true,
262            LuaSyntaxKind::TypeBinary => true,
263            LuaSyntaxKind::TypeUnary => true,
264            LuaSyntaxKind::TypeConditional => true,
265            LuaSyntaxKind::TypeTuple => true,
266            LuaSyntaxKind::TypeLiteral => true,
267            LuaSyntaxKind::TypeVariadic => true,
268            LuaSyntaxKind::TypeNullable => true,
269            LuaSyntaxKind::TypeGeneric => true,
270            LuaSyntaxKind::TypeStringTemplate => true,
271            LuaSyntaxKind::TypeMultiLineUnion => true,
272            _ => false,
273        }
274    }
275
276    fn cast(syntax: LuaSyntaxNode) -> Option<Self>
277    where
278        Self: Sized,
279    {
280        match syntax.kind().into() {
281            LuaSyntaxKind::Chunk => LuaChunk::cast(syntax).map(LuaAst::LuaChunk),
282            LuaSyntaxKind::Block => LuaBlock::cast(syntax).map(LuaAst::LuaBlock),
283            LuaSyntaxKind::AssignStat => LuaAssignStat::cast(syntax).map(LuaAst::LuaAssignStat),
284            LuaSyntaxKind::LocalStat => LuaLocalStat::cast(syntax).map(LuaAst::LuaLocalStat),
285            LuaSyntaxKind::CallExprStat => {
286                LuaCallExprStat::cast(syntax).map(LuaAst::LuaCallExprStat)
287            }
288            LuaSyntaxKind::LabelStat => LuaLabelStat::cast(syntax).map(LuaAst::LuaLabelStat),
289            LuaSyntaxKind::BreakStat => LuaBreakStat::cast(syntax).map(LuaAst::LuaBreakStat),
290            LuaSyntaxKind::GotoStat => LuaGotoStat::cast(syntax).map(LuaAst::LuaGotoStat),
291            LuaSyntaxKind::DoStat => LuaDoStat::cast(syntax).map(LuaAst::LuaDoStat),
292            LuaSyntaxKind::WhileStat => LuaWhileStat::cast(syntax).map(LuaAst::LuaWhileStat),
293            LuaSyntaxKind::RepeatStat => LuaRepeatStat::cast(syntax).map(LuaAst::LuaRepeatStat),
294            LuaSyntaxKind::IfStat => LuaIfStat::cast(syntax).map(LuaAst::LuaIfStat),
295            LuaSyntaxKind::ForStat => LuaForStat::cast(syntax).map(LuaAst::LuaForStat),
296            LuaSyntaxKind::ForRangeStat => {
297                LuaForRangeStat::cast(syntax).map(LuaAst::LuaForRangeStat)
298            }
299            LuaSyntaxKind::FuncStat => LuaFuncStat::cast(syntax).map(LuaAst::LuaFuncStat),
300            LuaSyntaxKind::LocalFuncStat => {
301                LuaLocalFuncStat::cast(syntax).map(LuaAst::LuaLocalFuncStat)
302            }
303            LuaSyntaxKind::ReturnStat => LuaReturnStat::cast(syntax).map(LuaAst::LuaReturnStat),
304            LuaSyntaxKind::NameExpr => LuaNameExpr::cast(syntax).map(LuaAst::LuaNameExpr),
305            LuaSyntaxKind::IndexExpr => LuaIndexExpr::cast(syntax).map(LuaAst::LuaIndexExpr),
306            LuaSyntaxKind::TableEmptyExpr
307            | LuaSyntaxKind::TableArrayExpr
308            | LuaSyntaxKind::TableObjectExpr => {
309                LuaTableExpr::cast(syntax).map(LuaAst::LuaTableExpr)
310            }
311            LuaSyntaxKind::BinaryExpr => LuaBinaryExpr::cast(syntax).map(LuaAst::LuaBinaryExpr),
312            LuaSyntaxKind::UnaryExpr => LuaUnaryExpr::cast(syntax).map(LuaAst::LuaUnaryExpr),
313            LuaSyntaxKind::ParenExpr => LuaParenExpr::cast(syntax).map(LuaAst::LuaParenExpr),
314            LuaSyntaxKind::CallExpr
315            | LuaSyntaxKind::AssertCallExpr
316            | LuaSyntaxKind::ErrorCallExpr
317            | LuaSyntaxKind::RequireCallExpr
318            | LuaSyntaxKind::TypeCallExpr => LuaCallExpr::cast(syntax).map(LuaAst::LuaCallExpr),
319            LuaSyntaxKind::LiteralExpr => LuaLiteralExpr::cast(syntax).map(LuaAst::LuaLiteralExpr),
320            LuaSyntaxKind::ClosureExpr => LuaClosureExpr::cast(syntax).map(LuaAst::LuaClosureExpr),
321            LuaSyntaxKind::Comment => LuaComment::cast(syntax).map(LuaAst::LuaComment),
322            LuaSyntaxKind::TableFieldAssign | LuaSyntaxKind::TableFieldValue => {
323                LuaTableField::cast(syntax).map(LuaAst::LuaTableField)
324            }
325            LuaSyntaxKind::ParamList => LuaParamList::cast(syntax).map(LuaAst::LuaParamList),
326            LuaSyntaxKind::ParamName => LuaParamName::cast(syntax).map(LuaAst::LuaParamName),
327            LuaSyntaxKind::CallArgList => LuaCallArgList::cast(syntax).map(LuaAst::LuaCallArgList),
328            LuaSyntaxKind::LocalName => LuaLocalName::cast(syntax).map(LuaAst::LuaLocalName),
329            LuaSyntaxKind::Attribute => {
330                LuaLocalAttribute::cast(syntax).map(LuaAst::LuaLocalAttribute)
331            }
332            LuaSyntaxKind::ElseIfClauseStat => {
333                LuaElseIfClauseStat::cast(syntax).map(LuaAst::LuaElseIfClauseStat)
334            }
335            LuaSyntaxKind::ElseClauseStat => {
336                LuaElseClauseStat::cast(syntax).map(LuaAst::LuaElseClauseStat)
337            }
338            LuaSyntaxKind::DocTagClass => LuaDocTagClass::cast(syntax).map(LuaAst::LuaDocTagClass),
339            LuaSyntaxKind::DocTagEnum => LuaDocTagEnum::cast(syntax).map(LuaAst::LuaDocTagEnum),
340            LuaSyntaxKind::DocTagAlias => LuaDocTagAlias::cast(syntax).map(LuaAst::LuaDocTagAlias),
341            LuaSyntaxKind::DocTagType => LuaDocTagType::cast(syntax).map(LuaAst::LuaDocTagType),
342            LuaSyntaxKind::DocTagParam => LuaDocTagParam::cast(syntax).map(LuaAst::LuaDocTagParam),
343            LuaSyntaxKind::DocTagReturn => {
344                LuaDocTagReturn::cast(syntax).map(LuaAst::LuaDocTagReturn)
345            }
346            LuaSyntaxKind::DocTagOverload => {
347                LuaDocTagOverload::cast(syntax).map(LuaAst::LuaDocTagOverload)
348            }
349            LuaSyntaxKind::DocTagField => LuaDocTagField::cast(syntax).map(LuaAst::LuaDocTagField),
350            LuaSyntaxKind::DocTagModule => {
351                LuaDocTagModule::cast(syntax).map(LuaAst::LuaDocTagModule)
352            }
353            LuaSyntaxKind::DocTagSee => LuaDocTagSee::cast(syntax).map(LuaAst::LuaDocTagSee),
354            LuaSyntaxKind::DocTagDiagnostic => {
355                LuaDocTagDiagnostic::cast(syntax).map(LuaAst::LuaDocTagDiagnostic)
356            }
357            LuaSyntaxKind::DocTagDeprecated => {
358                LuaDocTagDeprecated::cast(syntax).map(LuaAst::LuaDocTagDeprecated)
359            }
360            LuaSyntaxKind::DocTagVersion => {
361                LuaDocTagVersion::cast(syntax).map(LuaAst::LuaDocTagVersion)
362            }
363            LuaSyntaxKind::DocTagCast => LuaDocTagCast::cast(syntax).map(LuaAst::LuaDocTagCast),
364            LuaSyntaxKind::DocTagSource => {
365                LuaDocTagSource::cast(syntax).map(LuaAst::LuaDocTagSource)
366            }
367            LuaSyntaxKind::DocTagOther => LuaDocTagOther::cast(syntax).map(LuaAst::LuaDocTagOther),
368            LuaSyntaxKind::DocTagNamespace => {
369                LuaDocTagNamespace::cast(syntax).map(LuaAst::LuaDocTagNamespace)
370            }
371            LuaSyntaxKind::DocTagUsing => LuaDocTagUsing::cast(syntax).map(LuaAst::LuaDocTagUsing),
372            LuaSyntaxKind::DocTagMeta => LuaDocTagMeta::cast(syntax).map(LuaAst::LuaDocTagMeta),
373            LuaSyntaxKind::DocTagNodiscard => {
374                LuaDocTagNodiscard::cast(syntax).map(LuaAst::LuaDocTagNodiscard)
375            }
376            LuaSyntaxKind::DocTagReadonly => {
377                LuaDocTagReadonly::cast(syntax).map(LuaAst::LuaDocTagReadonly)
378            }
379            LuaSyntaxKind::DocTagOperator => {
380                LuaDocTagOperator::cast(syntax).map(LuaAst::LuaDocTagOperator)
381            }
382            LuaSyntaxKind::DocTagGeneric => {
383                LuaDocTagGeneric::cast(syntax).map(LuaAst::LuaDocTagGeneric)
384            }
385            LuaSyntaxKind::DocTagAsync => LuaDocTagAsync::cast(syntax).map(LuaAst::LuaDocTagAsync),
386            LuaSyntaxKind::DocTagAs => LuaDocTagAs::cast(syntax).map(LuaAst::LuaDocTagAs),
387            LuaSyntaxKind::TypeName => LuaDocNameType::cast(syntax).map(LuaAst::LuaDocNameType),
388            LuaSyntaxKind::TypeArray => LuaDocArrayType::cast(syntax).map(LuaAst::LuaDocArrayType),
389            LuaSyntaxKind::TypeFun => LuaDocFuncType::cast(syntax).map(LuaAst::LuaDocFuncType),
390            LuaSyntaxKind::TypeObject => {
391                LuaDocObjectType::cast(syntax).map(LuaAst::LuaDocObjectType)
392            }
393            LuaSyntaxKind::TypeBinary => {
394                LuaDocBinaryType::cast(syntax).map(LuaAst::LuaDocBinaryType)
395            }
396            LuaSyntaxKind::TypeUnary => LuaDocUnaryType::cast(syntax).map(LuaAst::LuaDocUnaryType),
397            LuaSyntaxKind::TypeConditional => {
398                LuaDocConditionalType::cast(syntax).map(LuaAst::LuaDocConditionalType)
399            }
400            LuaSyntaxKind::TypeTuple => LuaDocTupleType::cast(syntax).map(LuaAst::LuaDocTupleType),
401            LuaSyntaxKind::TypeLiteral => {
402                LuaDocLiteralType::cast(syntax).map(LuaAst::LuaDocLiteralType)
403            }
404            LuaSyntaxKind::TypeVariadic => {
405                LuaDocVariadicType::cast(syntax).map(LuaAst::LuaDocVariadicType)
406            }
407            LuaSyntaxKind::TypeNullable => {
408                LuaDocNullableType::cast(syntax).map(LuaAst::LuaDocNullableType)
409            }
410            LuaSyntaxKind::TypeGeneric => {
411                LuaDocGenericType::cast(syntax).map(LuaAst::LuaDocGenericType)
412            }
413            LuaSyntaxKind::TypeStringTemplate => {
414                LuaDocStrTplType::cast(syntax).map(LuaAst::LuaDocStrTplType)
415            }
416            LuaSyntaxKind::TypeMultiLineUnion => {
417                LuaDocMultiLineUnionType::cast(syntax).map(LuaAst::LuaDocMultiLineUnionType)
418            }
419            _ => None,
420        }
421    }
422}