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