Skip to main content

ruff_python_ast/
generated.rs

1// This is a generated file. Don't modify it by hand!
2// Run `crates/ruff_python_ast/generate.py` to re-generate the file.
3
4use crate::name::Name;
5use crate::visitor::source_order::SourceOrderVisitor;
6
7/// See also [mod](https://docs.python.org/3/library/ast.html#ast.mod)
8#[derive(Clone, Debug, PartialEq)]
9#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10pub enum Mod {
11    Module(crate::ModModule),
12    Expression(crate::ModExpression),
13}
14
15impl From<crate::ModModule> for Mod {
16    fn from(node: crate::ModModule) -> Self {
17        Self::Module(node)
18    }
19}
20
21impl From<crate::ModExpression> for Mod {
22    fn from(node: crate::ModExpression) -> Self {
23        Self::Expression(node)
24    }
25}
26
27impl ruff_text_size::Ranged for Mod {
28    fn range(&self) -> ruff_text_size::TextRange {
29        match self {
30            Self::Module(node) => node.range(),
31            Self::Expression(node) => node.range(),
32        }
33    }
34}
35
36impl crate::HasNodeIndex for Mod {
37    fn node_index(&self) -> &crate::AtomicNodeIndex {
38        match self {
39            Self::Module(node) => node.node_index(),
40            Self::Expression(node) => node.node_index(),
41        }
42    }
43}
44
45#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
46impl Mod {
47    #[inline]
48    pub const fn is_module(&self) -> bool {
49        matches!(self, Self::Module(_))
50    }
51
52    #[inline]
53    pub fn module(self) -> Option<crate::ModModule> {
54        match self {
55            Self::Module(val) => Some(val),
56            _ => None,
57        }
58    }
59
60    #[inline]
61    pub fn expect_module(self) -> crate::ModModule {
62        match self {
63            Self::Module(val) => val,
64            _ => panic!("called expect on {self:?}"),
65        }
66    }
67
68    #[inline]
69    pub fn as_module_mut(&mut self) -> Option<&mut crate::ModModule> {
70        match self {
71            Self::Module(val) => Some(val),
72            _ => None,
73        }
74    }
75
76    #[inline]
77    pub fn as_module(&self) -> Option<&crate::ModModule> {
78        match self {
79            Self::Module(val) => Some(val),
80            _ => None,
81        }
82    }
83
84    #[inline]
85    pub const fn is_expression(&self) -> bool {
86        matches!(self, Self::Expression(_))
87    }
88
89    #[inline]
90    pub fn expression(self) -> Option<crate::ModExpression> {
91        match self {
92            Self::Expression(val) => Some(val),
93            _ => None,
94        }
95    }
96
97    #[inline]
98    pub fn expect_expression(self) -> crate::ModExpression {
99        match self {
100            Self::Expression(val) => val,
101            _ => panic!("called expect on {self:?}"),
102        }
103    }
104
105    #[inline]
106    pub fn as_expression_mut(&mut self) -> Option<&mut crate::ModExpression> {
107        match self {
108            Self::Expression(val) => Some(val),
109            _ => None,
110        }
111    }
112
113    #[inline]
114    pub fn as_expression(&self) -> Option<&crate::ModExpression> {
115        match self {
116            Self::Expression(val) => Some(val),
117            _ => None,
118        }
119    }
120}
121
122/// See also [stmt](https://docs.python.org/3/library/ast.html#ast.stmt)
123#[derive(Clone, Debug, PartialEq)]
124#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
125pub enum Stmt {
126    FunctionDef(crate::StmtFunctionDef),
127    ClassDef(crate::StmtClassDef),
128    Return(crate::StmtReturn),
129    Delete(crate::StmtDelete),
130    TypeAlias(crate::StmtTypeAlias),
131    Assign(crate::StmtAssign),
132    AugAssign(crate::StmtAugAssign),
133    AnnAssign(crate::StmtAnnAssign),
134    For(crate::StmtFor),
135    While(crate::StmtWhile),
136    If(crate::StmtIf),
137    With(crate::StmtWith),
138    Match(crate::StmtMatch),
139    Raise(crate::StmtRaise),
140    Try(crate::StmtTry),
141    Assert(crate::StmtAssert),
142    Import(crate::StmtImport),
143    ImportFrom(crate::StmtImportFrom),
144    Global(crate::StmtGlobal),
145    Nonlocal(crate::StmtNonlocal),
146    Expr(crate::StmtExpr),
147    Pass(crate::StmtPass),
148    Break(crate::StmtBreak),
149    Continue(crate::StmtContinue),
150    IpyEscapeCommand(crate::StmtIpyEscapeCommand),
151}
152
153impl From<crate::StmtFunctionDef> for Stmt {
154    fn from(node: crate::StmtFunctionDef) -> Self {
155        Self::FunctionDef(node)
156    }
157}
158
159impl From<crate::StmtClassDef> for Stmt {
160    fn from(node: crate::StmtClassDef) -> Self {
161        Self::ClassDef(node)
162    }
163}
164
165impl From<crate::StmtReturn> for Stmt {
166    fn from(node: crate::StmtReturn) -> Self {
167        Self::Return(node)
168    }
169}
170
171impl From<crate::StmtDelete> for Stmt {
172    fn from(node: crate::StmtDelete) -> Self {
173        Self::Delete(node)
174    }
175}
176
177impl From<crate::StmtTypeAlias> for Stmt {
178    fn from(node: crate::StmtTypeAlias) -> Self {
179        Self::TypeAlias(node)
180    }
181}
182
183impl From<crate::StmtAssign> for Stmt {
184    fn from(node: crate::StmtAssign) -> Self {
185        Self::Assign(node)
186    }
187}
188
189impl From<crate::StmtAugAssign> for Stmt {
190    fn from(node: crate::StmtAugAssign) -> Self {
191        Self::AugAssign(node)
192    }
193}
194
195impl From<crate::StmtAnnAssign> for Stmt {
196    fn from(node: crate::StmtAnnAssign) -> Self {
197        Self::AnnAssign(node)
198    }
199}
200
201impl From<crate::StmtFor> for Stmt {
202    fn from(node: crate::StmtFor) -> Self {
203        Self::For(node)
204    }
205}
206
207impl From<crate::StmtWhile> for Stmt {
208    fn from(node: crate::StmtWhile) -> Self {
209        Self::While(node)
210    }
211}
212
213impl From<crate::StmtIf> for Stmt {
214    fn from(node: crate::StmtIf) -> Self {
215        Self::If(node)
216    }
217}
218
219impl From<crate::StmtWith> for Stmt {
220    fn from(node: crate::StmtWith) -> Self {
221        Self::With(node)
222    }
223}
224
225impl From<crate::StmtMatch> for Stmt {
226    fn from(node: crate::StmtMatch) -> Self {
227        Self::Match(node)
228    }
229}
230
231impl From<crate::StmtRaise> for Stmt {
232    fn from(node: crate::StmtRaise) -> Self {
233        Self::Raise(node)
234    }
235}
236
237impl From<crate::StmtTry> for Stmt {
238    fn from(node: crate::StmtTry) -> Self {
239        Self::Try(node)
240    }
241}
242
243impl From<crate::StmtAssert> for Stmt {
244    fn from(node: crate::StmtAssert) -> Self {
245        Self::Assert(node)
246    }
247}
248
249impl From<crate::StmtImport> for Stmt {
250    fn from(node: crate::StmtImport) -> Self {
251        Self::Import(node)
252    }
253}
254
255impl From<crate::StmtImportFrom> for Stmt {
256    fn from(node: crate::StmtImportFrom) -> Self {
257        Self::ImportFrom(node)
258    }
259}
260
261impl From<crate::StmtGlobal> for Stmt {
262    fn from(node: crate::StmtGlobal) -> Self {
263        Self::Global(node)
264    }
265}
266
267impl From<crate::StmtNonlocal> for Stmt {
268    fn from(node: crate::StmtNonlocal) -> Self {
269        Self::Nonlocal(node)
270    }
271}
272
273impl From<crate::StmtExpr> for Stmt {
274    fn from(node: crate::StmtExpr) -> Self {
275        Self::Expr(node)
276    }
277}
278
279impl From<crate::StmtPass> for Stmt {
280    fn from(node: crate::StmtPass) -> Self {
281        Self::Pass(node)
282    }
283}
284
285impl From<crate::StmtBreak> for Stmt {
286    fn from(node: crate::StmtBreak) -> Self {
287        Self::Break(node)
288    }
289}
290
291impl From<crate::StmtContinue> for Stmt {
292    fn from(node: crate::StmtContinue) -> Self {
293        Self::Continue(node)
294    }
295}
296
297impl From<crate::StmtIpyEscapeCommand> for Stmt {
298    fn from(node: crate::StmtIpyEscapeCommand) -> Self {
299        Self::IpyEscapeCommand(node)
300    }
301}
302
303impl ruff_text_size::Ranged for Stmt {
304    fn range(&self) -> ruff_text_size::TextRange {
305        match self {
306            Self::FunctionDef(node) => node.range(),
307            Self::ClassDef(node) => node.range(),
308            Self::Return(node) => node.range(),
309            Self::Delete(node) => node.range(),
310            Self::TypeAlias(node) => node.range(),
311            Self::Assign(node) => node.range(),
312            Self::AugAssign(node) => node.range(),
313            Self::AnnAssign(node) => node.range(),
314            Self::For(node) => node.range(),
315            Self::While(node) => node.range(),
316            Self::If(node) => node.range(),
317            Self::With(node) => node.range(),
318            Self::Match(node) => node.range(),
319            Self::Raise(node) => node.range(),
320            Self::Try(node) => node.range(),
321            Self::Assert(node) => node.range(),
322            Self::Import(node) => node.range(),
323            Self::ImportFrom(node) => node.range(),
324            Self::Global(node) => node.range(),
325            Self::Nonlocal(node) => node.range(),
326            Self::Expr(node) => node.range(),
327            Self::Pass(node) => node.range(),
328            Self::Break(node) => node.range(),
329            Self::Continue(node) => node.range(),
330            Self::IpyEscapeCommand(node) => node.range(),
331        }
332    }
333}
334
335impl crate::HasNodeIndex for Stmt {
336    fn node_index(&self) -> &crate::AtomicNodeIndex {
337        match self {
338            Self::FunctionDef(node) => node.node_index(),
339            Self::ClassDef(node) => node.node_index(),
340            Self::Return(node) => node.node_index(),
341            Self::Delete(node) => node.node_index(),
342            Self::TypeAlias(node) => node.node_index(),
343            Self::Assign(node) => node.node_index(),
344            Self::AugAssign(node) => node.node_index(),
345            Self::AnnAssign(node) => node.node_index(),
346            Self::For(node) => node.node_index(),
347            Self::While(node) => node.node_index(),
348            Self::If(node) => node.node_index(),
349            Self::With(node) => node.node_index(),
350            Self::Match(node) => node.node_index(),
351            Self::Raise(node) => node.node_index(),
352            Self::Try(node) => node.node_index(),
353            Self::Assert(node) => node.node_index(),
354            Self::Import(node) => node.node_index(),
355            Self::ImportFrom(node) => node.node_index(),
356            Self::Global(node) => node.node_index(),
357            Self::Nonlocal(node) => node.node_index(),
358            Self::Expr(node) => node.node_index(),
359            Self::Pass(node) => node.node_index(),
360            Self::Break(node) => node.node_index(),
361            Self::Continue(node) => node.node_index(),
362            Self::IpyEscapeCommand(node) => node.node_index(),
363        }
364    }
365}
366
367#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
368impl Stmt {
369    #[inline]
370    pub const fn is_function_def_stmt(&self) -> bool {
371        matches!(self, Self::FunctionDef(_))
372    }
373
374    #[inline]
375    pub fn function_def_stmt(self) -> Option<crate::StmtFunctionDef> {
376        match self {
377            Self::FunctionDef(val) => Some(val),
378            _ => None,
379        }
380    }
381
382    #[inline]
383    pub fn expect_function_def_stmt(self) -> crate::StmtFunctionDef {
384        match self {
385            Self::FunctionDef(val) => val,
386            _ => panic!("called expect on {self:?}"),
387        }
388    }
389
390    #[inline]
391    pub fn as_function_def_stmt_mut(&mut self) -> Option<&mut crate::StmtFunctionDef> {
392        match self {
393            Self::FunctionDef(val) => Some(val),
394            _ => None,
395        }
396    }
397
398    #[inline]
399    pub fn as_function_def_stmt(&self) -> Option<&crate::StmtFunctionDef> {
400        match self {
401            Self::FunctionDef(val) => Some(val),
402            _ => None,
403        }
404    }
405
406    #[inline]
407    pub const fn is_class_def_stmt(&self) -> bool {
408        matches!(self, Self::ClassDef(_))
409    }
410
411    #[inline]
412    pub fn class_def_stmt(self) -> Option<crate::StmtClassDef> {
413        match self {
414            Self::ClassDef(val) => Some(val),
415            _ => None,
416        }
417    }
418
419    #[inline]
420    pub fn expect_class_def_stmt(self) -> crate::StmtClassDef {
421        match self {
422            Self::ClassDef(val) => val,
423            _ => panic!("called expect on {self:?}"),
424        }
425    }
426
427    #[inline]
428    pub fn as_class_def_stmt_mut(&mut self) -> Option<&mut crate::StmtClassDef> {
429        match self {
430            Self::ClassDef(val) => Some(val),
431            _ => None,
432        }
433    }
434
435    #[inline]
436    pub fn as_class_def_stmt(&self) -> Option<&crate::StmtClassDef> {
437        match self {
438            Self::ClassDef(val) => Some(val),
439            _ => None,
440        }
441    }
442
443    #[inline]
444    pub const fn is_return_stmt(&self) -> bool {
445        matches!(self, Self::Return(_))
446    }
447
448    #[inline]
449    pub fn return_stmt(self) -> Option<crate::StmtReturn> {
450        match self {
451            Self::Return(val) => Some(val),
452            _ => None,
453        }
454    }
455
456    #[inline]
457    pub fn expect_return_stmt(self) -> crate::StmtReturn {
458        match self {
459            Self::Return(val) => val,
460            _ => panic!("called expect on {self:?}"),
461        }
462    }
463
464    #[inline]
465    pub fn as_return_stmt_mut(&mut self) -> Option<&mut crate::StmtReturn> {
466        match self {
467            Self::Return(val) => Some(val),
468            _ => None,
469        }
470    }
471
472    #[inline]
473    pub fn as_return_stmt(&self) -> Option<&crate::StmtReturn> {
474        match self {
475            Self::Return(val) => Some(val),
476            _ => None,
477        }
478    }
479
480    #[inline]
481    pub const fn is_delete_stmt(&self) -> bool {
482        matches!(self, Self::Delete(_))
483    }
484
485    #[inline]
486    pub fn delete_stmt(self) -> Option<crate::StmtDelete> {
487        match self {
488            Self::Delete(val) => Some(val),
489            _ => None,
490        }
491    }
492
493    #[inline]
494    pub fn expect_delete_stmt(self) -> crate::StmtDelete {
495        match self {
496            Self::Delete(val) => val,
497            _ => panic!("called expect on {self:?}"),
498        }
499    }
500
501    #[inline]
502    pub fn as_delete_stmt_mut(&mut self) -> Option<&mut crate::StmtDelete> {
503        match self {
504            Self::Delete(val) => Some(val),
505            _ => None,
506        }
507    }
508
509    #[inline]
510    pub fn as_delete_stmt(&self) -> Option<&crate::StmtDelete> {
511        match self {
512            Self::Delete(val) => Some(val),
513            _ => None,
514        }
515    }
516
517    #[inline]
518    pub const fn is_type_alias_stmt(&self) -> bool {
519        matches!(self, Self::TypeAlias(_))
520    }
521
522    #[inline]
523    pub fn type_alias_stmt(self) -> Option<crate::StmtTypeAlias> {
524        match self {
525            Self::TypeAlias(val) => Some(val),
526            _ => None,
527        }
528    }
529
530    #[inline]
531    pub fn expect_type_alias_stmt(self) -> crate::StmtTypeAlias {
532        match self {
533            Self::TypeAlias(val) => val,
534            _ => panic!("called expect on {self:?}"),
535        }
536    }
537
538    #[inline]
539    pub fn as_type_alias_stmt_mut(&mut self) -> Option<&mut crate::StmtTypeAlias> {
540        match self {
541            Self::TypeAlias(val) => Some(val),
542            _ => None,
543        }
544    }
545
546    #[inline]
547    pub fn as_type_alias_stmt(&self) -> Option<&crate::StmtTypeAlias> {
548        match self {
549            Self::TypeAlias(val) => Some(val),
550            _ => None,
551        }
552    }
553
554    #[inline]
555    pub const fn is_assign_stmt(&self) -> bool {
556        matches!(self, Self::Assign(_))
557    }
558
559    #[inline]
560    pub fn assign_stmt(self) -> Option<crate::StmtAssign> {
561        match self {
562            Self::Assign(val) => Some(val),
563            _ => None,
564        }
565    }
566
567    #[inline]
568    pub fn expect_assign_stmt(self) -> crate::StmtAssign {
569        match self {
570            Self::Assign(val) => val,
571            _ => panic!("called expect on {self:?}"),
572        }
573    }
574
575    #[inline]
576    pub fn as_assign_stmt_mut(&mut self) -> Option<&mut crate::StmtAssign> {
577        match self {
578            Self::Assign(val) => Some(val),
579            _ => None,
580        }
581    }
582
583    #[inline]
584    pub fn as_assign_stmt(&self) -> Option<&crate::StmtAssign> {
585        match self {
586            Self::Assign(val) => Some(val),
587            _ => None,
588        }
589    }
590
591    #[inline]
592    pub const fn is_aug_assign_stmt(&self) -> bool {
593        matches!(self, Self::AugAssign(_))
594    }
595
596    #[inline]
597    pub fn aug_assign_stmt(self) -> Option<crate::StmtAugAssign> {
598        match self {
599            Self::AugAssign(val) => Some(val),
600            _ => None,
601        }
602    }
603
604    #[inline]
605    pub fn expect_aug_assign_stmt(self) -> crate::StmtAugAssign {
606        match self {
607            Self::AugAssign(val) => val,
608            _ => panic!("called expect on {self:?}"),
609        }
610    }
611
612    #[inline]
613    pub fn as_aug_assign_stmt_mut(&mut self) -> Option<&mut crate::StmtAugAssign> {
614        match self {
615            Self::AugAssign(val) => Some(val),
616            _ => None,
617        }
618    }
619
620    #[inline]
621    pub fn as_aug_assign_stmt(&self) -> Option<&crate::StmtAugAssign> {
622        match self {
623            Self::AugAssign(val) => Some(val),
624            _ => None,
625        }
626    }
627
628    #[inline]
629    pub const fn is_ann_assign_stmt(&self) -> bool {
630        matches!(self, Self::AnnAssign(_))
631    }
632
633    #[inline]
634    pub fn ann_assign_stmt(self) -> Option<crate::StmtAnnAssign> {
635        match self {
636            Self::AnnAssign(val) => Some(val),
637            _ => None,
638        }
639    }
640
641    #[inline]
642    pub fn expect_ann_assign_stmt(self) -> crate::StmtAnnAssign {
643        match self {
644            Self::AnnAssign(val) => val,
645            _ => panic!("called expect on {self:?}"),
646        }
647    }
648
649    #[inline]
650    pub fn as_ann_assign_stmt_mut(&mut self) -> Option<&mut crate::StmtAnnAssign> {
651        match self {
652            Self::AnnAssign(val) => Some(val),
653            _ => None,
654        }
655    }
656
657    #[inline]
658    pub fn as_ann_assign_stmt(&self) -> Option<&crate::StmtAnnAssign> {
659        match self {
660            Self::AnnAssign(val) => Some(val),
661            _ => None,
662        }
663    }
664
665    #[inline]
666    pub const fn is_for_stmt(&self) -> bool {
667        matches!(self, Self::For(_))
668    }
669
670    #[inline]
671    pub fn for_stmt(self) -> Option<crate::StmtFor> {
672        match self {
673            Self::For(val) => Some(val),
674            _ => None,
675        }
676    }
677
678    #[inline]
679    pub fn expect_for_stmt(self) -> crate::StmtFor {
680        match self {
681            Self::For(val) => val,
682            _ => panic!("called expect on {self:?}"),
683        }
684    }
685
686    #[inline]
687    pub fn as_for_stmt_mut(&mut self) -> Option<&mut crate::StmtFor> {
688        match self {
689            Self::For(val) => Some(val),
690            _ => None,
691        }
692    }
693
694    #[inline]
695    pub fn as_for_stmt(&self) -> Option<&crate::StmtFor> {
696        match self {
697            Self::For(val) => Some(val),
698            _ => None,
699        }
700    }
701
702    #[inline]
703    pub const fn is_while_stmt(&self) -> bool {
704        matches!(self, Self::While(_))
705    }
706
707    #[inline]
708    pub fn while_stmt(self) -> Option<crate::StmtWhile> {
709        match self {
710            Self::While(val) => Some(val),
711            _ => None,
712        }
713    }
714
715    #[inline]
716    pub fn expect_while_stmt(self) -> crate::StmtWhile {
717        match self {
718            Self::While(val) => val,
719            _ => panic!("called expect on {self:?}"),
720        }
721    }
722
723    #[inline]
724    pub fn as_while_stmt_mut(&mut self) -> Option<&mut crate::StmtWhile> {
725        match self {
726            Self::While(val) => Some(val),
727            _ => None,
728        }
729    }
730
731    #[inline]
732    pub fn as_while_stmt(&self) -> Option<&crate::StmtWhile> {
733        match self {
734            Self::While(val) => Some(val),
735            _ => None,
736        }
737    }
738
739    #[inline]
740    pub const fn is_if_stmt(&self) -> bool {
741        matches!(self, Self::If(_))
742    }
743
744    #[inline]
745    pub fn if_stmt(self) -> Option<crate::StmtIf> {
746        match self {
747            Self::If(val) => Some(val),
748            _ => None,
749        }
750    }
751
752    #[inline]
753    pub fn expect_if_stmt(self) -> crate::StmtIf {
754        match self {
755            Self::If(val) => val,
756            _ => panic!("called expect on {self:?}"),
757        }
758    }
759
760    #[inline]
761    pub fn as_if_stmt_mut(&mut self) -> Option<&mut crate::StmtIf> {
762        match self {
763            Self::If(val) => Some(val),
764            _ => None,
765        }
766    }
767
768    #[inline]
769    pub fn as_if_stmt(&self) -> Option<&crate::StmtIf> {
770        match self {
771            Self::If(val) => Some(val),
772            _ => None,
773        }
774    }
775
776    #[inline]
777    pub const fn is_with_stmt(&self) -> bool {
778        matches!(self, Self::With(_))
779    }
780
781    #[inline]
782    pub fn with_stmt(self) -> Option<crate::StmtWith> {
783        match self {
784            Self::With(val) => Some(val),
785            _ => None,
786        }
787    }
788
789    #[inline]
790    pub fn expect_with_stmt(self) -> crate::StmtWith {
791        match self {
792            Self::With(val) => val,
793            _ => panic!("called expect on {self:?}"),
794        }
795    }
796
797    #[inline]
798    pub fn as_with_stmt_mut(&mut self) -> Option<&mut crate::StmtWith> {
799        match self {
800            Self::With(val) => Some(val),
801            _ => None,
802        }
803    }
804
805    #[inline]
806    pub fn as_with_stmt(&self) -> Option<&crate::StmtWith> {
807        match self {
808            Self::With(val) => Some(val),
809            _ => None,
810        }
811    }
812
813    #[inline]
814    pub const fn is_match_stmt(&self) -> bool {
815        matches!(self, Self::Match(_))
816    }
817
818    #[inline]
819    pub fn match_stmt(self) -> Option<crate::StmtMatch> {
820        match self {
821            Self::Match(val) => Some(val),
822            _ => None,
823        }
824    }
825
826    #[inline]
827    pub fn expect_match_stmt(self) -> crate::StmtMatch {
828        match self {
829            Self::Match(val) => val,
830            _ => panic!("called expect on {self:?}"),
831        }
832    }
833
834    #[inline]
835    pub fn as_match_stmt_mut(&mut self) -> Option<&mut crate::StmtMatch> {
836        match self {
837            Self::Match(val) => Some(val),
838            _ => None,
839        }
840    }
841
842    #[inline]
843    pub fn as_match_stmt(&self) -> Option<&crate::StmtMatch> {
844        match self {
845            Self::Match(val) => Some(val),
846            _ => None,
847        }
848    }
849
850    #[inline]
851    pub const fn is_raise_stmt(&self) -> bool {
852        matches!(self, Self::Raise(_))
853    }
854
855    #[inline]
856    pub fn raise_stmt(self) -> Option<crate::StmtRaise> {
857        match self {
858            Self::Raise(val) => Some(val),
859            _ => None,
860        }
861    }
862
863    #[inline]
864    pub fn expect_raise_stmt(self) -> crate::StmtRaise {
865        match self {
866            Self::Raise(val) => val,
867            _ => panic!("called expect on {self:?}"),
868        }
869    }
870
871    #[inline]
872    pub fn as_raise_stmt_mut(&mut self) -> Option<&mut crate::StmtRaise> {
873        match self {
874            Self::Raise(val) => Some(val),
875            _ => None,
876        }
877    }
878
879    #[inline]
880    pub fn as_raise_stmt(&self) -> Option<&crate::StmtRaise> {
881        match self {
882            Self::Raise(val) => Some(val),
883            _ => None,
884        }
885    }
886
887    #[inline]
888    pub const fn is_try_stmt(&self) -> bool {
889        matches!(self, Self::Try(_))
890    }
891
892    #[inline]
893    pub fn try_stmt(self) -> Option<crate::StmtTry> {
894        match self {
895            Self::Try(val) => Some(val),
896            _ => None,
897        }
898    }
899
900    #[inline]
901    pub fn expect_try_stmt(self) -> crate::StmtTry {
902        match self {
903            Self::Try(val) => val,
904            _ => panic!("called expect on {self:?}"),
905        }
906    }
907
908    #[inline]
909    pub fn as_try_stmt_mut(&mut self) -> Option<&mut crate::StmtTry> {
910        match self {
911            Self::Try(val) => Some(val),
912            _ => None,
913        }
914    }
915
916    #[inline]
917    pub fn as_try_stmt(&self) -> Option<&crate::StmtTry> {
918        match self {
919            Self::Try(val) => Some(val),
920            _ => None,
921        }
922    }
923
924    #[inline]
925    pub const fn is_assert_stmt(&self) -> bool {
926        matches!(self, Self::Assert(_))
927    }
928
929    #[inline]
930    pub fn assert_stmt(self) -> Option<crate::StmtAssert> {
931        match self {
932            Self::Assert(val) => Some(val),
933            _ => None,
934        }
935    }
936
937    #[inline]
938    pub fn expect_assert_stmt(self) -> crate::StmtAssert {
939        match self {
940            Self::Assert(val) => val,
941            _ => panic!("called expect on {self:?}"),
942        }
943    }
944
945    #[inline]
946    pub fn as_assert_stmt_mut(&mut self) -> Option<&mut crate::StmtAssert> {
947        match self {
948            Self::Assert(val) => Some(val),
949            _ => None,
950        }
951    }
952
953    #[inline]
954    pub fn as_assert_stmt(&self) -> Option<&crate::StmtAssert> {
955        match self {
956            Self::Assert(val) => Some(val),
957            _ => None,
958        }
959    }
960
961    #[inline]
962    pub const fn is_import_stmt(&self) -> bool {
963        matches!(self, Self::Import(_))
964    }
965
966    #[inline]
967    pub fn import_stmt(self) -> Option<crate::StmtImport> {
968        match self {
969            Self::Import(val) => Some(val),
970            _ => None,
971        }
972    }
973
974    #[inline]
975    pub fn expect_import_stmt(self) -> crate::StmtImport {
976        match self {
977            Self::Import(val) => val,
978            _ => panic!("called expect on {self:?}"),
979        }
980    }
981
982    #[inline]
983    pub fn as_import_stmt_mut(&mut self) -> Option<&mut crate::StmtImport> {
984        match self {
985            Self::Import(val) => Some(val),
986            _ => None,
987        }
988    }
989
990    #[inline]
991    pub fn as_import_stmt(&self) -> Option<&crate::StmtImport> {
992        match self {
993            Self::Import(val) => Some(val),
994            _ => None,
995        }
996    }
997
998    #[inline]
999    pub const fn is_import_from_stmt(&self) -> bool {
1000        matches!(self, Self::ImportFrom(_))
1001    }
1002
1003    #[inline]
1004    pub fn import_from_stmt(self) -> Option<crate::StmtImportFrom> {
1005        match self {
1006            Self::ImportFrom(val) => Some(val),
1007            _ => None,
1008        }
1009    }
1010
1011    #[inline]
1012    pub fn expect_import_from_stmt(self) -> crate::StmtImportFrom {
1013        match self {
1014            Self::ImportFrom(val) => val,
1015            _ => panic!("called expect on {self:?}"),
1016        }
1017    }
1018
1019    #[inline]
1020    pub fn as_import_from_stmt_mut(&mut self) -> Option<&mut crate::StmtImportFrom> {
1021        match self {
1022            Self::ImportFrom(val) => Some(val),
1023            _ => None,
1024        }
1025    }
1026
1027    #[inline]
1028    pub fn as_import_from_stmt(&self) -> Option<&crate::StmtImportFrom> {
1029        match self {
1030            Self::ImportFrom(val) => Some(val),
1031            _ => None,
1032        }
1033    }
1034
1035    #[inline]
1036    pub const fn is_global_stmt(&self) -> bool {
1037        matches!(self, Self::Global(_))
1038    }
1039
1040    #[inline]
1041    pub fn global_stmt(self) -> Option<crate::StmtGlobal> {
1042        match self {
1043            Self::Global(val) => Some(val),
1044            _ => None,
1045        }
1046    }
1047
1048    #[inline]
1049    pub fn expect_global_stmt(self) -> crate::StmtGlobal {
1050        match self {
1051            Self::Global(val) => val,
1052            _ => panic!("called expect on {self:?}"),
1053        }
1054    }
1055
1056    #[inline]
1057    pub fn as_global_stmt_mut(&mut self) -> Option<&mut crate::StmtGlobal> {
1058        match self {
1059            Self::Global(val) => Some(val),
1060            _ => None,
1061        }
1062    }
1063
1064    #[inline]
1065    pub fn as_global_stmt(&self) -> Option<&crate::StmtGlobal> {
1066        match self {
1067            Self::Global(val) => Some(val),
1068            _ => None,
1069        }
1070    }
1071
1072    #[inline]
1073    pub const fn is_nonlocal_stmt(&self) -> bool {
1074        matches!(self, Self::Nonlocal(_))
1075    }
1076
1077    #[inline]
1078    pub fn nonlocal_stmt(self) -> Option<crate::StmtNonlocal> {
1079        match self {
1080            Self::Nonlocal(val) => Some(val),
1081            _ => None,
1082        }
1083    }
1084
1085    #[inline]
1086    pub fn expect_nonlocal_stmt(self) -> crate::StmtNonlocal {
1087        match self {
1088            Self::Nonlocal(val) => val,
1089            _ => panic!("called expect on {self:?}"),
1090        }
1091    }
1092
1093    #[inline]
1094    pub fn as_nonlocal_stmt_mut(&mut self) -> Option<&mut crate::StmtNonlocal> {
1095        match self {
1096            Self::Nonlocal(val) => Some(val),
1097            _ => None,
1098        }
1099    }
1100
1101    #[inline]
1102    pub fn as_nonlocal_stmt(&self) -> Option<&crate::StmtNonlocal> {
1103        match self {
1104            Self::Nonlocal(val) => Some(val),
1105            _ => None,
1106        }
1107    }
1108
1109    #[inline]
1110    pub const fn is_expr_stmt(&self) -> bool {
1111        matches!(self, Self::Expr(_))
1112    }
1113
1114    #[inline]
1115    pub fn expr_stmt(self) -> Option<crate::StmtExpr> {
1116        match self {
1117            Self::Expr(val) => Some(val),
1118            _ => None,
1119        }
1120    }
1121
1122    #[inline]
1123    pub fn expect_expr_stmt(self) -> crate::StmtExpr {
1124        match self {
1125            Self::Expr(val) => val,
1126            _ => panic!("called expect on {self:?}"),
1127        }
1128    }
1129
1130    #[inline]
1131    pub fn as_expr_stmt_mut(&mut self) -> Option<&mut crate::StmtExpr> {
1132        match self {
1133            Self::Expr(val) => Some(val),
1134            _ => None,
1135        }
1136    }
1137
1138    #[inline]
1139    pub fn as_expr_stmt(&self) -> Option<&crate::StmtExpr> {
1140        match self {
1141            Self::Expr(val) => Some(val),
1142            _ => None,
1143        }
1144    }
1145
1146    #[inline]
1147    pub const fn is_pass_stmt(&self) -> bool {
1148        matches!(self, Self::Pass(_))
1149    }
1150
1151    #[inline]
1152    pub fn pass_stmt(self) -> Option<crate::StmtPass> {
1153        match self {
1154            Self::Pass(val) => Some(val),
1155            _ => None,
1156        }
1157    }
1158
1159    #[inline]
1160    pub fn expect_pass_stmt(self) -> crate::StmtPass {
1161        match self {
1162            Self::Pass(val) => val,
1163            _ => panic!("called expect on {self:?}"),
1164        }
1165    }
1166
1167    #[inline]
1168    pub fn as_pass_stmt_mut(&mut self) -> Option<&mut crate::StmtPass> {
1169        match self {
1170            Self::Pass(val) => Some(val),
1171            _ => None,
1172        }
1173    }
1174
1175    #[inline]
1176    pub fn as_pass_stmt(&self) -> Option<&crate::StmtPass> {
1177        match self {
1178            Self::Pass(val) => Some(val),
1179            _ => None,
1180        }
1181    }
1182
1183    #[inline]
1184    pub const fn is_break_stmt(&self) -> bool {
1185        matches!(self, Self::Break(_))
1186    }
1187
1188    #[inline]
1189    pub fn break_stmt(self) -> Option<crate::StmtBreak> {
1190        match self {
1191            Self::Break(val) => Some(val),
1192            _ => None,
1193        }
1194    }
1195
1196    #[inline]
1197    pub fn expect_break_stmt(self) -> crate::StmtBreak {
1198        match self {
1199            Self::Break(val) => val,
1200            _ => panic!("called expect on {self:?}"),
1201        }
1202    }
1203
1204    #[inline]
1205    pub fn as_break_stmt_mut(&mut self) -> Option<&mut crate::StmtBreak> {
1206        match self {
1207            Self::Break(val) => Some(val),
1208            _ => None,
1209        }
1210    }
1211
1212    #[inline]
1213    pub fn as_break_stmt(&self) -> Option<&crate::StmtBreak> {
1214        match self {
1215            Self::Break(val) => Some(val),
1216            _ => None,
1217        }
1218    }
1219
1220    #[inline]
1221    pub const fn is_continue_stmt(&self) -> bool {
1222        matches!(self, Self::Continue(_))
1223    }
1224
1225    #[inline]
1226    pub fn continue_stmt(self) -> Option<crate::StmtContinue> {
1227        match self {
1228            Self::Continue(val) => Some(val),
1229            _ => None,
1230        }
1231    }
1232
1233    #[inline]
1234    pub fn expect_continue_stmt(self) -> crate::StmtContinue {
1235        match self {
1236            Self::Continue(val) => val,
1237            _ => panic!("called expect on {self:?}"),
1238        }
1239    }
1240
1241    #[inline]
1242    pub fn as_continue_stmt_mut(&mut self) -> Option<&mut crate::StmtContinue> {
1243        match self {
1244            Self::Continue(val) => Some(val),
1245            _ => None,
1246        }
1247    }
1248
1249    #[inline]
1250    pub fn as_continue_stmt(&self) -> Option<&crate::StmtContinue> {
1251        match self {
1252            Self::Continue(val) => Some(val),
1253            _ => None,
1254        }
1255    }
1256
1257    #[inline]
1258    pub const fn is_ipy_escape_command_stmt(&self) -> bool {
1259        matches!(self, Self::IpyEscapeCommand(_))
1260    }
1261
1262    #[inline]
1263    pub fn ipy_escape_command_stmt(self) -> Option<crate::StmtIpyEscapeCommand> {
1264        match self {
1265            Self::IpyEscapeCommand(val) => Some(val),
1266            _ => None,
1267        }
1268    }
1269
1270    #[inline]
1271    pub fn expect_ipy_escape_command_stmt(self) -> crate::StmtIpyEscapeCommand {
1272        match self {
1273            Self::IpyEscapeCommand(val) => val,
1274            _ => panic!("called expect on {self:?}"),
1275        }
1276    }
1277
1278    #[inline]
1279    pub fn as_ipy_escape_command_stmt_mut(&mut self) -> Option<&mut crate::StmtIpyEscapeCommand> {
1280        match self {
1281            Self::IpyEscapeCommand(val) => Some(val),
1282            _ => None,
1283        }
1284    }
1285
1286    #[inline]
1287    pub fn as_ipy_escape_command_stmt(&self) -> Option<&crate::StmtIpyEscapeCommand> {
1288        match self {
1289            Self::IpyEscapeCommand(val) => Some(val),
1290            _ => None,
1291        }
1292    }
1293}
1294
1295/// See also [expr](https://docs.python.org/3/library/ast.html#ast.expr)
1296#[derive(Clone, Debug, PartialEq)]
1297#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
1298pub enum Expr {
1299    BoolOp(crate::ExprBoolOp),
1300    Named(crate::ExprNamed),
1301    BinOp(crate::ExprBinOp),
1302    UnaryOp(crate::ExprUnaryOp),
1303    Lambda(crate::ExprLambda),
1304    If(crate::ExprIf),
1305    Dict(crate::ExprDict),
1306    Set(crate::ExprSet),
1307    ListComp(crate::ExprListComp),
1308    SetComp(crate::ExprSetComp),
1309    DictComp(crate::ExprDictComp),
1310    Generator(crate::ExprGenerator),
1311    Await(crate::ExprAwait),
1312    Yield(crate::ExprYield),
1313    YieldFrom(crate::ExprYieldFrom),
1314    Compare(crate::ExprCompare),
1315    Call(crate::ExprCall),
1316    FString(crate::ExprFString),
1317    TString(crate::ExprTString),
1318    StringLiteral(crate::ExprStringLiteral),
1319    BytesLiteral(crate::ExprBytesLiteral),
1320    NumberLiteral(crate::ExprNumberLiteral),
1321    BooleanLiteral(crate::ExprBooleanLiteral),
1322    NoneLiteral(crate::ExprNoneLiteral),
1323    EllipsisLiteral(crate::ExprEllipsisLiteral),
1324    Constant(crate::ExprConstant),
1325    Attribute(crate::ExprAttribute),
1326    Subscript(crate::ExprSubscript),
1327    Starred(crate::ExprStarred),
1328    Name(crate::ExprName),
1329    List(crate::ExprList),
1330    Tuple(crate::ExprTuple),
1331    Slice(crate::ExprSlice),
1332    IpyEscapeCommand(crate::ExprIpyEscapeCommand),
1333}
1334
1335impl From<crate::ExprBoolOp> for Expr {
1336    fn from(node: crate::ExprBoolOp) -> Self {
1337        Self::BoolOp(node)
1338    }
1339}
1340
1341impl From<crate::ExprNamed> for Expr {
1342    fn from(node: crate::ExprNamed) -> Self {
1343        Self::Named(node)
1344    }
1345}
1346
1347impl From<crate::ExprBinOp> for Expr {
1348    fn from(node: crate::ExprBinOp) -> Self {
1349        Self::BinOp(node)
1350    }
1351}
1352
1353impl From<crate::ExprUnaryOp> for Expr {
1354    fn from(node: crate::ExprUnaryOp) -> Self {
1355        Self::UnaryOp(node)
1356    }
1357}
1358
1359impl From<crate::ExprLambda> for Expr {
1360    fn from(node: crate::ExprLambda) -> Self {
1361        Self::Lambda(node)
1362    }
1363}
1364
1365impl From<crate::ExprIf> for Expr {
1366    fn from(node: crate::ExprIf) -> Self {
1367        Self::If(node)
1368    }
1369}
1370
1371impl From<crate::ExprDict> for Expr {
1372    fn from(node: crate::ExprDict) -> Self {
1373        Self::Dict(node)
1374    }
1375}
1376
1377impl From<crate::ExprSet> for Expr {
1378    fn from(node: crate::ExprSet) -> Self {
1379        Self::Set(node)
1380    }
1381}
1382
1383impl From<crate::ExprListComp> for Expr {
1384    fn from(node: crate::ExprListComp) -> Self {
1385        Self::ListComp(node)
1386    }
1387}
1388
1389impl From<crate::ExprSetComp> for Expr {
1390    fn from(node: crate::ExprSetComp) -> Self {
1391        Self::SetComp(node)
1392    }
1393}
1394
1395impl From<crate::ExprDictComp> for Expr {
1396    fn from(node: crate::ExprDictComp) -> Self {
1397        Self::DictComp(node)
1398    }
1399}
1400
1401impl From<crate::ExprGenerator> for Expr {
1402    fn from(node: crate::ExprGenerator) -> Self {
1403        Self::Generator(node)
1404    }
1405}
1406
1407impl From<crate::ExprAwait> for Expr {
1408    fn from(node: crate::ExprAwait) -> Self {
1409        Self::Await(node)
1410    }
1411}
1412
1413impl From<crate::ExprYield> for Expr {
1414    fn from(node: crate::ExprYield) -> Self {
1415        Self::Yield(node)
1416    }
1417}
1418
1419impl From<crate::ExprYieldFrom> for Expr {
1420    fn from(node: crate::ExprYieldFrom) -> Self {
1421        Self::YieldFrom(node)
1422    }
1423}
1424
1425impl From<crate::ExprCompare> for Expr {
1426    fn from(node: crate::ExprCompare) -> Self {
1427        Self::Compare(node)
1428    }
1429}
1430
1431impl From<crate::ExprCall> for Expr {
1432    fn from(node: crate::ExprCall) -> Self {
1433        Self::Call(node)
1434    }
1435}
1436
1437impl From<crate::ExprFString> for Expr {
1438    fn from(node: crate::ExprFString) -> Self {
1439        Self::FString(node)
1440    }
1441}
1442
1443impl From<crate::ExprTString> for Expr {
1444    fn from(node: crate::ExprTString) -> Self {
1445        Self::TString(node)
1446    }
1447}
1448
1449impl From<crate::ExprStringLiteral> for Expr {
1450    fn from(node: crate::ExprStringLiteral) -> Self {
1451        Self::StringLiteral(node)
1452    }
1453}
1454
1455impl From<crate::ExprBytesLiteral> for Expr {
1456    fn from(node: crate::ExprBytesLiteral) -> Self {
1457        Self::BytesLiteral(node)
1458    }
1459}
1460
1461impl From<crate::ExprNumberLiteral> for Expr {
1462    fn from(node: crate::ExprNumberLiteral) -> Self {
1463        Self::NumberLiteral(node)
1464    }
1465}
1466
1467impl From<crate::ExprBooleanLiteral> for Expr {
1468    fn from(node: crate::ExprBooleanLiteral) -> Self {
1469        Self::BooleanLiteral(node)
1470    }
1471}
1472
1473impl From<crate::ExprNoneLiteral> for Expr {
1474    fn from(node: crate::ExprNoneLiteral) -> Self {
1475        Self::NoneLiteral(node)
1476    }
1477}
1478
1479impl From<crate::ExprEllipsisLiteral> for Expr {
1480    fn from(node: crate::ExprEllipsisLiteral) -> Self {
1481        Self::EllipsisLiteral(node)
1482    }
1483}
1484
1485impl From<crate::ExprConstant> for Expr {
1486    fn from(node: crate::ExprConstant) -> Self {
1487        Self::Constant(node)
1488    }
1489}
1490
1491impl From<crate::ExprAttribute> for Expr {
1492    fn from(node: crate::ExprAttribute) -> Self {
1493        Self::Attribute(node)
1494    }
1495}
1496
1497impl From<crate::ExprSubscript> for Expr {
1498    fn from(node: crate::ExprSubscript) -> Self {
1499        Self::Subscript(node)
1500    }
1501}
1502
1503impl From<crate::ExprStarred> for Expr {
1504    fn from(node: crate::ExprStarred) -> Self {
1505        Self::Starred(node)
1506    }
1507}
1508
1509impl From<crate::ExprName> for Expr {
1510    fn from(node: crate::ExprName) -> Self {
1511        Self::Name(node)
1512    }
1513}
1514
1515impl From<crate::ExprList> for Expr {
1516    fn from(node: crate::ExprList) -> Self {
1517        Self::List(node)
1518    }
1519}
1520
1521impl From<crate::ExprTuple> for Expr {
1522    fn from(node: crate::ExprTuple) -> Self {
1523        Self::Tuple(node)
1524    }
1525}
1526
1527impl From<crate::ExprSlice> for Expr {
1528    fn from(node: crate::ExprSlice) -> Self {
1529        Self::Slice(node)
1530    }
1531}
1532
1533impl From<crate::ExprIpyEscapeCommand> for Expr {
1534    fn from(node: crate::ExprIpyEscapeCommand) -> Self {
1535        Self::IpyEscapeCommand(node)
1536    }
1537}
1538
1539impl ruff_text_size::Ranged for Expr {
1540    fn range(&self) -> ruff_text_size::TextRange {
1541        match self {
1542            Self::BoolOp(node) => node.range(),
1543            Self::Named(node) => node.range(),
1544            Self::BinOp(node) => node.range(),
1545            Self::UnaryOp(node) => node.range(),
1546            Self::Lambda(node) => node.range(),
1547            Self::If(node) => node.range(),
1548            Self::Dict(node) => node.range(),
1549            Self::Set(node) => node.range(),
1550            Self::ListComp(node) => node.range(),
1551            Self::SetComp(node) => node.range(),
1552            Self::DictComp(node) => node.range(),
1553            Self::Generator(node) => node.range(),
1554            Self::Await(node) => node.range(),
1555            Self::Yield(node) => node.range(),
1556            Self::YieldFrom(node) => node.range(),
1557            Self::Compare(node) => node.range(),
1558            Self::Call(node) => node.range(),
1559            Self::FString(node) => node.range(),
1560            Self::TString(node) => node.range(),
1561            Self::StringLiteral(node) => node.range(),
1562            Self::BytesLiteral(node) => node.range(),
1563            Self::NumberLiteral(node) => node.range(),
1564            Self::BooleanLiteral(node) => node.range(),
1565            Self::NoneLiteral(node) => node.range(),
1566            Self::EllipsisLiteral(node) => node.range(),
1567            Self::Constant(node) => node.range(),
1568            Self::Attribute(node) => node.range(),
1569            Self::Subscript(node) => node.range(),
1570            Self::Starred(node) => node.range(),
1571            Self::Name(node) => node.range(),
1572            Self::List(node) => node.range(),
1573            Self::Tuple(node) => node.range(),
1574            Self::Slice(node) => node.range(),
1575            Self::IpyEscapeCommand(node) => node.range(),
1576        }
1577    }
1578}
1579
1580impl crate::HasNodeIndex for Expr {
1581    fn node_index(&self) -> &crate::AtomicNodeIndex {
1582        match self {
1583            Self::BoolOp(node) => node.node_index(),
1584            Self::Named(node) => node.node_index(),
1585            Self::BinOp(node) => node.node_index(),
1586            Self::UnaryOp(node) => node.node_index(),
1587            Self::Lambda(node) => node.node_index(),
1588            Self::If(node) => node.node_index(),
1589            Self::Dict(node) => node.node_index(),
1590            Self::Set(node) => node.node_index(),
1591            Self::ListComp(node) => node.node_index(),
1592            Self::SetComp(node) => node.node_index(),
1593            Self::DictComp(node) => node.node_index(),
1594            Self::Generator(node) => node.node_index(),
1595            Self::Await(node) => node.node_index(),
1596            Self::Yield(node) => node.node_index(),
1597            Self::YieldFrom(node) => node.node_index(),
1598            Self::Compare(node) => node.node_index(),
1599            Self::Call(node) => node.node_index(),
1600            Self::FString(node) => node.node_index(),
1601            Self::TString(node) => node.node_index(),
1602            Self::StringLiteral(node) => node.node_index(),
1603            Self::BytesLiteral(node) => node.node_index(),
1604            Self::NumberLiteral(node) => node.node_index(),
1605            Self::BooleanLiteral(node) => node.node_index(),
1606            Self::NoneLiteral(node) => node.node_index(),
1607            Self::EllipsisLiteral(node) => node.node_index(),
1608            Self::Constant(node) => node.node_index(),
1609            Self::Attribute(node) => node.node_index(),
1610            Self::Subscript(node) => node.node_index(),
1611            Self::Starred(node) => node.node_index(),
1612            Self::Name(node) => node.node_index(),
1613            Self::List(node) => node.node_index(),
1614            Self::Tuple(node) => node.node_index(),
1615            Self::Slice(node) => node.node_index(),
1616            Self::IpyEscapeCommand(node) => node.node_index(),
1617        }
1618    }
1619}
1620
1621#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
1622impl Expr {
1623    #[inline]
1624    pub const fn is_bool_op_expr(&self) -> bool {
1625        matches!(self, Self::BoolOp(_))
1626    }
1627
1628    #[inline]
1629    pub fn bool_op_expr(self) -> Option<crate::ExprBoolOp> {
1630        match self {
1631            Self::BoolOp(val) => Some(val),
1632            _ => None,
1633        }
1634    }
1635
1636    #[inline]
1637    pub fn expect_bool_op_expr(self) -> crate::ExprBoolOp {
1638        match self {
1639            Self::BoolOp(val) => val,
1640            _ => panic!("called expect on {self:?}"),
1641        }
1642    }
1643
1644    #[inline]
1645    pub fn as_bool_op_expr_mut(&mut self) -> Option<&mut crate::ExprBoolOp> {
1646        match self {
1647            Self::BoolOp(val) => Some(val),
1648            _ => None,
1649        }
1650    }
1651
1652    #[inline]
1653    pub fn as_bool_op_expr(&self) -> Option<&crate::ExprBoolOp> {
1654        match self {
1655            Self::BoolOp(val) => Some(val),
1656            _ => None,
1657        }
1658    }
1659
1660    #[inline]
1661    pub const fn is_named_expr(&self) -> bool {
1662        matches!(self, Self::Named(_))
1663    }
1664
1665    #[inline]
1666    pub fn named_expr(self) -> Option<crate::ExprNamed> {
1667        match self {
1668            Self::Named(val) => Some(val),
1669            _ => None,
1670        }
1671    }
1672
1673    #[inline]
1674    pub fn expect_named_expr(self) -> crate::ExprNamed {
1675        match self {
1676            Self::Named(val) => val,
1677            _ => panic!("called expect on {self:?}"),
1678        }
1679    }
1680
1681    #[inline]
1682    pub fn as_named_expr_mut(&mut self) -> Option<&mut crate::ExprNamed> {
1683        match self {
1684            Self::Named(val) => Some(val),
1685            _ => None,
1686        }
1687    }
1688
1689    #[inline]
1690    pub fn as_named_expr(&self) -> Option<&crate::ExprNamed> {
1691        match self {
1692            Self::Named(val) => Some(val),
1693            _ => None,
1694        }
1695    }
1696
1697    #[inline]
1698    pub const fn is_bin_op_expr(&self) -> bool {
1699        matches!(self, Self::BinOp(_))
1700    }
1701
1702    #[inline]
1703    pub fn bin_op_expr(self) -> Option<crate::ExprBinOp> {
1704        match self {
1705            Self::BinOp(val) => Some(val),
1706            _ => None,
1707        }
1708    }
1709
1710    #[inline]
1711    pub fn expect_bin_op_expr(self) -> crate::ExprBinOp {
1712        match self {
1713            Self::BinOp(val) => val,
1714            _ => panic!("called expect on {self:?}"),
1715        }
1716    }
1717
1718    #[inline]
1719    pub fn as_bin_op_expr_mut(&mut self) -> Option<&mut crate::ExprBinOp> {
1720        match self {
1721            Self::BinOp(val) => Some(val),
1722            _ => None,
1723        }
1724    }
1725
1726    #[inline]
1727    pub fn as_bin_op_expr(&self) -> Option<&crate::ExprBinOp> {
1728        match self {
1729            Self::BinOp(val) => Some(val),
1730            _ => None,
1731        }
1732    }
1733
1734    #[inline]
1735    pub const fn is_unary_op_expr(&self) -> bool {
1736        matches!(self, Self::UnaryOp(_))
1737    }
1738
1739    #[inline]
1740    pub fn unary_op_expr(self) -> Option<crate::ExprUnaryOp> {
1741        match self {
1742            Self::UnaryOp(val) => Some(val),
1743            _ => None,
1744        }
1745    }
1746
1747    #[inline]
1748    pub fn expect_unary_op_expr(self) -> crate::ExprUnaryOp {
1749        match self {
1750            Self::UnaryOp(val) => val,
1751            _ => panic!("called expect on {self:?}"),
1752        }
1753    }
1754
1755    #[inline]
1756    pub fn as_unary_op_expr_mut(&mut self) -> Option<&mut crate::ExprUnaryOp> {
1757        match self {
1758            Self::UnaryOp(val) => Some(val),
1759            _ => None,
1760        }
1761    }
1762
1763    #[inline]
1764    pub fn as_unary_op_expr(&self) -> Option<&crate::ExprUnaryOp> {
1765        match self {
1766            Self::UnaryOp(val) => Some(val),
1767            _ => None,
1768        }
1769    }
1770
1771    #[inline]
1772    pub const fn is_lambda_expr(&self) -> bool {
1773        matches!(self, Self::Lambda(_))
1774    }
1775
1776    #[inline]
1777    pub fn lambda_expr(self) -> Option<crate::ExprLambda> {
1778        match self {
1779            Self::Lambda(val) => Some(val),
1780            _ => None,
1781        }
1782    }
1783
1784    #[inline]
1785    pub fn expect_lambda_expr(self) -> crate::ExprLambda {
1786        match self {
1787            Self::Lambda(val) => val,
1788            _ => panic!("called expect on {self:?}"),
1789        }
1790    }
1791
1792    #[inline]
1793    pub fn as_lambda_expr_mut(&mut self) -> Option<&mut crate::ExprLambda> {
1794        match self {
1795            Self::Lambda(val) => Some(val),
1796            _ => None,
1797        }
1798    }
1799
1800    #[inline]
1801    pub fn as_lambda_expr(&self) -> Option<&crate::ExprLambda> {
1802        match self {
1803            Self::Lambda(val) => Some(val),
1804            _ => None,
1805        }
1806    }
1807
1808    #[inline]
1809    pub const fn is_if_expr(&self) -> bool {
1810        matches!(self, Self::If(_))
1811    }
1812
1813    #[inline]
1814    pub fn if_expr(self) -> Option<crate::ExprIf> {
1815        match self {
1816            Self::If(val) => Some(val),
1817            _ => None,
1818        }
1819    }
1820
1821    #[inline]
1822    pub fn expect_if_expr(self) -> crate::ExprIf {
1823        match self {
1824            Self::If(val) => val,
1825            _ => panic!("called expect on {self:?}"),
1826        }
1827    }
1828
1829    #[inline]
1830    pub fn as_if_expr_mut(&mut self) -> Option<&mut crate::ExprIf> {
1831        match self {
1832            Self::If(val) => Some(val),
1833            _ => None,
1834        }
1835    }
1836
1837    #[inline]
1838    pub fn as_if_expr(&self) -> Option<&crate::ExprIf> {
1839        match self {
1840            Self::If(val) => Some(val),
1841            _ => None,
1842        }
1843    }
1844
1845    #[inline]
1846    pub const fn is_dict_expr(&self) -> bool {
1847        matches!(self, Self::Dict(_))
1848    }
1849
1850    #[inline]
1851    pub fn dict_expr(self) -> Option<crate::ExprDict> {
1852        match self {
1853            Self::Dict(val) => Some(val),
1854            _ => None,
1855        }
1856    }
1857
1858    #[inline]
1859    pub fn expect_dict_expr(self) -> crate::ExprDict {
1860        match self {
1861            Self::Dict(val) => val,
1862            _ => panic!("called expect on {self:?}"),
1863        }
1864    }
1865
1866    #[inline]
1867    pub fn as_dict_expr_mut(&mut self) -> Option<&mut crate::ExprDict> {
1868        match self {
1869            Self::Dict(val) => Some(val),
1870            _ => None,
1871        }
1872    }
1873
1874    #[inline]
1875    pub fn as_dict_expr(&self) -> Option<&crate::ExprDict> {
1876        match self {
1877            Self::Dict(val) => Some(val),
1878            _ => None,
1879        }
1880    }
1881
1882    #[inline]
1883    pub const fn is_set_expr(&self) -> bool {
1884        matches!(self, Self::Set(_))
1885    }
1886
1887    #[inline]
1888    pub fn set_expr(self) -> Option<crate::ExprSet> {
1889        match self {
1890            Self::Set(val) => Some(val),
1891            _ => None,
1892        }
1893    }
1894
1895    #[inline]
1896    pub fn expect_set_expr(self) -> crate::ExprSet {
1897        match self {
1898            Self::Set(val) => val,
1899            _ => panic!("called expect on {self:?}"),
1900        }
1901    }
1902
1903    #[inline]
1904    pub fn as_set_expr_mut(&mut self) -> Option<&mut crate::ExprSet> {
1905        match self {
1906            Self::Set(val) => Some(val),
1907            _ => None,
1908        }
1909    }
1910
1911    #[inline]
1912    pub fn as_set_expr(&self) -> Option<&crate::ExprSet> {
1913        match self {
1914            Self::Set(val) => Some(val),
1915            _ => None,
1916        }
1917    }
1918
1919    #[inline]
1920    pub const fn is_list_comp_expr(&self) -> bool {
1921        matches!(self, Self::ListComp(_))
1922    }
1923
1924    #[inline]
1925    pub fn list_comp_expr(self) -> Option<crate::ExprListComp> {
1926        match self {
1927            Self::ListComp(val) => Some(val),
1928            _ => None,
1929        }
1930    }
1931
1932    #[inline]
1933    pub fn expect_list_comp_expr(self) -> crate::ExprListComp {
1934        match self {
1935            Self::ListComp(val) => val,
1936            _ => panic!("called expect on {self:?}"),
1937        }
1938    }
1939
1940    #[inline]
1941    pub fn as_list_comp_expr_mut(&mut self) -> Option<&mut crate::ExprListComp> {
1942        match self {
1943            Self::ListComp(val) => Some(val),
1944            _ => None,
1945        }
1946    }
1947
1948    #[inline]
1949    pub fn as_list_comp_expr(&self) -> Option<&crate::ExprListComp> {
1950        match self {
1951            Self::ListComp(val) => Some(val),
1952            _ => None,
1953        }
1954    }
1955
1956    #[inline]
1957    pub const fn is_set_comp_expr(&self) -> bool {
1958        matches!(self, Self::SetComp(_))
1959    }
1960
1961    #[inline]
1962    pub fn set_comp_expr(self) -> Option<crate::ExprSetComp> {
1963        match self {
1964            Self::SetComp(val) => Some(val),
1965            _ => None,
1966        }
1967    }
1968
1969    #[inline]
1970    pub fn expect_set_comp_expr(self) -> crate::ExprSetComp {
1971        match self {
1972            Self::SetComp(val) => val,
1973            _ => panic!("called expect on {self:?}"),
1974        }
1975    }
1976
1977    #[inline]
1978    pub fn as_set_comp_expr_mut(&mut self) -> Option<&mut crate::ExprSetComp> {
1979        match self {
1980            Self::SetComp(val) => Some(val),
1981            _ => None,
1982        }
1983    }
1984
1985    #[inline]
1986    pub fn as_set_comp_expr(&self) -> Option<&crate::ExprSetComp> {
1987        match self {
1988            Self::SetComp(val) => Some(val),
1989            _ => None,
1990        }
1991    }
1992
1993    #[inline]
1994    pub const fn is_dict_comp_expr(&self) -> bool {
1995        matches!(self, Self::DictComp(_))
1996    }
1997
1998    #[inline]
1999    pub fn dict_comp_expr(self) -> Option<crate::ExprDictComp> {
2000        match self {
2001            Self::DictComp(val) => Some(val),
2002            _ => None,
2003        }
2004    }
2005
2006    #[inline]
2007    pub fn expect_dict_comp_expr(self) -> crate::ExprDictComp {
2008        match self {
2009            Self::DictComp(val) => val,
2010            _ => panic!("called expect on {self:?}"),
2011        }
2012    }
2013
2014    #[inline]
2015    pub fn as_dict_comp_expr_mut(&mut self) -> Option<&mut crate::ExprDictComp> {
2016        match self {
2017            Self::DictComp(val) => Some(val),
2018            _ => None,
2019        }
2020    }
2021
2022    #[inline]
2023    pub fn as_dict_comp_expr(&self) -> Option<&crate::ExprDictComp> {
2024        match self {
2025            Self::DictComp(val) => Some(val),
2026            _ => None,
2027        }
2028    }
2029
2030    #[inline]
2031    pub const fn is_generator_expr(&self) -> bool {
2032        matches!(self, Self::Generator(_))
2033    }
2034
2035    #[inline]
2036    pub fn generator_expr(self) -> Option<crate::ExprGenerator> {
2037        match self {
2038            Self::Generator(val) => Some(val),
2039            _ => None,
2040        }
2041    }
2042
2043    #[inline]
2044    pub fn expect_generator_expr(self) -> crate::ExprGenerator {
2045        match self {
2046            Self::Generator(val) => val,
2047            _ => panic!("called expect on {self:?}"),
2048        }
2049    }
2050
2051    #[inline]
2052    pub fn as_generator_expr_mut(&mut self) -> Option<&mut crate::ExprGenerator> {
2053        match self {
2054            Self::Generator(val) => Some(val),
2055            _ => None,
2056        }
2057    }
2058
2059    #[inline]
2060    pub fn as_generator_expr(&self) -> Option<&crate::ExprGenerator> {
2061        match self {
2062            Self::Generator(val) => Some(val),
2063            _ => None,
2064        }
2065    }
2066
2067    #[inline]
2068    pub const fn is_await_expr(&self) -> bool {
2069        matches!(self, Self::Await(_))
2070    }
2071
2072    #[inline]
2073    pub fn await_expr(self) -> Option<crate::ExprAwait> {
2074        match self {
2075            Self::Await(val) => Some(val),
2076            _ => None,
2077        }
2078    }
2079
2080    #[inline]
2081    pub fn expect_await_expr(self) -> crate::ExprAwait {
2082        match self {
2083            Self::Await(val) => val,
2084            _ => panic!("called expect on {self:?}"),
2085        }
2086    }
2087
2088    #[inline]
2089    pub fn as_await_expr_mut(&mut self) -> Option<&mut crate::ExprAwait> {
2090        match self {
2091            Self::Await(val) => Some(val),
2092            _ => None,
2093        }
2094    }
2095
2096    #[inline]
2097    pub fn as_await_expr(&self) -> Option<&crate::ExprAwait> {
2098        match self {
2099            Self::Await(val) => Some(val),
2100            _ => None,
2101        }
2102    }
2103
2104    #[inline]
2105    pub const fn is_yield_expr(&self) -> bool {
2106        matches!(self, Self::Yield(_))
2107    }
2108
2109    #[inline]
2110    pub fn yield_expr(self) -> Option<crate::ExprYield> {
2111        match self {
2112            Self::Yield(val) => Some(val),
2113            _ => None,
2114        }
2115    }
2116
2117    #[inline]
2118    pub fn expect_yield_expr(self) -> crate::ExprYield {
2119        match self {
2120            Self::Yield(val) => val,
2121            _ => panic!("called expect on {self:?}"),
2122        }
2123    }
2124
2125    #[inline]
2126    pub fn as_yield_expr_mut(&mut self) -> Option<&mut crate::ExprYield> {
2127        match self {
2128            Self::Yield(val) => Some(val),
2129            _ => None,
2130        }
2131    }
2132
2133    #[inline]
2134    pub fn as_yield_expr(&self) -> Option<&crate::ExprYield> {
2135        match self {
2136            Self::Yield(val) => Some(val),
2137            _ => None,
2138        }
2139    }
2140
2141    #[inline]
2142    pub const fn is_yield_from_expr(&self) -> bool {
2143        matches!(self, Self::YieldFrom(_))
2144    }
2145
2146    #[inline]
2147    pub fn yield_from_expr(self) -> Option<crate::ExprYieldFrom> {
2148        match self {
2149            Self::YieldFrom(val) => Some(val),
2150            _ => None,
2151        }
2152    }
2153
2154    #[inline]
2155    pub fn expect_yield_from_expr(self) -> crate::ExprYieldFrom {
2156        match self {
2157            Self::YieldFrom(val) => val,
2158            _ => panic!("called expect on {self:?}"),
2159        }
2160    }
2161
2162    #[inline]
2163    pub fn as_yield_from_expr_mut(&mut self) -> Option<&mut crate::ExprYieldFrom> {
2164        match self {
2165            Self::YieldFrom(val) => Some(val),
2166            _ => None,
2167        }
2168    }
2169
2170    #[inline]
2171    pub fn as_yield_from_expr(&self) -> Option<&crate::ExprYieldFrom> {
2172        match self {
2173            Self::YieldFrom(val) => Some(val),
2174            _ => None,
2175        }
2176    }
2177
2178    #[inline]
2179    pub const fn is_compare_expr(&self) -> bool {
2180        matches!(self, Self::Compare(_))
2181    }
2182
2183    #[inline]
2184    pub fn compare_expr(self) -> Option<crate::ExprCompare> {
2185        match self {
2186            Self::Compare(val) => Some(val),
2187            _ => None,
2188        }
2189    }
2190
2191    #[inline]
2192    pub fn expect_compare_expr(self) -> crate::ExprCompare {
2193        match self {
2194            Self::Compare(val) => val,
2195            _ => panic!("called expect on {self:?}"),
2196        }
2197    }
2198
2199    #[inline]
2200    pub fn as_compare_expr_mut(&mut self) -> Option<&mut crate::ExprCompare> {
2201        match self {
2202            Self::Compare(val) => Some(val),
2203            _ => None,
2204        }
2205    }
2206
2207    #[inline]
2208    pub fn as_compare_expr(&self) -> Option<&crate::ExprCompare> {
2209        match self {
2210            Self::Compare(val) => Some(val),
2211            _ => None,
2212        }
2213    }
2214
2215    #[inline]
2216    pub const fn is_call_expr(&self) -> bool {
2217        matches!(self, Self::Call(_))
2218    }
2219
2220    #[inline]
2221    pub fn call_expr(self) -> Option<crate::ExprCall> {
2222        match self {
2223            Self::Call(val) => Some(val),
2224            _ => None,
2225        }
2226    }
2227
2228    #[inline]
2229    pub fn expect_call_expr(self) -> crate::ExprCall {
2230        match self {
2231            Self::Call(val) => val,
2232            _ => panic!("called expect on {self:?}"),
2233        }
2234    }
2235
2236    #[inline]
2237    pub fn as_call_expr_mut(&mut self) -> Option<&mut crate::ExprCall> {
2238        match self {
2239            Self::Call(val) => Some(val),
2240            _ => None,
2241        }
2242    }
2243
2244    #[inline]
2245    pub fn as_call_expr(&self) -> Option<&crate::ExprCall> {
2246        match self {
2247            Self::Call(val) => Some(val),
2248            _ => None,
2249        }
2250    }
2251
2252    #[inline]
2253    pub const fn is_f_string_expr(&self) -> bool {
2254        matches!(self, Self::FString(_))
2255    }
2256
2257    #[inline]
2258    pub fn f_string_expr(self) -> Option<crate::ExprFString> {
2259        match self {
2260            Self::FString(val) => Some(val),
2261            _ => None,
2262        }
2263    }
2264
2265    #[inline]
2266    pub fn expect_f_string_expr(self) -> crate::ExprFString {
2267        match self {
2268            Self::FString(val) => val,
2269            _ => panic!("called expect on {self:?}"),
2270        }
2271    }
2272
2273    #[inline]
2274    pub fn as_f_string_expr_mut(&mut self) -> Option<&mut crate::ExprFString> {
2275        match self {
2276            Self::FString(val) => Some(val),
2277            _ => None,
2278        }
2279    }
2280
2281    #[inline]
2282    pub fn as_f_string_expr(&self) -> Option<&crate::ExprFString> {
2283        match self {
2284            Self::FString(val) => Some(val),
2285            _ => None,
2286        }
2287    }
2288
2289    #[inline]
2290    pub const fn is_t_string_expr(&self) -> bool {
2291        matches!(self, Self::TString(_))
2292    }
2293
2294    #[inline]
2295    pub fn t_string_expr(self) -> Option<crate::ExprTString> {
2296        match self {
2297            Self::TString(val) => Some(val),
2298            _ => None,
2299        }
2300    }
2301
2302    #[inline]
2303    pub fn expect_t_string_expr(self) -> crate::ExprTString {
2304        match self {
2305            Self::TString(val) => val,
2306            _ => panic!("called expect on {self:?}"),
2307        }
2308    }
2309
2310    #[inline]
2311    pub fn as_t_string_expr_mut(&mut self) -> Option<&mut crate::ExprTString> {
2312        match self {
2313            Self::TString(val) => Some(val),
2314            _ => None,
2315        }
2316    }
2317
2318    #[inline]
2319    pub fn as_t_string_expr(&self) -> Option<&crate::ExprTString> {
2320        match self {
2321            Self::TString(val) => Some(val),
2322            _ => None,
2323        }
2324    }
2325
2326    #[inline]
2327    pub const fn is_string_literal_expr(&self) -> bool {
2328        matches!(self, Self::StringLiteral(_))
2329    }
2330
2331    #[inline]
2332    pub fn string_literal_expr(self) -> Option<crate::ExprStringLiteral> {
2333        match self {
2334            Self::StringLiteral(val) => Some(val),
2335            _ => None,
2336        }
2337    }
2338
2339    #[inline]
2340    pub fn expect_string_literal_expr(self) -> crate::ExprStringLiteral {
2341        match self {
2342            Self::StringLiteral(val) => val,
2343            _ => panic!("called expect on {self:?}"),
2344        }
2345    }
2346
2347    #[inline]
2348    pub fn as_string_literal_expr_mut(&mut self) -> Option<&mut crate::ExprStringLiteral> {
2349        match self {
2350            Self::StringLiteral(val) => Some(val),
2351            _ => None,
2352        }
2353    }
2354
2355    #[inline]
2356    pub fn as_string_literal_expr(&self) -> Option<&crate::ExprStringLiteral> {
2357        match self {
2358            Self::StringLiteral(val) => Some(val),
2359            _ => None,
2360        }
2361    }
2362
2363    #[inline]
2364    pub const fn is_bytes_literal_expr(&self) -> bool {
2365        matches!(self, Self::BytesLiteral(_))
2366    }
2367
2368    #[inline]
2369    pub fn bytes_literal_expr(self) -> Option<crate::ExprBytesLiteral> {
2370        match self {
2371            Self::BytesLiteral(val) => Some(val),
2372            _ => None,
2373        }
2374    }
2375
2376    #[inline]
2377    pub fn expect_bytes_literal_expr(self) -> crate::ExprBytesLiteral {
2378        match self {
2379            Self::BytesLiteral(val) => val,
2380            _ => panic!("called expect on {self:?}"),
2381        }
2382    }
2383
2384    #[inline]
2385    pub fn as_bytes_literal_expr_mut(&mut self) -> Option<&mut crate::ExprBytesLiteral> {
2386        match self {
2387            Self::BytesLiteral(val) => Some(val),
2388            _ => None,
2389        }
2390    }
2391
2392    #[inline]
2393    pub fn as_bytes_literal_expr(&self) -> Option<&crate::ExprBytesLiteral> {
2394        match self {
2395            Self::BytesLiteral(val) => Some(val),
2396            _ => None,
2397        }
2398    }
2399
2400    #[inline]
2401    pub const fn is_number_literal_expr(&self) -> bool {
2402        matches!(self, Self::NumberLiteral(_))
2403    }
2404
2405    #[inline]
2406    pub fn number_literal_expr(self) -> Option<crate::ExprNumberLiteral> {
2407        match self {
2408            Self::NumberLiteral(val) => Some(val),
2409            _ => None,
2410        }
2411    }
2412
2413    #[inline]
2414    pub fn expect_number_literal_expr(self) -> crate::ExprNumberLiteral {
2415        match self {
2416            Self::NumberLiteral(val) => val,
2417            _ => panic!("called expect on {self:?}"),
2418        }
2419    }
2420
2421    #[inline]
2422    pub fn as_number_literal_expr_mut(&mut self) -> Option<&mut crate::ExprNumberLiteral> {
2423        match self {
2424            Self::NumberLiteral(val) => Some(val),
2425            _ => None,
2426        }
2427    }
2428
2429    #[inline]
2430    pub fn as_number_literal_expr(&self) -> Option<&crate::ExprNumberLiteral> {
2431        match self {
2432            Self::NumberLiteral(val) => Some(val),
2433            _ => None,
2434        }
2435    }
2436
2437    #[inline]
2438    pub const fn is_boolean_literal_expr(&self) -> bool {
2439        matches!(self, Self::BooleanLiteral(_))
2440    }
2441
2442    #[inline]
2443    pub fn boolean_literal_expr(self) -> Option<crate::ExprBooleanLiteral> {
2444        match self {
2445            Self::BooleanLiteral(val) => Some(val),
2446            _ => None,
2447        }
2448    }
2449
2450    #[inline]
2451    pub fn expect_boolean_literal_expr(self) -> crate::ExprBooleanLiteral {
2452        match self {
2453            Self::BooleanLiteral(val) => val,
2454            _ => panic!("called expect on {self:?}"),
2455        }
2456    }
2457
2458    #[inline]
2459    pub fn as_boolean_literal_expr_mut(&mut self) -> Option<&mut crate::ExprBooleanLiteral> {
2460        match self {
2461            Self::BooleanLiteral(val) => Some(val),
2462            _ => None,
2463        }
2464    }
2465
2466    #[inline]
2467    pub fn as_boolean_literal_expr(&self) -> Option<&crate::ExprBooleanLiteral> {
2468        match self {
2469            Self::BooleanLiteral(val) => Some(val),
2470            _ => None,
2471        }
2472    }
2473
2474    #[inline]
2475    pub const fn is_none_literal_expr(&self) -> bool {
2476        matches!(self, Self::NoneLiteral(_))
2477    }
2478
2479    #[inline]
2480    pub fn none_literal_expr(self) -> Option<crate::ExprNoneLiteral> {
2481        match self {
2482            Self::NoneLiteral(val) => Some(val),
2483            _ => None,
2484        }
2485    }
2486
2487    #[inline]
2488    pub fn expect_none_literal_expr(self) -> crate::ExprNoneLiteral {
2489        match self {
2490            Self::NoneLiteral(val) => val,
2491            _ => panic!("called expect on {self:?}"),
2492        }
2493    }
2494
2495    #[inline]
2496    pub fn as_none_literal_expr_mut(&mut self) -> Option<&mut crate::ExprNoneLiteral> {
2497        match self {
2498            Self::NoneLiteral(val) => Some(val),
2499            _ => None,
2500        }
2501    }
2502
2503    #[inline]
2504    pub fn as_none_literal_expr(&self) -> Option<&crate::ExprNoneLiteral> {
2505        match self {
2506            Self::NoneLiteral(val) => Some(val),
2507            _ => None,
2508        }
2509    }
2510
2511    #[inline]
2512    pub const fn is_ellipsis_literal_expr(&self) -> bool {
2513        matches!(self, Self::EllipsisLiteral(_))
2514    }
2515
2516    #[inline]
2517    pub fn ellipsis_literal_expr(self) -> Option<crate::ExprEllipsisLiteral> {
2518        match self {
2519            Self::EllipsisLiteral(val) => Some(val),
2520            _ => None,
2521        }
2522    }
2523
2524    #[inline]
2525    pub fn expect_ellipsis_literal_expr(self) -> crate::ExprEllipsisLiteral {
2526        match self {
2527            Self::EllipsisLiteral(val) => val,
2528            _ => panic!("called expect on {self:?}"),
2529        }
2530    }
2531
2532    #[inline]
2533    pub fn as_ellipsis_literal_expr_mut(&mut self) -> Option<&mut crate::ExprEllipsisLiteral> {
2534        match self {
2535            Self::EllipsisLiteral(val) => Some(val),
2536            _ => None,
2537        }
2538    }
2539
2540    #[inline]
2541    pub fn as_ellipsis_literal_expr(&self) -> Option<&crate::ExprEllipsisLiteral> {
2542        match self {
2543            Self::EllipsisLiteral(val) => Some(val),
2544            _ => None,
2545        }
2546    }
2547
2548    #[inline]
2549    pub const fn is_constant_expr(&self) -> bool {
2550        matches!(self, Self::Constant(_))
2551    }
2552
2553    #[inline]
2554    pub fn constant_expr(self) -> Option<crate::ExprConstant> {
2555        match self {
2556            Self::Constant(val) => Some(val),
2557            _ => None,
2558        }
2559    }
2560
2561    #[inline]
2562    pub fn expect_constant_expr(self) -> crate::ExprConstant {
2563        match self {
2564            Self::Constant(val) => val,
2565            _ => panic!("called expect on {self:?}"),
2566        }
2567    }
2568
2569    #[inline]
2570    pub fn as_constant_expr_mut(&mut self) -> Option<&mut crate::ExprConstant> {
2571        match self {
2572            Self::Constant(val) => Some(val),
2573            _ => None,
2574        }
2575    }
2576
2577    #[inline]
2578    pub fn as_constant_expr(&self) -> Option<&crate::ExprConstant> {
2579        match self {
2580            Self::Constant(val) => Some(val),
2581            _ => None,
2582        }
2583    }
2584
2585    #[inline]
2586    pub const fn is_attribute_expr(&self) -> bool {
2587        matches!(self, Self::Attribute(_))
2588    }
2589
2590    #[inline]
2591    pub fn attribute_expr(self) -> Option<crate::ExprAttribute> {
2592        match self {
2593            Self::Attribute(val) => Some(val),
2594            _ => None,
2595        }
2596    }
2597
2598    #[inline]
2599    pub fn expect_attribute_expr(self) -> crate::ExprAttribute {
2600        match self {
2601            Self::Attribute(val) => val,
2602            _ => panic!("called expect on {self:?}"),
2603        }
2604    }
2605
2606    #[inline]
2607    pub fn as_attribute_expr_mut(&mut self) -> Option<&mut crate::ExprAttribute> {
2608        match self {
2609            Self::Attribute(val) => Some(val),
2610            _ => None,
2611        }
2612    }
2613
2614    #[inline]
2615    pub fn as_attribute_expr(&self) -> Option<&crate::ExprAttribute> {
2616        match self {
2617            Self::Attribute(val) => Some(val),
2618            _ => None,
2619        }
2620    }
2621
2622    #[inline]
2623    pub const fn is_subscript_expr(&self) -> bool {
2624        matches!(self, Self::Subscript(_))
2625    }
2626
2627    #[inline]
2628    pub fn subscript_expr(self) -> Option<crate::ExprSubscript> {
2629        match self {
2630            Self::Subscript(val) => Some(val),
2631            _ => None,
2632        }
2633    }
2634
2635    #[inline]
2636    pub fn expect_subscript_expr(self) -> crate::ExprSubscript {
2637        match self {
2638            Self::Subscript(val) => val,
2639            _ => panic!("called expect on {self:?}"),
2640        }
2641    }
2642
2643    #[inline]
2644    pub fn as_subscript_expr_mut(&mut self) -> Option<&mut crate::ExprSubscript> {
2645        match self {
2646            Self::Subscript(val) => Some(val),
2647            _ => None,
2648        }
2649    }
2650
2651    #[inline]
2652    pub fn as_subscript_expr(&self) -> Option<&crate::ExprSubscript> {
2653        match self {
2654            Self::Subscript(val) => Some(val),
2655            _ => None,
2656        }
2657    }
2658
2659    #[inline]
2660    pub const fn is_starred_expr(&self) -> bool {
2661        matches!(self, Self::Starred(_))
2662    }
2663
2664    #[inline]
2665    pub fn starred_expr(self) -> Option<crate::ExprStarred> {
2666        match self {
2667            Self::Starred(val) => Some(val),
2668            _ => None,
2669        }
2670    }
2671
2672    #[inline]
2673    pub fn expect_starred_expr(self) -> crate::ExprStarred {
2674        match self {
2675            Self::Starred(val) => val,
2676            _ => panic!("called expect on {self:?}"),
2677        }
2678    }
2679
2680    #[inline]
2681    pub fn as_starred_expr_mut(&mut self) -> Option<&mut crate::ExprStarred> {
2682        match self {
2683            Self::Starred(val) => Some(val),
2684            _ => None,
2685        }
2686    }
2687
2688    #[inline]
2689    pub fn as_starred_expr(&self) -> Option<&crate::ExprStarred> {
2690        match self {
2691            Self::Starred(val) => Some(val),
2692            _ => None,
2693        }
2694    }
2695
2696    #[inline]
2697    pub const fn is_name_expr(&self) -> bool {
2698        matches!(self, Self::Name(_))
2699    }
2700
2701    #[inline]
2702    pub fn name_expr(self) -> Option<crate::ExprName> {
2703        match self {
2704            Self::Name(val) => Some(val),
2705            _ => None,
2706        }
2707    }
2708
2709    #[inline]
2710    pub fn expect_name_expr(self) -> crate::ExprName {
2711        match self {
2712            Self::Name(val) => val,
2713            _ => panic!("called expect on {self:?}"),
2714        }
2715    }
2716
2717    #[inline]
2718    pub fn as_name_expr_mut(&mut self) -> Option<&mut crate::ExprName> {
2719        match self {
2720            Self::Name(val) => Some(val),
2721            _ => None,
2722        }
2723    }
2724
2725    #[inline]
2726    pub fn as_name_expr(&self) -> Option<&crate::ExprName> {
2727        match self {
2728            Self::Name(val) => Some(val),
2729            _ => None,
2730        }
2731    }
2732
2733    #[inline]
2734    pub const fn is_list_expr(&self) -> bool {
2735        matches!(self, Self::List(_))
2736    }
2737
2738    #[inline]
2739    pub fn list_expr(self) -> Option<crate::ExprList> {
2740        match self {
2741            Self::List(val) => Some(val),
2742            _ => None,
2743        }
2744    }
2745
2746    #[inline]
2747    pub fn expect_list_expr(self) -> crate::ExprList {
2748        match self {
2749            Self::List(val) => val,
2750            _ => panic!("called expect on {self:?}"),
2751        }
2752    }
2753
2754    #[inline]
2755    pub fn as_list_expr_mut(&mut self) -> Option<&mut crate::ExprList> {
2756        match self {
2757            Self::List(val) => Some(val),
2758            _ => None,
2759        }
2760    }
2761
2762    #[inline]
2763    pub fn as_list_expr(&self) -> Option<&crate::ExprList> {
2764        match self {
2765            Self::List(val) => Some(val),
2766            _ => None,
2767        }
2768    }
2769
2770    #[inline]
2771    pub const fn is_tuple_expr(&self) -> bool {
2772        matches!(self, Self::Tuple(_))
2773    }
2774
2775    #[inline]
2776    pub fn tuple_expr(self) -> Option<crate::ExprTuple> {
2777        match self {
2778            Self::Tuple(val) => Some(val),
2779            _ => None,
2780        }
2781    }
2782
2783    #[inline]
2784    pub fn expect_tuple_expr(self) -> crate::ExprTuple {
2785        match self {
2786            Self::Tuple(val) => val,
2787            _ => panic!("called expect on {self:?}"),
2788        }
2789    }
2790
2791    #[inline]
2792    pub fn as_tuple_expr_mut(&mut self) -> Option<&mut crate::ExprTuple> {
2793        match self {
2794            Self::Tuple(val) => Some(val),
2795            _ => None,
2796        }
2797    }
2798
2799    #[inline]
2800    pub fn as_tuple_expr(&self) -> Option<&crate::ExprTuple> {
2801        match self {
2802            Self::Tuple(val) => Some(val),
2803            _ => None,
2804        }
2805    }
2806
2807    #[inline]
2808    pub const fn is_slice_expr(&self) -> bool {
2809        matches!(self, Self::Slice(_))
2810    }
2811
2812    #[inline]
2813    pub fn slice_expr(self) -> Option<crate::ExprSlice> {
2814        match self {
2815            Self::Slice(val) => Some(val),
2816            _ => None,
2817        }
2818    }
2819
2820    #[inline]
2821    pub fn expect_slice_expr(self) -> crate::ExprSlice {
2822        match self {
2823            Self::Slice(val) => val,
2824            _ => panic!("called expect on {self:?}"),
2825        }
2826    }
2827
2828    #[inline]
2829    pub fn as_slice_expr_mut(&mut self) -> Option<&mut crate::ExprSlice> {
2830        match self {
2831            Self::Slice(val) => Some(val),
2832            _ => None,
2833        }
2834    }
2835
2836    #[inline]
2837    pub fn as_slice_expr(&self) -> Option<&crate::ExprSlice> {
2838        match self {
2839            Self::Slice(val) => Some(val),
2840            _ => None,
2841        }
2842    }
2843
2844    #[inline]
2845    pub const fn is_ipy_escape_command_expr(&self) -> bool {
2846        matches!(self, Self::IpyEscapeCommand(_))
2847    }
2848
2849    #[inline]
2850    pub fn ipy_escape_command_expr(self) -> Option<crate::ExprIpyEscapeCommand> {
2851        match self {
2852            Self::IpyEscapeCommand(val) => Some(val),
2853            _ => None,
2854        }
2855    }
2856
2857    #[inline]
2858    pub fn expect_ipy_escape_command_expr(self) -> crate::ExprIpyEscapeCommand {
2859        match self {
2860            Self::IpyEscapeCommand(val) => val,
2861            _ => panic!("called expect on {self:?}"),
2862        }
2863    }
2864
2865    #[inline]
2866    pub fn as_ipy_escape_command_expr_mut(&mut self) -> Option<&mut crate::ExprIpyEscapeCommand> {
2867        match self {
2868            Self::IpyEscapeCommand(val) => Some(val),
2869            _ => None,
2870        }
2871    }
2872
2873    #[inline]
2874    pub fn as_ipy_escape_command_expr(&self) -> Option<&crate::ExprIpyEscapeCommand> {
2875        match self {
2876            Self::IpyEscapeCommand(val) => Some(val),
2877            _ => None,
2878        }
2879    }
2880}
2881
2882/// See also [excepthandler](https://docs.python.org/3/library/ast.html#ast.excepthandler)
2883#[derive(Clone, Debug, PartialEq)]
2884#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
2885pub enum ExceptHandler {
2886    ExceptHandler(crate::ExceptHandlerExceptHandler),
2887}
2888
2889impl From<crate::ExceptHandlerExceptHandler> for ExceptHandler {
2890    fn from(node: crate::ExceptHandlerExceptHandler) -> Self {
2891        Self::ExceptHandler(node)
2892    }
2893}
2894
2895impl ruff_text_size::Ranged for ExceptHandler {
2896    fn range(&self) -> ruff_text_size::TextRange {
2897        match self {
2898            Self::ExceptHandler(node) => node.range(),
2899        }
2900    }
2901}
2902
2903impl crate::HasNodeIndex for ExceptHandler {
2904    fn node_index(&self) -> &crate::AtomicNodeIndex {
2905        match self {
2906            Self::ExceptHandler(node) => node.node_index(),
2907        }
2908    }
2909}
2910
2911#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
2912impl ExceptHandler {
2913    #[inline]
2914    pub const fn is_except_handler(&self) -> bool {
2915        matches!(self, Self::ExceptHandler(_))
2916    }
2917
2918    #[inline]
2919    pub fn except_handler(self) -> Option<crate::ExceptHandlerExceptHandler> {
2920        match self {
2921            Self::ExceptHandler(val) => Some(val),
2922        }
2923    }
2924
2925    #[inline]
2926    pub fn expect_except_handler(self) -> crate::ExceptHandlerExceptHandler {
2927        match self {
2928            Self::ExceptHandler(val) => val,
2929        }
2930    }
2931
2932    #[inline]
2933    pub fn as_except_handler_mut(&mut self) -> Option<&mut crate::ExceptHandlerExceptHandler> {
2934        match self {
2935            Self::ExceptHandler(val) => Some(val),
2936        }
2937    }
2938
2939    #[inline]
2940    pub fn as_except_handler(&self) -> Option<&crate::ExceptHandlerExceptHandler> {
2941        match self {
2942            Self::ExceptHandler(val) => Some(val),
2943        }
2944    }
2945}
2946
2947#[derive(Clone, Debug, PartialEq)]
2948#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
2949pub enum InterpolatedStringElement {
2950    Interpolation(crate::InterpolatedElement),
2951    Literal(crate::InterpolatedStringLiteralElement),
2952}
2953
2954impl From<crate::InterpolatedElement> for InterpolatedStringElement {
2955    fn from(node: crate::InterpolatedElement) -> Self {
2956        Self::Interpolation(node)
2957    }
2958}
2959
2960impl From<crate::InterpolatedStringLiteralElement> for InterpolatedStringElement {
2961    fn from(node: crate::InterpolatedStringLiteralElement) -> Self {
2962        Self::Literal(node)
2963    }
2964}
2965
2966impl ruff_text_size::Ranged for InterpolatedStringElement {
2967    fn range(&self) -> ruff_text_size::TextRange {
2968        match self {
2969            Self::Interpolation(node) => node.range(),
2970            Self::Literal(node) => node.range(),
2971        }
2972    }
2973}
2974
2975impl crate::HasNodeIndex for InterpolatedStringElement {
2976    fn node_index(&self) -> &crate::AtomicNodeIndex {
2977        match self {
2978            Self::Interpolation(node) => node.node_index(),
2979            Self::Literal(node) => node.node_index(),
2980        }
2981    }
2982}
2983
2984#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
2985impl InterpolatedStringElement {
2986    #[inline]
2987    pub const fn is_interpolation(&self) -> bool {
2988        matches!(self, Self::Interpolation(_))
2989    }
2990
2991    #[inline]
2992    pub fn interpolation(self) -> Option<crate::InterpolatedElement> {
2993        match self {
2994            Self::Interpolation(val) => Some(val),
2995            _ => None,
2996        }
2997    }
2998
2999    #[inline]
3000    pub fn expect_interpolation(self) -> crate::InterpolatedElement {
3001        match self {
3002            Self::Interpolation(val) => val,
3003            _ => panic!("called expect on {self:?}"),
3004        }
3005    }
3006
3007    #[inline]
3008    pub fn as_interpolation_mut(&mut self) -> Option<&mut crate::InterpolatedElement> {
3009        match self {
3010            Self::Interpolation(val) => Some(val),
3011            _ => None,
3012        }
3013    }
3014
3015    #[inline]
3016    pub fn as_interpolation(&self) -> Option<&crate::InterpolatedElement> {
3017        match self {
3018            Self::Interpolation(val) => Some(val),
3019            _ => None,
3020        }
3021    }
3022
3023    #[inline]
3024    pub const fn is_literal(&self) -> bool {
3025        matches!(self, Self::Literal(_))
3026    }
3027
3028    #[inline]
3029    pub fn literal(self) -> Option<crate::InterpolatedStringLiteralElement> {
3030        match self {
3031            Self::Literal(val) => Some(val),
3032            _ => None,
3033        }
3034    }
3035
3036    #[inline]
3037    pub fn expect_literal(self) -> crate::InterpolatedStringLiteralElement {
3038        match self {
3039            Self::Literal(val) => val,
3040            _ => panic!("called expect on {self:?}"),
3041        }
3042    }
3043
3044    #[inline]
3045    pub fn as_literal_mut(&mut self) -> Option<&mut crate::InterpolatedStringLiteralElement> {
3046        match self {
3047            Self::Literal(val) => Some(val),
3048            _ => None,
3049        }
3050    }
3051
3052    #[inline]
3053    pub fn as_literal(&self) -> Option<&crate::InterpolatedStringLiteralElement> {
3054        match self {
3055            Self::Literal(val) => Some(val),
3056            _ => None,
3057        }
3058    }
3059}
3060
3061/// See also [pattern](https://docs.python.org/3/library/ast.html#ast.pattern)
3062#[derive(Clone, Debug, PartialEq)]
3063#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
3064pub enum Pattern {
3065    MatchValue(crate::PatternMatchValue),
3066    MatchSingleton(crate::PatternMatchSingleton),
3067    MatchSequence(crate::PatternMatchSequence),
3068    MatchMapping(crate::PatternMatchMapping),
3069    MatchClass(crate::PatternMatchClass),
3070    MatchStar(crate::PatternMatchStar),
3071    MatchAs(crate::PatternMatchAs),
3072    MatchOr(crate::PatternMatchOr),
3073}
3074
3075impl From<crate::PatternMatchValue> for Pattern {
3076    fn from(node: crate::PatternMatchValue) -> Self {
3077        Self::MatchValue(node)
3078    }
3079}
3080
3081impl From<crate::PatternMatchSingleton> for Pattern {
3082    fn from(node: crate::PatternMatchSingleton) -> Self {
3083        Self::MatchSingleton(node)
3084    }
3085}
3086
3087impl From<crate::PatternMatchSequence> for Pattern {
3088    fn from(node: crate::PatternMatchSequence) -> Self {
3089        Self::MatchSequence(node)
3090    }
3091}
3092
3093impl From<crate::PatternMatchMapping> for Pattern {
3094    fn from(node: crate::PatternMatchMapping) -> Self {
3095        Self::MatchMapping(node)
3096    }
3097}
3098
3099impl From<crate::PatternMatchClass> for Pattern {
3100    fn from(node: crate::PatternMatchClass) -> Self {
3101        Self::MatchClass(node)
3102    }
3103}
3104
3105impl From<crate::PatternMatchStar> for Pattern {
3106    fn from(node: crate::PatternMatchStar) -> Self {
3107        Self::MatchStar(node)
3108    }
3109}
3110
3111impl From<crate::PatternMatchAs> for Pattern {
3112    fn from(node: crate::PatternMatchAs) -> Self {
3113        Self::MatchAs(node)
3114    }
3115}
3116
3117impl From<crate::PatternMatchOr> for Pattern {
3118    fn from(node: crate::PatternMatchOr) -> Self {
3119        Self::MatchOr(node)
3120    }
3121}
3122
3123impl ruff_text_size::Ranged for Pattern {
3124    fn range(&self) -> ruff_text_size::TextRange {
3125        match self {
3126            Self::MatchValue(node) => node.range(),
3127            Self::MatchSingleton(node) => node.range(),
3128            Self::MatchSequence(node) => node.range(),
3129            Self::MatchMapping(node) => node.range(),
3130            Self::MatchClass(node) => node.range(),
3131            Self::MatchStar(node) => node.range(),
3132            Self::MatchAs(node) => node.range(),
3133            Self::MatchOr(node) => node.range(),
3134        }
3135    }
3136}
3137
3138impl crate::HasNodeIndex for Pattern {
3139    fn node_index(&self) -> &crate::AtomicNodeIndex {
3140        match self {
3141            Self::MatchValue(node) => node.node_index(),
3142            Self::MatchSingleton(node) => node.node_index(),
3143            Self::MatchSequence(node) => node.node_index(),
3144            Self::MatchMapping(node) => node.node_index(),
3145            Self::MatchClass(node) => node.node_index(),
3146            Self::MatchStar(node) => node.node_index(),
3147            Self::MatchAs(node) => node.node_index(),
3148            Self::MatchOr(node) => node.node_index(),
3149        }
3150    }
3151}
3152
3153#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
3154impl Pattern {
3155    #[inline]
3156    pub const fn is_match_value(&self) -> bool {
3157        matches!(self, Self::MatchValue(_))
3158    }
3159
3160    #[inline]
3161    pub fn match_value(self) -> Option<crate::PatternMatchValue> {
3162        match self {
3163            Self::MatchValue(val) => Some(val),
3164            _ => None,
3165        }
3166    }
3167
3168    #[inline]
3169    pub fn expect_match_value(self) -> crate::PatternMatchValue {
3170        match self {
3171            Self::MatchValue(val) => val,
3172            _ => panic!("called expect on {self:?}"),
3173        }
3174    }
3175
3176    #[inline]
3177    pub fn as_match_value_mut(&mut self) -> Option<&mut crate::PatternMatchValue> {
3178        match self {
3179            Self::MatchValue(val) => Some(val),
3180            _ => None,
3181        }
3182    }
3183
3184    #[inline]
3185    pub fn as_match_value(&self) -> Option<&crate::PatternMatchValue> {
3186        match self {
3187            Self::MatchValue(val) => Some(val),
3188            _ => None,
3189        }
3190    }
3191
3192    #[inline]
3193    pub const fn is_match_singleton(&self) -> bool {
3194        matches!(self, Self::MatchSingleton(_))
3195    }
3196
3197    #[inline]
3198    pub fn match_singleton(self) -> Option<crate::PatternMatchSingleton> {
3199        match self {
3200            Self::MatchSingleton(val) => Some(val),
3201            _ => None,
3202        }
3203    }
3204
3205    #[inline]
3206    pub fn expect_match_singleton(self) -> crate::PatternMatchSingleton {
3207        match self {
3208            Self::MatchSingleton(val) => val,
3209            _ => panic!("called expect on {self:?}"),
3210        }
3211    }
3212
3213    #[inline]
3214    pub fn as_match_singleton_mut(&mut self) -> Option<&mut crate::PatternMatchSingleton> {
3215        match self {
3216            Self::MatchSingleton(val) => Some(val),
3217            _ => None,
3218        }
3219    }
3220
3221    #[inline]
3222    pub fn as_match_singleton(&self) -> Option<&crate::PatternMatchSingleton> {
3223        match self {
3224            Self::MatchSingleton(val) => Some(val),
3225            _ => None,
3226        }
3227    }
3228
3229    #[inline]
3230    pub const fn is_match_sequence(&self) -> bool {
3231        matches!(self, Self::MatchSequence(_))
3232    }
3233
3234    #[inline]
3235    pub fn match_sequence(self) -> Option<crate::PatternMatchSequence> {
3236        match self {
3237            Self::MatchSequence(val) => Some(val),
3238            _ => None,
3239        }
3240    }
3241
3242    #[inline]
3243    pub fn expect_match_sequence(self) -> crate::PatternMatchSequence {
3244        match self {
3245            Self::MatchSequence(val) => val,
3246            _ => panic!("called expect on {self:?}"),
3247        }
3248    }
3249
3250    #[inline]
3251    pub fn as_match_sequence_mut(&mut self) -> Option<&mut crate::PatternMatchSequence> {
3252        match self {
3253            Self::MatchSequence(val) => Some(val),
3254            _ => None,
3255        }
3256    }
3257
3258    #[inline]
3259    pub fn as_match_sequence(&self) -> Option<&crate::PatternMatchSequence> {
3260        match self {
3261            Self::MatchSequence(val) => Some(val),
3262            _ => None,
3263        }
3264    }
3265
3266    #[inline]
3267    pub const fn is_match_mapping(&self) -> bool {
3268        matches!(self, Self::MatchMapping(_))
3269    }
3270
3271    #[inline]
3272    pub fn match_mapping(self) -> Option<crate::PatternMatchMapping> {
3273        match self {
3274            Self::MatchMapping(val) => Some(val),
3275            _ => None,
3276        }
3277    }
3278
3279    #[inline]
3280    pub fn expect_match_mapping(self) -> crate::PatternMatchMapping {
3281        match self {
3282            Self::MatchMapping(val) => val,
3283            _ => panic!("called expect on {self:?}"),
3284        }
3285    }
3286
3287    #[inline]
3288    pub fn as_match_mapping_mut(&mut self) -> Option<&mut crate::PatternMatchMapping> {
3289        match self {
3290            Self::MatchMapping(val) => Some(val),
3291            _ => None,
3292        }
3293    }
3294
3295    #[inline]
3296    pub fn as_match_mapping(&self) -> Option<&crate::PatternMatchMapping> {
3297        match self {
3298            Self::MatchMapping(val) => Some(val),
3299            _ => None,
3300        }
3301    }
3302
3303    #[inline]
3304    pub const fn is_match_class(&self) -> bool {
3305        matches!(self, Self::MatchClass(_))
3306    }
3307
3308    #[inline]
3309    pub fn match_class(self) -> Option<crate::PatternMatchClass> {
3310        match self {
3311            Self::MatchClass(val) => Some(val),
3312            _ => None,
3313        }
3314    }
3315
3316    #[inline]
3317    pub fn expect_match_class(self) -> crate::PatternMatchClass {
3318        match self {
3319            Self::MatchClass(val) => val,
3320            _ => panic!("called expect on {self:?}"),
3321        }
3322    }
3323
3324    #[inline]
3325    pub fn as_match_class_mut(&mut self) -> Option<&mut crate::PatternMatchClass> {
3326        match self {
3327            Self::MatchClass(val) => Some(val),
3328            _ => None,
3329        }
3330    }
3331
3332    #[inline]
3333    pub fn as_match_class(&self) -> Option<&crate::PatternMatchClass> {
3334        match self {
3335            Self::MatchClass(val) => Some(val),
3336            _ => None,
3337        }
3338    }
3339
3340    #[inline]
3341    pub const fn is_match_star(&self) -> bool {
3342        matches!(self, Self::MatchStar(_))
3343    }
3344
3345    #[inline]
3346    pub fn match_star(self) -> Option<crate::PatternMatchStar> {
3347        match self {
3348            Self::MatchStar(val) => Some(val),
3349            _ => None,
3350        }
3351    }
3352
3353    #[inline]
3354    pub fn expect_match_star(self) -> crate::PatternMatchStar {
3355        match self {
3356            Self::MatchStar(val) => val,
3357            _ => panic!("called expect on {self:?}"),
3358        }
3359    }
3360
3361    #[inline]
3362    pub fn as_match_star_mut(&mut self) -> Option<&mut crate::PatternMatchStar> {
3363        match self {
3364            Self::MatchStar(val) => Some(val),
3365            _ => None,
3366        }
3367    }
3368
3369    #[inline]
3370    pub fn as_match_star(&self) -> Option<&crate::PatternMatchStar> {
3371        match self {
3372            Self::MatchStar(val) => Some(val),
3373            _ => None,
3374        }
3375    }
3376
3377    #[inline]
3378    pub const fn is_match_as(&self) -> bool {
3379        matches!(self, Self::MatchAs(_))
3380    }
3381
3382    #[inline]
3383    pub fn match_as(self) -> Option<crate::PatternMatchAs> {
3384        match self {
3385            Self::MatchAs(val) => Some(val),
3386            _ => None,
3387        }
3388    }
3389
3390    #[inline]
3391    pub fn expect_match_as(self) -> crate::PatternMatchAs {
3392        match self {
3393            Self::MatchAs(val) => val,
3394            _ => panic!("called expect on {self:?}"),
3395        }
3396    }
3397
3398    #[inline]
3399    pub fn as_match_as_mut(&mut self) -> Option<&mut crate::PatternMatchAs> {
3400        match self {
3401            Self::MatchAs(val) => Some(val),
3402            _ => None,
3403        }
3404    }
3405
3406    #[inline]
3407    pub fn as_match_as(&self) -> Option<&crate::PatternMatchAs> {
3408        match self {
3409            Self::MatchAs(val) => Some(val),
3410            _ => None,
3411        }
3412    }
3413
3414    #[inline]
3415    pub const fn is_match_or(&self) -> bool {
3416        matches!(self, Self::MatchOr(_))
3417    }
3418
3419    #[inline]
3420    pub fn match_or(self) -> Option<crate::PatternMatchOr> {
3421        match self {
3422            Self::MatchOr(val) => Some(val),
3423            _ => None,
3424        }
3425    }
3426
3427    #[inline]
3428    pub fn expect_match_or(self) -> crate::PatternMatchOr {
3429        match self {
3430            Self::MatchOr(val) => val,
3431            _ => panic!("called expect on {self:?}"),
3432        }
3433    }
3434
3435    #[inline]
3436    pub fn as_match_or_mut(&mut self) -> Option<&mut crate::PatternMatchOr> {
3437        match self {
3438            Self::MatchOr(val) => Some(val),
3439            _ => None,
3440        }
3441    }
3442
3443    #[inline]
3444    pub fn as_match_or(&self) -> Option<&crate::PatternMatchOr> {
3445        match self {
3446            Self::MatchOr(val) => Some(val),
3447            _ => None,
3448        }
3449    }
3450}
3451
3452/// See also [type_param](https://docs.python.org/3/library/ast.html#ast.type_param)
3453#[derive(Clone, Debug, PartialEq)]
3454#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
3455pub enum TypeParam {
3456    TypeVar(crate::TypeParamTypeVar),
3457    TypeVarTuple(crate::TypeParamTypeVarTuple),
3458    ParamSpec(crate::TypeParamParamSpec),
3459}
3460
3461impl From<crate::TypeParamTypeVar> for TypeParam {
3462    fn from(node: crate::TypeParamTypeVar) -> Self {
3463        Self::TypeVar(node)
3464    }
3465}
3466
3467impl From<crate::TypeParamTypeVarTuple> for TypeParam {
3468    fn from(node: crate::TypeParamTypeVarTuple) -> Self {
3469        Self::TypeVarTuple(node)
3470    }
3471}
3472
3473impl From<crate::TypeParamParamSpec> for TypeParam {
3474    fn from(node: crate::TypeParamParamSpec) -> Self {
3475        Self::ParamSpec(node)
3476    }
3477}
3478
3479impl ruff_text_size::Ranged for TypeParam {
3480    fn range(&self) -> ruff_text_size::TextRange {
3481        match self {
3482            Self::TypeVar(node) => node.range(),
3483            Self::TypeVarTuple(node) => node.range(),
3484            Self::ParamSpec(node) => node.range(),
3485        }
3486    }
3487}
3488
3489impl crate::HasNodeIndex for TypeParam {
3490    fn node_index(&self) -> &crate::AtomicNodeIndex {
3491        match self {
3492            Self::TypeVar(node) => node.node_index(),
3493            Self::TypeVarTuple(node) => node.node_index(),
3494            Self::ParamSpec(node) => node.node_index(),
3495        }
3496    }
3497}
3498
3499#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
3500impl TypeParam {
3501    #[inline]
3502    pub const fn is_type_var(&self) -> bool {
3503        matches!(self, Self::TypeVar(_))
3504    }
3505
3506    #[inline]
3507    pub fn type_var(self) -> Option<crate::TypeParamTypeVar> {
3508        match self {
3509            Self::TypeVar(val) => Some(val),
3510            _ => None,
3511        }
3512    }
3513
3514    #[inline]
3515    pub fn expect_type_var(self) -> crate::TypeParamTypeVar {
3516        match self {
3517            Self::TypeVar(val) => val,
3518            _ => panic!("called expect on {self:?}"),
3519        }
3520    }
3521
3522    #[inline]
3523    pub fn as_type_var_mut(&mut self) -> Option<&mut crate::TypeParamTypeVar> {
3524        match self {
3525            Self::TypeVar(val) => Some(val),
3526            _ => None,
3527        }
3528    }
3529
3530    #[inline]
3531    pub fn as_type_var(&self) -> Option<&crate::TypeParamTypeVar> {
3532        match self {
3533            Self::TypeVar(val) => Some(val),
3534            _ => None,
3535        }
3536    }
3537
3538    #[inline]
3539    pub const fn is_type_var_tuple(&self) -> bool {
3540        matches!(self, Self::TypeVarTuple(_))
3541    }
3542
3543    #[inline]
3544    pub fn type_var_tuple(self) -> Option<crate::TypeParamTypeVarTuple> {
3545        match self {
3546            Self::TypeVarTuple(val) => Some(val),
3547            _ => None,
3548        }
3549    }
3550
3551    #[inline]
3552    pub fn expect_type_var_tuple(self) -> crate::TypeParamTypeVarTuple {
3553        match self {
3554            Self::TypeVarTuple(val) => val,
3555            _ => panic!("called expect on {self:?}"),
3556        }
3557    }
3558
3559    #[inline]
3560    pub fn as_type_var_tuple_mut(&mut self) -> Option<&mut crate::TypeParamTypeVarTuple> {
3561        match self {
3562            Self::TypeVarTuple(val) => Some(val),
3563            _ => None,
3564        }
3565    }
3566
3567    #[inline]
3568    pub fn as_type_var_tuple(&self) -> Option<&crate::TypeParamTypeVarTuple> {
3569        match self {
3570            Self::TypeVarTuple(val) => Some(val),
3571            _ => None,
3572        }
3573    }
3574
3575    #[inline]
3576    pub const fn is_param_spec(&self) -> bool {
3577        matches!(self, Self::ParamSpec(_))
3578    }
3579
3580    #[inline]
3581    pub fn param_spec(self) -> Option<crate::TypeParamParamSpec> {
3582        match self {
3583            Self::ParamSpec(val) => Some(val),
3584            _ => None,
3585        }
3586    }
3587
3588    #[inline]
3589    pub fn expect_param_spec(self) -> crate::TypeParamParamSpec {
3590        match self {
3591            Self::ParamSpec(val) => val,
3592            _ => panic!("called expect on {self:?}"),
3593        }
3594    }
3595
3596    #[inline]
3597    pub fn as_param_spec_mut(&mut self) -> Option<&mut crate::TypeParamParamSpec> {
3598        match self {
3599            Self::ParamSpec(val) => Some(val),
3600            _ => None,
3601        }
3602    }
3603
3604    #[inline]
3605    pub fn as_param_spec(&self) -> Option<&crate::TypeParamParamSpec> {
3606        match self {
3607            Self::ParamSpec(val) => Some(val),
3608            _ => None,
3609        }
3610    }
3611}
3612
3613impl ruff_text_size::Ranged for crate::ModModule {
3614    fn range(&self) -> ruff_text_size::TextRange {
3615        self.range
3616    }
3617}
3618
3619impl ruff_text_size::Ranged for crate::ModExpression {
3620    fn range(&self) -> ruff_text_size::TextRange {
3621        self.range
3622    }
3623}
3624
3625impl ruff_text_size::Ranged for crate::StmtFunctionDef {
3626    fn range(&self) -> ruff_text_size::TextRange {
3627        self.range
3628    }
3629}
3630
3631impl ruff_text_size::Ranged for crate::StmtClassDef {
3632    fn range(&self) -> ruff_text_size::TextRange {
3633        self.range
3634    }
3635}
3636
3637impl ruff_text_size::Ranged for crate::StmtReturn {
3638    fn range(&self) -> ruff_text_size::TextRange {
3639        self.range
3640    }
3641}
3642
3643impl ruff_text_size::Ranged for crate::StmtDelete {
3644    fn range(&self) -> ruff_text_size::TextRange {
3645        self.range
3646    }
3647}
3648
3649impl ruff_text_size::Ranged for crate::StmtTypeAlias {
3650    fn range(&self) -> ruff_text_size::TextRange {
3651        self.range
3652    }
3653}
3654
3655impl ruff_text_size::Ranged for crate::StmtAssign {
3656    fn range(&self) -> ruff_text_size::TextRange {
3657        self.range
3658    }
3659}
3660
3661impl ruff_text_size::Ranged for crate::StmtAugAssign {
3662    fn range(&self) -> ruff_text_size::TextRange {
3663        self.range
3664    }
3665}
3666
3667impl ruff_text_size::Ranged for crate::StmtAnnAssign {
3668    fn range(&self) -> ruff_text_size::TextRange {
3669        self.range
3670    }
3671}
3672
3673impl ruff_text_size::Ranged for crate::StmtFor {
3674    fn range(&self) -> ruff_text_size::TextRange {
3675        self.range
3676    }
3677}
3678
3679impl ruff_text_size::Ranged for crate::StmtWhile {
3680    fn range(&self) -> ruff_text_size::TextRange {
3681        self.range
3682    }
3683}
3684
3685impl ruff_text_size::Ranged for crate::StmtIf {
3686    fn range(&self) -> ruff_text_size::TextRange {
3687        self.range
3688    }
3689}
3690
3691impl ruff_text_size::Ranged for crate::StmtWith {
3692    fn range(&self) -> ruff_text_size::TextRange {
3693        self.range
3694    }
3695}
3696
3697impl ruff_text_size::Ranged for crate::StmtMatch {
3698    fn range(&self) -> ruff_text_size::TextRange {
3699        self.range
3700    }
3701}
3702
3703impl ruff_text_size::Ranged for crate::StmtRaise {
3704    fn range(&self) -> ruff_text_size::TextRange {
3705        self.range
3706    }
3707}
3708
3709impl ruff_text_size::Ranged for crate::StmtTry {
3710    fn range(&self) -> ruff_text_size::TextRange {
3711        self.range
3712    }
3713}
3714
3715impl ruff_text_size::Ranged for crate::StmtAssert {
3716    fn range(&self) -> ruff_text_size::TextRange {
3717        self.range
3718    }
3719}
3720
3721impl ruff_text_size::Ranged for crate::StmtImport {
3722    fn range(&self) -> ruff_text_size::TextRange {
3723        self.range
3724    }
3725}
3726
3727impl ruff_text_size::Ranged for crate::StmtImportFrom {
3728    fn range(&self) -> ruff_text_size::TextRange {
3729        self.range
3730    }
3731}
3732
3733impl ruff_text_size::Ranged for crate::StmtGlobal {
3734    fn range(&self) -> ruff_text_size::TextRange {
3735        self.range
3736    }
3737}
3738
3739impl ruff_text_size::Ranged for crate::StmtNonlocal {
3740    fn range(&self) -> ruff_text_size::TextRange {
3741        self.range
3742    }
3743}
3744
3745impl ruff_text_size::Ranged for crate::StmtExpr {
3746    fn range(&self) -> ruff_text_size::TextRange {
3747        self.range
3748    }
3749}
3750
3751impl ruff_text_size::Ranged for crate::StmtPass {
3752    fn range(&self) -> ruff_text_size::TextRange {
3753        self.range
3754    }
3755}
3756
3757impl ruff_text_size::Ranged for crate::StmtBreak {
3758    fn range(&self) -> ruff_text_size::TextRange {
3759        self.range
3760    }
3761}
3762
3763impl ruff_text_size::Ranged for crate::StmtContinue {
3764    fn range(&self) -> ruff_text_size::TextRange {
3765        self.range
3766    }
3767}
3768
3769impl ruff_text_size::Ranged for crate::StmtIpyEscapeCommand {
3770    fn range(&self) -> ruff_text_size::TextRange {
3771        self.range
3772    }
3773}
3774
3775impl ruff_text_size::Ranged for crate::ExprBoolOp {
3776    fn range(&self) -> ruff_text_size::TextRange {
3777        self.range
3778    }
3779}
3780
3781impl ruff_text_size::Ranged for crate::ExprNamed {
3782    fn range(&self) -> ruff_text_size::TextRange {
3783        self.range
3784    }
3785}
3786
3787impl ruff_text_size::Ranged for crate::ExprBinOp {
3788    fn range(&self) -> ruff_text_size::TextRange {
3789        self.range
3790    }
3791}
3792
3793impl ruff_text_size::Ranged for crate::ExprUnaryOp {
3794    fn range(&self) -> ruff_text_size::TextRange {
3795        self.range
3796    }
3797}
3798
3799impl ruff_text_size::Ranged for crate::ExprLambda {
3800    fn range(&self) -> ruff_text_size::TextRange {
3801        self.range
3802    }
3803}
3804
3805impl ruff_text_size::Ranged for crate::ExprIf {
3806    fn range(&self) -> ruff_text_size::TextRange {
3807        self.range
3808    }
3809}
3810
3811impl ruff_text_size::Ranged for crate::ExprDict {
3812    fn range(&self) -> ruff_text_size::TextRange {
3813        self.range
3814    }
3815}
3816
3817impl ruff_text_size::Ranged for crate::ExprSet {
3818    fn range(&self) -> ruff_text_size::TextRange {
3819        self.range
3820    }
3821}
3822
3823impl ruff_text_size::Ranged for crate::ExprListComp {
3824    fn range(&self) -> ruff_text_size::TextRange {
3825        self.range
3826    }
3827}
3828
3829impl ruff_text_size::Ranged for crate::ExprSetComp {
3830    fn range(&self) -> ruff_text_size::TextRange {
3831        self.range
3832    }
3833}
3834
3835impl ruff_text_size::Ranged for crate::ExprDictComp {
3836    fn range(&self) -> ruff_text_size::TextRange {
3837        self.range
3838    }
3839}
3840
3841impl ruff_text_size::Ranged for crate::ExprGenerator {
3842    fn range(&self) -> ruff_text_size::TextRange {
3843        self.range
3844    }
3845}
3846
3847impl ruff_text_size::Ranged for crate::ExprAwait {
3848    fn range(&self) -> ruff_text_size::TextRange {
3849        self.range
3850    }
3851}
3852
3853impl ruff_text_size::Ranged for crate::ExprYield {
3854    fn range(&self) -> ruff_text_size::TextRange {
3855        self.range
3856    }
3857}
3858
3859impl ruff_text_size::Ranged for crate::ExprYieldFrom {
3860    fn range(&self) -> ruff_text_size::TextRange {
3861        self.range
3862    }
3863}
3864
3865impl ruff_text_size::Ranged for crate::ExprCompare {
3866    fn range(&self) -> ruff_text_size::TextRange {
3867        self.range
3868    }
3869}
3870
3871impl ruff_text_size::Ranged for crate::ExprFString {
3872    fn range(&self) -> ruff_text_size::TextRange {
3873        self.range
3874    }
3875}
3876
3877impl ruff_text_size::Ranged for crate::ExprTString {
3878    fn range(&self) -> ruff_text_size::TextRange {
3879        self.range
3880    }
3881}
3882
3883impl ruff_text_size::Ranged for crate::ExprStringLiteral {
3884    fn range(&self) -> ruff_text_size::TextRange {
3885        self.range
3886    }
3887}
3888
3889impl ruff_text_size::Ranged for crate::ExprBytesLiteral {
3890    fn range(&self) -> ruff_text_size::TextRange {
3891        self.range
3892    }
3893}
3894
3895impl ruff_text_size::Ranged for crate::ExprNumberLiteral {
3896    fn range(&self) -> ruff_text_size::TextRange {
3897        self.range
3898    }
3899}
3900
3901impl ruff_text_size::Ranged for crate::ExprBooleanLiteral {
3902    fn range(&self) -> ruff_text_size::TextRange {
3903        self.range
3904    }
3905}
3906
3907impl ruff_text_size::Ranged for crate::ExprNoneLiteral {
3908    fn range(&self) -> ruff_text_size::TextRange {
3909        self.range
3910    }
3911}
3912
3913impl ruff_text_size::Ranged for crate::ExprEllipsisLiteral {
3914    fn range(&self) -> ruff_text_size::TextRange {
3915        self.range
3916    }
3917}
3918
3919impl ruff_text_size::Ranged for crate::ExprConstant {
3920    fn range(&self) -> ruff_text_size::TextRange {
3921        self.range
3922    }
3923}
3924
3925impl ruff_text_size::Ranged for crate::ExprAttribute {
3926    fn range(&self) -> ruff_text_size::TextRange {
3927        self.range
3928    }
3929}
3930
3931impl ruff_text_size::Ranged for crate::ExprSubscript {
3932    fn range(&self) -> ruff_text_size::TextRange {
3933        self.range
3934    }
3935}
3936
3937impl ruff_text_size::Ranged for crate::ExprStarred {
3938    fn range(&self) -> ruff_text_size::TextRange {
3939        self.range
3940    }
3941}
3942
3943impl ruff_text_size::Ranged for crate::ExprName {
3944    fn range(&self) -> ruff_text_size::TextRange {
3945        self.range
3946    }
3947}
3948
3949impl ruff_text_size::Ranged for crate::ExprList {
3950    fn range(&self) -> ruff_text_size::TextRange {
3951        self.range
3952    }
3953}
3954
3955impl ruff_text_size::Ranged for crate::ExprTuple {
3956    fn range(&self) -> ruff_text_size::TextRange {
3957        self.range
3958    }
3959}
3960
3961impl ruff_text_size::Ranged for crate::ExprSlice {
3962    fn range(&self) -> ruff_text_size::TextRange {
3963        self.range
3964    }
3965}
3966
3967impl ruff_text_size::Ranged for crate::ExprIpyEscapeCommand {
3968    fn range(&self) -> ruff_text_size::TextRange {
3969        self.range
3970    }
3971}
3972
3973impl ruff_text_size::Ranged for crate::ExceptHandlerExceptHandler {
3974    fn range(&self) -> ruff_text_size::TextRange {
3975        self.range
3976    }
3977}
3978
3979impl ruff_text_size::Ranged for crate::InterpolatedElement {
3980    fn range(&self) -> ruff_text_size::TextRange {
3981        self.range
3982    }
3983}
3984
3985impl ruff_text_size::Ranged for crate::InterpolatedStringLiteralElement {
3986    fn range(&self) -> ruff_text_size::TextRange {
3987        self.range
3988    }
3989}
3990
3991impl ruff_text_size::Ranged for crate::PatternMatchValue {
3992    fn range(&self) -> ruff_text_size::TextRange {
3993        self.range
3994    }
3995}
3996
3997impl ruff_text_size::Ranged for crate::PatternMatchSingleton {
3998    fn range(&self) -> ruff_text_size::TextRange {
3999        self.range
4000    }
4001}
4002
4003impl ruff_text_size::Ranged for crate::PatternMatchSequence {
4004    fn range(&self) -> ruff_text_size::TextRange {
4005        self.range
4006    }
4007}
4008
4009impl ruff_text_size::Ranged for crate::PatternMatchMapping {
4010    fn range(&self) -> ruff_text_size::TextRange {
4011        self.range
4012    }
4013}
4014
4015impl ruff_text_size::Ranged for crate::PatternMatchClass {
4016    fn range(&self) -> ruff_text_size::TextRange {
4017        self.range
4018    }
4019}
4020
4021impl ruff_text_size::Ranged for crate::PatternMatchStar {
4022    fn range(&self) -> ruff_text_size::TextRange {
4023        self.range
4024    }
4025}
4026
4027impl ruff_text_size::Ranged for crate::PatternMatchAs {
4028    fn range(&self) -> ruff_text_size::TextRange {
4029        self.range
4030    }
4031}
4032
4033impl ruff_text_size::Ranged for crate::PatternMatchOr {
4034    fn range(&self) -> ruff_text_size::TextRange {
4035        self.range
4036    }
4037}
4038
4039impl ruff_text_size::Ranged for crate::TypeParamTypeVar {
4040    fn range(&self) -> ruff_text_size::TextRange {
4041        self.range
4042    }
4043}
4044
4045impl ruff_text_size::Ranged for crate::TypeParamTypeVarTuple {
4046    fn range(&self) -> ruff_text_size::TextRange {
4047        self.range
4048    }
4049}
4050
4051impl ruff_text_size::Ranged for crate::TypeParamParamSpec {
4052    fn range(&self) -> ruff_text_size::TextRange {
4053        self.range
4054    }
4055}
4056
4057impl ruff_text_size::Ranged for crate::InterpolatedStringFormatSpec {
4058    fn range(&self) -> ruff_text_size::TextRange {
4059        self.range
4060    }
4061}
4062
4063impl ruff_text_size::Ranged for crate::PatternArguments {
4064    fn range(&self) -> ruff_text_size::TextRange {
4065        self.range
4066    }
4067}
4068
4069impl ruff_text_size::Ranged for crate::PatternKeyword {
4070    fn range(&self) -> ruff_text_size::TextRange {
4071        self.range
4072    }
4073}
4074
4075impl ruff_text_size::Ranged for crate::Comprehension {
4076    fn range(&self) -> ruff_text_size::TextRange {
4077        self.range
4078    }
4079}
4080
4081impl ruff_text_size::Ranged for crate::Arguments {
4082    fn range(&self) -> ruff_text_size::TextRange {
4083        self.range
4084    }
4085}
4086
4087impl ruff_text_size::Ranged for crate::Parameters {
4088    fn range(&self) -> ruff_text_size::TextRange {
4089        self.range
4090    }
4091}
4092
4093impl ruff_text_size::Ranged for crate::Parameter {
4094    fn range(&self) -> ruff_text_size::TextRange {
4095        self.range
4096    }
4097}
4098
4099impl ruff_text_size::Ranged for crate::ParameterWithDefault {
4100    fn range(&self) -> ruff_text_size::TextRange {
4101        self.range
4102    }
4103}
4104
4105impl ruff_text_size::Ranged for crate::Keyword {
4106    fn range(&self) -> ruff_text_size::TextRange {
4107        self.range
4108    }
4109}
4110
4111impl ruff_text_size::Ranged for crate::Alias {
4112    fn range(&self) -> ruff_text_size::TextRange {
4113        self.range
4114    }
4115}
4116
4117impl ruff_text_size::Ranged for crate::WithItem {
4118    fn range(&self) -> ruff_text_size::TextRange {
4119        self.range
4120    }
4121}
4122
4123impl ruff_text_size::Ranged for crate::MatchCase {
4124    fn range(&self) -> ruff_text_size::TextRange {
4125        self.range
4126    }
4127}
4128
4129impl ruff_text_size::Ranged for crate::Decorator {
4130    fn range(&self) -> ruff_text_size::TextRange {
4131        self.range
4132    }
4133}
4134
4135impl ruff_text_size::Ranged for crate::ElifElseClause {
4136    fn range(&self) -> ruff_text_size::TextRange {
4137        self.range
4138    }
4139}
4140
4141impl ruff_text_size::Ranged for crate::TypeParams {
4142    fn range(&self) -> ruff_text_size::TextRange {
4143        self.range
4144    }
4145}
4146
4147impl ruff_text_size::Ranged for crate::FString {
4148    fn range(&self) -> ruff_text_size::TextRange {
4149        self.range
4150    }
4151}
4152
4153impl ruff_text_size::Ranged for crate::TString {
4154    fn range(&self) -> ruff_text_size::TextRange {
4155        self.range
4156    }
4157}
4158
4159impl ruff_text_size::Ranged for crate::StringLiteral {
4160    fn range(&self) -> ruff_text_size::TextRange {
4161        self.range
4162    }
4163}
4164
4165impl ruff_text_size::Ranged for crate::BytesLiteral {
4166    fn range(&self) -> ruff_text_size::TextRange {
4167        self.range
4168    }
4169}
4170
4171impl ruff_text_size::Ranged for crate::Identifier {
4172    fn range(&self) -> ruff_text_size::TextRange {
4173        self.range
4174    }
4175}
4176
4177impl crate::HasNodeIndex for crate::ModModule {
4178    fn node_index(&self) -> &crate::AtomicNodeIndex {
4179        &self.node_index
4180    }
4181}
4182
4183impl crate::HasNodeIndex for crate::ModExpression {
4184    fn node_index(&self) -> &crate::AtomicNodeIndex {
4185        &self.node_index
4186    }
4187}
4188
4189impl crate::HasNodeIndex for crate::StmtFunctionDef {
4190    fn node_index(&self) -> &crate::AtomicNodeIndex {
4191        &self.node_index
4192    }
4193}
4194
4195impl crate::HasNodeIndex for crate::StmtClassDef {
4196    fn node_index(&self) -> &crate::AtomicNodeIndex {
4197        &self.node_index
4198    }
4199}
4200
4201impl crate::HasNodeIndex for crate::StmtReturn {
4202    fn node_index(&self) -> &crate::AtomicNodeIndex {
4203        &self.node_index
4204    }
4205}
4206
4207impl crate::HasNodeIndex for crate::StmtDelete {
4208    fn node_index(&self) -> &crate::AtomicNodeIndex {
4209        &self.node_index
4210    }
4211}
4212
4213impl crate::HasNodeIndex for crate::StmtTypeAlias {
4214    fn node_index(&self) -> &crate::AtomicNodeIndex {
4215        &self.node_index
4216    }
4217}
4218
4219impl crate::HasNodeIndex for crate::StmtAssign {
4220    fn node_index(&self) -> &crate::AtomicNodeIndex {
4221        &self.node_index
4222    }
4223}
4224
4225impl crate::HasNodeIndex for crate::StmtAugAssign {
4226    fn node_index(&self) -> &crate::AtomicNodeIndex {
4227        &self.node_index
4228    }
4229}
4230
4231impl crate::HasNodeIndex for crate::StmtAnnAssign {
4232    fn node_index(&self) -> &crate::AtomicNodeIndex {
4233        &self.node_index
4234    }
4235}
4236
4237impl crate::HasNodeIndex for crate::StmtFor {
4238    fn node_index(&self) -> &crate::AtomicNodeIndex {
4239        &self.node_index
4240    }
4241}
4242
4243impl crate::HasNodeIndex for crate::StmtWhile {
4244    fn node_index(&self) -> &crate::AtomicNodeIndex {
4245        &self.node_index
4246    }
4247}
4248
4249impl crate::HasNodeIndex for crate::StmtIf {
4250    fn node_index(&self) -> &crate::AtomicNodeIndex {
4251        &self.node_index
4252    }
4253}
4254
4255impl crate::HasNodeIndex for crate::StmtWith {
4256    fn node_index(&self) -> &crate::AtomicNodeIndex {
4257        &self.node_index
4258    }
4259}
4260
4261impl crate::HasNodeIndex for crate::StmtMatch {
4262    fn node_index(&self) -> &crate::AtomicNodeIndex {
4263        &self.node_index
4264    }
4265}
4266
4267impl crate::HasNodeIndex for crate::StmtRaise {
4268    fn node_index(&self) -> &crate::AtomicNodeIndex {
4269        &self.node_index
4270    }
4271}
4272
4273impl crate::HasNodeIndex for crate::StmtTry {
4274    fn node_index(&self) -> &crate::AtomicNodeIndex {
4275        &self.node_index
4276    }
4277}
4278
4279impl crate::HasNodeIndex for crate::StmtAssert {
4280    fn node_index(&self) -> &crate::AtomicNodeIndex {
4281        &self.node_index
4282    }
4283}
4284
4285impl crate::HasNodeIndex for crate::StmtImport {
4286    fn node_index(&self) -> &crate::AtomicNodeIndex {
4287        &self.node_index
4288    }
4289}
4290
4291impl crate::HasNodeIndex for crate::StmtImportFrom {
4292    fn node_index(&self) -> &crate::AtomicNodeIndex {
4293        &self.node_index
4294    }
4295}
4296
4297impl crate::HasNodeIndex for crate::StmtGlobal {
4298    fn node_index(&self) -> &crate::AtomicNodeIndex {
4299        &self.node_index
4300    }
4301}
4302
4303impl crate::HasNodeIndex for crate::StmtNonlocal {
4304    fn node_index(&self) -> &crate::AtomicNodeIndex {
4305        &self.node_index
4306    }
4307}
4308
4309impl crate::HasNodeIndex for crate::StmtExpr {
4310    fn node_index(&self) -> &crate::AtomicNodeIndex {
4311        &self.node_index
4312    }
4313}
4314
4315impl crate::HasNodeIndex for crate::StmtPass {
4316    fn node_index(&self) -> &crate::AtomicNodeIndex {
4317        &self.node_index
4318    }
4319}
4320
4321impl crate::HasNodeIndex for crate::StmtBreak {
4322    fn node_index(&self) -> &crate::AtomicNodeIndex {
4323        &self.node_index
4324    }
4325}
4326
4327impl crate::HasNodeIndex for crate::StmtContinue {
4328    fn node_index(&self) -> &crate::AtomicNodeIndex {
4329        &self.node_index
4330    }
4331}
4332
4333impl crate::HasNodeIndex for crate::StmtIpyEscapeCommand {
4334    fn node_index(&self) -> &crate::AtomicNodeIndex {
4335        &self.node_index
4336    }
4337}
4338
4339impl crate::HasNodeIndex for crate::ExprBoolOp {
4340    fn node_index(&self) -> &crate::AtomicNodeIndex {
4341        &self.node_index
4342    }
4343}
4344
4345impl crate::HasNodeIndex for crate::ExprNamed {
4346    fn node_index(&self) -> &crate::AtomicNodeIndex {
4347        &self.node_index
4348    }
4349}
4350
4351impl crate::HasNodeIndex for crate::ExprBinOp {
4352    fn node_index(&self) -> &crate::AtomicNodeIndex {
4353        &self.node_index
4354    }
4355}
4356
4357impl crate::HasNodeIndex for crate::ExprUnaryOp {
4358    fn node_index(&self) -> &crate::AtomicNodeIndex {
4359        &self.node_index
4360    }
4361}
4362
4363impl crate::HasNodeIndex for crate::ExprLambda {
4364    fn node_index(&self) -> &crate::AtomicNodeIndex {
4365        &self.node_index
4366    }
4367}
4368
4369impl crate::HasNodeIndex for crate::ExprIf {
4370    fn node_index(&self) -> &crate::AtomicNodeIndex {
4371        &self.node_index
4372    }
4373}
4374
4375impl crate::HasNodeIndex for crate::ExprDict {
4376    fn node_index(&self) -> &crate::AtomicNodeIndex {
4377        &self.node_index
4378    }
4379}
4380
4381impl crate::HasNodeIndex for crate::ExprSet {
4382    fn node_index(&self) -> &crate::AtomicNodeIndex {
4383        &self.node_index
4384    }
4385}
4386
4387impl crate::HasNodeIndex for crate::ExprListComp {
4388    fn node_index(&self) -> &crate::AtomicNodeIndex {
4389        &self.node_index
4390    }
4391}
4392
4393impl crate::HasNodeIndex for crate::ExprSetComp {
4394    fn node_index(&self) -> &crate::AtomicNodeIndex {
4395        &self.node_index
4396    }
4397}
4398
4399impl crate::HasNodeIndex for crate::ExprDictComp {
4400    fn node_index(&self) -> &crate::AtomicNodeIndex {
4401        &self.node_index
4402    }
4403}
4404
4405impl crate::HasNodeIndex for crate::ExprGenerator {
4406    fn node_index(&self) -> &crate::AtomicNodeIndex {
4407        &self.node_index
4408    }
4409}
4410
4411impl crate::HasNodeIndex for crate::ExprAwait {
4412    fn node_index(&self) -> &crate::AtomicNodeIndex {
4413        &self.node_index
4414    }
4415}
4416
4417impl crate::HasNodeIndex for crate::ExprYield {
4418    fn node_index(&self) -> &crate::AtomicNodeIndex {
4419        &self.node_index
4420    }
4421}
4422
4423impl crate::HasNodeIndex for crate::ExprYieldFrom {
4424    fn node_index(&self) -> &crate::AtomicNodeIndex {
4425        &self.node_index
4426    }
4427}
4428
4429impl crate::HasNodeIndex for crate::ExprCompare {
4430    fn node_index(&self) -> &crate::AtomicNodeIndex {
4431        &self.node_index
4432    }
4433}
4434
4435impl crate::HasNodeIndex for crate::ExprCall {
4436    fn node_index(&self) -> &crate::AtomicNodeIndex {
4437        &self.node_index
4438    }
4439}
4440
4441impl crate::HasNodeIndex for crate::ExprFString {
4442    fn node_index(&self) -> &crate::AtomicNodeIndex {
4443        &self.node_index
4444    }
4445}
4446
4447impl crate::HasNodeIndex for crate::ExprTString {
4448    fn node_index(&self) -> &crate::AtomicNodeIndex {
4449        &self.node_index
4450    }
4451}
4452
4453impl crate::HasNodeIndex for crate::ExprStringLiteral {
4454    fn node_index(&self) -> &crate::AtomicNodeIndex {
4455        &self.node_index
4456    }
4457}
4458
4459impl crate::HasNodeIndex for crate::ExprBytesLiteral {
4460    fn node_index(&self) -> &crate::AtomicNodeIndex {
4461        &self.node_index
4462    }
4463}
4464
4465impl crate::HasNodeIndex for crate::ExprNumberLiteral {
4466    fn node_index(&self) -> &crate::AtomicNodeIndex {
4467        &self.node_index
4468    }
4469}
4470
4471impl crate::HasNodeIndex for crate::ExprBooleanLiteral {
4472    fn node_index(&self) -> &crate::AtomicNodeIndex {
4473        &self.node_index
4474    }
4475}
4476
4477impl crate::HasNodeIndex for crate::ExprNoneLiteral {
4478    fn node_index(&self) -> &crate::AtomicNodeIndex {
4479        &self.node_index
4480    }
4481}
4482
4483impl crate::HasNodeIndex for crate::ExprEllipsisLiteral {
4484    fn node_index(&self) -> &crate::AtomicNodeIndex {
4485        &self.node_index
4486    }
4487}
4488
4489impl crate::HasNodeIndex for crate::ExprConstant {
4490    fn node_index(&self) -> &crate::AtomicNodeIndex {
4491        &self.node_index
4492    }
4493}
4494
4495impl crate::HasNodeIndex for crate::ExprAttribute {
4496    fn node_index(&self) -> &crate::AtomicNodeIndex {
4497        &self.node_index
4498    }
4499}
4500
4501impl crate::HasNodeIndex for crate::ExprSubscript {
4502    fn node_index(&self) -> &crate::AtomicNodeIndex {
4503        &self.node_index
4504    }
4505}
4506
4507impl crate::HasNodeIndex for crate::ExprStarred {
4508    fn node_index(&self) -> &crate::AtomicNodeIndex {
4509        &self.node_index
4510    }
4511}
4512
4513impl crate::HasNodeIndex for crate::ExprName {
4514    fn node_index(&self) -> &crate::AtomicNodeIndex {
4515        &self.node_index
4516    }
4517}
4518
4519impl crate::HasNodeIndex for crate::ExprList {
4520    fn node_index(&self) -> &crate::AtomicNodeIndex {
4521        &self.node_index
4522    }
4523}
4524
4525impl crate::HasNodeIndex for crate::ExprTuple {
4526    fn node_index(&self) -> &crate::AtomicNodeIndex {
4527        &self.node_index
4528    }
4529}
4530
4531impl crate::HasNodeIndex for crate::ExprSlice {
4532    fn node_index(&self) -> &crate::AtomicNodeIndex {
4533        &self.node_index
4534    }
4535}
4536
4537impl crate::HasNodeIndex for crate::ExprIpyEscapeCommand {
4538    fn node_index(&self) -> &crate::AtomicNodeIndex {
4539        &self.node_index
4540    }
4541}
4542
4543impl crate::HasNodeIndex for crate::ExceptHandlerExceptHandler {
4544    fn node_index(&self) -> &crate::AtomicNodeIndex {
4545        &self.node_index
4546    }
4547}
4548
4549impl crate::HasNodeIndex for crate::InterpolatedElement {
4550    fn node_index(&self) -> &crate::AtomicNodeIndex {
4551        &self.node_index
4552    }
4553}
4554
4555impl crate::HasNodeIndex for crate::InterpolatedStringLiteralElement {
4556    fn node_index(&self) -> &crate::AtomicNodeIndex {
4557        &self.node_index
4558    }
4559}
4560
4561impl crate::HasNodeIndex for crate::PatternMatchValue {
4562    fn node_index(&self) -> &crate::AtomicNodeIndex {
4563        &self.node_index
4564    }
4565}
4566
4567impl crate::HasNodeIndex for crate::PatternMatchSingleton {
4568    fn node_index(&self) -> &crate::AtomicNodeIndex {
4569        &self.node_index
4570    }
4571}
4572
4573impl crate::HasNodeIndex for crate::PatternMatchSequence {
4574    fn node_index(&self) -> &crate::AtomicNodeIndex {
4575        &self.node_index
4576    }
4577}
4578
4579impl crate::HasNodeIndex for crate::PatternMatchMapping {
4580    fn node_index(&self) -> &crate::AtomicNodeIndex {
4581        &self.node_index
4582    }
4583}
4584
4585impl crate::HasNodeIndex for crate::PatternMatchClass {
4586    fn node_index(&self) -> &crate::AtomicNodeIndex {
4587        &self.node_index
4588    }
4589}
4590
4591impl crate::HasNodeIndex for crate::PatternMatchStar {
4592    fn node_index(&self) -> &crate::AtomicNodeIndex {
4593        &self.node_index
4594    }
4595}
4596
4597impl crate::HasNodeIndex for crate::PatternMatchAs {
4598    fn node_index(&self) -> &crate::AtomicNodeIndex {
4599        &self.node_index
4600    }
4601}
4602
4603impl crate::HasNodeIndex for crate::PatternMatchOr {
4604    fn node_index(&self) -> &crate::AtomicNodeIndex {
4605        &self.node_index
4606    }
4607}
4608
4609impl crate::HasNodeIndex for crate::TypeParamTypeVar {
4610    fn node_index(&self) -> &crate::AtomicNodeIndex {
4611        &self.node_index
4612    }
4613}
4614
4615impl crate::HasNodeIndex for crate::TypeParamTypeVarTuple {
4616    fn node_index(&self) -> &crate::AtomicNodeIndex {
4617        &self.node_index
4618    }
4619}
4620
4621impl crate::HasNodeIndex for crate::TypeParamParamSpec {
4622    fn node_index(&self) -> &crate::AtomicNodeIndex {
4623        &self.node_index
4624    }
4625}
4626
4627impl crate::HasNodeIndex for crate::InterpolatedStringFormatSpec {
4628    fn node_index(&self) -> &crate::AtomicNodeIndex {
4629        &self.node_index
4630    }
4631}
4632
4633impl crate::HasNodeIndex for crate::PatternArguments {
4634    fn node_index(&self) -> &crate::AtomicNodeIndex {
4635        &self.node_index
4636    }
4637}
4638
4639impl crate::HasNodeIndex for crate::PatternKeyword {
4640    fn node_index(&self) -> &crate::AtomicNodeIndex {
4641        &self.node_index
4642    }
4643}
4644
4645impl crate::HasNodeIndex for crate::Comprehension {
4646    fn node_index(&self) -> &crate::AtomicNodeIndex {
4647        &self.node_index
4648    }
4649}
4650
4651impl crate::HasNodeIndex for crate::Arguments {
4652    fn node_index(&self) -> &crate::AtomicNodeIndex {
4653        &self.node_index
4654    }
4655}
4656
4657impl crate::HasNodeIndex for crate::Parameters {
4658    fn node_index(&self) -> &crate::AtomicNodeIndex {
4659        &self.node_index
4660    }
4661}
4662
4663impl crate::HasNodeIndex for crate::Parameter {
4664    fn node_index(&self) -> &crate::AtomicNodeIndex {
4665        &self.node_index
4666    }
4667}
4668
4669impl crate::HasNodeIndex for crate::ParameterWithDefault {
4670    fn node_index(&self) -> &crate::AtomicNodeIndex {
4671        &self.node_index
4672    }
4673}
4674
4675impl crate::HasNodeIndex for crate::Keyword {
4676    fn node_index(&self) -> &crate::AtomicNodeIndex {
4677        &self.node_index
4678    }
4679}
4680
4681impl crate::HasNodeIndex for crate::Alias {
4682    fn node_index(&self) -> &crate::AtomicNodeIndex {
4683        &self.node_index
4684    }
4685}
4686
4687impl crate::HasNodeIndex for crate::WithItem {
4688    fn node_index(&self) -> &crate::AtomicNodeIndex {
4689        &self.node_index
4690    }
4691}
4692
4693impl crate::HasNodeIndex for crate::MatchCase {
4694    fn node_index(&self) -> &crate::AtomicNodeIndex {
4695        &self.node_index
4696    }
4697}
4698
4699impl crate::HasNodeIndex for crate::Decorator {
4700    fn node_index(&self) -> &crate::AtomicNodeIndex {
4701        &self.node_index
4702    }
4703}
4704
4705impl crate::HasNodeIndex for crate::ElifElseClause {
4706    fn node_index(&self) -> &crate::AtomicNodeIndex {
4707        &self.node_index
4708    }
4709}
4710
4711impl crate::HasNodeIndex for crate::TypeParams {
4712    fn node_index(&self) -> &crate::AtomicNodeIndex {
4713        &self.node_index
4714    }
4715}
4716
4717impl crate::HasNodeIndex for crate::FString {
4718    fn node_index(&self) -> &crate::AtomicNodeIndex {
4719        &self.node_index
4720    }
4721}
4722
4723impl crate::HasNodeIndex for crate::TString {
4724    fn node_index(&self) -> &crate::AtomicNodeIndex {
4725        &self.node_index
4726    }
4727}
4728
4729impl crate::HasNodeIndex for crate::StringLiteral {
4730    fn node_index(&self) -> &crate::AtomicNodeIndex {
4731        &self.node_index
4732    }
4733}
4734
4735impl crate::HasNodeIndex for crate::BytesLiteral {
4736    fn node_index(&self) -> &crate::AtomicNodeIndex {
4737        &self.node_index
4738    }
4739}
4740
4741impl crate::HasNodeIndex for crate::Identifier {
4742    fn node_index(&self) -> &crate::AtomicNodeIndex {
4743        &self.node_index
4744    }
4745}
4746
4747impl Mod {
4748    #[allow(unused)]
4749    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4750    where
4751        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4752    {
4753        match self {
4754            Mod::Module(node) => node.visit_source_order(visitor),
4755            Mod::Expression(node) => node.visit_source_order(visitor),
4756        }
4757    }
4758}
4759
4760impl Stmt {
4761    #[allow(unused)]
4762    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4763    where
4764        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4765    {
4766        match self {
4767            Stmt::FunctionDef(node) => node.visit_source_order(visitor),
4768            Stmt::ClassDef(node) => node.visit_source_order(visitor),
4769            Stmt::Return(node) => node.visit_source_order(visitor),
4770            Stmt::Delete(node) => node.visit_source_order(visitor),
4771            Stmt::TypeAlias(node) => node.visit_source_order(visitor),
4772            Stmt::Assign(node) => node.visit_source_order(visitor),
4773            Stmt::AugAssign(node) => node.visit_source_order(visitor),
4774            Stmt::AnnAssign(node) => node.visit_source_order(visitor),
4775            Stmt::For(node) => node.visit_source_order(visitor),
4776            Stmt::While(node) => node.visit_source_order(visitor),
4777            Stmt::If(node) => node.visit_source_order(visitor),
4778            Stmt::With(node) => node.visit_source_order(visitor),
4779            Stmt::Match(node) => node.visit_source_order(visitor),
4780            Stmt::Raise(node) => node.visit_source_order(visitor),
4781            Stmt::Try(node) => node.visit_source_order(visitor),
4782            Stmt::Assert(node) => node.visit_source_order(visitor),
4783            Stmt::Import(node) => node.visit_source_order(visitor),
4784            Stmt::ImportFrom(node) => node.visit_source_order(visitor),
4785            Stmt::Global(node) => node.visit_source_order(visitor),
4786            Stmt::Nonlocal(node) => node.visit_source_order(visitor),
4787            Stmt::Expr(node) => node.visit_source_order(visitor),
4788            Stmt::Pass(node) => node.visit_source_order(visitor),
4789            Stmt::Break(node) => node.visit_source_order(visitor),
4790            Stmt::Continue(node) => node.visit_source_order(visitor),
4791            Stmt::IpyEscapeCommand(node) => node.visit_source_order(visitor),
4792        }
4793    }
4794}
4795
4796impl Expr {
4797    #[allow(unused)]
4798    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4799    where
4800        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4801    {
4802        match self {
4803            Expr::BoolOp(node) => node.visit_source_order(visitor),
4804            Expr::Named(node) => node.visit_source_order(visitor),
4805            Expr::BinOp(node) => node.visit_source_order(visitor),
4806            Expr::UnaryOp(node) => node.visit_source_order(visitor),
4807            Expr::Lambda(node) => node.visit_source_order(visitor),
4808            Expr::If(node) => node.visit_source_order(visitor),
4809            Expr::Dict(node) => node.visit_source_order(visitor),
4810            Expr::Set(node) => node.visit_source_order(visitor),
4811            Expr::ListComp(node) => node.visit_source_order(visitor),
4812            Expr::SetComp(node) => node.visit_source_order(visitor),
4813            Expr::DictComp(node) => node.visit_source_order(visitor),
4814            Expr::Generator(node) => node.visit_source_order(visitor),
4815            Expr::Await(node) => node.visit_source_order(visitor),
4816            Expr::Yield(node) => node.visit_source_order(visitor),
4817            Expr::YieldFrom(node) => node.visit_source_order(visitor),
4818            Expr::Compare(node) => node.visit_source_order(visitor),
4819            Expr::Call(node) => node.visit_source_order(visitor),
4820            Expr::FString(node) => node.visit_source_order(visitor),
4821            Expr::TString(node) => node.visit_source_order(visitor),
4822            Expr::StringLiteral(node) => node.visit_source_order(visitor),
4823            Expr::BytesLiteral(node) => node.visit_source_order(visitor),
4824            Expr::NumberLiteral(node) => node.visit_source_order(visitor),
4825            Expr::BooleanLiteral(node) => node.visit_source_order(visitor),
4826            Expr::NoneLiteral(node) => node.visit_source_order(visitor),
4827            Expr::EllipsisLiteral(node) => node.visit_source_order(visitor),
4828            Expr::Constant(node) => node.visit_source_order(visitor),
4829            Expr::Attribute(node) => node.visit_source_order(visitor),
4830            Expr::Subscript(node) => node.visit_source_order(visitor),
4831            Expr::Starred(node) => node.visit_source_order(visitor),
4832            Expr::Name(node) => node.visit_source_order(visitor),
4833            Expr::List(node) => node.visit_source_order(visitor),
4834            Expr::Tuple(node) => node.visit_source_order(visitor),
4835            Expr::Slice(node) => node.visit_source_order(visitor),
4836            Expr::IpyEscapeCommand(node) => node.visit_source_order(visitor),
4837        }
4838    }
4839}
4840
4841impl ExceptHandler {
4842    #[allow(unused)]
4843    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4844    where
4845        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4846    {
4847        match self {
4848            ExceptHandler::ExceptHandler(node) => node.visit_source_order(visitor),
4849        }
4850    }
4851}
4852
4853impl InterpolatedStringElement {
4854    #[allow(unused)]
4855    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4856    where
4857        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4858    {
4859        match self {
4860            InterpolatedStringElement::Interpolation(node) => node.visit_source_order(visitor),
4861            InterpolatedStringElement::Literal(node) => node.visit_source_order(visitor),
4862        }
4863    }
4864}
4865
4866impl Pattern {
4867    #[allow(unused)]
4868    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4869    where
4870        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4871    {
4872        match self {
4873            Pattern::MatchValue(node) => node.visit_source_order(visitor),
4874            Pattern::MatchSingleton(node) => node.visit_source_order(visitor),
4875            Pattern::MatchSequence(node) => node.visit_source_order(visitor),
4876            Pattern::MatchMapping(node) => node.visit_source_order(visitor),
4877            Pattern::MatchClass(node) => node.visit_source_order(visitor),
4878            Pattern::MatchStar(node) => node.visit_source_order(visitor),
4879            Pattern::MatchAs(node) => node.visit_source_order(visitor),
4880            Pattern::MatchOr(node) => node.visit_source_order(visitor),
4881        }
4882    }
4883}
4884
4885impl TypeParam {
4886    #[allow(unused)]
4887    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4888    where
4889        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4890    {
4891        match self {
4892            TypeParam::TypeVar(node) => node.visit_source_order(visitor),
4893            TypeParam::TypeVarTuple(node) => node.visit_source_order(visitor),
4894            TypeParam::ParamSpec(node) => node.visit_source_order(visitor),
4895        }
4896    }
4897}
4898
4899/// See also [mod](https://docs.python.org/3/library/ast.html#ast.mod)
4900#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
4901#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
4902pub enum ModRef<'a> {
4903    Module(&'a crate::ModModule),
4904    Expression(&'a crate::ModExpression),
4905}
4906
4907impl<'a> From<&'a Mod> for ModRef<'a> {
4908    fn from(node: &'a Mod) -> Self {
4909        match node {
4910            Mod::Module(node) => ModRef::Module(node),
4911            Mod::Expression(node) => ModRef::Expression(node),
4912        }
4913    }
4914}
4915
4916impl<'a> From<&'a crate::ModModule> for ModRef<'a> {
4917    fn from(node: &'a crate::ModModule) -> Self {
4918        Self::Module(node)
4919    }
4920}
4921
4922impl<'a> From<&'a crate::ModExpression> for ModRef<'a> {
4923    fn from(node: &'a crate::ModExpression) -> Self {
4924        Self::Expression(node)
4925    }
4926}
4927
4928impl ruff_text_size::Ranged for ModRef<'_> {
4929    fn range(&self) -> ruff_text_size::TextRange {
4930        match self {
4931            Self::Module(node) => node.range(),
4932            Self::Expression(node) => node.range(),
4933        }
4934    }
4935}
4936
4937impl crate::HasNodeIndex for ModRef<'_> {
4938    fn node_index(&self) -> &crate::AtomicNodeIndex {
4939        match self {
4940            Self::Module(node) => node.node_index(),
4941            Self::Expression(node) => node.node_index(),
4942        }
4943    }
4944}
4945
4946/// See also [stmt](https://docs.python.org/3/library/ast.html#ast.stmt)
4947#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
4948#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
4949pub enum StmtRef<'a> {
4950    #[is(name = "function_def_stmt")]
4951    FunctionDef(&'a crate::StmtFunctionDef),
4952    #[is(name = "class_def_stmt")]
4953    ClassDef(&'a crate::StmtClassDef),
4954    #[is(name = "return_stmt")]
4955    Return(&'a crate::StmtReturn),
4956    #[is(name = "delete_stmt")]
4957    Delete(&'a crate::StmtDelete),
4958    #[is(name = "type_alias_stmt")]
4959    TypeAlias(&'a crate::StmtTypeAlias),
4960    #[is(name = "assign_stmt")]
4961    Assign(&'a crate::StmtAssign),
4962    #[is(name = "aug_assign_stmt")]
4963    AugAssign(&'a crate::StmtAugAssign),
4964    #[is(name = "ann_assign_stmt")]
4965    AnnAssign(&'a crate::StmtAnnAssign),
4966    #[is(name = "for_stmt")]
4967    For(&'a crate::StmtFor),
4968    #[is(name = "while_stmt")]
4969    While(&'a crate::StmtWhile),
4970    #[is(name = "if_stmt")]
4971    If(&'a crate::StmtIf),
4972    #[is(name = "with_stmt")]
4973    With(&'a crate::StmtWith),
4974    #[is(name = "match_stmt")]
4975    Match(&'a crate::StmtMatch),
4976    #[is(name = "raise_stmt")]
4977    Raise(&'a crate::StmtRaise),
4978    #[is(name = "try_stmt")]
4979    Try(&'a crate::StmtTry),
4980    #[is(name = "assert_stmt")]
4981    Assert(&'a crate::StmtAssert),
4982    #[is(name = "import_stmt")]
4983    Import(&'a crate::StmtImport),
4984    #[is(name = "import_from_stmt")]
4985    ImportFrom(&'a crate::StmtImportFrom),
4986    #[is(name = "global_stmt")]
4987    Global(&'a crate::StmtGlobal),
4988    #[is(name = "nonlocal_stmt")]
4989    Nonlocal(&'a crate::StmtNonlocal),
4990    #[is(name = "expr_stmt")]
4991    Expr(&'a crate::StmtExpr),
4992    #[is(name = "pass_stmt")]
4993    Pass(&'a crate::StmtPass),
4994    #[is(name = "break_stmt")]
4995    Break(&'a crate::StmtBreak),
4996    #[is(name = "continue_stmt")]
4997    Continue(&'a crate::StmtContinue),
4998    #[is(name = "ipy_escape_command_stmt")]
4999    IpyEscapeCommand(&'a crate::StmtIpyEscapeCommand),
5000}
5001
5002impl<'a> From<&'a Stmt> for StmtRef<'a> {
5003    fn from(node: &'a Stmt) -> Self {
5004        match node {
5005            Stmt::FunctionDef(node) => StmtRef::FunctionDef(node),
5006            Stmt::ClassDef(node) => StmtRef::ClassDef(node),
5007            Stmt::Return(node) => StmtRef::Return(node),
5008            Stmt::Delete(node) => StmtRef::Delete(node),
5009            Stmt::TypeAlias(node) => StmtRef::TypeAlias(node),
5010            Stmt::Assign(node) => StmtRef::Assign(node),
5011            Stmt::AugAssign(node) => StmtRef::AugAssign(node),
5012            Stmt::AnnAssign(node) => StmtRef::AnnAssign(node),
5013            Stmt::For(node) => StmtRef::For(node),
5014            Stmt::While(node) => StmtRef::While(node),
5015            Stmt::If(node) => StmtRef::If(node),
5016            Stmt::With(node) => StmtRef::With(node),
5017            Stmt::Match(node) => StmtRef::Match(node),
5018            Stmt::Raise(node) => StmtRef::Raise(node),
5019            Stmt::Try(node) => StmtRef::Try(node),
5020            Stmt::Assert(node) => StmtRef::Assert(node),
5021            Stmt::Import(node) => StmtRef::Import(node),
5022            Stmt::ImportFrom(node) => StmtRef::ImportFrom(node),
5023            Stmt::Global(node) => StmtRef::Global(node),
5024            Stmt::Nonlocal(node) => StmtRef::Nonlocal(node),
5025            Stmt::Expr(node) => StmtRef::Expr(node),
5026            Stmt::Pass(node) => StmtRef::Pass(node),
5027            Stmt::Break(node) => StmtRef::Break(node),
5028            Stmt::Continue(node) => StmtRef::Continue(node),
5029            Stmt::IpyEscapeCommand(node) => StmtRef::IpyEscapeCommand(node),
5030        }
5031    }
5032}
5033
5034impl<'a> From<&'a crate::StmtFunctionDef> for StmtRef<'a> {
5035    fn from(node: &'a crate::StmtFunctionDef) -> Self {
5036        Self::FunctionDef(node)
5037    }
5038}
5039
5040impl<'a> From<&'a crate::StmtClassDef> for StmtRef<'a> {
5041    fn from(node: &'a crate::StmtClassDef) -> Self {
5042        Self::ClassDef(node)
5043    }
5044}
5045
5046impl<'a> From<&'a crate::StmtReturn> for StmtRef<'a> {
5047    fn from(node: &'a crate::StmtReturn) -> Self {
5048        Self::Return(node)
5049    }
5050}
5051
5052impl<'a> From<&'a crate::StmtDelete> for StmtRef<'a> {
5053    fn from(node: &'a crate::StmtDelete) -> Self {
5054        Self::Delete(node)
5055    }
5056}
5057
5058impl<'a> From<&'a crate::StmtTypeAlias> for StmtRef<'a> {
5059    fn from(node: &'a crate::StmtTypeAlias) -> Self {
5060        Self::TypeAlias(node)
5061    }
5062}
5063
5064impl<'a> From<&'a crate::StmtAssign> for StmtRef<'a> {
5065    fn from(node: &'a crate::StmtAssign) -> Self {
5066        Self::Assign(node)
5067    }
5068}
5069
5070impl<'a> From<&'a crate::StmtAugAssign> for StmtRef<'a> {
5071    fn from(node: &'a crate::StmtAugAssign) -> Self {
5072        Self::AugAssign(node)
5073    }
5074}
5075
5076impl<'a> From<&'a crate::StmtAnnAssign> for StmtRef<'a> {
5077    fn from(node: &'a crate::StmtAnnAssign) -> Self {
5078        Self::AnnAssign(node)
5079    }
5080}
5081
5082impl<'a> From<&'a crate::StmtFor> for StmtRef<'a> {
5083    fn from(node: &'a crate::StmtFor) -> Self {
5084        Self::For(node)
5085    }
5086}
5087
5088impl<'a> From<&'a crate::StmtWhile> for StmtRef<'a> {
5089    fn from(node: &'a crate::StmtWhile) -> Self {
5090        Self::While(node)
5091    }
5092}
5093
5094impl<'a> From<&'a crate::StmtIf> for StmtRef<'a> {
5095    fn from(node: &'a crate::StmtIf) -> Self {
5096        Self::If(node)
5097    }
5098}
5099
5100impl<'a> From<&'a crate::StmtWith> for StmtRef<'a> {
5101    fn from(node: &'a crate::StmtWith) -> Self {
5102        Self::With(node)
5103    }
5104}
5105
5106impl<'a> From<&'a crate::StmtMatch> for StmtRef<'a> {
5107    fn from(node: &'a crate::StmtMatch) -> Self {
5108        Self::Match(node)
5109    }
5110}
5111
5112impl<'a> From<&'a crate::StmtRaise> for StmtRef<'a> {
5113    fn from(node: &'a crate::StmtRaise) -> Self {
5114        Self::Raise(node)
5115    }
5116}
5117
5118impl<'a> From<&'a crate::StmtTry> for StmtRef<'a> {
5119    fn from(node: &'a crate::StmtTry) -> Self {
5120        Self::Try(node)
5121    }
5122}
5123
5124impl<'a> From<&'a crate::StmtAssert> for StmtRef<'a> {
5125    fn from(node: &'a crate::StmtAssert) -> Self {
5126        Self::Assert(node)
5127    }
5128}
5129
5130impl<'a> From<&'a crate::StmtImport> for StmtRef<'a> {
5131    fn from(node: &'a crate::StmtImport) -> Self {
5132        Self::Import(node)
5133    }
5134}
5135
5136impl<'a> From<&'a crate::StmtImportFrom> for StmtRef<'a> {
5137    fn from(node: &'a crate::StmtImportFrom) -> Self {
5138        Self::ImportFrom(node)
5139    }
5140}
5141
5142impl<'a> From<&'a crate::StmtGlobal> for StmtRef<'a> {
5143    fn from(node: &'a crate::StmtGlobal) -> Self {
5144        Self::Global(node)
5145    }
5146}
5147
5148impl<'a> From<&'a crate::StmtNonlocal> for StmtRef<'a> {
5149    fn from(node: &'a crate::StmtNonlocal) -> Self {
5150        Self::Nonlocal(node)
5151    }
5152}
5153
5154impl<'a> From<&'a crate::StmtExpr> for StmtRef<'a> {
5155    fn from(node: &'a crate::StmtExpr) -> Self {
5156        Self::Expr(node)
5157    }
5158}
5159
5160impl<'a> From<&'a crate::StmtPass> for StmtRef<'a> {
5161    fn from(node: &'a crate::StmtPass) -> Self {
5162        Self::Pass(node)
5163    }
5164}
5165
5166impl<'a> From<&'a crate::StmtBreak> for StmtRef<'a> {
5167    fn from(node: &'a crate::StmtBreak) -> Self {
5168        Self::Break(node)
5169    }
5170}
5171
5172impl<'a> From<&'a crate::StmtContinue> for StmtRef<'a> {
5173    fn from(node: &'a crate::StmtContinue) -> Self {
5174        Self::Continue(node)
5175    }
5176}
5177
5178impl<'a> From<&'a crate::StmtIpyEscapeCommand> for StmtRef<'a> {
5179    fn from(node: &'a crate::StmtIpyEscapeCommand) -> Self {
5180        Self::IpyEscapeCommand(node)
5181    }
5182}
5183
5184impl ruff_text_size::Ranged for StmtRef<'_> {
5185    fn range(&self) -> ruff_text_size::TextRange {
5186        match self {
5187            Self::FunctionDef(node) => node.range(),
5188            Self::ClassDef(node) => node.range(),
5189            Self::Return(node) => node.range(),
5190            Self::Delete(node) => node.range(),
5191            Self::TypeAlias(node) => node.range(),
5192            Self::Assign(node) => node.range(),
5193            Self::AugAssign(node) => node.range(),
5194            Self::AnnAssign(node) => node.range(),
5195            Self::For(node) => node.range(),
5196            Self::While(node) => node.range(),
5197            Self::If(node) => node.range(),
5198            Self::With(node) => node.range(),
5199            Self::Match(node) => node.range(),
5200            Self::Raise(node) => node.range(),
5201            Self::Try(node) => node.range(),
5202            Self::Assert(node) => node.range(),
5203            Self::Import(node) => node.range(),
5204            Self::ImportFrom(node) => node.range(),
5205            Self::Global(node) => node.range(),
5206            Self::Nonlocal(node) => node.range(),
5207            Self::Expr(node) => node.range(),
5208            Self::Pass(node) => node.range(),
5209            Self::Break(node) => node.range(),
5210            Self::Continue(node) => node.range(),
5211            Self::IpyEscapeCommand(node) => node.range(),
5212        }
5213    }
5214}
5215
5216impl crate::HasNodeIndex for StmtRef<'_> {
5217    fn node_index(&self) -> &crate::AtomicNodeIndex {
5218        match self {
5219            Self::FunctionDef(node) => node.node_index(),
5220            Self::ClassDef(node) => node.node_index(),
5221            Self::Return(node) => node.node_index(),
5222            Self::Delete(node) => node.node_index(),
5223            Self::TypeAlias(node) => node.node_index(),
5224            Self::Assign(node) => node.node_index(),
5225            Self::AugAssign(node) => node.node_index(),
5226            Self::AnnAssign(node) => node.node_index(),
5227            Self::For(node) => node.node_index(),
5228            Self::While(node) => node.node_index(),
5229            Self::If(node) => node.node_index(),
5230            Self::With(node) => node.node_index(),
5231            Self::Match(node) => node.node_index(),
5232            Self::Raise(node) => node.node_index(),
5233            Self::Try(node) => node.node_index(),
5234            Self::Assert(node) => node.node_index(),
5235            Self::Import(node) => node.node_index(),
5236            Self::ImportFrom(node) => node.node_index(),
5237            Self::Global(node) => node.node_index(),
5238            Self::Nonlocal(node) => node.node_index(),
5239            Self::Expr(node) => node.node_index(),
5240            Self::Pass(node) => node.node_index(),
5241            Self::Break(node) => node.node_index(),
5242            Self::Continue(node) => node.node_index(),
5243            Self::IpyEscapeCommand(node) => node.node_index(),
5244        }
5245    }
5246}
5247
5248/// See also [expr](https://docs.python.org/3/library/ast.html#ast.expr)
5249#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5250#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5251pub enum ExprRef<'a> {
5252    #[is(name = "bool_op_expr")]
5253    BoolOp(&'a crate::ExprBoolOp),
5254    #[is(name = "named_expr")]
5255    Named(&'a crate::ExprNamed),
5256    #[is(name = "bin_op_expr")]
5257    BinOp(&'a crate::ExprBinOp),
5258    #[is(name = "unary_op_expr")]
5259    UnaryOp(&'a crate::ExprUnaryOp),
5260    #[is(name = "lambda_expr")]
5261    Lambda(&'a crate::ExprLambda),
5262    #[is(name = "if_expr")]
5263    If(&'a crate::ExprIf),
5264    #[is(name = "dict_expr")]
5265    Dict(&'a crate::ExprDict),
5266    #[is(name = "set_expr")]
5267    Set(&'a crate::ExprSet),
5268    #[is(name = "list_comp_expr")]
5269    ListComp(&'a crate::ExprListComp),
5270    #[is(name = "set_comp_expr")]
5271    SetComp(&'a crate::ExprSetComp),
5272    #[is(name = "dict_comp_expr")]
5273    DictComp(&'a crate::ExprDictComp),
5274    #[is(name = "generator_expr")]
5275    Generator(&'a crate::ExprGenerator),
5276    #[is(name = "await_expr")]
5277    Await(&'a crate::ExprAwait),
5278    #[is(name = "yield_expr")]
5279    Yield(&'a crate::ExprYield),
5280    #[is(name = "yield_from_expr")]
5281    YieldFrom(&'a crate::ExprYieldFrom),
5282    #[is(name = "compare_expr")]
5283    Compare(&'a crate::ExprCompare),
5284    #[is(name = "call_expr")]
5285    Call(&'a crate::ExprCall),
5286    #[is(name = "f_string_expr")]
5287    FString(&'a crate::ExprFString),
5288    #[is(name = "t_string_expr")]
5289    TString(&'a crate::ExprTString),
5290    #[is(name = "string_literal_expr")]
5291    StringLiteral(&'a crate::ExprStringLiteral),
5292    #[is(name = "bytes_literal_expr")]
5293    BytesLiteral(&'a crate::ExprBytesLiteral),
5294    #[is(name = "number_literal_expr")]
5295    NumberLiteral(&'a crate::ExprNumberLiteral),
5296    #[is(name = "boolean_literal_expr")]
5297    BooleanLiteral(&'a crate::ExprBooleanLiteral),
5298    #[is(name = "none_literal_expr")]
5299    NoneLiteral(&'a crate::ExprNoneLiteral),
5300    #[is(name = "ellipsis_literal_expr")]
5301    EllipsisLiteral(&'a crate::ExprEllipsisLiteral),
5302    #[is(name = "constant_expr")]
5303    Constant(&'a crate::ExprConstant),
5304    #[is(name = "attribute_expr")]
5305    Attribute(&'a crate::ExprAttribute),
5306    #[is(name = "subscript_expr")]
5307    Subscript(&'a crate::ExprSubscript),
5308    #[is(name = "starred_expr")]
5309    Starred(&'a crate::ExprStarred),
5310    #[is(name = "name_expr")]
5311    Name(&'a crate::ExprName),
5312    #[is(name = "list_expr")]
5313    List(&'a crate::ExprList),
5314    #[is(name = "tuple_expr")]
5315    Tuple(&'a crate::ExprTuple),
5316    #[is(name = "slice_expr")]
5317    Slice(&'a crate::ExprSlice),
5318    #[is(name = "ipy_escape_command_expr")]
5319    IpyEscapeCommand(&'a crate::ExprIpyEscapeCommand),
5320}
5321
5322impl<'a> From<&'a Expr> for ExprRef<'a> {
5323    fn from(node: &'a Expr) -> Self {
5324        match node {
5325            Expr::BoolOp(node) => ExprRef::BoolOp(node),
5326            Expr::Named(node) => ExprRef::Named(node),
5327            Expr::BinOp(node) => ExprRef::BinOp(node),
5328            Expr::UnaryOp(node) => ExprRef::UnaryOp(node),
5329            Expr::Lambda(node) => ExprRef::Lambda(node),
5330            Expr::If(node) => ExprRef::If(node),
5331            Expr::Dict(node) => ExprRef::Dict(node),
5332            Expr::Set(node) => ExprRef::Set(node),
5333            Expr::ListComp(node) => ExprRef::ListComp(node),
5334            Expr::SetComp(node) => ExprRef::SetComp(node),
5335            Expr::DictComp(node) => ExprRef::DictComp(node),
5336            Expr::Generator(node) => ExprRef::Generator(node),
5337            Expr::Await(node) => ExprRef::Await(node),
5338            Expr::Yield(node) => ExprRef::Yield(node),
5339            Expr::YieldFrom(node) => ExprRef::YieldFrom(node),
5340            Expr::Compare(node) => ExprRef::Compare(node),
5341            Expr::Call(node) => ExprRef::Call(node),
5342            Expr::FString(node) => ExprRef::FString(node),
5343            Expr::TString(node) => ExprRef::TString(node),
5344            Expr::StringLiteral(node) => ExprRef::StringLiteral(node),
5345            Expr::BytesLiteral(node) => ExprRef::BytesLiteral(node),
5346            Expr::NumberLiteral(node) => ExprRef::NumberLiteral(node),
5347            Expr::BooleanLiteral(node) => ExprRef::BooleanLiteral(node),
5348            Expr::NoneLiteral(node) => ExprRef::NoneLiteral(node),
5349            Expr::EllipsisLiteral(node) => ExprRef::EllipsisLiteral(node),
5350            Expr::Constant(node) => ExprRef::Constant(node),
5351            Expr::Attribute(node) => ExprRef::Attribute(node),
5352            Expr::Subscript(node) => ExprRef::Subscript(node),
5353            Expr::Starred(node) => ExprRef::Starred(node),
5354            Expr::Name(node) => ExprRef::Name(node),
5355            Expr::List(node) => ExprRef::List(node),
5356            Expr::Tuple(node) => ExprRef::Tuple(node),
5357            Expr::Slice(node) => ExprRef::Slice(node),
5358            Expr::IpyEscapeCommand(node) => ExprRef::IpyEscapeCommand(node),
5359        }
5360    }
5361}
5362
5363impl<'a> From<&'a crate::ExprBoolOp> for ExprRef<'a> {
5364    fn from(node: &'a crate::ExprBoolOp) -> Self {
5365        Self::BoolOp(node)
5366    }
5367}
5368
5369impl<'a> From<&'a crate::ExprNamed> for ExprRef<'a> {
5370    fn from(node: &'a crate::ExprNamed) -> Self {
5371        Self::Named(node)
5372    }
5373}
5374
5375impl<'a> From<&'a crate::ExprBinOp> for ExprRef<'a> {
5376    fn from(node: &'a crate::ExprBinOp) -> Self {
5377        Self::BinOp(node)
5378    }
5379}
5380
5381impl<'a> From<&'a crate::ExprUnaryOp> for ExprRef<'a> {
5382    fn from(node: &'a crate::ExprUnaryOp) -> Self {
5383        Self::UnaryOp(node)
5384    }
5385}
5386
5387impl<'a> From<&'a crate::ExprLambda> for ExprRef<'a> {
5388    fn from(node: &'a crate::ExprLambda) -> Self {
5389        Self::Lambda(node)
5390    }
5391}
5392
5393impl<'a> From<&'a crate::ExprIf> for ExprRef<'a> {
5394    fn from(node: &'a crate::ExprIf) -> Self {
5395        Self::If(node)
5396    }
5397}
5398
5399impl<'a> From<&'a crate::ExprDict> for ExprRef<'a> {
5400    fn from(node: &'a crate::ExprDict) -> Self {
5401        Self::Dict(node)
5402    }
5403}
5404
5405impl<'a> From<&'a crate::ExprSet> for ExprRef<'a> {
5406    fn from(node: &'a crate::ExprSet) -> Self {
5407        Self::Set(node)
5408    }
5409}
5410
5411impl<'a> From<&'a crate::ExprListComp> for ExprRef<'a> {
5412    fn from(node: &'a crate::ExprListComp) -> Self {
5413        Self::ListComp(node)
5414    }
5415}
5416
5417impl<'a> From<&'a crate::ExprSetComp> for ExprRef<'a> {
5418    fn from(node: &'a crate::ExprSetComp) -> Self {
5419        Self::SetComp(node)
5420    }
5421}
5422
5423impl<'a> From<&'a crate::ExprDictComp> for ExprRef<'a> {
5424    fn from(node: &'a crate::ExprDictComp) -> Self {
5425        Self::DictComp(node)
5426    }
5427}
5428
5429impl<'a> From<&'a crate::ExprGenerator> for ExprRef<'a> {
5430    fn from(node: &'a crate::ExprGenerator) -> Self {
5431        Self::Generator(node)
5432    }
5433}
5434
5435impl<'a> From<&'a crate::ExprAwait> for ExprRef<'a> {
5436    fn from(node: &'a crate::ExprAwait) -> Self {
5437        Self::Await(node)
5438    }
5439}
5440
5441impl<'a> From<&'a crate::ExprYield> for ExprRef<'a> {
5442    fn from(node: &'a crate::ExprYield) -> Self {
5443        Self::Yield(node)
5444    }
5445}
5446
5447impl<'a> From<&'a crate::ExprYieldFrom> for ExprRef<'a> {
5448    fn from(node: &'a crate::ExprYieldFrom) -> Self {
5449        Self::YieldFrom(node)
5450    }
5451}
5452
5453impl<'a> From<&'a crate::ExprCompare> for ExprRef<'a> {
5454    fn from(node: &'a crate::ExprCompare) -> Self {
5455        Self::Compare(node)
5456    }
5457}
5458
5459impl<'a> From<&'a crate::ExprCall> for ExprRef<'a> {
5460    fn from(node: &'a crate::ExprCall) -> Self {
5461        Self::Call(node)
5462    }
5463}
5464
5465impl<'a> From<&'a crate::ExprFString> for ExprRef<'a> {
5466    fn from(node: &'a crate::ExprFString) -> Self {
5467        Self::FString(node)
5468    }
5469}
5470
5471impl<'a> From<&'a crate::ExprTString> for ExprRef<'a> {
5472    fn from(node: &'a crate::ExprTString) -> Self {
5473        Self::TString(node)
5474    }
5475}
5476
5477impl<'a> From<&'a crate::ExprStringLiteral> for ExprRef<'a> {
5478    fn from(node: &'a crate::ExprStringLiteral) -> Self {
5479        Self::StringLiteral(node)
5480    }
5481}
5482
5483impl<'a> From<&'a crate::ExprBytesLiteral> for ExprRef<'a> {
5484    fn from(node: &'a crate::ExprBytesLiteral) -> Self {
5485        Self::BytesLiteral(node)
5486    }
5487}
5488
5489impl<'a> From<&'a crate::ExprNumberLiteral> for ExprRef<'a> {
5490    fn from(node: &'a crate::ExprNumberLiteral) -> Self {
5491        Self::NumberLiteral(node)
5492    }
5493}
5494
5495impl<'a> From<&'a crate::ExprBooleanLiteral> for ExprRef<'a> {
5496    fn from(node: &'a crate::ExprBooleanLiteral) -> Self {
5497        Self::BooleanLiteral(node)
5498    }
5499}
5500
5501impl<'a> From<&'a crate::ExprNoneLiteral> for ExprRef<'a> {
5502    fn from(node: &'a crate::ExprNoneLiteral) -> Self {
5503        Self::NoneLiteral(node)
5504    }
5505}
5506
5507impl<'a> From<&'a crate::ExprEllipsisLiteral> for ExprRef<'a> {
5508    fn from(node: &'a crate::ExprEllipsisLiteral) -> Self {
5509        Self::EllipsisLiteral(node)
5510    }
5511}
5512
5513impl<'a> From<&'a crate::ExprConstant> for ExprRef<'a> {
5514    fn from(node: &'a crate::ExprConstant) -> Self {
5515        Self::Constant(node)
5516    }
5517}
5518
5519impl<'a> From<&'a crate::ExprAttribute> for ExprRef<'a> {
5520    fn from(node: &'a crate::ExprAttribute) -> Self {
5521        Self::Attribute(node)
5522    }
5523}
5524
5525impl<'a> From<&'a crate::ExprSubscript> for ExprRef<'a> {
5526    fn from(node: &'a crate::ExprSubscript) -> Self {
5527        Self::Subscript(node)
5528    }
5529}
5530
5531impl<'a> From<&'a crate::ExprStarred> for ExprRef<'a> {
5532    fn from(node: &'a crate::ExprStarred) -> Self {
5533        Self::Starred(node)
5534    }
5535}
5536
5537impl<'a> From<&'a crate::ExprName> for ExprRef<'a> {
5538    fn from(node: &'a crate::ExprName) -> Self {
5539        Self::Name(node)
5540    }
5541}
5542
5543impl<'a> From<&'a crate::ExprList> for ExprRef<'a> {
5544    fn from(node: &'a crate::ExprList) -> Self {
5545        Self::List(node)
5546    }
5547}
5548
5549impl<'a> From<&'a crate::ExprTuple> for ExprRef<'a> {
5550    fn from(node: &'a crate::ExprTuple) -> Self {
5551        Self::Tuple(node)
5552    }
5553}
5554
5555impl<'a> From<&'a crate::ExprSlice> for ExprRef<'a> {
5556    fn from(node: &'a crate::ExprSlice) -> Self {
5557        Self::Slice(node)
5558    }
5559}
5560
5561impl<'a> From<&'a crate::ExprIpyEscapeCommand> for ExprRef<'a> {
5562    fn from(node: &'a crate::ExprIpyEscapeCommand) -> Self {
5563        Self::IpyEscapeCommand(node)
5564    }
5565}
5566
5567impl ruff_text_size::Ranged for ExprRef<'_> {
5568    fn range(&self) -> ruff_text_size::TextRange {
5569        match self {
5570            Self::BoolOp(node) => node.range(),
5571            Self::Named(node) => node.range(),
5572            Self::BinOp(node) => node.range(),
5573            Self::UnaryOp(node) => node.range(),
5574            Self::Lambda(node) => node.range(),
5575            Self::If(node) => node.range(),
5576            Self::Dict(node) => node.range(),
5577            Self::Set(node) => node.range(),
5578            Self::ListComp(node) => node.range(),
5579            Self::SetComp(node) => node.range(),
5580            Self::DictComp(node) => node.range(),
5581            Self::Generator(node) => node.range(),
5582            Self::Await(node) => node.range(),
5583            Self::Yield(node) => node.range(),
5584            Self::YieldFrom(node) => node.range(),
5585            Self::Compare(node) => node.range(),
5586            Self::Call(node) => node.range(),
5587            Self::FString(node) => node.range(),
5588            Self::TString(node) => node.range(),
5589            Self::StringLiteral(node) => node.range(),
5590            Self::BytesLiteral(node) => node.range(),
5591            Self::NumberLiteral(node) => node.range(),
5592            Self::BooleanLiteral(node) => node.range(),
5593            Self::NoneLiteral(node) => node.range(),
5594            Self::EllipsisLiteral(node) => node.range(),
5595            Self::Constant(node) => node.range(),
5596            Self::Attribute(node) => node.range(),
5597            Self::Subscript(node) => node.range(),
5598            Self::Starred(node) => node.range(),
5599            Self::Name(node) => node.range(),
5600            Self::List(node) => node.range(),
5601            Self::Tuple(node) => node.range(),
5602            Self::Slice(node) => node.range(),
5603            Self::IpyEscapeCommand(node) => node.range(),
5604        }
5605    }
5606}
5607
5608impl crate::HasNodeIndex for ExprRef<'_> {
5609    fn node_index(&self) -> &crate::AtomicNodeIndex {
5610        match self {
5611            Self::BoolOp(node) => node.node_index(),
5612            Self::Named(node) => node.node_index(),
5613            Self::BinOp(node) => node.node_index(),
5614            Self::UnaryOp(node) => node.node_index(),
5615            Self::Lambda(node) => node.node_index(),
5616            Self::If(node) => node.node_index(),
5617            Self::Dict(node) => node.node_index(),
5618            Self::Set(node) => node.node_index(),
5619            Self::ListComp(node) => node.node_index(),
5620            Self::SetComp(node) => node.node_index(),
5621            Self::DictComp(node) => node.node_index(),
5622            Self::Generator(node) => node.node_index(),
5623            Self::Await(node) => node.node_index(),
5624            Self::Yield(node) => node.node_index(),
5625            Self::YieldFrom(node) => node.node_index(),
5626            Self::Compare(node) => node.node_index(),
5627            Self::Call(node) => node.node_index(),
5628            Self::FString(node) => node.node_index(),
5629            Self::TString(node) => node.node_index(),
5630            Self::StringLiteral(node) => node.node_index(),
5631            Self::BytesLiteral(node) => node.node_index(),
5632            Self::NumberLiteral(node) => node.node_index(),
5633            Self::BooleanLiteral(node) => node.node_index(),
5634            Self::NoneLiteral(node) => node.node_index(),
5635            Self::EllipsisLiteral(node) => node.node_index(),
5636            Self::Constant(node) => node.node_index(),
5637            Self::Attribute(node) => node.node_index(),
5638            Self::Subscript(node) => node.node_index(),
5639            Self::Starred(node) => node.node_index(),
5640            Self::Name(node) => node.node_index(),
5641            Self::List(node) => node.node_index(),
5642            Self::Tuple(node) => node.node_index(),
5643            Self::Slice(node) => node.node_index(),
5644            Self::IpyEscapeCommand(node) => node.node_index(),
5645        }
5646    }
5647}
5648
5649/// See also [excepthandler](https://docs.python.org/3/library/ast.html#ast.excepthandler)
5650#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5651#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5652pub enum ExceptHandlerRef<'a> {
5653    ExceptHandler(&'a crate::ExceptHandlerExceptHandler),
5654}
5655
5656impl<'a> From<&'a ExceptHandler> for ExceptHandlerRef<'a> {
5657    fn from(node: &'a ExceptHandler) -> Self {
5658        match node {
5659            ExceptHandler::ExceptHandler(node) => ExceptHandlerRef::ExceptHandler(node),
5660        }
5661    }
5662}
5663
5664impl<'a> From<&'a crate::ExceptHandlerExceptHandler> for ExceptHandlerRef<'a> {
5665    fn from(node: &'a crate::ExceptHandlerExceptHandler) -> Self {
5666        Self::ExceptHandler(node)
5667    }
5668}
5669
5670impl ruff_text_size::Ranged for ExceptHandlerRef<'_> {
5671    fn range(&self) -> ruff_text_size::TextRange {
5672        match self {
5673            Self::ExceptHandler(node) => node.range(),
5674        }
5675    }
5676}
5677
5678impl crate::HasNodeIndex for ExceptHandlerRef<'_> {
5679    fn node_index(&self) -> &crate::AtomicNodeIndex {
5680        match self {
5681            Self::ExceptHandler(node) => node.node_index(),
5682        }
5683    }
5684}
5685
5686#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5687#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5688pub enum InterpolatedStringElementRef<'a> {
5689    Interpolation(&'a crate::InterpolatedElement),
5690    Literal(&'a crate::InterpolatedStringLiteralElement),
5691}
5692
5693impl<'a> From<&'a InterpolatedStringElement> for InterpolatedStringElementRef<'a> {
5694    fn from(node: &'a InterpolatedStringElement) -> Self {
5695        match node {
5696            InterpolatedStringElement::Interpolation(node) => {
5697                InterpolatedStringElementRef::Interpolation(node)
5698            }
5699            InterpolatedStringElement::Literal(node) => InterpolatedStringElementRef::Literal(node),
5700        }
5701    }
5702}
5703
5704impl<'a> From<&'a crate::InterpolatedElement> for InterpolatedStringElementRef<'a> {
5705    fn from(node: &'a crate::InterpolatedElement) -> Self {
5706        Self::Interpolation(node)
5707    }
5708}
5709
5710impl<'a> From<&'a crate::InterpolatedStringLiteralElement> for InterpolatedStringElementRef<'a> {
5711    fn from(node: &'a crate::InterpolatedStringLiteralElement) -> Self {
5712        Self::Literal(node)
5713    }
5714}
5715
5716impl ruff_text_size::Ranged for InterpolatedStringElementRef<'_> {
5717    fn range(&self) -> ruff_text_size::TextRange {
5718        match self {
5719            Self::Interpolation(node) => node.range(),
5720            Self::Literal(node) => node.range(),
5721        }
5722    }
5723}
5724
5725impl crate::HasNodeIndex for InterpolatedStringElementRef<'_> {
5726    fn node_index(&self) -> &crate::AtomicNodeIndex {
5727        match self {
5728            Self::Interpolation(node) => node.node_index(),
5729            Self::Literal(node) => node.node_index(),
5730        }
5731    }
5732}
5733
5734/// See also [pattern](https://docs.python.org/3/library/ast.html#ast.pattern)
5735#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5736#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5737pub enum PatternRef<'a> {
5738    MatchValue(&'a crate::PatternMatchValue),
5739    MatchSingleton(&'a crate::PatternMatchSingleton),
5740    MatchSequence(&'a crate::PatternMatchSequence),
5741    MatchMapping(&'a crate::PatternMatchMapping),
5742    MatchClass(&'a crate::PatternMatchClass),
5743    MatchStar(&'a crate::PatternMatchStar),
5744    MatchAs(&'a crate::PatternMatchAs),
5745    MatchOr(&'a crate::PatternMatchOr),
5746}
5747
5748impl<'a> From<&'a Pattern> for PatternRef<'a> {
5749    fn from(node: &'a Pattern) -> Self {
5750        match node {
5751            Pattern::MatchValue(node) => PatternRef::MatchValue(node),
5752            Pattern::MatchSingleton(node) => PatternRef::MatchSingleton(node),
5753            Pattern::MatchSequence(node) => PatternRef::MatchSequence(node),
5754            Pattern::MatchMapping(node) => PatternRef::MatchMapping(node),
5755            Pattern::MatchClass(node) => PatternRef::MatchClass(node),
5756            Pattern::MatchStar(node) => PatternRef::MatchStar(node),
5757            Pattern::MatchAs(node) => PatternRef::MatchAs(node),
5758            Pattern::MatchOr(node) => PatternRef::MatchOr(node),
5759        }
5760    }
5761}
5762
5763impl<'a> From<&'a crate::PatternMatchValue> for PatternRef<'a> {
5764    fn from(node: &'a crate::PatternMatchValue) -> Self {
5765        Self::MatchValue(node)
5766    }
5767}
5768
5769impl<'a> From<&'a crate::PatternMatchSingleton> for PatternRef<'a> {
5770    fn from(node: &'a crate::PatternMatchSingleton) -> Self {
5771        Self::MatchSingleton(node)
5772    }
5773}
5774
5775impl<'a> From<&'a crate::PatternMatchSequence> for PatternRef<'a> {
5776    fn from(node: &'a crate::PatternMatchSequence) -> Self {
5777        Self::MatchSequence(node)
5778    }
5779}
5780
5781impl<'a> From<&'a crate::PatternMatchMapping> for PatternRef<'a> {
5782    fn from(node: &'a crate::PatternMatchMapping) -> Self {
5783        Self::MatchMapping(node)
5784    }
5785}
5786
5787impl<'a> From<&'a crate::PatternMatchClass> for PatternRef<'a> {
5788    fn from(node: &'a crate::PatternMatchClass) -> Self {
5789        Self::MatchClass(node)
5790    }
5791}
5792
5793impl<'a> From<&'a crate::PatternMatchStar> for PatternRef<'a> {
5794    fn from(node: &'a crate::PatternMatchStar) -> Self {
5795        Self::MatchStar(node)
5796    }
5797}
5798
5799impl<'a> From<&'a crate::PatternMatchAs> for PatternRef<'a> {
5800    fn from(node: &'a crate::PatternMatchAs) -> Self {
5801        Self::MatchAs(node)
5802    }
5803}
5804
5805impl<'a> From<&'a crate::PatternMatchOr> for PatternRef<'a> {
5806    fn from(node: &'a crate::PatternMatchOr) -> Self {
5807        Self::MatchOr(node)
5808    }
5809}
5810
5811impl ruff_text_size::Ranged for PatternRef<'_> {
5812    fn range(&self) -> ruff_text_size::TextRange {
5813        match self {
5814            Self::MatchValue(node) => node.range(),
5815            Self::MatchSingleton(node) => node.range(),
5816            Self::MatchSequence(node) => node.range(),
5817            Self::MatchMapping(node) => node.range(),
5818            Self::MatchClass(node) => node.range(),
5819            Self::MatchStar(node) => node.range(),
5820            Self::MatchAs(node) => node.range(),
5821            Self::MatchOr(node) => node.range(),
5822        }
5823    }
5824}
5825
5826impl crate::HasNodeIndex for PatternRef<'_> {
5827    fn node_index(&self) -> &crate::AtomicNodeIndex {
5828        match self {
5829            Self::MatchValue(node) => node.node_index(),
5830            Self::MatchSingleton(node) => node.node_index(),
5831            Self::MatchSequence(node) => node.node_index(),
5832            Self::MatchMapping(node) => node.node_index(),
5833            Self::MatchClass(node) => node.node_index(),
5834            Self::MatchStar(node) => node.node_index(),
5835            Self::MatchAs(node) => node.node_index(),
5836            Self::MatchOr(node) => node.node_index(),
5837        }
5838    }
5839}
5840
5841/// See also [type_param](https://docs.python.org/3/library/ast.html#ast.type_param)
5842#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5843#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5844pub enum TypeParamRef<'a> {
5845    TypeVar(&'a crate::TypeParamTypeVar),
5846    TypeVarTuple(&'a crate::TypeParamTypeVarTuple),
5847    ParamSpec(&'a crate::TypeParamParamSpec),
5848}
5849
5850impl<'a> From<&'a TypeParam> for TypeParamRef<'a> {
5851    fn from(node: &'a TypeParam) -> Self {
5852        match node {
5853            TypeParam::TypeVar(node) => TypeParamRef::TypeVar(node),
5854            TypeParam::TypeVarTuple(node) => TypeParamRef::TypeVarTuple(node),
5855            TypeParam::ParamSpec(node) => TypeParamRef::ParamSpec(node),
5856        }
5857    }
5858}
5859
5860impl<'a> From<&'a crate::TypeParamTypeVar> for TypeParamRef<'a> {
5861    fn from(node: &'a crate::TypeParamTypeVar) -> Self {
5862        Self::TypeVar(node)
5863    }
5864}
5865
5866impl<'a> From<&'a crate::TypeParamTypeVarTuple> for TypeParamRef<'a> {
5867    fn from(node: &'a crate::TypeParamTypeVarTuple) -> Self {
5868        Self::TypeVarTuple(node)
5869    }
5870}
5871
5872impl<'a> From<&'a crate::TypeParamParamSpec> for TypeParamRef<'a> {
5873    fn from(node: &'a crate::TypeParamParamSpec) -> Self {
5874        Self::ParamSpec(node)
5875    }
5876}
5877
5878impl ruff_text_size::Ranged for TypeParamRef<'_> {
5879    fn range(&self) -> ruff_text_size::TextRange {
5880        match self {
5881            Self::TypeVar(node) => node.range(),
5882            Self::TypeVarTuple(node) => node.range(),
5883            Self::ParamSpec(node) => node.range(),
5884        }
5885    }
5886}
5887
5888impl crate::HasNodeIndex for TypeParamRef<'_> {
5889    fn node_index(&self) -> &crate::AtomicNodeIndex {
5890        match self {
5891            Self::TypeVar(node) => node.node_index(),
5892            Self::TypeVarTuple(node) => node.node_index(),
5893            Self::ParamSpec(node) => node.node_index(),
5894        }
5895    }
5896}
5897
5898/// A flattened enumeration of all AST nodes.
5899#[derive(Copy, Clone, Debug, is_macro::Is, PartialEq)]
5900#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5901pub enum AnyNodeRef<'a> {
5902    ModModule(&'a crate::ModModule),
5903    ModExpression(&'a crate::ModExpression),
5904    StmtFunctionDef(&'a crate::StmtFunctionDef),
5905    StmtClassDef(&'a crate::StmtClassDef),
5906    StmtReturn(&'a crate::StmtReturn),
5907    StmtDelete(&'a crate::StmtDelete),
5908    StmtTypeAlias(&'a crate::StmtTypeAlias),
5909    StmtAssign(&'a crate::StmtAssign),
5910    StmtAugAssign(&'a crate::StmtAugAssign),
5911    StmtAnnAssign(&'a crate::StmtAnnAssign),
5912    StmtFor(&'a crate::StmtFor),
5913    StmtWhile(&'a crate::StmtWhile),
5914    StmtIf(&'a crate::StmtIf),
5915    StmtWith(&'a crate::StmtWith),
5916    StmtMatch(&'a crate::StmtMatch),
5917    StmtRaise(&'a crate::StmtRaise),
5918    StmtTry(&'a crate::StmtTry),
5919    StmtAssert(&'a crate::StmtAssert),
5920    StmtImport(&'a crate::StmtImport),
5921    StmtImportFrom(&'a crate::StmtImportFrom),
5922    StmtGlobal(&'a crate::StmtGlobal),
5923    StmtNonlocal(&'a crate::StmtNonlocal),
5924    StmtExpr(&'a crate::StmtExpr),
5925    StmtPass(&'a crate::StmtPass),
5926    StmtBreak(&'a crate::StmtBreak),
5927    StmtContinue(&'a crate::StmtContinue),
5928    StmtIpyEscapeCommand(&'a crate::StmtIpyEscapeCommand),
5929    ExprBoolOp(&'a crate::ExprBoolOp),
5930    ExprNamed(&'a crate::ExprNamed),
5931    ExprBinOp(&'a crate::ExprBinOp),
5932    ExprUnaryOp(&'a crate::ExprUnaryOp),
5933    ExprLambda(&'a crate::ExprLambda),
5934    ExprIf(&'a crate::ExprIf),
5935    ExprDict(&'a crate::ExprDict),
5936    ExprSet(&'a crate::ExprSet),
5937    ExprListComp(&'a crate::ExprListComp),
5938    ExprSetComp(&'a crate::ExprSetComp),
5939    ExprDictComp(&'a crate::ExprDictComp),
5940    ExprGenerator(&'a crate::ExprGenerator),
5941    ExprAwait(&'a crate::ExprAwait),
5942    ExprYield(&'a crate::ExprYield),
5943    ExprYieldFrom(&'a crate::ExprYieldFrom),
5944    ExprCompare(&'a crate::ExprCompare),
5945    ExprCall(&'a crate::ExprCall),
5946    ExprFString(&'a crate::ExprFString),
5947    ExprTString(&'a crate::ExprTString),
5948    ExprStringLiteral(&'a crate::ExprStringLiteral),
5949    ExprBytesLiteral(&'a crate::ExprBytesLiteral),
5950    ExprNumberLiteral(&'a crate::ExprNumberLiteral),
5951    ExprBooleanLiteral(&'a crate::ExprBooleanLiteral),
5952    ExprNoneLiteral(&'a crate::ExprNoneLiteral),
5953    ExprEllipsisLiteral(&'a crate::ExprEllipsisLiteral),
5954    ExprConstant(&'a crate::ExprConstant),
5955    ExprAttribute(&'a crate::ExprAttribute),
5956    ExprSubscript(&'a crate::ExprSubscript),
5957    ExprStarred(&'a crate::ExprStarred),
5958    ExprName(&'a crate::ExprName),
5959    ExprList(&'a crate::ExprList),
5960    ExprTuple(&'a crate::ExprTuple),
5961    ExprSlice(&'a crate::ExprSlice),
5962    ExprIpyEscapeCommand(&'a crate::ExprIpyEscapeCommand),
5963    ExceptHandlerExceptHandler(&'a crate::ExceptHandlerExceptHandler),
5964    InterpolatedElement(&'a crate::InterpolatedElement),
5965    InterpolatedStringLiteralElement(&'a crate::InterpolatedStringLiteralElement),
5966    PatternMatchValue(&'a crate::PatternMatchValue),
5967    PatternMatchSingleton(&'a crate::PatternMatchSingleton),
5968    PatternMatchSequence(&'a crate::PatternMatchSequence),
5969    PatternMatchMapping(&'a crate::PatternMatchMapping),
5970    PatternMatchClass(&'a crate::PatternMatchClass),
5971    PatternMatchStar(&'a crate::PatternMatchStar),
5972    PatternMatchAs(&'a crate::PatternMatchAs),
5973    PatternMatchOr(&'a crate::PatternMatchOr),
5974    TypeParamTypeVar(&'a crate::TypeParamTypeVar),
5975    TypeParamTypeVarTuple(&'a crate::TypeParamTypeVarTuple),
5976    TypeParamParamSpec(&'a crate::TypeParamParamSpec),
5977    InterpolatedStringFormatSpec(&'a crate::InterpolatedStringFormatSpec),
5978    PatternArguments(&'a crate::PatternArguments),
5979    PatternKeyword(&'a crate::PatternKeyword),
5980    Comprehension(&'a crate::Comprehension),
5981    Arguments(&'a crate::Arguments),
5982    Parameters(&'a crate::Parameters),
5983    Parameter(&'a crate::Parameter),
5984    ParameterWithDefault(&'a crate::ParameterWithDefault),
5985    Keyword(&'a crate::Keyword),
5986    Alias(&'a crate::Alias),
5987    WithItem(&'a crate::WithItem),
5988    MatchCase(&'a crate::MatchCase),
5989    Decorator(&'a crate::Decorator),
5990    ElifElseClause(&'a crate::ElifElseClause),
5991    TypeParams(&'a crate::TypeParams),
5992    FString(&'a crate::FString),
5993    TString(&'a crate::TString),
5994    StringLiteral(&'a crate::StringLiteral),
5995    BytesLiteral(&'a crate::BytesLiteral),
5996    Identifier(&'a crate::Identifier),
5997}
5998
5999impl<'a> From<&'a Mod> for AnyNodeRef<'a> {
6000    fn from(node: &'a Mod) -> AnyNodeRef<'a> {
6001        match node {
6002            Mod::Module(node) => AnyNodeRef::ModModule(node),
6003            Mod::Expression(node) => AnyNodeRef::ModExpression(node),
6004        }
6005    }
6006}
6007
6008impl<'a> From<ModRef<'a>> for AnyNodeRef<'a> {
6009    fn from(node: ModRef<'a>) -> AnyNodeRef<'a> {
6010        match node {
6011            ModRef::Module(node) => AnyNodeRef::ModModule(node),
6012            ModRef::Expression(node) => AnyNodeRef::ModExpression(node),
6013        }
6014    }
6015}
6016
6017impl<'a> AnyNodeRef<'a> {
6018    pub fn as_mod_ref(self) -> Option<ModRef<'a>> {
6019        match self {
6020            Self::ModModule(node) => Some(ModRef::Module(node)),
6021            Self::ModExpression(node) => Some(ModRef::Expression(node)),
6022
6023            _ => None,
6024        }
6025    }
6026}
6027
6028impl<'a> From<&'a Stmt> for AnyNodeRef<'a> {
6029    fn from(node: &'a Stmt) -> AnyNodeRef<'a> {
6030        match node {
6031            Stmt::FunctionDef(node) => AnyNodeRef::StmtFunctionDef(node),
6032            Stmt::ClassDef(node) => AnyNodeRef::StmtClassDef(node),
6033            Stmt::Return(node) => AnyNodeRef::StmtReturn(node),
6034            Stmt::Delete(node) => AnyNodeRef::StmtDelete(node),
6035            Stmt::TypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
6036            Stmt::Assign(node) => AnyNodeRef::StmtAssign(node),
6037            Stmt::AugAssign(node) => AnyNodeRef::StmtAugAssign(node),
6038            Stmt::AnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
6039            Stmt::For(node) => AnyNodeRef::StmtFor(node),
6040            Stmt::While(node) => AnyNodeRef::StmtWhile(node),
6041            Stmt::If(node) => AnyNodeRef::StmtIf(node),
6042            Stmt::With(node) => AnyNodeRef::StmtWith(node),
6043            Stmt::Match(node) => AnyNodeRef::StmtMatch(node),
6044            Stmt::Raise(node) => AnyNodeRef::StmtRaise(node),
6045            Stmt::Try(node) => AnyNodeRef::StmtTry(node),
6046            Stmt::Assert(node) => AnyNodeRef::StmtAssert(node),
6047            Stmt::Import(node) => AnyNodeRef::StmtImport(node),
6048            Stmt::ImportFrom(node) => AnyNodeRef::StmtImportFrom(node),
6049            Stmt::Global(node) => AnyNodeRef::StmtGlobal(node),
6050            Stmt::Nonlocal(node) => AnyNodeRef::StmtNonlocal(node),
6051            Stmt::Expr(node) => AnyNodeRef::StmtExpr(node),
6052            Stmt::Pass(node) => AnyNodeRef::StmtPass(node),
6053            Stmt::Break(node) => AnyNodeRef::StmtBreak(node),
6054            Stmt::Continue(node) => AnyNodeRef::StmtContinue(node),
6055            Stmt::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
6056        }
6057    }
6058}
6059
6060impl<'a> From<StmtRef<'a>> for AnyNodeRef<'a> {
6061    fn from(node: StmtRef<'a>) -> AnyNodeRef<'a> {
6062        match node {
6063            StmtRef::FunctionDef(node) => AnyNodeRef::StmtFunctionDef(node),
6064            StmtRef::ClassDef(node) => AnyNodeRef::StmtClassDef(node),
6065            StmtRef::Return(node) => AnyNodeRef::StmtReturn(node),
6066            StmtRef::Delete(node) => AnyNodeRef::StmtDelete(node),
6067            StmtRef::TypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
6068            StmtRef::Assign(node) => AnyNodeRef::StmtAssign(node),
6069            StmtRef::AugAssign(node) => AnyNodeRef::StmtAugAssign(node),
6070            StmtRef::AnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
6071            StmtRef::For(node) => AnyNodeRef::StmtFor(node),
6072            StmtRef::While(node) => AnyNodeRef::StmtWhile(node),
6073            StmtRef::If(node) => AnyNodeRef::StmtIf(node),
6074            StmtRef::With(node) => AnyNodeRef::StmtWith(node),
6075            StmtRef::Match(node) => AnyNodeRef::StmtMatch(node),
6076            StmtRef::Raise(node) => AnyNodeRef::StmtRaise(node),
6077            StmtRef::Try(node) => AnyNodeRef::StmtTry(node),
6078            StmtRef::Assert(node) => AnyNodeRef::StmtAssert(node),
6079            StmtRef::Import(node) => AnyNodeRef::StmtImport(node),
6080            StmtRef::ImportFrom(node) => AnyNodeRef::StmtImportFrom(node),
6081            StmtRef::Global(node) => AnyNodeRef::StmtGlobal(node),
6082            StmtRef::Nonlocal(node) => AnyNodeRef::StmtNonlocal(node),
6083            StmtRef::Expr(node) => AnyNodeRef::StmtExpr(node),
6084            StmtRef::Pass(node) => AnyNodeRef::StmtPass(node),
6085            StmtRef::Break(node) => AnyNodeRef::StmtBreak(node),
6086            StmtRef::Continue(node) => AnyNodeRef::StmtContinue(node),
6087            StmtRef::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
6088        }
6089    }
6090}
6091
6092impl<'a> AnyNodeRef<'a> {
6093    pub fn as_stmt_ref(self) -> Option<StmtRef<'a>> {
6094        match self {
6095            Self::StmtFunctionDef(node) => Some(StmtRef::FunctionDef(node)),
6096            Self::StmtClassDef(node) => Some(StmtRef::ClassDef(node)),
6097            Self::StmtReturn(node) => Some(StmtRef::Return(node)),
6098            Self::StmtDelete(node) => Some(StmtRef::Delete(node)),
6099            Self::StmtTypeAlias(node) => Some(StmtRef::TypeAlias(node)),
6100            Self::StmtAssign(node) => Some(StmtRef::Assign(node)),
6101            Self::StmtAugAssign(node) => Some(StmtRef::AugAssign(node)),
6102            Self::StmtAnnAssign(node) => Some(StmtRef::AnnAssign(node)),
6103            Self::StmtFor(node) => Some(StmtRef::For(node)),
6104            Self::StmtWhile(node) => Some(StmtRef::While(node)),
6105            Self::StmtIf(node) => Some(StmtRef::If(node)),
6106            Self::StmtWith(node) => Some(StmtRef::With(node)),
6107            Self::StmtMatch(node) => Some(StmtRef::Match(node)),
6108            Self::StmtRaise(node) => Some(StmtRef::Raise(node)),
6109            Self::StmtTry(node) => Some(StmtRef::Try(node)),
6110            Self::StmtAssert(node) => Some(StmtRef::Assert(node)),
6111            Self::StmtImport(node) => Some(StmtRef::Import(node)),
6112            Self::StmtImportFrom(node) => Some(StmtRef::ImportFrom(node)),
6113            Self::StmtGlobal(node) => Some(StmtRef::Global(node)),
6114            Self::StmtNonlocal(node) => Some(StmtRef::Nonlocal(node)),
6115            Self::StmtExpr(node) => Some(StmtRef::Expr(node)),
6116            Self::StmtPass(node) => Some(StmtRef::Pass(node)),
6117            Self::StmtBreak(node) => Some(StmtRef::Break(node)),
6118            Self::StmtContinue(node) => Some(StmtRef::Continue(node)),
6119            Self::StmtIpyEscapeCommand(node) => Some(StmtRef::IpyEscapeCommand(node)),
6120
6121            _ => None,
6122        }
6123    }
6124}
6125
6126impl<'a> From<&'a Expr> for AnyNodeRef<'a> {
6127    fn from(node: &'a Expr) -> AnyNodeRef<'a> {
6128        match node {
6129            Expr::BoolOp(node) => AnyNodeRef::ExprBoolOp(node),
6130            Expr::Named(node) => AnyNodeRef::ExprNamed(node),
6131            Expr::BinOp(node) => AnyNodeRef::ExprBinOp(node),
6132            Expr::UnaryOp(node) => AnyNodeRef::ExprUnaryOp(node),
6133            Expr::Lambda(node) => AnyNodeRef::ExprLambda(node),
6134            Expr::If(node) => AnyNodeRef::ExprIf(node),
6135            Expr::Dict(node) => AnyNodeRef::ExprDict(node),
6136            Expr::Set(node) => AnyNodeRef::ExprSet(node),
6137            Expr::ListComp(node) => AnyNodeRef::ExprListComp(node),
6138            Expr::SetComp(node) => AnyNodeRef::ExprSetComp(node),
6139            Expr::DictComp(node) => AnyNodeRef::ExprDictComp(node),
6140            Expr::Generator(node) => AnyNodeRef::ExprGenerator(node),
6141            Expr::Await(node) => AnyNodeRef::ExprAwait(node),
6142            Expr::Yield(node) => AnyNodeRef::ExprYield(node),
6143            Expr::YieldFrom(node) => AnyNodeRef::ExprYieldFrom(node),
6144            Expr::Compare(node) => AnyNodeRef::ExprCompare(node),
6145            Expr::Call(node) => AnyNodeRef::ExprCall(node),
6146            Expr::FString(node) => AnyNodeRef::ExprFString(node),
6147            Expr::TString(node) => AnyNodeRef::ExprTString(node),
6148            Expr::StringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
6149            Expr::BytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
6150            Expr::NumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node),
6151            Expr::BooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node),
6152            Expr::NoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node),
6153            Expr::EllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node),
6154            Expr::Constant(node) => AnyNodeRef::ExprConstant(node),
6155            Expr::Attribute(node) => AnyNodeRef::ExprAttribute(node),
6156            Expr::Subscript(node) => AnyNodeRef::ExprSubscript(node),
6157            Expr::Starred(node) => AnyNodeRef::ExprStarred(node),
6158            Expr::Name(node) => AnyNodeRef::ExprName(node),
6159            Expr::List(node) => AnyNodeRef::ExprList(node),
6160            Expr::Tuple(node) => AnyNodeRef::ExprTuple(node),
6161            Expr::Slice(node) => AnyNodeRef::ExprSlice(node),
6162            Expr::IpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node),
6163        }
6164    }
6165}
6166
6167impl<'a> From<ExprRef<'a>> for AnyNodeRef<'a> {
6168    fn from(node: ExprRef<'a>) -> AnyNodeRef<'a> {
6169        match node {
6170            ExprRef::BoolOp(node) => AnyNodeRef::ExprBoolOp(node),
6171            ExprRef::Named(node) => AnyNodeRef::ExprNamed(node),
6172            ExprRef::BinOp(node) => AnyNodeRef::ExprBinOp(node),
6173            ExprRef::UnaryOp(node) => AnyNodeRef::ExprUnaryOp(node),
6174            ExprRef::Lambda(node) => AnyNodeRef::ExprLambda(node),
6175            ExprRef::If(node) => AnyNodeRef::ExprIf(node),
6176            ExprRef::Dict(node) => AnyNodeRef::ExprDict(node),
6177            ExprRef::Set(node) => AnyNodeRef::ExprSet(node),
6178            ExprRef::ListComp(node) => AnyNodeRef::ExprListComp(node),
6179            ExprRef::SetComp(node) => AnyNodeRef::ExprSetComp(node),
6180            ExprRef::DictComp(node) => AnyNodeRef::ExprDictComp(node),
6181            ExprRef::Generator(node) => AnyNodeRef::ExprGenerator(node),
6182            ExprRef::Await(node) => AnyNodeRef::ExprAwait(node),
6183            ExprRef::Yield(node) => AnyNodeRef::ExprYield(node),
6184            ExprRef::YieldFrom(node) => AnyNodeRef::ExprYieldFrom(node),
6185            ExprRef::Compare(node) => AnyNodeRef::ExprCompare(node),
6186            ExprRef::Call(node) => AnyNodeRef::ExprCall(node),
6187            ExprRef::FString(node) => AnyNodeRef::ExprFString(node),
6188            ExprRef::TString(node) => AnyNodeRef::ExprTString(node),
6189            ExprRef::StringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
6190            ExprRef::BytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
6191            ExprRef::NumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node),
6192            ExprRef::BooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node),
6193            ExprRef::NoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node),
6194            ExprRef::EllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node),
6195            ExprRef::Constant(node) => AnyNodeRef::ExprConstant(node),
6196            ExprRef::Attribute(node) => AnyNodeRef::ExprAttribute(node),
6197            ExprRef::Subscript(node) => AnyNodeRef::ExprSubscript(node),
6198            ExprRef::Starred(node) => AnyNodeRef::ExprStarred(node),
6199            ExprRef::Name(node) => AnyNodeRef::ExprName(node),
6200            ExprRef::List(node) => AnyNodeRef::ExprList(node),
6201            ExprRef::Tuple(node) => AnyNodeRef::ExprTuple(node),
6202            ExprRef::Slice(node) => AnyNodeRef::ExprSlice(node),
6203            ExprRef::IpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node),
6204        }
6205    }
6206}
6207
6208impl<'a> AnyNodeRef<'a> {
6209    pub fn as_expr_ref(self) -> Option<ExprRef<'a>> {
6210        match self {
6211            Self::ExprBoolOp(node) => Some(ExprRef::BoolOp(node)),
6212            Self::ExprNamed(node) => Some(ExprRef::Named(node)),
6213            Self::ExprBinOp(node) => Some(ExprRef::BinOp(node)),
6214            Self::ExprUnaryOp(node) => Some(ExprRef::UnaryOp(node)),
6215            Self::ExprLambda(node) => Some(ExprRef::Lambda(node)),
6216            Self::ExprIf(node) => Some(ExprRef::If(node)),
6217            Self::ExprDict(node) => Some(ExprRef::Dict(node)),
6218            Self::ExprSet(node) => Some(ExprRef::Set(node)),
6219            Self::ExprListComp(node) => Some(ExprRef::ListComp(node)),
6220            Self::ExprSetComp(node) => Some(ExprRef::SetComp(node)),
6221            Self::ExprDictComp(node) => Some(ExprRef::DictComp(node)),
6222            Self::ExprGenerator(node) => Some(ExprRef::Generator(node)),
6223            Self::ExprAwait(node) => Some(ExprRef::Await(node)),
6224            Self::ExprYield(node) => Some(ExprRef::Yield(node)),
6225            Self::ExprYieldFrom(node) => Some(ExprRef::YieldFrom(node)),
6226            Self::ExprCompare(node) => Some(ExprRef::Compare(node)),
6227            Self::ExprCall(node) => Some(ExprRef::Call(node)),
6228            Self::ExprFString(node) => Some(ExprRef::FString(node)),
6229            Self::ExprTString(node) => Some(ExprRef::TString(node)),
6230            Self::ExprStringLiteral(node) => Some(ExprRef::StringLiteral(node)),
6231            Self::ExprBytesLiteral(node) => Some(ExprRef::BytesLiteral(node)),
6232            Self::ExprNumberLiteral(node) => Some(ExprRef::NumberLiteral(node)),
6233            Self::ExprBooleanLiteral(node) => Some(ExprRef::BooleanLiteral(node)),
6234            Self::ExprNoneLiteral(node) => Some(ExprRef::NoneLiteral(node)),
6235            Self::ExprEllipsisLiteral(node) => Some(ExprRef::EllipsisLiteral(node)),
6236            Self::ExprConstant(node) => Some(ExprRef::Constant(node)),
6237            Self::ExprAttribute(node) => Some(ExprRef::Attribute(node)),
6238            Self::ExprSubscript(node) => Some(ExprRef::Subscript(node)),
6239            Self::ExprStarred(node) => Some(ExprRef::Starred(node)),
6240            Self::ExprName(node) => Some(ExprRef::Name(node)),
6241            Self::ExprList(node) => Some(ExprRef::List(node)),
6242            Self::ExprTuple(node) => Some(ExprRef::Tuple(node)),
6243            Self::ExprSlice(node) => Some(ExprRef::Slice(node)),
6244            Self::ExprIpyEscapeCommand(node) => Some(ExprRef::IpyEscapeCommand(node)),
6245
6246            _ => None,
6247        }
6248    }
6249}
6250
6251impl<'a> From<&'a ExceptHandler> for AnyNodeRef<'a> {
6252    fn from(node: &'a ExceptHandler) -> AnyNodeRef<'a> {
6253        match node {
6254            ExceptHandler::ExceptHandler(node) => AnyNodeRef::ExceptHandlerExceptHandler(node),
6255        }
6256    }
6257}
6258
6259impl<'a> From<ExceptHandlerRef<'a>> for AnyNodeRef<'a> {
6260    fn from(node: ExceptHandlerRef<'a>) -> AnyNodeRef<'a> {
6261        match node {
6262            ExceptHandlerRef::ExceptHandler(node) => AnyNodeRef::ExceptHandlerExceptHandler(node),
6263        }
6264    }
6265}
6266
6267impl<'a> AnyNodeRef<'a> {
6268    pub fn as_except_handler_ref(self) -> Option<ExceptHandlerRef<'a>> {
6269        match self {
6270            Self::ExceptHandlerExceptHandler(node) => Some(ExceptHandlerRef::ExceptHandler(node)),
6271
6272            _ => None,
6273        }
6274    }
6275}
6276
6277impl<'a> From<&'a InterpolatedStringElement> for AnyNodeRef<'a> {
6278    fn from(node: &'a InterpolatedStringElement) -> AnyNodeRef<'a> {
6279        match node {
6280            InterpolatedStringElement::Interpolation(node) => AnyNodeRef::InterpolatedElement(node),
6281            InterpolatedStringElement::Literal(node) => {
6282                AnyNodeRef::InterpolatedStringLiteralElement(node)
6283            }
6284        }
6285    }
6286}
6287
6288impl<'a> From<InterpolatedStringElementRef<'a>> for AnyNodeRef<'a> {
6289    fn from(node: InterpolatedStringElementRef<'a>) -> AnyNodeRef<'a> {
6290        match node {
6291            InterpolatedStringElementRef::Interpolation(node) => {
6292                AnyNodeRef::InterpolatedElement(node)
6293            }
6294            InterpolatedStringElementRef::Literal(node) => {
6295                AnyNodeRef::InterpolatedStringLiteralElement(node)
6296            }
6297        }
6298    }
6299}
6300
6301impl<'a> AnyNodeRef<'a> {
6302    pub fn as_interpolated_string_element_ref(self) -> Option<InterpolatedStringElementRef<'a>> {
6303        match self {
6304            Self::InterpolatedElement(node) => {
6305                Some(InterpolatedStringElementRef::Interpolation(node))
6306            }
6307            Self::InterpolatedStringLiteralElement(node) => {
6308                Some(InterpolatedStringElementRef::Literal(node))
6309            }
6310
6311            _ => None,
6312        }
6313    }
6314}
6315
6316impl<'a> From<&'a Pattern> for AnyNodeRef<'a> {
6317    fn from(node: &'a Pattern) -> AnyNodeRef<'a> {
6318        match node {
6319            Pattern::MatchValue(node) => AnyNodeRef::PatternMatchValue(node),
6320            Pattern::MatchSingleton(node) => AnyNodeRef::PatternMatchSingleton(node),
6321            Pattern::MatchSequence(node) => AnyNodeRef::PatternMatchSequence(node),
6322            Pattern::MatchMapping(node) => AnyNodeRef::PatternMatchMapping(node),
6323            Pattern::MatchClass(node) => AnyNodeRef::PatternMatchClass(node),
6324            Pattern::MatchStar(node) => AnyNodeRef::PatternMatchStar(node),
6325            Pattern::MatchAs(node) => AnyNodeRef::PatternMatchAs(node),
6326            Pattern::MatchOr(node) => AnyNodeRef::PatternMatchOr(node),
6327        }
6328    }
6329}
6330
6331impl<'a> From<PatternRef<'a>> for AnyNodeRef<'a> {
6332    fn from(node: PatternRef<'a>) -> AnyNodeRef<'a> {
6333        match node {
6334            PatternRef::MatchValue(node) => AnyNodeRef::PatternMatchValue(node),
6335            PatternRef::MatchSingleton(node) => AnyNodeRef::PatternMatchSingleton(node),
6336            PatternRef::MatchSequence(node) => AnyNodeRef::PatternMatchSequence(node),
6337            PatternRef::MatchMapping(node) => AnyNodeRef::PatternMatchMapping(node),
6338            PatternRef::MatchClass(node) => AnyNodeRef::PatternMatchClass(node),
6339            PatternRef::MatchStar(node) => AnyNodeRef::PatternMatchStar(node),
6340            PatternRef::MatchAs(node) => AnyNodeRef::PatternMatchAs(node),
6341            PatternRef::MatchOr(node) => AnyNodeRef::PatternMatchOr(node),
6342        }
6343    }
6344}
6345
6346impl<'a> AnyNodeRef<'a> {
6347    pub fn as_pattern_ref(self) -> Option<PatternRef<'a>> {
6348        match self {
6349            Self::PatternMatchValue(node) => Some(PatternRef::MatchValue(node)),
6350            Self::PatternMatchSingleton(node) => Some(PatternRef::MatchSingleton(node)),
6351            Self::PatternMatchSequence(node) => Some(PatternRef::MatchSequence(node)),
6352            Self::PatternMatchMapping(node) => Some(PatternRef::MatchMapping(node)),
6353            Self::PatternMatchClass(node) => Some(PatternRef::MatchClass(node)),
6354            Self::PatternMatchStar(node) => Some(PatternRef::MatchStar(node)),
6355            Self::PatternMatchAs(node) => Some(PatternRef::MatchAs(node)),
6356            Self::PatternMatchOr(node) => Some(PatternRef::MatchOr(node)),
6357
6358            _ => None,
6359        }
6360    }
6361}
6362
6363impl<'a> From<&'a TypeParam> for AnyNodeRef<'a> {
6364    fn from(node: &'a TypeParam) -> AnyNodeRef<'a> {
6365        match node {
6366            TypeParam::TypeVar(node) => AnyNodeRef::TypeParamTypeVar(node),
6367            TypeParam::TypeVarTuple(node) => AnyNodeRef::TypeParamTypeVarTuple(node),
6368            TypeParam::ParamSpec(node) => AnyNodeRef::TypeParamParamSpec(node),
6369        }
6370    }
6371}
6372
6373impl<'a> From<TypeParamRef<'a>> for AnyNodeRef<'a> {
6374    fn from(node: TypeParamRef<'a>) -> AnyNodeRef<'a> {
6375        match node {
6376            TypeParamRef::TypeVar(node) => AnyNodeRef::TypeParamTypeVar(node),
6377            TypeParamRef::TypeVarTuple(node) => AnyNodeRef::TypeParamTypeVarTuple(node),
6378            TypeParamRef::ParamSpec(node) => AnyNodeRef::TypeParamParamSpec(node),
6379        }
6380    }
6381}
6382
6383impl<'a> AnyNodeRef<'a> {
6384    pub fn as_type_param_ref(self) -> Option<TypeParamRef<'a>> {
6385        match self {
6386            Self::TypeParamTypeVar(node) => Some(TypeParamRef::TypeVar(node)),
6387            Self::TypeParamTypeVarTuple(node) => Some(TypeParamRef::TypeVarTuple(node)),
6388            Self::TypeParamParamSpec(node) => Some(TypeParamRef::ParamSpec(node)),
6389
6390            _ => None,
6391        }
6392    }
6393}
6394
6395impl<'a> From<&'a crate::ModModule> for AnyNodeRef<'a> {
6396    fn from(node: &'a crate::ModModule) -> AnyNodeRef<'a> {
6397        AnyNodeRef::ModModule(node)
6398    }
6399}
6400
6401impl<'a> From<&'a crate::ModExpression> for AnyNodeRef<'a> {
6402    fn from(node: &'a crate::ModExpression) -> AnyNodeRef<'a> {
6403        AnyNodeRef::ModExpression(node)
6404    }
6405}
6406
6407impl<'a> From<&'a crate::StmtFunctionDef> for AnyNodeRef<'a> {
6408    fn from(node: &'a crate::StmtFunctionDef) -> AnyNodeRef<'a> {
6409        AnyNodeRef::StmtFunctionDef(node)
6410    }
6411}
6412
6413impl<'a> From<&'a crate::StmtClassDef> for AnyNodeRef<'a> {
6414    fn from(node: &'a crate::StmtClassDef) -> AnyNodeRef<'a> {
6415        AnyNodeRef::StmtClassDef(node)
6416    }
6417}
6418
6419impl<'a> From<&'a crate::StmtReturn> for AnyNodeRef<'a> {
6420    fn from(node: &'a crate::StmtReturn) -> AnyNodeRef<'a> {
6421        AnyNodeRef::StmtReturn(node)
6422    }
6423}
6424
6425impl<'a> From<&'a crate::StmtDelete> for AnyNodeRef<'a> {
6426    fn from(node: &'a crate::StmtDelete) -> AnyNodeRef<'a> {
6427        AnyNodeRef::StmtDelete(node)
6428    }
6429}
6430
6431impl<'a> From<&'a crate::StmtTypeAlias> for AnyNodeRef<'a> {
6432    fn from(node: &'a crate::StmtTypeAlias) -> AnyNodeRef<'a> {
6433        AnyNodeRef::StmtTypeAlias(node)
6434    }
6435}
6436
6437impl<'a> From<&'a crate::StmtAssign> for AnyNodeRef<'a> {
6438    fn from(node: &'a crate::StmtAssign) -> AnyNodeRef<'a> {
6439        AnyNodeRef::StmtAssign(node)
6440    }
6441}
6442
6443impl<'a> From<&'a crate::StmtAugAssign> for AnyNodeRef<'a> {
6444    fn from(node: &'a crate::StmtAugAssign) -> AnyNodeRef<'a> {
6445        AnyNodeRef::StmtAugAssign(node)
6446    }
6447}
6448
6449impl<'a> From<&'a crate::StmtAnnAssign> for AnyNodeRef<'a> {
6450    fn from(node: &'a crate::StmtAnnAssign) -> AnyNodeRef<'a> {
6451        AnyNodeRef::StmtAnnAssign(node)
6452    }
6453}
6454
6455impl<'a> From<&'a crate::StmtFor> for AnyNodeRef<'a> {
6456    fn from(node: &'a crate::StmtFor) -> AnyNodeRef<'a> {
6457        AnyNodeRef::StmtFor(node)
6458    }
6459}
6460
6461impl<'a> From<&'a crate::StmtWhile> for AnyNodeRef<'a> {
6462    fn from(node: &'a crate::StmtWhile) -> AnyNodeRef<'a> {
6463        AnyNodeRef::StmtWhile(node)
6464    }
6465}
6466
6467impl<'a> From<&'a crate::StmtIf> for AnyNodeRef<'a> {
6468    fn from(node: &'a crate::StmtIf) -> AnyNodeRef<'a> {
6469        AnyNodeRef::StmtIf(node)
6470    }
6471}
6472
6473impl<'a> From<&'a crate::StmtWith> for AnyNodeRef<'a> {
6474    fn from(node: &'a crate::StmtWith) -> AnyNodeRef<'a> {
6475        AnyNodeRef::StmtWith(node)
6476    }
6477}
6478
6479impl<'a> From<&'a crate::StmtMatch> for AnyNodeRef<'a> {
6480    fn from(node: &'a crate::StmtMatch) -> AnyNodeRef<'a> {
6481        AnyNodeRef::StmtMatch(node)
6482    }
6483}
6484
6485impl<'a> From<&'a crate::StmtRaise> for AnyNodeRef<'a> {
6486    fn from(node: &'a crate::StmtRaise) -> AnyNodeRef<'a> {
6487        AnyNodeRef::StmtRaise(node)
6488    }
6489}
6490
6491impl<'a> From<&'a crate::StmtTry> for AnyNodeRef<'a> {
6492    fn from(node: &'a crate::StmtTry) -> AnyNodeRef<'a> {
6493        AnyNodeRef::StmtTry(node)
6494    }
6495}
6496
6497impl<'a> From<&'a crate::StmtAssert> for AnyNodeRef<'a> {
6498    fn from(node: &'a crate::StmtAssert) -> AnyNodeRef<'a> {
6499        AnyNodeRef::StmtAssert(node)
6500    }
6501}
6502
6503impl<'a> From<&'a crate::StmtImport> for AnyNodeRef<'a> {
6504    fn from(node: &'a crate::StmtImport) -> AnyNodeRef<'a> {
6505        AnyNodeRef::StmtImport(node)
6506    }
6507}
6508
6509impl<'a> From<&'a crate::StmtImportFrom> for AnyNodeRef<'a> {
6510    fn from(node: &'a crate::StmtImportFrom) -> AnyNodeRef<'a> {
6511        AnyNodeRef::StmtImportFrom(node)
6512    }
6513}
6514
6515impl<'a> From<&'a crate::StmtGlobal> for AnyNodeRef<'a> {
6516    fn from(node: &'a crate::StmtGlobal) -> AnyNodeRef<'a> {
6517        AnyNodeRef::StmtGlobal(node)
6518    }
6519}
6520
6521impl<'a> From<&'a crate::StmtNonlocal> for AnyNodeRef<'a> {
6522    fn from(node: &'a crate::StmtNonlocal) -> AnyNodeRef<'a> {
6523        AnyNodeRef::StmtNonlocal(node)
6524    }
6525}
6526
6527impl<'a> From<&'a crate::StmtExpr> for AnyNodeRef<'a> {
6528    fn from(node: &'a crate::StmtExpr) -> AnyNodeRef<'a> {
6529        AnyNodeRef::StmtExpr(node)
6530    }
6531}
6532
6533impl<'a> From<&'a crate::StmtPass> for AnyNodeRef<'a> {
6534    fn from(node: &'a crate::StmtPass) -> AnyNodeRef<'a> {
6535        AnyNodeRef::StmtPass(node)
6536    }
6537}
6538
6539impl<'a> From<&'a crate::StmtBreak> for AnyNodeRef<'a> {
6540    fn from(node: &'a crate::StmtBreak) -> AnyNodeRef<'a> {
6541        AnyNodeRef::StmtBreak(node)
6542    }
6543}
6544
6545impl<'a> From<&'a crate::StmtContinue> for AnyNodeRef<'a> {
6546    fn from(node: &'a crate::StmtContinue) -> AnyNodeRef<'a> {
6547        AnyNodeRef::StmtContinue(node)
6548    }
6549}
6550
6551impl<'a> From<&'a crate::StmtIpyEscapeCommand> for AnyNodeRef<'a> {
6552    fn from(node: &'a crate::StmtIpyEscapeCommand) -> AnyNodeRef<'a> {
6553        AnyNodeRef::StmtIpyEscapeCommand(node)
6554    }
6555}
6556
6557impl<'a> From<&'a crate::ExprBoolOp> for AnyNodeRef<'a> {
6558    fn from(node: &'a crate::ExprBoolOp) -> AnyNodeRef<'a> {
6559        AnyNodeRef::ExprBoolOp(node)
6560    }
6561}
6562
6563impl<'a> From<&'a crate::ExprNamed> for AnyNodeRef<'a> {
6564    fn from(node: &'a crate::ExprNamed) -> AnyNodeRef<'a> {
6565        AnyNodeRef::ExprNamed(node)
6566    }
6567}
6568
6569impl<'a> From<&'a crate::ExprBinOp> for AnyNodeRef<'a> {
6570    fn from(node: &'a crate::ExprBinOp) -> AnyNodeRef<'a> {
6571        AnyNodeRef::ExprBinOp(node)
6572    }
6573}
6574
6575impl<'a> From<&'a crate::ExprUnaryOp> for AnyNodeRef<'a> {
6576    fn from(node: &'a crate::ExprUnaryOp) -> AnyNodeRef<'a> {
6577        AnyNodeRef::ExprUnaryOp(node)
6578    }
6579}
6580
6581impl<'a> From<&'a crate::ExprLambda> for AnyNodeRef<'a> {
6582    fn from(node: &'a crate::ExprLambda) -> AnyNodeRef<'a> {
6583        AnyNodeRef::ExprLambda(node)
6584    }
6585}
6586
6587impl<'a> From<&'a crate::ExprIf> for AnyNodeRef<'a> {
6588    fn from(node: &'a crate::ExprIf) -> AnyNodeRef<'a> {
6589        AnyNodeRef::ExprIf(node)
6590    }
6591}
6592
6593impl<'a> From<&'a crate::ExprDict> for AnyNodeRef<'a> {
6594    fn from(node: &'a crate::ExprDict) -> AnyNodeRef<'a> {
6595        AnyNodeRef::ExprDict(node)
6596    }
6597}
6598
6599impl<'a> From<&'a crate::ExprSet> for AnyNodeRef<'a> {
6600    fn from(node: &'a crate::ExprSet) -> AnyNodeRef<'a> {
6601        AnyNodeRef::ExprSet(node)
6602    }
6603}
6604
6605impl<'a> From<&'a crate::ExprListComp> for AnyNodeRef<'a> {
6606    fn from(node: &'a crate::ExprListComp) -> AnyNodeRef<'a> {
6607        AnyNodeRef::ExprListComp(node)
6608    }
6609}
6610
6611impl<'a> From<&'a crate::ExprSetComp> for AnyNodeRef<'a> {
6612    fn from(node: &'a crate::ExprSetComp) -> AnyNodeRef<'a> {
6613        AnyNodeRef::ExprSetComp(node)
6614    }
6615}
6616
6617impl<'a> From<&'a crate::ExprDictComp> for AnyNodeRef<'a> {
6618    fn from(node: &'a crate::ExprDictComp) -> AnyNodeRef<'a> {
6619        AnyNodeRef::ExprDictComp(node)
6620    }
6621}
6622
6623impl<'a> From<&'a crate::ExprGenerator> for AnyNodeRef<'a> {
6624    fn from(node: &'a crate::ExprGenerator) -> AnyNodeRef<'a> {
6625        AnyNodeRef::ExprGenerator(node)
6626    }
6627}
6628
6629impl<'a> From<&'a crate::ExprAwait> for AnyNodeRef<'a> {
6630    fn from(node: &'a crate::ExprAwait) -> AnyNodeRef<'a> {
6631        AnyNodeRef::ExprAwait(node)
6632    }
6633}
6634
6635impl<'a> From<&'a crate::ExprYield> for AnyNodeRef<'a> {
6636    fn from(node: &'a crate::ExprYield) -> AnyNodeRef<'a> {
6637        AnyNodeRef::ExprYield(node)
6638    }
6639}
6640
6641impl<'a> From<&'a crate::ExprYieldFrom> for AnyNodeRef<'a> {
6642    fn from(node: &'a crate::ExprYieldFrom) -> AnyNodeRef<'a> {
6643        AnyNodeRef::ExprYieldFrom(node)
6644    }
6645}
6646
6647impl<'a> From<&'a crate::ExprCompare> for AnyNodeRef<'a> {
6648    fn from(node: &'a crate::ExprCompare) -> AnyNodeRef<'a> {
6649        AnyNodeRef::ExprCompare(node)
6650    }
6651}
6652
6653impl<'a> From<&'a crate::ExprCall> for AnyNodeRef<'a> {
6654    fn from(node: &'a crate::ExprCall) -> AnyNodeRef<'a> {
6655        AnyNodeRef::ExprCall(node)
6656    }
6657}
6658
6659impl<'a> From<&'a crate::ExprFString> for AnyNodeRef<'a> {
6660    fn from(node: &'a crate::ExprFString) -> AnyNodeRef<'a> {
6661        AnyNodeRef::ExprFString(node)
6662    }
6663}
6664
6665impl<'a> From<&'a crate::ExprTString> for AnyNodeRef<'a> {
6666    fn from(node: &'a crate::ExprTString) -> AnyNodeRef<'a> {
6667        AnyNodeRef::ExprTString(node)
6668    }
6669}
6670
6671impl<'a> From<&'a crate::ExprStringLiteral> for AnyNodeRef<'a> {
6672    fn from(node: &'a crate::ExprStringLiteral) -> AnyNodeRef<'a> {
6673        AnyNodeRef::ExprStringLiteral(node)
6674    }
6675}
6676
6677impl<'a> From<&'a crate::ExprBytesLiteral> for AnyNodeRef<'a> {
6678    fn from(node: &'a crate::ExprBytesLiteral) -> AnyNodeRef<'a> {
6679        AnyNodeRef::ExprBytesLiteral(node)
6680    }
6681}
6682
6683impl<'a> From<&'a crate::ExprNumberLiteral> for AnyNodeRef<'a> {
6684    fn from(node: &'a crate::ExprNumberLiteral) -> AnyNodeRef<'a> {
6685        AnyNodeRef::ExprNumberLiteral(node)
6686    }
6687}
6688
6689impl<'a> From<&'a crate::ExprBooleanLiteral> for AnyNodeRef<'a> {
6690    fn from(node: &'a crate::ExprBooleanLiteral) -> AnyNodeRef<'a> {
6691        AnyNodeRef::ExprBooleanLiteral(node)
6692    }
6693}
6694
6695impl<'a> From<&'a crate::ExprNoneLiteral> for AnyNodeRef<'a> {
6696    fn from(node: &'a crate::ExprNoneLiteral) -> AnyNodeRef<'a> {
6697        AnyNodeRef::ExprNoneLiteral(node)
6698    }
6699}
6700
6701impl<'a> From<&'a crate::ExprEllipsisLiteral> for AnyNodeRef<'a> {
6702    fn from(node: &'a crate::ExprEllipsisLiteral) -> AnyNodeRef<'a> {
6703        AnyNodeRef::ExprEllipsisLiteral(node)
6704    }
6705}
6706
6707impl<'a> From<&'a crate::ExprConstant> for AnyNodeRef<'a> {
6708    fn from(node: &'a crate::ExprConstant) -> AnyNodeRef<'a> {
6709        AnyNodeRef::ExprConstant(node)
6710    }
6711}
6712
6713impl<'a> From<&'a crate::ExprAttribute> for AnyNodeRef<'a> {
6714    fn from(node: &'a crate::ExprAttribute) -> AnyNodeRef<'a> {
6715        AnyNodeRef::ExprAttribute(node)
6716    }
6717}
6718
6719impl<'a> From<&'a crate::ExprSubscript> for AnyNodeRef<'a> {
6720    fn from(node: &'a crate::ExprSubscript) -> AnyNodeRef<'a> {
6721        AnyNodeRef::ExprSubscript(node)
6722    }
6723}
6724
6725impl<'a> From<&'a crate::ExprStarred> for AnyNodeRef<'a> {
6726    fn from(node: &'a crate::ExprStarred) -> AnyNodeRef<'a> {
6727        AnyNodeRef::ExprStarred(node)
6728    }
6729}
6730
6731impl<'a> From<&'a crate::ExprName> for AnyNodeRef<'a> {
6732    fn from(node: &'a crate::ExprName) -> AnyNodeRef<'a> {
6733        AnyNodeRef::ExprName(node)
6734    }
6735}
6736
6737impl<'a> From<&'a crate::ExprList> for AnyNodeRef<'a> {
6738    fn from(node: &'a crate::ExprList) -> AnyNodeRef<'a> {
6739        AnyNodeRef::ExprList(node)
6740    }
6741}
6742
6743impl<'a> From<&'a crate::ExprTuple> for AnyNodeRef<'a> {
6744    fn from(node: &'a crate::ExprTuple) -> AnyNodeRef<'a> {
6745        AnyNodeRef::ExprTuple(node)
6746    }
6747}
6748
6749impl<'a> From<&'a crate::ExprSlice> for AnyNodeRef<'a> {
6750    fn from(node: &'a crate::ExprSlice) -> AnyNodeRef<'a> {
6751        AnyNodeRef::ExprSlice(node)
6752    }
6753}
6754
6755impl<'a> From<&'a crate::ExprIpyEscapeCommand> for AnyNodeRef<'a> {
6756    fn from(node: &'a crate::ExprIpyEscapeCommand) -> AnyNodeRef<'a> {
6757        AnyNodeRef::ExprIpyEscapeCommand(node)
6758    }
6759}
6760
6761impl<'a> From<&'a crate::ExceptHandlerExceptHandler> for AnyNodeRef<'a> {
6762    fn from(node: &'a crate::ExceptHandlerExceptHandler) -> AnyNodeRef<'a> {
6763        AnyNodeRef::ExceptHandlerExceptHandler(node)
6764    }
6765}
6766
6767impl<'a> From<&'a crate::InterpolatedElement> for AnyNodeRef<'a> {
6768    fn from(node: &'a crate::InterpolatedElement) -> AnyNodeRef<'a> {
6769        AnyNodeRef::InterpolatedElement(node)
6770    }
6771}
6772
6773impl<'a> From<&'a crate::InterpolatedStringLiteralElement> for AnyNodeRef<'a> {
6774    fn from(node: &'a crate::InterpolatedStringLiteralElement) -> AnyNodeRef<'a> {
6775        AnyNodeRef::InterpolatedStringLiteralElement(node)
6776    }
6777}
6778
6779impl<'a> From<&'a crate::PatternMatchValue> for AnyNodeRef<'a> {
6780    fn from(node: &'a crate::PatternMatchValue) -> AnyNodeRef<'a> {
6781        AnyNodeRef::PatternMatchValue(node)
6782    }
6783}
6784
6785impl<'a> From<&'a crate::PatternMatchSingleton> for AnyNodeRef<'a> {
6786    fn from(node: &'a crate::PatternMatchSingleton) -> AnyNodeRef<'a> {
6787        AnyNodeRef::PatternMatchSingleton(node)
6788    }
6789}
6790
6791impl<'a> From<&'a crate::PatternMatchSequence> for AnyNodeRef<'a> {
6792    fn from(node: &'a crate::PatternMatchSequence) -> AnyNodeRef<'a> {
6793        AnyNodeRef::PatternMatchSequence(node)
6794    }
6795}
6796
6797impl<'a> From<&'a crate::PatternMatchMapping> for AnyNodeRef<'a> {
6798    fn from(node: &'a crate::PatternMatchMapping) -> AnyNodeRef<'a> {
6799        AnyNodeRef::PatternMatchMapping(node)
6800    }
6801}
6802
6803impl<'a> From<&'a crate::PatternMatchClass> for AnyNodeRef<'a> {
6804    fn from(node: &'a crate::PatternMatchClass) -> AnyNodeRef<'a> {
6805        AnyNodeRef::PatternMatchClass(node)
6806    }
6807}
6808
6809impl<'a> From<&'a crate::PatternMatchStar> for AnyNodeRef<'a> {
6810    fn from(node: &'a crate::PatternMatchStar) -> AnyNodeRef<'a> {
6811        AnyNodeRef::PatternMatchStar(node)
6812    }
6813}
6814
6815impl<'a> From<&'a crate::PatternMatchAs> for AnyNodeRef<'a> {
6816    fn from(node: &'a crate::PatternMatchAs) -> AnyNodeRef<'a> {
6817        AnyNodeRef::PatternMatchAs(node)
6818    }
6819}
6820
6821impl<'a> From<&'a crate::PatternMatchOr> for AnyNodeRef<'a> {
6822    fn from(node: &'a crate::PatternMatchOr) -> AnyNodeRef<'a> {
6823        AnyNodeRef::PatternMatchOr(node)
6824    }
6825}
6826
6827impl<'a> From<&'a crate::TypeParamTypeVar> for AnyNodeRef<'a> {
6828    fn from(node: &'a crate::TypeParamTypeVar) -> AnyNodeRef<'a> {
6829        AnyNodeRef::TypeParamTypeVar(node)
6830    }
6831}
6832
6833impl<'a> From<&'a crate::TypeParamTypeVarTuple> for AnyNodeRef<'a> {
6834    fn from(node: &'a crate::TypeParamTypeVarTuple) -> AnyNodeRef<'a> {
6835        AnyNodeRef::TypeParamTypeVarTuple(node)
6836    }
6837}
6838
6839impl<'a> From<&'a crate::TypeParamParamSpec> for AnyNodeRef<'a> {
6840    fn from(node: &'a crate::TypeParamParamSpec) -> AnyNodeRef<'a> {
6841        AnyNodeRef::TypeParamParamSpec(node)
6842    }
6843}
6844
6845impl<'a> From<&'a crate::InterpolatedStringFormatSpec> for AnyNodeRef<'a> {
6846    fn from(node: &'a crate::InterpolatedStringFormatSpec) -> AnyNodeRef<'a> {
6847        AnyNodeRef::InterpolatedStringFormatSpec(node)
6848    }
6849}
6850
6851impl<'a> From<&'a crate::PatternArguments> for AnyNodeRef<'a> {
6852    fn from(node: &'a crate::PatternArguments) -> AnyNodeRef<'a> {
6853        AnyNodeRef::PatternArguments(node)
6854    }
6855}
6856
6857impl<'a> From<&'a crate::PatternKeyword> for AnyNodeRef<'a> {
6858    fn from(node: &'a crate::PatternKeyword) -> AnyNodeRef<'a> {
6859        AnyNodeRef::PatternKeyword(node)
6860    }
6861}
6862
6863impl<'a> From<&'a crate::Comprehension> for AnyNodeRef<'a> {
6864    fn from(node: &'a crate::Comprehension) -> AnyNodeRef<'a> {
6865        AnyNodeRef::Comprehension(node)
6866    }
6867}
6868
6869impl<'a> From<&'a crate::Arguments> for AnyNodeRef<'a> {
6870    fn from(node: &'a crate::Arguments) -> AnyNodeRef<'a> {
6871        AnyNodeRef::Arguments(node)
6872    }
6873}
6874
6875impl<'a> From<&'a crate::Parameters> for AnyNodeRef<'a> {
6876    fn from(node: &'a crate::Parameters) -> AnyNodeRef<'a> {
6877        AnyNodeRef::Parameters(node)
6878    }
6879}
6880
6881impl<'a> From<&'a crate::Parameter> for AnyNodeRef<'a> {
6882    fn from(node: &'a crate::Parameter) -> AnyNodeRef<'a> {
6883        AnyNodeRef::Parameter(node)
6884    }
6885}
6886
6887impl<'a> From<&'a crate::ParameterWithDefault> for AnyNodeRef<'a> {
6888    fn from(node: &'a crate::ParameterWithDefault) -> AnyNodeRef<'a> {
6889        AnyNodeRef::ParameterWithDefault(node)
6890    }
6891}
6892
6893impl<'a> From<&'a crate::Keyword> for AnyNodeRef<'a> {
6894    fn from(node: &'a crate::Keyword) -> AnyNodeRef<'a> {
6895        AnyNodeRef::Keyword(node)
6896    }
6897}
6898
6899impl<'a> From<&'a crate::Alias> for AnyNodeRef<'a> {
6900    fn from(node: &'a crate::Alias) -> AnyNodeRef<'a> {
6901        AnyNodeRef::Alias(node)
6902    }
6903}
6904
6905impl<'a> From<&'a crate::WithItem> for AnyNodeRef<'a> {
6906    fn from(node: &'a crate::WithItem) -> AnyNodeRef<'a> {
6907        AnyNodeRef::WithItem(node)
6908    }
6909}
6910
6911impl<'a> From<&'a crate::MatchCase> for AnyNodeRef<'a> {
6912    fn from(node: &'a crate::MatchCase) -> AnyNodeRef<'a> {
6913        AnyNodeRef::MatchCase(node)
6914    }
6915}
6916
6917impl<'a> From<&'a crate::Decorator> for AnyNodeRef<'a> {
6918    fn from(node: &'a crate::Decorator) -> AnyNodeRef<'a> {
6919        AnyNodeRef::Decorator(node)
6920    }
6921}
6922
6923impl<'a> From<&'a crate::ElifElseClause> for AnyNodeRef<'a> {
6924    fn from(node: &'a crate::ElifElseClause) -> AnyNodeRef<'a> {
6925        AnyNodeRef::ElifElseClause(node)
6926    }
6927}
6928
6929impl<'a> From<&'a crate::TypeParams> for AnyNodeRef<'a> {
6930    fn from(node: &'a crate::TypeParams) -> AnyNodeRef<'a> {
6931        AnyNodeRef::TypeParams(node)
6932    }
6933}
6934
6935impl<'a> From<&'a crate::FString> for AnyNodeRef<'a> {
6936    fn from(node: &'a crate::FString) -> AnyNodeRef<'a> {
6937        AnyNodeRef::FString(node)
6938    }
6939}
6940
6941impl<'a> From<&'a crate::TString> for AnyNodeRef<'a> {
6942    fn from(node: &'a crate::TString) -> AnyNodeRef<'a> {
6943        AnyNodeRef::TString(node)
6944    }
6945}
6946
6947impl<'a> From<&'a crate::StringLiteral> for AnyNodeRef<'a> {
6948    fn from(node: &'a crate::StringLiteral) -> AnyNodeRef<'a> {
6949        AnyNodeRef::StringLiteral(node)
6950    }
6951}
6952
6953impl<'a> From<&'a crate::BytesLiteral> for AnyNodeRef<'a> {
6954    fn from(node: &'a crate::BytesLiteral) -> AnyNodeRef<'a> {
6955        AnyNodeRef::BytesLiteral(node)
6956    }
6957}
6958
6959impl<'a> From<&'a crate::Identifier> for AnyNodeRef<'a> {
6960    fn from(node: &'a crate::Identifier) -> AnyNodeRef<'a> {
6961        AnyNodeRef::Identifier(node)
6962    }
6963}
6964
6965impl ruff_text_size::Ranged for AnyNodeRef<'_> {
6966    fn range(&self) -> ruff_text_size::TextRange {
6967        match self {
6968            AnyNodeRef::ModModule(node) => node.range(),
6969            AnyNodeRef::ModExpression(node) => node.range(),
6970            AnyNodeRef::StmtFunctionDef(node) => node.range(),
6971            AnyNodeRef::StmtClassDef(node) => node.range(),
6972            AnyNodeRef::StmtReturn(node) => node.range(),
6973            AnyNodeRef::StmtDelete(node) => node.range(),
6974            AnyNodeRef::StmtTypeAlias(node) => node.range(),
6975            AnyNodeRef::StmtAssign(node) => node.range(),
6976            AnyNodeRef::StmtAugAssign(node) => node.range(),
6977            AnyNodeRef::StmtAnnAssign(node) => node.range(),
6978            AnyNodeRef::StmtFor(node) => node.range(),
6979            AnyNodeRef::StmtWhile(node) => node.range(),
6980            AnyNodeRef::StmtIf(node) => node.range(),
6981            AnyNodeRef::StmtWith(node) => node.range(),
6982            AnyNodeRef::StmtMatch(node) => node.range(),
6983            AnyNodeRef::StmtRaise(node) => node.range(),
6984            AnyNodeRef::StmtTry(node) => node.range(),
6985            AnyNodeRef::StmtAssert(node) => node.range(),
6986            AnyNodeRef::StmtImport(node) => node.range(),
6987            AnyNodeRef::StmtImportFrom(node) => node.range(),
6988            AnyNodeRef::StmtGlobal(node) => node.range(),
6989            AnyNodeRef::StmtNonlocal(node) => node.range(),
6990            AnyNodeRef::StmtExpr(node) => node.range(),
6991            AnyNodeRef::StmtPass(node) => node.range(),
6992            AnyNodeRef::StmtBreak(node) => node.range(),
6993            AnyNodeRef::StmtContinue(node) => node.range(),
6994            AnyNodeRef::StmtIpyEscapeCommand(node) => node.range(),
6995            AnyNodeRef::ExprBoolOp(node) => node.range(),
6996            AnyNodeRef::ExprNamed(node) => node.range(),
6997            AnyNodeRef::ExprBinOp(node) => node.range(),
6998            AnyNodeRef::ExprUnaryOp(node) => node.range(),
6999            AnyNodeRef::ExprLambda(node) => node.range(),
7000            AnyNodeRef::ExprIf(node) => node.range(),
7001            AnyNodeRef::ExprDict(node) => node.range(),
7002            AnyNodeRef::ExprSet(node) => node.range(),
7003            AnyNodeRef::ExprListComp(node) => node.range(),
7004            AnyNodeRef::ExprSetComp(node) => node.range(),
7005            AnyNodeRef::ExprDictComp(node) => node.range(),
7006            AnyNodeRef::ExprGenerator(node) => node.range(),
7007            AnyNodeRef::ExprAwait(node) => node.range(),
7008            AnyNodeRef::ExprYield(node) => node.range(),
7009            AnyNodeRef::ExprYieldFrom(node) => node.range(),
7010            AnyNodeRef::ExprCompare(node) => node.range(),
7011            AnyNodeRef::ExprCall(node) => node.range(),
7012            AnyNodeRef::ExprFString(node) => node.range(),
7013            AnyNodeRef::ExprTString(node) => node.range(),
7014            AnyNodeRef::ExprStringLiteral(node) => node.range(),
7015            AnyNodeRef::ExprBytesLiteral(node) => node.range(),
7016            AnyNodeRef::ExprNumberLiteral(node) => node.range(),
7017            AnyNodeRef::ExprBooleanLiteral(node) => node.range(),
7018            AnyNodeRef::ExprNoneLiteral(node) => node.range(),
7019            AnyNodeRef::ExprEllipsisLiteral(node) => node.range(),
7020            AnyNodeRef::ExprConstant(node) => node.range(),
7021            AnyNodeRef::ExprAttribute(node) => node.range(),
7022            AnyNodeRef::ExprSubscript(node) => node.range(),
7023            AnyNodeRef::ExprStarred(node) => node.range(),
7024            AnyNodeRef::ExprName(node) => node.range(),
7025            AnyNodeRef::ExprList(node) => node.range(),
7026            AnyNodeRef::ExprTuple(node) => node.range(),
7027            AnyNodeRef::ExprSlice(node) => node.range(),
7028            AnyNodeRef::ExprIpyEscapeCommand(node) => node.range(),
7029            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.range(),
7030            AnyNodeRef::InterpolatedElement(node) => node.range(),
7031            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.range(),
7032            AnyNodeRef::PatternMatchValue(node) => node.range(),
7033            AnyNodeRef::PatternMatchSingleton(node) => node.range(),
7034            AnyNodeRef::PatternMatchSequence(node) => node.range(),
7035            AnyNodeRef::PatternMatchMapping(node) => node.range(),
7036            AnyNodeRef::PatternMatchClass(node) => node.range(),
7037            AnyNodeRef::PatternMatchStar(node) => node.range(),
7038            AnyNodeRef::PatternMatchAs(node) => node.range(),
7039            AnyNodeRef::PatternMatchOr(node) => node.range(),
7040            AnyNodeRef::TypeParamTypeVar(node) => node.range(),
7041            AnyNodeRef::TypeParamTypeVarTuple(node) => node.range(),
7042            AnyNodeRef::TypeParamParamSpec(node) => node.range(),
7043            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.range(),
7044            AnyNodeRef::PatternArguments(node) => node.range(),
7045            AnyNodeRef::PatternKeyword(node) => node.range(),
7046            AnyNodeRef::Comprehension(node) => node.range(),
7047            AnyNodeRef::Arguments(node) => node.range(),
7048            AnyNodeRef::Parameters(node) => node.range(),
7049            AnyNodeRef::Parameter(node) => node.range(),
7050            AnyNodeRef::ParameterWithDefault(node) => node.range(),
7051            AnyNodeRef::Keyword(node) => node.range(),
7052            AnyNodeRef::Alias(node) => node.range(),
7053            AnyNodeRef::WithItem(node) => node.range(),
7054            AnyNodeRef::MatchCase(node) => node.range(),
7055            AnyNodeRef::Decorator(node) => node.range(),
7056            AnyNodeRef::ElifElseClause(node) => node.range(),
7057            AnyNodeRef::TypeParams(node) => node.range(),
7058            AnyNodeRef::FString(node) => node.range(),
7059            AnyNodeRef::TString(node) => node.range(),
7060            AnyNodeRef::StringLiteral(node) => node.range(),
7061            AnyNodeRef::BytesLiteral(node) => node.range(),
7062            AnyNodeRef::Identifier(node) => node.range(),
7063        }
7064    }
7065}
7066
7067impl crate::HasNodeIndex for AnyNodeRef<'_> {
7068    fn node_index(&self) -> &crate::AtomicNodeIndex {
7069        match self {
7070            AnyNodeRef::ModModule(node) => node.node_index(),
7071            AnyNodeRef::ModExpression(node) => node.node_index(),
7072            AnyNodeRef::StmtFunctionDef(node) => node.node_index(),
7073            AnyNodeRef::StmtClassDef(node) => node.node_index(),
7074            AnyNodeRef::StmtReturn(node) => node.node_index(),
7075            AnyNodeRef::StmtDelete(node) => node.node_index(),
7076            AnyNodeRef::StmtTypeAlias(node) => node.node_index(),
7077            AnyNodeRef::StmtAssign(node) => node.node_index(),
7078            AnyNodeRef::StmtAugAssign(node) => node.node_index(),
7079            AnyNodeRef::StmtAnnAssign(node) => node.node_index(),
7080            AnyNodeRef::StmtFor(node) => node.node_index(),
7081            AnyNodeRef::StmtWhile(node) => node.node_index(),
7082            AnyNodeRef::StmtIf(node) => node.node_index(),
7083            AnyNodeRef::StmtWith(node) => node.node_index(),
7084            AnyNodeRef::StmtMatch(node) => node.node_index(),
7085            AnyNodeRef::StmtRaise(node) => node.node_index(),
7086            AnyNodeRef::StmtTry(node) => node.node_index(),
7087            AnyNodeRef::StmtAssert(node) => node.node_index(),
7088            AnyNodeRef::StmtImport(node) => node.node_index(),
7089            AnyNodeRef::StmtImportFrom(node) => node.node_index(),
7090            AnyNodeRef::StmtGlobal(node) => node.node_index(),
7091            AnyNodeRef::StmtNonlocal(node) => node.node_index(),
7092            AnyNodeRef::StmtExpr(node) => node.node_index(),
7093            AnyNodeRef::StmtPass(node) => node.node_index(),
7094            AnyNodeRef::StmtBreak(node) => node.node_index(),
7095            AnyNodeRef::StmtContinue(node) => node.node_index(),
7096            AnyNodeRef::StmtIpyEscapeCommand(node) => node.node_index(),
7097            AnyNodeRef::ExprBoolOp(node) => node.node_index(),
7098            AnyNodeRef::ExprNamed(node) => node.node_index(),
7099            AnyNodeRef::ExprBinOp(node) => node.node_index(),
7100            AnyNodeRef::ExprUnaryOp(node) => node.node_index(),
7101            AnyNodeRef::ExprLambda(node) => node.node_index(),
7102            AnyNodeRef::ExprIf(node) => node.node_index(),
7103            AnyNodeRef::ExprDict(node) => node.node_index(),
7104            AnyNodeRef::ExprSet(node) => node.node_index(),
7105            AnyNodeRef::ExprListComp(node) => node.node_index(),
7106            AnyNodeRef::ExprSetComp(node) => node.node_index(),
7107            AnyNodeRef::ExprDictComp(node) => node.node_index(),
7108            AnyNodeRef::ExprGenerator(node) => node.node_index(),
7109            AnyNodeRef::ExprAwait(node) => node.node_index(),
7110            AnyNodeRef::ExprYield(node) => node.node_index(),
7111            AnyNodeRef::ExprYieldFrom(node) => node.node_index(),
7112            AnyNodeRef::ExprCompare(node) => node.node_index(),
7113            AnyNodeRef::ExprCall(node) => node.node_index(),
7114            AnyNodeRef::ExprFString(node) => node.node_index(),
7115            AnyNodeRef::ExprTString(node) => node.node_index(),
7116            AnyNodeRef::ExprStringLiteral(node) => node.node_index(),
7117            AnyNodeRef::ExprBytesLiteral(node) => node.node_index(),
7118            AnyNodeRef::ExprNumberLiteral(node) => node.node_index(),
7119            AnyNodeRef::ExprBooleanLiteral(node) => node.node_index(),
7120            AnyNodeRef::ExprNoneLiteral(node) => node.node_index(),
7121            AnyNodeRef::ExprEllipsisLiteral(node) => node.node_index(),
7122            AnyNodeRef::ExprConstant(node) => node.node_index(),
7123            AnyNodeRef::ExprAttribute(node) => node.node_index(),
7124            AnyNodeRef::ExprSubscript(node) => node.node_index(),
7125            AnyNodeRef::ExprStarred(node) => node.node_index(),
7126            AnyNodeRef::ExprName(node) => node.node_index(),
7127            AnyNodeRef::ExprList(node) => node.node_index(),
7128            AnyNodeRef::ExprTuple(node) => node.node_index(),
7129            AnyNodeRef::ExprSlice(node) => node.node_index(),
7130            AnyNodeRef::ExprIpyEscapeCommand(node) => node.node_index(),
7131            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.node_index(),
7132            AnyNodeRef::InterpolatedElement(node) => node.node_index(),
7133            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.node_index(),
7134            AnyNodeRef::PatternMatchValue(node) => node.node_index(),
7135            AnyNodeRef::PatternMatchSingleton(node) => node.node_index(),
7136            AnyNodeRef::PatternMatchSequence(node) => node.node_index(),
7137            AnyNodeRef::PatternMatchMapping(node) => node.node_index(),
7138            AnyNodeRef::PatternMatchClass(node) => node.node_index(),
7139            AnyNodeRef::PatternMatchStar(node) => node.node_index(),
7140            AnyNodeRef::PatternMatchAs(node) => node.node_index(),
7141            AnyNodeRef::PatternMatchOr(node) => node.node_index(),
7142            AnyNodeRef::TypeParamTypeVar(node) => node.node_index(),
7143            AnyNodeRef::TypeParamTypeVarTuple(node) => node.node_index(),
7144            AnyNodeRef::TypeParamParamSpec(node) => node.node_index(),
7145            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.node_index(),
7146            AnyNodeRef::PatternArguments(node) => node.node_index(),
7147            AnyNodeRef::PatternKeyword(node) => node.node_index(),
7148            AnyNodeRef::Comprehension(node) => node.node_index(),
7149            AnyNodeRef::Arguments(node) => node.node_index(),
7150            AnyNodeRef::Parameters(node) => node.node_index(),
7151            AnyNodeRef::Parameter(node) => node.node_index(),
7152            AnyNodeRef::ParameterWithDefault(node) => node.node_index(),
7153            AnyNodeRef::Keyword(node) => node.node_index(),
7154            AnyNodeRef::Alias(node) => node.node_index(),
7155            AnyNodeRef::WithItem(node) => node.node_index(),
7156            AnyNodeRef::MatchCase(node) => node.node_index(),
7157            AnyNodeRef::Decorator(node) => node.node_index(),
7158            AnyNodeRef::ElifElseClause(node) => node.node_index(),
7159            AnyNodeRef::TypeParams(node) => node.node_index(),
7160            AnyNodeRef::FString(node) => node.node_index(),
7161            AnyNodeRef::TString(node) => node.node_index(),
7162            AnyNodeRef::StringLiteral(node) => node.node_index(),
7163            AnyNodeRef::BytesLiteral(node) => node.node_index(),
7164            AnyNodeRef::Identifier(node) => node.node_index(),
7165        }
7166    }
7167}
7168
7169impl AnyNodeRef<'_> {
7170    pub fn as_ptr(&self) -> std::ptr::NonNull<()> {
7171        match self {
7172            AnyNodeRef::ModModule(node) => std::ptr::NonNull::from(*node).cast(),
7173            AnyNodeRef::ModExpression(node) => std::ptr::NonNull::from(*node).cast(),
7174            AnyNodeRef::StmtFunctionDef(node) => std::ptr::NonNull::from(*node).cast(),
7175            AnyNodeRef::StmtClassDef(node) => std::ptr::NonNull::from(*node).cast(),
7176            AnyNodeRef::StmtReturn(node) => std::ptr::NonNull::from(*node).cast(),
7177            AnyNodeRef::StmtDelete(node) => std::ptr::NonNull::from(*node).cast(),
7178            AnyNodeRef::StmtTypeAlias(node) => std::ptr::NonNull::from(*node).cast(),
7179            AnyNodeRef::StmtAssign(node) => std::ptr::NonNull::from(*node).cast(),
7180            AnyNodeRef::StmtAugAssign(node) => std::ptr::NonNull::from(*node).cast(),
7181            AnyNodeRef::StmtAnnAssign(node) => std::ptr::NonNull::from(*node).cast(),
7182            AnyNodeRef::StmtFor(node) => std::ptr::NonNull::from(*node).cast(),
7183            AnyNodeRef::StmtWhile(node) => std::ptr::NonNull::from(*node).cast(),
7184            AnyNodeRef::StmtIf(node) => std::ptr::NonNull::from(*node).cast(),
7185            AnyNodeRef::StmtWith(node) => std::ptr::NonNull::from(*node).cast(),
7186            AnyNodeRef::StmtMatch(node) => std::ptr::NonNull::from(*node).cast(),
7187            AnyNodeRef::StmtRaise(node) => std::ptr::NonNull::from(*node).cast(),
7188            AnyNodeRef::StmtTry(node) => std::ptr::NonNull::from(*node).cast(),
7189            AnyNodeRef::StmtAssert(node) => std::ptr::NonNull::from(*node).cast(),
7190            AnyNodeRef::StmtImport(node) => std::ptr::NonNull::from(*node).cast(),
7191            AnyNodeRef::StmtImportFrom(node) => std::ptr::NonNull::from(*node).cast(),
7192            AnyNodeRef::StmtGlobal(node) => std::ptr::NonNull::from(*node).cast(),
7193            AnyNodeRef::StmtNonlocal(node) => std::ptr::NonNull::from(*node).cast(),
7194            AnyNodeRef::StmtExpr(node) => std::ptr::NonNull::from(*node).cast(),
7195            AnyNodeRef::StmtPass(node) => std::ptr::NonNull::from(*node).cast(),
7196            AnyNodeRef::StmtBreak(node) => std::ptr::NonNull::from(*node).cast(),
7197            AnyNodeRef::StmtContinue(node) => std::ptr::NonNull::from(*node).cast(),
7198            AnyNodeRef::StmtIpyEscapeCommand(node) => std::ptr::NonNull::from(*node).cast(),
7199            AnyNodeRef::ExprBoolOp(node) => std::ptr::NonNull::from(*node).cast(),
7200            AnyNodeRef::ExprNamed(node) => std::ptr::NonNull::from(*node).cast(),
7201            AnyNodeRef::ExprBinOp(node) => std::ptr::NonNull::from(*node).cast(),
7202            AnyNodeRef::ExprUnaryOp(node) => std::ptr::NonNull::from(*node).cast(),
7203            AnyNodeRef::ExprLambda(node) => std::ptr::NonNull::from(*node).cast(),
7204            AnyNodeRef::ExprIf(node) => std::ptr::NonNull::from(*node).cast(),
7205            AnyNodeRef::ExprDict(node) => std::ptr::NonNull::from(*node).cast(),
7206            AnyNodeRef::ExprSet(node) => std::ptr::NonNull::from(*node).cast(),
7207            AnyNodeRef::ExprListComp(node) => std::ptr::NonNull::from(*node).cast(),
7208            AnyNodeRef::ExprSetComp(node) => std::ptr::NonNull::from(*node).cast(),
7209            AnyNodeRef::ExprDictComp(node) => std::ptr::NonNull::from(*node).cast(),
7210            AnyNodeRef::ExprGenerator(node) => std::ptr::NonNull::from(*node).cast(),
7211            AnyNodeRef::ExprAwait(node) => std::ptr::NonNull::from(*node).cast(),
7212            AnyNodeRef::ExprYield(node) => std::ptr::NonNull::from(*node).cast(),
7213            AnyNodeRef::ExprYieldFrom(node) => std::ptr::NonNull::from(*node).cast(),
7214            AnyNodeRef::ExprCompare(node) => std::ptr::NonNull::from(*node).cast(),
7215            AnyNodeRef::ExprCall(node) => std::ptr::NonNull::from(*node).cast(),
7216            AnyNodeRef::ExprFString(node) => std::ptr::NonNull::from(*node).cast(),
7217            AnyNodeRef::ExprTString(node) => std::ptr::NonNull::from(*node).cast(),
7218            AnyNodeRef::ExprStringLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7219            AnyNodeRef::ExprBytesLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7220            AnyNodeRef::ExprNumberLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7221            AnyNodeRef::ExprBooleanLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7222            AnyNodeRef::ExprNoneLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7223            AnyNodeRef::ExprEllipsisLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7224            AnyNodeRef::ExprConstant(node) => std::ptr::NonNull::from(*node).cast(),
7225            AnyNodeRef::ExprAttribute(node) => std::ptr::NonNull::from(*node).cast(),
7226            AnyNodeRef::ExprSubscript(node) => std::ptr::NonNull::from(*node).cast(),
7227            AnyNodeRef::ExprStarred(node) => std::ptr::NonNull::from(*node).cast(),
7228            AnyNodeRef::ExprName(node) => std::ptr::NonNull::from(*node).cast(),
7229            AnyNodeRef::ExprList(node) => std::ptr::NonNull::from(*node).cast(),
7230            AnyNodeRef::ExprTuple(node) => std::ptr::NonNull::from(*node).cast(),
7231            AnyNodeRef::ExprSlice(node) => std::ptr::NonNull::from(*node).cast(),
7232            AnyNodeRef::ExprIpyEscapeCommand(node) => std::ptr::NonNull::from(*node).cast(),
7233            AnyNodeRef::ExceptHandlerExceptHandler(node) => std::ptr::NonNull::from(*node).cast(),
7234            AnyNodeRef::InterpolatedElement(node) => std::ptr::NonNull::from(*node).cast(),
7235            AnyNodeRef::InterpolatedStringLiteralElement(node) => {
7236                std::ptr::NonNull::from(*node).cast()
7237            }
7238            AnyNodeRef::PatternMatchValue(node) => std::ptr::NonNull::from(*node).cast(),
7239            AnyNodeRef::PatternMatchSingleton(node) => std::ptr::NonNull::from(*node).cast(),
7240            AnyNodeRef::PatternMatchSequence(node) => std::ptr::NonNull::from(*node).cast(),
7241            AnyNodeRef::PatternMatchMapping(node) => std::ptr::NonNull::from(*node).cast(),
7242            AnyNodeRef::PatternMatchClass(node) => std::ptr::NonNull::from(*node).cast(),
7243            AnyNodeRef::PatternMatchStar(node) => std::ptr::NonNull::from(*node).cast(),
7244            AnyNodeRef::PatternMatchAs(node) => std::ptr::NonNull::from(*node).cast(),
7245            AnyNodeRef::PatternMatchOr(node) => std::ptr::NonNull::from(*node).cast(),
7246            AnyNodeRef::TypeParamTypeVar(node) => std::ptr::NonNull::from(*node).cast(),
7247            AnyNodeRef::TypeParamTypeVarTuple(node) => std::ptr::NonNull::from(*node).cast(),
7248            AnyNodeRef::TypeParamParamSpec(node) => std::ptr::NonNull::from(*node).cast(),
7249            AnyNodeRef::InterpolatedStringFormatSpec(node) => std::ptr::NonNull::from(*node).cast(),
7250            AnyNodeRef::PatternArguments(node) => std::ptr::NonNull::from(*node).cast(),
7251            AnyNodeRef::PatternKeyword(node) => std::ptr::NonNull::from(*node).cast(),
7252            AnyNodeRef::Comprehension(node) => std::ptr::NonNull::from(*node).cast(),
7253            AnyNodeRef::Arguments(node) => std::ptr::NonNull::from(*node).cast(),
7254            AnyNodeRef::Parameters(node) => std::ptr::NonNull::from(*node).cast(),
7255            AnyNodeRef::Parameter(node) => std::ptr::NonNull::from(*node).cast(),
7256            AnyNodeRef::ParameterWithDefault(node) => std::ptr::NonNull::from(*node).cast(),
7257            AnyNodeRef::Keyword(node) => std::ptr::NonNull::from(*node).cast(),
7258            AnyNodeRef::Alias(node) => std::ptr::NonNull::from(*node).cast(),
7259            AnyNodeRef::WithItem(node) => std::ptr::NonNull::from(*node).cast(),
7260            AnyNodeRef::MatchCase(node) => std::ptr::NonNull::from(*node).cast(),
7261            AnyNodeRef::Decorator(node) => std::ptr::NonNull::from(*node).cast(),
7262            AnyNodeRef::ElifElseClause(node) => std::ptr::NonNull::from(*node).cast(),
7263            AnyNodeRef::TypeParams(node) => std::ptr::NonNull::from(*node).cast(),
7264            AnyNodeRef::FString(node) => std::ptr::NonNull::from(*node).cast(),
7265            AnyNodeRef::TString(node) => std::ptr::NonNull::from(*node).cast(),
7266            AnyNodeRef::StringLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7267            AnyNodeRef::BytesLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7268            AnyNodeRef::Identifier(node) => std::ptr::NonNull::from(*node).cast(),
7269        }
7270    }
7271}
7272
7273impl<'a> AnyNodeRef<'a> {
7274    pub fn visit_source_order<'b, V>(self, visitor: &mut V)
7275    where
7276        V: crate::visitor::source_order::SourceOrderVisitor<'b> + ?Sized,
7277        'a: 'b,
7278    {
7279        match self {
7280            AnyNodeRef::ModModule(node) => node.visit_source_order(visitor),
7281            AnyNodeRef::ModExpression(node) => node.visit_source_order(visitor),
7282            AnyNodeRef::StmtFunctionDef(node) => node.visit_source_order(visitor),
7283            AnyNodeRef::StmtClassDef(node) => node.visit_source_order(visitor),
7284            AnyNodeRef::StmtReturn(node) => node.visit_source_order(visitor),
7285            AnyNodeRef::StmtDelete(node) => node.visit_source_order(visitor),
7286            AnyNodeRef::StmtTypeAlias(node) => node.visit_source_order(visitor),
7287            AnyNodeRef::StmtAssign(node) => node.visit_source_order(visitor),
7288            AnyNodeRef::StmtAugAssign(node) => node.visit_source_order(visitor),
7289            AnyNodeRef::StmtAnnAssign(node) => node.visit_source_order(visitor),
7290            AnyNodeRef::StmtFor(node) => node.visit_source_order(visitor),
7291            AnyNodeRef::StmtWhile(node) => node.visit_source_order(visitor),
7292            AnyNodeRef::StmtIf(node) => node.visit_source_order(visitor),
7293            AnyNodeRef::StmtWith(node) => node.visit_source_order(visitor),
7294            AnyNodeRef::StmtMatch(node) => node.visit_source_order(visitor),
7295            AnyNodeRef::StmtRaise(node) => node.visit_source_order(visitor),
7296            AnyNodeRef::StmtTry(node) => node.visit_source_order(visitor),
7297            AnyNodeRef::StmtAssert(node) => node.visit_source_order(visitor),
7298            AnyNodeRef::StmtImport(node) => node.visit_source_order(visitor),
7299            AnyNodeRef::StmtImportFrom(node) => node.visit_source_order(visitor),
7300            AnyNodeRef::StmtGlobal(node) => node.visit_source_order(visitor),
7301            AnyNodeRef::StmtNonlocal(node) => node.visit_source_order(visitor),
7302            AnyNodeRef::StmtExpr(node) => node.visit_source_order(visitor),
7303            AnyNodeRef::StmtPass(node) => node.visit_source_order(visitor),
7304            AnyNodeRef::StmtBreak(node) => node.visit_source_order(visitor),
7305            AnyNodeRef::StmtContinue(node) => node.visit_source_order(visitor),
7306            AnyNodeRef::StmtIpyEscapeCommand(node) => node.visit_source_order(visitor),
7307            AnyNodeRef::ExprBoolOp(node) => node.visit_source_order(visitor),
7308            AnyNodeRef::ExprNamed(node) => node.visit_source_order(visitor),
7309            AnyNodeRef::ExprBinOp(node) => node.visit_source_order(visitor),
7310            AnyNodeRef::ExprUnaryOp(node) => node.visit_source_order(visitor),
7311            AnyNodeRef::ExprLambda(node) => node.visit_source_order(visitor),
7312            AnyNodeRef::ExprIf(node) => node.visit_source_order(visitor),
7313            AnyNodeRef::ExprDict(node) => node.visit_source_order(visitor),
7314            AnyNodeRef::ExprSet(node) => node.visit_source_order(visitor),
7315            AnyNodeRef::ExprListComp(node) => node.visit_source_order(visitor),
7316            AnyNodeRef::ExprSetComp(node) => node.visit_source_order(visitor),
7317            AnyNodeRef::ExprDictComp(node) => node.visit_source_order(visitor),
7318            AnyNodeRef::ExprGenerator(node) => node.visit_source_order(visitor),
7319            AnyNodeRef::ExprAwait(node) => node.visit_source_order(visitor),
7320            AnyNodeRef::ExprYield(node) => node.visit_source_order(visitor),
7321            AnyNodeRef::ExprYieldFrom(node) => node.visit_source_order(visitor),
7322            AnyNodeRef::ExprCompare(node) => node.visit_source_order(visitor),
7323            AnyNodeRef::ExprCall(node) => node.visit_source_order(visitor),
7324            AnyNodeRef::ExprFString(node) => node.visit_source_order(visitor),
7325            AnyNodeRef::ExprTString(node) => node.visit_source_order(visitor),
7326            AnyNodeRef::ExprStringLiteral(node) => node.visit_source_order(visitor),
7327            AnyNodeRef::ExprBytesLiteral(node) => node.visit_source_order(visitor),
7328            AnyNodeRef::ExprNumberLiteral(node) => node.visit_source_order(visitor),
7329            AnyNodeRef::ExprBooleanLiteral(node) => node.visit_source_order(visitor),
7330            AnyNodeRef::ExprNoneLiteral(node) => node.visit_source_order(visitor),
7331            AnyNodeRef::ExprEllipsisLiteral(node) => node.visit_source_order(visitor),
7332            AnyNodeRef::ExprConstant(node) => node.visit_source_order(visitor),
7333            AnyNodeRef::ExprAttribute(node) => node.visit_source_order(visitor),
7334            AnyNodeRef::ExprSubscript(node) => node.visit_source_order(visitor),
7335            AnyNodeRef::ExprStarred(node) => node.visit_source_order(visitor),
7336            AnyNodeRef::ExprName(node) => node.visit_source_order(visitor),
7337            AnyNodeRef::ExprList(node) => node.visit_source_order(visitor),
7338            AnyNodeRef::ExprTuple(node) => node.visit_source_order(visitor),
7339            AnyNodeRef::ExprSlice(node) => node.visit_source_order(visitor),
7340            AnyNodeRef::ExprIpyEscapeCommand(node) => node.visit_source_order(visitor),
7341            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.visit_source_order(visitor),
7342            AnyNodeRef::InterpolatedElement(node) => node.visit_source_order(visitor),
7343            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.visit_source_order(visitor),
7344            AnyNodeRef::PatternMatchValue(node) => node.visit_source_order(visitor),
7345            AnyNodeRef::PatternMatchSingleton(node) => node.visit_source_order(visitor),
7346            AnyNodeRef::PatternMatchSequence(node) => node.visit_source_order(visitor),
7347            AnyNodeRef::PatternMatchMapping(node) => node.visit_source_order(visitor),
7348            AnyNodeRef::PatternMatchClass(node) => node.visit_source_order(visitor),
7349            AnyNodeRef::PatternMatchStar(node) => node.visit_source_order(visitor),
7350            AnyNodeRef::PatternMatchAs(node) => node.visit_source_order(visitor),
7351            AnyNodeRef::PatternMatchOr(node) => node.visit_source_order(visitor),
7352            AnyNodeRef::TypeParamTypeVar(node) => node.visit_source_order(visitor),
7353            AnyNodeRef::TypeParamTypeVarTuple(node) => node.visit_source_order(visitor),
7354            AnyNodeRef::TypeParamParamSpec(node) => node.visit_source_order(visitor),
7355            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.visit_source_order(visitor),
7356            AnyNodeRef::PatternArguments(node) => node.visit_source_order(visitor),
7357            AnyNodeRef::PatternKeyword(node) => node.visit_source_order(visitor),
7358            AnyNodeRef::Comprehension(node) => node.visit_source_order(visitor),
7359            AnyNodeRef::Arguments(node) => node.visit_source_order(visitor),
7360            AnyNodeRef::Parameters(node) => node.visit_source_order(visitor),
7361            AnyNodeRef::Parameter(node) => node.visit_source_order(visitor),
7362            AnyNodeRef::ParameterWithDefault(node) => node.visit_source_order(visitor),
7363            AnyNodeRef::Keyword(node) => node.visit_source_order(visitor),
7364            AnyNodeRef::Alias(node) => node.visit_source_order(visitor),
7365            AnyNodeRef::WithItem(node) => node.visit_source_order(visitor),
7366            AnyNodeRef::MatchCase(node) => node.visit_source_order(visitor),
7367            AnyNodeRef::Decorator(node) => node.visit_source_order(visitor),
7368            AnyNodeRef::ElifElseClause(node) => node.visit_source_order(visitor),
7369            AnyNodeRef::TypeParams(node) => node.visit_source_order(visitor),
7370            AnyNodeRef::FString(node) => node.visit_source_order(visitor),
7371            AnyNodeRef::TString(node) => node.visit_source_order(visitor),
7372            AnyNodeRef::StringLiteral(node) => node.visit_source_order(visitor),
7373            AnyNodeRef::BytesLiteral(node) => node.visit_source_order(visitor),
7374            AnyNodeRef::Identifier(node) => node.visit_source_order(visitor),
7375        }
7376    }
7377}
7378
7379impl AnyNodeRef<'_> {
7380    pub const fn is_module(self) -> bool {
7381        matches!(
7382            self,
7383            AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_)
7384        )
7385    }
7386}
7387
7388impl AnyNodeRef<'_> {
7389    pub const fn is_statement(self) -> bool {
7390        matches!(
7391            self,
7392            AnyNodeRef::StmtFunctionDef(_)
7393                | AnyNodeRef::StmtClassDef(_)
7394                | AnyNodeRef::StmtReturn(_)
7395                | AnyNodeRef::StmtDelete(_)
7396                | AnyNodeRef::StmtTypeAlias(_)
7397                | AnyNodeRef::StmtAssign(_)
7398                | AnyNodeRef::StmtAugAssign(_)
7399                | AnyNodeRef::StmtAnnAssign(_)
7400                | AnyNodeRef::StmtFor(_)
7401                | AnyNodeRef::StmtWhile(_)
7402                | AnyNodeRef::StmtIf(_)
7403                | AnyNodeRef::StmtWith(_)
7404                | AnyNodeRef::StmtMatch(_)
7405                | AnyNodeRef::StmtRaise(_)
7406                | AnyNodeRef::StmtTry(_)
7407                | AnyNodeRef::StmtAssert(_)
7408                | AnyNodeRef::StmtImport(_)
7409                | AnyNodeRef::StmtImportFrom(_)
7410                | AnyNodeRef::StmtGlobal(_)
7411                | AnyNodeRef::StmtNonlocal(_)
7412                | AnyNodeRef::StmtExpr(_)
7413                | AnyNodeRef::StmtPass(_)
7414                | AnyNodeRef::StmtBreak(_)
7415                | AnyNodeRef::StmtContinue(_)
7416                | AnyNodeRef::StmtIpyEscapeCommand(_)
7417        )
7418    }
7419}
7420
7421impl AnyNodeRef<'_> {
7422    pub const fn is_expression(self) -> bool {
7423        matches!(
7424            self,
7425            AnyNodeRef::ExprBoolOp(_)
7426                | AnyNodeRef::ExprNamed(_)
7427                | AnyNodeRef::ExprBinOp(_)
7428                | AnyNodeRef::ExprUnaryOp(_)
7429                | AnyNodeRef::ExprLambda(_)
7430                | AnyNodeRef::ExprIf(_)
7431                | AnyNodeRef::ExprDict(_)
7432                | AnyNodeRef::ExprSet(_)
7433                | AnyNodeRef::ExprListComp(_)
7434                | AnyNodeRef::ExprSetComp(_)
7435                | AnyNodeRef::ExprDictComp(_)
7436                | AnyNodeRef::ExprGenerator(_)
7437                | AnyNodeRef::ExprAwait(_)
7438                | AnyNodeRef::ExprYield(_)
7439                | AnyNodeRef::ExprYieldFrom(_)
7440                | AnyNodeRef::ExprCompare(_)
7441                | AnyNodeRef::ExprCall(_)
7442                | AnyNodeRef::ExprFString(_)
7443                | AnyNodeRef::ExprTString(_)
7444                | AnyNodeRef::ExprStringLiteral(_)
7445                | AnyNodeRef::ExprBytesLiteral(_)
7446                | AnyNodeRef::ExprNumberLiteral(_)
7447                | AnyNodeRef::ExprBooleanLiteral(_)
7448                | AnyNodeRef::ExprNoneLiteral(_)
7449                | AnyNodeRef::ExprEllipsisLiteral(_)
7450                | AnyNodeRef::ExprConstant(_)
7451                | AnyNodeRef::ExprAttribute(_)
7452                | AnyNodeRef::ExprSubscript(_)
7453                | AnyNodeRef::ExprStarred(_)
7454                | AnyNodeRef::ExprName(_)
7455                | AnyNodeRef::ExprList(_)
7456                | AnyNodeRef::ExprTuple(_)
7457                | AnyNodeRef::ExprSlice(_)
7458                | AnyNodeRef::ExprIpyEscapeCommand(_)
7459        )
7460    }
7461}
7462
7463impl AnyNodeRef<'_> {
7464    pub const fn is_except_handler(self) -> bool {
7465        matches!(self, AnyNodeRef::ExceptHandlerExceptHandler(_))
7466    }
7467}
7468
7469impl AnyNodeRef<'_> {
7470    pub const fn is_interpolated_string_element(self) -> bool {
7471        matches!(
7472            self,
7473            AnyNodeRef::InterpolatedElement(_) | AnyNodeRef::InterpolatedStringLiteralElement(_)
7474        )
7475    }
7476}
7477
7478impl AnyNodeRef<'_> {
7479    pub const fn is_pattern(self) -> bool {
7480        matches!(
7481            self,
7482            AnyNodeRef::PatternMatchValue(_)
7483                | AnyNodeRef::PatternMatchSingleton(_)
7484                | AnyNodeRef::PatternMatchSequence(_)
7485                | AnyNodeRef::PatternMatchMapping(_)
7486                | AnyNodeRef::PatternMatchClass(_)
7487                | AnyNodeRef::PatternMatchStar(_)
7488                | AnyNodeRef::PatternMatchAs(_)
7489                | AnyNodeRef::PatternMatchOr(_)
7490        )
7491    }
7492}
7493
7494impl AnyNodeRef<'_> {
7495    pub const fn is_type_param(self) -> bool {
7496        matches!(
7497            self,
7498            AnyNodeRef::TypeParamTypeVar(_)
7499                | AnyNodeRef::TypeParamTypeVarTuple(_)
7500                | AnyNodeRef::TypeParamParamSpec(_)
7501        )
7502    }
7503}
7504
7505/// An enumeration of all AST nodes.
7506///
7507/// Unlike `AnyNodeRef`, this type does not flatten nested enums, so its variants only
7508/// consist of the "root" AST node types. This is useful as it exposes references to the
7509/// original enums, not just references to their inner values.
7510///
7511/// For example, `AnyRootNodeRef::Mod` contains a reference to the `Mod` enum, while
7512/// `AnyNodeRef` has top-level `AnyNodeRef::ModModule` and `AnyNodeRef::ModExpression`
7513/// variants.
7514#[derive(Copy, Clone, Debug, PartialEq)]
7515#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
7516pub enum AnyRootNodeRef<'a> {
7517    Mod(&'a Mod),
7518    Stmt(&'a Stmt),
7519    Expr(&'a Expr),
7520    ExceptHandler(&'a ExceptHandler),
7521    InterpolatedStringElement(&'a InterpolatedStringElement),
7522    Pattern(&'a Pattern),
7523    TypeParam(&'a TypeParam),
7524    InterpolatedStringFormatSpec(&'a crate::InterpolatedStringFormatSpec),
7525    PatternArguments(&'a crate::PatternArguments),
7526    PatternKeyword(&'a crate::PatternKeyword),
7527    Comprehension(&'a crate::Comprehension),
7528    Arguments(&'a crate::Arguments),
7529    Parameters(&'a crate::Parameters),
7530    Parameter(&'a crate::Parameter),
7531    ParameterWithDefault(&'a crate::ParameterWithDefault),
7532    Keyword(&'a crate::Keyword),
7533    Alias(&'a crate::Alias),
7534    WithItem(&'a crate::WithItem),
7535    MatchCase(&'a crate::MatchCase),
7536    Decorator(&'a crate::Decorator),
7537    ElifElseClause(&'a crate::ElifElseClause),
7538    TypeParams(&'a crate::TypeParams),
7539    FString(&'a crate::FString),
7540    TString(&'a crate::TString),
7541    StringLiteral(&'a crate::StringLiteral),
7542    BytesLiteral(&'a crate::BytesLiteral),
7543    Identifier(&'a crate::Identifier),
7544}
7545
7546/// The unflattened enum or struct type stored by an [`AnyRootNodeRef`].
7547///
7548/// Unlike [`NodeKind`], this does not distinguish variants of root enums such as [`Stmt`]
7549/// and [`Expr`].
7550#[derive(Copy, Clone, Debug, Eq, PartialEq)]
7551#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
7552#[repr(u8)]
7553pub enum RootNodeKind {
7554    Mod,
7555    Stmt,
7556    Expr,
7557    ExceptHandler,
7558    InterpolatedStringElement,
7559    Pattern,
7560    TypeParam,
7561    InterpolatedStringFormatSpec,
7562    PatternArguments,
7563    PatternKeyword,
7564    Comprehension,
7565    Arguments,
7566    Parameters,
7567    Parameter,
7568    ParameterWithDefault,
7569    Keyword,
7570    Alias,
7571    WithItem,
7572    MatchCase,
7573    Decorator,
7574    ElifElseClause,
7575    TypeParams,
7576    FString,
7577    TString,
7578    StringLiteral,
7579    BytesLiteral,
7580    Identifier,
7581}
7582
7583impl RootNodeKind {
7584    /// All root node kinds in discriminant order.
7585    pub const ALL: &'static [Self] = &[
7586        Self::Mod,
7587        Self::Stmt,
7588        Self::Expr,
7589        Self::ExceptHandler,
7590        Self::InterpolatedStringElement,
7591        Self::Pattern,
7592        Self::TypeParam,
7593        Self::InterpolatedStringFormatSpec,
7594        Self::PatternArguments,
7595        Self::PatternKeyword,
7596        Self::Comprehension,
7597        Self::Arguments,
7598        Self::Parameters,
7599        Self::Parameter,
7600        Self::ParameterWithDefault,
7601        Self::Keyword,
7602        Self::Alias,
7603        Self::WithItem,
7604        Self::MatchCase,
7605        Self::Decorator,
7606        Self::ElifElseClause,
7607        Self::TypeParams,
7608        Self::FString,
7609        Self::TString,
7610        Self::StringLiteral,
7611        Self::BytesLiteral,
7612        Self::Identifier,
7613    ];
7614
7615    /// Returns the root node kind with the given discriminant.
7616    #[inline]
7617    pub fn from_u8(value: u8) -> Option<Self> {
7618        match value {
7619            0 => Some(Self::Mod),
7620            1 => Some(Self::Stmt),
7621            2 => Some(Self::Expr),
7622            3 => Some(Self::ExceptHandler),
7623            4 => Some(Self::InterpolatedStringElement),
7624            5 => Some(Self::Pattern),
7625            6 => Some(Self::TypeParam),
7626            7 => Some(Self::InterpolatedStringFormatSpec),
7627            8 => Some(Self::PatternArguments),
7628            9 => Some(Self::PatternKeyword),
7629            10 => Some(Self::Comprehension),
7630            11 => Some(Self::Arguments),
7631            12 => Some(Self::Parameters),
7632            13 => Some(Self::Parameter),
7633            14 => Some(Self::ParameterWithDefault),
7634            15 => Some(Self::Keyword),
7635            16 => Some(Self::Alias),
7636            17 => Some(Self::WithItem),
7637            18 => Some(Self::MatchCase),
7638            19 => Some(Self::Decorator),
7639            20 => Some(Self::ElifElseClause),
7640            21 => Some(Self::TypeParams),
7641            22 => Some(Self::FString),
7642            23 => Some(Self::TString),
7643            24 => Some(Self::StringLiteral),
7644            25 => Some(Self::BytesLiteral),
7645            26 => Some(Self::Identifier),
7646
7647            _ => None,
7648        }
7649    }
7650}
7651
7652impl<'a> From<&'a Mod> for AnyRootNodeRef<'a> {
7653    #[inline]
7654    fn from(node: &'a Mod) -> AnyRootNodeRef<'a> {
7655        AnyRootNodeRef::Mod(node)
7656    }
7657}
7658
7659impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Mod {
7660    type Error = ();
7661    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Mod, ()> {
7662        match node {
7663            AnyRootNodeRef::Mod(node) => Ok(node),
7664            _ => Err(()),
7665        }
7666    }
7667}
7668
7669impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ModModule {
7670    type Error = ();
7671    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ModModule, ()> {
7672        match node {
7673            AnyRootNodeRef::Mod(Mod::Module(node)) => Ok(node),
7674            _ => Err(()),
7675        }
7676    }
7677}
7678
7679impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ModExpression {
7680    type Error = ();
7681    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ModExpression, ()> {
7682        match node {
7683            AnyRootNodeRef::Mod(Mod::Expression(node)) => Ok(node),
7684            _ => Err(()),
7685        }
7686    }
7687}
7688
7689impl<'a> From<&'a Stmt> for AnyRootNodeRef<'a> {
7690    #[inline]
7691    fn from(node: &'a Stmt) -> AnyRootNodeRef<'a> {
7692        AnyRootNodeRef::Stmt(node)
7693    }
7694}
7695
7696impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Stmt {
7697    type Error = ();
7698    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Stmt, ()> {
7699        match node {
7700            AnyRootNodeRef::Stmt(node) => Ok(node),
7701            _ => Err(()),
7702        }
7703    }
7704}
7705
7706impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtFunctionDef {
7707    type Error = ();
7708    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtFunctionDef, ()> {
7709        match node {
7710            AnyRootNodeRef::Stmt(Stmt::FunctionDef(node)) => Ok(node),
7711            _ => Err(()),
7712        }
7713    }
7714}
7715
7716impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtClassDef {
7717    type Error = ();
7718    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtClassDef, ()> {
7719        match node {
7720            AnyRootNodeRef::Stmt(Stmt::ClassDef(node)) => Ok(node),
7721            _ => Err(()),
7722        }
7723    }
7724}
7725
7726impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtReturn {
7727    type Error = ();
7728    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtReturn, ()> {
7729        match node {
7730            AnyRootNodeRef::Stmt(Stmt::Return(node)) => Ok(node),
7731            _ => Err(()),
7732        }
7733    }
7734}
7735
7736impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtDelete {
7737    type Error = ();
7738    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtDelete, ()> {
7739        match node {
7740            AnyRootNodeRef::Stmt(Stmt::Delete(node)) => Ok(node),
7741            _ => Err(()),
7742        }
7743    }
7744}
7745
7746impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtTypeAlias {
7747    type Error = ();
7748    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtTypeAlias, ()> {
7749        match node {
7750            AnyRootNodeRef::Stmt(Stmt::TypeAlias(node)) => Ok(node),
7751            _ => Err(()),
7752        }
7753    }
7754}
7755
7756impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAssign {
7757    type Error = ();
7758    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAssign, ()> {
7759        match node {
7760            AnyRootNodeRef::Stmt(Stmt::Assign(node)) => Ok(node),
7761            _ => Err(()),
7762        }
7763    }
7764}
7765
7766impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAugAssign {
7767    type Error = ();
7768    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAugAssign, ()> {
7769        match node {
7770            AnyRootNodeRef::Stmt(Stmt::AugAssign(node)) => Ok(node),
7771            _ => Err(()),
7772        }
7773    }
7774}
7775
7776impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAnnAssign {
7777    type Error = ();
7778    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAnnAssign, ()> {
7779        match node {
7780            AnyRootNodeRef::Stmt(Stmt::AnnAssign(node)) => Ok(node),
7781            _ => Err(()),
7782        }
7783    }
7784}
7785
7786impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtFor {
7787    type Error = ();
7788    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtFor, ()> {
7789        match node {
7790            AnyRootNodeRef::Stmt(Stmt::For(node)) => Ok(node),
7791            _ => Err(()),
7792        }
7793    }
7794}
7795
7796impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtWhile {
7797    type Error = ();
7798    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtWhile, ()> {
7799        match node {
7800            AnyRootNodeRef::Stmt(Stmt::While(node)) => Ok(node),
7801            _ => Err(()),
7802        }
7803    }
7804}
7805
7806impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtIf {
7807    type Error = ();
7808    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtIf, ()> {
7809        match node {
7810            AnyRootNodeRef::Stmt(Stmt::If(node)) => Ok(node),
7811            _ => Err(()),
7812        }
7813    }
7814}
7815
7816impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtWith {
7817    type Error = ();
7818    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtWith, ()> {
7819        match node {
7820            AnyRootNodeRef::Stmt(Stmt::With(node)) => Ok(node),
7821            _ => Err(()),
7822        }
7823    }
7824}
7825
7826impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtMatch {
7827    type Error = ();
7828    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtMatch, ()> {
7829        match node {
7830            AnyRootNodeRef::Stmt(Stmt::Match(node)) => Ok(node),
7831            _ => Err(()),
7832        }
7833    }
7834}
7835
7836impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtRaise {
7837    type Error = ();
7838    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtRaise, ()> {
7839        match node {
7840            AnyRootNodeRef::Stmt(Stmt::Raise(node)) => Ok(node),
7841            _ => Err(()),
7842        }
7843    }
7844}
7845
7846impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtTry {
7847    type Error = ();
7848    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtTry, ()> {
7849        match node {
7850            AnyRootNodeRef::Stmt(Stmt::Try(node)) => Ok(node),
7851            _ => Err(()),
7852        }
7853    }
7854}
7855
7856impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAssert {
7857    type Error = ();
7858    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAssert, ()> {
7859        match node {
7860            AnyRootNodeRef::Stmt(Stmt::Assert(node)) => Ok(node),
7861            _ => Err(()),
7862        }
7863    }
7864}
7865
7866impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtImport {
7867    type Error = ();
7868    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtImport, ()> {
7869        match node {
7870            AnyRootNodeRef::Stmt(Stmt::Import(node)) => Ok(node),
7871            _ => Err(()),
7872        }
7873    }
7874}
7875
7876impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtImportFrom {
7877    type Error = ();
7878    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtImportFrom, ()> {
7879        match node {
7880            AnyRootNodeRef::Stmt(Stmt::ImportFrom(node)) => Ok(node),
7881            _ => Err(()),
7882        }
7883    }
7884}
7885
7886impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtGlobal {
7887    type Error = ();
7888    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtGlobal, ()> {
7889        match node {
7890            AnyRootNodeRef::Stmt(Stmt::Global(node)) => Ok(node),
7891            _ => Err(()),
7892        }
7893    }
7894}
7895
7896impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtNonlocal {
7897    type Error = ();
7898    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtNonlocal, ()> {
7899        match node {
7900            AnyRootNodeRef::Stmt(Stmt::Nonlocal(node)) => Ok(node),
7901            _ => Err(()),
7902        }
7903    }
7904}
7905
7906impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtExpr {
7907    type Error = ();
7908    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtExpr, ()> {
7909        match node {
7910            AnyRootNodeRef::Stmt(Stmt::Expr(node)) => Ok(node),
7911            _ => Err(()),
7912        }
7913    }
7914}
7915
7916impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtPass {
7917    type Error = ();
7918    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtPass, ()> {
7919        match node {
7920            AnyRootNodeRef::Stmt(Stmt::Pass(node)) => Ok(node),
7921            _ => Err(()),
7922        }
7923    }
7924}
7925
7926impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtBreak {
7927    type Error = ();
7928    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtBreak, ()> {
7929        match node {
7930            AnyRootNodeRef::Stmt(Stmt::Break(node)) => Ok(node),
7931            _ => Err(()),
7932        }
7933    }
7934}
7935
7936impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtContinue {
7937    type Error = ();
7938    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtContinue, ()> {
7939        match node {
7940            AnyRootNodeRef::Stmt(Stmt::Continue(node)) => Ok(node),
7941            _ => Err(()),
7942        }
7943    }
7944}
7945
7946impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtIpyEscapeCommand {
7947    type Error = ();
7948    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtIpyEscapeCommand, ()> {
7949        match node {
7950            AnyRootNodeRef::Stmt(Stmt::IpyEscapeCommand(node)) => Ok(node),
7951            _ => Err(()),
7952        }
7953    }
7954}
7955
7956impl<'a> From<&'a Expr> for AnyRootNodeRef<'a> {
7957    #[inline]
7958    fn from(node: &'a Expr) -> AnyRootNodeRef<'a> {
7959        AnyRootNodeRef::Expr(node)
7960    }
7961}
7962
7963impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Expr {
7964    type Error = ();
7965    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Expr, ()> {
7966        match node {
7967            AnyRootNodeRef::Expr(node) => Ok(node),
7968            _ => Err(()),
7969        }
7970    }
7971}
7972
7973impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBoolOp {
7974    type Error = ();
7975    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBoolOp, ()> {
7976        match node {
7977            AnyRootNodeRef::Expr(Expr::BoolOp(node)) => Ok(node),
7978            _ => Err(()),
7979        }
7980    }
7981}
7982
7983impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNamed {
7984    type Error = ();
7985    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNamed, ()> {
7986        match node {
7987            AnyRootNodeRef::Expr(Expr::Named(node)) => Ok(node),
7988            _ => Err(()),
7989        }
7990    }
7991}
7992
7993impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBinOp {
7994    type Error = ();
7995    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBinOp, ()> {
7996        match node {
7997            AnyRootNodeRef::Expr(Expr::BinOp(node)) => Ok(node),
7998            _ => Err(()),
7999        }
8000    }
8001}
8002
8003impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprUnaryOp {
8004    type Error = ();
8005    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprUnaryOp, ()> {
8006        match node {
8007            AnyRootNodeRef::Expr(Expr::UnaryOp(node)) => Ok(node),
8008            _ => Err(()),
8009        }
8010    }
8011}
8012
8013impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprLambda {
8014    type Error = ();
8015    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprLambda, ()> {
8016        match node {
8017            AnyRootNodeRef::Expr(Expr::Lambda(node)) => Ok(node),
8018            _ => Err(()),
8019        }
8020    }
8021}
8022
8023impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprIf {
8024    type Error = ();
8025    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprIf, ()> {
8026        match node {
8027            AnyRootNodeRef::Expr(Expr::If(node)) => Ok(node),
8028            _ => Err(()),
8029        }
8030    }
8031}
8032
8033impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprDict {
8034    type Error = ();
8035    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprDict, ()> {
8036        match node {
8037            AnyRootNodeRef::Expr(Expr::Dict(node)) => Ok(node),
8038            _ => Err(()),
8039        }
8040    }
8041}
8042
8043impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSet {
8044    type Error = ();
8045    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSet, ()> {
8046        match node {
8047            AnyRootNodeRef::Expr(Expr::Set(node)) => Ok(node),
8048            _ => Err(()),
8049        }
8050    }
8051}
8052
8053impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprListComp {
8054    type Error = ();
8055    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprListComp, ()> {
8056        match node {
8057            AnyRootNodeRef::Expr(Expr::ListComp(node)) => Ok(node),
8058            _ => Err(()),
8059        }
8060    }
8061}
8062
8063impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSetComp {
8064    type Error = ();
8065    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSetComp, ()> {
8066        match node {
8067            AnyRootNodeRef::Expr(Expr::SetComp(node)) => Ok(node),
8068            _ => Err(()),
8069        }
8070    }
8071}
8072
8073impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprDictComp {
8074    type Error = ();
8075    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprDictComp, ()> {
8076        match node {
8077            AnyRootNodeRef::Expr(Expr::DictComp(node)) => Ok(node),
8078            _ => Err(()),
8079        }
8080    }
8081}
8082
8083impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprGenerator {
8084    type Error = ();
8085    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprGenerator, ()> {
8086        match node {
8087            AnyRootNodeRef::Expr(Expr::Generator(node)) => Ok(node),
8088            _ => Err(()),
8089        }
8090    }
8091}
8092
8093impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprAwait {
8094    type Error = ();
8095    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprAwait, ()> {
8096        match node {
8097            AnyRootNodeRef::Expr(Expr::Await(node)) => Ok(node),
8098            _ => Err(()),
8099        }
8100    }
8101}
8102
8103impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprYield {
8104    type Error = ();
8105    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprYield, ()> {
8106        match node {
8107            AnyRootNodeRef::Expr(Expr::Yield(node)) => Ok(node),
8108            _ => Err(()),
8109        }
8110    }
8111}
8112
8113impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprYieldFrom {
8114    type Error = ();
8115    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprYieldFrom, ()> {
8116        match node {
8117            AnyRootNodeRef::Expr(Expr::YieldFrom(node)) => Ok(node),
8118            _ => Err(()),
8119        }
8120    }
8121}
8122
8123impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprCompare {
8124    type Error = ();
8125    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprCompare, ()> {
8126        match node {
8127            AnyRootNodeRef::Expr(Expr::Compare(node)) => Ok(node),
8128            _ => Err(()),
8129        }
8130    }
8131}
8132
8133impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprCall {
8134    type Error = ();
8135    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprCall, ()> {
8136        match node {
8137            AnyRootNodeRef::Expr(Expr::Call(node)) => Ok(node),
8138            _ => Err(()),
8139        }
8140    }
8141}
8142
8143impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprFString {
8144    type Error = ();
8145    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprFString, ()> {
8146        match node {
8147            AnyRootNodeRef::Expr(Expr::FString(node)) => Ok(node),
8148            _ => Err(()),
8149        }
8150    }
8151}
8152
8153impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprTString {
8154    type Error = ();
8155    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprTString, ()> {
8156        match node {
8157            AnyRootNodeRef::Expr(Expr::TString(node)) => Ok(node),
8158            _ => Err(()),
8159        }
8160    }
8161}
8162
8163impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprStringLiteral {
8164    type Error = ();
8165    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprStringLiteral, ()> {
8166        match node {
8167            AnyRootNodeRef::Expr(Expr::StringLiteral(node)) => Ok(node),
8168            _ => Err(()),
8169        }
8170    }
8171}
8172
8173impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBytesLiteral {
8174    type Error = ();
8175    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBytesLiteral, ()> {
8176        match node {
8177            AnyRootNodeRef::Expr(Expr::BytesLiteral(node)) => Ok(node),
8178            _ => Err(()),
8179        }
8180    }
8181}
8182
8183impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNumberLiteral {
8184    type Error = ();
8185    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNumberLiteral, ()> {
8186        match node {
8187            AnyRootNodeRef::Expr(Expr::NumberLiteral(node)) => Ok(node),
8188            _ => Err(()),
8189        }
8190    }
8191}
8192
8193impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBooleanLiteral {
8194    type Error = ();
8195    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBooleanLiteral, ()> {
8196        match node {
8197            AnyRootNodeRef::Expr(Expr::BooleanLiteral(node)) => Ok(node),
8198            _ => Err(()),
8199        }
8200    }
8201}
8202
8203impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNoneLiteral {
8204    type Error = ();
8205    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNoneLiteral, ()> {
8206        match node {
8207            AnyRootNodeRef::Expr(Expr::NoneLiteral(node)) => Ok(node),
8208            _ => Err(()),
8209        }
8210    }
8211}
8212
8213impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprEllipsisLiteral {
8214    type Error = ();
8215    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprEllipsisLiteral, ()> {
8216        match node {
8217            AnyRootNodeRef::Expr(Expr::EllipsisLiteral(node)) => Ok(node),
8218            _ => Err(()),
8219        }
8220    }
8221}
8222
8223impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprConstant {
8224    type Error = ();
8225    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprConstant, ()> {
8226        match node {
8227            AnyRootNodeRef::Expr(Expr::Constant(node)) => Ok(node),
8228            _ => Err(()),
8229        }
8230    }
8231}
8232
8233impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprAttribute {
8234    type Error = ();
8235    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprAttribute, ()> {
8236        match node {
8237            AnyRootNodeRef::Expr(Expr::Attribute(node)) => Ok(node),
8238            _ => Err(()),
8239        }
8240    }
8241}
8242
8243impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSubscript {
8244    type Error = ();
8245    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSubscript, ()> {
8246        match node {
8247            AnyRootNodeRef::Expr(Expr::Subscript(node)) => Ok(node),
8248            _ => Err(()),
8249        }
8250    }
8251}
8252
8253impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprStarred {
8254    type Error = ();
8255    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprStarred, ()> {
8256        match node {
8257            AnyRootNodeRef::Expr(Expr::Starred(node)) => Ok(node),
8258            _ => Err(()),
8259        }
8260    }
8261}
8262
8263impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprName {
8264    type Error = ();
8265    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprName, ()> {
8266        match node {
8267            AnyRootNodeRef::Expr(Expr::Name(node)) => Ok(node),
8268            _ => Err(()),
8269        }
8270    }
8271}
8272
8273impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprList {
8274    type Error = ();
8275    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprList, ()> {
8276        match node {
8277            AnyRootNodeRef::Expr(Expr::List(node)) => Ok(node),
8278            _ => Err(()),
8279        }
8280    }
8281}
8282
8283impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprTuple {
8284    type Error = ();
8285    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprTuple, ()> {
8286        match node {
8287            AnyRootNodeRef::Expr(Expr::Tuple(node)) => Ok(node),
8288            _ => Err(()),
8289        }
8290    }
8291}
8292
8293impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSlice {
8294    type Error = ();
8295    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSlice, ()> {
8296        match node {
8297            AnyRootNodeRef::Expr(Expr::Slice(node)) => Ok(node),
8298            _ => Err(()),
8299        }
8300    }
8301}
8302
8303impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprIpyEscapeCommand {
8304    type Error = ();
8305    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprIpyEscapeCommand, ()> {
8306        match node {
8307            AnyRootNodeRef::Expr(Expr::IpyEscapeCommand(node)) => Ok(node),
8308            _ => Err(()),
8309        }
8310    }
8311}
8312
8313impl<'a> From<&'a ExceptHandler> for AnyRootNodeRef<'a> {
8314    #[inline]
8315    fn from(node: &'a ExceptHandler) -> AnyRootNodeRef<'a> {
8316        AnyRootNodeRef::ExceptHandler(node)
8317    }
8318}
8319
8320impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a ExceptHandler {
8321    type Error = ();
8322    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a ExceptHandler, ()> {
8323        match node {
8324            AnyRootNodeRef::ExceptHandler(node) => Ok(node),
8325            _ => Err(()),
8326        }
8327    }
8328}
8329
8330impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExceptHandlerExceptHandler {
8331    type Error = ();
8332    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExceptHandlerExceptHandler, ()> {
8333        match node {
8334            AnyRootNodeRef::ExceptHandler(ExceptHandler::ExceptHandler(node)) => Ok(node),
8335            _ => Err(()),
8336        }
8337    }
8338}
8339
8340impl<'a> From<&'a InterpolatedStringElement> for AnyRootNodeRef<'a> {
8341    #[inline]
8342    fn from(node: &'a InterpolatedStringElement) -> AnyRootNodeRef<'a> {
8343        AnyRootNodeRef::InterpolatedStringElement(node)
8344    }
8345}
8346
8347impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a InterpolatedStringElement {
8348    type Error = ();
8349    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a InterpolatedStringElement, ()> {
8350        match node {
8351            AnyRootNodeRef::InterpolatedStringElement(node) => Ok(node),
8352            _ => Err(()),
8353        }
8354    }
8355}
8356
8357impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedElement {
8358    type Error = ();
8359    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::InterpolatedElement, ()> {
8360        match node {
8361            AnyRootNodeRef::InterpolatedStringElement(
8362                InterpolatedStringElement::Interpolation(node),
8363            ) => Ok(node),
8364            _ => Err(()),
8365        }
8366    }
8367}
8368
8369impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedStringLiteralElement {
8370    type Error = ();
8371    fn try_from(
8372        node: AnyRootNodeRef<'a>,
8373    ) -> Result<&'a crate::InterpolatedStringLiteralElement, ()> {
8374        match node {
8375            AnyRootNodeRef::InterpolatedStringElement(InterpolatedStringElement::Literal(node)) => {
8376                Ok(node)
8377            }
8378            _ => Err(()),
8379        }
8380    }
8381}
8382
8383impl<'a> From<&'a Pattern> for AnyRootNodeRef<'a> {
8384    #[inline]
8385    fn from(node: &'a Pattern) -> AnyRootNodeRef<'a> {
8386        AnyRootNodeRef::Pattern(node)
8387    }
8388}
8389
8390impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Pattern {
8391    type Error = ();
8392    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Pattern, ()> {
8393        match node {
8394            AnyRootNodeRef::Pattern(node) => Ok(node),
8395            _ => Err(()),
8396        }
8397    }
8398}
8399
8400impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchValue {
8401    type Error = ();
8402    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchValue, ()> {
8403        match node {
8404            AnyRootNodeRef::Pattern(Pattern::MatchValue(node)) => Ok(node),
8405            _ => Err(()),
8406        }
8407    }
8408}
8409
8410impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchSingleton {
8411    type Error = ();
8412    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchSingleton, ()> {
8413        match node {
8414            AnyRootNodeRef::Pattern(Pattern::MatchSingleton(node)) => Ok(node),
8415            _ => Err(()),
8416        }
8417    }
8418}
8419
8420impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchSequence {
8421    type Error = ();
8422    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchSequence, ()> {
8423        match node {
8424            AnyRootNodeRef::Pattern(Pattern::MatchSequence(node)) => Ok(node),
8425            _ => Err(()),
8426        }
8427    }
8428}
8429
8430impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchMapping {
8431    type Error = ();
8432    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchMapping, ()> {
8433        match node {
8434            AnyRootNodeRef::Pattern(Pattern::MatchMapping(node)) => Ok(node),
8435            _ => Err(()),
8436        }
8437    }
8438}
8439
8440impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchClass {
8441    type Error = ();
8442    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchClass, ()> {
8443        match node {
8444            AnyRootNodeRef::Pattern(Pattern::MatchClass(node)) => Ok(node),
8445            _ => Err(()),
8446        }
8447    }
8448}
8449
8450impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchStar {
8451    type Error = ();
8452    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchStar, ()> {
8453        match node {
8454            AnyRootNodeRef::Pattern(Pattern::MatchStar(node)) => Ok(node),
8455            _ => Err(()),
8456        }
8457    }
8458}
8459
8460impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchAs {
8461    type Error = ();
8462    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchAs, ()> {
8463        match node {
8464            AnyRootNodeRef::Pattern(Pattern::MatchAs(node)) => Ok(node),
8465            _ => Err(()),
8466        }
8467    }
8468}
8469
8470impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchOr {
8471    type Error = ();
8472    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchOr, ()> {
8473        match node {
8474            AnyRootNodeRef::Pattern(Pattern::MatchOr(node)) => Ok(node),
8475            _ => Err(()),
8476        }
8477    }
8478}
8479
8480impl<'a> From<&'a TypeParam> for AnyRootNodeRef<'a> {
8481    #[inline]
8482    fn from(node: &'a TypeParam) -> AnyRootNodeRef<'a> {
8483        AnyRootNodeRef::TypeParam(node)
8484    }
8485}
8486
8487impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a TypeParam {
8488    type Error = ();
8489    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a TypeParam, ()> {
8490        match node {
8491            AnyRootNodeRef::TypeParam(node) => Ok(node),
8492            _ => Err(()),
8493        }
8494    }
8495}
8496
8497impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamTypeVar {
8498    type Error = ();
8499    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamTypeVar, ()> {
8500        match node {
8501            AnyRootNodeRef::TypeParam(TypeParam::TypeVar(node)) => Ok(node),
8502            _ => Err(()),
8503        }
8504    }
8505}
8506
8507impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamTypeVarTuple {
8508    type Error = ();
8509    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamTypeVarTuple, ()> {
8510        match node {
8511            AnyRootNodeRef::TypeParam(TypeParam::TypeVarTuple(node)) => Ok(node),
8512            _ => Err(()),
8513        }
8514    }
8515}
8516
8517impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamParamSpec {
8518    type Error = ();
8519    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamParamSpec, ()> {
8520        match node {
8521            AnyRootNodeRef::TypeParam(TypeParam::ParamSpec(node)) => Ok(node),
8522            _ => Err(()),
8523        }
8524    }
8525}
8526
8527impl<'a> From<&'a crate::InterpolatedStringFormatSpec> for AnyRootNodeRef<'a> {
8528    #[inline]
8529    fn from(node: &'a crate::InterpolatedStringFormatSpec) -> AnyRootNodeRef<'a> {
8530        AnyRootNodeRef::InterpolatedStringFormatSpec(node)
8531    }
8532}
8533
8534impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedStringFormatSpec {
8535    type Error = ();
8536    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::InterpolatedStringFormatSpec, ()> {
8537        match node {
8538            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => Ok(node),
8539            _ => Err(()),
8540        }
8541    }
8542}
8543
8544impl<'a> From<&'a crate::PatternArguments> for AnyRootNodeRef<'a> {
8545    #[inline]
8546    fn from(node: &'a crate::PatternArguments) -> AnyRootNodeRef<'a> {
8547        AnyRootNodeRef::PatternArguments(node)
8548    }
8549}
8550
8551impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternArguments {
8552    type Error = ();
8553    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternArguments, ()> {
8554        match node {
8555            AnyRootNodeRef::PatternArguments(node) => Ok(node),
8556            _ => Err(()),
8557        }
8558    }
8559}
8560
8561impl<'a> From<&'a crate::PatternKeyword> for AnyRootNodeRef<'a> {
8562    #[inline]
8563    fn from(node: &'a crate::PatternKeyword) -> AnyRootNodeRef<'a> {
8564        AnyRootNodeRef::PatternKeyword(node)
8565    }
8566}
8567
8568impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternKeyword {
8569    type Error = ();
8570    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternKeyword, ()> {
8571        match node {
8572            AnyRootNodeRef::PatternKeyword(node) => Ok(node),
8573            _ => Err(()),
8574        }
8575    }
8576}
8577
8578impl<'a> From<&'a crate::Comprehension> for AnyRootNodeRef<'a> {
8579    #[inline]
8580    fn from(node: &'a crate::Comprehension) -> AnyRootNodeRef<'a> {
8581        AnyRootNodeRef::Comprehension(node)
8582    }
8583}
8584
8585impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Comprehension {
8586    type Error = ();
8587    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Comprehension, ()> {
8588        match node {
8589            AnyRootNodeRef::Comprehension(node) => Ok(node),
8590            _ => Err(()),
8591        }
8592    }
8593}
8594
8595impl<'a> From<&'a crate::Arguments> for AnyRootNodeRef<'a> {
8596    #[inline]
8597    fn from(node: &'a crate::Arguments) -> AnyRootNodeRef<'a> {
8598        AnyRootNodeRef::Arguments(node)
8599    }
8600}
8601
8602impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Arguments {
8603    type Error = ();
8604    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Arguments, ()> {
8605        match node {
8606            AnyRootNodeRef::Arguments(node) => Ok(node),
8607            _ => Err(()),
8608        }
8609    }
8610}
8611
8612impl<'a> From<&'a crate::Parameters> for AnyRootNodeRef<'a> {
8613    #[inline]
8614    fn from(node: &'a crate::Parameters) -> AnyRootNodeRef<'a> {
8615        AnyRootNodeRef::Parameters(node)
8616    }
8617}
8618
8619impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Parameters {
8620    type Error = ();
8621    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Parameters, ()> {
8622        match node {
8623            AnyRootNodeRef::Parameters(node) => Ok(node),
8624            _ => Err(()),
8625        }
8626    }
8627}
8628
8629impl<'a> From<&'a crate::Parameter> for AnyRootNodeRef<'a> {
8630    #[inline]
8631    fn from(node: &'a crate::Parameter) -> AnyRootNodeRef<'a> {
8632        AnyRootNodeRef::Parameter(node)
8633    }
8634}
8635
8636impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Parameter {
8637    type Error = ();
8638    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Parameter, ()> {
8639        match node {
8640            AnyRootNodeRef::Parameter(node) => Ok(node),
8641            _ => Err(()),
8642        }
8643    }
8644}
8645
8646impl<'a> From<&'a crate::ParameterWithDefault> for AnyRootNodeRef<'a> {
8647    #[inline]
8648    fn from(node: &'a crate::ParameterWithDefault) -> AnyRootNodeRef<'a> {
8649        AnyRootNodeRef::ParameterWithDefault(node)
8650    }
8651}
8652
8653impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ParameterWithDefault {
8654    type Error = ();
8655    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ParameterWithDefault, ()> {
8656        match node {
8657            AnyRootNodeRef::ParameterWithDefault(node) => Ok(node),
8658            _ => Err(()),
8659        }
8660    }
8661}
8662
8663impl<'a> From<&'a crate::Keyword> for AnyRootNodeRef<'a> {
8664    #[inline]
8665    fn from(node: &'a crate::Keyword) -> AnyRootNodeRef<'a> {
8666        AnyRootNodeRef::Keyword(node)
8667    }
8668}
8669
8670impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Keyword {
8671    type Error = ();
8672    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Keyword, ()> {
8673        match node {
8674            AnyRootNodeRef::Keyword(node) => Ok(node),
8675            _ => Err(()),
8676        }
8677    }
8678}
8679
8680impl<'a> From<&'a crate::Alias> for AnyRootNodeRef<'a> {
8681    #[inline]
8682    fn from(node: &'a crate::Alias) -> AnyRootNodeRef<'a> {
8683        AnyRootNodeRef::Alias(node)
8684    }
8685}
8686
8687impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Alias {
8688    type Error = ();
8689    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Alias, ()> {
8690        match node {
8691            AnyRootNodeRef::Alias(node) => Ok(node),
8692            _ => Err(()),
8693        }
8694    }
8695}
8696
8697impl<'a> From<&'a crate::WithItem> for AnyRootNodeRef<'a> {
8698    #[inline]
8699    fn from(node: &'a crate::WithItem) -> AnyRootNodeRef<'a> {
8700        AnyRootNodeRef::WithItem(node)
8701    }
8702}
8703
8704impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::WithItem {
8705    type Error = ();
8706    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::WithItem, ()> {
8707        match node {
8708            AnyRootNodeRef::WithItem(node) => Ok(node),
8709            _ => Err(()),
8710        }
8711    }
8712}
8713
8714impl<'a> From<&'a crate::MatchCase> for AnyRootNodeRef<'a> {
8715    #[inline]
8716    fn from(node: &'a crate::MatchCase) -> AnyRootNodeRef<'a> {
8717        AnyRootNodeRef::MatchCase(node)
8718    }
8719}
8720
8721impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::MatchCase {
8722    type Error = ();
8723    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::MatchCase, ()> {
8724        match node {
8725            AnyRootNodeRef::MatchCase(node) => Ok(node),
8726            _ => Err(()),
8727        }
8728    }
8729}
8730
8731impl<'a> From<&'a crate::Decorator> for AnyRootNodeRef<'a> {
8732    #[inline]
8733    fn from(node: &'a crate::Decorator) -> AnyRootNodeRef<'a> {
8734        AnyRootNodeRef::Decorator(node)
8735    }
8736}
8737
8738impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Decorator {
8739    type Error = ();
8740    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Decorator, ()> {
8741        match node {
8742            AnyRootNodeRef::Decorator(node) => Ok(node),
8743            _ => Err(()),
8744        }
8745    }
8746}
8747
8748impl<'a> From<&'a crate::ElifElseClause> for AnyRootNodeRef<'a> {
8749    #[inline]
8750    fn from(node: &'a crate::ElifElseClause) -> AnyRootNodeRef<'a> {
8751        AnyRootNodeRef::ElifElseClause(node)
8752    }
8753}
8754
8755impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ElifElseClause {
8756    type Error = ();
8757    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ElifElseClause, ()> {
8758        match node {
8759            AnyRootNodeRef::ElifElseClause(node) => Ok(node),
8760            _ => Err(()),
8761        }
8762    }
8763}
8764
8765impl<'a> From<&'a crate::TypeParams> for AnyRootNodeRef<'a> {
8766    #[inline]
8767    fn from(node: &'a crate::TypeParams) -> AnyRootNodeRef<'a> {
8768        AnyRootNodeRef::TypeParams(node)
8769    }
8770}
8771
8772impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParams {
8773    type Error = ();
8774    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParams, ()> {
8775        match node {
8776            AnyRootNodeRef::TypeParams(node) => Ok(node),
8777            _ => Err(()),
8778        }
8779    }
8780}
8781
8782impl<'a> From<&'a crate::FString> for AnyRootNodeRef<'a> {
8783    #[inline]
8784    fn from(node: &'a crate::FString) -> AnyRootNodeRef<'a> {
8785        AnyRootNodeRef::FString(node)
8786    }
8787}
8788
8789impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::FString {
8790    type Error = ();
8791    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::FString, ()> {
8792        match node {
8793            AnyRootNodeRef::FString(node) => Ok(node),
8794            _ => Err(()),
8795        }
8796    }
8797}
8798
8799impl<'a> From<&'a crate::TString> for AnyRootNodeRef<'a> {
8800    #[inline]
8801    fn from(node: &'a crate::TString) -> AnyRootNodeRef<'a> {
8802        AnyRootNodeRef::TString(node)
8803    }
8804}
8805
8806impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TString {
8807    type Error = ();
8808    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TString, ()> {
8809        match node {
8810            AnyRootNodeRef::TString(node) => Ok(node),
8811            _ => Err(()),
8812        }
8813    }
8814}
8815
8816impl<'a> From<&'a crate::StringLiteral> for AnyRootNodeRef<'a> {
8817    #[inline]
8818    fn from(node: &'a crate::StringLiteral) -> AnyRootNodeRef<'a> {
8819        AnyRootNodeRef::StringLiteral(node)
8820    }
8821}
8822
8823impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StringLiteral {
8824    type Error = ();
8825    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StringLiteral, ()> {
8826        match node {
8827            AnyRootNodeRef::StringLiteral(node) => Ok(node),
8828            _ => Err(()),
8829        }
8830    }
8831}
8832
8833impl<'a> From<&'a crate::BytesLiteral> for AnyRootNodeRef<'a> {
8834    #[inline]
8835    fn from(node: &'a crate::BytesLiteral) -> AnyRootNodeRef<'a> {
8836        AnyRootNodeRef::BytesLiteral(node)
8837    }
8838}
8839
8840impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::BytesLiteral {
8841    type Error = ();
8842    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::BytesLiteral, ()> {
8843        match node {
8844            AnyRootNodeRef::BytesLiteral(node) => Ok(node),
8845            _ => Err(()),
8846        }
8847    }
8848}
8849
8850impl<'a> From<&'a crate::Identifier> for AnyRootNodeRef<'a> {
8851    #[inline]
8852    fn from(node: &'a crate::Identifier) -> AnyRootNodeRef<'a> {
8853        AnyRootNodeRef::Identifier(node)
8854    }
8855}
8856
8857impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Identifier {
8858    type Error = ();
8859    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Identifier, ()> {
8860        match node {
8861            AnyRootNodeRef::Identifier(node) => Ok(node),
8862            _ => Err(()),
8863        }
8864    }
8865}
8866
8867impl ruff_text_size::Ranged for AnyRootNodeRef<'_> {
8868    fn range(&self) -> ruff_text_size::TextRange {
8869        match self {
8870            AnyRootNodeRef::Mod(node) => node.range(),
8871            AnyRootNodeRef::Stmt(node) => node.range(),
8872            AnyRootNodeRef::Expr(node) => node.range(),
8873            AnyRootNodeRef::ExceptHandler(node) => node.range(),
8874            AnyRootNodeRef::InterpolatedStringElement(node) => node.range(),
8875            AnyRootNodeRef::Pattern(node) => node.range(),
8876            AnyRootNodeRef::TypeParam(node) => node.range(),
8877            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.range(),
8878            AnyRootNodeRef::PatternArguments(node) => node.range(),
8879            AnyRootNodeRef::PatternKeyword(node) => node.range(),
8880            AnyRootNodeRef::Comprehension(node) => node.range(),
8881            AnyRootNodeRef::Arguments(node) => node.range(),
8882            AnyRootNodeRef::Parameters(node) => node.range(),
8883            AnyRootNodeRef::Parameter(node) => node.range(),
8884            AnyRootNodeRef::ParameterWithDefault(node) => node.range(),
8885            AnyRootNodeRef::Keyword(node) => node.range(),
8886            AnyRootNodeRef::Alias(node) => node.range(),
8887            AnyRootNodeRef::WithItem(node) => node.range(),
8888            AnyRootNodeRef::MatchCase(node) => node.range(),
8889            AnyRootNodeRef::Decorator(node) => node.range(),
8890            AnyRootNodeRef::ElifElseClause(node) => node.range(),
8891            AnyRootNodeRef::TypeParams(node) => node.range(),
8892            AnyRootNodeRef::FString(node) => node.range(),
8893            AnyRootNodeRef::TString(node) => node.range(),
8894            AnyRootNodeRef::StringLiteral(node) => node.range(),
8895            AnyRootNodeRef::BytesLiteral(node) => node.range(),
8896            AnyRootNodeRef::Identifier(node) => node.range(),
8897        }
8898    }
8899}
8900
8901impl crate::HasNodeIndex for AnyRootNodeRef<'_> {
8902    fn node_index(&self) -> &crate::AtomicNodeIndex {
8903        match self {
8904            AnyRootNodeRef::Mod(node) => node.node_index(),
8905            AnyRootNodeRef::Stmt(node) => node.node_index(),
8906            AnyRootNodeRef::Expr(node) => node.node_index(),
8907            AnyRootNodeRef::ExceptHandler(node) => node.node_index(),
8908            AnyRootNodeRef::InterpolatedStringElement(node) => node.node_index(),
8909            AnyRootNodeRef::Pattern(node) => node.node_index(),
8910            AnyRootNodeRef::TypeParam(node) => node.node_index(),
8911            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.node_index(),
8912            AnyRootNodeRef::PatternArguments(node) => node.node_index(),
8913            AnyRootNodeRef::PatternKeyword(node) => node.node_index(),
8914            AnyRootNodeRef::Comprehension(node) => node.node_index(),
8915            AnyRootNodeRef::Arguments(node) => node.node_index(),
8916            AnyRootNodeRef::Parameters(node) => node.node_index(),
8917            AnyRootNodeRef::Parameter(node) => node.node_index(),
8918            AnyRootNodeRef::ParameterWithDefault(node) => node.node_index(),
8919            AnyRootNodeRef::Keyword(node) => node.node_index(),
8920            AnyRootNodeRef::Alias(node) => node.node_index(),
8921            AnyRootNodeRef::WithItem(node) => node.node_index(),
8922            AnyRootNodeRef::MatchCase(node) => node.node_index(),
8923            AnyRootNodeRef::Decorator(node) => node.node_index(),
8924            AnyRootNodeRef::ElifElseClause(node) => node.node_index(),
8925            AnyRootNodeRef::TypeParams(node) => node.node_index(),
8926            AnyRootNodeRef::FString(node) => node.node_index(),
8927            AnyRootNodeRef::TString(node) => node.node_index(),
8928            AnyRootNodeRef::StringLiteral(node) => node.node_index(),
8929            AnyRootNodeRef::BytesLiteral(node) => node.node_index(),
8930            AnyRootNodeRef::Identifier(node) => node.node_index(),
8931        }
8932    }
8933}
8934
8935impl<'a> AnyRootNodeRef<'a> {
8936    /// Decomposes this reference into its root node kind and a type-erased pointer.
8937    #[inline]
8938    pub fn into_raw_parts(self) -> (RootNodeKind, std::ptr::NonNull<()>) {
8939        match self {
8940            AnyRootNodeRef::Mod(node) => (RootNodeKind::Mod, std::ptr::NonNull::from(node).cast()),
8941            AnyRootNodeRef::Stmt(node) => {
8942                (RootNodeKind::Stmt, std::ptr::NonNull::from(node).cast())
8943            }
8944            AnyRootNodeRef::Expr(node) => {
8945                (RootNodeKind::Expr, std::ptr::NonNull::from(node).cast())
8946            }
8947            AnyRootNodeRef::ExceptHandler(node) => (
8948                RootNodeKind::ExceptHandler,
8949                std::ptr::NonNull::from(node).cast(),
8950            ),
8951            AnyRootNodeRef::InterpolatedStringElement(node) => (
8952                RootNodeKind::InterpolatedStringElement,
8953                std::ptr::NonNull::from(node).cast(),
8954            ),
8955            AnyRootNodeRef::Pattern(node) => {
8956                (RootNodeKind::Pattern, std::ptr::NonNull::from(node).cast())
8957            }
8958            AnyRootNodeRef::TypeParam(node) => (
8959                RootNodeKind::TypeParam,
8960                std::ptr::NonNull::from(node).cast(),
8961            ),
8962            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => (
8963                RootNodeKind::InterpolatedStringFormatSpec,
8964                std::ptr::NonNull::from(node).cast(),
8965            ),
8966            AnyRootNodeRef::PatternArguments(node) => (
8967                RootNodeKind::PatternArguments,
8968                std::ptr::NonNull::from(node).cast(),
8969            ),
8970            AnyRootNodeRef::PatternKeyword(node) => (
8971                RootNodeKind::PatternKeyword,
8972                std::ptr::NonNull::from(node).cast(),
8973            ),
8974            AnyRootNodeRef::Comprehension(node) => (
8975                RootNodeKind::Comprehension,
8976                std::ptr::NonNull::from(node).cast(),
8977            ),
8978            AnyRootNodeRef::Arguments(node) => (
8979                RootNodeKind::Arguments,
8980                std::ptr::NonNull::from(node).cast(),
8981            ),
8982            AnyRootNodeRef::Parameters(node) => (
8983                RootNodeKind::Parameters,
8984                std::ptr::NonNull::from(node).cast(),
8985            ),
8986            AnyRootNodeRef::Parameter(node) => (
8987                RootNodeKind::Parameter,
8988                std::ptr::NonNull::from(node).cast(),
8989            ),
8990            AnyRootNodeRef::ParameterWithDefault(node) => (
8991                RootNodeKind::ParameterWithDefault,
8992                std::ptr::NonNull::from(node).cast(),
8993            ),
8994            AnyRootNodeRef::Keyword(node) => {
8995                (RootNodeKind::Keyword, std::ptr::NonNull::from(node).cast())
8996            }
8997            AnyRootNodeRef::Alias(node) => {
8998                (RootNodeKind::Alias, std::ptr::NonNull::from(node).cast())
8999            }
9000            AnyRootNodeRef::WithItem(node) => {
9001                (RootNodeKind::WithItem, std::ptr::NonNull::from(node).cast())
9002            }
9003            AnyRootNodeRef::MatchCase(node) => (
9004                RootNodeKind::MatchCase,
9005                std::ptr::NonNull::from(node).cast(),
9006            ),
9007            AnyRootNodeRef::Decorator(node) => (
9008                RootNodeKind::Decorator,
9009                std::ptr::NonNull::from(node).cast(),
9010            ),
9011            AnyRootNodeRef::ElifElseClause(node) => (
9012                RootNodeKind::ElifElseClause,
9013                std::ptr::NonNull::from(node).cast(),
9014            ),
9015            AnyRootNodeRef::TypeParams(node) => (
9016                RootNodeKind::TypeParams,
9017                std::ptr::NonNull::from(node).cast(),
9018            ),
9019            AnyRootNodeRef::FString(node) => {
9020                (RootNodeKind::FString, std::ptr::NonNull::from(node).cast())
9021            }
9022            AnyRootNodeRef::TString(node) => {
9023                (RootNodeKind::TString, std::ptr::NonNull::from(node).cast())
9024            }
9025            AnyRootNodeRef::StringLiteral(node) => (
9026                RootNodeKind::StringLiteral,
9027                std::ptr::NonNull::from(node).cast(),
9028            ),
9029            AnyRootNodeRef::BytesLiteral(node) => (
9030                RootNodeKind::BytesLiteral,
9031                std::ptr::NonNull::from(node).cast(),
9032            ),
9033            AnyRootNodeRef::Identifier(node) => (
9034                RootNodeKind::Identifier,
9035                std::ptr::NonNull::from(node).cast(),
9036            ),
9037        }
9038    }
9039
9040    /// Reconstructs an AST reference from its root node kind and type-erased pointer.
9041    ///
9042    /// # Safety
9043    ///
9044    /// - `pointer` must be properly aligned for and point to the exact root node type
9045    ///   represented by `kind`.
9046    /// - The pointer's provenance must permit reads of a complete, initialized, and valid
9047    ///   value of that type.
9048    /// - The pointed-to value must not be moved, dropped, or accessed mutably for `'a`.
9049    #[inline]
9050    #[expect(unsafe_code, reason = "reconstructs a type-erased AST reference")]
9051    pub unsafe fn from_raw_parts(kind: RootNodeKind, pointer: std::ptr::NonNull<()>) -> Self {
9052        let pointer = pointer.as_ptr();
9053        // SAFETY: The caller guarantees that `pointer` is readable as the exact root node
9054        // type selected by `kind` and remains valid and immutable for `'a`.
9055        unsafe {
9056            match kind {
9057                RootNodeKind::Mod => AnyRootNodeRef::Mod(&*pointer.cast::<Mod>()),
9058                RootNodeKind::Stmt => AnyRootNodeRef::Stmt(&*pointer.cast::<Stmt>()),
9059                RootNodeKind::Expr => AnyRootNodeRef::Expr(&*pointer.cast::<Expr>()),
9060                RootNodeKind::ExceptHandler => {
9061                    AnyRootNodeRef::ExceptHandler(&*pointer.cast::<ExceptHandler>())
9062                }
9063                RootNodeKind::InterpolatedStringElement => {
9064                    AnyRootNodeRef::InterpolatedStringElement(
9065                        &*pointer.cast::<InterpolatedStringElement>(),
9066                    )
9067                }
9068                RootNodeKind::Pattern => AnyRootNodeRef::Pattern(&*pointer.cast::<Pattern>()),
9069                RootNodeKind::TypeParam => AnyRootNodeRef::TypeParam(&*pointer.cast::<TypeParam>()),
9070                RootNodeKind::InterpolatedStringFormatSpec => {
9071                    AnyRootNodeRef::InterpolatedStringFormatSpec(
9072                        &*pointer.cast::<crate::InterpolatedStringFormatSpec>(),
9073                    )
9074                }
9075                RootNodeKind::PatternArguments => {
9076                    AnyRootNodeRef::PatternArguments(&*pointer.cast::<crate::PatternArguments>())
9077                }
9078                RootNodeKind::PatternKeyword => {
9079                    AnyRootNodeRef::PatternKeyword(&*pointer.cast::<crate::PatternKeyword>())
9080                }
9081                RootNodeKind::Comprehension => {
9082                    AnyRootNodeRef::Comprehension(&*pointer.cast::<crate::Comprehension>())
9083                }
9084                RootNodeKind::Arguments => {
9085                    AnyRootNodeRef::Arguments(&*pointer.cast::<crate::Arguments>())
9086                }
9087                RootNodeKind::Parameters => {
9088                    AnyRootNodeRef::Parameters(&*pointer.cast::<crate::Parameters>())
9089                }
9090                RootNodeKind::Parameter => {
9091                    AnyRootNodeRef::Parameter(&*pointer.cast::<crate::Parameter>())
9092                }
9093                RootNodeKind::ParameterWithDefault => AnyRootNodeRef::ParameterWithDefault(
9094                    &*pointer.cast::<crate::ParameterWithDefault>(),
9095                ),
9096                RootNodeKind::Keyword => {
9097                    AnyRootNodeRef::Keyword(&*pointer.cast::<crate::Keyword>())
9098                }
9099                RootNodeKind::Alias => AnyRootNodeRef::Alias(&*pointer.cast::<crate::Alias>()),
9100                RootNodeKind::WithItem => {
9101                    AnyRootNodeRef::WithItem(&*pointer.cast::<crate::WithItem>())
9102                }
9103                RootNodeKind::MatchCase => {
9104                    AnyRootNodeRef::MatchCase(&*pointer.cast::<crate::MatchCase>())
9105                }
9106                RootNodeKind::Decorator => {
9107                    AnyRootNodeRef::Decorator(&*pointer.cast::<crate::Decorator>())
9108                }
9109                RootNodeKind::ElifElseClause => {
9110                    AnyRootNodeRef::ElifElseClause(&*pointer.cast::<crate::ElifElseClause>())
9111                }
9112                RootNodeKind::TypeParams => {
9113                    AnyRootNodeRef::TypeParams(&*pointer.cast::<crate::TypeParams>())
9114                }
9115                RootNodeKind::FString => {
9116                    AnyRootNodeRef::FString(&*pointer.cast::<crate::FString>())
9117                }
9118                RootNodeKind::TString => {
9119                    AnyRootNodeRef::TString(&*pointer.cast::<crate::TString>())
9120                }
9121                RootNodeKind::StringLiteral => {
9122                    AnyRootNodeRef::StringLiteral(&*pointer.cast::<crate::StringLiteral>())
9123                }
9124                RootNodeKind::BytesLiteral => {
9125                    AnyRootNodeRef::BytesLiteral(&*pointer.cast::<crate::BytesLiteral>())
9126                }
9127                RootNodeKind::Identifier => {
9128                    AnyRootNodeRef::Identifier(&*pointer.cast::<crate::Identifier>())
9129                }
9130            }
9131        }
9132    }
9133
9134    pub fn visit_source_order<'b, V>(self, visitor: &mut V)
9135    where
9136        V: crate::visitor::source_order::SourceOrderVisitor<'b> + ?Sized,
9137        'a: 'b,
9138    {
9139        match self {
9140            AnyRootNodeRef::Mod(node) => node.visit_source_order(visitor),
9141            AnyRootNodeRef::Stmt(node) => node.visit_source_order(visitor),
9142            AnyRootNodeRef::Expr(node) => node.visit_source_order(visitor),
9143            AnyRootNodeRef::ExceptHandler(node) => node.visit_source_order(visitor),
9144            AnyRootNodeRef::InterpolatedStringElement(node) => node.visit_source_order(visitor),
9145            AnyRootNodeRef::Pattern(node) => node.visit_source_order(visitor),
9146            AnyRootNodeRef::TypeParam(node) => node.visit_source_order(visitor),
9147            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.visit_source_order(visitor),
9148            AnyRootNodeRef::PatternArguments(node) => node.visit_source_order(visitor),
9149            AnyRootNodeRef::PatternKeyword(node) => node.visit_source_order(visitor),
9150            AnyRootNodeRef::Comprehension(node) => node.visit_source_order(visitor),
9151            AnyRootNodeRef::Arguments(node) => node.visit_source_order(visitor),
9152            AnyRootNodeRef::Parameters(node) => node.visit_source_order(visitor),
9153            AnyRootNodeRef::Parameter(node) => node.visit_source_order(visitor),
9154            AnyRootNodeRef::ParameterWithDefault(node) => node.visit_source_order(visitor),
9155            AnyRootNodeRef::Keyword(node) => node.visit_source_order(visitor),
9156            AnyRootNodeRef::Alias(node) => node.visit_source_order(visitor),
9157            AnyRootNodeRef::WithItem(node) => node.visit_source_order(visitor),
9158            AnyRootNodeRef::MatchCase(node) => node.visit_source_order(visitor),
9159            AnyRootNodeRef::Decorator(node) => node.visit_source_order(visitor),
9160            AnyRootNodeRef::ElifElseClause(node) => node.visit_source_order(visitor),
9161            AnyRootNodeRef::TypeParams(node) => node.visit_source_order(visitor),
9162            AnyRootNodeRef::FString(node) => node.visit_source_order(visitor),
9163            AnyRootNodeRef::TString(node) => node.visit_source_order(visitor),
9164            AnyRootNodeRef::StringLiteral(node) => node.visit_source_order(visitor),
9165            AnyRootNodeRef::BytesLiteral(node) => node.visit_source_order(visitor),
9166            AnyRootNodeRef::Identifier(node) => node.visit_source_order(visitor),
9167        }
9168    }
9169}
9170
9171#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
9172pub enum NodeKind {
9173    ModModule,
9174    ModExpression,
9175    StmtFunctionDef,
9176    StmtClassDef,
9177    StmtReturn,
9178    StmtDelete,
9179    StmtTypeAlias,
9180    StmtAssign,
9181    StmtAugAssign,
9182    StmtAnnAssign,
9183    StmtFor,
9184    StmtWhile,
9185    StmtIf,
9186    StmtWith,
9187    StmtMatch,
9188    StmtRaise,
9189    StmtTry,
9190    StmtAssert,
9191    StmtImport,
9192    StmtImportFrom,
9193    StmtGlobal,
9194    StmtNonlocal,
9195    StmtExpr,
9196    StmtPass,
9197    StmtBreak,
9198    StmtContinue,
9199    StmtIpyEscapeCommand,
9200    ExprBoolOp,
9201    ExprNamed,
9202    ExprBinOp,
9203    ExprUnaryOp,
9204    ExprLambda,
9205    ExprIf,
9206    ExprDict,
9207    ExprSet,
9208    ExprListComp,
9209    ExprSetComp,
9210    ExprDictComp,
9211    ExprGenerator,
9212    ExprAwait,
9213    ExprYield,
9214    ExprYieldFrom,
9215    ExprCompare,
9216    ExprCall,
9217    ExprFString,
9218    ExprTString,
9219    ExprStringLiteral,
9220    ExprBytesLiteral,
9221    ExprNumberLiteral,
9222    ExprBooleanLiteral,
9223    ExprNoneLiteral,
9224    ExprEllipsisLiteral,
9225    ExprConstant,
9226    ExprAttribute,
9227    ExprSubscript,
9228    ExprStarred,
9229    ExprName,
9230    ExprList,
9231    ExprTuple,
9232    ExprSlice,
9233    ExprIpyEscapeCommand,
9234    ExceptHandlerExceptHandler,
9235    InterpolatedElement,
9236    InterpolatedStringLiteralElement,
9237    PatternMatchValue,
9238    PatternMatchSingleton,
9239    PatternMatchSequence,
9240    PatternMatchMapping,
9241    PatternMatchClass,
9242    PatternMatchStar,
9243    PatternMatchAs,
9244    PatternMatchOr,
9245    TypeParamTypeVar,
9246    TypeParamTypeVarTuple,
9247    TypeParamParamSpec,
9248    InterpolatedStringFormatSpec,
9249    PatternArguments,
9250    PatternKeyword,
9251    Comprehension,
9252    Arguments,
9253    Parameters,
9254    Parameter,
9255    ParameterWithDefault,
9256    Keyword,
9257    Alias,
9258    WithItem,
9259    MatchCase,
9260    Decorator,
9261    ElifElseClause,
9262    TypeParams,
9263    FString,
9264    TString,
9265    StringLiteral,
9266    BytesLiteral,
9267    Identifier,
9268}
9269
9270impl AnyNodeRef<'_> {
9271    pub const fn kind(self) -> NodeKind {
9272        match self {
9273            AnyNodeRef::ModModule(_) => NodeKind::ModModule,
9274            AnyNodeRef::ModExpression(_) => NodeKind::ModExpression,
9275            AnyNodeRef::StmtFunctionDef(_) => NodeKind::StmtFunctionDef,
9276            AnyNodeRef::StmtClassDef(_) => NodeKind::StmtClassDef,
9277            AnyNodeRef::StmtReturn(_) => NodeKind::StmtReturn,
9278            AnyNodeRef::StmtDelete(_) => NodeKind::StmtDelete,
9279            AnyNodeRef::StmtTypeAlias(_) => NodeKind::StmtTypeAlias,
9280            AnyNodeRef::StmtAssign(_) => NodeKind::StmtAssign,
9281            AnyNodeRef::StmtAugAssign(_) => NodeKind::StmtAugAssign,
9282            AnyNodeRef::StmtAnnAssign(_) => NodeKind::StmtAnnAssign,
9283            AnyNodeRef::StmtFor(_) => NodeKind::StmtFor,
9284            AnyNodeRef::StmtWhile(_) => NodeKind::StmtWhile,
9285            AnyNodeRef::StmtIf(_) => NodeKind::StmtIf,
9286            AnyNodeRef::StmtWith(_) => NodeKind::StmtWith,
9287            AnyNodeRef::StmtMatch(_) => NodeKind::StmtMatch,
9288            AnyNodeRef::StmtRaise(_) => NodeKind::StmtRaise,
9289            AnyNodeRef::StmtTry(_) => NodeKind::StmtTry,
9290            AnyNodeRef::StmtAssert(_) => NodeKind::StmtAssert,
9291            AnyNodeRef::StmtImport(_) => NodeKind::StmtImport,
9292            AnyNodeRef::StmtImportFrom(_) => NodeKind::StmtImportFrom,
9293            AnyNodeRef::StmtGlobal(_) => NodeKind::StmtGlobal,
9294            AnyNodeRef::StmtNonlocal(_) => NodeKind::StmtNonlocal,
9295            AnyNodeRef::StmtExpr(_) => NodeKind::StmtExpr,
9296            AnyNodeRef::StmtPass(_) => NodeKind::StmtPass,
9297            AnyNodeRef::StmtBreak(_) => NodeKind::StmtBreak,
9298            AnyNodeRef::StmtContinue(_) => NodeKind::StmtContinue,
9299            AnyNodeRef::StmtIpyEscapeCommand(_) => NodeKind::StmtIpyEscapeCommand,
9300            AnyNodeRef::ExprBoolOp(_) => NodeKind::ExprBoolOp,
9301            AnyNodeRef::ExprNamed(_) => NodeKind::ExprNamed,
9302            AnyNodeRef::ExprBinOp(_) => NodeKind::ExprBinOp,
9303            AnyNodeRef::ExprUnaryOp(_) => NodeKind::ExprUnaryOp,
9304            AnyNodeRef::ExprLambda(_) => NodeKind::ExprLambda,
9305            AnyNodeRef::ExprIf(_) => NodeKind::ExprIf,
9306            AnyNodeRef::ExprDict(_) => NodeKind::ExprDict,
9307            AnyNodeRef::ExprSet(_) => NodeKind::ExprSet,
9308            AnyNodeRef::ExprListComp(_) => NodeKind::ExprListComp,
9309            AnyNodeRef::ExprSetComp(_) => NodeKind::ExprSetComp,
9310            AnyNodeRef::ExprDictComp(_) => NodeKind::ExprDictComp,
9311            AnyNodeRef::ExprGenerator(_) => NodeKind::ExprGenerator,
9312            AnyNodeRef::ExprAwait(_) => NodeKind::ExprAwait,
9313            AnyNodeRef::ExprYield(_) => NodeKind::ExprYield,
9314            AnyNodeRef::ExprYieldFrom(_) => NodeKind::ExprYieldFrom,
9315            AnyNodeRef::ExprCompare(_) => NodeKind::ExprCompare,
9316            AnyNodeRef::ExprCall(_) => NodeKind::ExprCall,
9317            AnyNodeRef::ExprFString(_) => NodeKind::ExprFString,
9318            AnyNodeRef::ExprTString(_) => NodeKind::ExprTString,
9319            AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral,
9320            AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral,
9321            AnyNodeRef::ExprNumberLiteral(_) => NodeKind::ExprNumberLiteral,
9322            AnyNodeRef::ExprBooleanLiteral(_) => NodeKind::ExprBooleanLiteral,
9323            AnyNodeRef::ExprNoneLiteral(_) => NodeKind::ExprNoneLiteral,
9324            AnyNodeRef::ExprEllipsisLiteral(_) => NodeKind::ExprEllipsisLiteral,
9325            AnyNodeRef::ExprConstant(_) => NodeKind::ExprConstant,
9326            AnyNodeRef::ExprAttribute(_) => NodeKind::ExprAttribute,
9327            AnyNodeRef::ExprSubscript(_) => NodeKind::ExprSubscript,
9328            AnyNodeRef::ExprStarred(_) => NodeKind::ExprStarred,
9329            AnyNodeRef::ExprName(_) => NodeKind::ExprName,
9330            AnyNodeRef::ExprList(_) => NodeKind::ExprList,
9331            AnyNodeRef::ExprTuple(_) => NodeKind::ExprTuple,
9332            AnyNodeRef::ExprSlice(_) => NodeKind::ExprSlice,
9333            AnyNodeRef::ExprIpyEscapeCommand(_) => NodeKind::ExprIpyEscapeCommand,
9334            AnyNodeRef::ExceptHandlerExceptHandler(_) => NodeKind::ExceptHandlerExceptHandler,
9335            AnyNodeRef::InterpolatedElement(_) => NodeKind::InterpolatedElement,
9336            AnyNodeRef::InterpolatedStringLiteralElement(_) => {
9337                NodeKind::InterpolatedStringLiteralElement
9338            }
9339            AnyNodeRef::PatternMatchValue(_) => NodeKind::PatternMatchValue,
9340            AnyNodeRef::PatternMatchSingleton(_) => NodeKind::PatternMatchSingleton,
9341            AnyNodeRef::PatternMatchSequence(_) => NodeKind::PatternMatchSequence,
9342            AnyNodeRef::PatternMatchMapping(_) => NodeKind::PatternMatchMapping,
9343            AnyNodeRef::PatternMatchClass(_) => NodeKind::PatternMatchClass,
9344            AnyNodeRef::PatternMatchStar(_) => NodeKind::PatternMatchStar,
9345            AnyNodeRef::PatternMatchAs(_) => NodeKind::PatternMatchAs,
9346            AnyNodeRef::PatternMatchOr(_) => NodeKind::PatternMatchOr,
9347            AnyNodeRef::TypeParamTypeVar(_) => NodeKind::TypeParamTypeVar,
9348            AnyNodeRef::TypeParamTypeVarTuple(_) => NodeKind::TypeParamTypeVarTuple,
9349            AnyNodeRef::TypeParamParamSpec(_) => NodeKind::TypeParamParamSpec,
9350            AnyNodeRef::InterpolatedStringFormatSpec(_) => NodeKind::InterpolatedStringFormatSpec,
9351            AnyNodeRef::PatternArguments(_) => NodeKind::PatternArguments,
9352            AnyNodeRef::PatternKeyword(_) => NodeKind::PatternKeyword,
9353            AnyNodeRef::Comprehension(_) => NodeKind::Comprehension,
9354            AnyNodeRef::Arguments(_) => NodeKind::Arguments,
9355            AnyNodeRef::Parameters(_) => NodeKind::Parameters,
9356            AnyNodeRef::Parameter(_) => NodeKind::Parameter,
9357            AnyNodeRef::ParameterWithDefault(_) => NodeKind::ParameterWithDefault,
9358            AnyNodeRef::Keyword(_) => NodeKind::Keyword,
9359            AnyNodeRef::Alias(_) => NodeKind::Alias,
9360            AnyNodeRef::WithItem(_) => NodeKind::WithItem,
9361            AnyNodeRef::MatchCase(_) => NodeKind::MatchCase,
9362            AnyNodeRef::Decorator(_) => NodeKind::Decorator,
9363            AnyNodeRef::ElifElseClause(_) => NodeKind::ElifElseClause,
9364            AnyNodeRef::TypeParams(_) => NodeKind::TypeParams,
9365            AnyNodeRef::FString(_) => NodeKind::FString,
9366            AnyNodeRef::TString(_) => NodeKind::TString,
9367            AnyNodeRef::StringLiteral(_) => NodeKind::StringLiteral,
9368            AnyNodeRef::BytesLiteral(_) => NodeKind::BytesLiteral,
9369            AnyNodeRef::Identifier(_) => NodeKind::Identifier,
9370        }
9371    }
9372}
9373
9374/// See also [Module](https://docs.python.org/3/library/ast.html#ast.Module)
9375#[derive(Clone, Debug, PartialEq)]
9376#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9377pub struct ModModule {
9378    pub node_index: crate::AtomicNodeIndex,
9379    pub range: ruff_text_size::TextRange,
9380    pub body: thin_vec::ThinVec<Stmt>,
9381    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9382}
9383
9384/// See also [Module](https://docs.python.org/3/library/ast.html#ast.Module)
9385#[derive(Clone, Debug, PartialEq)]
9386#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9387pub struct ModExpression {
9388    pub node_index: crate::AtomicNodeIndex,
9389    pub range: ruff_text_size::TextRange,
9390    pub body: Box<Expr>,
9391}
9392
9393/// See also [FunctionDef](https://docs.python.org/3/library/ast.html#ast.FunctionDef)
9394/// and [AsyncFunctionDef](https://docs.python.org/3/library/ast.html#ast.AsyncFunctionDef).
9395///
9396/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9397#[derive(Clone, Debug, PartialEq)]
9398#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9399pub struct StmtFunctionDef {
9400    pub node_index: crate::AtomicNodeIndex,
9401    pub range: ruff_text_size::TextRange,
9402    pub is_async: bool,
9403    pub decorator_list: thin_vec::ThinVec<crate::Decorator>,
9404    pub name: crate::Identifier,
9405    pub type_params: Option<Box<crate::TypeParams>>,
9406    pub parameters: Box<crate::Parameters>,
9407    pub returns: Option<Box<Expr>>,
9408    pub body: thin_vec::ThinVec<Stmt>,
9409    pub runtime_decorator_list: Option<Vec<Option<crate::Expr>>>,
9410    pub runtime_type_comment: Option<Box<str>>,
9411    pub runtime_type_comment_bytes: Option<Vec<u8>>,
9412    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9413}
9414
9415/// See also [ClassDef](https://docs.python.org/3/library/ast.html#ast.ClassDef)
9416#[derive(Clone, Debug, PartialEq)]
9417#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9418pub struct StmtClassDef {
9419    pub node_index: crate::AtomicNodeIndex,
9420    pub range: ruff_text_size::TextRange,
9421    pub decorator_list: thin_vec::ThinVec<crate::Decorator>,
9422    pub name: crate::Identifier,
9423    pub type_params: Option<Box<crate::TypeParams>>,
9424    pub arguments: Option<Box<crate::Arguments>>,
9425    pub body: thin_vec::ThinVec<Stmt>,
9426    pub runtime_decorator_list: Option<Vec<Option<crate::Expr>>>,
9427    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9428}
9429
9430/// See also [Return](https://docs.python.org/3/library/ast.html#ast.Return)
9431#[derive(Clone, Debug, PartialEq)]
9432#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9433pub struct StmtReturn {
9434    pub node_index: crate::AtomicNodeIndex,
9435    pub range: ruff_text_size::TextRange,
9436    pub value: Option<Box<Expr>>,
9437}
9438
9439/// See also [Delete](https://docs.python.org/3/library/ast.html#ast.Delete)
9440#[derive(Clone, Debug, PartialEq)]
9441#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9442pub struct StmtDelete {
9443    pub node_index: crate::AtomicNodeIndex,
9444    pub range: ruff_text_size::TextRange,
9445    pub targets: Vec<Expr>,
9446    pub runtime_targets: Option<Vec<Option<crate::Expr>>>,
9447}
9448
9449/// See also [TypeAlias](https://docs.python.org/3/library/ast.html#ast.TypeAlias)
9450#[derive(Clone, Debug, PartialEq)]
9451#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9452pub struct StmtTypeAlias {
9453    pub node_index: crate::AtomicNodeIndex,
9454    pub range: ruff_text_size::TextRange,
9455    pub name: Box<Expr>,
9456    pub type_params: Option<Box<crate::TypeParams>>,
9457    pub value: Box<Expr>,
9458}
9459
9460/// See also [Assign](https://docs.python.org/3/library/ast.html#ast.Assign)
9461#[derive(Clone, Debug, PartialEq)]
9462#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9463pub struct StmtAssign {
9464    pub node_index: crate::AtomicNodeIndex,
9465    pub range: ruff_text_size::TextRange,
9466    pub targets: Vec<Expr>,
9467    pub value: Box<Expr>,
9468    pub runtime_targets: Option<Vec<Option<crate::Expr>>>,
9469    pub runtime_type_comment: Option<Box<str>>,
9470    pub runtime_type_comment_bytes: Option<Vec<u8>>,
9471}
9472
9473/// See also [AugAssign](https://docs.python.org/3/library/ast.html#ast.AugAssign)
9474#[derive(Clone, Debug, PartialEq)]
9475#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9476pub struct StmtAugAssign {
9477    pub node_index: crate::AtomicNodeIndex,
9478    pub range: ruff_text_size::TextRange,
9479    pub target: Box<Expr>,
9480    pub op: crate::Operator,
9481    pub value: Box<Expr>,
9482}
9483
9484/// See also [AnnAssign](https://docs.python.org/3/library/ast.html#ast.AnnAssign)
9485#[derive(Clone, Debug, PartialEq)]
9486#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9487pub struct StmtAnnAssign {
9488    pub node_index: crate::AtomicNodeIndex,
9489    pub range: ruff_text_size::TextRange,
9490    pub target: Box<Expr>,
9491    pub annotation: Box<Expr>,
9492    pub value: Option<Box<Expr>>,
9493    pub simple: bool,
9494    pub runtime_simple: Option<i32>,
9495}
9496
9497/// See also [For](https://docs.python.org/3/library/ast.html#ast.For)
9498/// and [AsyncFor](https://docs.python.org/3/library/ast.html#ast.AsyncFor).
9499///
9500/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9501#[derive(Clone, Debug, PartialEq)]
9502#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9503pub struct StmtFor {
9504    pub node_index: crate::AtomicNodeIndex,
9505    pub range: ruff_text_size::TextRange,
9506    pub is_async: bool,
9507    pub target: Box<Expr>,
9508    pub iter: Box<Expr>,
9509    pub body: thin_vec::ThinVec<Stmt>,
9510    pub orelse: thin_vec::ThinVec<Stmt>,
9511    pub runtime_type_comment: Option<Box<str>>,
9512    pub runtime_type_comment_bytes: Option<Vec<u8>>,
9513    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9514    pub runtime_orelse: Option<Vec<Option<crate::Stmt>>>,
9515}
9516
9517/// See also [While](https://docs.python.org/3/library/ast.html#ast.While)
9518/// and [AsyncWhile](https://docs.python.org/3/library/ast.html#ast.AsyncWhile).
9519#[derive(Clone, Debug, PartialEq)]
9520#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9521pub struct StmtWhile {
9522    pub node_index: crate::AtomicNodeIndex,
9523    pub range: ruff_text_size::TextRange,
9524    pub test: Box<Expr>,
9525    pub body: thin_vec::ThinVec<Stmt>,
9526    pub orelse: thin_vec::ThinVec<Stmt>,
9527    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9528    pub runtime_orelse: Option<Vec<Option<crate::Stmt>>>,
9529}
9530
9531/// See also [If](https://docs.python.org/3/library/ast.html#ast.If)
9532#[derive(Clone, Debug, PartialEq)]
9533#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9534pub struct StmtIf {
9535    pub node_index: crate::AtomicNodeIndex,
9536    pub range: ruff_text_size::TextRange,
9537    pub test: Box<Expr>,
9538    pub body: thin_vec::ThinVec<Stmt>,
9539    pub elif_else_clauses: Vec<crate::ElifElseClause>,
9540    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9541}
9542
9543/// See also [With](https://docs.python.org/3/library/ast.html#ast.With)
9544/// and [AsyncWith](https://docs.python.org/3/library/ast.html#ast.AsyncWith).
9545///
9546/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9547#[derive(Clone, Debug, PartialEq)]
9548#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9549pub struct StmtWith {
9550    pub node_index: crate::AtomicNodeIndex,
9551    pub range: ruff_text_size::TextRange,
9552    pub is_async: bool,
9553    pub items: Vec<crate::WithItem>,
9554    pub body: thin_vec::ThinVec<Stmt>,
9555    pub runtime_type_comment: Option<Box<str>>,
9556    pub runtime_type_comment_bytes: Option<Vec<u8>>,
9557    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9558}
9559
9560/// See also [Match](https://docs.python.org/3/library/ast.html#ast.Match)
9561#[derive(Clone, Debug, PartialEq)]
9562#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9563pub struct StmtMatch {
9564    pub node_index: crate::AtomicNodeIndex,
9565    pub range: ruff_text_size::TextRange,
9566    pub subject: Box<Expr>,
9567    pub cases: Vec<crate::MatchCase>,
9568}
9569
9570/// See also [Raise](https://docs.python.org/3/library/ast.html#ast.Raise)
9571#[derive(Clone, Debug, PartialEq)]
9572#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9573pub struct StmtRaise {
9574    pub node_index: crate::AtomicNodeIndex,
9575    pub range: ruff_text_size::TextRange,
9576    pub exc: Option<Box<Expr>>,
9577    pub cause: Option<Box<Expr>>,
9578}
9579
9580/// See also [Try](https://docs.python.org/3/library/ast.html#ast.Try)
9581/// and [TryStar](https://docs.python.org/3/library/ast.html#ast.TryStar)
9582#[derive(Clone, Debug, PartialEq)]
9583#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9584pub struct StmtTry {
9585    pub node_index: crate::AtomicNodeIndex,
9586    pub range: ruff_text_size::TextRange,
9587    pub body: thin_vec::ThinVec<Stmt>,
9588    pub handlers: Vec<ExceptHandler>,
9589    pub orelse: thin_vec::ThinVec<Stmt>,
9590    pub finalbody: thin_vec::ThinVec<Stmt>,
9591    pub is_star: bool,
9592    pub runtime_body: Option<Vec<Option<crate::Stmt>>>,
9593    pub runtime_handlers: Option<Vec<Option<crate::ExceptHandler>>>,
9594    pub runtime_orelse: Option<Vec<Option<crate::Stmt>>>,
9595    pub runtime_finalbody: Option<Vec<Option<crate::Stmt>>>,
9596}
9597
9598/// See also [Assert](https://docs.python.org/3/library/ast.html#ast.Assert)
9599#[derive(Clone, Debug, PartialEq)]
9600#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9601pub struct StmtAssert {
9602    pub node_index: crate::AtomicNodeIndex,
9603    pub range: ruff_text_size::TextRange,
9604    pub test: Box<Expr>,
9605    pub msg: Option<Box<Expr>>,
9606}
9607
9608/// See also [Import](https://docs.python.org/3/library/ast.html#ast.Import)
9609#[derive(Clone, Debug, PartialEq)]
9610#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9611pub struct StmtImport {
9612    pub node_index: crate::AtomicNodeIndex,
9613    pub range: ruff_text_size::TextRange,
9614    pub names: Vec<crate::Alias>,
9615    pub is_lazy: bool,
9616}
9617
9618/// See also [ImportFrom](https://docs.python.org/3/library/ast.html#ast.ImportFrom)
9619#[derive(Clone, Debug, PartialEq)]
9620#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9621pub struct StmtImportFrom {
9622    pub node_index: crate::AtomicNodeIndex,
9623    pub range: ruff_text_size::TextRange,
9624    pub module: Option<crate::Identifier>,
9625    pub names: Vec<crate::Alias>,
9626    pub level: u32,
9627    pub is_lazy: bool,
9628    pub runtime_level: Option<i32>,
9629}
9630
9631/// See also [Global](https://docs.python.org/3/library/ast.html#ast.Global)
9632#[derive(Clone, Debug, PartialEq)]
9633#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9634pub struct StmtGlobal {
9635    pub node_index: crate::AtomicNodeIndex,
9636    pub range: ruff_text_size::TextRange,
9637    pub names: Vec<crate::Identifier>,
9638}
9639
9640/// See also [Nonlocal](https://docs.python.org/3/library/ast.html#ast.Nonlocal)
9641#[derive(Clone, Debug, PartialEq)]
9642#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9643pub struct StmtNonlocal {
9644    pub node_index: crate::AtomicNodeIndex,
9645    pub range: ruff_text_size::TextRange,
9646    pub names: Vec<crate::Identifier>,
9647}
9648
9649/// See also [Expr](https://docs.python.org/3/library/ast.html#ast.Expr)
9650#[derive(Clone, Debug, PartialEq)]
9651#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9652pub struct StmtExpr {
9653    pub node_index: crate::AtomicNodeIndex,
9654    pub range: ruff_text_size::TextRange,
9655    pub value: Box<Expr>,
9656}
9657
9658/// See also [Pass](https://docs.python.org/3/library/ast.html#ast.Pass)
9659#[derive(Clone, Debug, PartialEq)]
9660#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9661pub struct StmtPass {
9662    pub node_index: crate::AtomicNodeIndex,
9663    pub range: ruff_text_size::TextRange,
9664}
9665
9666/// See also [Break](https://docs.python.org/3/library/ast.html#ast.Break)
9667#[derive(Clone, Debug, PartialEq)]
9668#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9669pub struct StmtBreak {
9670    pub node_index: crate::AtomicNodeIndex,
9671    pub range: ruff_text_size::TextRange,
9672}
9673
9674/// See also [Continue](https://docs.python.org/3/library/ast.html#ast.Continue)
9675#[derive(Clone, Debug, PartialEq)]
9676#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9677pub struct StmtContinue {
9678    pub node_index: crate::AtomicNodeIndex,
9679    pub range: ruff_text_size::TextRange,
9680}
9681
9682/// An AST node used to represent a IPython escape command at the statement level.
9683///
9684/// For example,
9685/// ```python
9686/// %matplotlib inline
9687/// ```
9688///
9689/// ## Terminology
9690///
9691/// Escape commands are special IPython syntax which starts with a token to identify
9692/// the escape kind followed by the command value itself. [Escape kind] are the kind
9693/// of escape commands that are recognized by the token: `%`, `%%`, `!`, `!!`,
9694/// `?`, `??`, `/`, `;`, and `,`.
9695///
9696/// Help command (or Dynamic Object Introspection as it's called) are the escape commands
9697/// of the kind `?` and `??`. For example, `?str.replace`. Help end command are a subset
9698/// of Help command where the token can be at the end of the line i.e., after the value.
9699/// For example, `str.replace?`.
9700///
9701/// Here's where things get tricky. I'll divide the help end command into two types for
9702/// better understanding:
9703/// 1. Strict version: The token is _only_ at the end of the line. For example,
9704///    `str.replace?` or `str.replace??`.
9705/// 2. Combined version: Along with the `?` or `??` token, which are at the end of the
9706///    line, there are other escape kind tokens that are present at the start as well.
9707///    For example, `%matplotlib?` or `%%timeit?`.
9708///
9709/// Priority comes into picture for the "Combined version" mentioned above. How do
9710/// we determine the escape kind if there are tokens on both side of the value, i.e., which
9711/// token to choose? The Help end command always takes priority over any other token which
9712/// means that if there is `?`/`??` at the end then that is used to determine the kind.
9713/// For example, in `%matplotlib?` the escape kind is determined using the `?` token
9714/// instead of `%` token.
9715///
9716/// ## Syntax
9717///
9718/// `<IpyEscapeKind><Command value>`
9719///
9720/// The simplest form is an escape kind token followed by the command value. For example,
9721/// `%matplotlib inline`, `/foo`, `!pwd`, etc.
9722///
9723/// `<Command value><IpyEscapeKind ("?" or "??")>`
9724///
9725/// The help end escape command would be the reverse of the above syntax. Here, the
9726/// escape kind token can only be either `?` or `??` and it is at the end of the line.
9727/// For example, `str.replace?`, `math.pi??`, etc.
9728///
9729/// `<IpyEscapeKind><Command value><EscapeKind ("?" or "??")>`
9730///
9731/// The final syntax is the combined version of the above two. For example, `%matplotlib?`,
9732/// `%%timeit??`, etc.
9733///
9734/// [Escape kind]: crate::IpyEscapeKind
9735///
9736#[derive(Clone, Debug, PartialEq)]
9737#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9738pub struct StmtIpyEscapeCommand {
9739    pub node_index: crate::AtomicNodeIndex,
9740    pub range: ruff_text_size::TextRange,
9741    pub kind: crate::IpyEscapeKind,
9742    pub value: Box<str>,
9743}
9744
9745/// See also [BoolOp](https://docs.python.org/3/library/ast.html#ast.BoolOp)
9746#[derive(Clone, Debug, PartialEq)]
9747#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9748pub struct ExprBoolOp {
9749    pub node_index: crate::AtomicNodeIndex,
9750    pub range: ruff_text_size::TextRange,
9751    pub op: crate::BoolOp,
9752    pub values: Vec<Expr>,
9753    pub runtime_values: Option<Vec<Option<crate::Expr>>>,
9754}
9755
9756/// See also [NamedExpr](https://docs.python.org/3/library/ast.html#ast.NamedExpr)
9757#[derive(Clone, Debug, PartialEq)]
9758#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9759pub struct ExprNamed {
9760    pub node_index: crate::AtomicNodeIndex,
9761    pub range: ruff_text_size::TextRange,
9762    pub target: Box<Expr>,
9763    pub value: Box<Expr>,
9764}
9765
9766/// See also [BinOp](https://docs.python.org/3/library/ast.html#ast.BinOp)
9767#[derive(Clone, Debug, PartialEq)]
9768#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9769pub struct ExprBinOp {
9770    pub node_index: crate::AtomicNodeIndex,
9771    pub range: ruff_text_size::TextRange,
9772    pub left: Box<Expr>,
9773    pub op: crate::Operator,
9774    pub right: Box<Expr>,
9775}
9776
9777/// See also [UnaryOp](https://docs.python.org/3/library/ast.html#ast.UnaryOp)
9778#[derive(Clone, Debug, PartialEq)]
9779#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9780pub struct ExprUnaryOp {
9781    pub node_index: crate::AtomicNodeIndex,
9782    pub range: ruff_text_size::TextRange,
9783    pub op: crate::UnaryOp,
9784    pub operand: Box<Expr>,
9785}
9786
9787/// See also [Lambda](https://docs.python.org/3/library/ast.html#ast.Lambda)
9788#[derive(Clone, Debug, PartialEq)]
9789#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9790pub struct ExprLambda {
9791    pub node_index: crate::AtomicNodeIndex,
9792    pub range: ruff_text_size::TextRange,
9793    pub parameters: Option<Box<crate::Parameters>>,
9794    pub body: Box<Expr>,
9795}
9796
9797/// See also [IfExp](https://docs.python.org/3/library/ast.html#ast.IfExp)
9798#[derive(Clone, Debug, PartialEq)]
9799#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9800pub struct ExprIf {
9801    pub node_index: crate::AtomicNodeIndex,
9802    pub range: ruff_text_size::TextRange,
9803    pub test: Box<Expr>,
9804    pub body: Box<Expr>,
9805    pub orelse: Box<Expr>,
9806}
9807
9808/// See also [Dict](https://docs.python.org/3/library/ast.html#ast.Dict)
9809#[derive(Clone, Debug, PartialEq)]
9810#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9811pub struct ExprDict {
9812    pub node_index: crate::AtomicNodeIndex,
9813    pub range: ruff_text_size::TextRange,
9814    pub items: Vec<crate::DictItem>,
9815    pub runtime_values: Option<Vec<Option<crate::Expr>>>,
9816}
9817
9818/// See also [Set](https://docs.python.org/3/library/ast.html#ast.Set)
9819#[derive(Clone, Debug, PartialEq)]
9820#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9821pub struct ExprSet {
9822    pub node_index: crate::AtomicNodeIndex,
9823    pub range: ruff_text_size::TextRange,
9824    pub elts: Vec<Expr>,
9825    pub runtime_elts: Option<Vec<Option<crate::Expr>>>,
9826}
9827
9828/// See also [ListComp](https://docs.python.org/3/library/ast.html#ast.ListComp)
9829#[derive(Clone, Debug, PartialEq)]
9830#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9831pub struct ExprListComp {
9832    pub node_index: crate::AtomicNodeIndex,
9833    pub range: ruff_text_size::TextRange,
9834    pub elt: Box<Expr>,
9835    pub generators: Vec<crate::Comprehension>,
9836}
9837
9838/// See also [SetComp](https://docs.python.org/3/library/ast.html#ast.SetComp)
9839#[derive(Clone, Debug, PartialEq)]
9840#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9841pub struct ExprSetComp {
9842    pub node_index: crate::AtomicNodeIndex,
9843    pub range: ruff_text_size::TextRange,
9844    pub elt: Box<Expr>,
9845    pub generators: Vec<crate::Comprehension>,
9846}
9847
9848/// See also [DictComp](https://docs.python.org/3/library/ast.html#ast.DictComp)
9849#[derive(Clone, Debug, PartialEq)]
9850#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9851pub struct ExprDictComp {
9852    pub node_index: crate::AtomicNodeIndex,
9853    pub range: ruff_text_size::TextRange,
9854    pub key: Option<Box<Expr>>,
9855    pub value: Box<Expr>,
9856    pub generators: Vec<crate::Comprehension>,
9857}
9858
9859/// See also [GeneratorExp](https://docs.python.org/3/library/ast.html#ast.GeneratorExp)
9860#[derive(Clone, Debug, PartialEq)]
9861#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9862pub struct ExprGenerator {
9863    pub node_index: crate::AtomicNodeIndex,
9864    pub range: ruff_text_size::TextRange,
9865    pub elt: Box<Expr>,
9866    pub generators: Vec<crate::Comprehension>,
9867    pub parenthesized: bool,
9868}
9869
9870/// See also [Await](https://docs.python.org/3/library/ast.html#ast.Await)
9871#[derive(Clone, Debug, PartialEq)]
9872#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9873pub struct ExprAwait {
9874    pub node_index: crate::AtomicNodeIndex,
9875    pub range: ruff_text_size::TextRange,
9876    pub value: Box<Expr>,
9877}
9878
9879/// See also [Yield](https://docs.python.org/3/library/ast.html#ast.Yield)
9880#[derive(Clone, Debug, PartialEq)]
9881#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9882pub struct ExprYield {
9883    pub node_index: crate::AtomicNodeIndex,
9884    pub range: ruff_text_size::TextRange,
9885    pub value: Option<Box<Expr>>,
9886}
9887
9888/// See also [YieldFrom](https://docs.python.org/3/library/ast.html#ast.YieldFrom)
9889#[derive(Clone, Debug, PartialEq)]
9890#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9891pub struct ExprYieldFrom {
9892    pub node_index: crate::AtomicNodeIndex,
9893    pub range: ruff_text_size::TextRange,
9894    pub value: Box<Expr>,
9895}
9896
9897/// See also [Compare](https://docs.python.org/3/library/ast.html#ast.Compare)
9898#[derive(Clone, Debug, PartialEq)]
9899#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9900pub struct ExprCompare {
9901    pub node_index: crate::AtomicNodeIndex,
9902    pub range: ruff_text_size::TextRange,
9903    pub left: Box<Expr>,
9904    pub ops: Box<[crate::CmpOp]>,
9905    pub comparators: Box<[Expr]>,
9906    pub runtime_comparators: Option<Vec<Option<crate::Expr>>>,
9907}
9908
9909/// A call expression whose end offset is derived from its arguments.
9910///
9911/// The parser and error-recovery code must ensure that the call and its arguments
9912/// end at the same offset.
9913///
9914/// See also [Call](https://docs.python.org/3/library/ast.html#ast.Call)
9915#[derive(Clone, PartialEq)]
9916#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9917pub struct ExprCall {
9918    pub node_index: crate::AtomicNodeIndex,
9919    pub range_start: ruff_text_size::TextSize,
9920    pub func: Box<Expr>,
9921    pub arguments: crate::Arguments,
9922}
9923
9924/// An AST node that represents either a single-part f-string literal
9925/// or an implicitly concatenated f-string literal.
9926///
9927/// This type differs from the original Python AST `JoinedStr` in that it
9928/// doesn't join the implicitly concatenated parts into a single string. Instead,
9929/// it keeps them separate and provide various methods to access the parts.
9930///
9931/// See also [JoinedStr](https://docs.python.org/3/library/ast.html#ast.JoinedStr)
9932#[derive(Clone, Debug, PartialEq)]
9933#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9934pub struct ExprFString {
9935    pub node_index: crate::AtomicNodeIndex,
9936    pub range: ruff_text_size::TextRange,
9937    pub value: crate::FStringValue,
9938    pub runtime_joined_str: Option<Vec<crate::Expr>>,
9939    pub runtime_values: Option<Vec<Option<crate::Expr>>>,
9940}
9941
9942/// An AST node that represents either a single-part t-string literal
9943/// or an implicitly concatenated t-string literal.
9944///
9945/// This type differs from the original Python AST `TemplateStr` in that it
9946/// doesn't join the implicitly concatenated parts into a single string. Instead,
9947/// it keeps them separate and provide various methods to access the parts.
9948///
9949/// See also [TemplateStr](https://docs.python.org/3/library/ast.html#ast.TemplateStr)
9950#[derive(Clone, Debug, PartialEq)]
9951#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9952pub struct ExprTString {
9953    pub node_index: crate::AtomicNodeIndex,
9954    pub range: ruff_text_size::TextRange,
9955    pub value: crate::TStringValue,
9956    pub runtime_template_str: Option<Vec<crate::Expr>>,
9957    pub runtime_values: Option<Vec<Option<crate::Expr>>>,
9958}
9959
9960/// An AST node that represents either a single-part string literal
9961/// or an implicitly concatenated string literal.
9962#[derive(Clone, Debug, PartialEq)]
9963#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9964pub struct ExprStringLiteral {
9965    pub node_index: crate::AtomicNodeIndex,
9966    pub range: ruff_text_size::TextRange,
9967    pub value: crate::StringLiteralValue,
9968}
9969
9970/// An AST node that represents either a single-part bytestring literal
9971/// or an implicitly concatenated bytestring literal.
9972#[derive(Clone, Debug, PartialEq)]
9973#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9974pub struct ExprBytesLiteral {
9975    pub node_index: crate::AtomicNodeIndex,
9976    pub range: ruff_text_size::TextRange,
9977    pub value: crate::BytesLiteralValue,
9978}
9979
9980#[derive(Clone, Debug, PartialEq)]
9981#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9982pub struct ExprNumberLiteral {
9983    pub node_index: crate::AtomicNodeIndex,
9984    pub range: ruff_text_size::TextRange,
9985    pub value: crate::Number,
9986}
9987
9988#[derive(Clone, Debug, PartialEq, Default)]
9989#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9990pub struct ExprBooleanLiteral {
9991    pub node_index: crate::AtomicNodeIndex,
9992    pub range: ruff_text_size::TextRange,
9993    pub value: bool,
9994}
9995
9996#[derive(Clone, Debug, PartialEq, Default)]
9997#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9998pub struct ExprNoneLiteral {
9999    pub node_index: crate::AtomicNodeIndex,
10000    pub range: ruff_text_size::TextRange,
10001}
10002
10003#[derive(Clone, Debug, PartialEq, Default)]
10004#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10005pub struct ExprEllipsisLiteral {
10006    pub node_index: crate::AtomicNodeIndex,
10007    pub range: ruff_text_size::TextRange,
10008}
10009
10010/// See also [Constant](https://docs.python.org/3/library/ast.html#ast.Constant)
10011#[derive(Clone, Debug, PartialEq)]
10012#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10013pub struct ExprConstant {
10014    pub node_index: crate::AtomicNodeIndex,
10015    pub range: ruff_text_size::TextRange,
10016    pub value: crate::ConstantValue,
10017    pub kind: Option<Box<str>>,
10018    pub invalid_type: Option<Box<str>>,
10019}
10020
10021/// See also [Attribute](https://docs.python.org/3/library/ast.html#ast.Attribute)
10022#[derive(Clone, Debug, PartialEq)]
10023#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10024pub struct ExprAttribute {
10025    pub node_index: crate::AtomicNodeIndex,
10026    pub range: ruff_text_size::TextRange,
10027    pub value: Box<Expr>,
10028    pub attr: crate::Identifier,
10029    pub ctx: crate::ExprContext,
10030}
10031
10032/// See also [Subscript](https://docs.python.org/3/library/ast.html#ast.Subscript)
10033#[derive(Clone, Debug, PartialEq)]
10034#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10035pub struct ExprSubscript {
10036    pub node_index: crate::AtomicNodeIndex,
10037    pub range: ruff_text_size::TextRange,
10038    pub value: Box<Expr>,
10039    pub slice: Box<Expr>,
10040    pub ctx: crate::ExprContext,
10041}
10042
10043/// See also [Starred](https://docs.python.org/3/library/ast.html#ast.Starred)
10044#[derive(Clone, Debug, PartialEq)]
10045#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10046pub struct ExprStarred {
10047    pub node_index: crate::AtomicNodeIndex,
10048    pub range: ruff_text_size::TextRange,
10049    pub value: Box<Expr>,
10050    pub ctx: crate::ExprContext,
10051}
10052
10053/// See also [Name](https://docs.python.org/3/library/ast.html#ast.Name)
10054#[derive(Clone, Debug, PartialEq)]
10055#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10056pub struct ExprName {
10057    pub node_index: crate::AtomicNodeIndex,
10058    pub range: ruff_text_size::TextRange,
10059    pub id: Name,
10060    pub ctx: crate::ExprContext,
10061}
10062
10063/// See also [List](https://docs.python.org/3/library/ast.html#ast.List)
10064#[derive(Clone, Debug, PartialEq)]
10065#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10066pub struct ExprList {
10067    pub node_index: crate::AtomicNodeIndex,
10068    pub range: ruff_text_size::TextRange,
10069    pub elts: Vec<Expr>,
10070    pub ctx: crate::ExprContext,
10071    pub runtime_elts: Option<Vec<Option<crate::Expr>>>,
10072}
10073
10074/// See also [Tuple](https://docs.python.org/3/library/ast.html#ast.Tuple)
10075#[derive(Clone, Debug, PartialEq)]
10076#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10077pub struct ExprTuple {
10078    pub node_index: crate::AtomicNodeIndex,
10079    pub range: ruff_text_size::TextRange,
10080    pub elts: Vec<Expr>,
10081    pub ctx: crate::ExprContext,
10082    pub parenthesized: bool,
10083    pub runtime_elts: Option<Vec<Option<crate::Expr>>>,
10084}
10085
10086/// See also [Slice](https://docs.python.org/3/library/ast.html#ast.Slice)
10087#[derive(Clone, Debug, PartialEq)]
10088#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10089pub struct ExprSlice {
10090    pub node_index: crate::AtomicNodeIndex,
10091    pub range: ruff_text_size::TextRange,
10092    pub lower: Option<Box<Expr>>,
10093    pub upper: Option<Box<Expr>>,
10094    pub step: Option<Box<Expr>>,
10095}
10096
10097/// An AST node used to represent a IPython escape command at the expression level.
10098///
10099/// For example,
10100/// ```python
10101/// dir = !pwd
10102/// ```
10103///
10104/// Here, the escape kind can only be `!` or `%` otherwise it is a syntax error.
10105///
10106/// For more information related to terminology and syntax of escape commands,
10107/// see [`StmtIpyEscapeCommand`].
10108#[derive(Clone, Debug, PartialEq)]
10109#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10110pub struct ExprIpyEscapeCommand {
10111    pub node_index: crate::AtomicNodeIndex,
10112    pub range: ruff_text_size::TextRange,
10113    pub kind: crate::IpyEscapeKind,
10114    pub value: Box<str>,
10115}
10116
10117/// See also [MatchValue](https://docs.python.org/3/library/ast.html#ast.MatchValue)
10118#[derive(Clone, Debug, PartialEq)]
10119#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10120pub struct PatternMatchValue {
10121    pub node_index: crate::AtomicNodeIndex,
10122    pub range: ruff_text_size::TextRange,
10123    pub value: Box<Expr>,
10124}
10125
10126/// See also [MatchSingleton](https://docs.python.org/3/library/ast.html#ast.MatchSingleton)
10127#[derive(Clone, Debug, PartialEq)]
10128#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10129pub struct PatternMatchSingleton {
10130    pub node_index: crate::AtomicNodeIndex,
10131    pub range: ruff_text_size::TextRange,
10132    pub value: crate::Singleton,
10133}
10134
10135/// See also [MatchSequence](https://docs.python.org/3/library/ast.html#ast.MatchSequence)
10136#[derive(Clone, Debug, PartialEq)]
10137#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10138pub struct PatternMatchSequence {
10139    pub node_index: crate::AtomicNodeIndex,
10140    pub range: ruff_text_size::TextRange,
10141    pub patterns: Vec<Pattern>,
10142    pub runtime_patterns: Option<Vec<Option<crate::Pattern>>>,
10143}
10144
10145/// See also [MatchMapping](https://docs.python.org/3/library/ast.html#ast.MatchMapping)
10146#[derive(Clone, Debug, PartialEq)]
10147#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10148pub struct PatternMatchMapping {
10149    pub node_index: crate::AtomicNodeIndex,
10150    pub range: ruff_text_size::TextRange,
10151    pub keys: thin_vec::ThinVec<Expr>,
10152    pub patterns: thin_vec::ThinVec<Pattern>,
10153    pub rest: Option<crate::Identifier>,
10154    pub runtime_keys: Option<Vec<Option<crate::Expr>>>,
10155    pub runtime_patterns: Option<Vec<Option<crate::Pattern>>>,
10156}
10157
10158/// See also [MatchClass](https://docs.python.org/3/library/ast.html#ast.MatchClass)
10159#[derive(Clone, Debug, PartialEq)]
10160#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10161pub struct PatternMatchClass {
10162    pub node_index: crate::AtomicNodeIndex,
10163    pub range: ruff_text_size::TextRange,
10164    pub cls: Box<Expr>,
10165    pub arguments: crate::PatternArguments,
10166    pub runtime_patterns: Option<Vec<Option<crate::Pattern>>>,
10167    pub runtime_kwd_attrs: Option<Vec<crate::Identifier>>,
10168    pub runtime_kwd_patterns: Option<Vec<Option<crate::Pattern>>>,
10169}
10170
10171/// See also [MatchStar](https://docs.python.org/3/library/ast.html#ast.MatchStar)
10172#[derive(Clone, Debug, PartialEq)]
10173#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10174pub struct PatternMatchStar {
10175    pub node_index: crate::AtomicNodeIndex,
10176    pub range: ruff_text_size::TextRange,
10177    pub name: Option<crate::Identifier>,
10178}
10179
10180/// See also [MatchAs](https://docs.python.org/3/library/ast.html#ast.MatchAs)
10181#[derive(Clone, Debug, PartialEq)]
10182#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10183pub struct PatternMatchAs {
10184    pub node_index: crate::AtomicNodeIndex,
10185    pub range: ruff_text_size::TextRange,
10186    pub pattern: Option<Box<Pattern>>,
10187    pub name: Option<crate::Identifier>,
10188}
10189
10190/// See also [MatchOr](https://docs.python.org/3/library/ast.html#ast.MatchOr)
10191#[derive(Clone, Debug, PartialEq)]
10192#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10193pub struct PatternMatchOr {
10194    pub node_index: crate::AtomicNodeIndex,
10195    pub range: ruff_text_size::TextRange,
10196    pub patterns: Vec<Pattern>,
10197    pub runtime_patterns: Option<Vec<Option<crate::Pattern>>>,
10198}
10199
10200/// See also [TypeVar](https://docs.python.org/3/library/ast.html#ast.TypeVar)
10201#[derive(Clone, Debug, PartialEq)]
10202#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10203pub struct TypeParamTypeVar {
10204    pub node_index: crate::AtomicNodeIndex,
10205    pub range: ruff_text_size::TextRange,
10206    pub name: crate::Identifier,
10207    pub bound: Option<Box<Expr>>,
10208    pub default: Option<Box<Expr>>,
10209}
10210
10211/// See also [TypeVarTuple](https://docs.python.org/3/library/ast.html#ast.TypeVarTuple)
10212#[derive(Clone, Debug, PartialEq)]
10213#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10214pub struct TypeParamTypeVarTuple {
10215    pub node_index: crate::AtomicNodeIndex,
10216    pub range: ruff_text_size::TextRange,
10217    pub name: crate::Identifier,
10218    pub default: Option<Box<Expr>>,
10219}
10220
10221/// See also [ParamSpec](https://docs.python.org/3/library/ast.html#ast.ParamSpec)
10222#[derive(Clone, Debug, PartialEq)]
10223#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10224pub struct TypeParamParamSpec {
10225    pub node_index: crate::AtomicNodeIndex,
10226    pub range: ruff_text_size::TextRange,
10227    pub name: crate::Identifier,
10228    pub default: Option<Box<Expr>>,
10229}
10230
10231impl ModModule {
10232    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10233    where
10234        V: SourceOrderVisitor<'a> + ?Sized,
10235    {
10236        let ModModule {
10237            body,
10238            runtime_body: _,
10239            range: _,
10240            node_index: _,
10241        } = self;
10242        visitor.visit_body(body);
10243    }
10244}
10245
10246impl ModExpression {
10247    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10248    where
10249        V: SourceOrderVisitor<'a> + ?Sized,
10250    {
10251        let ModExpression {
10252            body,
10253            range: _,
10254            node_index: _,
10255        } = self;
10256        visitor.visit_expr(body);
10257    }
10258}
10259
10260impl StmtFunctionDef {
10261    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10262    where
10263        V: SourceOrderVisitor<'a> + ?Sized,
10264    {
10265        let StmtFunctionDef {
10266            is_async: _,
10267            decorator_list,
10268            name,
10269            type_params,
10270            parameters,
10271            returns,
10272            body,
10273            runtime_decorator_list: _,
10274            runtime_type_comment: _,
10275            runtime_type_comment_bytes: _,
10276            runtime_body: _,
10277            range: _,
10278            node_index: _,
10279        } = self;
10280
10281        for elm in decorator_list {
10282            visitor.visit_decorator(elm);
10283        }
10284        visitor.visit_identifier(name);
10285
10286        if let Some(type_params) = type_params {
10287            visitor.visit_type_params(type_params);
10288        }
10289
10290        visitor.visit_parameters(parameters);
10291
10292        if let Some(returns) = returns {
10293            visitor.visit_annotation(returns);
10294        }
10295
10296        visitor.visit_body(body);
10297    }
10298}
10299
10300impl StmtClassDef {
10301    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10302    where
10303        V: SourceOrderVisitor<'a> + ?Sized,
10304    {
10305        let StmtClassDef {
10306            decorator_list,
10307            name,
10308            type_params,
10309            arguments,
10310            body,
10311            runtime_decorator_list: _,
10312            runtime_body: _,
10313            range: _,
10314            node_index: _,
10315        } = self;
10316
10317        for elm in decorator_list {
10318            visitor.visit_decorator(elm);
10319        }
10320        visitor.visit_identifier(name);
10321
10322        if let Some(type_params) = type_params {
10323            visitor.visit_type_params(type_params);
10324        }
10325
10326        if let Some(arguments) = arguments {
10327            visitor.visit_arguments(arguments);
10328        }
10329
10330        visitor.visit_body(body);
10331    }
10332}
10333
10334impl StmtReturn {
10335    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10336    where
10337        V: SourceOrderVisitor<'a> + ?Sized,
10338    {
10339        let StmtReturn {
10340            value,
10341            range: _,
10342            node_index: _,
10343        } = self;
10344
10345        if let Some(value) = value {
10346            visitor.visit_expr(value);
10347        }
10348    }
10349}
10350
10351impl StmtDelete {
10352    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10353    where
10354        V: SourceOrderVisitor<'a> + ?Sized,
10355    {
10356        let StmtDelete {
10357            targets,
10358            runtime_targets: _,
10359            range: _,
10360            node_index: _,
10361        } = self;
10362
10363        for elm in targets {
10364            visitor.visit_expr(elm);
10365        }
10366    }
10367}
10368
10369impl StmtTypeAlias {
10370    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10371    where
10372        V: SourceOrderVisitor<'a> + ?Sized,
10373    {
10374        let StmtTypeAlias {
10375            name,
10376            type_params,
10377            value,
10378            range: _,
10379            node_index: _,
10380        } = self;
10381        visitor.visit_expr(name);
10382
10383        if let Some(type_params) = type_params {
10384            visitor.visit_type_params(type_params);
10385        }
10386
10387        visitor.visit_expr(value);
10388    }
10389}
10390
10391impl StmtAssign {
10392    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10393    where
10394        V: SourceOrderVisitor<'a> + ?Sized,
10395    {
10396        let StmtAssign {
10397            targets,
10398            value,
10399            runtime_targets: _,
10400            runtime_type_comment: _,
10401            runtime_type_comment_bytes: _,
10402            range: _,
10403            node_index: _,
10404        } = self;
10405
10406        for elm in targets {
10407            visitor.visit_expr(elm);
10408        }
10409        visitor.visit_expr(value);
10410    }
10411}
10412
10413impl StmtAugAssign {
10414    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10415    where
10416        V: SourceOrderVisitor<'a> + ?Sized,
10417    {
10418        let StmtAugAssign {
10419            target,
10420            op,
10421            value,
10422            range: _,
10423            node_index: _,
10424        } = self;
10425        visitor.visit_expr(target);
10426        visitor.visit_operator(op);
10427        visitor.visit_expr(value);
10428    }
10429}
10430
10431impl StmtAnnAssign {
10432    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10433    where
10434        V: SourceOrderVisitor<'a> + ?Sized,
10435    {
10436        let StmtAnnAssign {
10437            target,
10438            annotation,
10439            value,
10440            simple: _,
10441            runtime_simple: _,
10442            range: _,
10443            node_index: _,
10444        } = self;
10445        visitor.visit_expr(target);
10446        visitor.visit_annotation(annotation);
10447
10448        if let Some(value) = value {
10449            visitor.visit_expr(value);
10450        }
10451    }
10452}
10453
10454impl StmtFor {
10455    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10456    where
10457        V: SourceOrderVisitor<'a> + ?Sized,
10458    {
10459        let StmtFor {
10460            is_async: _,
10461            target,
10462            iter,
10463            body,
10464            orelse,
10465            runtime_type_comment: _,
10466            runtime_type_comment_bytes: _,
10467            runtime_body: _,
10468            runtime_orelse: _,
10469            range: _,
10470            node_index: _,
10471        } = self;
10472        visitor.visit_expr(target);
10473        visitor.visit_expr(iter);
10474        visitor.visit_body(body);
10475        visitor.visit_body(orelse);
10476    }
10477}
10478
10479impl StmtWhile {
10480    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10481    where
10482        V: SourceOrderVisitor<'a> + ?Sized,
10483    {
10484        let StmtWhile {
10485            test,
10486            body,
10487            orelse,
10488            runtime_body: _,
10489            runtime_orelse: _,
10490            range: _,
10491            node_index: _,
10492        } = self;
10493        visitor.visit_expr(test);
10494        visitor.visit_body(body);
10495        visitor.visit_body(orelse);
10496    }
10497}
10498
10499impl StmtIf {
10500    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10501    where
10502        V: SourceOrderVisitor<'a> + ?Sized,
10503    {
10504        let StmtIf {
10505            test,
10506            body,
10507            elif_else_clauses,
10508            runtime_body: _,
10509            range: _,
10510            node_index: _,
10511        } = self;
10512        visitor.visit_expr(test);
10513        visitor.visit_body(body);
10514
10515        for elm in elif_else_clauses {
10516            visitor.visit_elif_else_clause(elm);
10517        }
10518    }
10519}
10520
10521impl StmtWith {
10522    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10523    where
10524        V: SourceOrderVisitor<'a> + ?Sized,
10525    {
10526        let StmtWith {
10527            is_async: _,
10528            items,
10529            body,
10530            runtime_type_comment: _,
10531            runtime_type_comment_bytes: _,
10532            runtime_body: _,
10533            range: _,
10534            node_index: _,
10535        } = self;
10536
10537        for elm in items {
10538            visitor.visit_with_item(elm);
10539        }
10540        visitor.visit_body(body);
10541    }
10542}
10543
10544impl StmtMatch {
10545    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10546    where
10547        V: SourceOrderVisitor<'a> + ?Sized,
10548    {
10549        let StmtMatch {
10550            subject,
10551            cases,
10552            range: _,
10553            node_index: _,
10554        } = self;
10555        visitor.visit_expr(subject);
10556
10557        for elm in cases {
10558            visitor.visit_match_case(elm);
10559        }
10560    }
10561}
10562
10563impl StmtRaise {
10564    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10565    where
10566        V: SourceOrderVisitor<'a> + ?Sized,
10567    {
10568        let StmtRaise {
10569            exc,
10570            cause,
10571            range: _,
10572            node_index: _,
10573        } = self;
10574
10575        if let Some(exc) = exc {
10576            visitor.visit_expr(exc);
10577        }
10578
10579        if let Some(cause) = cause {
10580            visitor.visit_expr(cause);
10581        }
10582    }
10583}
10584
10585impl StmtTry {
10586    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10587    where
10588        V: SourceOrderVisitor<'a> + ?Sized,
10589    {
10590        let StmtTry {
10591            body,
10592            handlers,
10593            orelse,
10594            finalbody,
10595            is_star: _,
10596            runtime_body: _,
10597            runtime_handlers: _,
10598            runtime_orelse: _,
10599            runtime_finalbody: _,
10600            range: _,
10601            node_index: _,
10602        } = self;
10603        visitor.visit_body(body);
10604
10605        for elm in handlers {
10606            visitor.visit_except_handler(elm);
10607        }
10608        visitor.visit_body(orelse);
10609        visitor.visit_body(finalbody);
10610    }
10611}
10612
10613impl StmtAssert {
10614    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10615    where
10616        V: SourceOrderVisitor<'a> + ?Sized,
10617    {
10618        let StmtAssert {
10619            test,
10620            msg,
10621            range: _,
10622            node_index: _,
10623        } = self;
10624        visitor.visit_expr(test);
10625
10626        if let Some(msg) = msg {
10627            visitor.visit_expr(msg);
10628        }
10629    }
10630}
10631
10632impl StmtImport {
10633    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10634    where
10635        V: SourceOrderVisitor<'a> + ?Sized,
10636    {
10637        let StmtImport {
10638            names,
10639            is_lazy: _,
10640            range: _,
10641            node_index: _,
10642        } = self;
10643
10644        for elm in names {
10645            visitor.visit_alias(elm);
10646        }
10647    }
10648}
10649
10650impl StmtImportFrom {
10651    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10652    where
10653        V: SourceOrderVisitor<'a> + ?Sized,
10654    {
10655        let StmtImportFrom {
10656            module,
10657            names,
10658            level: _,
10659            is_lazy: _,
10660            runtime_level: _,
10661            range: _,
10662            node_index: _,
10663        } = self;
10664
10665        if let Some(module) = module {
10666            visitor.visit_identifier(module);
10667        }
10668
10669        for elm in names {
10670            visitor.visit_alias(elm);
10671        }
10672    }
10673}
10674
10675impl StmtGlobal {
10676    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10677    where
10678        V: SourceOrderVisitor<'a> + ?Sized,
10679    {
10680        let StmtGlobal {
10681            names,
10682            range: _,
10683            node_index: _,
10684        } = self;
10685
10686        for elm in names {
10687            visitor.visit_identifier(elm);
10688        }
10689    }
10690}
10691
10692impl StmtNonlocal {
10693    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10694    where
10695        V: SourceOrderVisitor<'a> + ?Sized,
10696    {
10697        let StmtNonlocal {
10698            names,
10699            range: _,
10700            node_index: _,
10701        } = self;
10702
10703        for elm in names {
10704            visitor.visit_identifier(elm);
10705        }
10706    }
10707}
10708
10709impl StmtExpr {
10710    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10711    where
10712        V: SourceOrderVisitor<'a> + ?Sized,
10713    {
10714        let StmtExpr {
10715            value,
10716            range: _,
10717            node_index: _,
10718        } = self;
10719        visitor.visit_expr(value);
10720    }
10721}
10722
10723impl StmtPass {
10724    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10725    where
10726        V: SourceOrderVisitor<'a> + ?Sized,
10727    {
10728        let StmtPass {
10729            range: _,
10730            node_index: _,
10731        } = self;
10732    }
10733}
10734
10735impl StmtBreak {
10736    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10737    where
10738        V: SourceOrderVisitor<'a> + ?Sized,
10739    {
10740        let StmtBreak {
10741            range: _,
10742            node_index: _,
10743        } = self;
10744    }
10745}
10746
10747impl StmtContinue {
10748    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10749    where
10750        V: SourceOrderVisitor<'a> + ?Sized,
10751    {
10752        let StmtContinue {
10753            range: _,
10754            node_index: _,
10755        } = self;
10756    }
10757}
10758
10759impl StmtIpyEscapeCommand {
10760    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10761    where
10762        V: SourceOrderVisitor<'a> + ?Sized,
10763    {
10764        let StmtIpyEscapeCommand {
10765            kind: _,
10766            value: _,
10767            range: _,
10768            node_index: _,
10769        } = self;
10770    }
10771}
10772
10773impl ExprNamed {
10774    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10775    where
10776        V: SourceOrderVisitor<'a> + ?Sized,
10777    {
10778        let ExprNamed {
10779            target,
10780            value,
10781            range: _,
10782            node_index: _,
10783        } = self;
10784        visitor.visit_expr(target);
10785        visitor.visit_expr(value);
10786    }
10787}
10788
10789impl ExprBinOp {
10790    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10791    where
10792        V: SourceOrderVisitor<'a> + ?Sized,
10793    {
10794        let ExprBinOp {
10795            left,
10796            op,
10797            right,
10798            range: _,
10799            node_index: _,
10800        } = self;
10801        visitor.visit_expr(left);
10802        visitor.visit_operator(op);
10803        visitor.visit_expr(right);
10804    }
10805}
10806
10807impl ExprUnaryOp {
10808    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10809    where
10810        V: SourceOrderVisitor<'a> + ?Sized,
10811    {
10812        let ExprUnaryOp {
10813            op,
10814            operand,
10815            range: _,
10816            node_index: _,
10817        } = self;
10818        visitor.visit_unary_op(op);
10819        visitor.visit_expr(operand);
10820    }
10821}
10822
10823impl ExprLambda {
10824    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10825    where
10826        V: SourceOrderVisitor<'a> + ?Sized,
10827    {
10828        let ExprLambda {
10829            parameters,
10830            body,
10831            range: _,
10832            node_index: _,
10833        } = self;
10834
10835        if let Some(parameters) = parameters {
10836            visitor.visit_parameters(parameters);
10837        }
10838
10839        visitor.visit_expr(body);
10840    }
10841}
10842
10843impl ExprIf {
10844    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10845    where
10846        V: SourceOrderVisitor<'a> + ?Sized,
10847    {
10848        let ExprIf {
10849            test,
10850            body,
10851            orelse,
10852            range: _,
10853            node_index: _,
10854        } = self;
10855        visitor.visit_expr(body);
10856        visitor.visit_expr(test);
10857        visitor.visit_expr(orelse);
10858    }
10859}
10860
10861impl ExprSet {
10862    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10863    where
10864        V: SourceOrderVisitor<'a> + ?Sized,
10865    {
10866        let ExprSet {
10867            elts,
10868            runtime_elts: _,
10869            range: _,
10870            node_index: _,
10871        } = self;
10872
10873        for elm in elts {
10874            visitor.visit_expr(elm);
10875        }
10876    }
10877}
10878
10879impl ExprListComp {
10880    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10881    where
10882        V: SourceOrderVisitor<'a> + ?Sized,
10883    {
10884        let ExprListComp {
10885            elt,
10886            generators,
10887            range: _,
10888            node_index: _,
10889        } = self;
10890        visitor.visit_expr(elt);
10891
10892        for elm in generators {
10893            visitor.visit_comprehension(elm);
10894        }
10895    }
10896}
10897
10898impl ExprSetComp {
10899    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10900    where
10901        V: SourceOrderVisitor<'a> + ?Sized,
10902    {
10903        let ExprSetComp {
10904            elt,
10905            generators,
10906            range: _,
10907            node_index: _,
10908        } = self;
10909        visitor.visit_expr(elt);
10910
10911        for elm in generators {
10912            visitor.visit_comprehension(elm);
10913        }
10914    }
10915}
10916
10917impl ExprDictComp {
10918    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10919    where
10920        V: SourceOrderVisitor<'a> + ?Sized,
10921    {
10922        let ExprDictComp {
10923            key,
10924            value,
10925            generators,
10926            range: _,
10927            node_index: _,
10928        } = self;
10929
10930        if let Some(key) = key {
10931            visitor.visit_expr(key);
10932        }
10933
10934        visitor.visit_expr(value);
10935
10936        for elm in generators {
10937            visitor.visit_comprehension(elm);
10938        }
10939    }
10940}
10941
10942impl ExprGenerator {
10943    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10944    where
10945        V: SourceOrderVisitor<'a> + ?Sized,
10946    {
10947        let ExprGenerator {
10948            elt,
10949            generators,
10950            parenthesized: _,
10951            range: _,
10952            node_index: _,
10953        } = self;
10954        visitor.visit_expr(elt);
10955
10956        for elm in generators {
10957            visitor.visit_comprehension(elm);
10958        }
10959    }
10960}
10961
10962impl ExprAwait {
10963    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10964    where
10965        V: SourceOrderVisitor<'a> + ?Sized,
10966    {
10967        let ExprAwait {
10968            value,
10969            range: _,
10970            node_index: _,
10971        } = self;
10972        visitor.visit_expr(value);
10973    }
10974}
10975
10976impl ExprYield {
10977    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10978    where
10979        V: SourceOrderVisitor<'a> + ?Sized,
10980    {
10981        let ExprYield {
10982            value,
10983            range: _,
10984            node_index: _,
10985        } = self;
10986
10987        if let Some(value) = value {
10988            visitor.visit_expr(value);
10989        }
10990    }
10991}
10992
10993impl ExprYieldFrom {
10994    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10995    where
10996        V: SourceOrderVisitor<'a> + ?Sized,
10997    {
10998        let ExprYieldFrom {
10999            value,
11000            range: _,
11001            node_index: _,
11002        } = self;
11003        visitor.visit_expr(value);
11004    }
11005}
11006
11007impl ExprCall {
11008    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11009    where
11010        V: SourceOrderVisitor<'a> + ?Sized,
11011    {
11012        let ExprCall {
11013            range_start: _,
11014            func,
11015            arguments,
11016            node_index: _,
11017        } = self;
11018        visitor.visit_expr(func);
11019        visitor.visit_arguments(arguments);
11020    }
11021}
11022
11023impl ExprNumberLiteral {
11024    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11025    where
11026        V: SourceOrderVisitor<'a> + ?Sized,
11027    {
11028        let ExprNumberLiteral {
11029            value: _,
11030            range: _,
11031            node_index: _,
11032        } = self;
11033    }
11034}
11035
11036impl ExprBooleanLiteral {
11037    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11038    where
11039        V: SourceOrderVisitor<'a> + ?Sized,
11040    {
11041        let ExprBooleanLiteral {
11042            value: _,
11043            range: _,
11044            node_index: _,
11045        } = self;
11046    }
11047}
11048
11049impl ExprNoneLiteral {
11050    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11051    where
11052        V: SourceOrderVisitor<'a> + ?Sized,
11053    {
11054        let ExprNoneLiteral {
11055            range: _,
11056            node_index: _,
11057        } = self;
11058    }
11059}
11060
11061impl ExprEllipsisLiteral {
11062    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11063    where
11064        V: SourceOrderVisitor<'a> + ?Sized,
11065    {
11066        let ExprEllipsisLiteral {
11067            range: _,
11068            node_index: _,
11069        } = self;
11070    }
11071}
11072
11073impl ExprConstant {
11074    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11075    where
11076        V: SourceOrderVisitor<'a> + ?Sized,
11077    {
11078        let ExprConstant {
11079            value: _,
11080            kind: _,
11081            invalid_type: _,
11082            range: _,
11083            node_index: _,
11084        } = self;
11085    }
11086}
11087
11088impl ExprAttribute {
11089    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11090    where
11091        V: SourceOrderVisitor<'a> + ?Sized,
11092    {
11093        let ExprAttribute {
11094            value,
11095            attr,
11096            ctx: _,
11097            range: _,
11098            node_index: _,
11099        } = self;
11100        visitor.visit_expr(value);
11101        visitor.visit_identifier(attr);
11102    }
11103}
11104
11105impl ExprSubscript {
11106    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11107    where
11108        V: SourceOrderVisitor<'a> + ?Sized,
11109    {
11110        let ExprSubscript {
11111            value,
11112            slice,
11113            ctx: _,
11114            range: _,
11115            node_index: _,
11116        } = self;
11117        visitor.visit_expr(value);
11118        visitor.visit_expr(slice);
11119    }
11120}
11121
11122impl ExprStarred {
11123    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11124    where
11125        V: SourceOrderVisitor<'a> + ?Sized,
11126    {
11127        let ExprStarred {
11128            value,
11129            ctx: _,
11130            range: _,
11131            node_index: _,
11132        } = self;
11133        visitor.visit_expr(value);
11134    }
11135}
11136
11137impl ExprName {
11138    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11139    where
11140        V: SourceOrderVisitor<'a> + ?Sized,
11141    {
11142        let ExprName {
11143            id: _,
11144            ctx: _,
11145            range: _,
11146            node_index: _,
11147        } = self;
11148    }
11149}
11150
11151impl ExprList {
11152    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11153    where
11154        V: SourceOrderVisitor<'a> + ?Sized,
11155    {
11156        let ExprList {
11157            elts,
11158            ctx: _,
11159            runtime_elts: _,
11160            range: _,
11161            node_index: _,
11162        } = self;
11163
11164        for elm in elts {
11165            visitor.visit_expr(elm);
11166        }
11167    }
11168}
11169
11170impl ExprTuple {
11171    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11172    where
11173        V: SourceOrderVisitor<'a> + ?Sized,
11174    {
11175        let ExprTuple {
11176            elts,
11177            ctx: _,
11178            parenthesized: _,
11179            runtime_elts: _,
11180            range: _,
11181            node_index: _,
11182        } = self;
11183
11184        for elm in elts {
11185            visitor.visit_expr(elm);
11186        }
11187    }
11188}
11189
11190impl ExprSlice {
11191    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11192    where
11193        V: SourceOrderVisitor<'a> + ?Sized,
11194    {
11195        let ExprSlice {
11196            lower,
11197            upper,
11198            step,
11199            range: _,
11200            node_index: _,
11201        } = self;
11202
11203        if let Some(lower) = lower {
11204            visitor.visit_expr(lower);
11205        }
11206
11207        if let Some(upper) = upper {
11208            visitor.visit_expr(upper);
11209        }
11210
11211        if let Some(step) = step {
11212            visitor.visit_expr(step);
11213        }
11214    }
11215}
11216
11217impl ExprIpyEscapeCommand {
11218    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11219    where
11220        V: SourceOrderVisitor<'a> + ?Sized,
11221    {
11222        let ExprIpyEscapeCommand {
11223            kind: _,
11224            value: _,
11225            range: _,
11226            node_index: _,
11227        } = self;
11228    }
11229}
11230
11231impl PatternMatchValue {
11232    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11233    where
11234        V: SourceOrderVisitor<'a> + ?Sized,
11235    {
11236        let PatternMatchValue {
11237            value,
11238            range: _,
11239            node_index: _,
11240        } = self;
11241        visitor.visit_expr(value);
11242    }
11243}
11244
11245impl PatternMatchSingleton {
11246    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11247    where
11248        V: SourceOrderVisitor<'a> + ?Sized,
11249    {
11250        let PatternMatchSingleton {
11251            value,
11252            range: _,
11253            node_index: _,
11254        } = self;
11255        visitor.visit_singleton(value);
11256    }
11257}
11258
11259impl PatternMatchSequence {
11260    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11261    where
11262        V: SourceOrderVisitor<'a> + ?Sized,
11263    {
11264        let PatternMatchSequence {
11265            patterns,
11266            runtime_patterns: _,
11267            range: _,
11268            node_index: _,
11269        } = self;
11270
11271        for elm in patterns {
11272            visitor.visit_pattern(elm);
11273        }
11274    }
11275}
11276
11277impl PatternMatchClass {
11278    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11279    where
11280        V: SourceOrderVisitor<'a> + ?Sized,
11281    {
11282        let PatternMatchClass {
11283            cls,
11284            arguments,
11285            runtime_patterns: _,
11286            runtime_kwd_attrs: _,
11287            runtime_kwd_patterns: _,
11288            range: _,
11289            node_index: _,
11290        } = self;
11291        visitor.visit_expr(cls);
11292        visitor.visit_pattern_arguments(arguments);
11293    }
11294}
11295
11296impl PatternMatchStar {
11297    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11298    where
11299        V: SourceOrderVisitor<'a> + ?Sized,
11300    {
11301        let PatternMatchStar {
11302            name,
11303            range: _,
11304            node_index: _,
11305        } = self;
11306
11307        if let Some(name) = name {
11308            visitor.visit_identifier(name);
11309        }
11310    }
11311}
11312
11313impl PatternMatchAs {
11314    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11315    where
11316        V: SourceOrderVisitor<'a> + ?Sized,
11317    {
11318        let PatternMatchAs {
11319            pattern,
11320            name,
11321            range: _,
11322            node_index: _,
11323        } = self;
11324
11325        if let Some(pattern) = pattern {
11326            visitor.visit_pattern(pattern);
11327        }
11328
11329        if let Some(name) = name {
11330            visitor.visit_identifier(name);
11331        }
11332    }
11333}
11334
11335impl PatternMatchOr {
11336    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11337    where
11338        V: SourceOrderVisitor<'a> + ?Sized,
11339    {
11340        let PatternMatchOr {
11341            patterns,
11342            runtime_patterns: _,
11343            range: _,
11344            node_index: _,
11345        } = self;
11346
11347        for elm in patterns {
11348            visitor.visit_pattern(elm);
11349        }
11350    }
11351}
11352
11353impl TypeParamTypeVar {
11354    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11355    where
11356        V: SourceOrderVisitor<'a> + ?Sized,
11357    {
11358        let TypeParamTypeVar {
11359            name,
11360            bound,
11361            default,
11362            range: _,
11363            node_index: _,
11364        } = self;
11365        visitor.visit_identifier(name);
11366
11367        if let Some(bound) = bound {
11368            visitor.visit_expr(bound);
11369        }
11370
11371        if let Some(default) = default {
11372            visitor.visit_expr(default);
11373        }
11374    }
11375}
11376
11377impl TypeParamTypeVarTuple {
11378    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11379    where
11380        V: SourceOrderVisitor<'a> + ?Sized,
11381    {
11382        let TypeParamTypeVarTuple {
11383            name,
11384            default,
11385            range: _,
11386            node_index: _,
11387        } = self;
11388        visitor.visit_identifier(name);
11389
11390        if let Some(default) = default {
11391            visitor.visit_expr(default);
11392        }
11393    }
11394}
11395
11396impl TypeParamParamSpec {
11397    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11398    where
11399        V: SourceOrderVisitor<'a> + ?Sized,
11400    {
11401        let TypeParamParamSpec {
11402            name,
11403            default,
11404            range: _,
11405            node_index: _,
11406        } = self;
11407        visitor.visit_identifier(name);
11408
11409        if let Some(default) = default {
11410            visitor.visit_expr(default);
11411        }
11412    }
11413}