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    Attribute(crate::ExprAttribute),
1325    Subscript(crate::ExprSubscript),
1326    Starred(crate::ExprStarred),
1327    Name(crate::ExprName),
1328    List(crate::ExprList),
1329    Tuple(crate::ExprTuple),
1330    Slice(crate::ExprSlice),
1331    IpyEscapeCommand(crate::ExprIpyEscapeCommand),
1332}
1333
1334impl From<crate::ExprBoolOp> for Expr {
1335    fn from(node: crate::ExprBoolOp) -> Self {
1336        Self::BoolOp(node)
1337    }
1338}
1339
1340impl From<crate::ExprNamed> for Expr {
1341    fn from(node: crate::ExprNamed) -> Self {
1342        Self::Named(node)
1343    }
1344}
1345
1346impl From<crate::ExprBinOp> for Expr {
1347    fn from(node: crate::ExprBinOp) -> Self {
1348        Self::BinOp(node)
1349    }
1350}
1351
1352impl From<crate::ExprUnaryOp> for Expr {
1353    fn from(node: crate::ExprUnaryOp) -> Self {
1354        Self::UnaryOp(node)
1355    }
1356}
1357
1358impl From<crate::ExprLambda> for Expr {
1359    fn from(node: crate::ExprLambda) -> Self {
1360        Self::Lambda(node)
1361    }
1362}
1363
1364impl From<crate::ExprIf> for Expr {
1365    fn from(node: crate::ExprIf) -> Self {
1366        Self::If(node)
1367    }
1368}
1369
1370impl From<crate::ExprDict> for Expr {
1371    fn from(node: crate::ExprDict) -> Self {
1372        Self::Dict(node)
1373    }
1374}
1375
1376impl From<crate::ExprSet> for Expr {
1377    fn from(node: crate::ExprSet) -> Self {
1378        Self::Set(node)
1379    }
1380}
1381
1382impl From<crate::ExprListComp> for Expr {
1383    fn from(node: crate::ExprListComp) -> Self {
1384        Self::ListComp(node)
1385    }
1386}
1387
1388impl From<crate::ExprSetComp> for Expr {
1389    fn from(node: crate::ExprSetComp) -> Self {
1390        Self::SetComp(node)
1391    }
1392}
1393
1394impl From<crate::ExprDictComp> for Expr {
1395    fn from(node: crate::ExprDictComp) -> Self {
1396        Self::DictComp(node)
1397    }
1398}
1399
1400impl From<crate::ExprGenerator> for Expr {
1401    fn from(node: crate::ExprGenerator) -> Self {
1402        Self::Generator(node)
1403    }
1404}
1405
1406impl From<crate::ExprAwait> for Expr {
1407    fn from(node: crate::ExprAwait) -> Self {
1408        Self::Await(node)
1409    }
1410}
1411
1412impl From<crate::ExprYield> for Expr {
1413    fn from(node: crate::ExprYield) -> Self {
1414        Self::Yield(node)
1415    }
1416}
1417
1418impl From<crate::ExprYieldFrom> for Expr {
1419    fn from(node: crate::ExprYieldFrom) -> Self {
1420        Self::YieldFrom(node)
1421    }
1422}
1423
1424impl From<crate::ExprCompare> for Expr {
1425    fn from(node: crate::ExprCompare) -> Self {
1426        Self::Compare(node)
1427    }
1428}
1429
1430impl From<crate::ExprCall> for Expr {
1431    fn from(node: crate::ExprCall) -> Self {
1432        Self::Call(node)
1433    }
1434}
1435
1436impl From<crate::ExprFString> for Expr {
1437    fn from(node: crate::ExprFString) -> Self {
1438        Self::FString(node)
1439    }
1440}
1441
1442impl From<crate::ExprTString> for Expr {
1443    fn from(node: crate::ExprTString) -> Self {
1444        Self::TString(node)
1445    }
1446}
1447
1448impl From<crate::ExprStringLiteral> for Expr {
1449    fn from(node: crate::ExprStringLiteral) -> Self {
1450        Self::StringLiteral(node)
1451    }
1452}
1453
1454impl From<crate::ExprBytesLiteral> for Expr {
1455    fn from(node: crate::ExprBytesLiteral) -> Self {
1456        Self::BytesLiteral(node)
1457    }
1458}
1459
1460impl From<crate::ExprNumberLiteral> for Expr {
1461    fn from(node: crate::ExprNumberLiteral) -> Self {
1462        Self::NumberLiteral(node)
1463    }
1464}
1465
1466impl From<crate::ExprBooleanLiteral> for Expr {
1467    fn from(node: crate::ExprBooleanLiteral) -> Self {
1468        Self::BooleanLiteral(node)
1469    }
1470}
1471
1472impl From<crate::ExprNoneLiteral> for Expr {
1473    fn from(node: crate::ExprNoneLiteral) -> Self {
1474        Self::NoneLiteral(node)
1475    }
1476}
1477
1478impl From<crate::ExprEllipsisLiteral> for Expr {
1479    fn from(node: crate::ExprEllipsisLiteral) -> Self {
1480        Self::EllipsisLiteral(node)
1481    }
1482}
1483
1484impl From<crate::ExprAttribute> for Expr {
1485    fn from(node: crate::ExprAttribute) -> Self {
1486        Self::Attribute(node)
1487    }
1488}
1489
1490impl From<crate::ExprSubscript> for Expr {
1491    fn from(node: crate::ExprSubscript) -> Self {
1492        Self::Subscript(node)
1493    }
1494}
1495
1496impl From<crate::ExprStarred> for Expr {
1497    fn from(node: crate::ExprStarred) -> Self {
1498        Self::Starred(node)
1499    }
1500}
1501
1502impl From<crate::ExprName> for Expr {
1503    fn from(node: crate::ExprName) -> Self {
1504        Self::Name(node)
1505    }
1506}
1507
1508impl From<crate::ExprList> for Expr {
1509    fn from(node: crate::ExprList) -> Self {
1510        Self::List(node)
1511    }
1512}
1513
1514impl From<crate::ExprTuple> for Expr {
1515    fn from(node: crate::ExprTuple) -> Self {
1516        Self::Tuple(node)
1517    }
1518}
1519
1520impl From<crate::ExprSlice> for Expr {
1521    fn from(node: crate::ExprSlice) -> Self {
1522        Self::Slice(node)
1523    }
1524}
1525
1526impl From<crate::ExprIpyEscapeCommand> for Expr {
1527    fn from(node: crate::ExprIpyEscapeCommand) -> Self {
1528        Self::IpyEscapeCommand(node)
1529    }
1530}
1531
1532impl ruff_text_size::Ranged for Expr {
1533    fn range(&self) -> ruff_text_size::TextRange {
1534        match self {
1535            Self::BoolOp(node) => node.range(),
1536            Self::Named(node) => node.range(),
1537            Self::BinOp(node) => node.range(),
1538            Self::UnaryOp(node) => node.range(),
1539            Self::Lambda(node) => node.range(),
1540            Self::If(node) => node.range(),
1541            Self::Dict(node) => node.range(),
1542            Self::Set(node) => node.range(),
1543            Self::ListComp(node) => node.range(),
1544            Self::SetComp(node) => node.range(),
1545            Self::DictComp(node) => node.range(),
1546            Self::Generator(node) => node.range(),
1547            Self::Await(node) => node.range(),
1548            Self::Yield(node) => node.range(),
1549            Self::YieldFrom(node) => node.range(),
1550            Self::Compare(node) => node.range(),
1551            Self::Call(node) => node.range(),
1552            Self::FString(node) => node.range(),
1553            Self::TString(node) => node.range(),
1554            Self::StringLiteral(node) => node.range(),
1555            Self::BytesLiteral(node) => node.range(),
1556            Self::NumberLiteral(node) => node.range(),
1557            Self::BooleanLiteral(node) => node.range(),
1558            Self::NoneLiteral(node) => node.range(),
1559            Self::EllipsisLiteral(node) => node.range(),
1560            Self::Attribute(node) => node.range(),
1561            Self::Subscript(node) => node.range(),
1562            Self::Starred(node) => node.range(),
1563            Self::Name(node) => node.range(),
1564            Self::List(node) => node.range(),
1565            Self::Tuple(node) => node.range(),
1566            Self::Slice(node) => node.range(),
1567            Self::IpyEscapeCommand(node) => node.range(),
1568        }
1569    }
1570}
1571
1572impl crate::HasNodeIndex for Expr {
1573    fn node_index(&self) -> &crate::AtomicNodeIndex {
1574        match self {
1575            Self::BoolOp(node) => node.node_index(),
1576            Self::Named(node) => node.node_index(),
1577            Self::BinOp(node) => node.node_index(),
1578            Self::UnaryOp(node) => node.node_index(),
1579            Self::Lambda(node) => node.node_index(),
1580            Self::If(node) => node.node_index(),
1581            Self::Dict(node) => node.node_index(),
1582            Self::Set(node) => node.node_index(),
1583            Self::ListComp(node) => node.node_index(),
1584            Self::SetComp(node) => node.node_index(),
1585            Self::DictComp(node) => node.node_index(),
1586            Self::Generator(node) => node.node_index(),
1587            Self::Await(node) => node.node_index(),
1588            Self::Yield(node) => node.node_index(),
1589            Self::YieldFrom(node) => node.node_index(),
1590            Self::Compare(node) => node.node_index(),
1591            Self::Call(node) => node.node_index(),
1592            Self::FString(node) => node.node_index(),
1593            Self::TString(node) => node.node_index(),
1594            Self::StringLiteral(node) => node.node_index(),
1595            Self::BytesLiteral(node) => node.node_index(),
1596            Self::NumberLiteral(node) => node.node_index(),
1597            Self::BooleanLiteral(node) => node.node_index(),
1598            Self::NoneLiteral(node) => node.node_index(),
1599            Self::EllipsisLiteral(node) => node.node_index(),
1600            Self::Attribute(node) => node.node_index(),
1601            Self::Subscript(node) => node.node_index(),
1602            Self::Starred(node) => node.node_index(),
1603            Self::Name(node) => node.node_index(),
1604            Self::List(node) => node.node_index(),
1605            Self::Tuple(node) => node.node_index(),
1606            Self::Slice(node) => node.node_index(),
1607            Self::IpyEscapeCommand(node) => node.node_index(),
1608        }
1609    }
1610}
1611
1612#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
1613impl Expr {
1614    #[inline]
1615    pub const fn is_bool_op_expr(&self) -> bool {
1616        matches!(self, Self::BoolOp(_))
1617    }
1618
1619    #[inline]
1620    pub fn bool_op_expr(self) -> Option<crate::ExprBoolOp> {
1621        match self {
1622            Self::BoolOp(val) => Some(val),
1623            _ => None,
1624        }
1625    }
1626
1627    #[inline]
1628    pub fn expect_bool_op_expr(self) -> crate::ExprBoolOp {
1629        match self {
1630            Self::BoolOp(val) => val,
1631            _ => panic!("called expect on {self:?}"),
1632        }
1633    }
1634
1635    #[inline]
1636    pub fn as_bool_op_expr_mut(&mut self) -> Option<&mut crate::ExprBoolOp> {
1637        match self {
1638            Self::BoolOp(val) => Some(val),
1639            _ => None,
1640        }
1641    }
1642
1643    #[inline]
1644    pub fn as_bool_op_expr(&self) -> Option<&crate::ExprBoolOp> {
1645        match self {
1646            Self::BoolOp(val) => Some(val),
1647            _ => None,
1648        }
1649    }
1650
1651    #[inline]
1652    pub const fn is_named_expr(&self) -> bool {
1653        matches!(self, Self::Named(_))
1654    }
1655
1656    #[inline]
1657    pub fn named_expr(self) -> Option<crate::ExprNamed> {
1658        match self {
1659            Self::Named(val) => Some(val),
1660            _ => None,
1661        }
1662    }
1663
1664    #[inline]
1665    pub fn expect_named_expr(self) -> crate::ExprNamed {
1666        match self {
1667            Self::Named(val) => val,
1668            _ => panic!("called expect on {self:?}"),
1669        }
1670    }
1671
1672    #[inline]
1673    pub fn as_named_expr_mut(&mut self) -> Option<&mut crate::ExprNamed> {
1674        match self {
1675            Self::Named(val) => Some(val),
1676            _ => None,
1677        }
1678    }
1679
1680    #[inline]
1681    pub fn as_named_expr(&self) -> Option<&crate::ExprNamed> {
1682        match self {
1683            Self::Named(val) => Some(val),
1684            _ => None,
1685        }
1686    }
1687
1688    #[inline]
1689    pub const fn is_bin_op_expr(&self) -> bool {
1690        matches!(self, Self::BinOp(_))
1691    }
1692
1693    #[inline]
1694    pub fn bin_op_expr(self) -> Option<crate::ExprBinOp> {
1695        match self {
1696            Self::BinOp(val) => Some(val),
1697            _ => None,
1698        }
1699    }
1700
1701    #[inline]
1702    pub fn expect_bin_op_expr(self) -> crate::ExprBinOp {
1703        match self {
1704            Self::BinOp(val) => val,
1705            _ => panic!("called expect on {self:?}"),
1706        }
1707    }
1708
1709    #[inline]
1710    pub fn as_bin_op_expr_mut(&mut self) -> Option<&mut crate::ExprBinOp> {
1711        match self {
1712            Self::BinOp(val) => Some(val),
1713            _ => None,
1714        }
1715    }
1716
1717    #[inline]
1718    pub fn as_bin_op_expr(&self) -> Option<&crate::ExprBinOp> {
1719        match self {
1720            Self::BinOp(val) => Some(val),
1721            _ => None,
1722        }
1723    }
1724
1725    #[inline]
1726    pub const fn is_unary_op_expr(&self) -> bool {
1727        matches!(self, Self::UnaryOp(_))
1728    }
1729
1730    #[inline]
1731    pub fn unary_op_expr(self) -> Option<crate::ExprUnaryOp> {
1732        match self {
1733            Self::UnaryOp(val) => Some(val),
1734            _ => None,
1735        }
1736    }
1737
1738    #[inline]
1739    pub fn expect_unary_op_expr(self) -> crate::ExprUnaryOp {
1740        match self {
1741            Self::UnaryOp(val) => val,
1742            _ => panic!("called expect on {self:?}"),
1743        }
1744    }
1745
1746    #[inline]
1747    pub fn as_unary_op_expr_mut(&mut self) -> Option<&mut crate::ExprUnaryOp> {
1748        match self {
1749            Self::UnaryOp(val) => Some(val),
1750            _ => None,
1751        }
1752    }
1753
1754    #[inline]
1755    pub fn as_unary_op_expr(&self) -> Option<&crate::ExprUnaryOp> {
1756        match self {
1757            Self::UnaryOp(val) => Some(val),
1758            _ => None,
1759        }
1760    }
1761
1762    #[inline]
1763    pub const fn is_lambda_expr(&self) -> bool {
1764        matches!(self, Self::Lambda(_))
1765    }
1766
1767    #[inline]
1768    pub fn lambda_expr(self) -> Option<crate::ExprLambda> {
1769        match self {
1770            Self::Lambda(val) => Some(val),
1771            _ => None,
1772        }
1773    }
1774
1775    #[inline]
1776    pub fn expect_lambda_expr(self) -> crate::ExprLambda {
1777        match self {
1778            Self::Lambda(val) => val,
1779            _ => panic!("called expect on {self:?}"),
1780        }
1781    }
1782
1783    #[inline]
1784    pub fn as_lambda_expr_mut(&mut self) -> Option<&mut crate::ExprLambda> {
1785        match self {
1786            Self::Lambda(val) => Some(val),
1787            _ => None,
1788        }
1789    }
1790
1791    #[inline]
1792    pub fn as_lambda_expr(&self) -> Option<&crate::ExprLambda> {
1793        match self {
1794            Self::Lambda(val) => Some(val),
1795            _ => None,
1796        }
1797    }
1798
1799    #[inline]
1800    pub const fn is_if_expr(&self) -> bool {
1801        matches!(self, Self::If(_))
1802    }
1803
1804    #[inline]
1805    pub fn if_expr(self) -> Option<crate::ExprIf> {
1806        match self {
1807            Self::If(val) => Some(val),
1808            _ => None,
1809        }
1810    }
1811
1812    #[inline]
1813    pub fn expect_if_expr(self) -> crate::ExprIf {
1814        match self {
1815            Self::If(val) => val,
1816            _ => panic!("called expect on {self:?}"),
1817        }
1818    }
1819
1820    #[inline]
1821    pub fn as_if_expr_mut(&mut self) -> Option<&mut crate::ExprIf> {
1822        match self {
1823            Self::If(val) => Some(val),
1824            _ => None,
1825        }
1826    }
1827
1828    #[inline]
1829    pub fn as_if_expr(&self) -> Option<&crate::ExprIf> {
1830        match self {
1831            Self::If(val) => Some(val),
1832            _ => None,
1833        }
1834    }
1835
1836    #[inline]
1837    pub const fn is_dict_expr(&self) -> bool {
1838        matches!(self, Self::Dict(_))
1839    }
1840
1841    #[inline]
1842    pub fn dict_expr(self) -> Option<crate::ExprDict> {
1843        match self {
1844            Self::Dict(val) => Some(val),
1845            _ => None,
1846        }
1847    }
1848
1849    #[inline]
1850    pub fn expect_dict_expr(self) -> crate::ExprDict {
1851        match self {
1852            Self::Dict(val) => val,
1853            _ => panic!("called expect on {self:?}"),
1854        }
1855    }
1856
1857    #[inline]
1858    pub fn as_dict_expr_mut(&mut self) -> Option<&mut crate::ExprDict> {
1859        match self {
1860            Self::Dict(val) => Some(val),
1861            _ => None,
1862        }
1863    }
1864
1865    #[inline]
1866    pub fn as_dict_expr(&self) -> Option<&crate::ExprDict> {
1867        match self {
1868            Self::Dict(val) => Some(val),
1869            _ => None,
1870        }
1871    }
1872
1873    #[inline]
1874    pub const fn is_set_expr(&self) -> bool {
1875        matches!(self, Self::Set(_))
1876    }
1877
1878    #[inline]
1879    pub fn set_expr(self) -> Option<crate::ExprSet> {
1880        match self {
1881            Self::Set(val) => Some(val),
1882            _ => None,
1883        }
1884    }
1885
1886    #[inline]
1887    pub fn expect_set_expr(self) -> crate::ExprSet {
1888        match self {
1889            Self::Set(val) => val,
1890            _ => panic!("called expect on {self:?}"),
1891        }
1892    }
1893
1894    #[inline]
1895    pub fn as_set_expr_mut(&mut self) -> Option<&mut crate::ExprSet> {
1896        match self {
1897            Self::Set(val) => Some(val),
1898            _ => None,
1899        }
1900    }
1901
1902    #[inline]
1903    pub fn as_set_expr(&self) -> Option<&crate::ExprSet> {
1904        match self {
1905            Self::Set(val) => Some(val),
1906            _ => None,
1907        }
1908    }
1909
1910    #[inline]
1911    pub const fn is_list_comp_expr(&self) -> bool {
1912        matches!(self, Self::ListComp(_))
1913    }
1914
1915    #[inline]
1916    pub fn list_comp_expr(self) -> Option<crate::ExprListComp> {
1917        match self {
1918            Self::ListComp(val) => Some(val),
1919            _ => None,
1920        }
1921    }
1922
1923    #[inline]
1924    pub fn expect_list_comp_expr(self) -> crate::ExprListComp {
1925        match self {
1926            Self::ListComp(val) => val,
1927            _ => panic!("called expect on {self:?}"),
1928        }
1929    }
1930
1931    #[inline]
1932    pub fn as_list_comp_expr_mut(&mut self) -> Option<&mut crate::ExprListComp> {
1933        match self {
1934            Self::ListComp(val) => Some(val),
1935            _ => None,
1936        }
1937    }
1938
1939    #[inline]
1940    pub fn as_list_comp_expr(&self) -> Option<&crate::ExprListComp> {
1941        match self {
1942            Self::ListComp(val) => Some(val),
1943            _ => None,
1944        }
1945    }
1946
1947    #[inline]
1948    pub const fn is_set_comp_expr(&self) -> bool {
1949        matches!(self, Self::SetComp(_))
1950    }
1951
1952    #[inline]
1953    pub fn set_comp_expr(self) -> Option<crate::ExprSetComp> {
1954        match self {
1955            Self::SetComp(val) => Some(val),
1956            _ => None,
1957        }
1958    }
1959
1960    #[inline]
1961    pub fn expect_set_comp_expr(self) -> crate::ExprSetComp {
1962        match self {
1963            Self::SetComp(val) => val,
1964            _ => panic!("called expect on {self:?}"),
1965        }
1966    }
1967
1968    #[inline]
1969    pub fn as_set_comp_expr_mut(&mut self) -> Option<&mut crate::ExprSetComp> {
1970        match self {
1971            Self::SetComp(val) => Some(val),
1972            _ => None,
1973        }
1974    }
1975
1976    #[inline]
1977    pub fn as_set_comp_expr(&self) -> Option<&crate::ExprSetComp> {
1978        match self {
1979            Self::SetComp(val) => Some(val),
1980            _ => None,
1981        }
1982    }
1983
1984    #[inline]
1985    pub const fn is_dict_comp_expr(&self) -> bool {
1986        matches!(self, Self::DictComp(_))
1987    }
1988
1989    #[inline]
1990    pub fn dict_comp_expr(self) -> Option<crate::ExprDictComp> {
1991        match self {
1992            Self::DictComp(val) => Some(val),
1993            _ => None,
1994        }
1995    }
1996
1997    #[inline]
1998    pub fn expect_dict_comp_expr(self) -> crate::ExprDictComp {
1999        match self {
2000            Self::DictComp(val) => val,
2001            _ => panic!("called expect on {self:?}"),
2002        }
2003    }
2004
2005    #[inline]
2006    pub fn as_dict_comp_expr_mut(&mut self) -> Option<&mut crate::ExprDictComp> {
2007        match self {
2008            Self::DictComp(val) => Some(val),
2009            _ => None,
2010        }
2011    }
2012
2013    #[inline]
2014    pub fn as_dict_comp_expr(&self) -> Option<&crate::ExprDictComp> {
2015        match self {
2016            Self::DictComp(val) => Some(val),
2017            _ => None,
2018        }
2019    }
2020
2021    #[inline]
2022    pub const fn is_generator_expr(&self) -> bool {
2023        matches!(self, Self::Generator(_))
2024    }
2025
2026    #[inline]
2027    pub fn generator_expr(self) -> Option<crate::ExprGenerator> {
2028        match self {
2029            Self::Generator(val) => Some(val),
2030            _ => None,
2031        }
2032    }
2033
2034    #[inline]
2035    pub fn expect_generator_expr(self) -> crate::ExprGenerator {
2036        match self {
2037            Self::Generator(val) => val,
2038            _ => panic!("called expect on {self:?}"),
2039        }
2040    }
2041
2042    #[inline]
2043    pub fn as_generator_expr_mut(&mut self) -> Option<&mut crate::ExprGenerator> {
2044        match self {
2045            Self::Generator(val) => Some(val),
2046            _ => None,
2047        }
2048    }
2049
2050    #[inline]
2051    pub fn as_generator_expr(&self) -> Option<&crate::ExprGenerator> {
2052        match self {
2053            Self::Generator(val) => Some(val),
2054            _ => None,
2055        }
2056    }
2057
2058    #[inline]
2059    pub const fn is_await_expr(&self) -> bool {
2060        matches!(self, Self::Await(_))
2061    }
2062
2063    #[inline]
2064    pub fn await_expr(self) -> Option<crate::ExprAwait> {
2065        match self {
2066            Self::Await(val) => Some(val),
2067            _ => None,
2068        }
2069    }
2070
2071    #[inline]
2072    pub fn expect_await_expr(self) -> crate::ExprAwait {
2073        match self {
2074            Self::Await(val) => val,
2075            _ => panic!("called expect on {self:?}"),
2076        }
2077    }
2078
2079    #[inline]
2080    pub fn as_await_expr_mut(&mut self) -> Option<&mut crate::ExprAwait> {
2081        match self {
2082            Self::Await(val) => Some(val),
2083            _ => None,
2084        }
2085    }
2086
2087    #[inline]
2088    pub fn as_await_expr(&self) -> Option<&crate::ExprAwait> {
2089        match self {
2090            Self::Await(val) => Some(val),
2091            _ => None,
2092        }
2093    }
2094
2095    #[inline]
2096    pub const fn is_yield_expr(&self) -> bool {
2097        matches!(self, Self::Yield(_))
2098    }
2099
2100    #[inline]
2101    pub fn yield_expr(self) -> Option<crate::ExprYield> {
2102        match self {
2103            Self::Yield(val) => Some(val),
2104            _ => None,
2105        }
2106    }
2107
2108    #[inline]
2109    pub fn expect_yield_expr(self) -> crate::ExprYield {
2110        match self {
2111            Self::Yield(val) => val,
2112            _ => panic!("called expect on {self:?}"),
2113        }
2114    }
2115
2116    #[inline]
2117    pub fn as_yield_expr_mut(&mut self) -> Option<&mut crate::ExprYield> {
2118        match self {
2119            Self::Yield(val) => Some(val),
2120            _ => None,
2121        }
2122    }
2123
2124    #[inline]
2125    pub fn as_yield_expr(&self) -> Option<&crate::ExprYield> {
2126        match self {
2127            Self::Yield(val) => Some(val),
2128            _ => None,
2129        }
2130    }
2131
2132    #[inline]
2133    pub const fn is_yield_from_expr(&self) -> bool {
2134        matches!(self, Self::YieldFrom(_))
2135    }
2136
2137    #[inline]
2138    pub fn yield_from_expr(self) -> Option<crate::ExprYieldFrom> {
2139        match self {
2140            Self::YieldFrom(val) => Some(val),
2141            _ => None,
2142        }
2143    }
2144
2145    #[inline]
2146    pub fn expect_yield_from_expr(self) -> crate::ExprYieldFrom {
2147        match self {
2148            Self::YieldFrom(val) => val,
2149            _ => panic!("called expect on {self:?}"),
2150        }
2151    }
2152
2153    #[inline]
2154    pub fn as_yield_from_expr_mut(&mut self) -> Option<&mut crate::ExprYieldFrom> {
2155        match self {
2156            Self::YieldFrom(val) => Some(val),
2157            _ => None,
2158        }
2159    }
2160
2161    #[inline]
2162    pub fn as_yield_from_expr(&self) -> Option<&crate::ExprYieldFrom> {
2163        match self {
2164            Self::YieldFrom(val) => Some(val),
2165            _ => None,
2166        }
2167    }
2168
2169    #[inline]
2170    pub const fn is_compare_expr(&self) -> bool {
2171        matches!(self, Self::Compare(_))
2172    }
2173
2174    #[inline]
2175    pub fn compare_expr(self) -> Option<crate::ExprCompare> {
2176        match self {
2177            Self::Compare(val) => Some(val),
2178            _ => None,
2179        }
2180    }
2181
2182    #[inline]
2183    pub fn expect_compare_expr(self) -> crate::ExprCompare {
2184        match self {
2185            Self::Compare(val) => val,
2186            _ => panic!("called expect on {self:?}"),
2187        }
2188    }
2189
2190    #[inline]
2191    pub fn as_compare_expr_mut(&mut self) -> Option<&mut crate::ExprCompare> {
2192        match self {
2193            Self::Compare(val) => Some(val),
2194            _ => None,
2195        }
2196    }
2197
2198    #[inline]
2199    pub fn as_compare_expr(&self) -> Option<&crate::ExprCompare> {
2200        match self {
2201            Self::Compare(val) => Some(val),
2202            _ => None,
2203        }
2204    }
2205
2206    #[inline]
2207    pub const fn is_call_expr(&self) -> bool {
2208        matches!(self, Self::Call(_))
2209    }
2210
2211    #[inline]
2212    pub fn call_expr(self) -> Option<crate::ExprCall> {
2213        match self {
2214            Self::Call(val) => Some(val),
2215            _ => None,
2216        }
2217    }
2218
2219    #[inline]
2220    pub fn expect_call_expr(self) -> crate::ExprCall {
2221        match self {
2222            Self::Call(val) => val,
2223            _ => panic!("called expect on {self:?}"),
2224        }
2225    }
2226
2227    #[inline]
2228    pub fn as_call_expr_mut(&mut self) -> Option<&mut crate::ExprCall> {
2229        match self {
2230            Self::Call(val) => Some(val),
2231            _ => None,
2232        }
2233    }
2234
2235    #[inline]
2236    pub fn as_call_expr(&self) -> Option<&crate::ExprCall> {
2237        match self {
2238            Self::Call(val) => Some(val),
2239            _ => None,
2240        }
2241    }
2242
2243    #[inline]
2244    pub const fn is_f_string_expr(&self) -> bool {
2245        matches!(self, Self::FString(_))
2246    }
2247
2248    #[inline]
2249    pub fn f_string_expr(self) -> Option<crate::ExprFString> {
2250        match self {
2251            Self::FString(val) => Some(val),
2252            _ => None,
2253        }
2254    }
2255
2256    #[inline]
2257    pub fn expect_f_string_expr(self) -> crate::ExprFString {
2258        match self {
2259            Self::FString(val) => val,
2260            _ => panic!("called expect on {self:?}"),
2261        }
2262    }
2263
2264    #[inline]
2265    pub fn as_f_string_expr_mut(&mut self) -> Option<&mut crate::ExprFString> {
2266        match self {
2267            Self::FString(val) => Some(val),
2268            _ => None,
2269        }
2270    }
2271
2272    #[inline]
2273    pub fn as_f_string_expr(&self) -> Option<&crate::ExprFString> {
2274        match self {
2275            Self::FString(val) => Some(val),
2276            _ => None,
2277        }
2278    }
2279
2280    #[inline]
2281    pub const fn is_t_string_expr(&self) -> bool {
2282        matches!(self, Self::TString(_))
2283    }
2284
2285    #[inline]
2286    pub fn t_string_expr(self) -> Option<crate::ExprTString> {
2287        match self {
2288            Self::TString(val) => Some(val),
2289            _ => None,
2290        }
2291    }
2292
2293    #[inline]
2294    pub fn expect_t_string_expr(self) -> crate::ExprTString {
2295        match self {
2296            Self::TString(val) => val,
2297            _ => panic!("called expect on {self:?}"),
2298        }
2299    }
2300
2301    #[inline]
2302    pub fn as_t_string_expr_mut(&mut self) -> Option<&mut crate::ExprTString> {
2303        match self {
2304            Self::TString(val) => Some(val),
2305            _ => None,
2306        }
2307    }
2308
2309    #[inline]
2310    pub fn as_t_string_expr(&self) -> Option<&crate::ExprTString> {
2311        match self {
2312            Self::TString(val) => Some(val),
2313            _ => None,
2314        }
2315    }
2316
2317    #[inline]
2318    pub const fn is_string_literal_expr(&self) -> bool {
2319        matches!(self, Self::StringLiteral(_))
2320    }
2321
2322    #[inline]
2323    pub fn string_literal_expr(self) -> Option<crate::ExprStringLiteral> {
2324        match self {
2325            Self::StringLiteral(val) => Some(val),
2326            _ => None,
2327        }
2328    }
2329
2330    #[inline]
2331    pub fn expect_string_literal_expr(self) -> crate::ExprStringLiteral {
2332        match self {
2333            Self::StringLiteral(val) => val,
2334            _ => panic!("called expect on {self:?}"),
2335        }
2336    }
2337
2338    #[inline]
2339    pub fn as_string_literal_expr_mut(&mut self) -> Option<&mut crate::ExprStringLiteral> {
2340        match self {
2341            Self::StringLiteral(val) => Some(val),
2342            _ => None,
2343        }
2344    }
2345
2346    #[inline]
2347    pub fn as_string_literal_expr(&self) -> Option<&crate::ExprStringLiteral> {
2348        match self {
2349            Self::StringLiteral(val) => Some(val),
2350            _ => None,
2351        }
2352    }
2353
2354    #[inline]
2355    pub const fn is_bytes_literal_expr(&self) -> bool {
2356        matches!(self, Self::BytesLiteral(_))
2357    }
2358
2359    #[inline]
2360    pub fn bytes_literal_expr(self) -> Option<crate::ExprBytesLiteral> {
2361        match self {
2362            Self::BytesLiteral(val) => Some(val),
2363            _ => None,
2364        }
2365    }
2366
2367    #[inline]
2368    pub fn expect_bytes_literal_expr(self) -> crate::ExprBytesLiteral {
2369        match self {
2370            Self::BytesLiteral(val) => val,
2371            _ => panic!("called expect on {self:?}"),
2372        }
2373    }
2374
2375    #[inline]
2376    pub fn as_bytes_literal_expr_mut(&mut self) -> Option<&mut crate::ExprBytesLiteral> {
2377        match self {
2378            Self::BytesLiteral(val) => Some(val),
2379            _ => None,
2380        }
2381    }
2382
2383    #[inline]
2384    pub fn as_bytes_literal_expr(&self) -> Option<&crate::ExprBytesLiteral> {
2385        match self {
2386            Self::BytesLiteral(val) => Some(val),
2387            _ => None,
2388        }
2389    }
2390
2391    #[inline]
2392    pub const fn is_number_literal_expr(&self) -> bool {
2393        matches!(self, Self::NumberLiteral(_))
2394    }
2395
2396    #[inline]
2397    pub fn number_literal_expr(self) -> Option<crate::ExprNumberLiteral> {
2398        match self {
2399            Self::NumberLiteral(val) => Some(val),
2400            _ => None,
2401        }
2402    }
2403
2404    #[inline]
2405    pub fn expect_number_literal_expr(self) -> crate::ExprNumberLiteral {
2406        match self {
2407            Self::NumberLiteral(val) => val,
2408            _ => panic!("called expect on {self:?}"),
2409        }
2410    }
2411
2412    #[inline]
2413    pub fn as_number_literal_expr_mut(&mut self) -> Option<&mut crate::ExprNumberLiteral> {
2414        match self {
2415            Self::NumberLiteral(val) => Some(val),
2416            _ => None,
2417        }
2418    }
2419
2420    #[inline]
2421    pub fn as_number_literal_expr(&self) -> Option<&crate::ExprNumberLiteral> {
2422        match self {
2423            Self::NumberLiteral(val) => Some(val),
2424            _ => None,
2425        }
2426    }
2427
2428    #[inline]
2429    pub const fn is_boolean_literal_expr(&self) -> bool {
2430        matches!(self, Self::BooleanLiteral(_))
2431    }
2432
2433    #[inline]
2434    pub fn boolean_literal_expr(self) -> Option<crate::ExprBooleanLiteral> {
2435        match self {
2436            Self::BooleanLiteral(val) => Some(val),
2437            _ => None,
2438        }
2439    }
2440
2441    #[inline]
2442    pub fn expect_boolean_literal_expr(self) -> crate::ExprBooleanLiteral {
2443        match self {
2444            Self::BooleanLiteral(val) => val,
2445            _ => panic!("called expect on {self:?}"),
2446        }
2447    }
2448
2449    #[inline]
2450    pub fn as_boolean_literal_expr_mut(&mut self) -> Option<&mut crate::ExprBooleanLiteral> {
2451        match self {
2452            Self::BooleanLiteral(val) => Some(val),
2453            _ => None,
2454        }
2455    }
2456
2457    #[inline]
2458    pub fn as_boolean_literal_expr(&self) -> Option<&crate::ExprBooleanLiteral> {
2459        match self {
2460            Self::BooleanLiteral(val) => Some(val),
2461            _ => None,
2462        }
2463    }
2464
2465    #[inline]
2466    pub const fn is_none_literal_expr(&self) -> bool {
2467        matches!(self, Self::NoneLiteral(_))
2468    }
2469
2470    #[inline]
2471    pub fn none_literal_expr(self) -> Option<crate::ExprNoneLiteral> {
2472        match self {
2473            Self::NoneLiteral(val) => Some(val),
2474            _ => None,
2475        }
2476    }
2477
2478    #[inline]
2479    pub fn expect_none_literal_expr(self) -> crate::ExprNoneLiteral {
2480        match self {
2481            Self::NoneLiteral(val) => val,
2482            _ => panic!("called expect on {self:?}"),
2483        }
2484    }
2485
2486    #[inline]
2487    pub fn as_none_literal_expr_mut(&mut self) -> Option<&mut crate::ExprNoneLiteral> {
2488        match self {
2489            Self::NoneLiteral(val) => Some(val),
2490            _ => None,
2491        }
2492    }
2493
2494    #[inline]
2495    pub fn as_none_literal_expr(&self) -> Option<&crate::ExprNoneLiteral> {
2496        match self {
2497            Self::NoneLiteral(val) => Some(val),
2498            _ => None,
2499        }
2500    }
2501
2502    #[inline]
2503    pub const fn is_ellipsis_literal_expr(&self) -> bool {
2504        matches!(self, Self::EllipsisLiteral(_))
2505    }
2506
2507    #[inline]
2508    pub fn ellipsis_literal_expr(self) -> Option<crate::ExprEllipsisLiteral> {
2509        match self {
2510            Self::EllipsisLiteral(val) => Some(val),
2511            _ => None,
2512        }
2513    }
2514
2515    #[inline]
2516    pub fn expect_ellipsis_literal_expr(self) -> crate::ExprEllipsisLiteral {
2517        match self {
2518            Self::EllipsisLiteral(val) => val,
2519            _ => panic!("called expect on {self:?}"),
2520        }
2521    }
2522
2523    #[inline]
2524    pub fn as_ellipsis_literal_expr_mut(&mut self) -> Option<&mut crate::ExprEllipsisLiteral> {
2525        match self {
2526            Self::EllipsisLiteral(val) => Some(val),
2527            _ => None,
2528        }
2529    }
2530
2531    #[inline]
2532    pub fn as_ellipsis_literal_expr(&self) -> Option<&crate::ExprEllipsisLiteral> {
2533        match self {
2534            Self::EllipsisLiteral(val) => Some(val),
2535            _ => None,
2536        }
2537    }
2538
2539    #[inline]
2540    pub const fn is_attribute_expr(&self) -> bool {
2541        matches!(self, Self::Attribute(_))
2542    }
2543
2544    #[inline]
2545    pub fn attribute_expr(self) -> Option<crate::ExprAttribute> {
2546        match self {
2547            Self::Attribute(val) => Some(val),
2548            _ => None,
2549        }
2550    }
2551
2552    #[inline]
2553    pub fn expect_attribute_expr(self) -> crate::ExprAttribute {
2554        match self {
2555            Self::Attribute(val) => val,
2556            _ => panic!("called expect on {self:?}"),
2557        }
2558    }
2559
2560    #[inline]
2561    pub fn as_attribute_expr_mut(&mut self) -> Option<&mut crate::ExprAttribute> {
2562        match self {
2563            Self::Attribute(val) => Some(val),
2564            _ => None,
2565        }
2566    }
2567
2568    #[inline]
2569    pub fn as_attribute_expr(&self) -> Option<&crate::ExprAttribute> {
2570        match self {
2571            Self::Attribute(val) => Some(val),
2572            _ => None,
2573        }
2574    }
2575
2576    #[inline]
2577    pub const fn is_subscript_expr(&self) -> bool {
2578        matches!(self, Self::Subscript(_))
2579    }
2580
2581    #[inline]
2582    pub fn subscript_expr(self) -> Option<crate::ExprSubscript> {
2583        match self {
2584            Self::Subscript(val) => Some(val),
2585            _ => None,
2586        }
2587    }
2588
2589    #[inline]
2590    pub fn expect_subscript_expr(self) -> crate::ExprSubscript {
2591        match self {
2592            Self::Subscript(val) => val,
2593            _ => panic!("called expect on {self:?}"),
2594        }
2595    }
2596
2597    #[inline]
2598    pub fn as_subscript_expr_mut(&mut self) -> Option<&mut crate::ExprSubscript> {
2599        match self {
2600            Self::Subscript(val) => Some(val),
2601            _ => None,
2602        }
2603    }
2604
2605    #[inline]
2606    pub fn as_subscript_expr(&self) -> Option<&crate::ExprSubscript> {
2607        match self {
2608            Self::Subscript(val) => Some(val),
2609            _ => None,
2610        }
2611    }
2612
2613    #[inline]
2614    pub const fn is_starred_expr(&self) -> bool {
2615        matches!(self, Self::Starred(_))
2616    }
2617
2618    #[inline]
2619    pub fn starred_expr(self) -> Option<crate::ExprStarred> {
2620        match self {
2621            Self::Starred(val) => Some(val),
2622            _ => None,
2623        }
2624    }
2625
2626    #[inline]
2627    pub fn expect_starred_expr(self) -> crate::ExprStarred {
2628        match self {
2629            Self::Starred(val) => val,
2630            _ => panic!("called expect on {self:?}"),
2631        }
2632    }
2633
2634    #[inline]
2635    pub fn as_starred_expr_mut(&mut self) -> Option<&mut crate::ExprStarred> {
2636        match self {
2637            Self::Starred(val) => Some(val),
2638            _ => None,
2639        }
2640    }
2641
2642    #[inline]
2643    pub fn as_starred_expr(&self) -> Option<&crate::ExprStarred> {
2644        match self {
2645            Self::Starred(val) => Some(val),
2646            _ => None,
2647        }
2648    }
2649
2650    #[inline]
2651    pub const fn is_name_expr(&self) -> bool {
2652        matches!(self, Self::Name(_))
2653    }
2654
2655    #[inline]
2656    pub fn name_expr(self) -> Option<crate::ExprName> {
2657        match self {
2658            Self::Name(val) => Some(val),
2659            _ => None,
2660        }
2661    }
2662
2663    #[inline]
2664    pub fn expect_name_expr(self) -> crate::ExprName {
2665        match self {
2666            Self::Name(val) => val,
2667            _ => panic!("called expect on {self:?}"),
2668        }
2669    }
2670
2671    #[inline]
2672    pub fn as_name_expr_mut(&mut self) -> Option<&mut crate::ExprName> {
2673        match self {
2674            Self::Name(val) => Some(val),
2675            _ => None,
2676        }
2677    }
2678
2679    #[inline]
2680    pub fn as_name_expr(&self) -> Option<&crate::ExprName> {
2681        match self {
2682            Self::Name(val) => Some(val),
2683            _ => None,
2684        }
2685    }
2686
2687    #[inline]
2688    pub const fn is_list_expr(&self) -> bool {
2689        matches!(self, Self::List(_))
2690    }
2691
2692    #[inline]
2693    pub fn list_expr(self) -> Option<crate::ExprList> {
2694        match self {
2695            Self::List(val) => Some(val),
2696            _ => None,
2697        }
2698    }
2699
2700    #[inline]
2701    pub fn expect_list_expr(self) -> crate::ExprList {
2702        match self {
2703            Self::List(val) => val,
2704            _ => panic!("called expect on {self:?}"),
2705        }
2706    }
2707
2708    #[inline]
2709    pub fn as_list_expr_mut(&mut self) -> Option<&mut crate::ExprList> {
2710        match self {
2711            Self::List(val) => Some(val),
2712            _ => None,
2713        }
2714    }
2715
2716    #[inline]
2717    pub fn as_list_expr(&self) -> Option<&crate::ExprList> {
2718        match self {
2719            Self::List(val) => Some(val),
2720            _ => None,
2721        }
2722    }
2723
2724    #[inline]
2725    pub const fn is_tuple_expr(&self) -> bool {
2726        matches!(self, Self::Tuple(_))
2727    }
2728
2729    #[inline]
2730    pub fn tuple_expr(self) -> Option<crate::ExprTuple> {
2731        match self {
2732            Self::Tuple(val) => Some(val),
2733            _ => None,
2734        }
2735    }
2736
2737    #[inline]
2738    pub fn expect_tuple_expr(self) -> crate::ExprTuple {
2739        match self {
2740            Self::Tuple(val) => val,
2741            _ => panic!("called expect on {self:?}"),
2742        }
2743    }
2744
2745    #[inline]
2746    pub fn as_tuple_expr_mut(&mut self) -> Option<&mut crate::ExprTuple> {
2747        match self {
2748            Self::Tuple(val) => Some(val),
2749            _ => None,
2750        }
2751    }
2752
2753    #[inline]
2754    pub fn as_tuple_expr(&self) -> Option<&crate::ExprTuple> {
2755        match self {
2756            Self::Tuple(val) => Some(val),
2757            _ => None,
2758        }
2759    }
2760
2761    #[inline]
2762    pub const fn is_slice_expr(&self) -> bool {
2763        matches!(self, Self::Slice(_))
2764    }
2765
2766    #[inline]
2767    pub fn slice_expr(self) -> Option<crate::ExprSlice> {
2768        match self {
2769            Self::Slice(val) => Some(val),
2770            _ => None,
2771        }
2772    }
2773
2774    #[inline]
2775    pub fn expect_slice_expr(self) -> crate::ExprSlice {
2776        match self {
2777            Self::Slice(val) => val,
2778            _ => panic!("called expect on {self:?}"),
2779        }
2780    }
2781
2782    #[inline]
2783    pub fn as_slice_expr_mut(&mut self) -> Option<&mut crate::ExprSlice> {
2784        match self {
2785            Self::Slice(val) => Some(val),
2786            _ => None,
2787        }
2788    }
2789
2790    #[inline]
2791    pub fn as_slice_expr(&self) -> Option<&crate::ExprSlice> {
2792        match self {
2793            Self::Slice(val) => Some(val),
2794            _ => None,
2795        }
2796    }
2797
2798    #[inline]
2799    pub const fn is_ipy_escape_command_expr(&self) -> bool {
2800        matches!(self, Self::IpyEscapeCommand(_))
2801    }
2802
2803    #[inline]
2804    pub fn ipy_escape_command_expr(self) -> Option<crate::ExprIpyEscapeCommand> {
2805        match self {
2806            Self::IpyEscapeCommand(val) => Some(val),
2807            _ => None,
2808        }
2809    }
2810
2811    #[inline]
2812    pub fn expect_ipy_escape_command_expr(self) -> crate::ExprIpyEscapeCommand {
2813        match self {
2814            Self::IpyEscapeCommand(val) => val,
2815            _ => panic!("called expect on {self:?}"),
2816        }
2817    }
2818
2819    #[inline]
2820    pub fn as_ipy_escape_command_expr_mut(&mut self) -> Option<&mut crate::ExprIpyEscapeCommand> {
2821        match self {
2822            Self::IpyEscapeCommand(val) => Some(val),
2823            _ => None,
2824        }
2825    }
2826
2827    #[inline]
2828    pub fn as_ipy_escape_command_expr(&self) -> Option<&crate::ExprIpyEscapeCommand> {
2829        match self {
2830            Self::IpyEscapeCommand(val) => Some(val),
2831            _ => None,
2832        }
2833    }
2834}
2835
2836/// See also [excepthandler](https://docs.python.org/3/library/ast.html#ast.excepthandler)
2837#[derive(Clone, Debug, PartialEq)]
2838#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
2839pub enum ExceptHandler {
2840    ExceptHandler(crate::ExceptHandlerExceptHandler),
2841}
2842
2843impl From<crate::ExceptHandlerExceptHandler> for ExceptHandler {
2844    fn from(node: crate::ExceptHandlerExceptHandler) -> Self {
2845        Self::ExceptHandler(node)
2846    }
2847}
2848
2849impl ruff_text_size::Ranged for ExceptHandler {
2850    fn range(&self) -> ruff_text_size::TextRange {
2851        match self {
2852            Self::ExceptHandler(node) => node.range(),
2853        }
2854    }
2855}
2856
2857impl crate::HasNodeIndex for ExceptHandler {
2858    fn node_index(&self) -> &crate::AtomicNodeIndex {
2859        match self {
2860            Self::ExceptHandler(node) => node.node_index(),
2861        }
2862    }
2863}
2864
2865#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
2866impl ExceptHandler {
2867    #[inline]
2868    pub const fn is_except_handler(&self) -> bool {
2869        matches!(self, Self::ExceptHandler(_))
2870    }
2871
2872    #[inline]
2873    pub fn except_handler(self) -> Option<crate::ExceptHandlerExceptHandler> {
2874        match self {
2875            Self::ExceptHandler(val) => Some(val),
2876        }
2877    }
2878
2879    #[inline]
2880    pub fn expect_except_handler(self) -> crate::ExceptHandlerExceptHandler {
2881        match self {
2882            Self::ExceptHandler(val) => val,
2883        }
2884    }
2885
2886    #[inline]
2887    pub fn as_except_handler_mut(&mut self) -> Option<&mut crate::ExceptHandlerExceptHandler> {
2888        match self {
2889            Self::ExceptHandler(val) => Some(val),
2890        }
2891    }
2892
2893    #[inline]
2894    pub fn as_except_handler(&self) -> Option<&crate::ExceptHandlerExceptHandler> {
2895        match self {
2896            Self::ExceptHandler(val) => Some(val),
2897        }
2898    }
2899}
2900
2901#[derive(Clone, Debug, PartialEq)]
2902#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
2903pub enum InterpolatedStringElement {
2904    Interpolation(crate::InterpolatedElement),
2905    Literal(crate::InterpolatedStringLiteralElement),
2906}
2907
2908impl From<crate::InterpolatedElement> for InterpolatedStringElement {
2909    fn from(node: crate::InterpolatedElement) -> Self {
2910        Self::Interpolation(node)
2911    }
2912}
2913
2914impl From<crate::InterpolatedStringLiteralElement> for InterpolatedStringElement {
2915    fn from(node: crate::InterpolatedStringLiteralElement) -> Self {
2916        Self::Literal(node)
2917    }
2918}
2919
2920impl ruff_text_size::Ranged for InterpolatedStringElement {
2921    fn range(&self) -> ruff_text_size::TextRange {
2922        match self {
2923            Self::Interpolation(node) => node.range(),
2924            Self::Literal(node) => node.range(),
2925        }
2926    }
2927}
2928
2929impl crate::HasNodeIndex for InterpolatedStringElement {
2930    fn node_index(&self) -> &crate::AtomicNodeIndex {
2931        match self {
2932            Self::Interpolation(node) => node.node_index(),
2933            Self::Literal(node) => node.node_index(),
2934        }
2935    }
2936}
2937
2938#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
2939impl InterpolatedStringElement {
2940    #[inline]
2941    pub const fn is_interpolation(&self) -> bool {
2942        matches!(self, Self::Interpolation(_))
2943    }
2944
2945    #[inline]
2946    pub fn interpolation(self) -> Option<crate::InterpolatedElement> {
2947        match self {
2948            Self::Interpolation(val) => Some(val),
2949            _ => None,
2950        }
2951    }
2952
2953    #[inline]
2954    pub fn expect_interpolation(self) -> crate::InterpolatedElement {
2955        match self {
2956            Self::Interpolation(val) => val,
2957            _ => panic!("called expect on {self:?}"),
2958        }
2959    }
2960
2961    #[inline]
2962    pub fn as_interpolation_mut(&mut self) -> Option<&mut crate::InterpolatedElement> {
2963        match self {
2964            Self::Interpolation(val) => Some(val),
2965            _ => None,
2966        }
2967    }
2968
2969    #[inline]
2970    pub fn as_interpolation(&self) -> Option<&crate::InterpolatedElement> {
2971        match self {
2972            Self::Interpolation(val) => Some(val),
2973            _ => None,
2974        }
2975    }
2976
2977    #[inline]
2978    pub const fn is_literal(&self) -> bool {
2979        matches!(self, Self::Literal(_))
2980    }
2981
2982    #[inline]
2983    pub fn literal(self) -> Option<crate::InterpolatedStringLiteralElement> {
2984        match self {
2985            Self::Literal(val) => Some(val),
2986            _ => None,
2987        }
2988    }
2989
2990    #[inline]
2991    pub fn expect_literal(self) -> crate::InterpolatedStringLiteralElement {
2992        match self {
2993            Self::Literal(val) => val,
2994            _ => panic!("called expect on {self:?}"),
2995        }
2996    }
2997
2998    #[inline]
2999    pub fn as_literal_mut(&mut self) -> Option<&mut crate::InterpolatedStringLiteralElement> {
3000        match self {
3001            Self::Literal(val) => Some(val),
3002            _ => None,
3003        }
3004    }
3005
3006    #[inline]
3007    pub fn as_literal(&self) -> Option<&crate::InterpolatedStringLiteralElement> {
3008        match self {
3009            Self::Literal(val) => Some(val),
3010            _ => None,
3011        }
3012    }
3013}
3014
3015/// See also [pattern](https://docs.python.org/3/library/ast.html#ast.pattern)
3016#[derive(Clone, Debug, PartialEq)]
3017#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
3018pub enum Pattern {
3019    MatchValue(crate::PatternMatchValue),
3020    MatchSingleton(crate::PatternMatchSingleton),
3021    MatchSequence(crate::PatternMatchSequence),
3022    MatchMapping(crate::PatternMatchMapping),
3023    MatchClass(crate::PatternMatchClass),
3024    MatchStar(crate::PatternMatchStar),
3025    MatchAs(crate::PatternMatchAs),
3026    MatchOr(crate::PatternMatchOr),
3027}
3028
3029impl From<crate::PatternMatchValue> for Pattern {
3030    fn from(node: crate::PatternMatchValue) -> Self {
3031        Self::MatchValue(node)
3032    }
3033}
3034
3035impl From<crate::PatternMatchSingleton> for Pattern {
3036    fn from(node: crate::PatternMatchSingleton) -> Self {
3037        Self::MatchSingleton(node)
3038    }
3039}
3040
3041impl From<crate::PatternMatchSequence> for Pattern {
3042    fn from(node: crate::PatternMatchSequence) -> Self {
3043        Self::MatchSequence(node)
3044    }
3045}
3046
3047impl From<crate::PatternMatchMapping> for Pattern {
3048    fn from(node: crate::PatternMatchMapping) -> Self {
3049        Self::MatchMapping(node)
3050    }
3051}
3052
3053impl From<crate::PatternMatchClass> for Pattern {
3054    fn from(node: crate::PatternMatchClass) -> Self {
3055        Self::MatchClass(node)
3056    }
3057}
3058
3059impl From<crate::PatternMatchStar> for Pattern {
3060    fn from(node: crate::PatternMatchStar) -> Self {
3061        Self::MatchStar(node)
3062    }
3063}
3064
3065impl From<crate::PatternMatchAs> for Pattern {
3066    fn from(node: crate::PatternMatchAs) -> Self {
3067        Self::MatchAs(node)
3068    }
3069}
3070
3071impl From<crate::PatternMatchOr> for Pattern {
3072    fn from(node: crate::PatternMatchOr) -> Self {
3073        Self::MatchOr(node)
3074    }
3075}
3076
3077impl ruff_text_size::Ranged for Pattern {
3078    fn range(&self) -> ruff_text_size::TextRange {
3079        match self {
3080            Self::MatchValue(node) => node.range(),
3081            Self::MatchSingleton(node) => node.range(),
3082            Self::MatchSequence(node) => node.range(),
3083            Self::MatchMapping(node) => node.range(),
3084            Self::MatchClass(node) => node.range(),
3085            Self::MatchStar(node) => node.range(),
3086            Self::MatchAs(node) => node.range(),
3087            Self::MatchOr(node) => node.range(),
3088        }
3089    }
3090}
3091
3092impl crate::HasNodeIndex for Pattern {
3093    fn node_index(&self) -> &crate::AtomicNodeIndex {
3094        match self {
3095            Self::MatchValue(node) => node.node_index(),
3096            Self::MatchSingleton(node) => node.node_index(),
3097            Self::MatchSequence(node) => node.node_index(),
3098            Self::MatchMapping(node) => node.node_index(),
3099            Self::MatchClass(node) => node.node_index(),
3100            Self::MatchStar(node) => node.node_index(),
3101            Self::MatchAs(node) => node.node_index(),
3102            Self::MatchOr(node) => node.node_index(),
3103        }
3104    }
3105}
3106
3107#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
3108impl Pattern {
3109    #[inline]
3110    pub const fn is_match_value(&self) -> bool {
3111        matches!(self, Self::MatchValue(_))
3112    }
3113
3114    #[inline]
3115    pub fn match_value(self) -> Option<crate::PatternMatchValue> {
3116        match self {
3117            Self::MatchValue(val) => Some(val),
3118            _ => None,
3119        }
3120    }
3121
3122    #[inline]
3123    pub fn expect_match_value(self) -> crate::PatternMatchValue {
3124        match self {
3125            Self::MatchValue(val) => val,
3126            _ => panic!("called expect on {self:?}"),
3127        }
3128    }
3129
3130    #[inline]
3131    pub fn as_match_value_mut(&mut self) -> Option<&mut crate::PatternMatchValue> {
3132        match self {
3133            Self::MatchValue(val) => Some(val),
3134            _ => None,
3135        }
3136    }
3137
3138    #[inline]
3139    pub fn as_match_value(&self) -> Option<&crate::PatternMatchValue> {
3140        match self {
3141            Self::MatchValue(val) => Some(val),
3142            _ => None,
3143        }
3144    }
3145
3146    #[inline]
3147    pub const fn is_match_singleton(&self) -> bool {
3148        matches!(self, Self::MatchSingleton(_))
3149    }
3150
3151    #[inline]
3152    pub fn match_singleton(self) -> Option<crate::PatternMatchSingleton> {
3153        match self {
3154            Self::MatchSingleton(val) => Some(val),
3155            _ => None,
3156        }
3157    }
3158
3159    #[inline]
3160    pub fn expect_match_singleton(self) -> crate::PatternMatchSingleton {
3161        match self {
3162            Self::MatchSingleton(val) => val,
3163            _ => panic!("called expect on {self:?}"),
3164        }
3165    }
3166
3167    #[inline]
3168    pub fn as_match_singleton_mut(&mut self) -> Option<&mut crate::PatternMatchSingleton> {
3169        match self {
3170            Self::MatchSingleton(val) => Some(val),
3171            _ => None,
3172        }
3173    }
3174
3175    #[inline]
3176    pub fn as_match_singleton(&self) -> Option<&crate::PatternMatchSingleton> {
3177        match self {
3178            Self::MatchSingleton(val) => Some(val),
3179            _ => None,
3180        }
3181    }
3182
3183    #[inline]
3184    pub const fn is_match_sequence(&self) -> bool {
3185        matches!(self, Self::MatchSequence(_))
3186    }
3187
3188    #[inline]
3189    pub fn match_sequence(self) -> Option<crate::PatternMatchSequence> {
3190        match self {
3191            Self::MatchSequence(val) => Some(val),
3192            _ => None,
3193        }
3194    }
3195
3196    #[inline]
3197    pub fn expect_match_sequence(self) -> crate::PatternMatchSequence {
3198        match self {
3199            Self::MatchSequence(val) => val,
3200            _ => panic!("called expect on {self:?}"),
3201        }
3202    }
3203
3204    #[inline]
3205    pub fn as_match_sequence_mut(&mut self) -> Option<&mut crate::PatternMatchSequence> {
3206        match self {
3207            Self::MatchSequence(val) => Some(val),
3208            _ => None,
3209        }
3210    }
3211
3212    #[inline]
3213    pub fn as_match_sequence(&self) -> Option<&crate::PatternMatchSequence> {
3214        match self {
3215            Self::MatchSequence(val) => Some(val),
3216            _ => None,
3217        }
3218    }
3219
3220    #[inline]
3221    pub const fn is_match_mapping(&self) -> bool {
3222        matches!(self, Self::MatchMapping(_))
3223    }
3224
3225    #[inline]
3226    pub fn match_mapping(self) -> Option<crate::PatternMatchMapping> {
3227        match self {
3228            Self::MatchMapping(val) => Some(val),
3229            _ => None,
3230        }
3231    }
3232
3233    #[inline]
3234    pub fn expect_match_mapping(self) -> crate::PatternMatchMapping {
3235        match self {
3236            Self::MatchMapping(val) => val,
3237            _ => panic!("called expect on {self:?}"),
3238        }
3239    }
3240
3241    #[inline]
3242    pub fn as_match_mapping_mut(&mut self) -> Option<&mut crate::PatternMatchMapping> {
3243        match self {
3244            Self::MatchMapping(val) => Some(val),
3245            _ => None,
3246        }
3247    }
3248
3249    #[inline]
3250    pub fn as_match_mapping(&self) -> Option<&crate::PatternMatchMapping> {
3251        match self {
3252            Self::MatchMapping(val) => Some(val),
3253            _ => None,
3254        }
3255    }
3256
3257    #[inline]
3258    pub const fn is_match_class(&self) -> bool {
3259        matches!(self, Self::MatchClass(_))
3260    }
3261
3262    #[inline]
3263    pub fn match_class(self) -> Option<crate::PatternMatchClass> {
3264        match self {
3265            Self::MatchClass(val) => Some(val),
3266            _ => None,
3267        }
3268    }
3269
3270    #[inline]
3271    pub fn expect_match_class(self) -> crate::PatternMatchClass {
3272        match self {
3273            Self::MatchClass(val) => val,
3274            _ => panic!("called expect on {self:?}"),
3275        }
3276    }
3277
3278    #[inline]
3279    pub fn as_match_class_mut(&mut self) -> Option<&mut crate::PatternMatchClass> {
3280        match self {
3281            Self::MatchClass(val) => Some(val),
3282            _ => None,
3283        }
3284    }
3285
3286    #[inline]
3287    pub fn as_match_class(&self) -> Option<&crate::PatternMatchClass> {
3288        match self {
3289            Self::MatchClass(val) => Some(val),
3290            _ => None,
3291        }
3292    }
3293
3294    #[inline]
3295    pub const fn is_match_star(&self) -> bool {
3296        matches!(self, Self::MatchStar(_))
3297    }
3298
3299    #[inline]
3300    pub fn match_star(self) -> Option<crate::PatternMatchStar> {
3301        match self {
3302            Self::MatchStar(val) => Some(val),
3303            _ => None,
3304        }
3305    }
3306
3307    #[inline]
3308    pub fn expect_match_star(self) -> crate::PatternMatchStar {
3309        match self {
3310            Self::MatchStar(val) => val,
3311            _ => panic!("called expect on {self:?}"),
3312        }
3313    }
3314
3315    #[inline]
3316    pub fn as_match_star_mut(&mut self) -> Option<&mut crate::PatternMatchStar> {
3317        match self {
3318            Self::MatchStar(val) => Some(val),
3319            _ => None,
3320        }
3321    }
3322
3323    #[inline]
3324    pub fn as_match_star(&self) -> Option<&crate::PatternMatchStar> {
3325        match self {
3326            Self::MatchStar(val) => Some(val),
3327            _ => None,
3328        }
3329    }
3330
3331    #[inline]
3332    pub const fn is_match_as(&self) -> bool {
3333        matches!(self, Self::MatchAs(_))
3334    }
3335
3336    #[inline]
3337    pub fn match_as(self) -> Option<crate::PatternMatchAs> {
3338        match self {
3339            Self::MatchAs(val) => Some(val),
3340            _ => None,
3341        }
3342    }
3343
3344    #[inline]
3345    pub fn expect_match_as(self) -> crate::PatternMatchAs {
3346        match self {
3347            Self::MatchAs(val) => val,
3348            _ => panic!("called expect on {self:?}"),
3349        }
3350    }
3351
3352    #[inline]
3353    pub fn as_match_as_mut(&mut self) -> Option<&mut crate::PatternMatchAs> {
3354        match self {
3355            Self::MatchAs(val) => Some(val),
3356            _ => None,
3357        }
3358    }
3359
3360    #[inline]
3361    pub fn as_match_as(&self) -> Option<&crate::PatternMatchAs> {
3362        match self {
3363            Self::MatchAs(val) => Some(val),
3364            _ => None,
3365        }
3366    }
3367
3368    #[inline]
3369    pub const fn is_match_or(&self) -> bool {
3370        matches!(self, Self::MatchOr(_))
3371    }
3372
3373    #[inline]
3374    pub fn match_or(self) -> Option<crate::PatternMatchOr> {
3375        match self {
3376            Self::MatchOr(val) => Some(val),
3377            _ => None,
3378        }
3379    }
3380
3381    #[inline]
3382    pub fn expect_match_or(self) -> crate::PatternMatchOr {
3383        match self {
3384            Self::MatchOr(val) => val,
3385            _ => panic!("called expect on {self:?}"),
3386        }
3387    }
3388
3389    #[inline]
3390    pub fn as_match_or_mut(&mut self) -> Option<&mut crate::PatternMatchOr> {
3391        match self {
3392            Self::MatchOr(val) => Some(val),
3393            _ => None,
3394        }
3395    }
3396
3397    #[inline]
3398    pub fn as_match_or(&self) -> Option<&crate::PatternMatchOr> {
3399        match self {
3400            Self::MatchOr(val) => Some(val),
3401            _ => None,
3402        }
3403    }
3404}
3405
3406/// See also [type_param](https://docs.python.org/3/library/ast.html#ast.type_param)
3407#[derive(Clone, Debug, PartialEq)]
3408#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
3409pub enum TypeParam {
3410    TypeVar(crate::TypeParamTypeVar),
3411    TypeVarTuple(crate::TypeParamTypeVarTuple),
3412    ParamSpec(crate::TypeParamParamSpec),
3413}
3414
3415impl From<crate::TypeParamTypeVar> for TypeParam {
3416    fn from(node: crate::TypeParamTypeVar) -> Self {
3417        Self::TypeVar(node)
3418    }
3419}
3420
3421impl From<crate::TypeParamTypeVarTuple> for TypeParam {
3422    fn from(node: crate::TypeParamTypeVarTuple) -> Self {
3423        Self::TypeVarTuple(node)
3424    }
3425}
3426
3427impl From<crate::TypeParamParamSpec> for TypeParam {
3428    fn from(node: crate::TypeParamParamSpec) -> Self {
3429        Self::ParamSpec(node)
3430    }
3431}
3432
3433impl ruff_text_size::Ranged for TypeParam {
3434    fn range(&self) -> ruff_text_size::TextRange {
3435        match self {
3436            Self::TypeVar(node) => node.range(),
3437            Self::TypeVarTuple(node) => node.range(),
3438            Self::ParamSpec(node) => node.range(),
3439        }
3440    }
3441}
3442
3443impl crate::HasNodeIndex for TypeParam {
3444    fn node_index(&self) -> &crate::AtomicNodeIndex {
3445        match self {
3446            Self::TypeVar(node) => node.node_index(),
3447            Self::TypeVarTuple(node) => node.node_index(),
3448            Self::ParamSpec(node) => node.node_index(),
3449        }
3450    }
3451}
3452
3453#[allow(dead_code, clippy::match_wildcard_for_single_variants)]
3454impl TypeParam {
3455    #[inline]
3456    pub const fn is_type_var(&self) -> bool {
3457        matches!(self, Self::TypeVar(_))
3458    }
3459
3460    #[inline]
3461    pub fn type_var(self) -> Option<crate::TypeParamTypeVar> {
3462        match self {
3463            Self::TypeVar(val) => Some(val),
3464            _ => None,
3465        }
3466    }
3467
3468    #[inline]
3469    pub fn expect_type_var(self) -> crate::TypeParamTypeVar {
3470        match self {
3471            Self::TypeVar(val) => val,
3472            _ => panic!("called expect on {self:?}"),
3473        }
3474    }
3475
3476    #[inline]
3477    pub fn as_type_var_mut(&mut self) -> Option<&mut crate::TypeParamTypeVar> {
3478        match self {
3479            Self::TypeVar(val) => Some(val),
3480            _ => None,
3481        }
3482    }
3483
3484    #[inline]
3485    pub fn as_type_var(&self) -> Option<&crate::TypeParamTypeVar> {
3486        match self {
3487            Self::TypeVar(val) => Some(val),
3488            _ => None,
3489        }
3490    }
3491
3492    #[inline]
3493    pub const fn is_type_var_tuple(&self) -> bool {
3494        matches!(self, Self::TypeVarTuple(_))
3495    }
3496
3497    #[inline]
3498    pub fn type_var_tuple(self) -> Option<crate::TypeParamTypeVarTuple> {
3499        match self {
3500            Self::TypeVarTuple(val) => Some(val),
3501            _ => None,
3502        }
3503    }
3504
3505    #[inline]
3506    pub fn expect_type_var_tuple(self) -> crate::TypeParamTypeVarTuple {
3507        match self {
3508            Self::TypeVarTuple(val) => val,
3509            _ => panic!("called expect on {self:?}"),
3510        }
3511    }
3512
3513    #[inline]
3514    pub fn as_type_var_tuple_mut(&mut self) -> Option<&mut crate::TypeParamTypeVarTuple> {
3515        match self {
3516            Self::TypeVarTuple(val) => Some(val),
3517            _ => None,
3518        }
3519    }
3520
3521    #[inline]
3522    pub fn as_type_var_tuple(&self) -> Option<&crate::TypeParamTypeVarTuple> {
3523        match self {
3524            Self::TypeVarTuple(val) => Some(val),
3525            _ => None,
3526        }
3527    }
3528
3529    #[inline]
3530    pub const fn is_param_spec(&self) -> bool {
3531        matches!(self, Self::ParamSpec(_))
3532    }
3533
3534    #[inline]
3535    pub fn param_spec(self) -> Option<crate::TypeParamParamSpec> {
3536        match self {
3537            Self::ParamSpec(val) => Some(val),
3538            _ => None,
3539        }
3540    }
3541
3542    #[inline]
3543    pub fn expect_param_spec(self) -> crate::TypeParamParamSpec {
3544        match self {
3545            Self::ParamSpec(val) => val,
3546            _ => panic!("called expect on {self:?}"),
3547        }
3548    }
3549
3550    #[inline]
3551    pub fn as_param_spec_mut(&mut self) -> Option<&mut crate::TypeParamParamSpec> {
3552        match self {
3553            Self::ParamSpec(val) => Some(val),
3554            _ => None,
3555        }
3556    }
3557
3558    #[inline]
3559    pub fn as_param_spec(&self) -> Option<&crate::TypeParamParamSpec> {
3560        match self {
3561            Self::ParamSpec(val) => Some(val),
3562            _ => None,
3563        }
3564    }
3565}
3566
3567impl ruff_text_size::Ranged for crate::ModModule {
3568    fn range(&self) -> ruff_text_size::TextRange {
3569        self.range
3570    }
3571}
3572
3573impl ruff_text_size::Ranged for crate::ModExpression {
3574    fn range(&self) -> ruff_text_size::TextRange {
3575        self.range
3576    }
3577}
3578
3579impl ruff_text_size::Ranged for crate::StmtFunctionDef {
3580    fn range(&self) -> ruff_text_size::TextRange {
3581        self.range
3582    }
3583}
3584
3585impl ruff_text_size::Ranged for crate::StmtClassDef {
3586    fn range(&self) -> ruff_text_size::TextRange {
3587        self.range
3588    }
3589}
3590
3591impl ruff_text_size::Ranged for crate::StmtReturn {
3592    fn range(&self) -> ruff_text_size::TextRange {
3593        self.range
3594    }
3595}
3596
3597impl ruff_text_size::Ranged for crate::StmtDelete {
3598    fn range(&self) -> ruff_text_size::TextRange {
3599        self.range
3600    }
3601}
3602
3603impl ruff_text_size::Ranged for crate::StmtTypeAlias {
3604    fn range(&self) -> ruff_text_size::TextRange {
3605        self.range
3606    }
3607}
3608
3609impl ruff_text_size::Ranged for crate::StmtAssign {
3610    fn range(&self) -> ruff_text_size::TextRange {
3611        self.range
3612    }
3613}
3614
3615impl ruff_text_size::Ranged for crate::StmtAugAssign {
3616    fn range(&self) -> ruff_text_size::TextRange {
3617        self.range
3618    }
3619}
3620
3621impl ruff_text_size::Ranged for crate::StmtAnnAssign {
3622    fn range(&self) -> ruff_text_size::TextRange {
3623        self.range
3624    }
3625}
3626
3627impl ruff_text_size::Ranged for crate::StmtFor {
3628    fn range(&self) -> ruff_text_size::TextRange {
3629        self.range
3630    }
3631}
3632
3633impl ruff_text_size::Ranged for crate::StmtWhile {
3634    fn range(&self) -> ruff_text_size::TextRange {
3635        self.range
3636    }
3637}
3638
3639impl ruff_text_size::Ranged for crate::StmtIf {
3640    fn range(&self) -> ruff_text_size::TextRange {
3641        self.range
3642    }
3643}
3644
3645impl ruff_text_size::Ranged for crate::StmtWith {
3646    fn range(&self) -> ruff_text_size::TextRange {
3647        self.range
3648    }
3649}
3650
3651impl ruff_text_size::Ranged for crate::StmtMatch {
3652    fn range(&self) -> ruff_text_size::TextRange {
3653        self.range
3654    }
3655}
3656
3657impl ruff_text_size::Ranged for crate::StmtRaise {
3658    fn range(&self) -> ruff_text_size::TextRange {
3659        self.range
3660    }
3661}
3662
3663impl ruff_text_size::Ranged for crate::StmtTry {
3664    fn range(&self) -> ruff_text_size::TextRange {
3665        self.range
3666    }
3667}
3668
3669impl ruff_text_size::Ranged for crate::StmtAssert {
3670    fn range(&self) -> ruff_text_size::TextRange {
3671        self.range
3672    }
3673}
3674
3675impl ruff_text_size::Ranged for crate::StmtImport {
3676    fn range(&self) -> ruff_text_size::TextRange {
3677        self.range
3678    }
3679}
3680
3681impl ruff_text_size::Ranged for crate::StmtImportFrom {
3682    fn range(&self) -> ruff_text_size::TextRange {
3683        self.range
3684    }
3685}
3686
3687impl ruff_text_size::Ranged for crate::StmtGlobal {
3688    fn range(&self) -> ruff_text_size::TextRange {
3689        self.range
3690    }
3691}
3692
3693impl ruff_text_size::Ranged for crate::StmtNonlocal {
3694    fn range(&self) -> ruff_text_size::TextRange {
3695        self.range
3696    }
3697}
3698
3699impl ruff_text_size::Ranged for crate::StmtExpr {
3700    fn range(&self) -> ruff_text_size::TextRange {
3701        self.range
3702    }
3703}
3704
3705impl ruff_text_size::Ranged for crate::StmtPass {
3706    fn range(&self) -> ruff_text_size::TextRange {
3707        self.range
3708    }
3709}
3710
3711impl ruff_text_size::Ranged for crate::StmtBreak {
3712    fn range(&self) -> ruff_text_size::TextRange {
3713        self.range
3714    }
3715}
3716
3717impl ruff_text_size::Ranged for crate::StmtContinue {
3718    fn range(&self) -> ruff_text_size::TextRange {
3719        self.range
3720    }
3721}
3722
3723impl ruff_text_size::Ranged for crate::StmtIpyEscapeCommand {
3724    fn range(&self) -> ruff_text_size::TextRange {
3725        self.range
3726    }
3727}
3728
3729impl ruff_text_size::Ranged for crate::ExprBoolOp {
3730    fn range(&self) -> ruff_text_size::TextRange {
3731        self.range
3732    }
3733}
3734
3735impl ruff_text_size::Ranged for crate::ExprNamed {
3736    fn range(&self) -> ruff_text_size::TextRange {
3737        self.range
3738    }
3739}
3740
3741impl ruff_text_size::Ranged for crate::ExprBinOp {
3742    fn range(&self) -> ruff_text_size::TextRange {
3743        self.range
3744    }
3745}
3746
3747impl ruff_text_size::Ranged for crate::ExprUnaryOp {
3748    fn range(&self) -> ruff_text_size::TextRange {
3749        self.range
3750    }
3751}
3752
3753impl ruff_text_size::Ranged for crate::ExprLambda {
3754    fn range(&self) -> ruff_text_size::TextRange {
3755        self.range
3756    }
3757}
3758
3759impl ruff_text_size::Ranged for crate::ExprIf {
3760    fn range(&self) -> ruff_text_size::TextRange {
3761        self.range
3762    }
3763}
3764
3765impl ruff_text_size::Ranged for crate::ExprDict {
3766    fn range(&self) -> ruff_text_size::TextRange {
3767        self.range
3768    }
3769}
3770
3771impl ruff_text_size::Ranged for crate::ExprSet {
3772    fn range(&self) -> ruff_text_size::TextRange {
3773        self.range
3774    }
3775}
3776
3777impl ruff_text_size::Ranged for crate::ExprListComp {
3778    fn range(&self) -> ruff_text_size::TextRange {
3779        self.range
3780    }
3781}
3782
3783impl ruff_text_size::Ranged for crate::ExprSetComp {
3784    fn range(&self) -> ruff_text_size::TextRange {
3785        self.range
3786    }
3787}
3788
3789impl ruff_text_size::Ranged for crate::ExprDictComp {
3790    fn range(&self) -> ruff_text_size::TextRange {
3791        self.range
3792    }
3793}
3794
3795impl ruff_text_size::Ranged for crate::ExprGenerator {
3796    fn range(&self) -> ruff_text_size::TextRange {
3797        self.range
3798    }
3799}
3800
3801impl ruff_text_size::Ranged for crate::ExprAwait {
3802    fn range(&self) -> ruff_text_size::TextRange {
3803        self.range
3804    }
3805}
3806
3807impl ruff_text_size::Ranged for crate::ExprYield {
3808    fn range(&self) -> ruff_text_size::TextRange {
3809        self.range
3810    }
3811}
3812
3813impl ruff_text_size::Ranged for crate::ExprYieldFrom {
3814    fn range(&self) -> ruff_text_size::TextRange {
3815        self.range
3816    }
3817}
3818
3819impl ruff_text_size::Ranged for crate::ExprCompare {
3820    fn range(&self) -> ruff_text_size::TextRange {
3821        self.range
3822    }
3823}
3824
3825impl ruff_text_size::Ranged for crate::ExprFString {
3826    fn range(&self) -> ruff_text_size::TextRange {
3827        self.range
3828    }
3829}
3830
3831impl ruff_text_size::Ranged for crate::ExprTString {
3832    fn range(&self) -> ruff_text_size::TextRange {
3833        self.range
3834    }
3835}
3836
3837impl ruff_text_size::Ranged for crate::ExprStringLiteral {
3838    fn range(&self) -> ruff_text_size::TextRange {
3839        self.range
3840    }
3841}
3842
3843impl ruff_text_size::Ranged for crate::ExprBytesLiteral {
3844    fn range(&self) -> ruff_text_size::TextRange {
3845        self.range
3846    }
3847}
3848
3849impl ruff_text_size::Ranged for crate::ExprNumberLiteral {
3850    fn range(&self) -> ruff_text_size::TextRange {
3851        self.range
3852    }
3853}
3854
3855impl ruff_text_size::Ranged for crate::ExprBooleanLiteral {
3856    fn range(&self) -> ruff_text_size::TextRange {
3857        self.range
3858    }
3859}
3860
3861impl ruff_text_size::Ranged for crate::ExprNoneLiteral {
3862    fn range(&self) -> ruff_text_size::TextRange {
3863        self.range
3864    }
3865}
3866
3867impl ruff_text_size::Ranged for crate::ExprEllipsisLiteral {
3868    fn range(&self) -> ruff_text_size::TextRange {
3869        self.range
3870    }
3871}
3872
3873impl ruff_text_size::Ranged for crate::ExprAttribute {
3874    fn range(&self) -> ruff_text_size::TextRange {
3875        self.range
3876    }
3877}
3878
3879impl ruff_text_size::Ranged for crate::ExprSubscript {
3880    fn range(&self) -> ruff_text_size::TextRange {
3881        self.range
3882    }
3883}
3884
3885impl ruff_text_size::Ranged for crate::ExprStarred {
3886    fn range(&self) -> ruff_text_size::TextRange {
3887        self.range
3888    }
3889}
3890
3891impl ruff_text_size::Ranged for crate::ExprName {
3892    fn range(&self) -> ruff_text_size::TextRange {
3893        self.range
3894    }
3895}
3896
3897impl ruff_text_size::Ranged for crate::ExprList {
3898    fn range(&self) -> ruff_text_size::TextRange {
3899        self.range
3900    }
3901}
3902
3903impl ruff_text_size::Ranged for crate::ExprTuple {
3904    fn range(&self) -> ruff_text_size::TextRange {
3905        self.range
3906    }
3907}
3908
3909impl ruff_text_size::Ranged for crate::ExprSlice {
3910    fn range(&self) -> ruff_text_size::TextRange {
3911        self.range
3912    }
3913}
3914
3915impl ruff_text_size::Ranged for crate::ExprIpyEscapeCommand {
3916    fn range(&self) -> ruff_text_size::TextRange {
3917        self.range
3918    }
3919}
3920
3921impl ruff_text_size::Ranged for crate::ExceptHandlerExceptHandler {
3922    fn range(&self) -> ruff_text_size::TextRange {
3923        self.range
3924    }
3925}
3926
3927impl ruff_text_size::Ranged for crate::InterpolatedElement {
3928    fn range(&self) -> ruff_text_size::TextRange {
3929        self.range
3930    }
3931}
3932
3933impl ruff_text_size::Ranged for crate::InterpolatedStringLiteralElement {
3934    fn range(&self) -> ruff_text_size::TextRange {
3935        self.range
3936    }
3937}
3938
3939impl ruff_text_size::Ranged for crate::PatternMatchValue {
3940    fn range(&self) -> ruff_text_size::TextRange {
3941        self.range
3942    }
3943}
3944
3945impl ruff_text_size::Ranged for crate::PatternMatchSingleton {
3946    fn range(&self) -> ruff_text_size::TextRange {
3947        self.range
3948    }
3949}
3950
3951impl ruff_text_size::Ranged for crate::PatternMatchSequence {
3952    fn range(&self) -> ruff_text_size::TextRange {
3953        self.range
3954    }
3955}
3956
3957impl ruff_text_size::Ranged for crate::PatternMatchMapping {
3958    fn range(&self) -> ruff_text_size::TextRange {
3959        self.range
3960    }
3961}
3962
3963impl ruff_text_size::Ranged for crate::PatternMatchClass {
3964    fn range(&self) -> ruff_text_size::TextRange {
3965        self.range
3966    }
3967}
3968
3969impl ruff_text_size::Ranged for crate::PatternMatchStar {
3970    fn range(&self) -> ruff_text_size::TextRange {
3971        self.range
3972    }
3973}
3974
3975impl ruff_text_size::Ranged for crate::PatternMatchAs {
3976    fn range(&self) -> ruff_text_size::TextRange {
3977        self.range
3978    }
3979}
3980
3981impl ruff_text_size::Ranged for crate::PatternMatchOr {
3982    fn range(&self) -> ruff_text_size::TextRange {
3983        self.range
3984    }
3985}
3986
3987impl ruff_text_size::Ranged for crate::TypeParamTypeVar {
3988    fn range(&self) -> ruff_text_size::TextRange {
3989        self.range
3990    }
3991}
3992
3993impl ruff_text_size::Ranged for crate::TypeParamTypeVarTuple {
3994    fn range(&self) -> ruff_text_size::TextRange {
3995        self.range
3996    }
3997}
3998
3999impl ruff_text_size::Ranged for crate::TypeParamParamSpec {
4000    fn range(&self) -> ruff_text_size::TextRange {
4001        self.range
4002    }
4003}
4004
4005impl ruff_text_size::Ranged for crate::InterpolatedStringFormatSpec {
4006    fn range(&self) -> ruff_text_size::TextRange {
4007        self.range
4008    }
4009}
4010
4011impl ruff_text_size::Ranged for crate::PatternArguments {
4012    fn range(&self) -> ruff_text_size::TextRange {
4013        self.range
4014    }
4015}
4016
4017impl ruff_text_size::Ranged for crate::PatternKeyword {
4018    fn range(&self) -> ruff_text_size::TextRange {
4019        self.range
4020    }
4021}
4022
4023impl ruff_text_size::Ranged for crate::Comprehension {
4024    fn range(&self) -> ruff_text_size::TextRange {
4025        self.range
4026    }
4027}
4028
4029impl ruff_text_size::Ranged for crate::Arguments {
4030    fn range(&self) -> ruff_text_size::TextRange {
4031        self.range
4032    }
4033}
4034
4035impl ruff_text_size::Ranged for crate::Parameters {
4036    fn range(&self) -> ruff_text_size::TextRange {
4037        self.range
4038    }
4039}
4040
4041impl ruff_text_size::Ranged for crate::Parameter {
4042    fn range(&self) -> ruff_text_size::TextRange {
4043        self.range
4044    }
4045}
4046
4047impl ruff_text_size::Ranged for crate::ParameterWithDefault {
4048    fn range(&self) -> ruff_text_size::TextRange {
4049        self.range
4050    }
4051}
4052
4053impl ruff_text_size::Ranged for crate::Keyword {
4054    fn range(&self) -> ruff_text_size::TextRange {
4055        self.range
4056    }
4057}
4058
4059impl ruff_text_size::Ranged for crate::Alias {
4060    fn range(&self) -> ruff_text_size::TextRange {
4061        self.range
4062    }
4063}
4064
4065impl ruff_text_size::Ranged for crate::WithItem {
4066    fn range(&self) -> ruff_text_size::TextRange {
4067        self.range
4068    }
4069}
4070
4071impl ruff_text_size::Ranged for crate::MatchCase {
4072    fn range(&self) -> ruff_text_size::TextRange {
4073        self.range
4074    }
4075}
4076
4077impl ruff_text_size::Ranged for crate::Decorator {
4078    fn range(&self) -> ruff_text_size::TextRange {
4079        self.range
4080    }
4081}
4082
4083impl ruff_text_size::Ranged for crate::ElifElseClause {
4084    fn range(&self) -> ruff_text_size::TextRange {
4085        self.range
4086    }
4087}
4088
4089impl ruff_text_size::Ranged for crate::TypeParams {
4090    fn range(&self) -> ruff_text_size::TextRange {
4091        self.range
4092    }
4093}
4094
4095impl ruff_text_size::Ranged for crate::FString {
4096    fn range(&self) -> ruff_text_size::TextRange {
4097        self.range
4098    }
4099}
4100
4101impl ruff_text_size::Ranged for crate::TString {
4102    fn range(&self) -> ruff_text_size::TextRange {
4103        self.range
4104    }
4105}
4106
4107impl ruff_text_size::Ranged for crate::StringLiteral {
4108    fn range(&self) -> ruff_text_size::TextRange {
4109        self.range
4110    }
4111}
4112
4113impl ruff_text_size::Ranged for crate::BytesLiteral {
4114    fn range(&self) -> ruff_text_size::TextRange {
4115        self.range
4116    }
4117}
4118
4119impl ruff_text_size::Ranged for crate::Identifier {
4120    fn range(&self) -> ruff_text_size::TextRange {
4121        self.range
4122    }
4123}
4124
4125impl crate::HasNodeIndex for crate::ModModule {
4126    fn node_index(&self) -> &crate::AtomicNodeIndex {
4127        &self.node_index
4128    }
4129}
4130
4131impl crate::HasNodeIndex for crate::ModExpression {
4132    fn node_index(&self) -> &crate::AtomicNodeIndex {
4133        &self.node_index
4134    }
4135}
4136
4137impl crate::HasNodeIndex for crate::StmtFunctionDef {
4138    fn node_index(&self) -> &crate::AtomicNodeIndex {
4139        &self.node_index
4140    }
4141}
4142
4143impl crate::HasNodeIndex for crate::StmtClassDef {
4144    fn node_index(&self) -> &crate::AtomicNodeIndex {
4145        &self.node_index
4146    }
4147}
4148
4149impl crate::HasNodeIndex for crate::StmtReturn {
4150    fn node_index(&self) -> &crate::AtomicNodeIndex {
4151        &self.node_index
4152    }
4153}
4154
4155impl crate::HasNodeIndex for crate::StmtDelete {
4156    fn node_index(&self) -> &crate::AtomicNodeIndex {
4157        &self.node_index
4158    }
4159}
4160
4161impl crate::HasNodeIndex for crate::StmtTypeAlias {
4162    fn node_index(&self) -> &crate::AtomicNodeIndex {
4163        &self.node_index
4164    }
4165}
4166
4167impl crate::HasNodeIndex for crate::StmtAssign {
4168    fn node_index(&self) -> &crate::AtomicNodeIndex {
4169        &self.node_index
4170    }
4171}
4172
4173impl crate::HasNodeIndex for crate::StmtAugAssign {
4174    fn node_index(&self) -> &crate::AtomicNodeIndex {
4175        &self.node_index
4176    }
4177}
4178
4179impl crate::HasNodeIndex for crate::StmtAnnAssign {
4180    fn node_index(&self) -> &crate::AtomicNodeIndex {
4181        &self.node_index
4182    }
4183}
4184
4185impl crate::HasNodeIndex for crate::StmtFor {
4186    fn node_index(&self) -> &crate::AtomicNodeIndex {
4187        &self.node_index
4188    }
4189}
4190
4191impl crate::HasNodeIndex for crate::StmtWhile {
4192    fn node_index(&self) -> &crate::AtomicNodeIndex {
4193        &self.node_index
4194    }
4195}
4196
4197impl crate::HasNodeIndex for crate::StmtIf {
4198    fn node_index(&self) -> &crate::AtomicNodeIndex {
4199        &self.node_index
4200    }
4201}
4202
4203impl crate::HasNodeIndex for crate::StmtWith {
4204    fn node_index(&self) -> &crate::AtomicNodeIndex {
4205        &self.node_index
4206    }
4207}
4208
4209impl crate::HasNodeIndex for crate::StmtMatch {
4210    fn node_index(&self) -> &crate::AtomicNodeIndex {
4211        &self.node_index
4212    }
4213}
4214
4215impl crate::HasNodeIndex for crate::StmtRaise {
4216    fn node_index(&self) -> &crate::AtomicNodeIndex {
4217        &self.node_index
4218    }
4219}
4220
4221impl crate::HasNodeIndex for crate::StmtTry {
4222    fn node_index(&self) -> &crate::AtomicNodeIndex {
4223        &self.node_index
4224    }
4225}
4226
4227impl crate::HasNodeIndex for crate::StmtAssert {
4228    fn node_index(&self) -> &crate::AtomicNodeIndex {
4229        &self.node_index
4230    }
4231}
4232
4233impl crate::HasNodeIndex for crate::StmtImport {
4234    fn node_index(&self) -> &crate::AtomicNodeIndex {
4235        &self.node_index
4236    }
4237}
4238
4239impl crate::HasNodeIndex for crate::StmtImportFrom {
4240    fn node_index(&self) -> &crate::AtomicNodeIndex {
4241        &self.node_index
4242    }
4243}
4244
4245impl crate::HasNodeIndex for crate::StmtGlobal {
4246    fn node_index(&self) -> &crate::AtomicNodeIndex {
4247        &self.node_index
4248    }
4249}
4250
4251impl crate::HasNodeIndex for crate::StmtNonlocal {
4252    fn node_index(&self) -> &crate::AtomicNodeIndex {
4253        &self.node_index
4254    }
4255}
4256
4257impl crate::HasNodeIndex for crate::StmtExpr {
4258    fn node_index(&self) -> &crate::AtomicNodeIndex {
4259        &self.node_index
4260    }
4261}
4262
4263impl crate::HasNodeIndex for crate::StmtPass {
4264    fn node_index(&self) -> &crate::AtomicNodeIndex {
4265        &self.node_index
4266    }
4267}
4268
4269impl crate::HasNodeIndex for crate::StmtBreak {
4270    fn node_index(&self) -> &crate::AtomicNodeIndex {
4271        &self.node_index
4272    }
4273}
4274
4275impl crate::HasNodeIndex for crate::StmtContinue {
4276    fn node_index(&self) -> &crate::AtomicNodeIndex {
4277        &self.node_index
4278    }
4279}
4280
4281impl crate::HasNodeIndex for crate::StmtIpyEscapeCommand {
4282    fn node_index(&self) -> &crate::AtomicNodeIndex {
4283        &self.node_index
4284    }
4285}
4286
4287impl crate::HasNodeIndex for crate::ExprBoolOp {
4288    fn node_index(&self) -> &crate::AtomicNodeIndex {
4289        &self.node_index
4290    }
4291}
4292
4293impl crate::HasNodeIndex for crate::ExprNamed {
4294    fn node_index(&self) -> &crate::AtomicNodeIndex {
4295        &self.node_index
4296    }
4297}
4298
4299impl crate::HasNodeIndex for crate::ExprBinOp {
4300    fn node_index(&self) -> &crate::AtomicNodeIndex {
4301        &self.node_index
4302    }
4303}
4304
4305impl crate::HasNodeIndex for crate::ExprUnaryOp {
4306    fn node_index(&self) -> &crate::AtomicNodeIndex {
4307        &self.node_index
4308    }
4309}
4310
4311impl crate::HasNodeIndex for crate::ExprLambda {
4312    fn node_index(&self) -> &crate::AtomicNodeIndex {
4313        &self.node_index
4314    }
4315}
4316
4317impl crate::HasNodeIndex for crate::ExprIf {
4318    fn node_index(&self) -> &crate::AtomicNodeIndex {
4319        &self.node_index
4320    }
4321}
4322
4323impl crate::HasNodeIndex for crate::ExprDict {
4324    fn node_index(&self) -> &crate::AtomicNodeIndex {
4325        &self.node_index
4326    }
4327}
4328
4329impl crate::HasNodeIndex for crate::ExprSet {
4330    fn node_index(&self) -> &crate::AtomicNodeIndex {
4331        &self.node_index
4332    }
4333}
4334
4335impl crate::HasNodeIndex for crate::ExprListComp {
4336    fn node_index(&self) -> &crate::AtomicNodeIndex {
4337        &self.node_index
4338    }
4339}
4340
4341impl crate::HasNodeIndex for crate::ExprSetComp {
4342    fn node_index(&self) -> &crate::AtomicNodeIndex {
4343        &self.node_index
4344    }
4345}
4346
4347impl crate::HasNodeIndex for crate::ExprDictComp {
4348    fn node_index(&self) -> &crate::AtomicNodeIndex {
4349        &self.node_index
4350    }
4351}
4352
4353impl crate::HasNodeIndex for crate::ExprGenerator {
4354    fn node_index(&self) -> &crate::AtomicNodeIndex {
4355        &self.node_index
4356    }
4357}
4358
4359impl crate::HasNodeIndex for crate::ExprAwait {
4360    fn node_index(&self) -> &crate::AtomicNodeIndex {
4361        &self.node_index
4362    }
4363}
4364
4365impl crate::HasNodeIndex for crate::ExprYield {
4366    fn node_index(&self) -> &crate::AtomicNodeIndex {
4367        &self.node_index
4368    }
4369}
4370
4371impl crate::HasNodeIndex for crate::ExprYieldFrom {
4372    fn node_index(&self) -> &crate::AtomicNodeIndex {
4373        &self.node_index
4374    }
4375}
4376
4377impl crate::HasNodeIndex for crate::ExprCompare {
4378    fn node_index(&self) -> &crate::AtomicNodeIndex {
4379        &self.node_index
4380    }
4381}
4382
4383impl crate::HasNodeIndex for crate::ExprCall {
4384    fn node_index(&self) -> &crate::AtomicNodeIndex {
4385        &self.node_index
4386    }
4387}
4388
4389impl crate::HasNodeIndex for crate::ExprFString {
4390    fn node_index(&self) -> &crate::AtomicNodeIndex {
4391        &self.node_index
4392    }
4393}
4394
4395impl crate::HasNodeIndex for crate::ExprTString {
4396    fn node_index(&self) -> &crate::AtomicNodeIndex {
4397        &self.node_index
4398    }
4399}
4400
4401impl crate::HasNodeIndex for crate::ExprStringLiteral {
4402    fn node_index(&self) -> &crate::AtomicNodeIndex {
4403        &self.node_index
4404    }
4405}
4406
4407impl crate::HasNodeIndex for crate::ExprBytesLiteral {
4408    fn node_index(&self) -> &crate::AtomicNodeIndex {
4409        &self.node_index
4410    }
4411}
4412
4413impl crate::HasNodeIndex for crate::ExprNumberLiteral {
4414    fn node_index(&self) -> &crate::AtomicNodeIndex {
4415        &self.node_index
4416    }
4417}
4418
4419impl crate::HasNodeIndex for crate::ExprBooleanLiteral {
4420    fn node_index(&self) -> &crate::AtomicNodeIndex {
4421        &self.node_index
4422    }
4423}
4424
4425impl crate::HasNodeIndex for crate::ExprNoneLiteral {
4426    fn node_index(&self) -> &crate::AtomicNodeIndex {
4427        &self.node_index
4428    }
4429}
4430
4431impl crate::HasNodeIndex for crate::ExprEllipsisLiteral {
4432    fn node_index(&self) -> &crate::AtomicNodeIndex {
4433        &self.node_index
4434    }
4435}
4436
4437impl crate::HasNodeIndex for crate::ExprAttribute {
4438    fn node_index(&self) -> &crate::AtomicNodeIndex {
4439        &self.node_index
4440    }
4441}
4442
4443impl crate::HasNodeIndex for crate::ExprSubscript {
4444    fn node_index(&self) -> &crate::AtomicNodeIndex {
4445        &self.node_index
4446    }
4447}
4448
4449impl crate::HasNodeIndex for crate::ExprStarred {
4450    fn node_index(&self) -> &crate::AtomicNodeIndex {
4451        &self.node_index
4452    }
4453}
4454
4455impl crate::HasNodeIndex for crate::ExprName {
4456    fn node_index(&self) -> &crate::AtomicNodeIndex {
4457        &self.node_index
4458    }
4459}
4460
4461impl crate::HasNodeIndex for crate::ExprList {
4462    fn node_index(&self) -> &crate::AtomicNodeIndex {
4463        &self.node_index
4464    }
4465}
4466
4467impl crate::HasNodeIndex for crate::ExprTuple {
4468    fn node_index(&self) -> &crate::AtomicNodeIndex {
4469        &self.node_index
4470    }
4471}
4472
4473impl crate::HasNodeIndex for crate::ExprSlice {
4474    fn node_index(&self) -> &crate::AtomicNodeIndex {
4475        &self.node_index
4476    }
4477}
4478
4479impl crate::HasNodeIndex for crate::ExprIpyEscapeCommand {
4480    fn node_index(&self) -> &crate::AtomicNodeIndex {
4481        &self.node_index
4482    }
4483}
4484
4485impl crate::HasNodeIndex for crate::ExceptHandlerExceptHandler {
4486    fn node_index(&self) -> &crate::AtomicNodeIndex {
4487        &self.node_index
4488    }
4489}
4490
4491impl crate::HasNodeIndex for crate::InterpolatedElement {
4492    fn node_index(&self) -> &crate::AtomicNodeIndex {
4493        &self.node_index
4494    }
4495}
4496
4497impl crate::HasNodeIndex for crate::InterpolatedStringLiteralElement {
4498    fn node_index(&self) -> &crate::AtomicNodeIndex {
4499        &self.node_index
4500    }
4501}
4502
4503impl crate::HasNodeIndex for crate::PatternMatchValue {
4504    fn node_index(&self) -> &crate::AtomicNodeIndex {
4505        &self.node_index
4506    }
4507}
4508
4509impl crate::HasNodeIndex for crate::PatternMatchSingleton {
4510    fn node_index(&self) -> &crate::AtomicNodeIndex {
4511        &self.node_index
4512    }
4513}
4514
4515impl crate::HasNodeIndex for crate::PatternMatchSequence {
4516    fn node_index(&self) -> &crate::AtomicNodeIndex {
4517        &self.node_index
4518    }
4519}
4520
4521impl crate::HasNodeIndex for crate::PatternMatchMapping {
4522    fn node_index(&self) -> &crate::AtomicNodeIndex {
4523        &self.node_index
4524    }
4525}
4526
4527impl crate::HasNodeIndex for crate::PatternMatchClass {
4528    fn node_index(&self) -> &crate::AtomicNodeIndex {
4529        &self.node_index
4530    }
4531}
4532
4533impl crate::HasNodeIndex for crate::PatternMatchStar {
4534    fn node_index(&self) -> &crate::AtomicNodeIndex {
4535        &self.node_index
4536    }
4537}
4538
4539impl crate::HasNodeIndex for crate::PatternMatchAs {
4540    fn node_index(&self) -> &crate::AtomicNodeIndex {
4541        &self.node_index
4542    }
4543}
4544
4545impl crate::HasNodeIndex for crate::PatternMatchOr {
4546    fn node_index(&self) -> &crate::AtomicNodeIndex {
4547        &self.node_index
4548    }
4549}
4550
4551impl crate::HasNodeIndex for crate::TypeParamTypeVar {
4552    fn node_index(&self) -> &crate::AtomicNodeIndex {
4553        &self.node_index
4554    }
4555}
4556
4557impl crate::HasNodeIndex for crate::TypeParamTypeVarTuple {
4558    fn node_index(&self) -> &crate::AtomicNodeIndex {
4559        &self.node_index
4560    }
4561}
4562
4563impl crate::HasNodeIndex for crate::TypeParamParamSpec {
4564    fn node_index(&self) -> &crate::AtomicNodeIndex {
4565        &self.node_index
4566    }
4567}
4568
4569impl crate::HasNodeIndex for crate::InterpolatedStringFormatSpec {
4570    fn node_index(&self) -> &crate::AtomicNodeIndex {
4571        &self.node_index
4572    }
4573}
4574
4575impl crate::HasNodeIndex for crate::PatternArguments {
4576    fn node_index(&self) -> &crate::AtomicNodeIndex {
4577        &self.node_index
4578    }
4579}
4580
4581impl crate::HasNodeIndex for crate::PatternKeyword {
4582    fn node_index(&self) -> &crate::AtomicNodeIndex {
4583        &self.node_index
4584    }
4585}
4586
4587impl crate::HasNodeIndex for crate::Comprehension {
4588    fn node_index(&self) -> &crate::AtomicNodeIndex {
4589        &self.node_index
4590    }
4591}
4592
4593impl crate::HasNodeIndex for crate::Arguments {
4594    fn node_index(&self) -> &crate::AtomicNodeIndex {
4595        &self.node_index
4596    }
4597}
4598
4599impl crate::HasNodeIndex for crate::Parameters {
4600    fn node_index(&self) -> &crate::AtomicNodeIndex {
4601        &self.node_index
4602    }
4603}
4604
4605impl crate::HasNodeIndex for crate::Parameter {
4606    fn node_index(&self) -> &crate::AtomicNodeIndex {
4607        &self.node_index
4608    }
4609}
4610
4611impl crate::HasNodeIndex for crate::ParameterWithDefault {
4612    fn node_index(&self) -> &crate::AtomicNodeIndex {
4613        &self.node_index
4614    }
4615}
4616
4617impl crate::HasNodeIndex for crate::Keyword {
4618    fn node_index(&self) -> &crate::AtomicNodeIndex {
4619        &self.node_index
4620    }
4621}
4622
4623impl crate::HasNodeIndex for crate::Alias {
4624    fn node_index(&self) -> &crate::AtomicNodeIndex {
4625        &self.node_index
4626    }
4627}
4628
4629impl crate::HasNodeIndex for crate::WithItem {
4630    fn node_index(&self) -> &crate::AtomicNodeIndex {
4631        &self.node_index
4632    }
4633}
4634
4635impl crate::HasNodeIndex for crate::MatchCase {
4636    fn node_index(&self) -> &crate::AtomicNodeIndex {
4637        &self.node_index
4638    }
4639}
4640
4641impl crate::HasNodeIndex for crate::Decorator {
4642    fn node_index(&self) -> &crate::AtomicNodeIndex {
4643        &self.node_index
4644    }
4645}
4646
4647impl crate::HasNodeIndex for crate::ElifElseClause {
4648    fn node_index(&self) -> &crate::AtomicNodeIndex {
4649        &self.node_index
4650    }
4651}
4652
4653impl crate::HasNodeIndex for crate::TypeParams {
4654    fn node_index(&self) -> &crate::AtomicNodeIndex {
4655        &self.node_index
4656    }
4657}
4658
4659impl crate::HasNodeIndex for crate::FString {
4660    fn node_index(&self) -> &crate::AtomicNodeIndex {
4661        &self.node_index
4662    }
4663}
4664
4665impl crate::HasNodeIndex for crate::TString {
4666    fn node_index(&self) -> &crate::AtomicNodeIndex {
4667        &self.node_index
4668    }
4669}
4670
4671impl crate::HasNodeIndex for crate::StringLiteral {
4672    fn node_index(&self) -> &crate::AtomicNodeIndex {
4673        &self.node_index
4674    }
4675}
4676
4677impl crate::HasNodeIndex for crate::BytesLiteral {
4678    fn node_index(&self) -> &crate::AtomicNodeIndex {
4679        &self.node_index
4680    }
4681}
4682
4683impl crate::HasNodeIndex for crate::Identifier {
4684    fn node_index(&self) -> &crate::AtomicNodeIndex {
4685        &self.node_index
4686    }
4687}
4688
4689impl Mod {
4690    #[allow(unused)]
4691    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4692    where
4693        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4694    {
4695        match self {
4696            Mod::Module(node) => node.visit_source_order(visitor),
4697            Mod::Expression(node) => node.visit_source_order(visitor),
4698        }
4699    }
4700}
4701
4702impl Stmt {
4703    #[allow(unused)]
4704    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4705    where
4706        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4707    {
4708        match self {
4709            Stmt::FunctionDef(node) => node.visit_source_order(visitor),
4710            Stmt::ClassDef(node) => node.visit_source_order(visitor),
4711            Stmt::Return(node) => node.visit_source_order(visitor),
4712            Stmt::Delete(node) => node.visit_source_order(visitor),
4713            Stmt::TypeAlias(node) => node.visit_source_order(visitor),
4714            Stmt::Assign(node) => node.visit_source_order(visitor),
4715            Stmt::AugAssign(node) => node.visit_source_order(visitor),
4716            Stmt::AnnAssign(node) => node.visit_source_order(visitor),
4717            Stmt::For(node) => node.visit_source_order(visitor),
4718            Stmt::While(node) => node.visit_source_order(visitor),
4719            Stmt::If(node) => node.visit_source_order(visitor),
4720            Stmt::With(node) => node.visit_source_order(visitor),
4721            Stmt::Match(node) => node.visit_source_order(visitor),
4722            Stmt::Raise(node) => node.visit_source_order(visitor),
4723            Stmt::Try(node) => node.visit_source_order(visitor),
4724            Stmt::Assert(node) => node.visit_source_order(visitor),
4725            Stmt::Import(node) => node.visit_source_order(visitor),
4726            Stmt::ImportFrom(node) => node.visit_source_order(visitor),
4727            Stmt::Global(node) => node.visit_source_order(visitor),
4728            Stmt::Nonlocal(node) => node.visit_source_order(visitor),
4729            Stmt::Expr(node) => node.visit_source_order(visitor),
4730            Stmt::Pass(node) => node.visit_source_order(visitor),
4731            Stmt::Break(node) => node.visit_source_order(visitor),
4732            Stmt::Continue(node) => node.visit_source_order(visitor),
4733            Stmt::IpyEscapeCommand(node) => node.visit_source_order(visitor),
4734        }
4735    }
4736}
4737
4738impl Expr {
4739    #[allow(unused)]
4740    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4741    where
4742        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4743    {
4744        match self {
4745            Expr::BoolOp(node) => node.visit_source_order(visitor),
4746            Expr::Named(node) => node.visit_source_order(visitor),
4747            Expr::BinOp(node) => node.visit_source_order(visitor),
4748            Expr::UnaryOp(node) => node.visit_source_order(visitor),
4749            Expr::Lambda(node) => node.visit_source_order(visitor),
4750            Expr::If(node) => node.visit_source_order(visitor),
4751            Expr::Dict(node) => node.visit_source_order(visitor),
4752            Expr::Set(node) => node.visit_source_order(visitor),
4753            Expr::ListComp(node) => node.visit_source_order(visitor),
4754            Expr::SetComp(node) => node.visit_source_order(visitor),
4755            Expr::DictComp(node) => node.visit_source_order(visitor),
4756            Expr::Generator(node) => node.visit_source_order(visitor),
4757            Expr::Await(node) => node.visit_source_order(visitor),
4758            Expr::Yield(node) => node.visit_source_order(visitor),
4759            Expr::YieldFrom(node) => node.visit_source_order(visitor),
4760            Expr::Compare(node) => node.visit_source_order(visitor),
4761            Expr::Call(node) => node.visit_source_order(visitor),
4762            Expr::FString(node) => node.visit_source_order(visitor),
4763            Expr::TString(node) => node.visit_source_order(visitor),
4764            Expr::StringLiteral(node) => node.visit_source_order(visitor),
4765            Expr::BytesLiteral(node) => node.visit_source_order(visitor),
4766            Expr::NumberLiteral(node) => node.visit_source_order(visitor),
4767            Expr::BooleanLiteral(node) => node.visit_source_order(visitor),
4768            Expr::NoneLiteral(node) => node.visit_source_order(visitor),
4769            Expr::EllipsisLiteral(node) => node.visit_source_order(visitor),
4770            Expr::Attribute(node) => node.visit_source_order(visitor),
4771            Expr::Subscript(node) => node.visit_source_order(visitor),
4772            Expr::Starred(node) => node.visit_source_order(visitor),
4773            Expr::Name(node) => node.visit_source_order(visitor),
4774            Expr::List(node) => node.visit_source_order(visitor),
4775            Expr::Tuple(node) => node.visit_source_order(visitor),
4776            Expr::Slice(node) => node.visit_source_order(visitor),
4777            Expr::IpyEscapeCommand(node) => node.visit_source_order(visitor),
4778        }
4779    }
4780}
4781
4782impl ExceptHandler {
4783    #[allow(unused)]
4784    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4785    where
4786        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4787    {
4788        match self {
4789            ExceptHandler::ExceptHandler(node) => node.visit_source_order(visitor),
4790        }
4791    }
4792}
4793
4794impl InterpolatedStringElement {
4795    #[allow(unused)]
4796    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4797    where
4798        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4799    {
4800        match self {
4801            InterpolatedStringElement::Interpolation(node) => node.visit_source_order(visitor),
4802            InterpolatedStringElement::Literal(node) => node.visit_source_order(visitor),
4803        }
4804    }
4805}
4806
4807impl Pattern {
4808    #[allow(unused)]
4809    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4810    where
4811        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4812    {
4813        match self {
4814            Pattern::MatchValue(node) => node.visit_source_order(visitor),
4815            Pattern::MatchSingleton(node) => node.visit_source_order(visitor),
4816            Pattern::MatchSequence(node) => node.visit_source_order(visitor),
4817            Pattern::MatchMapping(node) => node.visit_source_order(visitor),
4818            Pattern::MatchClass(node) => node.visit_source_order(visitor),
4819            Pattern::MatchStar(node) => node.visit_source_order(visitor),
4820            Pattern::MatchAs(node) => node.visit_source_order(visitor),
4821            Pattern::MatchOr(node) => node.visit_source_order(visitor),
4822        }
4823    }
4824}
4825
4826impl TypeParam {
4827    #[allow(unused)]
4828    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
4829    where
4830        V: crate::visitor::source_order::SourceOrderVisitor<'a> + ?Sized,
4831    {
4832        match self {
4833            TypeParam::TypeVar(node) => node.visit_source_order(visitor),
4834            TypeParam::TypeVarTuple(node) => node.visit_source_order(visitor),
4835            TypeParam::ParamSpec(node) => node.visit_source_order(visitor),
4836        }
4837    }
4838}
4839
4840/// See also [mod](https://docs.python.org/3/library/ast.html#ast.mod)
4841#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
4842#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
4843pub enum ModRef<'a> {
4844    Module(&'a crate::ModModule),
4845    Expression(&'a crate::ModExpression),
4846}
4847
4848impl<'a> From<&'a Mod> for ModRef<'a> {
4849    fn from(node: &'a Mod) -> Self {
4850        match node {
4851            Mod::Module(node) => ModRef::Module(node),
4852            Mod::Expression(node) => ModRef::Expression(node),
4853        }
4854    }
4855}
4856
4857impl<'a> From<&'a crate::ModModule> for ModRef<'a> {
4858    fn from(node: &'a crate::ModModule) -> Self {
4859        Self::Module(node)
4860    }
4861}
4862
4863impl<'a> From<&'a crate::ModExpression> for ModRef<'a> {
4864    fn from(node: &'a crate::ModExpression) -> Self {
4865        Self::Expression(node)
4866    }
4867}
4868
4869impl ruff_text_size::Ranged for ModRef<'_> {
4870    fn range(&self) -> ruff_text_size::TextRange {
4871        match self {
4872            Self::Module(node) => node.range(),
4873            Self::Expression(node) => node.range(),
4874        }
4875    }
4876}
4877
4878impl crate::HasNodeIndex for ModRef<'_> {
4879    fn node_index(&self) -> &crate::AtomicNodeIndex {
4880        match self {
4881            Self::Module(node) => node.node_index(),
4882            Self::Expression(node) => node.node_index(),
4883        }
4884    }
4885}
4886
4887/// See also [stmt](https://docs.python.org/3/library/ast.html#ast.stmt)
4888#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
4889#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
4890pub enum StmtRef<'a> {
4891    #[is(name = "function_def_stmt")]
4892    FunctionDef(&'a crate::StmtFunctionDef),
4893    #[is(name = "class_def_stmt")]
4894    ClassDef(&'a crate::StmtClassDef),
4895    #[is(name = "return_stmt")]
4896    Return(&'a crate::StmtReturn),
4897    #[is(name = "delete_stmt")]
4898    Delete(&'a crate::StmtDelete),
4899    #[is(name = "type_alias_stmt")]
4900    TypeAlias(&'a crate::StmtTypeAlias),
4901    #[is(name = "assign_stmt")]
4902    Assign(&'a crate::StmtAssign),
4903    #[is(name = "aug_assign_stmt")]
4904    AugAssign(&'a crate::StmtAugAssign),
4905    #[is(name = "ann_assign_stmt")]
4906    AnnAssign(&'a crate::StmtAnnAssign),
4907    #[is(name = "for_stmt")]
4908    For(&'a crate::StmtFor),
4909    #[is(name = "while_stmt")]
4910    While(&'a crate::StmtWhile),
4911    #[is(name = "if_stmt")]
4912    If(&'a crate::StmtIf),
4913    #[is(name = "with_stmt")]
4914    With(&'a crate::StmtWith),
4915    #[is(name = "match_stmt")]
4916    Match(&'a crate::StmtMatch),
4917    #[is(name = "raise_stmt")]
4918    Raise(&'a crate::StmtRaise),
4919    #[is(name = "try_stmt")]
4920    Try(&'a crate::StmtTry),
4921    #[is(name = "assert_stmt")]
4922    Assert(&'a crate::StmtAssert),
4923    #[is(name = "import_stmt")]
4924    Import(&'a crate::StmtImport),
4925    #[is(name = "import_from_stmt")]
4926    ImportFrom(&'a crate::StmtImportFrom),
4927    #[is(name = "global_stmt")]
4928    Global(&'a crate::StmtGlobal),
4929    #[is(name = "nonlocal_stmt")]
4930    Nonlocal(&'a crate::StmtNonlocal),
4931    #[is(name = "expr_stmt")]
4932    Expr(&'a crate::StmtExpr),
4933    #[is(name = "pass_stmt")]
4934    Pass(&'a crate::StmtPass),
4935    #[is(name = "break_stmt")]
4936    Break(&'a crate::StmtBreak),
4937    #[is(name = "continue_stmt")]
4938    Continue(&'a crate::StmtContinue),
4939    #[is(name = "ipy_escape_command_stmt")]
4940    IpyEscapeCommand(&'a crate::StmtIpyEscapeCommand),
4941}
4942
4943impl<'a> From<&'a Stmt> for StmtRef<'a> {
4944    fn from(node: &'a Stmt) -> Self {
4945        match node {
4946            Stmt::FunctionDef(node) => StmtRef::FunctionDef(node),
4947            Stmt::ClassDef(node) => StmtRef::ClassDef(node),
4948            Stmt::Return(node) => StmtRef::Return(node),
4949            Stmt::Delete(node) => StmtRef::Delete(node),
4950            Stmt::TypeAlias(node) => StmtRef::TypeAlias(node),
4951            Stmt::Assign(node) => StmtRef::Assign(node),
4952            Stmt::AugAssign(node) => StmtRef::AugAssign(node),
4953            Stmt::AnnAssign(node) => StmtRef::AnnAssign(node),
4954            Stmt::For(node) => StmtRef::For(node),
4955            Stmt::While(node) => StmtRef::While(node),
4956            Stmt::If(node) => StmtRef::If(node),
4957            Stmt::With(node) => StmtRef::With(node),
4958            Stmt::Match(node) => StmtRef::Match(node),
4959            Stmt::Raise(node) => StmtRef::Raise(node),
4960            Stmt::Try(node) => StmtRef::Try(node),
4961            Stmt::Assert(node) => StmtRef::Assert(node),
4962            Stmt::Import(node) => StmtRef::Import(node),
4963            Stmt::ImportFrom(node) => StmtRef::ImportFrom(node),
4964            Stmt::Global(node) => StmtRef::Global(node),
4965            Stmt::Nonlocal(node) => StmtRef::Nonlocal(node),
4966            Stmt::Expr(node) => StmtRef::Expr(node),
4967            Stmt::Pass(node) => StmtRef::Pass(node),
4968            Stmt::Break(node) => StmtRef::Break(node),
4969            Stmt::Continue(node) => StmtRef::Continue(node),
4970            Stmt::IpyEscapeCommand(node) => StmtRef::IpyEscapeCommand(node),
4971        }
4972    }
4973}
4974
4975impl<'a> From<&'a crate::StmtFunctionDef> for StmtRef<'a> {
4976    fn from(node: &'a crate::StmtFunctionDef) -> Self {
4977        Self::FunctionDef(node)
4978    }
4979}
4980
4981impl<'a> From<&'a crate::StmtClassDef> for StmtRef<'a> {
4982    fn from(node: &'a crate::StmtClassDef) -> Self {
4983        Self::ClassDef(node)
4984    }
4985}
4986
4987impl<'a> From<&'a crate::StmtReturn> for StmtRef<'a> {
4988    fn from(node: &'a crate::StmtReturn) -> Self {
4989        Self::Return(node)
4990    }
4991}
4992
4993impl<'a> From<&'a crate::StmtDelete> for StmtRef<'a> {
4994    fn from(node: &'a crate::StmtDelete) -> Self {
4995        Self::Delete(node)
4996    }
4997}
4998
4999impl<'a> From<&'a crate::StmtTypeAlias> for StmtRef<'a> {
5000    fn from(node: &'a crate::StmtTypeAlias) -> Self {
5001        Self::TypeAlias(node)
5002    }
5003}
5004
5005impl<'a> From<&'a crate::StmtAssign> for StmtRef<'a> {
5006    fn from(node: &'a crate::StmtAssign) -> Self {
5007        Self::Assign(node)
5008    }
5009}
5010
5011impl<'a> From<&'a crate::StmtAugAssign> for StmtRef<'a> {
5012    fn from(node: &'a crate::StmtAugAssign) -> Self {
5013        Self::AugAssign(node)
5014    }
5015}
5016
5017impl<'a> From<&'a crate::StmtAnnAssign> for StmtRef<'a> {
5018    fn from(node: &'a crate::StmtAnnAssign) -> Self {
5019        Self::AnnAssign(node)
5020    }
5021}
5022
5023impl<'a> From<&'a crate::StmtFor> for StmtRef<'a> {
5024    fn from(node: &'a crate::StmtFor) -> Self {
5025        Self::For(node)
5026    }
5027}
5028
5029impl<'a> From<&'a crate::StmtWhile> for StmtRef<'a> {
5030    fn from(node: &'a crate::StmtWhile) -> Self {
5031        Self::While(node)
5032    }
5033}
5034
5035impl<'a> From<&'a crate::StmtIf> for StmtRef<'a> {
5036    fn from(node: &'a crate::StmtIf) -> Self {
5037        Self::If(node)
5038    }
5039}
5040
5041impl<'a> From<&'a crate::StmtWith> for StmtRef<'a> {
5042    fn from(node: &'a crate::StmtWith) -> Self {
5043        Self::With(node)
5044    }
5045}
5046
5047impl<'a> From<&'a crate::StmtMatch> for StmtRef<'a> {
5048    fn from(node: &'a crate::StmtMatch) -> Self {
5049        Self::Match(node)
5050    }
5051}
5052
5053impl<'a> From<&'a crate::StmtRaise> for StmtRef<'a> {
5054    fn from(node: &'a crate::StmtRaise) -> Self {
5055        Self::Raise(node)
5056    }
5057}
5058
5059impl<'a> From<&'a crate::StmtTry> for StmtRef<'a> {
5060    fn from(node: &'a crate::StmtTry) -> Self {
5061        Self::Try(node)
5062    }
5063}
5064
5065impl<'a> From<&'a crate::StmtAssert> for StmtRef<'a> {
5066    fn from(node: &'a crate::StmtAssert) -> Self {
5067        Self::Assert(node)
5068    }
5069}
5070
5071impl<'a> From<&'a crate::StmtImport> for StmtRef<'a> {
5072    fn from(node: &'a crate::StmtImport) -> Self {
5073        Self::Import(node)
5074    }
5075}
5076
5077impl<'a> From<&'a crate::StmtImportFrom> for StmtRef<'a> {
5078    fn from(node: &'a crate::StmtImportFrom) -> Self {
5079        Self::ImportFrom(node)
5080    }
5081}
5082
5083impl<'a> From<&'a crate::StmtGlobal> for StmtRef<'a> {
5084    fn from(node: &'a crate::StmtGlobal) -> Self {
5085        Self::Global(node)
5086    }
5087}
5088
5089impl<'a> From<&'a crate::StmtNonlocal> for StmtRef<'a> {
5090    fn from(node: &'a crate::StmtNonlocal) -> Self {
5091        Self::Nonlocal(node)
5092    }
5093}
5094
5095impl<'a> From<&'a crate::StmtExpr> for StmtRef<'a> {
5096    fn from(node: &'a crate::StmtExpr) -> Self {
5097        Self::Expr(node)
5098    }
5099}
5100
5101impl<'a> From<&'a crate::StmtPass> for StmtRef<'a> {
5102    fn from(node: &'a crate::StmtPass) -> Self {
5103        Self::Pass(node)
5104    }
5105}
5106
5107impl<'a> From<&'a crate::StmtBreak> for StmtRef<'a> {
5108    fn from(node: &'a crate::StmtBreak) -> Self {
5109        Self::Break(node)
5110    }
5111}
5112
5113impl<'a> From<&'a crate::StmtContinue> for StmtRef<'a> {
5114    fn from(node: &'a crate::StmtContinue) -> Self {
5115        Self::Continue(node)
5116    }
5117}
5118
5119impl<'a> From<&'a crate::StmtIpyEscapeCommand> for StmtRef<'a> {
5120    fn from(node: &'a crate::StmtIpyEscapeCommand) -> Self {
5121        Self::IpyEscapeCommand(node)
5122    }
5123}
5124
5125impl ruff_text_size::Ranged for StmtRef<'_> {
5126    fn range(&self) -> ruff_text_size::TextRange {
5127        match self {
5128            Self::FunctionDef(node) => node.range(),
5129            Self::ClassDef(node) => node.range(),
5130            Self::Return(node) => node.range(),
5131            Self::Delete(node) => node.range(),
5132            Self::TypeAlias(node) => node.range(),
5133            Self::Assign(node) => node.range(),
5134            Self::AugAssign(node) => node.range(),
5135            Self::AnnAssign(node) => node.range(),
5136            Self::For(node) => node.range(),
5137            Self::While(node) => node.range(),
5138            Self::If(node) => node.range(),
5139            Self::With(node) => node.range(),
5140            Self::Match(node) => node.range(),
5141            Self::Raise(node) => node.range(),
5142            Self::Try(node) => node.range(),
5143            Self::Assert(node) => node.range(),
5144            Self::Import(node) => node.range(),
5145            Self::ImportFrom(node) => node.range(),
5146            Self::Global(node) => node.range(),
5147            Self::Nonlocal(node) => node.range(),
5148            Self::Expr(node) => node.range(),
5149            Self::Pass(node) => node.range(),
5150            Self::Break(node) => node.range(),
5151            Self::Continue(node) => node.range(),
5152            Self::IpyEscapeCommand(node) => node.range(),
5153        }
5154    }
5155}
5156
5157impl crate::HasNodeIndex for StmtRef<'_> {
5158    fn node_index(&self) -> &crate::AtomicNodeIndex {
5159        match self {
5160            Self::FunctionDef(node) => node.node_index(),
5161            Self::ClassDef(node) => node.node_index(),
5162            Self::Return(node) => node.node_index(),
5163            Self::Delete(node) => node.node_index(),
5164            Self::TypeAlias(node) => node.node_index(),
5165            Self::Assign(node) => node.node_index(),
5166            Self::AugAssign(node) => node.node_index(),
5167            Self::AnnAssign(node) => node.node_index(),
5168            Self::For(node) => node.node_index(),
5169            Self::While(node) => node.node_index(),
5170            Self::If(node) => node.node_index(),
5171            Self::With(node) => node.node_index(),
5172            Self::Match(node) => node.node_index(),
5173            Self::Raise(node) => node.node_index(),
5174            Self::Try(node) => node.node_index(),
5175            Self::Assert(node) => node.node_index(),
5176            Self::Import(node) => node.node_index(),
5177            Self::ImportFrom(node) => node.node_index(),
5178            Self::Global(node) => node.node_index(),
5179            Self::Nonlocal(node) => node.node_index(),
5180            Self::Expr(node) => node.node_index(),
5181            Self::Pass(node) => node.node_index(),
5182            Self::Break(node) => node.node_index(),
5183            Self::Continue(node) => node.node_index(),
5184            Self::IpyEscapeCommand(node) => node.node_index(),
5185        }
5186    }
5187}
5188
5189/// See also [expr](https://docs.python.org/3/library/ast.html#ast.expr)
5190#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5191#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5192pub enum ExprRef<'a> {
5193    #[is(name = "bool_op_expr")]
5194    BoolOp(&'a crate::ExprBoolOp),
5195    #[is(name = "named_expr")]
5196    Named(&'a crate::ExprNamed),
5197    #[is(name = "bin_op_expr")]
5198    BinOp(&'a crate::ExprBinOp),
5199    #[is(name = "unary_op_expr")]
5200    UnaryOp(&'a crate::ExprUnaryOp),
5201    #[is(name = "lambda_expr")]
5202    Lambda(&'a crate::ExprLambda),
5203    #[is(name = "if_expr")]
5204    If(&'a crate::ExprIf),
5205    #[is(name = "dict_expr")]
5206    Dict(&'a crate::ExprDict),
5207    #[is(name = "set_expr")]
5208    Set(&'a crate::ExprSet),
5209    #[is(name = "list_comp_expr")]
5210    ListComp(&'a crate::ExprListComp),
5211    #[is(name = "set_comp_expr")]
5212    SetComp(&'a crate::ExprSetComp),
5213    #[is(name = "dict_comp_expr")]
5214    DictComp(&'a crate::ExprDictComp),
5215    #[is(name = "generator_expr")]
5216    Generator(&'a crate::ExprGenerator),
5217    #[is(name = "await_expr")]
5218    Await(&'a crate::ExprAwait),
5219    #[is(name = "yield_expr")]
5220    Yield(&'a crate::ExprYield),
5221    #[is(name = "yield_from_expr")]
5222    YieldFrom(&'a crate::ExprYieldFrom),
5223    #[is(name = "compare_expr")]
5224    Compare(&'a crate::ExprCompare),
5225    #[is(name = "call_expr")]
5226    Call(&'a crate::ExprCall),
5227    #[is(name = "f_string_expr")]
5228    FString(&'a crate::ExprFString),
5229    #[is(name = "t_string_expr")]
5230    TString(&'a crate::ExprTString),
5231    #[is(name = "string_literal_expr")]
5232    StringLiteral(&'a crate::ExprStringLiteral),
5233    #[is(name = "bytes_literal_expr")]
5234    BytesLiteral(&'a crate::ExprBytesLiteral),
5235    #[is(name = "number_literal_expr")]
5236    NumberLiteral(&'a crate::ExprNumberLiteral),
5237    #[is(name = "boolean_literal_expr")]
5238    BooleanLiteral(&'a crate::ExprBooleanLiteral),
5239    #[is(name = "none_literal_expr")]
5240    NoneLiteral(&'a crate::ExprNoneLiteral),
5241    #[is(name = "ellipsis_literal_expr")]
5242    EllipsisLiteral(&'a crate::ExprEllipsisLiteral),
5243    #[is(name = "attribute_expr")]
5244    Attribute(&'a crate::ExprAttribute),
5245    #[is(name = "subscript_expr")]
5246    Subscript(&'a crate::ExprSubscript),
5247    #[is(name = "starred_expr")]
5248    Starred(&'a crate::ExprStarred),
5249    #[is(name = "name_expr")]
5250    Name(&'a crate::ExprName),
5251    #[is(name = "list_expr")]
5252    List(&'a crate::ExprList),
5253    #[is(name = "tuple_expr")]
5254    Tuple(&'a crate::ExprTuple),
5255    #[is(name = "slice_expr")]
5256    Slice(&'a crate::ExprSlice),
5257    #[is(name = "ipy_escape_command_expr")]
5258    IpyEscapeCommand(&'a crate::ExprIpyEscapeCommand),
5259}
5260
5261impl<'a> From<&'a Expr> for ExprRef<'a> {
5262    fn from(node: &'a Expr) -> Self {
5263        match node {
5264            Expr::BoolOp(node) => ExprRef::BoolOp(node),
5265            Expr::Named(node) => ExprRef::Named(node),
5266            Expr::BinOp(node) => ExprRef::BinOp(node),
5267            Expr::UnaryOp(node) => ExprRef::UnaryOp(node),
5268            Expr::Lambda(node) => ExprRef::Lambda(node),
5269            Expr::If(node) => ExprRef::If(node),
5270            Expr::Dict(node) => ExprRef::Dict(node),
5271            Expr::Set(node) => ExprRef::Set(node),
5272            Expr::ListComp(node) => ExprRef::ListComp(node),
5273            Expr::SetComp(node) => ExprRef::SetComp(node),
5274            Expr::DictComp(node) => ExprRef::DictComp(node),
5275            Expr::Generator(node) => ExprRef::Generator(node),
5276            Expr::Await(node) => ExprRef::Await(node),
5277            Expr::Yield(node) => ExprRef::Yield(node),
5278            Expr::YieldFrom(node) => ExprRef::YieldFrom(node),
5279            Expr::Compare(node) => ExprRef::Compare(node),
5280            Expr::Call(node) => ExprRef::Call(node),
5281            Expr::FString(node) => ExprRef::FString(node),
5282            Expr::TString(node) => ExprRef::TString(node),
5283            Expr::StringLiteral(node) => ExprRef::StringLiteral(node),
5284            Expr::BytesLiteral(node) => ExprRef::BytesLiteral(node),
5285            Expr::NumberLiteral(node) => ExprRef::NumberLiteral(node),
5286            Expr::BooleanLiteral(node) => ExprRef::BooleanLiteral(node),
5287            Expr::NoneLiteral(node) => ExprRef::NoneLiteral(node),
5288            Expr::EllipsisLiteral(node) => ExprRef::EllipsisLiteral(node),
5289            Expr::Attribute(node) => ExprRef::Attribute(node),
5290            Expr::Subscript(node) => ExprRef::Subscript(node),
5291            Expr::Starred(node) => ExprRef::Starred(node),
5292            Expr::Name(node) => ExprRef::Name(node),
5293            Expr::List(node) => ExprRef::List(node),
5294            Expr::Tuple(node) => ExprRef::Tuple(node),
5295            Expr::Slice(node) => ExprRef::Slice(node),
5296            Expr::IpyEscapeCommand(node) => ExprRef::IpyEscapeCommand(node),
5297        }
5298    }
5299}
5300
5301impl<'a> From<&'a crate::ExprBoolOp> for ExprRef<'a> {
5302    fn from(node: &'a crate::ExprBoolOp) -> Self {
5303        Self::BoolOp(node)
5304    }
5305}
5306
5307impl<'a> From<&'a crate::ExprNamed> for ExprRef<'a> {
5308    fn from(node: &'a crate::ExprNamed) -> Self {
5309        Self::Named(node)
5310    }
5311}
5312
5313impl<'a> From<&'a crate::ExprBinOp> for ExprRef<'a> {
5314    fn from(node: &'a crate::ExprBinOp) -> Self {
5315        Self::BinOp(node)
5316    }
5317}
5318
5319impl<'a> From<&'a crate::ExprUnaryOp> for ExprRef<'a> {
5320    fn from(node: &'a crate::ExprUnaryOp) -> Self {
5321        Self::UnaryOp(node)
5322    }
5323}
5324
5325impl<'a> From<&'a crate::ExprLambda> for ExprRef<'a> {
5326    fn from(node: &'a crate::ExprLambda) -> Self {
5327        Self::Lambda(node)
5328    }
5329}
5330
5331impl<'a> From<&'a crate::ExprIf> for ExprRef<'a> {
5332    fn from(node: &'a crate::ExprIf) -> Self {
5333        Self::If(node)
5334    }
5335}
5336
5337impl<'a> From<&'a crate::ExprDict> for ExprRef<'a> {
5338    fn from(node: &'a crate::ExprDict) -> Self {
5339        Self::Dict(node)
5340    }
5341}
5342
5343impl<'a> From<&'a crate::ExprSet> for ExprRef<'a> {
5344    fn from(node: &'a crate::ExprSet) -> Self {
5345        Self::Set(node)
5346    }
5347}
5348
5349impl<'a> From<&'a crate::ExprListComp> for ExprRef<'a> {
5350    fn from(node: &'a crate::ExprListComp) -> Self {
5351        Self::ListComp(node)
5352    }
5353}
5354
5355impl<'a> From<&'a crate::ExprSetComp> for ExprRef<'a> {
5356    fn from(node: &'a crate::ExprSetComp) -> Self {
5357        Self::SetComp(node)
5358    }
5359}
5360
5361impl<'a> From<&'a crate::ExprDictComp> for ExprRef<'a> {
5362    fn from(node: &'a crate::ExprDictComp) -> Self {
5363        Self::DictComp(node)
5364    }
5365}
5366
5367impl<'a> From<&'a crate::ExprGenerator> for ExprRef<'a> {
5368    fn from(node: &'a crate::ExprGenerator) -> Self {
5369        Self::Generator(node)
5370    }
5371}
5372
5373impl<'a> From<&'a crate::ExprAwait> for ExprRef<'a> {
5374    fn from(node: &'a crate::ExprAwait) -> Self {
5375        Self::Await(node)
5376    }
5377}
5378
5379impl<'a> From<&'a crate::ExprYield> for ExprRef<'a> {
5380    fn from(node: &'a crate::ExprYield) -> Self {
5381        Self::Yield(node)
5382    }
5383}
5384
5385impl<'a> From<&'a crate::ExprYieldFrom> for ExprRef<'a> {
5386    fn from(node: &'a crate::ExprYieldFrom) -> Self {
5387        Self::YieldFrom(node)
5388    }
5389}
5390
5391impl<'a> From<&'a crate::ExprCompare> for ExprRef<'a> {
5392    fn from(node: &'a crate::ExprCompare) -> Self {
5393        Self::Compare(node)
5394    }
5395}
5396
5397impl<'a> From<&'a crate::ExprCall> for ExprRef<'a> {
5398    fn from(node: &'a crate::ExprCall) -> Self {
5399        Self::Call(node)
5400    }
5401}
5402
5403impl<'a> From<&'a crate::ExprFString> for ExprRef<'a> {
5404    fn from(node: &'a crate::ExprFString) -> Self {
5405        Self::FString(node)
5406    }
5407}
5408
5409impl<'a> From<&'a crate::ExprTString> for ExprRef<'a> {
5410    fn from(node: &'a crate::ExprTString) -> Self {
5411        Self::TString(node)
5412    }
5413}
5414
5415impl<'a> From<&'a crate::ExprStringLiteral> for ExprRef<'a> {
5416    fn from(node: &'a crate::ExprStringLiteral) -> Self {
5417        Self::StringLiteral(node)
5418    }
5419}
5420
5421impl<'a> From<&'a crate::ExprBytesLiteral> for ExprRef<'a> {
5422    fn from(node: &'a crate::ExprBytesLiteral) -> Self {
5423        Self::BytesLiteral(node)
5424    }
5425}
5426
5427impl<'a> From<&'a crate::ExprNumberLiteral> for ExprRef<'a> {
5428    fn from(node: &'a crate::ExprNumberLiteral) -> Self {
5429        Self::NumberLiteral(node)
5430    }
5431}
5432
5433impl<'a> From<&'a crate::ExprBooleanLiteral> for ExprRef<'a> {
5434    fn from(node: &'a crate::ExprBooleanLiteral) -> Self {
5435        Self::BooleanLiteral(node)
5436    }
5437}
5438
5439impl<'a> From<&'a crate::ExprNoneLiteral> for ExprRef<'a> {
5440    fn from(node: &'a crate::ExprNoneLiteral) -> Self {
5441        Self::NoneLiteral(node)
5442    }
5443}
5444
5445impl<'a> From<&'a crate::ExprEllipsisLiteral> for ExprRef<'a> {
5446    fn from(node: &'a crate::ExprEllipsisLiteral) -> Self {
5447        Self::EllipsisLiteral(node)
5448    }
5449}
5450
5451impl<'a> From<&'a crate::ExprAttribute> for ExprRef<'a> {
5452    fn from(node: &'a crate::ExprAttribute) -> Self {
5453        Self::Attribute(node)
5454    }
5455}
5456
5457impl<'a> From<&'a crate::ExprSubscript> for ExprRef<'a> {
5458    fn from(node: &'a crate::ExprSubscript) -> Self {
5459        Self::Subscript(node)
5460    }
5461}
5462
5463impl<'a> From<&'a crate::ExprStarred> for ExprRef<'a> {
5464    fn from(node: &'a crate::ExprStarred) -> Self {
5465        Self::Starred(node)
5466    }
5467}
5468
5469impl<'a> From<&'a crate::ExprName> for ExprRef<'a> {
5470    fn from(node: &'a crate::ExprName) -> Self {
5471        Self::Name(node)
5472    }
5473}
5474
5475impl<'a> From<&'a crate::ExprList> for ExprRef<'a> {
5476    fn from(node: &'a crate::ExprList) -> Self {
5477        Self::List(node)
5478    }
5479}
5480
5481impl<'a> From<&'a crate::ExprTuple> for ExprRef<'a> {
5482    fn from(node: &'a crate::ExprTuple) -> Self {
5483        Self::Tuple(node)
5484    }
5485}
5486
5487impl<'a> From<&'a crate::ExprSlice> for ExprRef<'a> {
5488    fn from(node: &'a crate::ExprSlice) -> Self {
5489        Self::Slice(node)
5490    }
5491}
5492
5493impl<'a> From<&'a crate::ExprIpyEscapeCommand> for ExprRef<'a> {
5494    fn from(node: &'a crate::ExprIpyEscapeCommand) -> Self {
5495        Self::IpyEscapeCommand(node)
5496    }
5497}
5498
5499impl ruff_text_size::Ranged for ExprRef<'_> {
5500    fn range(&self) -> ruff_text_size::TextRange {
5501        match self {
5502            Self::BoolOp(node) => node.range(),
5503            Self::Named(node) => node.range(),
5504            Self::BinOp(node) => node.range(),
5505            Self::UnaryOp(node) => node.range(),
5506            Self::Lambda(node) => node.range(),
5507            Self::If(node) => node.range(),
5508            Self::Dict(node) => node.range(),
5509            Self::Set(node) => node.range(),
5510            Self::ListComp(node) => node.range(),
5511            Self::SetComp(node) => node.range(),
5512            Self::DictComp(node) => node.range(),
5513            Self::Generator(node) => node.range(),
5514            Self::Await(node) => node.range(),
5515            Self::Yield(node) => node.range(),
5516            Self::YieldFrom(node) => node.range(),
5517            Self::Compare(node) => node.range(),
5518            Self::Call(node) => node.range(),
5519            Self::FString(node) => node.range(),
5520            Self::TString(node) => node.range(),
5521            Self::StringLiteral(node) => node.range(),
5522            Self::BytesLiteral(node) => node.range(),
5523            Self::NumberLiteral(node) => node.range(),
5524            Self::BooleanLiteral(node) => node.range(),
5525            Self::NoneLiteral(node) => node.range(),
5526            Self::EllipsisLiteral(node) => node.range(),
5527            Self::Attribute(node) => node.range(),
5528            Self::Subscript(node) => node.range(),
5529            Self::Starred(node) => node.range(),
5530            Self::Name(node) => node.range(),
5531            Self::List(node) => node.range(),
5532            Self::Tuple(node) => node.range(),
5533            Self::Slice(node) => node.range(),
5534            Self::IpyEscapeCommand(node) => node.range(),
5535        }
5536    }
5537}
5538
5539impl crate::HasNodeIndex for ExprRef<'_> {
5540    fn node_index(&self) -> &crate::AtomicNodeIndex {
5541        match self {
5542            Self::BoolOp(node) => node.node_index(),
5543            Self::Named(node) => node.node_index(),
5544            Self::BinOp(node) => node.node_index(),
5545            Self::UnaryOp(node) => node.node_index(),
5546            Self::Lambda(node) => node.node_index(),
5547            Self::If(node) => node.node_index(),
5548            Self::Dict(node) => node.node_index(),
5549            Self::Set(node) => node.node_index(),
5550            Self::ListComp(node) => node.node_index(),
5551            Self::SetComp(node) => node.node_index(),
5552            Self::DictComp(node) => node.node_index(),
5553            Self::Generator(node) => node.node_index(),
5554            Self::Await(node) => node.node_index(),
5555            Self::Yield(node) => node.node_index(),
5556            Self::YieldFrom(node) => node.node_index(),
5557            Self::Compare(node) => node.node_index(),
5558            Self::Call(node) => node.node_index(),
5559            Self::FString(node) => node.node_index(),
5560            Self::TString(node) => node.node_index(),
5561            Self::StringLiteral(node) => node.node_index(),
5562            Self::BytesLiteral(node) => node.node_index(),
5563            Self::NumberLiteral(node) => node.node_index(),
5564            Self::BooleanLiteral(node) => node.node_index(),
5565            Self::NoneLiteral(node) => node.node_index(),
5566            Self::EllipsisLiteral(node) => node.node_index(),
5567            Self::Attribute(node) => node.node_index(),
5568            Self::Subscript(node) => node.node_index(),
5569            Self::Starred(node) => node.node_index(),
5570            Self::Name(node) => node.node_index(),
5571            Self::List(node) => node.node_index(),
5572            Self::Tuple(node) => node.node_index(),
5573            Self::Slice(node) => node.node_index(),
5574            Self::IpyEscapeCommand(node) => node.node_index(),
5575        }
5576    }
5577}
5578
5579/// See also [excepthandler](https://docs.python.org/3/library/ast.html#ast.excepthandler)
5580#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5581#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5582pub enum ExceptHandlerRef<'a> {
5583    ExceptHandler(&'a crate::ExceptHandlerExceptHandler),
5584}
5585
5586impl<'a> From<&'a ExceptHandler> for ExceptHandlerRef<'a> {
5587    fn from(node: &'a ExceptHandler) -> Self {
5588        match node {
5589            ExceptHandler::ExceptHandler(node) => ExceptHandlerRef::ExceptHandler(node),
5590        }
5591    }
5592}
5593
5594impl<'a> From<&'a crate::ExceptHandlerExceptHandler> for ExceptHandlerRef<'a> {
5595    fn from(node: &'a crate::ExceptHandlerExceptHandler) -> Self {
5596        Self::ExceptHandler(node)
5597    }
5598}
5599
5600impl ruff_text_size::Ranged for ExceptHandlerRef<'_> {
5601    fn range(&self) -> ruff_text_size::TextRange {
5602        match self {
5603            Self::ExceptHandler(node) => node.range(),
5604        }
5605    }
5606}
5607
5608impl crate::HasNodeIndex for ExceptHandlerRef<'_> {
5609    fn node_index(&self) -> &crate::AtomicNodeIndex {
5610        match self {
5611            Self::ExceptHandler(node) => node.node_index(),
5612        }
5613    }
5614}
5615
5616#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5617#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5618pub enum InterpolatedStringElementRef<'a> {
5619    Interpolation(&'a crate::InterpolatedElement),
5620    Literal(&'a crate::InterpolatedStringLiteralElement),
5621}
5622
5623impl<'a> From<&'a InterpolatedStringElement> for InterpolatedStringElementRef<'a> {
5624    fn from(node: &'a InterpolatedStringElement) -> Self {
5625        match node {
5626            InterpolatedStringElement::Interpolation(node) => {
5627                InterpolatedStringElementRef::Interpolation(node)
5628            }
5629            InterpolatedStringElement::Literal(node) => InterpolatedStringElementRef::Literal(node),
5630        }
5631    }
5632}
5633
5634impl<'a> From<&'a crate::InterpolatedElement> for InterpolatedStringElementRef<'a> {
5635    fn from(node: &'a crate::InterpolatedElement) -> Self {
5636        Self::Interpolation(node)
5637    }
5638}
5639
5640impl<'a> From<&'a crate::InterpolatedStringLiteralElement> for InterpolatedStringElementRef<'a> {
5641    fn from(node: &'a crate::InterpolatedStringLiteralElement) -> Self {
5642        Self::Literal(node)
5643    }
5644}
5645
5646impl ruff_text_size::Ranged for InterpolatedStringElementRef<'_> {
5647    fn range(&self) -> ruff_text_size::TextRange {
5648        match self {
5649            Self::Interpolation(node) => node.range(),
5650            Self::Literal(node) => node.range(),
5651        }
5652    }
5653}
5654
5655impl crate::HasNodeIndex for InterpolatedStringElementRef<'_> {
5656    fn node_index(&self) -> &crate::AtomicNodeIndex {
5657        match self {
5658            Self::Interpolation(node) => node.node_index(),
5659            Self::Literal(node) => node.node_index(),
5660        }
5661    }
5662}
5663
5664/// See also [pattern](https://docs.python.org/3/library/ast.html#ast.pattern)
5665#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5666#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5667pub enum PatternRef<'a> {
5668    MatchValue(&'a crate::PatternMatchValue),
5669    MatchSingleton(&'a crate::PatternMatchSingleton),
5670    MatchSequence(&'a crate::PatternMatchSequence),
5671    MatchMapping(&'a crate::PatternMatchMapping),
5672    MatchClass(&'a crate::PatternMatchClass),
5673    MatchStar(&'a crate::PatternMatchStar),
5674    MatchAs(&'a crate::PatternMatchAs),
5675    MatchOr(&'a crate::PatternMatchOr),
5676}
5677
5678impl<'a> From<&'a Pattern> for PatternRef<'a> {
5679    fn from(node: &'a Pattern) -> Self {
5680        match node {
5681            Pattern::MatchValue(node) => PatternRef::MatchValue(node),
5682            Pattern::MatchSingleton(node) => PatternRef::MatchSingleton(node),
5683            Pattern::MatchSequence(node) => PatternRef::MatchSequence(node),
5684            Pattern::MatchMapping(node) => PatternRef::MatchMapping(node),
5685            Pattern::MatchClass(node) => PatternRef::MatchClass(node),
5686            Pattern::MatchStar(node) => PatternRef::MatchStar(node),
5687            Pattern::MatchAs(node) => PatternRef::MatchAs(node),
5688            Pattern::MatchOr(node) => PatternRef::MatchOr(node),
5689        }
5690    }
5691}
5692
5693impl<'a> From<&'a crate::PatternMatchValue> for PatternRef<'a> {
5694    fn from(node: &'a crate::PatternMatchValue) -> Self {
5695        Self::MatchValue(node)
5696    }
5697}
5698
5699impl<'a> From<&'a crate::PatternMatchSingleton> for PatternRef<'a> {
5700    fn from(node: &'a crate::PatternMatchSingleton) -> Self {
5701        Self::MatchSingleton(node)
5702    }
5703}
5704
5705impl<'a> From<&'a crate::PatternMatchSequence> for PatternRef<'a> {
5706    fn from(node: &'a crate::PatternMatchSequence) -> Self {
5707        Self::MatchSequence(node)
5708    }
5709}
5710
5711impl<'a> From<&'a crate::PatternMatchMapping> for PatternRef<'a> {
5712    fn from(node: &'a crate::PatternMatchMapping) -> Self {
5713        Self::MatchMapping(node)
5714    }
5715}
5716
5717impl<'a> From<&'a crate::PatternMatchClass> for PatternRef<'a> {
5718    fn from(node: &'a crate::PatternMatchClass) -> Self {
5719        Self::MatchClass(node)
5720    }
5721}
5722
5723impl<'a> From<&'a crate::PatternMatchStar> for PatternRef<'a> {
5724    fn from(node: &'a crate::PatternMatchStar) -> Self {
5725        Self::MatchStar(node)
5726    }
5727}
5728
5729impl<'a> From<&'a crate::PatternMatchAs> for PatternRef<'a> {
5730    fn from(node: &'a crate::PatternMatchAs) -> Self {
5731        Self::MatchAs(node)
5732    }
5733}
5734
5735impl<'a> From<&'a crate::PatternMatchOr> for PatternRef<'a> {
5736    fn from(node: &'a crate::PatternMatchOr) -> Self {
5737        Self::MatchOr(node)
5738    }
5739}
5740
5741impl ruff_text_size::Ranged for PatternRef<'_> {
5742    fn range(&self) -> ruff_text_size::TextRange {
5743        match self {
5744            Self::MatchValue(node) => node.range(),
5745            Self::MatchSingleton(node) => node.range(),
5746            Self::MatchSequence(node) => node.range(),
5747            Self::MatchMapping(node) => node.range(),
5748            Self::MatchClass(node) => node.range(),
5749            Self::MatchStar(node) => node.range(),
5750            Self::MatchAs(node) => node.range(),
5751            Self::MatchOr(node) => node.range(),
5752        }
5753    }
5754}
5755
5756impl crate::HasNodeIndex for PatternRef<'_> {
5757    fn node_index(&self) -> &crate::AtomicNodeIndex {
5758        match self {
5759            Self::MatchValue(node) => node.node_index(),
5760            Self::MatchSingleton(node) => node.node_index(),
5761            Self::MatchSequence(node) => node.node_index(),
5762            Self::MatchMapping(node) => node.node_index(),
5763            Self::MatchClass(node) => node.node_index(),
5764            Self::MatchStar(node) => node.node_index(),
5765            Self::MatchAs(node) => node.node_index(),
5766            Self::MatchOr(node) => node.node_index(),
5767        }
5768    }
5769}
5770
5771/// See also [type_param](https://docs.python.org/3/library/ast.html#ast.type_param)
5772#[derive(Clone, Copy, Debug, PartialEq, is_macro::Is)]
5773#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5774pub enum TypeParamRef<'a> {
5775    TypeVar(&'a crate::TypeParamTypeVar),
5776    TypeVarTuple(&'a crate::TypeParamTypeVarTuple),
5777    ParamSpec(&'a crate::TypeParamParamSpec),
5778}
5779
5780impl<'a> From<&'a TypeParam> for TypeParamRef<'a> {
5781    fn from(node: &'a TypeParam) -> Self {
5782        match node {
5783            TypeParam::TypeVar(node) => TypeParamRef::TypeVar(node),
5784            TypeParam::TypeVarTuple(node) => TypeParamRef::TypeVarTuple(node),
5785            TypeParam::ParamSpec(node) => TypeParamRef::ParamSpec(node),
5786        }
5787    }
5788}
5789
5790impl<'a> From<&'a crate::TypeParamTypeVar> for TypeParamRef<'a> {
5791    fn from(node: &'a crate::TypeParamTypeVar) -> Self {
5792        Self::TypeVar(node)
5793    }
5794}
5795
5796impl<'a> From<&'a crate::TypeParamTypeVarTuple> for TypeParamRef<'a> {
5797    fn from(node: &'a crate::TypeParamTypeVarTuple) -> Self {
5798        Self::TypeVarTuple(node)
5799    }
5800}
5801
5802impl<'a> From<&'a crate::TypeParamParamSpec> for TypeParamRef<'a> {
5803    fn from(node: &'a crate::TypeParamParamSpec) -> Self {
5804        Self::ParamSpec(node)
5805    }
5806}
5807
5808impl ruff_text_size::Ranged for TypeParamRef<'_> {
5809    fn range(&self) -> ruff_text_size::TextRange {
5810        match self {
5811            Self::TypeVar(node) => node.range(),
5812            Self::TypeVarTuple(node) => node.range(),
5813            Self::ParamSpec(node) => node.range(),
5814        }
5815    }
5816}
5817
5818impl crate::HasNodeIndex for TypeParamRef<'_> {
5819    fn node_index(&self) -> &crate::AtomicNodeIndex {
5820        match self {
5821            Self::TypeVar(node) => node.node_index(),
5822            Self::TypeVarTuple(node) => node.node_index(),
5823            Self::ParamSpec(node) => node.node_index(),
5824        }
5825    }
5826}
5827
5828/// A flattened enumeration of all AST nodes.
5829#[derive(Copy, Clone, Debug, is_macro::Is, PartialEq)]
5830#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
5831pub enum AnyNodeRef<'a> {
5832    ModModule(&'a crate::ModModule),
5833    ModExpression(&'a crate::ModExpression),
5834    StmtFunctionDef(&'a crate::StmtFunctionDef),
5835    StmtClassDef(&'a crate::StmtClassDef),
5836    StmtReturn(&'a crate::StmtReturn),
5837    StmtDelete(&'a crate::StmtDelete),
5838    StmtTypeAlias(&'a crate::StmtTypeAlias),
5839    StmtAssign(&'a crate::StmtAssign),
5840    StmtAugAssign(&'a crate::StmtAugAssign),
5841    StmtAnnAssign(&'a crate::StmtAnnAssign),
5842    StmtFor(&'a crate::StmtFor),
5843    StmtWhile(&'a crate::StmtWhile),
5844    StmtIf(&'a crate::StmtIf),
5845    StmtWith(&'a crate::StmtWith),
5846    StmtMatch(&'a crate::StmtMatch),
5847    StmtRaise(&'a crate::StmtRaise),
5848    StmtTry(&'a crate::StmtTry),
5849    StmtAssert(&'a crate::StmtAssert),
5850    StmtImport(&'a crate::StmtImport),
5851    StmtImportFrom(&'a crate::StmtImportFrom),
5852    StmtGlobal(&'a crate::StmtGlobal),
5853    StmtNonlocal(&'a crate::StmtNonlocal),
5854    StmtExpr(&'a crate::StmtExpr),
5855    StmtPass(&'a crate::StmtPass),
5856    StmtBreak(&'a crate::StmtBreak),
5857    StmtContinue(&'a crate::StmtContinue),
5858    StmtIpyEscapeCommand(&'a crate::StmtIpyEscapeCommand),
5859    ExprBoolOp(&'a crate::ExprBoolOp),
5860    ExprNamed(&'a crate::ExprNamed),
5861    ExprBinOp(&'a crate::ExprBinOp),
5862    ExprUnaryOp(&'a crate::ExprUnaryOp),
5863    ExprLambda(&'a crate::ExprLambda),
5864    ExprIf(&'a crate::ExprIf),
5865    ExprDict(&'a crate::ExprDict),
5866    ExprSet(&'a crate::ExprSet),
5867    ExprListComp(&'a crate::ExprListComp),
5868    ExprSetComp(&'a crate::ExprSetComp),
5869    ExprDictComp(&'a crate::ExprDictComp),
5870    ExprGenerator(&'a crate::ExprGenerator),
5871    ExprAwait(&'a crate::ExprAwait),
5872    ExprYield(&'a crate::ExprYield),
5873    ExprYieldFrom(&'a crate::ExprYieldFrom),
5874    ExprCompare(&'a crate::ExprCompare),
5875    ExprCall(&'a crate::ExprCall),
5876    ExprFString(&'a crate::ExprFString),
5877    ExprTString(&'a crate::ExprTString),
5878    ExprStringLiteral(&'a crate::ExprStringLiteral),
5879    ExprBytesLiteral(&'a crate::ExprBytesLiteral),
5880    ExprNumberLiteral(&'a crate::ExprNumberLiteral),
5881    ExprBooleanLiteral(&'a crate::ExprBooleanLiteral),
5882    ExprNoneLiteral(&'a crate::ExprNoneLiteral),
5883    ExprEllipsisLiteral(&'a crate::ExprEllipsisLiteral),
5884    ExprAttribute(&'a crate::ExprAttribute),
5885    ExprSubscript(&'a crate::ExprSubscript),
5886    ExprStarred(&'a crate::ExprStarred),
5887    ExprName(&'a crate::ExprName),
5888    ExprList(&'a crate::ExprList),
5889    ExprTuple(&'a crate::ExprTuple),
5890    ExprSlice(&'a crate::ExprSlice),
5891    ExprIpyEscapeCommand(&'a crate::ExprIpyEscapeCommand),
5892    ExceptHandlerExceptHandler(&'a crate::ExceptHandlerExceptHandler),
5893    InterpolatedElement(&'a crate::InterpolatedElement),
5894    InterpolatedStringLiteralElement(&'a crate::InterpolatedStringLiteralElement),
5895    PatternMatchValue(&'a crate::PatternMatchValue),
5896    PatternMatchSingleton(&'a crate::PatternMatchSingleton),
5897    PatternMatchSequence(&'a crate::PatternMatchSequence),
5898    PatternMatchMapping(&'a crate::PatternMatchMapping),
5899    PatternMatchClass(&'a crate::PatternMatchClass),
5900    PatternMatchStar(&'a crate::PatternMatchStar),
5901    PatternMatchAs(&'a crate::PatternMatchAs),
5902    PatternMatchOr(&'a crate::PatternMatchOr),
5903    TypeParamTypeVar(&'a crate::TypeParamTypeVar),
5904    TypeParamTypeVarTuple(&'a crate::TypeParamTypeVarTuple),
5905    TypeParamParamSpec(&'a crate::TypeParamParamSpec),
5906    InterpolatedStringFormatSpec(&'a crate::InterpolatedStringFormatSpec),
5907    PatternArguments(&'a crate::PatternArguments),
5908    PatternKeyword(&'a crate::PatternKeyword),
5909    Comprehension(&'a crate::Comprehension),
5910    Arguments(&'a crate::Arguments),
5911    Parameters(&'a crate::Parameters),
5912    Parameter(&'a crate::Parameter),
5913    ParameterWithDefault(&'a crate::ParameterWithDefault),
5914    Keyword(&'a crate::Keyword),
5915    Alias(&'a crate::Alias),
5916    WithItem(&'a crate::WithItem),
5917    MatchCase(&'a crate::MatchCase),
5918    Decorator(&'a crate::Decorator),
5919    ElifElseClause(&'a crate::ElifElseClause),
5920    TypeParams(&'a crate::TypeParams),
5921    FString(&'a crate::FString),
5922    TString(&'a crate::TString),
5923    StringLiteral(&'a crate::StringLiteral),
5924    BytesLiteral(&'a crate::BytesLiteral),
5925    Identifier(&'a crate::Identifier),
5926}
5927
5928impl<'a> From<&'a Mod> for AnyNodeRef<'a> {
5929    fn from(node: &'a Mod) -> AnyNodeRef<'a> {
5930        match node {
5931            Mod::Module(node) => AnyNodeRef::ModModule(node),
5932            Mod::Expression(node) => AnyNodeRef::ModExpression(node),
5933        }
5934    }
5935}
5936
5937impl<'a> From<ModRef<'a>> for AnyNodeRef<'a> {
5938    fn from(node: ModRef<'a>) -> AnyNodeRef<'a> {
5939        match node {
5940            ModRef::Module(node) => AnyNodeRef::ModModule(node),
5941            ModRef::Expression(node) => AnyNodeRef::ModExpression(node),
5942        }
5943    }
5944}
5945
5946impl<'a> AnyNodeRef<'a> {
5947    pub fn as_mod_ref(self) -> Option<ModRef<'a>> {
5948        match self {
5949            Self::ModModule(node) => Some(ModRef::Module(node)),
5950            Self::ModExpression(node) => Some(ModRef::Expression(node)),
5951
5952            _ => None,
5953        }
5954    }
5955}
5956
5957impl<'a> From<&'a Stmt> for AnyNodeRef<'a> {
5958    fn from(node: &'a Stmt) -> AnyNodeRef<'a> {
5959        match node {
5960            Stmt::FunctionDef(node) => AnyNodeRef::StmtFunctionDef(node),
5961            Stmt::ClassDef(node) => AnyNodeRef::StmtClassDef(node),
5962            Stmt::Return(node) => AnyNodeRef::StmtReturn(node),
5963            Stmt::Delete(node) => AnyNodeRef::StmtDelete(node),
5964            Stmt::TypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
5965            Stmt::Assign(node) => AnyNodeRef::StmtAssign(node),
5966            Stmt::AugAssign(node) => AnyNodeRef::StmtAugAssign(node),
5967            Stmt::AnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
5968            Stmt::For(node) => AnyNodeRef::StmtFor(node),
5969            Stmt::While(node) => AnyNodeRef::StmtWhile(node),
5970            Stmt::If(node) => AnyNodeRef::StmtIf(node),
5971            Stmt::With(node) => AnyNodeRef::StmtWith(node),
5972            Stmt::Match(node) => AnyNodeRef::StmtMatch(node),
5973            Stmt::Raise(node) => AnyNodeRef::StmtRaise(node),
5974            Stmt::Try(node) => AnyNodeRef::StmtTry(node),
5975            Stmt::Assert(node) => AnyNodeRef::StmtAssert(node),
5976            Stmt::Import(node) => AnyNodeRef::StmtImport(node),
5977            Stmt::ImportFrom(node) => AnyNodeRef::StmtImportFrom(node),
5978            Stmt::Global(node) => AnyNodeRef::StmtGlobal(node),
5979            Stmt::Nonlocal(node) => AnyNodeRef::StmtNonlocal(node),
5980            Stmt::Expr(node) => AnyNodeRef::StmtExpr(node),
5981            Stmt::Pass(node) => AnyNodeRef::StmtPass(node),
5982            Stmt::Break(node) => AnyNodeRef::StmtBreak(node),
5983            Stmt::Continue(node) => AnyNodeRef::StmtContinue(node),
5984            Stmt::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
5985        }
5986    }
5987}
5988
5989impl<'a> From<StmtRef<'a>> for AnyNodeRef<'a> {
5990    fn from(node: StmtRef<'a>) -> AnyNodeRef<'a> {
5991        match node {
5992            StmtRef::FunctionDef(node) => AnyNodeRef::StmtFunctionDef(node),
5993            StmtRef::ClassDef(node) => AnyNodeRef::StmtClassDef(node),
5994            StmtRef::Return(node) => AnyNodeRef::StmtReturn(node),
5995            StmtRef::Delete(node) => AnyNodeRef::StmtDelete(node),
5996            StmtRef::TypeAlias(node) => AnyNodeRef::StmtTypeAlias(node),
5997            StmtRef::Assign(node) => AnyNodeRef::StmtAssign(node),
5998            StmtRef::AugAssign(node) => AnyNodeRef::StmtAugAssign(node),
5999            StmtRef::AnnAssign(node) => AnyNodeRef::StmtAnnAssign(node),
6000            StmtRef::For(node) => AnyNodeRef::StmtFor(node),
6001            StmtRef::While(node) => AnyNodeRef::StmtWhile(node),
6002            StmtRef::If(node) => AnyNodeRef::StmtIf(node),
6003            StmtRef::With(node) => AnyNodeRef::StmtWith(node),
6004            StmtRef::Match(node) => AnyNodeRef::StmtMatch(node),
6005            StmtRef::Raise(node) => AnyNodeRef::StmtRaise(node),
6006            StmtRef::Try(node) => AnyNodeRef::StmtTry(node),
6007            StmtRef::Assert(node) => AnyNodeRef::StmtAssert(node),
6008            StmtRef::Import(node) => AnyNodeRef::StmtImport(node),
6009            StmtRef::ImportFrom(node) => AnyNodeRef::StmtImportFrom(node),
6010            StmtRef::Global(node) => AnyNodeRef::StmtGlobal(node),
6011            StmtRef::Nonlocal(node) => AnyNodeRef::StmtNonlocal(node),
6012            StmtRef::Expr(node) => AnyNodeRef::StmtExpr(node),
6013            StmtRef::Pass(node) => AnyNodeRef::StmtPass(node),
6014            StmtRef::Break(node) => AnyNodeRef::StmtBreak(node),
6015            StmtRef::Continue(node) => AnyNodeRef::StmtContinue(node),
6016            StmtRef::IpyEscapeCommand(node) => AnyNodeRef::StmtIpyEscapeCommand(node),
6017        }
6018    }
6019}
6020
6021impl<'a> AnyNodeRef<'a> {
6022    pub fn as_stmt_ref(self) -> Option<StmtRef<'a>> {
6023        match self {
6024            Self::StmtFunctionDef(node) => Some(StmtRef::FunctionDef(node)),
6025            Self::StmtClassDef(node) => Some(StmtRef::ClassDef(node)),
6026            Self::StmtReturn(node) => Some(StmtRef::Return(node)),
6027            Self::StmtDelete(node) => Some(StmtRef::Delete(node)),
6028            Self::StmtTypeAlias(node) => Some(StmtRef::TypeAlias(node)),
6029            Self::StmtAssign(node) => Some(StmtRef::Assign(node)),
6030            Self::StmtAugAssign(node) => Some(StmtRef::AugAssign(node)),
6031            Self::StmtAnnAssign(node) => Some(StmtRef::AnnAssign(node)),
6032            Self::StmtFor(node) => Some(StmtRef::For(node)),
6033            Self::StmtWhile(node) => Some(StmtRef::While(node)),
6034            Self::StmtIf(node) => Some(StmtRef::If(node)),
6035            Self::StmtWith(node) => Some(StmtRef::With(node)),
6036            Self::StmtMatch(node) => Some(StmtRef::Match(node)),
6037            Self::StmtRaise(node) => Some(StmtRef::Raise(node)),
6038            Self::StmtTry(node) => Some(StmtRef::Try(node)),
6039            Self::StmtAssert(node) => Some(StmtRef::Assert(node)),
6040            Self::StmtImport(node) => Some(StmtRef::Import(node)),
6041            Self::StmtImportFrom(node) => Some(StmtRef::ImportFrom(node)),
6042            Self::StmtGlobal(node) => Some(StmtRef::Global(node)),
6043            Self::StmtNonlocal(node) => Some(StmtRef::Nonlocal(node)),
6044            Self::StmtExpr(node) => Some(StmtRef::Expr(node)),
6045            Self::StmtPass(node) => Some(StmtRef::Pass(node)),
6046            Self::StmtBreak(node) => Some(StmtRef::Break(node)),
6047            Self::StmtContinue(node) => Some(StmtRef::Continue(node)),
6048            Self::StmtIpyEscapeCommand(node) => Some(StmtRef::IpyEscapeCommand(node)),
6049
6050            _ => None,
6051        }
6052    }
6053}
6054
6055impl<'a> From<&'a Expr> for AnyNodeRef<'a> {
6056    fn from(node: &'a Expr) -> AnyNodeRef<'a> {
6057        match node {
6058            Expr::BoolOp(node) => AnyNodeRef::ExprBoolOp(node),
6059            Expr::Named(node) => AnyNodeRef::ExprNamed(node),
6060            Expr::BinOp(node) => AnyNodeRef::ExprBinOp(node),
6061            Expr::UnaryOp(node) => AnyNodeRef::ExprUnaryOp(node),
6062            Expr::Lambda(node) => AnyNodeRef::ExprLambda(node),
6063            Expr::If(node) => AnyNodeRef::ExprIf(node),
6064            Expr::Dict(node) => AnyNodeRef::ExprDict(node),
6065            Expr::Set(node) => AnyNodeRef::ExprSet(node),
6066            Expr::ListComp(node) => AnyNodeRef::ExprListComp(node),
6067            Expr::SetComp(node) => AnyNodeRef::ExprSetComp(node),
6068            Expr::DictComp(node) => AnyNodeRef::ExprDictComp(node),
6069            Expr::Generator(node) => AnyNodeRef::ExprGenerator(node),
6070            Expr::Await(node) => AnyNodeRef::ExprAwait(node),
6071            Expr::Yield(node) => AnyNodeRef::ExprYield(node),
6072            Expr::YieldFrom(node) => AnyNodeRef::ExprYieldFrom(node),
6073            Expr::Compare(node) => AnyNodeRef::ExprCompare(node),
6074            Expr::Call(node) => AnyNodeRef::ExprCall(node),
6075            Expr::FString(node) => AnyNodeRef::ExprFString(node),
6076            Expr::TString(node) => AnyNodeRef::ExprTString(node),
6077            Expr::StringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
6078            Expr::BytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
6079            Expr::NumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node),
6080            Expr::BooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node),
6081            Expr::NoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node),
6082            Expr::EllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node),
6083            Expr::Attribute(node) => AnyNodeRef::ExprAttribute(node),
6084            Expr::Subscript(node) => AnyNodeRef::ExprSubscript(node),
6085            Expr::Starred(node) => AnyNodeRef::ExprStarred(node),
6086            Expr::Name(node) => AnyNodeRef::ExprName(node),
6087            Expr::List(node) => AnyNodeRef::ExprList(node),
6088            Expr::Tuple(node) => AnyNodeRef::ExprTuple(node),
6089            Expr::Slice(node) => AnyNodeRef::ExprSlice(node),
6090            Expr::IpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node),
6091        }
6092    }
6093}
6094
6095impl<'a> From<ExprRef<'a>> for AnyNodeRef<'a> {
6096    fn from(node: ExprRef<'a>) -> AnyNodeRef<'a> {
6097        match node {
6098            ExprRef::BoolOp(node) => AnyNodeRef::ExprBoolOp(node),
6099            ExprRef::Named(node) => AnyNodeRef::ExprNamed(node),
6100            ExprRef::BinOp(node) => AnyNodeRef::ExprBinOp(node),
6101            ExprRef::UnaryOp(node) => AnyNodeRef::ExprUnaryOp(node),
6102            ExprRef::Lambda(node) => AnyNodeRef::ExprLambda(node),
6103            ExprRef::If(node) => AnyNodeRef::ExprIf(node),
6104            ExprRef::Dict(node) => AnyNodeRef::ExprDict(node),
6105            ExprRef::Set(node) => AnyNodeRef::ExprSet(node),
6106            ExprRef::ListComp(node) => AnyNodeRef::ExprListComp(node),
6107            ExprRef::SetComp(node) => AnyNodeRef::ExprSetComp(node),
6108            ExprRef::DictComp(node) => AnyNodeRef::ExprDictComp(node),
6109            ExprRef::Generator(node) => AnyNodeRef::ExprGenerator(node),
6110            ExprRef::Await(node) => AnyNodeRef::ExprAwait(node),
6111            ExprRef::Yield(node) => AnyNodeRef::ExprYield(node),
6112            ExprRef::YieldFrom(node) => AnyNodeRef::ExprYieldFrom(node),
6113            ExprRef::Compare(node) => AnyNodeRef::ExprCompare(node),
6114            ExprRef::Call(node) => AnyNodeRef::ExprCall(node),
6115            ExprRef::FString(node) => AnyNodeRef::ExprFString(node),
6116            ExprRef::TString(node) => AnyNodeRef::ExprTString(node),
6117            ExprRef::StringLiteral(node) => AnyNodeRef::ExprStringLiteral(node),
6118            ExprRef::BytesLiteral(node) => AnyNodeRef::ExprBytesLiteral(node),
6119            ExprRef::NumberLiteral(node) => AnyNodeRef::ExprNumberLiteral(node),
6120            ExprRef::BooleanLiteral(node) => AnyNodeRef::ExprBooleanLiteral(node),
6121            ExprRef::NoneLiteral(node) => AnyNodeRef::ExprNoneLiteral(node),
6122            ExprRef::EllipsisLiteral(node) => AnyNodeRef::ExprEllipsisLiteral(node),
6123            ExprRef::Attribute(node) => AnyNodeRef::ExprAttribute(node),
6124            ExprRef::Subscript(node) => AnyNodeRef::ExprSubscript(node),
6125            ExprRef::Starred(node) => AnyNodeRef::ExprStarred(node),
6126            ExprRef::Name(node) => AnyNodeRef::ExprName(node),
6127            ExprRef::List(node) => AnyNodeRef::ExprList(node),
6128            ExprRef::Tuple(node) => AnyNodeRef::ExprTuple(node),
6129            ExprRef::Slice(node) => AnyNodeRef::ExprSlice(node),
6130            ExprRef::IpyEscapeCommand(node) => AnyNodeRef::ExprIpyEscapeCommand(node),
6131        }
6132    }
6133}
6134
6135impl<'a> AnyNodeRef<'a> {
6136    pub fn as_expr_ref(self) -> Option<ExprRef<'a>> {
6137        match self {
6138            Self::ExprBoolOp(node) => Some(ExprRef::BoolOp(node)),
6139            Self::ExprNamed(node) => Some(ExprRef::Named(node)),
6140            Self::ExprBinOp(node) => Some(ExprRef::BinOp(node)),
6141            Self::ExprUnaryOp(node) => Some(ExprRef::UnaryOp(node)),
6142            Self::ExprLambda(node) => Some(ExprRef::Lambda(node)),
6143            Self::ExprIf(node) => Some(ExprRef::If(node)),
6144            Self::ExprDict(node) => Some(ExprRef::Dict(node)),
6145            Self::ExprSet(node) => Some(ExprRef::Set(node)),
6146            Self::ExprListComp(node) => Some(ExprRef::ListComp(node)),
6147            Self::ExprSetComp(node) => Some(ExprRef::SetComp(node)),
6148            Self::ExprDictComp(node) => Some(ExprRef::DictComp(node)),
6149            Self::ExprGenerator(node) => Some(ExprRef::Generator(node)),
6150            Self::ExprAwait(node) => Some(ExprRef::Await(node)),
6151            Self::ExprYield(node) => Some(ExprRef::Yield(node)),
6152            Self::ExprYieldFrom(node) => Some(ExprRef::YieldFrom(node)),
6153            Self::ExprCompare(node) => Some(ExprRef::Compare(node)),
6154            Self::ExprCall(node) => Some(ExprRef::Call(node)),
6155            Self::ExprFString(node) => Some(ExprRef::FString(node)),
6156            Self::ExprTString(node) => Some(ExprRef::TString(node)),
6157            Self::ExprStringLiteral(node) => Some(ExprRef::StringLiteral(node)),
6158            Self::ExprBytesLiteral(node) => Some(ExprRef::BytesLiteral(node)),
6159            Self::ExprNumberLiteral(node) => Some(ExprRef::NumberLiteral(node)),
6160            Self::ExprBooleanLiteral(node) => Some(ExprRef::BooleanLiteral(node)),
6161            Self::ExprNoneLiteral(node) => Some(ExprRef::NoneLiteral(node)),
6162            Self::ExprEllipsisLiteral(node) => Some(ExprRef::EllipsisLiteral(node)),
6163            Self::ExprAttribute(node) => Some(ExprRef::Attribute(node)),
6164            Self::ExprSubscript(node) => Some(ExprRef::Subscript(node)),
6165            Self::ExprStarred(node) => Some(ExprRef::Starred(node)),
6166            Self::ExprName(node) => Some(ExprRef::Name(node)),
6167            Self::ExprList(node) => Some(ExprRef::List(node)),
6168            Self::ExprTuple(node) => Some(ExprRef::Tuple(node)),
6169            Self::ExprSlice(node) => Some(ExprRef::Slice(node)),
6170            Self::ExprIpyEscapeCommand(node) => Some(ExprRef::IpyEscapeCommand(node)),
6171
6172            _ => None,
6173        }
6174    }
6175}
6176
6177impl<'a> From<&'a ExceptHandler> for AnyNodeRef<'a> {
6178    fn from(node: &'a ExceptHandler) -> AnyNodeRef<'a> {
6179        match node {
6180            ExceptHandler::ExceptHandler(node) => AnyNodeRef::ExceptHandlerExceptHandler(node),
6181        }
6182    }
6183}
6184
6185impl<'a> From<ExceptHandlerRef<'a>> for AnyNodeRef<'a> {
6186    fn from(node: ExceptHandlerRef<'a>) -> AnyNodeRef<'a> {
6187        match node {
6188            ExceptHandlerRef::ExceptHandler(node) => AnyNodeRef::ExceptHandlerExceptHandler(node),
6189        }
6190    }
6191}
6192
6193impl<'a> AnyNodeRef<'a> {
6194    pub fn as_except_handler_ref(self) -> Option<ExceptHandlerRef<'a>> {
6195        match self {
6196            Self::ExceptHandlerExceptHandler(node) => Some(ExceptHandlerRef::ExceptHandler(node)),
6197
6198            _ => None,
6199        }
6200    }
6201}
6202
6203impl<'a> From<&'a InterpolatedStringElement> for AnyNodeRef<'a> {
6204    fn from(node: &'a InterpolatedStringElement) -> AnyNodeRef<'a> {
6205        match node {
6206            InterpolatedStringElement::Interpolation(node) => AnyNodeRef::InterpolatedElement(node),
6207            InterpolatedStringElement::Literal(node) => {
6208                AnyNodeRef::InterpolatedStringLiteralElement(node)
6209            }
6210        }
6211    }
6212}
6213
6214impl<'a> From<InterpolatedStringElementRef<'a>> for AnyNodeRef<'a> {
6215    fn from(node: InterpolatedStringElementRef<'a>) -> AnyNodeRef<'a> {
6216        match node {
6217            InterpolatedStringElementRef::Interpolation(node) => {
6218                AnyNodeRef::InterpolatedElement(node)
6219            }
6220            InterpolatedStringElementRef::Literal(node) => {
6221                AnyNodeRef::InterpolatedStringLiteralElement(node)
6222            }
6223        }
6224    }
6225}
6226
6227impl<'a> AnyNodeRef<'a> {
6228    pub fn as_interpolated_string_element_ref(self) -> Option<InterpolatedStringElementRef<'a>> {
6229        match self {
6230            Self::InterpolatedElement(node) => {
6231                Some(InterpolatedStringElementRef::Interpolation(node))
6232            }
6233            Self::InterpolatedStringLiteralElement(node) => {
6234                Some(InterpolatedStringElementRef::Literal(node))
6235            }
6236
6237            _ => None,
6238        }
6239    }
6240}
6241
6242impl<'a> From<&'a Pattern> for AnyNodeRef<'a> {
6243    fn from(node: &'a Pattern) -> AnyNodeRef<'a> {
6244        match node {
6245            Pattern::MatchValue(node) => AnyNodeRef::PatternMatchValue(node),
6246            Pattern::MatchSingleton(node) => AnyNodeRef::PatternMatchSingleton(node),
6247            Pattern::MatchSequence(node) => AnyNodeRef::PatternMatchSequence(node),
6248            Pattern::MatchMapping(node) => AnyNodeRef::PatternMatchMapping(node),
6249            Pattern::MatchClass(node) => AnyNodeRef::PatternMatchClass(node),
6250            Pattern::MatchStar(node) => AnyNodeRef::PatternMatchStar(node),
6251            Pattern::MatchAs(node) => AnyNodeRef::PatternMatchAs(node),
6252            Pattern::MatchOr(node) => AnyNodeRef::PatternMatchOr(node),
6253        }
6254    }
6255}
6256
6257impl<'a> From<PatternRef<'a>> for AnyNodeRef<'a> {
6258    fn from(node: PatternRef<'a>) -> AnyNodeRef<'a> {
6259        match node {
6260            PatternRef::MatchValue(node) => AnyNodeRef::PatternMatchValue(node),
6261            PatternRef::MatchSingleton(node) => AnyNodeRef::PatternMatchSingleton(node),
6262            PatternRef::MatchSequence(node) => AnyNodeRef::PatternMatchSequence(node),
6263            PatternRef::MatchMapping(node) => AnyNodeRef::PatternMatchMapping(node),
6264            PatternRef::MatchClass(node) => AnyNodeRef::PatternMatchClass(node),
6265            PatternRef::MatchStar(node) => AnyNodeRef::PatternMatchStar(node),
6266            PatternRef::MatchAs(node) => AnyNodeRef::PatternMatchAs(node),
6267            PatternRef::MatchOr(node) => AnyNodeRef::PatternMatchOr(node),
6268        }
6269    }
6270}
6271
6272impl<'a> AnyNodeRef<'a> {
6273    pub fn as_pattern_ref(self) -> Option<PatternRef<'a>> {
6274        match self {
6275            Self::PatternMatchValue(node) => Some(PatternRef::MatchValue(node)),
6276            Self::PatternMatchSingleton(node) => Some(PatternRef::MatchSingleton(node)),
6277            Self::PatternMatchSequence(node) => Some(PatternRef::MatchSequence(node)),
6278            Self::PatternMatchMapping(node) => Some(PatternRef::MatchMapping(node)),
6279            Self::PatternMatchClass(node) => Some(PatternRef::MatchClass(node)),
6280            Self::PatternMatchStar(node) => Some(PatternRef::MatchStar(node)),
6281            Self::PatternMatchAs(node) => Some(PatternRef::MatchAs(node)),
6282            Self::PatternMatchOr(node) => Some(PatternRef::MatchOr(node)),
6283
6284            _ => None,
6285        }
6286    }
6287}
6288
6289impl<'a> From<&'a TypeParam> for AnyNodeRef<'a> {
6290    fn from(node: &'a TypeParam) -> AnyNodeRef<'a> {
6291        match node {
6292            TypeParam::TypeVar(node) => AnyNodeRef::TypeParamTypeVar(node),
6293            TypeParam::TypeVarTuple(node) => AnyNodeRef::TypeParamTypeVarTuple(node),
6294            TypeParam::ParamSpec(node) => AnyNodeRef::TypeParamParamSpec(node),
6295        }
6296    }
6297}
6298
6299impl<'a> From<TypeParamRef<'a>> for AnyNodeRef<'a> {
6300    fn from(node: TypeParamRef<'a>) -> AnyNodeRef<'a> {
6301        match node {
6302            TypeParamRef::TypeVar(node) => AnyNodeRef::TypeParamTypeVar(node),
6303            TypeParamRef::TypeVarTuple(node) => AnyNodeRef::TypeParamTypeVarTuple(node),
6304            TypeParamRef::ParamSpec(node) => AnyNodeRef::TypeParamParamSpec(node),
6305        }
6306    }
6307}
6308
6309impl<'a> AnyNodeRef<'a> {
6310    pub fn as_type_param_ref(self) -> Option<TypeParamRef<'a>> {
6311        match self {
6312            Self::TypeParamTypeVar(node) => Some(TypeParamRef::TypeVar(node)),
6313            Self::TypeParamTypeVarTuple(node) => Some(TypeParamRef::TypeVarTuple(node)),
6314            Self::TypeParamParamSpec(node) => Some(TypeParamRef::ParamSpec(node)),
6315
6316            _ => None,
6317        }
6318    }
6319}
6320
6321impl<'a> From<&'a crate::ModModule> for AnyNodeRef<'a> {
6322    fn from(node: &'a crate::ModModule) -> AnyNodeRef<'a> {
6323        AnyNodeRef::ModModule(node)
6324    }
6325}
6326
6327impl<'a> From<&'a crate::ModExpression> for AnyNodeRef<'a> {
6328    fn from(node: &'a crate::ModExpression) -> AnyNodeRef<'a> {
6329        AnyNodeRef::ModExpression(node)
6330    }
6331}
6332
6333impl<'a> From<&'a crate::StmtFunctionDef> for AnyNodeRef<'a> {
6334    fn from(node: &'a crate::StmtFunctionDef) -> AnyNodeRef<'a> {
6335        AnyNodeRef::StmtFunctionDef(node)
6336    }
6337}
6338
6339impl<'a> From<&'a crate::StmtClassDef> for AnyNodeRef<'a> {
6340    fn from(node: &'a crate::StmtClassDef) -> AnyNodeRef<'a> {
6341        AnyNodeRef::StmtClassDef(node)
6342    }
6343}
6344
6345impl<'a> From<&'a crate::StmtReturn> for AnyNodeRef<'a> {
6346    fn from(node: &'a crate::StmtReturn) -> AnyNodeRef<'a> {
6347        AnyNodeRef::StmtReturn(node)
6348    }
6349}
6350
6351impl<'a> From<&'a crate::StmtDelete> for AnyNodeRef<'a> {
6352    fn from(node: &'a crate::StmtDelete) -> AnyNodeRef<'a> {
6353        AnyNodeRef::StmtDelete(node)
6354    }
6355}
6356
6357impl<'a> From<&'a crate::StmtTypeAlias> for AnyNodeRef<'a> {
6358    fn from(node: &'a crate::StmtTypeAlias) -> AnyNodeRef<'a> {
6359        AnyNodeRef::StmtTypeAlias(node)
6360    }
6361}
6362
6363impl<'a> From<&'a crate::StmtAssign> for AnyNodeRef<'a> {
6364    fn from(node: &'a crate::StmtAssign) -> AnyNodeRef<'a> {
6365        AnyNodeRef::StmtAssign(node)
6366    }
6367}
6368
6369impl<'a> From<&'a crate::StmtAugAssign> for AnyNodeRef<'a> {
6370    fn from(node: &'a crate::StmtAugAssign) -> AnyNodeRef<'a> {
6371        AnyNodeRef::StmtAugAssign(node)
6372    }
6373}
6374
6375impl<'a> From<&'a crate::StmtAnnAssign> for AnyNodeRef<'a> {
6376    fn from(node: &'a crate::StmtAnnAssign) -> AnyNodeRef<'a> {
6377        AnyNodeRef::StmtAnnAssign(node)
6378    }
6379}
6380
6381impl<'a> From<&'a crate::StmtFor> for AnyNodeRef<'a> {
6382    fn from(node: &'a crate::StmtFor) -> AnyNodeRef<'a> {
6383        AnyNodeRef::StmtFor(node)
6384    }
6385}
6386
6387impl<'a> From<&'a crate::StmtWhile> for AnyNodeRef<'a> {
6388    fn from(node: &'a crate::StmtWhile) -> AnyNodeRef<'a> {
6389        AnyNodeRef::StmtWhile(node)
6390    }
6391}
6392
6393impl<'a> From<&'a crate::StmtIf> for AnyNodeRef<'a> {
6394    fn from(node: &'a crate::StmtIf) -> AnyNodeRef<'a> {
6395        AnyNodeRef::StmtIf(node)
6396    }
6397}
6398
6399impl<'a> From<&'a crate::StmtWith> for AnyNodeRef<'a> {
6400    fn from(node: &'a crate::StmtWith) -> AnyNodeRef<'a> {
6401        AnyNodeRef::StmtWith(node)
6402    }
6403}
6404
6405impl<'a> From<&'a crate::StmtMatch> for AnyNodeRef<'a> {
6406    fn from(node: &'a crate::StmtMatch) -> AnyNodeRef<'a> {
6407        AnyNodeRef::StmtMatch(node)
6408    }
6409}
6410
6411impl<'a> From<&'a crate::StmtRaise> for AnyNodeRef<'a> {
6412    fn from(node: &'a crate::StmtRaise) -> AnyNodeRef<'a> {
6413        AnyNodeRef::StmtRaise(node)
6414    }
6415}
6416
6417impl<'a> From<&'a crate::StmtTry> for AnyNodeRef<'a> {
6418    fn from(node: &'a crate::StmtTry) -> AnyNodeRef<'a> {
6419        AnyNodeRef::StmtTry(node)
6420    }
6421}
6422
6423impl<'a> From<&'a crate::StmtAssert> for AnyNodeRef<'a> {
6424    fn from(node: &'a crate::StmtAssert) -> AnyNodeRef<'a> {
6425        AnyNodeRef::StmtAssert(node)
6426    }
6427}
6428
6429impl<'a> From<&'a crate::StmtImport> for AnyNodeRef<'a> {
6430    fn from(node: &'a crate::StmtImport) -> AnyNodeRef<'a> {
6431        AnyNodeRef::StmtImport(node)
6432    }
6433}
6434
6435impl<'a> From<&'a crate::StmtImportFrom> for AnyNodeRef<'a> {
6436    fn from(node: &'a crate::StmtImportFrom) -> AnyNodeRef<'a> {
6437        AnyNodeRef::StmtImportFrom(node)
6438    }
6439}
6440
6441impl<'a> From<&'a crate::StmtGlobal> for AnyNodeRef<'a> {
6442    fn from(node: &'a crate::StmtGlobal) -> AnyNodeRef<'a> {
6443        AnyNodeRef::StmtGlobal(node)
6444    }
6445}
6446
6447impl<'a> From<&'a crate::StmtNonlocal> for AnyNodeRef<'a> {
6448    fn from(node: &'a crate::StmtNonlocal) -> AnyNodeRef<'a> {
6449        AnyNodeRef::StmtNonlocal(node)
6450    }
6451}
6452
6453impl<'a> From<&'a crate::StmtExpr> for AnyNodeRef<'a> {
6454    fn from(node: &'a crate::StmtExpr) -> AnyNodeRef<'a> {
6455        AnyNodeRef::StmtExpr(node)
6456    }
6457}
6458
6459impl<'a> From<&'a crate::StmtPass> for AnyNodeRef<'a> {
6460    fn from(node: &'a crate::StmtPass) -> AnyNodeRef<'a> {
6461        AnyNodeRef::StmtPass(node)
6462    }
6463}
6464
6465impl<'a> From<&'a crate::StmtBreak> for AnyNodeRef<'a> {
6466    fn from(node: &'a crate::StmtBreak) -> AnyNodeRef<'a> {
6467        AnyNodeRef::StmtBreak(node)
6468    }
6469}
6470
6471impl<'a> From<&'a crate::StmtContinue> for AnyNodeRef<'a> {
6472    fn from(node: &'a crate::StmtContinue) -> AnyNodeRef<'a> {
6473        AnyNodeRef::StmtContinue(node)
6474    }
6475}
6476
6477impl<'a> From<&'a crate::StmtIpyEscapeCommand> for AnyNodeRef<'a> {
6478    fn from(node: &'a crate::StmtIpyEscapeCommand) -> AnyNodeRef<'a> {
6479        AnyNodeRef::StmtIpyEscapeCommand(node)
6480    }
6481}
6482
6483impl<'a> From<&'a crate::ExprBoolOp> for AnyNodeRef<'a> {
6484    fn from(node: &'a crate::ExprBoolOp) -> AnyNodeRef<'a> {
6485        AnyNodeRef::ExprBoolOp(node)
6486    }
6487}
6488
6489impl<'a> From<&'a crate::ExprNamed> for AnyNodeRef<'a> {
6490    fn from(node: &'a crate::ExprNamed) -> AnyNodeRef<'a> {
6491        AnyNodeRef::ExprNamed(node)
6492    }
6493}
6494
6495impl<'a> From<&'a crate::ExprBinOp> for AnyNodeRef<'a> {
6496    fn from(node: &'a crate::ExprBinOp) -> AnyNodeRef<'a> {
6497        AnyNodeRef::ExprBinOp(node)
6498    }
6499}
6500
6501impl<'a> From<&'a crate::ExprUnaryOp> for AnyNodeRef<'a> {
6502    fn from(node: &'a crate::ExprUnaryOp) -> AnyNodeRef<'a> {
6503        AnyNodeRef::ExprUnaryOp(node)
6504    }
6505}
6506
6507impl<'a> From<&'a crate::ExprLambda> for AnyNodeRef<'a> {
6508    fn from(node: &'a crate::ExprLambda) -> AnyNodeRef<'a> {
6509        AnyNodeRef::ExprLambda(node)
6510    }
6511}
6512
6513impl<'a> From<&'a crate::ExprIf> for AnyNodeRef<'a> {
6514    fn from(node: &'a crate::ExprIf) -> AnyNodeRef<'a> {
6515        AnyNodeRef::ExprIf(node)
6516    }
6517}
6518
6519impl<'a> From<&'a crate::ExprDict> for AnyNodeRef<'a> {
6520    fn from(node: &'a crate::ExprDict) -> AnyNodeRef<'a> {
6521        AnyNodeRef::ExprDict(node)
6522    }
6523}
6524
6525impl<'a> From<&'a crate::ExprSet> for AnyNodeRef<'a> {
6526    fn from(node: &'a crate::ExprSet) -> AnyNodeRef<'a> {
6527        AnyNodeRef::ExprSet(node)
6528    }
6529}
6530
6531impl<'a> From<&'a crate::ExprListComp> for AnyNodeRef<'a> {
6532    fn from(node: &'a crate::ExprListComp) -> AnyNodeRef<'a> {
6533        AnyNodeRef::ExprListComp(node)
6534    }
6535}
6536
6537impl<'a> From<&'a crate::ExprSetComp> for AnyNodeRef<'a> {
6538    fn from(node: &'a crate::ExprSetComp) -> AnyNodeRef<'a> {
6539        AnyNodeRef::ExprSetComp(node)
6540    }
6541}
6542
6543impl<'a> From<&'a crate::ExprDictComp> for AnyNodeRef<'a> {
6544    fn from(node: &'a crate::ExprDictComp) -> AnyNodeRef<'a> {
6545        AnyNodeRef::ExprDictComp(node)
6546    }
6547}
6548
6549impl<'a> From<&'a crate::ExprGenerator> for AnyNodeRef<'a> {
6550    fn from(node: &'a crate::ExprGenerator) -> AnyNodeRef<'a> {
6551        AnyNodeRef::ExprGenerator(node)
6552    }
6553}
6554
6555impl<'a> From<&'a crate::ExprAwait> for AnyNodeRef<'a> {
6556    fn from(node: &'a crate::ExprAwait) -> AnyNodeRef<'a> {
6557        AnyNodeRef::ExprAwait(node)
6558    }
6559}
6560
6561impl<'a> From<&'a crate::ExprYield> for AnyNodeRef<'a> {
6562    fn from(node: &'a crate::ExprYield) -> AnyNodeRef<'a> {
6563        AnyNodeRef::ExprYield(node)
6564    }
6565}
6566
6567impl<'a> From<&'a crate::ExprYieldFrom> for AnyNodeRef<'a> {
6568    fn from(node: &'a crate::ExprYieldFrom) -> AnyNodeRef<'a> {
6569        AnyNodeRef::ExprYieldFrom(node)
6570    }
6571}
6572
6573impl<'a> From<&'a crate::ExprCompare> for AnyNodeRef<'a> {
6574    fn from(node: &'a crate::ExprCompare) -> AnyNodeRef<'a> {
6575        AnyNodeRef::ExprCompare(node)
6576    }
6577}
6578
6579impl<'a> From<&'a crate::ExprCall> for AnyNodeRef<'a> {
6580    fn from(node: &'a crate::ExprCall) -> AnyNodeRef<'a> {
6581        AnyNodeRef::ExprCall(node)
6582    }
6583}
6584
6585impl<'a> From<&'a crate::ExprFString> for AnyNodeRef<'a> {
6586    fn from(node: &'a crate::ExprFString) -> AnyNodeRef<'a> {
6587        AnyNodeRef::ExprFString(node)
6588    }
6589}
6590
6591impl<'a> From<&'a crate::ExprTString> for AnyNodeRef<'a> {
6592    fn from(node: &'a crate::ExprTString) -> AnyNodeRef<'a> {
6593        AnyNodeRef::ExprTString(node)
6594    }
6595}
6596
6597impl<'a> From<&'a crate::ExprStringLiteral> for AnyNodeRef<'a> {
6598    fn from(node: &'a crate::ExprStringLiteral) -> AnyNodeRef<'a> {
6599        AnyNodeRef::ExprStringLiteral(node)
6600    }
6601}
6602
6603impl<'a> From<&'a crate::ExprBytesLiteral> for AnyNodeRef<'a> {
6604    fn from(node: &'a crate::ExprBytesLiteral) -> AnyNodeRef<'a> {
6605        AnyNodeRef::ExprBytesLiteral(node)
6606    }
6607}
6608
6609impl<'a> From<&'a crate::ExprNumberLiteral> for AnyNodeRef<'a> {
6610    fn from(node: &'a crate::ExprNumberLiteral) -> AnyNodeRef<'a> {
6611        AnyNodeRef::ExprNumberLiteral(node)
6612    }
6613}
6614
6615impl<'a> From<&'a crate::ExprBooleanLiteral> for AnyNodeRef<'a> {
6616    fn from(node: &'a crate::ExprBooleanLiteral) -> AnyNodeRef<'a> {
6617        AnyNodeRef::ExprBooleanLiteral(node)
6618    }
6619}
6620
6621impl<'a> From<&'a crate::ExprNoneLiteral> for AnyNodeRef<'a> {
6622    fn from(node: &'a crate::ExprNoneLiteral) -> AnyNodeRef<'a> {
6623        AnyNodeRef::ExprNoneLiteral(node)
6624    }
6625}
6626
6627impl<'a> From<&'a crate::ExprEllipsisLiteral> for AnyNodeRef<'a> {
6628    fn from(node: &'a crate::ExprEllipsisLiteral) -> AnyNodeRef<'a> {
6629        AnyNodeRef::ExprEllipsisLiteral(node)
6630    }
6631}
6632
6633impl<'a> From<&'a crate::ExprAttribute> for AnyNodeRef<'a> {
6634    fn from(node: &'a crate::ExprAttribute) -> AnyNodeRef<'a> {
6635        AnyNodeRef::ExprAttribute(node)
6636    }
6637}
6638
6639impl<'a> From<&'a crate::ExprSubscript> for AnyNodeRef<'a> {
6640    fn from(node: &'a crate::ExprSubscript) -> AnyNodeRef<'a> {
6641        AnyNodeRef::ExprSubscript(node)
6642    }
6643}
6644
6645impl<'a> From<&'a crate::ExprStarred> for AnyNodeRef<'a> {
6646    fn from(node: &'a crate::ExprStarred) -> AnyNodeRef<'a> {
6647        AnyNodeRef::ExprStarred(node)
6648    }
6649}
6650
6651impl<'a> From<&'a crate::ExprName> for AnyNodeRef<'a> {
6652    fn from(node: &'a crate::ExprName) -> AnyNodeRef<'a> {
6653        AnyNodeRef::ExprName(node)
6654    }
6655}
6656
6657impl<'a> From<&'a crate::ExprList> for AnyNodeRef<'a> {
6658    fn from(node: &'a crate::ExprList) -> AnyNodeRef<'a> {
6659        AnyNodeRef::ExprList(node)
6660    }
6661}
6662
6663impl<'a> From<&'a crate::ExprTuple> for AnyNodeRef<'a> {
6664    fn from(node: &'a crate::ExprTuple) -> AnyNodeRef<'a> {
6665        AnyNodeRef::ExprTuple(node)
6666    }
6667}
6668
6669impl<'a> From<&'a crate::ExprSlice> for AnyNodeRef<'a> {
6670    fn from(node: &'a crate::ExprSlice) -> AnyNodeRef<'a> {
6671        AnyNodeRef::ExprSlice(node)
6672    }
6673}
6674
6675impl<'a> From<&'a crate::ExprIpyEscapeCommand> for AnyNodeRef<'a> {
6676    fn from(node: &'a crate::ExprIpyEscapeCommand) -> AnyNodeRef<'a> {
6677        AnyNodeRef::ExprIpyEscapeCommand(node)
6678    }
6679}
6680
6681impl<'a> From<&'a crate::ExceptHandlerExceptHandler> for AnyNodeRef<'a> {
6682    fn from(node: &'a crate::ExceptHandlerExceptHandler) -> AnyNodeRef<'a> {
6683        AnyNodeRef::ExceptHandlerExceptHandler(node)
6684    }
6685}
6686
6687impl<'a> From<&'a crate::InterpolatedElement> for AnyNodeRef<'a> {
6688    fn from(node: &'a crate::InterpolatedElement) -> AnyNodeRef<'a> {
6689        AnyNodeRef::InterpolatedElement(node)
6690    }
6691}
6692
6693impl<'a> From<&'a crate::InterpolatedStringLiteralElement> for AnyNodeRef<'a> {
6694    fn from(node: &'a crate::InterpolatedStringLiteralElement) -> AnyNodeRef<'a> {
6695        AnyNodeRef::InterpolatedStringLiteralElement(node)
6696    }
6697}
6698
6699impl<'a> From<&'a crate::PatternMatchValue> for AnyNodeRef<'a> {
6700    fn from(node: &'a crate::PatternMatchValue) -> AnyNodeRef<'a> {
6701        AnyNodeRef::PatternMatchValue(node)
6702    }
6703}
6704
6705impl<'a> From<&'a crate::PatternMatchSingleton> for AnyNodeRef<'a> {
6706    fn from(node: &'a crate::PatternMatchSingleton) -> AnyNodeRef<'a> {
6707        AnyNodeRef::PatternMatchSingleton(node)
6708    }
6709}
6710
6711impl<'a> From<&'a crate::PatternMatchSequence> for AnyNodeRef<'a> {
6712    fn from(node: &'a crate::PatternMatchSequence) -> AnyNodeRef<'a> {
6713        AnyNodeRef::PatternMatchSequence(node)
6714    }
6715}
6716
6717impl<'a> From<&'a crate::PatternMatchMapping> for AnyNodeRef<'a> {
6718    fn from(node: &'a crate::PatternMatchMapping) -> AnyNodeRef<'a> {
6719        AnyNodeRef::PatternMatchMapping(node)
6720    }
6721}
6722
6723impl<'a> From<&'a crate::PatternMatchClass> for AnyNodeRef<'a> {
6724    fn from(node: &'a crate::PatternMatchClass) -> AnyNodeRef<'a> {
6725        AnyNodeRef::PatternMatchClass(node)
6726    }
6727}
6728
6729impl<'a> From<&'a crate::PatternMatchStar> for AnyNodeRef<'a> {
6730    fn from(node: &'a crate::PatternMatchStar) -> AnyNodeRef<'a> {
6731        AnyNodeRef::PatternMatchStar(node)
6732    }
6733}
6734
6735impl<'a> From<&'a crate::PatternMatchAs> for AnyNodeRef<'a> {
6736    fn from(node: &'a crate::PatternMatchAs) -> AnyNodeRef<'a> {
6737        AnyNodeRef::PatternMatchAs(node)
6738    }
6739}
6740
6741impl<'a> From<&'a crate::PatternMatchOr> for AnyNodeRef<'a> {
6742    fn from(node: &'a crate::PatternMatchOr) -> AnyNodeRef<'a> {
6743        AnyNodeRef::PatternMatchOr(node)
6744    }
6745}
6746
6747impl<'a> From<&'a crate::TypeParamTypeVar> for AnyNodeRef<'a> {
6748    fn from(node: &'a crate::TypeParamTypeVar) -> AnyNodeRef<'a> {
6749        AnyNodeRef::TypeParamTypeVar(node)
6750    }
6751}
6752
6753impl<'a> From<&'a crate::TypeParamTypeVarTuple> for AnyNodeRef<'a> {
6754    fn from(node: &'a crate::TypeParamTypeVarTuple) -> AnyNodeRef<'a> {
6755        AnyNodeRef::TypeParamTypeVarTuple(node)
6756    }
6757}
6758
6759impl<'a> From<&'a crate::TypeParamParamSpec> for AnyNodeRef<'a> {
6760    fn from(node: &'a crate::TypeParamParamSpec) -> AnyNodeRef<'a> {
6761        AnyNodeRef::TypeParamParamSpec(node)
6762    }
6763}
6764
6765impl<'a> From<&'a crate::InterpolatedStringFormatSpec> for AnyNodeRef<'a> {
6766    fn from(node: &'a crate::InterpolatedStringFormatSpec) -> AnyNodeRef<'a> {
6767        AnyNodeRef::InterpolatedStringFormatSpec(node)
6768    }
6769}
6770
6771impl<'a> From<&'a crate::PatternArguments> for AnyNodeRef<'a> {
6772    fn from(node: &'a crate::PatternArguments) -> AnyNodeRef<'a> {
6773        AnyNodeRef::PatternArguments(node)
6774    }
6775}
6776
6777impl<'a> From<&'a crate::PatternKeyword> for AnyNodeRef<'a> {
6778    fn from(node: &'a crate::PatternKeyword) -> AnyNodeRef<'a> {
6779        AnyNodeRef::PatternKeyword(node)
6780    }
6781}
6782
6783impl<'a> From<&'a crate::Comprehension> for AnyNodeRef<'a> {
6784    fn from(node: &'a crate::Comprehension) -> AnyNodeRef<'a> {
6785        AnyNodeRef::Comprehension(node)
6786    }
6787}
6788
6789impl<'a> From<&'a crate::Arguments> for AnyNodeRef<'a> {
6790    fn from(node: &'a crate::Arguments) -> AnyNodeRef<'a> {
6791        AnyNodeRef::Arguments(node)
6792    }
6793}
6794
6795impl<'a> From<&'a crate::Parameters> for AnyNodeRef<'a> {
6796    fn from(node: &'a crate::Parameters) -> AnyNodeRef<'a> {
6797        AnyNodeRef::Parameters(node)
6798    }
6799}
6800
6801impl<'a> From<&'a crate::Parameter> for AnyNodeRef<'a> {
6802    fn from(node: &'a crate::Parameter) -> AnyNodeRef<'a> {
6803        AnyNodeRef::Parameter(node)
6804    }
6805}
6806
6807impl<'a> From<&'a crate::ParameterWithDefault> for AnyNodeRef<'a> {
6808    fn from(node: &'a crate::ParameterWithDefault) -> AnyNodeRef<'a> {
6809        AnyNodeRef::ParameterWithDefault(node)
6810    }
6811}
6812
6813impl<'a> From<&'a crate::Keyword> for AnyNodeRef<'a> {
6814    fn from(node: &'a crate::Keyword) -> AnyNodeRef<'a> {
6815        AnyNodeRef::Keyword(node)
6816    }
6817}
6818
6819impl<'a> From<&'a crate::Alias> for AnyNodeRef<'a> {
6820    fn from(node: &'a crate::Alias) -> AnyNodeRef<'a> {
6821        AnyNodeRef::Alias(node)
6822    }
6823}
6824
6825impl<'a> From<&'a crate::WithItem> for AnyNodeRef<'a> {
6826    fn from(node: &'a crate::WithItem) -> AnyNodeRef<'a> {
6827        AnyNodeRef::WithItem(node)
6828    }
6829}
6830
6831impl<'a> From<&'a crate::MatchCase> for AnyNodeRef<'a> {
6832    fn from(node: &'a crate::MatchCase) -> AnyNodeRef<'a> {
6833        AnyNodeRef::MatchCase(node)
6834    }
6835}
6836
6837impl<'a> From<&'a crate::Decorator> for AnyNodeRef<'a> {
6838    fn from(node: &'a crate::Decorator) -> AnyNodeRef<'a> {
6839        AnyNodeRef::Decorator(node)
6840    }
6841}
6842
6843impl<'a> From<&'a crate::ElifElseClause> for AnyNodeRef<'a> {
6844    fn from(node: &'a crate::ElifElseClause) -> AnyNodeRef<'a> {
6845        AnyNodeRef::ElifElseClause(node)
6846    }
6847}
6848
6849impl<'a> From<&'a crate::TypeParams> for AnyNodeRef<'a> {
6850    fn from(node: &'a crate::TypeParams) -> AnyNodeRef<'a> {
6851        AnyNodeRef::TypeParams(node)
6852    }
6853}
6854
6855impl<'a> From<&'a crate::FString> for AnyNodeRef<'a> {
6856    fn from(node: &'a crate::FString) -> AnyNodeRef<'a> {
6857        AnyNodeRef::FString(node)
6858    }
6859}
6860
6861impl<'a> From<&'a crate::TString> for AnyNodeRef<'a> {
6862    fn from(node: &'a crate::TString) -> AnyNodeRef<'a> {
6863        AnyNodeRef::TString(node)
6864    }
6865}
6866
6867impl<'a> From<&'a crate::StringLiteral> for AnyNodeRef<'a> {
6868    fn from(node: &'a crate::StringLiteral) -> AnyNodeRef<'a> {
6869        AnyNodeRef::StringLiteral(node)
6870    }
6871}
6872
6873impl<'a> From<&'a crate::BytesLiteral> for AnyNodeRef<'a> {
6874    fn from(node: &'a crate::BytesLiteral) -> AnyNodeRef<'a> {
6875        AnyNodeRef::BytesLiteral(node)
6876    }
6877}
6878
6879impl<'a> From<&'a crate::Identifier> for AnyNodeRef<'a> {
6880    fn from(node: &'a crate::Identifier) -> AnyNodeRef<'a> {
6881        AnyNodeRef::Identifier(node)
6882    }
6883}
6884
6885impl ruff_text_size::Ranged for AnyNodeRef<'_> {
6886    fn range(&self) -> ruff_text_size::TextRange {
6887        match self {
6888            AnyNodeRef::ModModule(node) => node.range(),
6889            AnyNodeRef::ModExpression(node) => node.range(),
6890            AnyNodeRef::StmtFunctionDef(node) => node.range(),
6891            AnyNodeRef::StmtClassDef(node) => node.range(),
6892            AnyNodeRef::StmtReturn(node) => node.range(),
6893            AnyNodeRef::StmtDelete(node) => node.range(),
6894            AnyNodeRef::StmtTypeAlias(node) => node.range(),
6895            AnyNodeRef::StmtAssign(node) => node.range(),
6896            AnyNodeRef::StmtAugAssign(node) => node.range(),
6897            AnyNodeRef::StmtAnnAssign(node) => node.range(),
6898            AnyNodeRef::StmtFor(node) => node.range(),
6899            AnyNodeRef::StmtWhile(node) => node.range(),
6900            AnyNodeRef::StmtIf(node) => node.range(),
6901            AnyNodeRef::StmtWith(node) => node.range(),
6902            AnyNodeRef::StmtMatch(node) => node.range(),
6903            AnyNodeRef::StmtRaise(node) => node.range(),
6904            AnyNodeRef::StmtTry(node) => node.range(),
6905            AnyNodeRef::StmtAssert(node) => node.range(),
6906            AnyNodeRef::StmtImport(node) => node.range(),
6907            AnyNodeRef::StmtImportFrom(node) => node.range(),
6908            AnyNodeRef::StmtGlobal(node) => node.range(),
6909            AnyNodeRef::StmtNonlocal(node) => node.range(),
6910            AnyNodeRef::StmtExpr(node) => node.range(),
6911            AnyNodeRef::StmtPass(node) => node.range(),
6912            AnyNodeRef::StmtBreak(node) => node.range(),
6913            AnyNodeRef::StmtContinue(node) => node.range(),
6914            AnyNodeRef::StmtIpyEscapeCommand(node) => node.range(),
6915            AnyNodeRef::ExprBoolOp(node) => node.range(),
6916            AnyNodeRef::ExprNamed(node) => node.range(),
6917            AnyNodeRef::ExprBinOp(node) => node.range(),
6918            AnyNodeRef::ExprUnaryOp(node) => node.range(),
6919            AnyNodeRef::ExprLambda(node) => node.range(),
6920            AnyNodeRef::ExprIf(node) => node.range(),
6921            AnyNodeRef::ExprDict(node) => node.range(),
6922            AnyNodeRef::ExprSet(node) => node.range(),
6923            AnyNodeRef::ExprListComp(node) => node.range(),
6924            AnyNodeRef::ExprSetComp(node) => node.range(),
6925            AnyNodeRef::ExprDictComp(node) => node.range(),
6926            AnyNodeRef::ExprGenerator(node) => node.range(),
6927            AnyNodeRef::ExprAwait(node) => node.range(),
6928            AnyNodeRef::ExprYield(node) => node.range(),
6929            AnyNodeRef::ExprYieldFrom(node) => node.range(),
6930            AnyNodeRef::ExprCompare(node) => node.range(),
6931            AnyNodeRef::ExprCall(node) => node.range(),
6932            AnyNodeRef::ExprFString(node) => node.range(),
6933            AnyNodeRef::ExprTString(node) => node.range(),
6934            AnyNodeRef::ExprStringLiteral(node) => node.range(),
6935            AnyNodeRef::ExprBytesLiteral(node) => node.range(),
6936            AnyNodeRef::ExprNumberLiteral(node) => node.range(),
6937            AnyNodeRef::ExprBooleanLiteral(node) => node.range(),
6938            AnyNodeRef::ExprNoneLiteral(node) => node.range(),
6939            AnyNodeRef::ExprEllipsisLiteral(node) => node.range(),
6940            AnyNodeRef::ExprAttribute(node) => node.range(),
6941            AnyNodeRef::ExprSubscript(node) => node.range(),
6942            AnyNodeRef::ExprStarred(node) => node.range(),
6943            AnyNodeRef::ExprName(node) => node.range(),
6944            AnyNodeRef::ExprList(node) => node.range(),
6945            AnyNodeRef::ExprTuple(node) => node.range(),
6946            AnyNodeRef::ExprSlice(node) => node.range(),
6947            AnyNodeRef::ExprIpyEscapeCommand(node) => node.range(),
6948            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.range(),
6949            AnyNodeRef::InterpolatedElement(node) => node.range(),
6950            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.range(),
6951            AnyNodeRef::PatternMatchValue(node) => node.range(),
6952            AnyNodeRef::PatternMatchSingleton(node) => node.range(),
6953            AnyNodeRef::PatternMatchSequence(node) => node.range(),
6954            AnyNodeRef::PatternMatchMapping(node) => node.range(),
6955            AnyNodeRef::PatternMatchClass(node) => node.range(),
6956            AnyNodeRef::PatternMatchStar(node) => node.range(),
6957            AnyNodeRef::PatternMatchAs(node) => node.range(),
6958            AnyNodeRef::PatternMatchOr(node) => node.range(),
6959            AnyNodeRef::TypeParamTypeVar(node) => node.range(),
6960            AnyNodeRef::TypeParamTypeVarTuple(node) => node.range(),
6961            AnyNodeRef::TypeParamParamSpec(node) => node.range(),
6962            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.range(),
6963            AnyNodeRef::PatternArguments(node) => node.range(),
6964            AnyNodeRef::PatternKeyword(node) => node.range(),
6965            AnyNodeRef::Comprehension(node) => node.range(),
6966            AnyNodeRef::Arguments(node) => node.range(),
6967            AnyNodeRef::Parameters(node) => node.range(),
6968            AnyNodeRef::Parameter(node) => node.range(),
6969            AnyNodeRef::ParameterWithDefault(node) => node.range(),
6970            AnyNodeRef::Keyword(node) => node.range(),
6971            AnyNodeRef::Alias(node) => node.range(),
6972            AnyNodeRef::WithItem(node) => node.range(),
6973            AnyNodeRef::MatchCase(node) => node.range(),
6974            AnyNodeRef::Decorator(node) => node.range(),
6975            AnyNodeRef::ElifElseClause(node) => node.range(),
6976            AnyNodeRef::TypeParams(node) => node.range(),
6977            AnyNodeRef::FString(node) => node.range(),
6978            AnyNodeRef::TString(node) => node.range(),
6979            AnyNodeRef::StringLiteral(node) => node.range(),
6980            AnyNodeRef::BytesLiteral(node) => node.range(),
6981            AnyNodeRef::Identifier(node) => node.range(),
6982        }
6983    }
6984}
6985
6986impl crate::HasNodeIndex for AnyNodeRef<'_> {
6987    fn node_index(&self) -> &crate::AtomicNodeIndex {
6988        match self {
6989            AnyNodeRef::ModModule(node) => node.node_index(),
6990            AnyNodeRef::ModExpression(node) => node.node_index(),
6991            AnyNodeRef::StmtFunctionDef(node) => node.node_index(),
6992            AnyNodeRef::StmtClassDef(node) => node.node_index(),
6993            AnyNodeRef::StmtReturn(node) => node.node_index(),
6994            AnyNodeRef::StmtDelete(node) => node.node_index(),
6995            AnyNodeRef::StmtTypeAlias(node) => node.node_index(),
6996            AnyNodeRef::StmtAssign(node) => node.node_index(),
6997            AnyNodeRef::StmtAugAssign(node) => node.node_index(),
6998            AnyNodeRef::StmtAnnAssign(node) => node.node_index(),
6999            AnyNodeRef::StmtFor(node) => node.node_index(),
7000            AnyNodeRef::StmtWhile(node) => node.node_index(),
7001            AnyNodeRef::StmtIf(node) => node.node_index(),
7002            AnyNodeRef::StmtWith(node) => node.node_index(),
7003            AnyNodeRef::StmtMatch(node) => node.node_index(),
7004            AnyNodeRef::StmtRaise(node) => node.node_index(),
7005            AnyNodeRef::StmtTry(node) => node.node_index(),
7006            AnyNodeRef::StmtAssert(node) => node.node_index(),
7007            AnyNodeRef::StmtImport(node) => node.node_index(),
7008            AnyNodeRef::StmtImportFrom(node) => node.node_index(),
7009            AnyNodeRef::StmtGlobal(node) => node.node_index(),
7010            AnyNodeRef::StmtNonlocal(node) => node.node_index(),
7011            AnyNodeRef::StmtExpr(node) => node.node_index(),
7012            AnyNodeRef::StmtPass(node) => node.node_index(),
7013            AnyNodeRef::StmtBreak(node) => node.node_index(),
7014            AnyNodeRef::StmtContinue(node) => node.node_index(),
7015            AnyNodeRef::StmtIpyEscapeCommand(node) => node.node_index(),
7016            AnyNodeRef::ExprBoolOp(node) => node.node_index(),
7017            AnyNodeRef::ExprNamed(node) => node.node_index(),
7018            AnyNodeRef::ExprBinOp(node) => node.node_index(),
7019            AnyNodeRef::ExprUnaryOp(node) => node.node_index(),
7020            AnyNodeRef::ExprLambda(node) => node.node_index(),
7021            AnyNodeRef::ExprIf(node) => node.node_index(),
7022            AnyNodeRef::ExprDict(node) => node.node_index(),
7023            AnyNodeRef::ExprSet(node) => node.node_index(),
7024            AnyNodeRef::ExprListComp(node) => node.node_index(),
7025            AnyNodeRef::ExprSetComp(node) => node.node_index(),
7026            AnyNodeRef::ExprDictComp(node) => node.node_index(),
7027            AnyNodeRef::ExprGenerator(node) => node.node_index(),
7028            AnyNodeRef::ExprAwait(node) => node.node_index(),
7029            AnyNodeRef::ExprYield(node) => node.node_index(),
7030            AnyNodeRef::ExprYieldFrom(node) => node.node_index(),
7031            AnyNodeRef::ExprCompare(node) => node.node_index(),
7032            AnyNodeRef::ExprCall(node) => node.node_index(),
7033            AnyNodeRef::ExprFString(node) => node.node_index(),
7034            AnyNodeRef::ExprTString(node) => node.node_index(),
7035            AnyNodeRef::ExprStringLiteral(node) => node.node_index(),
7036            AnyNodeRef::ExprBytesLiteral(node) => node.node_index(),
7037            AnyNodeRef::ExprNumberLiteral(node) => node.node_index(),
7038            AnyNodeRef::ExprBooleanLiteral(node) => node.node_index(),
7039            AnyNodeRef::ExprNoneLiteral(node) => node.node_index(),
7040            AnyNodeRef::ExprEllipsisLiteral(node) => node.node_index(),
7041            AnyNodeRef::ExprAttribute(node) => node.node_index(),
7042            AnyNodeRef::ExprSubscript(node) => node.node_index(),
7043            AnyNodeRef::ExprStarred(node) => node.node_index(),
7044            AnyNodeRef::ExprName(node) => node.node_index(),
7045            AnyNodeRef::ExprList(node) => node.node_index(),
7046            AnyNodeRef::ExprTuple(node) => node.node_index(),
7047            AnyNodeRef::ExprSlice(node) => node.node_index(),
7048            AnyNodeRef::ExprIpyEscapeCommand(node) => node.node_index(),
7049            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.node_index(),
7050            AnyNodeRef::InterpolatedElement(node) => node.node_index(),
7051            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.node_index(),
7052            AnyNodeRef::PatternMatchValue(node) => node.node_index(),
7053            AnyNodeRef::PatternMatchSingleton(node) => node.node_index(),
7054            AnyNodeRef::PatternMatchSequence(node) => node.node_index(),
7055            AnyNodeRef::PatternMatchMapping(node) => node.node_index(),
7056            AnyNodeRef::PatternMatchClass(node) => node.node_index(),
7057            AnyNodeRef::PatternMatchStar(node) => node.node_index(),
7058            AnyNodeRef::PatternMatchAs(node) => node.node_index(),
7059            AnyNodeRef::PatternMatchOr(node) => node.node_index(),
7060            AnyNodeRef::TypeParamTypeVar(node) => node.node_index(),
7061            AnyNodeRef::TypeParamTypeVarTuple(node) => node.node_index(),
7062            AnyNodeRef::TypeParamParamSpec(node) => node.node_index(),
7063            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.node_index(),
7064            AnyNodeRef::PatternArguments(node) => node.node_index(),
7065            AnyNodeRef::PatternKeyword(node) => node.node_index(),
7066            AnyNodeRef::Comprehension(node) => node.node_index(),
7067            AnyNodeRef::Arguments(node) => node.node_index(),
7068            AnyNodeRef::Parameters(node) => node.node_index(),
7069            AnyNodeRef::Parameter(node) => node.node_index(),
7070            AnyNodeRef::ParameterWithDefault(node) => node.node_index(),
7071            AnyNodeRef::Keyword(node) => node.node_index(),
7072            AnyNodeRef::Alias(node) => node.node_index(),
7073            AnyNodeRef::WithItem(node) => node.node_index(),
7074            AnyNodeRef::MatchCase(node) => node.node_index(),
7075            AnyNodeRef::Decorator(node) => node.node_index(),
7076            AnyNodeRef::ElifElseClause(node) => node.node_index(),
7077            AnyNodeRef::TypeParams(node) => node.node_index(),
7078            AnyNodeRef::FString(node) => node.node_index(),
7079            AnyNodeRef::TString(node) => node.node_index(),
7080            AnyNodeRef::StringLiteral(node) => node.node_index(),
7081            AnyNodeRef::BytesLiteral(node) => node.node_index(),
7082            AnyNodeRef::Identifier(node) => node.node_index(),
7083        }
7084    }
7085}
7086
7087impl AnyNodeRef<'_> {
7088    pub fn as_ptr(&self) -> std::ptr::NonNull<()> {
7089        match self {
7090            AnyNodeRef::ModModule(node) => std::ptr::NonNull::from(*node).cast(),
7091            AnyNodeRef::ModExpression(node) => std::ptr::NonNull::from(*node).cast(),
7092            AnyNodeRef::StmtFunctionDef(node) => std::ptr::NonNull::from(*node).cast(),
7093            AnyNodeRef::StmtClassDef(node) => std::ptr::NonNull::from(*node).cast(),
7094            AnyNodeRef::StmtReturn(node) => std::ptr::NonNull::from(*node).cast(),
7095            AnyNodeRef::StmtDelete(node) => std::ptr::NonNull::from(*node).cast(),
7096            AnyNodeRef::StmtTypeAlias(node) => std::ptr::NonNull::from(*node).cast(),
7097            AnyNodeRef::StmtAssign(node) => std::ptr::NonNull::from(*node).cast(),
7098            AnyNodeRef::StmtAugAssign(node) => std::ptr::NonNull::from(*node).cast(),
7099            AnyNodeRef::StmtAnnAssign(node) => std::ptr::NonNull::from(*node).cast(),
7100            AnyNodeRef::StmtFor(node) => std::ptr::NonNull::from(*node).cast(),
7101            AnyNodeRef::StmtWhile(node) => std::ptr::NonNull::from(*node).cast(),
7102            AnyNodeRef::StmtIf(node) => std::ptr::NonNull::from(*node).cast(),
7103            AnyNodeRef::StmtWith(node) => std::ptr::NonNull::from(*node).cast(),
7104            AnyNodeRef::StmtMatch(node) => std::ptr::NonNull::from(*node).cast(),
7105            AnyNodeRef::StmtRaise(node) => std::ptr::NonNull::from(*node).cast(),
7106            AnyNodeRef::StmtTry(node) => std::ptr::NonNull::from(*node).cast(),
7107            AnyNodeRef::StmtAssert(node) => std::ptr::NonNull::from(*node).cast(),
7108            AnyNodeRef::StmtImport(node) => std::ptr::NonNull::from(*node).cast(),
7109            AnyNodeRef::StmtImportFrom(node) => std::ptr::NonNull::from(*node).cast(),
7110            AnyNodeRef::StmtGlobal(node) => std::ptr::NonNull::from(*node).cast(),
7111            AnyNodeRef::StmtNonlocal(node) => std::ptr::NonNull::from(*node).cast(),
7112            AnyNodeRef::StmtExpr(node) => std::ptr::NonNull::from(*node).cast(),
7113            AnyNodeRef::StmtPass(node) => std::ptr::NonNull::from(*node).cast(),
7114            AnyNodeRef::StmtBreak(node) => std::ptr::NonNull::from(*node).cast(),
7115            AnyNodeRef::StmtContinue(node) => std::ptr::NonNull::from(*node).cast(),
7116            AnyNodeRef::StmtIpyEscapeCommand(node) => std::ptr::NonNull::from(*node).cast(),
7117            AnyNodeRef::ExprBoolOp(node) => std::ptr::NonNull::from(*node).cast(),
7118            AnyNodeRef::ExprNamed(node) => std::ptr::NonNull::from(*node).cast(),
7119            AnyNodeRef::ExprBinOp(node) => std::ptr::NonNull::from(*node).cast(),
7120            AnyNodeRef::ExprUnaryOp(node) => std::ptr::NonNull::from(*node).cast(),
7121            AnyNodeRef::ExprLambda(node) => std::ptr::NonNull::from(*node).cast(),
7122            AnyNodeRef::ExprIf(node) => std::ptr::NonNull::from(*node).cast(),
7123            AnyNodeRef::ExprDict(node) => std::ptr::NonNull::from(*node).cast(),
7124            AnyNodeRef::ExprSet(node) => std::ptr::NonNull::from(*node).cast(),
7125            AnyNodeRef::ExprListComp(node) => std::ptr::NonNull::from(*node).cast(),
7126            AnyNodeRef::ExprSetComp(node) => std::ptr::NonNull::from(*node).cast(),
7127            AnyNodeRef::ExprDictComp(node) => std::ptr::NonNull::from(*node).cast(),
7128            AnyNodeRef::ExprGenerator(node) => std::ptr::NonNull::from(*node).cast(),
7129            AnyNodeRef::ExprAwait(node) => std::ptr::NonNull::from(*node).cast(),
7130            AnyNodeRef::ExprYield(node) => std::ptr::NonNull::from(*node).cast(),
7131            AnyNodeRef::ExprYieldFrom(node) => std::ptr::NonNull::from(*node).cast(),
7132            AnyNodeRef::ExprCompare(node) => std::ptr::NonNull::from(*node).cast(),
7133            AnyNodeRef::ExprCall(node) => std::ptr::NonNull::from(*node).cast(),
7134            AnyNodeRef::ExprFString(node) => std::ptr::NonNull::from(*node).cast(),
7135            AnyNodeRef::ExprTString(node) => std::ptr::NonNull::from(*node).cast(),
7136            AnyNodeRef::ExprStringLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7137            AnyNodeRef::ExprBytesLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7138            AnyNodeRef::ExprNumberLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7139            AnyNodeRef::ExprBooleanLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7140            AnyNodeRef::ExprNoneLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7141            AnyNodeRef::ExprEllipsisLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7142            AnyNodeRef::ExprAttribute(node) => std::ptr::NonNull::from(*node).cast(),
7143            AnyNodeRef::ExprSubscript(node) => std::ptr::NonNull::from(*node).cast(),
7144            AnyNodeRef::ExprStarred(node) => std::ptr::NonNull::from(*node).cast(),
7145            AnyNodeRef::ExprName(node) => std::ptr::NonNull::from(*node).cast(),
7146            AnyNodeRef::ExprList(node) => std::ptr::NonNull::from(*node).cast(),
7147            AnyNodeRef::ExprTuple(node) => std::ptr::NonNull::from(*node).cast(),
7148            AnyNodeRef::ExprSlice(node) => std::ptr::NonNull::from(*node).cast(),
7149            AnyNodeRef::ExprIpyEscapeCommand(node) => std::ptr::NonNull::from(*node).cast(),
7150            AnyNodeRef::ExceptHandlerExceptHandler(node) => std::ptr::NonNull::from(*node).cast(),
7151            AnyNodeRef::InterpolatedElement(node) => std::ptr::NonNull::from(*node).cast(),
7152            AnyNodeRef::InterpolatedStringLiteralElement(node) => {
7153                std::ptr::NonNull::from(*node).cast()
7154            }
7155            AnyNodeRef::PatternMatchValue(node) => std::ptr::NonNull::from(*node).cast(),
7156            AnyNodeRef::PatternMatchSingleton(node) => std::ptr::NonNull::from(*node).cast(),
7157            AnyNodeRef::PatternMatchSequence(node) => std::ptr::NonNull::from(*node).cast(),
7158            AnyNodeRef::PatternMatchMapping(node) => std::ptr::NonNull::from(*node).cast(),
7159            AnyNodeRef::PatternMatchClass(node) => std::ptr::NonNull::from(*node).cast(),
7160            AnyNodeRef::PatternMatchStar(node) => std::ptr::NonNull::from(*node).cast(),
7161            AnyNodeRef::PatternMatchAs(node) => std::ptr::NonNull::from(*node).cast(),
7162            AnyNodeRef::PatternMatchOr(node) => std::ptr::NonNull::from(*node).cast(),
7163            AnyNodeRef::TypeParamTypeVar(node) => std::ptr::NonNull::from(*node).cast(),
7164            AnyNodeRef::TypeParamTypeVarTuple(node) => std::ptr::NonNull::from(*node).cast(),
7165            AnyNodeRef::TypeParamParamSpec(node) => std::ptr::NonNull::from(*node).cast(),
7166            AnyNodeRef::InterpolatedStringFormatSpec(node) => std::ptr::NonNull::from(*node).cast(),
7167            AnyNodeRef::PatternArguments(node) => std::ptr::NonNull::from(*node).cast(),
7168            AnyNodeRef::PatternKeyword(node) => std::ptr::NonNull::from(*node).cast(),
7169            AnyNodeRef::Comprehension(node) => std::ptr::NonNull::from(*node).cast(),
7170            AnyNodeRef::Arguments(node) => std::ptr::NonNull::from(*node).cast(),
7171            AnyNodeRef::Parameters(node) => std::ptr::NonNull::from(*node).cast(),
7172            AnyNodeRef::Parameter(node) => std::ptr::NonNull::from(*node).cast(),
7173            AnyNodeRef::ParameterWithDefault(node) => std::ptr::NonNull::from(*node).cast(),
7174            AnyNodeRef::Keyword(node) => std::ptr::NonNull::from(*node).cast(),
7175            AnyNodeRef::Alias(node) => std::ptr::NonNull::from(*node).cast(),
7176            AnyNodeRef::WithItem(node) => std::ptr::NonNull::from(*node).cast(),
7177            AnyNodeRef::MatchCase(node) => std::ptr::NonNull::from(*node).cast(),
7178            AnyNodeRef::Decorator(node) => std::ptr::NonNull::from(*node).cast(),
7179            AnyNodeRef::ElifElseClause(node) => std::ptr::NonNull::from(*node).cast(),
7180            AnyNodeRef::TypeParams(node) => std::ptr::NonNull::from(*node).cast(),
7181            AnyNodeRef::FString(node) => std::ptr::NonNull::from(*node).cast(),
7182            AnyNodeRef::TString(node) => std::ptr::NonNull::from(*node).cast(),
7183            AnyNodeRef::StringLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7184            AnyNodeRef::BytesLiteral(node) => std::ptr::NonNull::from(*node).cast(),
7185            AnyNodeRef::Identifier(node) => std::ptr::NonNull::from(*node).cast(),
7186        }
7187    }
7188}
7189
7190impl<'a> AnyNodeRef<'a> {
7191    pub fn visit_source_order<'b, V>(self, visitor: &mut V)
7192    where
7193        V: crate::visitor::source_order::SourceOrderVisitor<'b> + ?Sized,
7194        'a: 'b,
7195    {
7196        match self {
7197            AnyNodeRef::ModModule(node) => node.visit_source_order(visitor),
7198            AnyNodeRef::ModExpression(node) => node.visit_source_order(visitor),
7199            AnyNodeRef::StmtFunctionDef(node) => node.visit_source_order(visitor),
7200            AnyNodeRef::StmtClassDef(node) => node.visit_source_order(visitor),
7201            AnyNodeRef::StmtReturn(node) => node.visit_source_order(visitor),
7202            AnyNodeRef::StmtDelete(node) => node.visit_source_order(visitor),
7203            AnyNodeRef::StmtTypeAlias(node) => node.visit_source_order(visitor),
7204            AnyNodeRef::StmtAssign(node) => node.visit_source_order(visitor),
7205            AnyNodeRef::StmtAugAssign(node) => node.visit_source_order(visitor),
7206            AnyNodeRef::StmtAnnAssign(node) => node.visit_source_order(visitor),
7207            AnyNodeRef::StmtFor(node) => node.visit_source_order(visitor),
7208            AnyNodeRef::StmtWhile(node) => node.visit_source_order(visitor),
7209            AnyNodeRef::StmtIf(node) => node.visit_source_order(visitor),
7210            AnyNodeRef::StmtWith(node) => node.visit_source_order(visitor),
7211            AnyNodeRef::StmtMatch(node) => node.visit_source_order(visitor),
7212            AnyNodeRef::StmtRaise(node) => node.visit_source_order(visitor),
7213            AnyNodeRef::StmtTry(node) => node.visit_source_order(visitor),
7214            AnyNodeRef::StmtAssert(node) => node.visit_source_order(visitor),
7215            AnyNodeRef::StmtImport(node) => node.visit_source_order(visitor),
7216            AnyNodeRef::StmtImportFrom(node) => node.visit_source_order(visitor),
7217            AnyNodeRef::StmtGlobal(node) => node.visit_source_order(visitor),
7218            AnyNodeRef::StmtNonlocal(node) => node.visit_source_order(visitor),
7219            AnyNodeRef::StmtExpr(node) => node.visit_source_order(visitor),
7220            AnyNodeRef::StmtPass(node) => node.visit_source_order(visitor),
7221            AnyNodeRef::StmtBreak(node) => node.visit_source_order(visitor),
7222            AnyNodeRef::StmtContinue(node) => node.visit_source_order(visitor),
7223            AnyNodeRef::StmtIpyEscapeCommand(node) => node.visit_source_order(visitor),
7224            AnyNodeRef::ExprBoolOp(node) => node.visit_source_order(visitor),
7225            AnyNodeRef::ExprNamed(node) => node.visit_source_order(visitor),
7226            AnyNodeRef::ExprBinOp(node) => node.visit_source_order(visitor),
7227            AnyNodeRef::ExprUnaryOp(node) => node.visit_source_order(visitor),
7228            AnyNodeRef::ExprLambda(node) => node.visit_source_order(visitor),
7229            AnyNodeRef::ExprIf(node) => node.visit_source_order(visitor),
7230            AnyNodeRef::ExprDict(node) => node.visit_source_order(visitor),
7231            AnyNodeRef::ExprSet(node) => node.visit_source_order(visitor),
7232            AnyNodeRef::ExprListComp(node) => node.visit_source_order(visitor),
7233            AnyNodeRef::ExprSetComp(node) => node.visit_source_order(visitor),
7234            AnyNodeRef::ExprDictComp(node) => node.visit_source_order(visitor),
7235            AnyNodeRef::ExprGenerator(node) => node.visit_source_order(visitor),
7236            AnyNodeRef::ExprAwait(node) => node.visit_source_order(visitor),
7237            AnyNodeRef::ExprYield(node) => node.visit_source_order(visitor),
7238            AnyNodeRef::ExprYieldFrom(node) => node.visit_source_order(visitor),
7239            AnyNodeRef::ExprCompare(node) => node.visit_source_order(visitor),
7240            AnyNodeRef::ExprCall(node) => node.visit_source_order(visitor),
7241            AnyNodeRef::ExprFString(node) => node.visit_source_order(visitor),
7242            AnyNodeRef::ExprTString(node) => node.visit_source_order(visitor),
7243            AnyNodeRef::ExprStringLiteral(node) => node.visit_source_order(visitor),
7244            AnyNodeRef::ExprBytesLiteral(node) => node.visit_source_order(visitor),
7245            AnyNodeRef::ExprNumberLiteral(node) => node.visit_source_order(visitor),
7246            AnyNodeRef::ExprBooleanLiteral(node) => node.visit_source_order(visitor),
7247            AnyNodeRef::ExprNoneLiteral(node) => node.visit_source_order(visitor),
7248            AnyNodeRef::ExprEllipsisLiteral(node) => node.visit_source_order(visitor),
7249            AnyNodeRef::ExprAttribute(node) => node.visit_source_order(visitor),
7250            AnyNodeRef::ExprSubscript(node) => node.visit_source_order(visitor),
7251            AnyNodeRef::ExprStarred(node) => node.visit_source_order(visitor),
7252            AnyNodeRef::ExprName(node) => node.visit_source_order(visitor),
7253            AnyNodeRef::ExprList(node) => node.visit_source_order(visitor),
7254            AnyNodeRef::ExprTuple(node) => node.visit_source_order(visitor),
7255            AnyNodeRef::ExprSlice(node) => node.visit_source_order(visitor),
7256            AnyNodeRef::ExprIpyEscapeCommand(node) => node.visit_source_order(visitor),
7257            AnyNodeRef::ExceptHandlerExceptHandler(node) => node.visit_source_order(visitor),
7258            AnyNodeRef::InterpolatedElement(node) => node.visit_source_order(visitor),
7259            AnyNodeRef::InterpolatedStringLiteralElement(node) => node.visit_source_order(visitor),
7260            AnyNodeRef::PatternMatchValue(node) => node.visit_source_order(visitor),
7261            AnyNodeRef::PatternMatchSingleton(node) => node.visit_source_order(visitor),
7262            AnyNodeRef::PatternMatchSequence(node) => node.visit_source_order(visitor),
7263            AnyNodeRef::PatternMatchMapping(node) => node.visit_source_order(visitor),
7264            AnyNodeRef::PatternMatchClass(node) => node.visit_source_order(visitor),
7265            AnyNodeRef::PatternMatchStar(node) => node.visit_source_order(visitor),
7266            AnyNodeRef::PatternMatchAs(node) => node.visit_source_order(visitor),
7267            AnyNodeRef::PatternMatchOr(node) => node.visit_source_order(visitor),
7268            AnyNodeRef::TypeParamTypeVar(node) => node.visit_source_order(visitor),
7269            AnyNodeRef::TypeParamTypeVarTuple(node) => node.visit_source_order(visitor),
7270            AnyNodeRef::TypeParamParamSpec(node) => node.visit_source_order(visitor),
7271            AnyNodeRef::InterpolatedStringFormatSpec(node) => node.visit_source_order(visitor),
7272            AnyNodeRef::PatternArguments(node) => node.visit_source_order(visitor),
7273            AnyNodeRef::PatternKeyword(node) => node.visit_source_order(visitor),
7274            AnyNodeRef::Comprehension(node) => node.visit_source_order(visitor),
7275            AnyNodeRef::Arguments(node) => node.visit_source_order(visitor),
7276            AnyNodeRef::Parameters(node) => node.visit_source_order(visitor),
7277            AnyNodeRef::Parameter(node) => node.visit_source_order(visitor),
7278            AnyNodeRef::ParameterWithDefault(node) => node.visit_source_order(visitor),
7279            AnyNodeRef::Keyword(node) => node.visit_source_order(visitor),
7280            AnyNodeRef::Alias(node) => node.visit_source_order(visitor),
7281            AnyNodeRef::WithItem(node) => node.visit_source_order(visitor),
7282            AnyNodeRef::MatchCase(node) => node.visit_source_order(visitor),
7283            AnyNodeRef::Decorator(node) => node.visit_source_order(visitor),
7284            AnyNodeRef::ElifElseClause(node) => node.visit_source_order(visitor),
7285            AnyNodeRef::TypeParams(node) => node.visit_source_order(visitor),
7286            AnyNodeRef::FString(node) => node.visit_source_order(visitor),
7287            AnyNodeRef::TString(node) => node.visit_source_order(visitor),
7288            AnyNodeRef::StringLiteral(node) => node.visit_source_order(visitor),
7289            AnyNodeRef::BytesLiteral(node) => node.visit_source_order(visitor),
7290            AnyNodeRef::Identifier(node) => node.visit_source_order(visitor),
7291        }
7292    }
7293}
7294
7295impl AnyNodeRef<'_> {
7296    pub const fn is_module(self) -> bool {
7297        matches!(
7298            self,
7299            AnyNodeRef::ModModule(_) | AnyNodeRef::ModExpression(_)
7300        )
7301    }
7302}
7303
7304impl AnyNodeRef<'_> {
7305    pub const fn is_statement(self) -> bool {
7306        matches!(
7307            self,
7308            AnyNodeRef::StmtFunctionDef(_)
7309                | AnyNodeRef::StmtClassDef(_)
7310                | AnyNodeRef::StmtReturn(_)
7311                | AnyNodeRef::StmtDelete(_)
7312                | AnyNodeRef::StmtTypeAlias(_)
7313                | AnyNodeRef::StmtAssign(_)
7314                | AnyNodeRef::StmtAugAssign(_)
7315                | AnyNodeRef::StmtAnnAssign(_)
7316                | AnyNodeRef::StmtFor(_)
7317                | AnyNodeRef::StmtWhile(_)
7318                | AnyNodeRef::StmtIf(_)
7319                | AnyNodeRef::StmtWith(_)
7320                | AnyNodeRef::StmtMatch(_)
7321                | AnyNodeRef::StmtRaise(_)
7322                | AnyNodeRef::StmtTry(_)
7323                | AnyNodeRef::StmtAssert(_)
7324                | AnyNodeRef::StmtImport(_)
7325                | AnyNodeRef::StmtImportFrom(_)
7326                | AnyNodeRef::StmtGlobal(_)
7327                | AnyNodeRef::StmtNonlocal(_)
7328                | AnyNodeRef::StmtExpr(_)
7329                | AnyNodeRef::StmtPass(_)
7330                | AnyNodeRef::StmtBreak(_)
7331                | AnyNodeRef::StmtContinue(_)
7332                | AnyNodeRef::StmtIpyEscapeCommand(_)
7333        )
7334    }
7335}
7336
7337impl AnyNodeRef<'_> {
7338    pub const fn is_expression(self) -> bool {
7339        matches!(
7340            self,
7341            AnyNodeRef::ExprBoolOp(_)
7342                | AnyNodeRef::ExprNamed(_)
7343                | AnyNodeRef::ExprBinOp(_)
7344                | AnyNodeRef::ExprUnaryOp(_)
7345                | AnyNodeRef::ExprLambda(_)
7346                | AnyNodeRef::ExprIf(_)
7347                | AnyNodeRef::ExprDict(_)
7348                | AnyNodeRef::ExprSet(_)
7349                | AnyNodeRef::ExprListComp(_)
7350                | AnyNodeRef::ExprSetComp(_)
7351                | AnyNodeRef::ExprDictComp(_)
7352                | AnyNodeRef::ExprGenerator(_)
7353                | AnyNodeRef::ExprAwait(_)
7354                | AnyNodeRef::ExprYield(_)
7355                | AnyNodeRef::ExprYieldFrom(_)
7356                | AnyNodeRef::ExprCompare(_)
7357                | AnyNodeRef::ExprCall(_)
7358                | AnyNodeRef::ExprFString(_)
7359                | AnyNodeRef::ExprTString(_)
7360                | AnyNodeRef::ExprStringLiteral(_)
7361                | AnyNodeRef::ExprBytesLiteral(_)
7362                | AnyNodeRef::ExprNumberLiteral(_)
7363                | AnyNodeRef::ExprBooleanLiteral(_)
7364                | AnyNodeRef::ExprNoneLiteral(_)
7365                | AnyNodeRef::ExprEllipsisLiteral(_)
7366                | AnyNodeRef::ExprAttribute(_)
7367                | AnyNodeRef::ExprSubscript(_)
7368                | AnyNodeRef::ExprStarred(_)
7369                | AnyNodeRef::ExprName(_)
7370                | AnyNodeRef::ExprList(_)
7371                | AnyNodeRef::ExprTuple(_)
7372                | AnyNodeRef::ExprSlice(_)
7373                | AnyNodeRef::ExprIpyEscapeCommand(_)
7374        )
7375    }
7376}
7377
7378impl AnyNodeRef<'_> {
7379    pub const fn is_except_handler(self) -> bool {
7380        matches!(self, AnyNodeRef::ExceptHandlerExceptHandler(_))
7381    }
7382}
7383
7384impl AnyNodeRef<'_> {
7385    pub const fn is_interpolated_string_element(self) -> bool {
7386        matches!(
7387            self,
7388            AnyNodeRef::InterpolatedElement(_) | AnyNodeRef::InterpolatedStringLiteralElement(_)
7389        )
7390    }
7391}
7392
7393impl AnyNodeRef<'_> {
7394    pub const fn is_pattern(self) -> bool {
7395        matches!(
7396            self,
7397            AnyNodeRef::PatternMatchValue(_)
7398                | AnyNodeRef::PatternMatchSingleton(_)
7399                | AnyNodeRef::PatternMatchSequence(_)
7400                | AnyNodeRef::PatternMatchMapping(_)
7401                | AnyNodeRef::PatternMatchClass(_)
7402                | AnyNodeRef::PatternMatchStar(_)
7403                | AnyNodeRef::PatternMatchAs(_)
7404                | AnyNodeRef::PatternMatchOr(_)
7405        )
7406    }
7407}
7408
7409impl AnyNodeRef<'_> {
7410    pub const fn is_type_param(self) -> bool {
7411        matches!(
7412            self,
7413            AnyNodeRef::TypeParamTypeVar(_)
7414                | AnyNodeRef::TypeParamTypeVarTuple(_)
7415                | AnyNodeRef::TypeParamParamSpec(_)
7416        )
7417    }
7418}
7419
7420/// An enumeration of all AST nodes.
7421///
7422/// Unlike `AnyNodeRef`, this type does not flatten nested enums, so its variants only
7423/// consist of the "root" AST node types. This is useful as it exposes references to the
7424/// original enums, not just references to their inner values.
7425///
7426/// For example, `AnyRootNodeRef::Mod` contains a reference to the `Mod` enum, while
7427/// `AnyNodeRef` has top-level `AnyNodeRef::ModModule` and `AnyNodeRef::ModExpression`
7428/// variants.
7429#[derive(Copy, Clone, Debug, PartialEq)]
7430#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
7431pub enum AnyRootNodeRef<'a> {
7432    Mod(&'a Mod),
7433    Stmt(&'a Stmt),
7434    Expr(&'a Expr),
7435    ExceptHandler(&'a ExceptHandler),
7436    InterpolatedStringElement(&'a InterpolatedStringElement),
7437    Pattern(&'a Pattern),
7438    TypeParam(&'a TypeParam),
7439    InterpolatedStringFormatSpec(&'a crate::InterpolatedStringFormatSpec),
7440    PatternArguments(&'a crate::PatternArguments),
7441    PatternKeyword(&'a crate::PatternKeyword),
7442    Comprehension(&'a crate::Comprehension),
7443    Arguments(&'a crate::Arguments),
7444    Parameters(&'a crate::Parameters),
7445    Parameter(&'a crate::Parameter),
7446    ParameterWithDefault(&'a crate::ParameterWithDefault),
7447    Keyword(&'a crate::Keyword),
7448    Alias(&'a crate::Alias),
7449    WithItem(&'a crate::WithItem),
7450    MatchCase(&'a crate::MatchCase),
7451    Decorator(&'a crate::Decorator),
7452    ElifElseClause(&'a crate::ElifElseClause),
7453    TypeParams(&'a crate::TypeParams),
7454    FString(&'a crate::FString),
7455    TString(&'a crate::TString),
7456    StringLiteral(&'a crate::StringLiteral),
7457    BytesLiteral(&'a crate::BytesLiteral),
7458    Identifier(&'a crate::Identifier),
7459}
7460
7461/// The unflattened enum or struct type stored by an [`AnyRootNodeRef`].
7462///
7463/// Unlike [`NodeKind`], this does not distinguish variants of root enums such as [`Stmt`]
7464/// and [`Expr`].
7465#[derive(Copy, Clone, Debug, Eq, PartialEq)]
7466#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
7467#[repr(u8)]
7468pub enum RootNodeKind {
7469    Mod,
7470    Stmt,
7471    Expr,
7472    ExceptHandler,
7473    InterpolatedStringElement,
7474    Pattern,
7475    TypeParam,
7476    InterpolatedStringFormatSpec,
7477    PatternArguments,
7478    PatternKeyword,
7479    Comprehension,
7480    Arguments,
7481    Parameters,
7482    Parameter,
7483    ParameterWithDefault,
7484    Keyword,
7485    Alias,
7486    WithItem,
7487    MatchCase,
7488    Decorator,
7489    ElifElseClause,
7490    TypeParams,
7491    FString,
7492    TString,
7493    StringLiteral,
7494    BytesLiteral,
7495    Identifier,
7496}
7497
7498impl RootNodeKind {
7499    /// All root node kinds in discriminant order.
7500    pub const ALL: &'static [Self] = &[
7501        Self::Mod,
7502        Self::Stmt,
7503        Self::Expr,
7504        Self::ExceptHandler,
7505        Self::InterpolatedStringElement,
7506        Self::Pattern,
7507        Self::TypeParam,
7508        Self::InterpolatedStringFormatSpec,
7509        Self::PatternArguments,
7510        Self::PatternKeyword,
7511        Self::Comprehension,
7512        Self::Arguments,
7513        Self::Parameters,
7514        Self::Parameter,
7515        Self::ParameterWithDefault,
7516        Self::Keyword,
7517        Self::Alias,
7518        Self::WithItem,
7519        Self::MatchCase,
7520        Self::Decorator,
7521        Self::ElifElseClause,
7522        Self::TypeParams,
7523        Self::FString,
7524        Self::TString,
7525        Self::StringLiteral,
7526        Self::BytesLiteral,
7527        Self::Identifier,
7528    ];
7529
7530    /// Returns the root node kind with the given discriminant.
7531    #[inline]
7532    pub fn from_u8(value: u8) -> Option<Self> {
7533        match value {
7534            0 => Some(Self::Mod),
7535            1 => Some(Self::Stmt),
7536            2 => Some(Self::Expr),
7537            3 => Some(Self::ExceptHandler),
7538            4 => Some(Self::InterpolatedStringElement),
7539            5 => Some(Self::Pattern),
7540            6 => Some(Self::TypeParam),
7541            7 => Some(Self::InterpolatedStringFormatSpec),
7542            8 => Some(Self::PatternArguments),
7543            9 => Some(Self::PatternKeyword),
7544            10 => Some(Self::Comprehension),
7545            11 => Some(Self::Arguments),
7546            12 => Some(Self::Parameters),
7547            13 => Some(Self::Parameter),
7548            14 => Some(Self::ParameterWithDefault),
7549            15 => Some(Self::Keyword),
7550            16 => Some(Self::Alias),
7551            17 => Some(Self::WithItem),
7552            18 => Some(Self::MatchCase),
7553            19 => Some(Self::Decorator),
7554            20 => Some(Self::ElifElseClause),
7555            21 => Some(Self::TypeParams),
7556            22 => Some(Self::FString),
7557            23 => Some(Self::TString),
7558            24 => Some(Self::StringLiteral),
7559            25 => Some(Self::BytesLiteral),
7560            26 => Some(Self::Identifier),
7561
7562            _ => None,
7563        }
7564    }
7565}
7566
7567impl<'a> From<&'a Mod> for AnyRootNodeRef<'a> {
7568    #[inline]
7569    fn from(node: &'a Mod) -> AnyRootNodeRef<'a> {
7570        AnyRootNodeRef::Mod(node)
7571    }
7572}
7573
7574impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Mod {
7575    type Error = ();
7576    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Mod, ()> {
7577        match node {
7578            AnyRootNodeRef::Mod(node) => Ok(node),
7579            _ => Err(()),
7580        }
7581    }
7582}
7583
7584impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ModModule {
7585    type Error = ();
7586    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ModModule, ()> {
7587        match node {
7588            AnyRootNodeRef::Mod(Mod::Module(node)) => Ok(node),
7589            _ => Err(()),
7590        }
7591    }
7592}
7593
7594impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ModExpression {
7595    type Error = ();
7596    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ModExpression, ()> {
7597        match node {
7598            AnyRootNodeRef::Mod(Mod::Expression(node)) => Ok(node),
7599            _ => Err(()),
7600        }
7601    }
7602}
7603
7604impl<'a> From<&'a Stmt> for AnyRootNodeRef<'a> {
7605    #[inline]
7606    fn from(node: &'a Stmt) -> AnyRootNodeRef<'a> {
7607        AnyRootNodeRef::Stmt(node)
7608    }
7609}
7610
7611impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Stmt {
7612    type Error = ();
7613    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Stmt, ()> {
7614        match node {
7615            AnyRootNodeRef::Stmt(node) => Ok(node),
7616            _ => Err(()),
7617        }
7618    }
7619}
7620
7621impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtFunctionDef {
7622    type Error = ();
7623    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtFunctionDef, ()> {
7624        match node {
7625            AnyRootNodeRef::Stmt(Stmt::FunctionDef(node)) => Ok(node),
7626            _ => Err(()),
7627        }
7628    }
7629}
7630
7631impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtClassDef {
7632    type Error = ();
7633    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtClassDef, ()> {
7634        match node {
7635            AnyRootNodeRef::Stmt(Stmt::ClassDef(node)) => Ok(node),
7636            _ => Err(()),
7637        }
7638    }
7639}
7640
7641impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtReturn {
7642    type Error = ();
7643    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtReturn, ()> {
7644        match node {
7645            AnyRootNodeRef::Stmt(Stmt::Return(node)) => Ok(node),
7646            _ => Err(()),
7647        }
7648    }
7649}
7650
7651impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtDelete {
7652    type Error = ();
7653    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtDelete, ()> {
7654        match node {
7655            AnyRootNodeRef::Stmt(Stmt::Delete(node)) => Ok(node),
7656            _ => Err(()),
7657        }
7658    }
7659}
7660
7661impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtTypeAlias {
7662    type Error = ();
7663    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtTypeAlias, ()> {
7664        match node {
7665            AnyRootNodeRef::Stmt(Stmt::TypeAlias(node)) => Ok(node),
7666            _ => Err(()),
7667        }
7668    }
7669}
7670
7671impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAssign {
7672    type Error = ();
7673    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAssign, ()> {
7674        match node {
7675            AnyRootNodeRef::Stmt(Stmt::Assign(node)) => Ok(node),
7676            _ => Err(()),
7677        }
7678    }
7679}
7680
7681impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAugAssign {
7682    type Error = ();
7683    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAugAssign, ()> {
7684        match node {
7685            AnyRootNodeRef::Stmt(Stmt::AugAssign(node)) => Ok(node),
7686            _ => Err(()),
7687        }
7688    }
7689}
7690
7691impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAnnAssign {
7692    type Error = ();
7693    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAnnAssign, ()> {
7694        match node {
7695            AnyRootNodeRef::Stmt(Stmt::AnnAssign(node)) => Ok(node),
7696            _ => Err(()),
7697        }
7698    }
7699}
7700
7701impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtFor {
7702    type Error = ();
7703    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtFor, ()> {
7704        match node {
7705            AnyRootNodeRef::Stmt(Stmt::For(node)) => Ok(node),
7706            _ => Err(()),
7707        }
7708    }
7709}
7710
7711impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtWhile {
7712    type Error = ();
7713    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtWhile, ()> {
7714        match node {
7715            AnyRootNodeRef::Stmt(Stmt::While(node)) => Ok(node),
7716            _ => Err(()),
7717        }
7718    }
7719}
7720
7721impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtIf {
7722    type Error = ();
7723    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtIf, ()> {
7724        match node {
7725            AnyRootNodeRef::Stmt(Stmt::If(node)) => Ok(node),
7726            _ => Err(()),
7727        }
7728    }
7729}
7730
7731impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtWith {
7732    type Error = ();
7733    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtWith, ()> {
7734        match node {
7735            AnyRootNodeRef::Stmt(Stmt::With(node)) => Ok(node),
7736            _ => Err(()),
7737        }
7738    }
7739}
7740
7741impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtMatch {
7742    type Error = ();
7743    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtMatch, ()> {
7744        match node {
7745            AnyRootNodeRef::Stmt(Stmt::Match(node)) => Ok(node),
7746            _ => Err(()),
7747        }
7748    }
7749}
7750
7751impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtRaise {
7752    type Error = ();
7753    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtRaise, ()> {
7754        match node {
7755            AnyRootNodeRef::Stmt(Stmt::Raise(node)) => Ok(node),
7756            _ => Err(()),
7757        }
7758    }
7759}
7760
7761impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtTry {
7762    type Error = ();
7763    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtTry, ()> {
7764        match node {
7765            AnyRootNodeRef::Stmt(Stmt::Try(node)) => Ok(node),
7766            _ => Err(()),
7767        }
7768    }
7769}
7770
7771impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtAssert {
7772    type Error = ();
7773    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtAssert, ()> {
7774        match node {
7775            AnyRootNodeRef::Stmt(Stmt::Assert(node)) => Ok(node),
7776            _ => Err(()),
7777        }
7778    }
7779}
7780
7781impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtImport {
7782    type Error = ();
7783    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtImport, ()> {
7784        match node {
7785            AnyRootNodeRef::Stmt(Stmt::Import(node)) => Ok(node),
7786            _ => Err(()),
7787        }
7788    }
7789}
7790
7791impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtImportFrom {
7792    type Error = ();
7793    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtImportFrom, ()> {
7794        match node {
7795            AnyRootNodeRef::Stmt(Stmt::ImportFrom(node)) => Ok(node),
7796            _ => Err(()),
7797        }
7798    }
7799}
7800
7801impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtGlobal {
7802    type Error = ();
7803    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtGlobal, ()> {
7804        match node {
7805            AnyRootNodeRef::Stmt(Stmt::Global(node)) => Ok(node),
7806            _ => Err(()),
7807        }
7808    }
7809}
7810
7811impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtNonlocal {
7812    type Error = ();
7813    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtNonlocal, ()> {
7814        match node {
7815            AnyRootNodeRef::Stmt(Stmt::Nonlocal(node)) => Ok(node),
7816            _ => Err(()),
7817        }
7818    }
7819}
7820
7821impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtExpr {
7822    type Error = ();
7823    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtExpr, ()> {
7824        match node {
7825            AnyRootNodeRef::Stmt(Stmt::Expr(node)) => Ok(node),
7826            _ => Err(()),
7827        }
7828    }
7829}
7830
7831impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtPass {
7832    type Error = ();
7833    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtPass, ()> {
7834        match node {
7835            AnyRootNodeRef::Stmt(Stmt::Pass(node)) => Ok(node),
7836            _ => Err(()),
7837        }
7838    }
7839}
7840
7841impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtBreak {
7842    type Error = ();
7843    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtBreak, ()> {
7844        match node {
7845            AnyRootNodeRef::Stmt(Stmt::Break(node)) => Ok(node),
7846            _ => Err(()),
7847        }
7848    }
7849}
7850
7851impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtContinue {
7852    type Error = ();
7853    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtContinue, ()> {
7854        match node {
7855            AnyRootNodeRef::Stmt(Stmt::Continue(node)) => Ok(node),
7856            _ => Err(()),
7857        }
7858    }
7859}
7860
7861impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StmtIpyEscapeCommand {
7862    type Error = ();
7863    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StmtIpyEscapeCommand, ()> {
7864        match node {
7865            AnyRootNodeRef::Stmt(Stmt::IpyEscapeCommand(node)) => Ok(node),
7866            _ => Err(()),
7867        }
7868    }
7869}
7870
7871impl<'a> From<&'a Expr> for AnyRootNodeRef<'a> {
7872    #[inline]
7873    fn from(node: &'a Expr) -> AnyRootNodeRef<'a> {
7874        AnyRootNodeRef::Expr(node)
7875    }
7876}
7877
7878impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Expr {
7879    type Error = ();
7880    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Expr, ()> {
7881        match node {
7882            AnyRootNodeRef::Expr(node) => Ok(node),
7883            _ => Err(()),
7884        }
7885    }
7886}
7887
7888impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBoolOp {
7889    type Error = ();
7890    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBoolOp, ()> {
7891        match node {
7892            AnyRootNodeRef::Expr(Expr::BoolOp(node)) => Ok(node),
7893            _ => Err(()),
7894        }
7895    }
7896}
7897
7898impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNamed {
7899    type Error = ();
7900    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNamed, ()> {
7901        match node {
7902            AnyRootNodeRef::Expr(Expr::Named(node)) => Ok(node),
7903            _ => Err(()),
7904        }
7905    }
7906}
7907
7908impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBinOp {
7909    type Error = ();
7910    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBinOp, ()> {
7911        match node {
7912            AnyRootNodeRef::Expr(Expr::BinOp(node)) => Ok(node),
7913            _ => Err(()),
7914        }
7915    }
7916}
7917
7918impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprUnaryOp {
7919    type Error = ();
7920    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprUnaryOp, ()> {
7921        match node {
7922            AnyRootNodeRef::Expr(Expr::UnaryOp(node)) => Ok(node),
7923            _ => Err(()),
7924        }
7925    }
7926}
7927
7928impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprLambda {
7929    type Error = ();
7930    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprLambda, ()> {
7931        match node {
7932            AnyRootNodeRef::Expr(Expr::Lambda(node)) => Ok(node),
7933            _ => Err(()),
7934        }
7935    }
7936}
7937
7938impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprIf {
7939    type Error = ();
7940    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprIf, ()> {
7941        match node {
7942            AnyRootNodeRef::Expr(Expr::If(node)) => Ok(node),
7943            _ => Err(()),
7944        }
7945    }
7946}
7947
7948impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprDict {
7949    type Error = ();
7950    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprDict, ()> {
7951        match node {
7952            AnyRootNodeRef::Expr(Expr::Dict(node)) => Ok(node),
7953            _ => Err(()),
7954        }
7955    }
7956}
7957
7958impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSet {
7959    type Error = ();
7960    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSet, ()> {
7961        match node {
7962            AnyRootNodeRef::Expr(Expr::Set(node)) => Ok(node),
7963            _ => Err(()),
7964        }
7965    }
7966}
7967
7968impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprListComp {
7969    type Error = ();
7970    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprListComp, ()> {
7971        match node {
7972            AnyRootNodeRef::Expr(Expr::ListComp(node)) => Ok(node),
7973            _ => Err(()),
7974        }
7975    }
7976}
7977
7978impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSetComp {
7979    type Error = ();
7980    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSetComp, ()> {
7981        match node {
7982            AnyRootNodeRef::Expr(Expr::SetComp(node)) => Ok(node),
7983            _ => Err(()),
7984        }
7985    }
7986}
7987
7988impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprDictComp {
7989    type Error = ();
7990    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprDictComp, ()> {
7991        match node {
7992            AnyRootNodeRef::Expr(Expr::DictComp(node)) => Ok(node),
7993            _ => Err(()),
7994        }
7995    }
7996}
7997
7998impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprGenerator {
7999    type Error = ();
8000    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprGenerator, ()> {
8001        match node {
8002            AnyRootNodeRef::Expr(Expr::Generator(node)) => Ok(node),
8003            _ => Err(()),
8004        }
8005    }
8006}
8007
8008impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprAwait {
8009    type Error = ();
8010    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprAwait, ()> {
8011        match node {
8012            AnyRootNodeRef::Expr(Expr::Await(node)) => Ok(node),
8013            _ => Err(()),
8014        }
8015    }
8016}
8017
8018impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprYield {
8019    type Error = ();
8020    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprYield, ()> {
8021        match node {
8022            AnyRootNodeRef::Expr(Expr::Yield(node)) => Ok(node),
8023            _ => Err(()),
8024        }
8025    }
8026}
8027
8028impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprYieldFrom {
8029    type Error = ();
8030    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprYieldFrom, ()> {
8031        match node {
8032            AnyRootNodeRef::Expr(Expr::YieldFrom(node)) => Ok(node),
8033            _ => Err(()),
8034        }
8035    }
8036}
8037
8038impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprCompare {
8039    type Error = ();
8040    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprCompare, ()> {
8041        match node {
8042            AnyRootNodeRef::Expr(Expr::Compare(node)) => Ok(node),
8043            _ => Err(()),
8044        }
8045    }
8046}
8047
8048impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprCall {
8049    type Error = ();
8050    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprCall, ()> {
8051        match node {
8052            AnyRootNodeRef::Expr(Expr::Call(node)) => Ok(node),
8053            _ => Err(()),
8054        }
8055    }
8056}
8057
8058impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprFString {
8059    type Error = ();
8060    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprFString, ()> {
8061        match node {
8062            AnyRootNodeRef::Expr(Expr::FString(node)) => Ok(node),
8063            _ => Err(()),
8064        }
8065    }
8066}
8067
8068impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprTString {
8069    type Error = ();
8070    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprTString, ()> {
8071        match node {
8072            AnyRootNodeRef::Expr(Expr::TString(node)) => Ok(node),
8073            _ => Err(()),
8074        }
8075    }
8076}
8077
8078impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprStringLiteral {
8079    type Error = ();
8080    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprStringLiteral, ()> {
8081        match node {
8082            AnyRootNodeRef::Expr(Expr::StringLiteral(node)) => Ok(node),
8083            _ => Err(()),
8084        }
8085    }
8086}
8087
8088impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBytesLiteral {
8089    type Error = ();
8090    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBytesLiteral, ()> {
8091        match node {
8092            AnyRootNodeRef::Expr(Expr::BytesLiteral(node)) => Ok(node),
8093            _ => Err(()),
8094        }
8095    }
8096}
8097
8098impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNumberLiteral {
8099    type Error = ();
8100    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNumberLiteral, ()> {
8101        match node {
8102            AnyRootNodeRef::Expr(Expr::NumberLiteral(node)) => Ok(node),
8103            _ => Err(()),
8104        }
8105    }
8106}
8107
8108impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprBooleanLiteral {
8109    type Error = ();
8110    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprBooleanLiteral, ()> {
8111        match node {
8112            AnyRootNodeRef::Expr(Expr::BooleanLiteral(node)) => Ok(node),
8113            _ => Err(()),
8114        }
8115    }
8116}
8117
8118impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprNoneLiteral {
8119    type Error = ();
8120    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprNoneLiteral, ()> {
8121        match node {
8122            AnyRootNodeRef::Expr(Expr::NoneLiteral(node)) => Ok(node),
8123            _ => Err(()),
8124        }
8125    }
8126}
8127
8128impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprEllipsisLiteral {
8129    type Error = ();
8130    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprEllipsisLiteral, ()> {
8131        match node {
8132            AnyRootNodeRef::Expr(Expr::EllipsisLiteral(node)) => Ok(node),
8133            _ => Err(()),
8134        }
8135    }
8136}
8137
8138impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprAttribute {
8139    type Error = ();
8140    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprAttribute, ()> {
8141        match node {
8142            AnyRootNodeRef::Expr(Expr::Attribute(node)) => Ok(node),
8143            _ => Err(()),
8144        }
8145    }
8146}
8147
8148impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSubscript {
8149    type Error = ();
8150    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSubscript, ()> {
8151        match node {
8152            AnyRootNodeRef::Expr(Expr::Subscript(node)) => Ok(node),
8153            _ => Err(()),
8154        }
8155    }
8156}
8157
8158impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprStarred {
8159    type Error = ();
8160    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprStarred, ()> {
8161        match node {
8162            AnyRootNodeRef::Expr(Expr::Starred(node)) => Ok(node),
8163            _ => Err(()),
8164        }
8165    }
8166}
8167
8168impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprName {
8169    type Error = ();
8170    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprName, ()> {
8171        match node {
8172            AnyRootNodeRef::Expr(Expr::Name(node)) => Ok(node),
8173            _ => Err(()),
8174        }
8175    }
8176}
8177
8178impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprList {
8179    type Error = ();
8180    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprList, ()> {
8181        match node {
8182            AnyRootNodeRef::Expr(Expr::List(node)) => Ok(node),
8183            _ => Err(()),
8184        }
8185    }
8186}
8187
8188impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprTuple {
8189    type Error = ();
8190    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprTuple, ()> {
8191        match node {
8192            AnyRootNodeRef::Expr(Expr::Tuple(node)) => Ok(node),
8193            _ => Err(()),
8194        }
8195    }
8196}
8197
8198impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprSlice {
8199    type Error = ();
8200    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprSlice, ()> {
8201        match node {
8202            AnyRootNodeRef::Expr(Expr::Slice(node)) => Ok(node),
8203            _ => Err(()),
8204        }
8205    }
8206}
8207
8208impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExprIpyEscapeCommand {
8209    type Error = ();
8210    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExprIpyEscapeCommand, ()> {
8211        match node {
8212            AnyRootNodeRef::Expr(Expr::IpyEscapeCommand(node)) => Ok(node),
8213            _ => Err(()),
8214        }
8215    }
8216}
8217
8218impl<'a> From<&'a ExceptHandler> for AnyRootNodeRef<'a> {
8219    #[inline]
8220    fn from(node: &'a ExceptHandler) -> AnyRootNodeRef<'a> {
8221        AnyRootNodeRef::ExceptHandler(node)
8222    }
8223}
8224
8225impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a ExceptHandler {
8226    type Error = ();
8227    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a ExceptHandler, ()> {
8228        match node {
8229            AnyRootNodeRef::ExceptHandler(node) => Ok(node),
8230            _ => Err(()),
8231        }
8232    }
8233}
8234
8235impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ExceptHandlerExceptHandler {
8236    type Error = ();
8237    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ExceptHandlerExceptHandler, ()> {
8238        match node {
8239            AnyRootNodeRef::ExceptHandler(ExceptHandler::ExceptHandler(node)) => Ok(node),
8240            _ => Err(()),
8241        }
8242    }
8243}
8244
8245impl<'a> From<&'a InterpolatedStringElement> for AnyRootNodeRef<'a> {
8246    #[inline]
8247    fn from(node: &'a InterpolatedStringElement) -> AnyRootNodeRef<'a> {
8248        AnyRootNodeRef::InterpolatedStringElement(node)
8249    }
8250}
8251
8252impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a InterpolatedStringElement {
8253    type Error = ();
8254    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a InterpolatedStringElement, ()> {
8255        match node {
8256            AnyRootNodeRef::InterpolatedStringElement(node) => Ok(node),
8257            _ => Err(()),
8258        }
8259    }
8260}
8261
8262impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedElement {
8263    type Error = ();
8264    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::InterpolatedElement, ()> {
8265        match node {
8266            AnyRootNodeRef::InterpolatedStringElement(
8267                InterpolatedStringElement::Interpolation(node),
8268            ) => Ok(node),
8269            _ => Err(()),
8270        }
8271    }
8272}
8273
8274impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedStringLiteralElement {
8275    type Error = ();
8276    fn try_from(
8277        node: AnyRootNodeRef<'a>,
8278    ) -> Result<&'a crate::InterpolatedStringLiteralElement, ()> {
8279        match node {
8280            AnyRootNodeRef::InterpolatedStringElement(InterpolatedStringElement::Literal(node)) => {
8281                Ok(node)
8282            }
8283            _ => Err(()),
8284        }
8285    }
8286}
8287
8288impl<'a> From<&'a Pattern> for AnyRootNodeRef<'a> {
8289    #[inline]
8290    fn from(node: &'a Pattern) -> AnyRootNodeRef<'a> {
8291        AnyRootNodeRef::Pattern(node)
8292    }
8293}
8294
8295impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a Pattern {
8296    type Error = ();
8297    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a Pattern, ()> {
8298        match node {
8299            AnyRootNodeRef::Pattern(node) => Ok(node),
8300            _ => Err(()),
8301        }
8302    }
8303}
8304
8305impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchValue {
8306    type Error = ();
8307    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchValue, ()> {
8308        match node {
8309            AnyRootNodeRef::Pattern(Pattern::MatchValue(node)) => Ok(node),
8310            _ => Err(()),
8311        }
8312    }
8313}
8314
8315impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchSingleton {
8316    type Error = ();
8317    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchSingleton, ()> {
8318        match node {
8319            AnyRootNodeRef::Pattern(Pattern::MatchSingleton(node)) => Ok(node),
8320            _ => Err(()),
8321        }
8322    }
8323}
8324
8325impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchSequence {
8326    type Error = ();
8327    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchSequence, ()> {
8328        match node {
8329            AnyRootNodeRef::Pattern(Pattern::MatchSequence(node)) => Ok(node),
8330            _ => Err(()),
8331        }
8332    }
8333}
8334
8335impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchMapping {
8336    type Error = ();
8337    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchMapping, ()> {
8338        match node {
8339            AnyRootNodeRef::Pattern(Pattern::MatchMapping(node)) => Ok(node),
8340            _ => Err(()),
8341        }
8342    }
8343}
8344
8345impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchClass {
8346    type Error = ();
8347    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchClass, ()> {
8348        match node {
8349            AnyRootNodeRef::Pattern(Pattern::MatchClass(node)) => Ok(node),
8350            _ => Err(()),
8351        }
8352    }
8353}
8354
8355impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchStar {
8356    type Error = ();
8357    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchStar, ()> {
8358        match node {
8359            AnyRootNodeRef::Pattern(Pattern::MatchStar(node)) => Ok(node),
8360            _ => Err(()),
8361        }
8362    }
8363}
8364
8365impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchAs {
8366    type Error = ();
8367    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchAs, ()> {
8368        match node {
8369            AnyRootNodeRef::Pattern(Pattern::MatchAs(node)) => Ok(node),
8370            _ => Err(()),
8371        }
8372    }
8373}
8374
8375impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternMatchOr {
8376    type Error = ();
8377    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternMatchOr, ()> {
8378        match node {
8379            AnyRootNodeRef::Pattern(Pattern::MatchOr(node)) => Ok(node),
8380            _ => Err(()),
8381        }
8382    }
8383}
8384
8385impl<'a> From<&'a TypeParam> for AnyRootNodeRef<'a> {
8386    #[inline]
8387    fn from(node: &'a TypeParam) -> AnyRootNodeRef<'a> {
8388        AnyRootNodeRef::TypeParam(node)
8389    }
8390}
8391
8392impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a TypeParam {
8393    type Error = ();
8394    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a TypeParam, ()> {
8395        match node {
8396            AnyRootNodeRef::TypeParam(node) => Ok(node),
8397            _ => Err(()),
8398        }
8399    }
8400}
8401
8402impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamTypeVar {
8403    type Error = ();
8404    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamTypeVar, ()> {
8405        match node {
8406            AnyRootNodeRef::TypeParam(TypeParam::TypeVar(node)) => Ok(node),
8407            _ => Err(()),
8408        }
8409    }
8410}
8411
8412impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamTypeVarTuple {
8413    type Error = ();
8414    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamTypeVarTuple, ()> {
8415        match node {
8416            AnyRootNodeRef::TypeParam(TypeParam::TypeVarTuple(node)) => Ok(node),
8417            _ => Err(()),
8418        }
8419    }
8420}
8421
8422impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParamParamSpec {
8423    type Error = ();
8424    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParamParamSpec, ()> {
8425        match node {
8426            AnyRootNodeRef::TypeParam(TypeParam::ParamSpec(node)) => Ok(node),
8427            _ => Err(()),
8428        }
8429    }
8430}
8431
8432impl<'a> From<&'a crate::InterpolatedStringFormatSpec> for AnyRootNodeRef<'a> {
8433    #[inline]
8434    fn from(node: &'a crate::InterpolatedStringFormatSpec) -> AnyRootNodeRef<'a> {
8435        AnyRootNodeRef::InterpolatedStringFormatSpec(node)
8436    }
8437}
8438
8439impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::InterpolatedStringFormatSpec {
8440    type Error = ();
8441    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::InterpolatedStringFormatSpec, ()> {
8442        match node {
8443            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => Ok(node),
8444            _ => Err(()),
8445        }
8446    }
8447}
8448
8449impl<'a> From<&'a crate::PatternArguments> for AnyRootNodeRef<'a> {
8450    #[inline]
8451    fn from(node: &'a crate::PatternArguments) -> AnyRootNodeRef<'a> {
8452        AnyRootNodeRef::PatternArguments(node)
8453    }
8454}
8455
8456impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternArguments {
8457    type Error = ();
8458    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternArguments, ()> {
8459        match node {
8460            AnyRootNodeRef::PatternArguments(node) => Ok(node),
8461            _ => Err(()),
8462        }
8463    }
8464}
8465
8466impl<'a> From<&'a crate::PatternKeyword> for AnyRootNodeRef<'a> {
8467    #[inline]
8468    fn from(node: &'a crate::PatternKeyword) -> AnyRootNodeRef<'a> {
8469        AnyRootNodeRef::PatternKeyword(node)
8470    }
8471}
8472
8473impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::PatternKeyword {
8474    type Error = ();
8475    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::PatternKeyword, ()> {
8476        match node {
8477            AnyRootNodeRef::PatternKeyword(node) => Ok(node),
8478            _ => Err(()),
8479        }
8480    }
8481}
8482
8483impl<'a> From<&'a crate::Comprehension> for AnyRootNodeRef<'a> {
8484    #[inline]
8485    fn from(node: &'a crate::Comprehension) -> AnyRootNodeRef<'a> {
8486        AnyRootNodeRef::Comprehension(node)
8487    }
8488}
8489
8490impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Comprehension {
8491    type Error = ();
8492    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Comprehension, ()> {
8493        match node {
8494            AnyRootNodeRef::Comprehension(node) => Ok(node),
8495            _ => Err(()),
8496        }
8497    }
8498}
8499
8500impl<'a> From<&'a crate::Arguments> for AnyRootNodeRef<'a> {
8501    #[inline]
8502    fn from(node: &'a crate::Arguments) -> AnyRootNodeRef<'a> {
8503        AnyRootNodeRef::Arguments(node)
8504    }
8505}
8506
8507impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Arguments {
8508    type Error = ();
8509    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Arguments, ()> {
8510        match node {
8511            AnyRootNodeRef::Arguments(node) => Ok(node),
8512            _ => Err(()),
8513        }
8514    }
8515}
8516
8517impl<'a> From<&'a crate::Parameters> for AnyRootNodeRef<'a> {
8518    #[inline]
8519    fn from(node: &'a crate::Parameters) -> AnyRootNodeRef<'a> {
8520        AnyRootNodeRef::Parameters(node)
8521    }
8522}
8523
8524impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Parameters {
8525    type Error = ();
8526    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Parameters, ()> {
8527        match node {
8528            AnyRootNodeRef::Parameters(node) => Ok(node),
8529            _ => Err(()),
8530        }
8531    }
8532}
8533
8534impl<'a> From<&'a crate::Parameter> for AnyRootNodeRef<'a> {
8535    #[inline]
8536    fn from(node: &'a crate::Parameter) -> AnyRootNodeRef<'a> {
8537        AnyRootNodeRef::Parameter(node)
8538    }
8539}
8540
8541impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Parameter {
8542    type Error = ();
8543    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Parameter, ()> {
8544        match node {
8545            AnyRootNodeRef::Parameter(node) => Ok(node),
8546            _ => Err(()),
8547        }
8548    }
8549}
8550
8551impl<'a> From<&'a crate::ParameterWithDefault> for AnyRootNodeRef<'a> {
8552    #[inline]
8553    fn from(node: &'a crate::ParameterWithDefault) -> AnyRootNodeRef<'a> {
8554        AnyRootNodeRef::ParameterWithDefault(node)
8555    }
8556}
8557
8558impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ParameterWithDefault {
8559    type Error = ();
8560    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ParameterWithDefault, ()> {
8561        match node {
8562            AnyRootNodeRef::ParameterWithDefault(node) => Ok(node),
8563            _ => Err(()),
8564        }
8565    }
8566}
8567
8568impl<'a> From<&'a crate::Keyword> for AnyRootNodeRef<'a> {
8569    #[inline]
8570    fn from(node: &'a crate::Keyword) -> AnyRootNodeRef<'a> {
8571        AnyRootNodeRef::Keyword(node)
8572    }
8573}
8574
8575impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Keyword {
8576    type Error = ();
8577    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Keyword, ()> {
8578        match node {
8579            AnyRootNodeRef::Keyword(node) => Ok(node),
8580            _ => Err(()),
8581        }
8582    }
8583}
8584
8585impl<'a> From<&'a crate::Alias> for AnyRootNodeRef<'a> {
8586    #[inline]
8587    fn from(node: &'a crate::Alias) -> AnyRootNodeRef<'a> {
8588        AnyRootNodeRef::Alias(node)
8589    }
8590}
8591
8592impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Alias {
8593    type Error = ();
8594    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Alias, ()> {
8595        match node {
8596            AnyRootNodeRef::Alias(node) => Ok(node),
8597            _ => Err(()),
8598        }
8599    }
8600}
8601
8602impl<'a> From<&'a crate::WithItem> for AnyRootNodeRef<'a> {
8603    #[inline]
8604    fn from(node: &'a crate::WithItem) -> AnyRootNodeRef<'a> {
8605        AnyRootNodeRef::WithItem(node)
8606    }
8607}
8608
8609impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::WithItem {
8610    type Error = ();
8611    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::WithItem, ()> {
8612        match node {
8613            AnyRootNodeRef::WithItem(node) => Ok(node),
8614            _ => Err(()),
8615        }
8616    }
8617}
8618
8619impl<'a> From<&'a crate::MatchCase> for AnyRootNodeRef<'a> {
8620    #[inline]
8621    fn from(node: &'a crate::MatchCase) -> AnyRootNodeRef<'a> {
8622        AnyRootNodeRef::MatchCase(node)
8623    }
8624}
8625
8626impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::MatchCase {
8627    type Error = ();
8628    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::MatchCase, ()> {
8629        match node {
8630            AnyRootNodeRef::MatchCase(node) => Ok(node),
8631            _ => Err(()),
8632        }
8633    }
8634}
8635
8636impl<'a> From<&'a crate::Decorator> for AnyRootNodeRef<'a> {
8637    #[inline]
8638    fn from(node: &'a crate::Decorator) -> AnyRootNodeRef<'a> {
8639        AnyRootNodeRef::Decorator(node)
8640    }
8641}
8642
8643impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Decorator {
8644    type Error = ();
8645    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Decorator, ()> {
8646        match node {
8647            AnyRootNodeRef::Decorator(node) => Ok(node),
8648            _ => Err(()),
8649        }
8650    }
8651}
8652
8653impl<'a> From<&'a crate::ElifElseClause> for AnyRootNodeRef<'a> {
8654    #[inline]
8655    fn from(node: &'a crate::ElifElseClause) -> AnyRootNodeRef<'a> {
8656        AnyRootNodeRef::ElifElseClause(node)
8657    }
8658}
8659
8660impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::ElifElseClause {
8661    type Error = ();
8662    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::ElifElseClause, ()> {
8663        match node {
8664            AnyRootNodeRef::ElifElseClause(node) => Ok(node),
8665            _ => Err(()),
8666        }
8667    }
8668}
8669
8670impl<'a> From<&'a crate::TypeParams> for AnyRootNodeRef<'a> {
8671    #[inline]
8672    fn from(node: &'a crate::TypeParams) -> AnyRootNodeRef<'a> {
8673        AnyRootNodeRef::TypeParams(node)
8674    }
8675}
8676
8677impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TypeParams {
8678    type Error = ();
8679    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TypeParams, ()> {
8680        match node {
8681            AnyRootNodeRef::TypeParams(node) => Ok(node),
8682            _ => Err(()),
8683        }
8684    }
8685}
8686
8687impl<'a> From<&'a crate::FString> for AnyRootNodeRef<'a> {
8688    #[inline]
8689    fn from(node: &'a crate::FString) -> AnyRootNodeRef<'a> {
8690        AnyRootNodeRef::FString(node)
8691    }
8692}
8693
8694impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::FString {
8695    type Error = ();
8696    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::FString, ()> {
8697        match node {
8698            AnyRootNodeRef::FString(node) => Ok(node),
8699            _ => Err(()),
8700        }
8701    }
8702}
8703
8704impl<'a> From<&'a crate::TString> for AnyRootNodeRef<'a> {
8705    #[inline]
8706    fn from(node: &'a crate::TString) -> AnyRootNodeRef<'a> {
8707        AnyRootNodeRef::TString(node)
8708    }
8709}
8710
8711impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::TString {
8712    type Error = ();
8713    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::TString, ()> {
8714        match node {
8715            AnyRootNodeRef::TString(node) => Ok(node),
8716            _ => Err(()),
8717        }
8718    }
8719}
8720
8721impl<'a> From<&'a crate::StringLiteral> for AnyRootNodeRef<'a> {
8722    #[inline]
8723    fn from(node: &'a crate::StringLiteral) -> AnyRootNodeRef<'a> {
8724        AnyRootNodeRef::StringLiteral(node)
8725    }
8726}
8727
8728impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::StringLiteral {
8729    type Error = ();
8730    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::StringLiteral, ()> {
8731        match node {
8732            AnyRootNodeRef::StringLiteral(node) => Ok(node),
8733            _ => Err(()),
8734        }
8735    }
8736}
8737
8738impl<'a> From<&'a crate::BytesLiteral> for AnyRootNodeRef<'a> {
8739    #[inline]
8740    fn from(node: &'a crate::BytesLiteral) -> AnyRootNodeRef<'a> {
8741        AnyRootNodeRef::BytesLiteral(node)
8742    }
8743}
8744
8745impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::BytesLiteral {
8746    type Error = ();
8747    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::BytesLiteral, ()> {
8748        match node {
8749            AnyRootNodeRef::BytesLiteral(node) => Ok(node),
8750            _ => Err(()),
8751        }
8752    }
8753}
8754
8755impl<'a> From<&'a crate::Identifier> for AnyRootNodeRef<'a> {
8756    #[inline]
8757    fn from(node: &'a crate::Identifier) -> AnyRootNodeRef<'a> {
8758        AnyRootNodeRef::Identifier(node)
8759    }
8760}
8761
8762impl<'a> TryFrom<AnyRootNodeRef<'a>> for &'a crate::Identifier {
8763    type Error = ();
8764    fn try_from(node: AnyRootNodeRef<'a>) -> Result<&'a crate::Identifier, ()> {
8765        match node {
8766            AnyRootNodeRef::Identifier(node) => Ok(node),
8767            _ => Err(()),
8768        }
8769    }
8770}
8771
8772impl ruff_text_size::Ranged for AnyRootNodeRef<'_> {
8773    fn range(&self) -> ruff_text_size::TextRange {
8774        match self {
8775            AnyRootNodeRef::Mod(node) => node.range(),
8776            AnyRootNodeRef::Stmt(node) => node.range(),
8777            AnyRootNodeRef::Expr(node) => node.range(),
8778            AnyRootNodeRef::ExceptHandler(node) => node.range(),
8779            AnyRootNodeRef::InterpolatedStringElement(node) => node.range(),
8780            AnyRootNodeRef::Pattern(node) => node.range(),
8781            AnyRootNodeRef::TypeParam(node) => node.range(),
8782            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.range(),
8783            AnyRootNodeRef::PatternArguments(node) => node.range(),
8784            AnyRootNodeRef::PatternKeyword(node) => node.range(),
8785            AnyRootNodeRef::Comprehension(node) => node.range(),
8786            AnyRootNodeRef::Arguments(node) => node.range(),
8787            AnyRootNodeRef::Parameters(node) => node.range(),
8788            AnyRootNodeRef::Parameter(node) => node.range(),
8789            AnyRootNodeRef::ParameterWithDefault(node) => node.range(),
8790            AnyRootNodeRef::Keyword(node) => node.range(),
8791            AnyRootNodeRef::Alias(node) => node.range(),
8792            AnyRootNodeRef::WithItem(node) => node.range(),
8793            AnyRootNodeRef::MatchCase(node) => node.range(),
8794            AnyRootNodeRef::Decorator(node) => node.range(),
8795            AnyRootNodeRef::ElifElseClause(node) => node.range(),
8796            AnyRootNodeRef::TypeParams(node) => node.range(),
8797            AnyRootNodeRef::FString(node) => node.range(),
8798            AnyRootNodeRef::TString(node) => node.range(),
8799            AnyRootNodeRef::StringLiteral(node) => node.range(),
8800            AnyRootNodeRef::BytesLiteral(node) => node.range(),
8801            AnyRootNodeRef::Identifier(node) => node.range(),
8802        }
8803    }
8804}
8805
8806impl crate::HasNodeIndex for AnyRootNodeRef<'_> {
8807    fn node_index(&self) -> &crate::AtomicNodeIndex {
8808        match self {
8809            AnyRootNodeRef::Mod(node) => node.node_index(),
8810            AnyRootNodeRef::Stmt(node) => node.node_index(),
8811            AnyRootNodeRef::Expr(node) => node.node_index(),
8812            AnyRootNodeRef::ExceptHandler(node) => node.node_index(),
8813            AnyRootNodeRef::InterpolatedStringElement(node) => node.node_index(),
8814            AnyRootNodeRef::Pattern(node) => node.node_index(),
8815            AnyRootNodeRef::TypeParam(node) => node.node_index(),
8816            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.node_index(),
8817            AnyRootNodeRef::PatternArguments(node) => node.node_index(),
8818            AnyRootNodeRef::PatternKeyword(node) => node.node_index(),
8819            AnyRootNodeRef::Comprehension(node) => node.node_index(),
8820            AnyRootNodeRef::Arguments(node) => node.node_index(),
8821            AnyRootNodeRef::Parameters(node) => node.node_index(),
8822            AnyRootNodeRef::Parameter(node) => node.node_index(),
8823            AnyRootNodeRef::ParameterWithDefault(node) => node.node_index(),
8824            AnyRootNodeRef::Keyword(node) => node.node_index(),
8825            AnyRootNodeRef::Alias(node) => node.node_index(),
8826            AnyRootNodeRef::WithItem(node) => node.node_index(),
8827            AnyRootNodeRef::MatchCase(node) => node.node_index(),
8828            AnyRootNodeRef::Decorator(node) => node.node_index(),
8829            AnyRootNodeRef::ElifElseClause(node) => node.node_index(),
8830            AnyRootNodeRef::TypeParams(node) => node.node_index(),
8831            AnyRootNodeRef::FString(node) => node.node_index(),
8832            AnyRootNodeRef::TString(node) => node.node_index(),
8833            AnyRootNodeRef::StringLiteral(node) => node.node_index(),
8834            AnyRootNodeRef::BytesLiteral(node) => node.node_index(),
8835            AnyRootNodeRef::Identifier(node) => node.node_index(),
8836        }
8837    }
8838}
8839
8840impl<'a> AnyRootNodeRef<'a> {
8841    /// Decomposes this reference into its root node kind and a type-erased pointer.
8842    #[inline]
8843    pub fn into_raw_parts(self) -> (RootNodeKind, std::ptr::NonNull<()>) {
8844        match self {
8845            AnyRootNodeRef::Mod(node) => (RootNodeKind::Mod, std::ptr::NonNull::from(node).cast()),
8846            AnyRootNodeRef::Stmt(node) => {
8847                (RootNodeKind::Stmt, std::ptr::NonNull::from(node).cast())
8848            }
8849            AnyRootNodeRef::Expr(node) => {
8850                (RootNodeKind::Expr, std::ptr::NonNull::from(node).cast())
8851            }
8852            AnyRootNodeRef::ExceptHandler(node) => (
8853                RootNodeKind::ExceptHandler,
8854                std::ptr::NonNull::from(node).cast(),
8855            ),
8856            AnyRootNodeRef::InterpolatedStringElement(node) => (
8857                RootNodeKind::InterpolatedStringElement,
8858                std::ptr::NonNull::from(node).cast(),
8859            ),
8860            AnyRootNodeRef::Pattern(node) => {
8861                (RootNodeKind::Pattern, std::ptr::NonNull::from(node).cast())
8862            }
8863            AnyRootNodeRef::TypeParam(node) => (
8864                RootNodeKind::TypeParam,
8865                std::ptr::NonNull::from(node).cast(),
8866            ),
8867            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => (
8868                RootNodeKind::InterpolatedStringFormatSpec,
8869                std::ptr::NonNull::from(node).cast(),
8870            ),
8871            AnyRootNodeRef::PatternArguments(node) => (
8872                RootNodeKind::PatternArguments,
8873                std::ptr::NonNull::from(node).cast(),
8874            ),
8875            AnyRootNodeRef::PatternKeyword(node) => (
8876                RootNodeKind::PatternKeyword,
8877                std::ptr::NonNull::from(node).cast(),
8878            ),
8879            AnyRootNodeRef::Comprehension(node) => (
8880                RootNodeKind::Comprehension,
8881                std::ptr::NonNull::from(node).cast(),
8882            ),
8883            AnyRootNodeRef::Arguments(node) => (
8884                RootNodeKind::Arguments,
8885                std::ptr::NonNull::from(node).cast(),
8886            ),
8887            AnyRootNodeRef::Parameters(node) => (
8888                RootNodeKind::Parameters,
8889                std::ptr::NonNull::from(node).cast(),
8890            ),
8891            AnyRootNodeRef::Parameter(node) => (
8892                RootNodeKind::Parameter,
8893                std::ptr::NonNull::from(node).cast(),
8894            ),
8895            AnyRootNodeRef::ParameterWithDefault(node) => (
8896                RootNodeKind::ParameterWithDefault,
8897                std::ptr::NonNull::from(node).cast(),
8898            ),
8899            AnyRootNodeRef::Keyword(node) => {
8900                (RootNodeKind::Keyword, std::ptr::NonNull::from(node).cast())
8901            }
8902            AnyRootNodeRef::Alias(node) => {
8903                (RootNodeKind::Alias, std::ptr::NonNull::from(node).cast())
8904            }
8905            AnyRootNodeRef::WithItem(node) => {
8906                (RootNodeKind::WithItem, std::ptr::NonNull::from(node).cast())
8907            }
8908            AnyRootNodeRef::MatchCase(node) => (
8909                RootNodeKind::MatchCase,
8910                std::ptr::NonNull::from(node).cast(),
8911            ),
8912            AnyRootNodeRef::Decorator(node) => (
8913                RootNodeKind::Decorator,
8914                std::ptr::NonNull::from(node).cast(),
8915            ),
8916            AnyRootNodeRef::ElifElseClause(node) => (
8917                RootNodeKind::ElifElseClause,
8918                std::ptr::NonNull::from(node).cast(),
8919            ),
8920            AnyRootNodeRef::TypeParams(node) => (
8921                RootNodeKind::TypeParams,
8922                std::ptr::NonNull::from(node).cast(),
8923            ),
8924            AnyRootNodeRef::FString(node) => {
8925                (RootNodeKind::FString, std::ptr::NonNull::from(node).cast())
8926            }
8927            AnyRootNodeRef::TString(node) => {
8928                (RootNodeKind::TString, std::ptr::NonNull::from(node).cast())
8929            }
8930            AnyRootNodeRef::StringLiteral(node) => (
8931                RootNodeKind::StringLiteral,
8932                std::ptr::NonNull::from(node).cast(),
8933            ),
8934            AnyRootNodeRef::BytesLiteral(node) => (
8935                RootNodeKind::BytesLiteral,
8936                std::ptr::NonNull::from(node).cast(),
8937            ),
8938            AnyRootNodeRef::Identifier(node) => (
8939                RootNodeKind::Identifier,
8940                std::ptr::NonNull::from(node).cast(),
8941            ),
8942        }
8943    }
8944
8945    /// Reconstructs an AST reference from its root node kind and type-erased pointer.
8946    ///
8947    /// # Safety
8948    ///
8949    /// - `pointer` must be properly aligned for and point to the exact root node type
8950    ///   represented by `kind`.
8951    /// - The pointer's provenance must permit reads of a complete, initialized, and valid
8952    ///   value of that type.
8953    /// - The pointed-to value must not be moved, dropped, or accessed mutably for `'a`.
8954    #[inline]
8955    #[expect(unsafe_code, reason = "reconstructs a type-erased AST reference")]
8956    pub unsafe fn from_raw_parts(kind: RootNodeKind, pointer: std::ptr::NonNull<()>) -> Self {
8957        let pointer = pointer.as_ptr();
8958        // SAFETY: The caller guarantees that `pointer` is readable as the exact root node
8959        // type selected by `kind` and remains valid and immutable for `'a`.
8960        unsafe {
8961            match kind {
8962                RootNodeKind::Mod => AnyRootNodeRef::Mod(&*pointer.cast::<Mod>()),
8963                RootNodeKind::Stmt => AnyRootNodeRef::Stmt(&*pointer.cast::<Stmt>()),
8964                RootNodeKind::Expr => AnyRootNodeRef::Expr(&*pointer.cast::<Expr>()),
8965                RootNodeKind::ExceptHandler => {
8966                    AnyRootNodeRef::ExceptHandler(&*pointer.cast::<ExceptHandler>())
8967                }
8968                RootNodeKind::InterpolatedStringElement => {
8969                    AnyRootNodeRef::InterpolatedStringElement(
8970                        &*pointer.cast::<InterpolatedStringElement>(),
8971                    )
8972                }
8973                RootNodeKind::Pattern => AnyRootNodeRef::Pattern(&*pointer.cast::<Pattern>()),
8974                RootNodeKind::TypeParam => AnyRootNodeRef::TypeParam(&*pointer.cast::<TypeParam>()),
8975                RootNodeKind::InterpolatedStringFormatSpec => {
8976                    AnyRootNodeRef::InterpolatedStringFormatSpec(
8977                        &*pointer.cast::<crate::InterpolatedStringFormatSpec>(),
8978                    )
8979                }
8980                RootNodeKind::PatternArguments => {
8981                    AnyRootNodeRef::PatternArguments(&*pointer.cast::<crate::PatternArguments>())
8982                }
8983                RootNodeKind::PatternKeyword => {
8984                    AnyRootNodeRef::PatternKeyword(&*pointer.cast::<crate::PatternKeyword>())
8985                }
8986                RootNodeKind::Comprehension => {
8987                    AnyRootNodeRef::Comprehension(&*pointer.cast::<crate::Comprehension>())
8988                }
8989                RootNodeKind::Arguments => {
8990                    AnyRootNodeRef::Arguments(&*pointer.cast::<crate::Arguments>())
8991                }
8992                RootNodeKind::Parameters => {
8993                    AnyRootNodeRef::Parameters(&*pointer.cast::<crate::Parameters>())
8994                }
8995                RootNodeKind::Parameter => {
8996                    AnyRootNodeRef::Parameter(&*pointer.cast::<crate::Parameter>())
8997                }
8998                RootNodeKind::ParameterWithDefault => AnyRootNodeRef::ParameterWithDefault(
8999                    &*pointer.cast::<crate::ParameterWithDefault>(),
9000                ),
9001                RootNodeKind::Keyword => {
9002                    AnyRootNodeRef::Keyword(&*pointer.cast::<crate::Keyword>())
9003                }
9004                RootNodeKind::Alias => AnyRootNodeRef::Alias(&*pointer.cast::<crate::Alias>()),
9005                RootNodeKind::WithItem => {
9006                    AnyRootNodeRef::WithItem(&*pointer.cast::<crate::WithItem>())
9007                }
9008                RootNodeKind::MatchCase => {
9009                    AnyRootNodeRef::MatchCase(&*pointer.cast::<crate::MatchCase>())
9010                }
9011                RootNodeKind::Decorator => {
9012                    AnyRootNodeRef::Decorator(&*pointer.cast::<crate::Decorator>())
9013                }
9014                RootNodeKind::ElifElseClause => {
9015                    AnyRootNodeRef::ElifElseClause(&*pointer.cast::<crate::ElifElseClause>())
9016                }
9017                RootNodeKind::TypeParams => {
9018                    AnyRootNodeRef::TypeParams(&*pointer.cast::<crate::TypeParams>())
9019                }
9020                RootNodeKind::FString => {
9021                    AnyRootNodeRef::FString(&*pointer.cast::<crate::FString>())
9022                }
9023                RootNodeKind::TString => {
9024                    AnyRootNodeRef::TString(&*pointer.cast::<crate::TString>())
9025                }
9026                RootNodeKind::StringLiteral => {
9027                    AnyRootNodeRef::StringLiteral(&*pointer.cast::<crate::StringLiteral>())
9028                }
9029                RootNodeKind::BytesLiteral => {
9030                    AnyRootNodeRef::BytesLiteral(&*pointer.cast::<crate::BytesLiteral>())
9031                }
9032                RootNodeKind::Identifier => {
9033                    AnyRootNodeRef::Identifier(&*pointer.cast::<crate::Identifier>())
9034                }
9035            }
9036        }
9037    }
9038
9039    pub fn visit_source_order<'b, V>(self, visitor: &mut V)
9040    where
9041        V: crate::visitor::source_order::SourceOrderVisitor<'b> + ?Sized,
9042        'a: 'b,
9043    {
9044        match self {
9045            AnyRootNodeRef::Mod(node) => node.visit_source_order(visitor),
9046            AnyRootNodeRef::Stmt(node) => node.visit_source_order(visitor),
9047            AnyRootNodeRef::Expr(node) => node.visit_source_order(visitor),
9048            AnyRootNodeRef::ExceptHandler(node) => node.visit_source_order(visitor),
9049            AnyRootNodeRef::InterpolatedStringElement(node) => node.visit_source_order(visitor),
9050            AnyRootNodeRef::Pattern(node) => node.visit_source_order(visitor),
9051            AnyRootNodeRef::TypeParam(node) => node.visit_source_order(visitor),
9052            AnyRootNodeRef::InterpolatedStringFormatSpec(node) => node.visit_source_order(visitor),
9053            AnyRootNodeRef::PatternArguments(node) => node.visit_source_order(visitor),
9054            AnyRootNodeRef::PatternKeyword(node) => node.visit_source_order(visitor),
9055            AnyRootNodeRef::Comprehension(node) => node.visit_source_order(visitor),
9056            AnyRootNodeRef::Arguments(node) => node.visit_source_order(visitor),
9057            AnyRootNodeRef::Parameters(node) => node.visit_source_order(visitor),
9058            AnyRootNodeRef::Parameter(node) => node.visit_source_order(visitor),
9059            AnyRootNodeRef::ParameterWithDefault(node) => node.visit_source_order(visitor),
9060            AnyRootNodeRef::Keyword(node) => node.visit_source_order(visitor),
9061            AnyRootNodeRef::Alias(node) => node.visit_source_order(visitor),
9062            AnyRootNodeRef::WithItem(node) => node.visit_source_order(visitor),
9063            AnyRootNodeRef::MatchCase(node) => node.visit_source_order(visitor),
9064            AnyRootNodeRef::Decorator(node) => node.visit_source_order(visitor),
9065            AnyRootNodeRef::ElifElseClause(node) => node.visit_source_order(visitor),
9066            AnyRootNodeRef::TypeParams(node) => node.visit_source_order(visitor),
9067            AnyRootNodeRef::FString(node) => node.visit_source_order(visitor),
9068            AnyRootNodeRef::TString(node) => node.visit_source_order(visitor),
9069            AnyRootNodeRef::StringLiteral(node) => node.visit_source_order(visitor),
9070            AnyRootNodeRef::BytesLiteral(node) => node.visit_source_order(visitor),
9071            AnyRootNodeRef::Identifier(node) => node.visit_source_order(visitor),
9072        }
9073    }
9074}
9075
9076#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
9077pub enum NodeKind {
9078    ModModule,
9079    ModExpression,
9080    StmtFunctionDef,
9081    StmtClassDef,
9082    StmtReturn,
9083    StmtDelete,
9084    StmtTypeAlias,
9085    StmtAssign,
9086    StmtAugAssign,
9087    StmtAnnAssign,
9088    StmtFor,
9089    StmtWhile,
9090    StmtIf,
9091    StmtWith,
9092    StmtMatch,
9093    StmtRaise,
9094    StmtTry,
9095    StmtAssert,
9096    StmtImport,
9097    StmtImportFrom,
9098    StmtGlobal,
9099    StmtNonlocal,
9100    StmtExpr,
9101    StmtPass,
9102    StmtBreak,
9103    StmtContinue,
9104    StmtIpyEscapeCommand,
9105    ExprBoolOp,
9106    ExprNamed,
9107    ExprBinOp,
9108    ExprUnaryOp,
9109    ExprLambda,
9110    ExprIf,
9111    ExprDict,
9112    ExprSet,
9113    ExprListComp,
9114    ExprSetComp,
9115    ExprDictComp,
9116    ExprGenerator,
9117    ExprAwait,
9118    ExprYield,
9119    ExprYieldFrom,
9120    ExprCompare,
9121    ExprCall,
9122    ExprFString,
9123    ExprTString,
9124    ExprStringLiteral,
9125    ExprBytesLiteral,
9126    ExprNumberLiteral,
9127    ExprBooleanLiteral,
9128    ExprNoneLiteral,
9129    ExprEllipsisLiteral,
9130    ExprAttribute,
9131    ExprSubscript,
9132    ExprStarred,
9133    ExprName,
9134    ExprList,
9135    ExprTuple,
9136    ExprSlice,
9137    ExprIpyEscapeCommand,
9138    ExceptHandlerExceptHandler,
9139    InterpolatedElement,
9140    InterpolatedStringLiteralElement,
9141    PatternMatchValue,
9142    PatternMatchSingleton,
9143    PatternMatchSequence,
9144    PatternMatchMapping,
9145    PatternMatchClass,
9146    PatternMatchStar,
9147    PatternMatchAs,
9148    PatternMatchOr,
9149    TypeParamTypeVar,
9150    TypeParamTypeVarTuple,
9151    TypeParamParamSpec,
9152    InterpolatedStringFormatSpec,
9153    PatternArguments,
9154    PatternKeyword,
9155    Comprehension,
9156    Arguments,
9157    Parameters,
9158    Parameter,
9159    ParameterWithDefault,
9160    Keyword,
9161    Alias,
9162    WithItem,
9163    MatchCase,
9164    Decorator,
9165    ElifElseClause,
9166    TypeParams,
9167    FString,
9168    TString,
9169    StringLiteral,
9170    BytesLiteral,
9171    Identifier,
9172}
9173
9174impl AnyNodeRef<'_> {
9175    pub const fn kind(self) -> NodeKind {
9176        match self {
9177            AnyNodeRef::ModModule(_) => NodeKind::ModModule,
9178            AnyNodeRef::ModExpression(_) => NodeKind::ModExpression,
9179            AnyNodeRef::StmtFunctionDef(_) => NodeKind::StmtFunctionDef,
9180            AnyNodeRef::StmtClassDef(_) => NodeKind::StmtClassDef,
9181            AnyNodeRef::StmtReturn(_) => NodeKind::StmtReturn,
9182            AnyNodeRef::StmtDelete(_) => NodeKind::StmtDelete,
9183            AnyNodeRef::StmtTypeAlias(_) => NodeKind::StmtTypeAlias,
9184            AnyNodeRef::StmtAssign(_) => NodeKind::StmtAssign,
9185            AnyNodeRef::StmtAugAssign(_) => NodeKind::StmtAugAssign,
9186            AnyNodeRef::StmtAnnAssign(_) => NodeKind::StmtAnnAssign,
9187            AnyNodeRef::StmtFor(_) => NodeKind::StmtFor,
9188            AnyNodeRef::StmtWhile(_) => NodeKind::StmtWhile,
9189            AnyNodeRef::StmtIf(_) => NodeKind::StmtIf,
9190            AnyNodeRef::StmtWith(_) => NodeKind::StmtWith,
9191            AnyNodeRef::StmtMatch(_) => NodeKind::StmtMatch,
9192            AnyNodeRef::StmtRaise(_) => NodeKind::StmtRaise,
9193            AnyNodeRef::StmtTry(_) => NodeKind::StmtTry,
9194            AnyNodeRef::StmtAssert(_) => NodeKind::StmtAssert,
9195            AnyNodeRef::StmtImport(_) => NodeKind::StmtImport,
9196            AnyNodeRef::StmtImportFrom(_) => NodeKind::StmtImportFrom,
9197            AnyNodeRef::StmtGlobal(_) => NodeKind::StmtGlobal,
9198            AnyNodeRef::StmtNonlocal(_) => NodeKind::StmtNonlocal,
9199            AnyNodeRef::StmtExpr(_) => NodeKind::StmtExpr,
9200            AnyNodeRef::StmtPass(_) => NodeKind::StmtPass,
9201            AnyNodeRef::StmtBreak(_) => NodeKind::StmtBreak,
9202            AnyNodeRef::StmtContinue(_) => NodeKind::StmtContinue,
9203            AnyNodeRef::StmtIpyEscapeCommand(_) => NodeKind::StmtIpyEscapeCommand,
9204            AnyNodeRef::ExprBoolOp(_) => NodeKind::ExprBoolOp,
9205            AnyNodeRef::ExprNamed(_) => NodeKind::ExprNamed,
9206            AnyNodeRef::ExprBinOp(_) => NodeKind::ExprBinOp,
9207            AnyNodeRef::ExprUnaryOp(_) => NodeKind::ExprUnaryOp,
9208            AnyNodeRef::ExprLambda(_) => NodeKind::ExprLambda,
9209            AnyNodeRef::ExprIf(_) => NodeKind::ExprIf,
9210            AnyNodeRef::ExprDict(_) => NodeKind::ExprDict,
9211            AnyNodeRef::ExprSet(_) => NodeKind::ExprSet,
9212            AnyNodeRef::ExprListComp(_) => NodeKind::ExprListComp,
9213            AnyNodeRef::ExprSetComp(_) => NodeKind::ExprSetComp,
9214            AnyNodeRef::ExprDictComp(_) => NodeKind::ExprDictComp,
9215            AnyNodeRef::ExprGenerator(_) => NodeKind::ExprGenerator,
9216            AnyNodeRef::ExprAwait(_) => NodeKind::ExprAwait,
9217            AnyNodeRef::ExprYield(_) => NodeKind::ExprYield,
9218            AnyNodeRef::ExprYieldFrom(_) => NodeKind::ExprYieldFrom,
9219            AnyNodeRef::ExprCompare(_) => NodeKind::ExprCompare,
9220            AnyNodeRef::ExprCall(_) => NodeKind::ExprCall,
9221            AnyNodeRef::ExprFString(_) => NodeKind::ExprFString,
9222            AnyNodeRef::ExprTString(_) => NodeKind::ExprTString,
9223            AnyNodeRef::ExprStringLiteral(_) => NodeKind::ExprStringLiteral,
9224            AnyNodeRef::ExprBytesLiteral(_) => NodeKind::ExprBytesLiteral,
9225            AnyNodeRef::ExprNumberLiteral(_) => NodeKind::ExprNumberLiteral,
9226            AnyNodeRef::ExprBooleanLiteral(_) => NodeKind::ExprBooleanLiteral,
9227            AnyNodeRef::ExprNoneLiteral(_) => NodeKind::ExprNoneLiteral,
9228            AnyNodeRef::ExprEllipsisLiteral(_) => NodeKind::ExprEllipsisLiteral,
9229            AnyNodeRef::ExprAttribute(_) => NodeKind::ExprAttribute,
9230            AnyNodeRef::ExprSubscript(_) => NodeKind::ExprSubscript,
9231            AnyNodeRef::ExprStarred(_) => NodeKind::ExprStarred,
9232            AnyNodeRef::ExprName(_) => NodeKind::ExprName,
9233            AnyNodeRef::ExprList(_) => NodeKind::ExprList,
9234            AnyNodeRef::ExprTuple(_) => NodeKind::ExprTuple,
9235            AnyNodeRef::ExprSlice(_) => NodeKind::ExprSlice,
9236            AnyNodeRef::ExprIpyEscapeCommand(_) => NodeKind::ExprIpyEscapeCommand,
9237            AnyNodeRef::ExceptHandlerExceptHandler(_) => NodeKind::ExceptHandlerExceptHandler,
9238            AnyNodeRef::InterpolatedElement(_) => NodeKind::InterpolatedElement,
9239            AnyNodeRef::InterpolatedStringLiteralElement(_) => {
9240                NodeKind::InterpolatedStringLiteralElement
9241            }
9242            AnyNodeRef::PatternMatchValue(_) => NodeKind::PatternMatchValue,
9243            AnyNodeRef::PatternMatchSingleton(_) => NodeKind::PatternMatchSingleton,
9244            AnyNodeRef::PatternMatchSequence(_) => NodeKind::PatternMatchSequence,
9245            AnyNodeRef::PatternMatchMapping(_) => NodeKind::PatternMatchMapping,
9246            AnyNodeRef::PatternMatchClass(_) => NodeKind::PatternMatchClass,
9247            AnyNodeRef::PatternMatchStar(_) => NodeKind::PatternMatchStar,
9248            AnyNodeRef::PatternMatchAs(_) => NodeKind::PatternMatchAs,
9249            AnyNodeRef::PatternMatchOr(_) => NodeKind::PatternMatchOr,
9250            AnyNodeRef::TypeParamTypeVar(_) => NodeKind::TypeParamTypeVar,
9251            AnyNodeRef::TypeParamTypeVarTuple(_) => NodeKind::TypeParamTypeVarTuple,
9252            AnyNodeRef::TypeParamParamSpec(_) => NodeKind::TypeParamParamSpec,
9253            AnyNodeRef::InterpolatedStringFormatSpec(_) => NodeKind::InterpolatedStringFormatSpec,
9254            AnyNodeRef::PatternArguments(_) => NodeKind::PatternArguments,
9255            AnyNodeRef::PatternKeyword(_) => NodeKind::PatternKeyword,
9256            AnyNodeRef::Comprehension(_) => NodeKind::Comprehension,
9257            AnyNodeRef::Arguments(_) => NodeKind::Arguments,
9258            AnyNodeRef::Parameters(_) => NodeKind::Parameters,
9259            AnyNodeRef::Parameter(_) => NodeKind::Parameter,
9260            AnyNodeRef::ParameterWithDefault(_) => NodeKind::ParameterWithDefault,
9261            AnyNodeRef::Keyword(_) => NodeKind::Keyword,
9262            AnyNodeRef::Alias(_) => NodeKind::Alias,
9263            AnyNodeRef::WithItem(_) => NodeKind::WithItem,
9264            AnyNodeRef::MatchCase(_) => NodeKind::MatchCase,
9265            AnyNodeRef::Decorator(_) => NodeKind::Decorator,
9266            AnyNodeRef::ElifElseClause(_) => NodeKind::ElifElseClause,
9267            AnyNodeRef::TypeParams(_) => NodeKind::TypeParams,
9268            AnyNodeRef::FString(_) => NodeKind::FString,
9269            AnyNodeRef::TString(_) => NodeKind::TString,
9270            AnyNodeRef::StringLiteral(_) => NodeKind::StringLiteral,
9271            AnyNodeRef::BytesLiteral(_) => NodeKind::BytesLiteral,
9272            AnyNodeRef::Identifier(_) => NodeKind::Identifier,
9273        }
9274    }
9275}
9276
9277/// See also [Module](https://docs.python.org/3/library/ast.html#ast.Module)
9278#[derive(Clone, Debug, PartialEq)]
9279#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9280pub struct ModModule {
9281    pub node_index: crate::AtomicNodeIndex,
9282    pub range: ruff_text_size::TextRange,
9283    pub body: thin_vec::ThinVec<Stmt>,
9284}
9285
9286/// See also [Module](https://docs.python.org/3/library/ast.html#ast.Module)
9287#[derive(Clone, Debug, PartialEq)]
9288#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9289pub struct ModExpression {
9290    pub node_index: crate::AtomicNodeIndex,
9291    pub range: ruff_text_size::TextRange,
9292    pub body: Box<Expr>,
9293}
9294
9295/// See also [FunctionDef](https://docs.python.org/3/library/ast.html#ast.FunctionDef)
9296/// and [AsyncFunctionDef](https://docs.python.org/3/library/ast.html#ast.AsyncFunctionDef).
9297///
9298/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9299#[derive(Clone, Debug, PartialEq)]
9300#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9301pub struct StmtFunctionDef {
9302    pub node_index: crate::AtomicNodeIndex,
9303    pub range: ruff_text_size::TextRange,
9304    pub is_async: bool,
9305    pub decorator_list: thin_vec::ThinVec<crate::Decorator>,
9306    pub name: crate::Identifier,
9307    pub type_params: Option<Box<crate::TypeParams>>,
9308    pub parameters: Box<crate::Parameters>,
9309    pub returns: Option<Box<Expr>>,
9310    pub body: thin_vec::ThinVec<Stmt>,
9311}
9312
9313/// See also [ClassDef](https://docs.python.org/3/library/ast.html#ast.ClassDef)
9314#[derive(Clone, Debug, PartialEq)]
9315#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9316pub struct StmtClassDef {
9317    pub node_index: crate::AtomicNodeIndex,
9318    pub range: ruff_text_size::TextRange,
9319    pub decorator_list: thin_vec::ThinVec<crate::Decorator>,
9320    pub name: crate::Identifier,
9321    pub type_params: Option<Box<crate::TypeParams>>,
9322    pub arguments: Option<Box<crate::Arguments>>,
9323    pub body: thin_vec::ThinVec<Stmt>,
9324}
9325
9326/// See also [Return](https://docs.python.org/3/library/ast.html#ast.Return)
9327#[derive(Clone, Debug, PartialEq)]
9328#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9329pub struct StmtReturn {
9330    pub node_index: crate::AtomicNodeIndex,
9331    pub range: ruff_text_size::TextRange,
9332    pub value: Option<Box<Expr>>,
9333}
9334
9335/// See also [Delete](https://docs.python.org/3/library/ast.html#ast.Delete)
9336#[derive(Clone, Debug, PartialEq)]
9337#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9338pub struct StmtDelete {
9339    pub node_index: crate::AtomicNodeIndex,
9340    pub range: ruff_text_size::TextRange,
9341    pub targets: Vec<Expr>,
9342}
9343
9344/// See also [TypeAlias](https://docs.python.org/3/library/ast.html#ast.TypeAlias)
9345#[derive(Clone, Debug, PartialEq)]
9346#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9347pub struct StmtTypeAlias {
9348    pub node_index: crate::AtomicNodeIndex,
9349    pub range: ruff_text_size::TextRange,
9350    pub name: Box<Expr>,
9351    pub type_params: Option<Box<crate::TypeParams>>,
9352    pub value: Box<Expr>,
9353}
9354
9355/// See also [Assign](https://docs.python.org/3/library/ast.html#ast.Assign)
9356#[derive(Clone, Debug, PartialEq)]
9357#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9358pub struct StmtAssign {
9359    pub node_index: crate::AtomicNodeIndex,
9360    pub range: ruff_text_size::TextRange,
9361    pub targets: Vec<Expr>,
9362    pub value: Box<Expr>,
9363}
9364
9365/// See also [AugAssign](https://docs.python.org/3/library/ast.html#ast.AugAssign)
9366#[derive(Clone, Debug, PartialEq)]
9367#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9368pub struct StmtAugAssign {
9369    pub node_index: crate::AtomicNodeIndex,
9370    pub range: ruff_text_size::TextRange,
9371    pub target: Box<Expr>,
9372    pub op: crate::Operator,
9373    pub value: Box<Expr>,
9374}
9375
9376/// See also [AnnAssign](https://docs.python.org/3/library/ast.html#ast.AnnAssign)
9377#[derive(Clone, Debug, PartialEq)]
9378#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9379pub struct StmtAnnAssign {
9380    pub node_index: crate::AtomicNodeIndex,
9381    pub range: ruff_text_size::TextRange,
9382    pub target: Box<Expr>,
9383    pub annotation: Box<Expr>,
9384    pub value: Option<Box<Expr>>,
9385    pub simple: bool,
9386}
9387
9388/// See also [For](https://docs.python.org/3/library/ast.html#ast.For)
9389/// and [AsyncFor](https://docs.python.org/3/library/ast.html#ast.AsyncFor).
9390///
9391/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9392#[derive(Clone, Debug, PartialEq)]
9393#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9394pub struct StmtFor {
9395    pub node_index: crate::AtomicNodeIndex,
9396    pub range: ruff_text_size::TextRange,
9397    pub is_async: bool,
9398    pub target: Box<Expr>,
9399    pub iter: Box<Expr>,
9400    pub body: thin_vec::ThinVec<Stmt>,
9401    pub orelse: thin_vec::ThinVec<Stmt>,
9402}
9403
9404/// See also [While](https://docs.python.org/3/library/ast.html#ast.While)
9405/// and [AsyncWhile](https://docs.python.org/3/library/ast.html#ast.AsyncWhile).
9406#[derive(Clone, Debug, PartialEq)]
9407#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9408pub struct StmtWhile {
9409    pub node_index: crate::AtomicNodeIndex,
9410    pub range: ruff_text_size::TextRange,
9411    pub test: Box<Expr>,
9412    pub body: thin_vec::ThinVec<Stmt>,
9413    pub orelse: thin_vec::ThinVec<Stmt>,
9414}
9415
9416/// See also [If](https://docs.python.org/3/library/ast.html#ast.If)
9417#[derive(Clone, Debug, PartialEq)]
9418#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9419pub struct StmtIf {
9420    pub node_index: crate::AtomicNodeIndex,
9421    pub range: ruff_text_size::TextRange,
9422    pub test: Box<Expr>,
9423    pub body: thin_vec::ThinVec<Stmt>,
9424    pub elif_else_clauses: Vec<crate::ElifElseClause>,
9425}
9426
9427/// See also [With](https://docs.python.org/3/library/ast.html#ast.With)
9428/// and [AsyncWith](https://docs.python.org/3/library/ast.html#ast.AsyncWith).
9429///
9430/// This type differs from the original Python AST, as it collapses the synchronous and asynchronous variants into a single type.
9431#[derive(Clone, Debug, PartialEq)]
9432#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9433pub struct StmtWith {
9434    pub node_index: crate::AtomicNodeIndex,
9435    pub range: ruff_text_size::TextRange,
9436    pub is_async: bool,
9437    pub items: Vec<crate::WithItem>,
9438    pub body: thin_vec::ThinVec<Stmt>,
9439}
9440
9441/// See also [Match](https://docs.python.org/3/library/ast.html#ast.Match)
9442#[derive(Clone, Debug, PartialEq)]
9443#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9444pub struct StmtMatch {
9445    pub node_index: crate::AtomicNodeIndex,
9446    pub range: ruff_text_size::TextRange,
9447    pub subject: Box<Expr>,
9448    pub cases: Vec<crate::MatchCase>,
9449}
9450
9451/// See also [Raise](https://docs.python.org/3/library/ast.html#ast.Raise)
9452#[derive(Clone, Debug, PartialEq)]
9453#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9454pub struct StmtRaise {
9455    pub node_index: crate::AtomicNodeIndex,
9456    pub range: ruff_text_size::TextRange,
9457    pub exc: Option<Box<Expr>>,
9458    pub cause: Option<Box<Expr>>,
9459}
9460
9461/// See also [Try](https://docs.python.org/3/library/ast.html#ast.Try)
9462/// and [TryStar](https://docs.python.org/3/library/ast.html#ast.TryStar)
9463#[derive(Clone, Debug, PartialEq)]
9464#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9465pub struct StmtTry {
9466    pub node_index: crate::AtomicNodeIndex,
9467    pub range: ruff_text_size::TextRange,
9468    pub body: thin_vec::ThinVec<Stmt>,
9469    pub handlers: Vec<ExceptHandler>,
9470    pub orelse: thin_vec::ThinVec<Stmt>,
9471    pub finalbody: thin_vec::ThinVec<Stmt>,
9472    pub is_star: bool,
9473}
9474
9475/// See also [Assert](https://docs.python.org/3/library/ast.html#ast.Assert)
9476#[derive(Clone, Debug, PartialEq)]
9477#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9478pub struct StmtAssert {
9479    pub node_index: crate::AtomicNodeIndex,
9480    pub range: ruff_text_size::TextRange,
9481    pub test: Box<Expr>,
9482    pub msg: Option<Box<Expr>>,
9483}
9484
9485/// See also [Import](https://docs.python.org/3/library/ast.html#ast.Import)
9486#[derive(Clone, Debug, PartialEq)]
9487#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9488pub struct StmtImport {
9489    pub node_index: crate::AtomicNodeIndex,
9490    pub range: ruff_text_size::TextRange,
9491    pub names: Vec<crate::Alias>,
9492    pub is_lazy: bool,
9493}
9494
9495/// See also [ImportFrom](https://docs.python.org/3/library/ast.html#ast.ImportFrom)
9496#[derive(Clone, Debug, PartialEq)]
9497#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9498pub struct StmtImportFrom {
9499    pub node_index: crate::AtomicNodeIndex,
9500    pub range: ruff_text_size::TextRange,
9501    pub module: Option<crate::Identifier>,
9502    pub names: Vec<crate::Alias>,
9503    pub level: u32,
9504    pub is_lazy: bool,
9505}
9506
9507/// See also [Global](https://docs.python.org/3/library/ast.html#ast.Global)
9508#[derive(Clone, Debug, PartialEq)]
9509#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9510pub struct StmtGlobal {
9511    pub node_index: crate::AtomicNodeIndex,
9512    pub range: ruff_text_size::TextRange,
9513    pub names: Vec<crate::Identifier>,
9514}
9515
9516/// See also [Nonlocal](https://docs.python.org/3/library/ast.html#ast.Nonlocal)
9517#[derive(Clone, Debug, PartialEq)]
9518#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9519pub struct StmtNonlocal {
9520    pub node_index: crate::AtomicNodeIndex,
9521    pub range: ruff_text_size::TextRange,
9522    pub names: Vec<crate::Identifier>,
9523}
9524
9525/// See also [Expr](https://docs.python.org/3/library/ast.html#ast.Expr)
9526#[derive(Clone, Debug, PartialEq)]
9527#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9528pub struct StmtExpr {
9529    pub node_index: crate::AtomicNodeIndex,
9530    pub range: ruff_text_size::TextRange,
9531    pub value: Box<Expr>,
9532}
9533
9534/// See also [Pass](https://docs.python.org/3/library/ast.html#ast.Pass)
9535#[derive(Clone, Debug, PartialEq)]
9536#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9537pub struct StmtPass {
9538    pub node_index: crate::AtomicNodeIndex,
9539    pub range: ruff_text_size::TextRange,
9540}
9541
9542/// See also [Break](https://docs.python.org/3/library/ast.html#ast.Break)
9543#[derive(Clone, Debug, PartialEq)]
9544#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9545pub struct StmtBreak {
9546    pub node_index: crate::AtomicNodeIndex,
9547    pub range: ruff_text_size::TextRange,
9548}
9549
9550/// See also [Continue](https://docs.python.org/3/library/ast.html#ast.Continue)
9551#[derive(Clone, Debug, PartialEq)]
9552#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9553pub struct StmtContinue {
9554    pub node_index: crate::AtomicNodeIndex,
9555    pub range: ruff_text_size::TextRange,
9556}
9557
9558/// An AST node used to represent a IPython escape command at the statement level.
9559///
9560/// For example,
9561/// ```python
9562/// %matplotlib inline
9563/// ```
9564///
9565/// ## Terminology
9566///
9567/// Escape commands are special IPython syntax which starts with a token to identify
9568/// the escape kind followed by the command value itself. [Escape kind] are the kind
9569/// of escape commands that are recognized by the token: `%`, `%%`, `!`, `!!`,
9570/// `?`, `??`, `/`, `;`, and `,`.
9571///
9572/// Help command (or Dynamic Object Introspection as it's called) are the escape commands
9573/// of the kind `?` and `??`. For example, `?str.replace`. Help end command are a subset
9574/// of Help command where the token can be at the end of the line i.e., after the value.
9575/// For example, `str.replace?`.
9576///
9577/// Here's where things get tricky. I'll divide the help end command into two types for
9578/// better understanding:
9579/// 1. Strict version: The token is _only_ at the end of the line. For example,
9580///    `str.replace?` or `str.replace??`.
9581/// 2. Combined version: Along with the `?` or `??` token, which are at the end of the
9582///    line, there are other escape kind tokens that are present at the start as well.
9583///    For example, `%matplotlib?` or `%%timeit?`.
9584///
9585/// Priority comes into picture for the "Combined version" mentioned above. How do
9586/// we determine the escape kind if there are tokens on both side of the value, i.e., which
9587/// token to choose? The Help end command always takes priority over any other token which
9588/// means that if there is `?`/`??` at the end then that is used to determine the kind.
9589/// For example, in `%matplotlib?` the escape kind is determined using the `?` token
9590/// instead of `%` token.
9591///
9592/// ## Syntax
9593///
9594/// `<IpyEscapeKind><Command value>`
9595///
9596/// The simplest form is an escape kind token followed by the command value. For example,
9597/// `%matplotlib inline`, `/foo`, `!pwd`, etc.
9598///
9599/// `<Command value><IpyEscapeKind ("?" or "??")>`
9600///
9601/// The help end escape command would be the reverse of the above syntax. Here, the
9602/// escape kind token can only be either `?` or `??` and it is at the end of the line.
9603/// For example, `str.replace?`, `math.pi??`, etc.
9604///
9605/// `<IpyEscapeKind><Command value><EscapeKind ("?" or "??")>`
9606///
9607/// The final syntax is the combined version of the above two. For example, `%matplotlib?`,
9608/// `%%timeit??`, etc.
9609///
9610/// [Escape kind]: crate::IpyEscapeKind
9611///
9612#[derive(Clone, Debug, PartialEq)]
9613#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9614pub struct StmtIpyEscapeCommand {
9615    pub node_index: crate::AtomicNodeIndex,
9616    pub range: ruff_text_size::TextRange,
9617    pub kind: crate::IpyEscapeKind,
9618    pub value: Box<str>,
9619}
9620
9621/// See also [BoolOp](https://docs.python.org/3/library/ast.html#ast.BoolOp)
9622#[derive(Clone, Debug, PartialEq)]
9623#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9624pub struct ExprBoolOp {
9625    pub node_index: crate::AtomicNodeIndex,
9626    pub range: ruff_text_size::TextRange,
9627    pub op: crate::BoolOp,
9628    pub values: Vec<Expr>,
9629}
9630
9631/// See also [NamedExpr](https://docs.python.org/3/library/ast.html#ast.NamedExpr)
9632#[derive(Clone, Debug, PartialEq)]
9633#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9634pub struct ExprNamed {
9635    pub node_index: crate::AtomicNodeIndex,
9636    pub range: ruff_text_size::TextRange,
9637    pub target: Box<Expr>,
9638    pub value: Box<Expr>,
9639}
9640
9641/// See also [BinOp](https://docs.python.org/3/library/ast.html#ast.BinOp)
9642#[derive(Clone, Debug, PartialEq)]
9643#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9644pub struct ExprBinOp {
9645    pub node_index: crate::AtomicNodeIndex,
9646    pub range: ruff_text_size::TextRange,
9647    pub left: Box<Expr>,
9648    pub op: crate::Operator,
9649    pub right: Box<Expr>,
9650}
9651
9652/// See also [UnaryOp](https://docs.python.org/3/library/ast.html#ast.UnaryOp)
9653#[derive(Clone, Debug, PartialEq)]
9654#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9655pub struct ExprUnaryOp {
9656    pub node_index: crate::AtomicNodeIndex,
9657    pub range: ruff_text_size::TextRange,
9658    pub op: crate::UnaryOp,
9659    pub operand: Box<Expr>,
9660}
9661
9662/// See also [Lambda](https://docs.python.org/3/library/ast.html#ast.Lambda)
9663#[derive(Clone, Debug, PartialEq)]
9664#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9665pub struct ExprLambda {
9666    pub node_index: crate::AtomicNodeIndex,
9667    pub range: ruff_text_size::TextRange,
9668    pub parameters: Option<Box<crate::Parameters>>,
9669    pub body: Box<Expr>,
9670}
9671
9672/// See also [IfExp](https://docs.python.org/3/library/ast.html#ast.IfExp)
9673#[derive(Clone, Debug, PartialEq)]
9674#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9675pub struct ExprIf {
9676    pub node_index: crate::AtomicNodeIndex,
9677    pub range: ruff_text_size::TextRange,
9678    pub test: Box<Expr>,
9679    pub body: Box<Expr>,
9680    pub orelse: Box<Expr>,
9681}
9682
9683/// See also [Dict](https://docs.python.org/3/library/ast.html#ast.Dict)
9684#[derive(Clone, Debug, PartialEq)]
9685#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9686pub struct ExprDict {
9687    pub node_index: crate::AtomicNodeIndex,
9688    pub range: ruff_text_size::TextRange,
9689    pub items: Vec<crate::DictItem>,
9690}
9691
9692/// See also [Set](https://docs.python.org/3/library/ast.html#ast.Set)
9693#[derive(Clone, Debug, PartialEq)]
9694#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9695pub struct ExprSet {
9696    pub node_index: crate::AtomicNodeIndex,
9697    pub range: ruff_text_size::TextRange,
9698    pub elts: Vec<Expr>,
9699}
9700
9701/// See also [ListComp](https://docs.python.org/3/library/ast.html#ast.ListComp)
9702#[derive(Clone, Debug, PartialEq)]
9703#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9704pub struct ExprListComp {
9705    pub node_index: crate::AtomicNodeIndex,
9706    pub range: ruff_text_size::TextRange,
9707    pub elt: Box<Expr>,
9708    pub generators: Vec<crate::Comprehension>,
9709}
9710
9711/// See also [SetComp](https://docs.python.org/3/library/ast.html#ast.SetComp)
9712#[derive(Clone, Debug, PartialEq)]
9713#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9714pub struct ExprSetComp {
9715    pub node_index: crate::AtomicNodeIndex,
9716    pub range: ruff_text_size::TextRange,
9717    pub elt: Box<Expr>,
9718    pub generators: Vec<crate::Comprehension>,
9719}
9720
9721/// See also [DictComp](https://docs.python.org/3/library/ast.html#ast.DictComp)
9722#[derive(Clone, Debug, PartialEq)]
9723#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9724pub struct ExprDictComp {
9725    pub node_index: crate::AtomicNodeIndex,
9726    pub range: ruff_text_size::TextRange,
9727    pub key: Option<Box<Expr>>,
9728    pub value: Box<Expr>,
9729    pub generators: Vec<crate::Comprehension>,
9730}
9731
9732/// See also [GeneratorExp](https://docs.python.org/3/library/ast.html#ast.GeneratorExp)
9733#[derive(Clone, Debug, PartialEq)]
9734#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9735pub struct ExprGenerator {
9736    pub node_index: crate::AtomicNodeIndex,
9737    pub range: ruff_text_size::TextRange,
9738    pub elt: Box<Expr>,
9739    pub generators: Vec<crate::Comprehension>,
9740    pub parenthesized: bool,
9741}
9742
9743/// See also [Await](https://docs.python.org/3/library/ast.html#ast.Await)
9744#[derive(Clone, Debug, PartialEq)]
9745#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9746pub struct ExprAwait {
9747    pub node_index: crate::AtomicNodeIndex,
9748    pub range: ruff_text_size::TextRange,
9749    pub value: Box<Expr>,
9750}
9751
9752/// See also [Yield](https://docs.python.org/3/library/ast.html#ast.Yield)
9753#[derive(Clone, Debug, PartialEq)]
9754#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9755pub struct ExprYield {
9756    pub node_index: crate::AtomicNodeIndex,
9757    pub range: ruff_text_size::TextRange,
9758    pub value: Option<Box<Expr>>,
9759}
9760
9761/// See also [YieldFrom](https://docs.python.org/3/library/ast.html#ast.YieldFrom)
9762#[derive(Clone, Debug, PartialEq)]
9763#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9764pub struct ExprYieldFrom {
9765    pub node_index: crate::AtomicNodeIndex,
9766    pub range: ruff_text_size::TextRange,
9767    pub value: Box<Expr>,
9768}
9769
9770/// See also [Compare](https://docs.python.org/3/library/ast.html#ast.Compare)
9771#[derive(Clone, Debug, PartialEq)]
9772#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9773pub struct ExprCompare {
9774    pub node_index: crate::AtomicNodeIndex,
9775    pub range: ruff_text_size::TextRange,
9776    pub left: Box<Expr>,
9777    pub ops: Box<[crate::CmpOp]>,
9778    pub comparators: Box<[Expr]>,
9779}
9780
9781/// A call expression whose end offset is derived from its arguments.
9782///
9783/// The parser and error-recovery code must ensure that the call and its arguments
9784/// end at the same offset.
9785///
9786/// See also [Call](https://docs.python.org/3/library/ast.html#ast.Call)
9787#[derive(Clone, PartialEq)]
9788#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9789pub struct ExprCall {
9790    pub node_index: crate::AtomicNodeIndex,
9791    pub range_start: ruff_text_size::TextSize,
9792    pub func: Box<Expr>,
9793    pub arguments: crate::Arguments,
9794}
9795
9796/// An AST node that represents either a single-part f-string literal
9797/// or an implicitly concatenated f-string literal.
9798///
9799/// This type differs from the original Python AST `JoinedStr` in that it
9800/// doesn't join the implicitly concatenated parts into a single string. Instead,
9801/// it keeps them separate and provide various methods to access the parts.
9802///
9803/// See also [JoinedStr](https://docs.python.org/3/library/ast.html#ast.JoinedStr)
9804#[derive(Clone, Debug, PartialEq)]
9805#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9806pub struct ExprFString {
9807    pub node_index: crate::AtomicNodeIndex,
9808    pub range: ruff_text_size::TextRange,
9809    pub value: crate::FStringValue,
9810}
9811
9812/// An AST node that represents either a single-part t-string literal
9813/// or an implicitly concatenated t-string literal.
9814///
9815/// This type differs from the original Python AST `TemplateStr` in that it
9816/// doesn't join the implicitly concatenated parts into a single string. Instead,
9817/// it keeps them separate and provide various methods to access the parts.
9818///
9819/// See also [TemplateStr](https://docs.python.org/3/library/ast.html#ast.TemplateStr)
9820#[derive(Clone, Debug, PartialEq)]
9821#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9822pub struct ExprTString {
9823    pub node_index: crate::AtomicNodeIndex,
9824    pub range: ruff_text_size::TextRange,
9825    pub value: crate::TStringValue,
9826}
9827
9828/// An AST node that represents either a single-part string literal
9829/// or an implicitly concatenated string literal.
9830#[derive(Clone, Debug, PartialEq)]
9831#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9832pub struct ExprStringLiteral {
9833    pub node_index: crate::AtomicNodeIndex,
9834    pub range: ruff_text_size::TextRange,
9835    pub value: crate::StringLiteralValue,
9836}
9837
9838/// An AST node that represents either a single-part bytestring literal
9839/// or an implicitly concatenated bytestring literal.
9840#[derive(Clone, Debug, PartialEq)]
9841#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9842pub struct ExprBytesLiteral {
9843    pub node_index: crate::AtomicNodeIndex,
9844    pub range: ruff_text_size::TextRange,
9845    pub value: crate::BytesLiteralValue,
9846}
9847
9848#[derive(Clone, Debug, PartialEq)]
9849#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9850pub struct ExprNumberLiteral {
9851    pub node_index: crate::AtomicNodeIndex,
9852    pub range: ruff_text_size::TextRange,
9853    pub value: crate::Number,
9854}
9855
9856#[derive(Clone, Debug, PartialEq, Default)]
9857#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9858pub struct ExprBooleanLiteral {
9859    pub node_index: crate::AtomicNodeIndex,
9860    pub range: ruff_text_size::TextRange,
9861    pub value: bool,
9862}
9863
9864#[derive(Clone, Debug, PartialEq, Default)]
9865#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9866pub struct ExprNoneLiteral {
9867    pub node_index: crate::AtomicNodeIndex,
9868    pub range: ruff_text_size::TextRange,
9869}
9870
9871#[derive(Clone, Debug, PartialEq, Default)]
9872#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9873pub struct ExprEllipsisLiteral {
9874    pub node_index: crate::AtomicNodeIndex,
9875    pub range: ruff_text_size::TextRange,
9876}
9877
9878/// See also [Attribute](https://docs.python.org/3/library/ast.html#ast.Attribute)
9879#[derive(Clone, Debug, PartialEq)]
9880#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9881pub struct ExprAttribute {
9882    pub node_index: crate::AtomicNodeIndex,
9883    pub range: ruff_text_size::TextRange,
9884    pub value: Box<Expr>,
9885    pub attr: crate::Identifier,
9886    pub ctx: crate::ExprContext,
9887}
9888
9889/// See also [Subscript](https://docs.python.org/3/library/ast.html#ast.Subscript)
9890#[derive(Clone, Debug, PartialEq)]
9891#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9892pub struct ExprSubscript {
9893    pub node_index: crate::AtomicNodeIndex,
9894    pub range: ruff_text_size::TextRange,
9895    pub value: Box<Expr>,
9896    pub slice: Box<Expr>,
9897    pub ctx: crate::ExprContext,
9898}
9899
9900/// See also [Starred](https://docs.python.org/3/library/ast.html#ast.Starred)
9901#[derive(Clone, Debug, PartialEq)]
9902#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9903pub struct ExprStarred {
9904    pub node_index: crate::AtomicNodeIndex,
9905    pub range: ruff_text_size::TextRange,
9906    pub value: Box<Expr>,
9907    pub ctx: crate::ExprContext,
9908}
9909
9910/// See also [Name](https://docs.python.org/3/library/ast.html#ast.Name)
9911#[derive(Clone, Debug, PartialEq)]
9912#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9913pub struct ExprName {
9914    pub node_index: crate::AtomicNodeIndex,
9915    pub range: ruff_text_size::TextRange,
9916    pub id: Name,
9917    pub ctx: crate::ExprContext,
9918}
9919
9920/// See also [List](https://docs.python.org/3/library/ast.html#ast.List)
9921#[derive(Clone, Debug, PartialEq)]
9922#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9923pub struct ExprList {
9924    pub node_index: crate::AtomicNodeIndex,
9925    pub range: ruff_text_size::TextRange,
9926    pub elts: Vec<Expr>,
9927    pub ctx: crate::ExprContext,
9928}
9929
9930/// See also [Tuple](https://docs.python.org/3/library/ast.html#ast.Tuple)
9931#[derive(Clone, Debug, PartialEq)]
9932#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9933pub struct ExprTuple {
9934    pub node_index: crate::AtomicNodeIndex,
9935    pub range: ruff_text_size::TextRange,
9936    pub elts: Vec<Expr>,
9937    pub ctx: crate::ExprContext,
9938    pub parenthesized: bool,
9939}
9940
9941/// See also [Slice](https://docs.python.org/3/library/ast.html#ast.Slice)
9942#[derive(Clone, Debug, PartialEq)]
9943#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9944pub struct ExprSlice {
9945    pub node_index: crate::AtomicNodeIndex,
9946    pub range: ruff_text_size::TextRange,
9947    pub lower: Option<Box<Expr>>,
9948    pub upper: Option<Box<Expr>>,
9949    pub step: Option<Box<Expr>>,
9950}
9951
9952/// An AST node used to represent a IPython escape command at the expression level.
9953///
9954/// For example,
9955/// ```python
9956/// dir = !pwd
9957/// ```
9958///
9959/// Here, the escape kind can only be `!` or `%` otherwise it is a syntax error.
9960///
9961/// For more information related to terminology and syntax of escape commands,
9962/// see [`StmtIpyEscapeCommand`].
9963#[derive(Clone, Debug, PartialEq)]
9964#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9965pub struct ExprIpyEscapeCommand {
9966    pub node_index: crate::AtomicNodeIndex,
9967    pub range: ruff_text_size::TextRange,
9968    pub kind: crate::IpyEscapeKind,
9969    pub value: Box<str>,
9970}
9971
9972/// See also [MatchValue](https://docs.python.org/3/library/ast.html#ast.MatchValue)
9973#[derive(Clone, Debug, PartialEq)]
9974#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9975pub struct PatternMatchValue {
9976    pub node_index: crate::AtomicNodeIndex,
9977    pub range: ruff_text_size::TextRange,
9978    pub value: Box<Expr>,
9979}
9980
9981/// See also [MatchSingleton](https://docs.python.org/3/library/ast.html#ast.MatchSingleton)
9982#[derive(Clone, Debug, PartialEq)]
9983#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9984pub struct PatternMatchSingleton {
9985    pub node_index: crate::AtomicNodeIndex,
9986    pub range: ruff_text_size::TextRange,
9987    pub value: crate::Singleton,
9988}
9989
9990/// See also [MatchSequence](https://docs.python.org/3/library/ast.html#ast.MatchSequence)
9991#[derive(Clone, Debug, PartialEq)]
9992#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
9993pub struct PatternMatchSequence {
9994    pub node_index: crate::AtomicNodeIndex,
9995    pub range: ruff_text_size::TextRange,
9996    pub patterns: Vec<Pattern>,
9997}
9998
9999/// See also [MatchMapping](https://docs.python.org/3/library/ast.html#ast.MatchMapping)
10000#[derive(Clone, Debug, PartialEq)]
10001#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10002pub struct PatternMatchMapping {
10003    pub node_index: crate::AtomicNodeIndex,
10004    pub range: ruff_text_size::TextRange,
10005    pub keys: thin_vec::ThinVec<Expr>,
10006    pub patterns: thin_vec::ThinVec<Pattern>,
10007    pub rest: Option<crate::Identifier>,
10008}
10009
10010/// See also [MatchClass](https://docs.python.org/3/library/ast.html#ast.MatchClass)
10011#[derive(Clone, Debug, PartialEq)]
10012#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10013pub struct PatternMatchClass {
10014    pub node_index: crate::AtomicNodeIndex,
10015    pub range: ruff_text_size::TextRange,
10016    pub cls: Box<Expr>,
10017    pub arguments: crate::PatternArguments,
10018}
10019
10020/// See also [MatchStar](https://docs.python.org/3/library/ast.html#ast.MatchStar)
10021#[derive(Clone, Debug, PartialEq)]
10022#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10023pub struct PatternMatchStar {
10024    pub node_index: crate::AtomicNodeIndex,
10025    pub range: ruff_text_size::TextRange,
10026    pub name: Option<crate::Identifier>,
10027}
10028
10029/// See also [MatchAs](https://docs.python.org/3/library/ast.html#ast.MatchAs)
10030#[derive(Clone, Debug, PartialEq)]
10031#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10032pub struct PatternMatchAs {
10033    pub node_index: crate::AtomicNodeIndex,
10034    pub range: ruff_text_size::TextRange,
10035    pub pattern: Option<Box<Pattern>>,
10036    pub name: Option<crate::Identifier>,
10037}
10038
10039/// See also [MatchOr](https://docs.python.org/3/library/ast.html#ast.MatchOr)
10040#[derive(Clone, Debug, PartialEq)]
10041#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10042pub struct PatternMatchOr {
10043    pub node_index: crate::AtomicNodeIndex,
10044    pub range: ruff_text_size::TextRange,
10045    pub patterns: Vec<Pattern>,
10046}
10047
10048/// See also [TypeVar](https://docs.python.org/3/library/ast.html#ast.TypeVar)
10049#[derive(Clone, Debug, PartialEq)]
10050#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10051pub struct TypeParamTypeVar {
10052    pub node_index: crate::AtomicNodeIndex,
10053    pub range: ruff_text_size::TextRange,
10054    pub name: crate::Identifier,
10055    pub bound: Option<Box<Expr>>,
10056    pub default: Option<Box<Expr>>,
10057}
10058
10059/// See also [TypeVarTuple](https://docs.python.org/3/library/ast.html#ast.TypeVarTuple)
10060#[derive(Clone, Debug, PartialEq)]
10061#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10062pub struct TypeParamTypeVarTuple {
10063    pub node_index: crate::AtomicNodeIndex,
10064    pub range: ruff_text_size::TextRange,
10065    pub name: crate::Identifier,
10066    pub default: Option<Box<Expr>>,
10067}
10068
10069/// See also [ParamSpec](https://docs.python.org/3/library/ast.html#ast.ParamSpec)
10070#[derive(Clone, Debug, PartialEq)]
10071#[cfg_attr(feature = "get-size", derive(get_size2::GetSize))]
10072pub struct TypeParamParamSpec {
10073    pub node_index: crate::AtomicNodeIndex,
10074    pub range: ruff_text_size::TextRange,
10075    pub name: crate::Identifier,
10076    pub default: Option<Box<Expr>>,
10077}
10078
10079impl ModModule {
10080    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10081    where
10082        V: SourceOrderVisitor<'a> + ?Sized,
10083    {
10084        let ModModule {
10085            body,
10086            range: _,
10087            node_index: _,
10088        } = self;
10089        visitor.visit_body(body);
10090    }
10091}
10092
10093impl ModExpression {
10094    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10095    where
10096        V: SourceOrderVisitor<'a> + ?Sized,
10097    {
10098        let ModExpression {
10099            body,
10100            range: _,
10101            node_index: _,
10102        } = self;
10103        visitor.visit_expr(body);
10104    }
10105}
10106
10107impl StmtFunctionDef {
10108    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10109    where
10110        V: SourceOrderVisitor<'a> + ?Sized,
10111    {
10112        let StmtFunctionDef {
10113            is_async: _,
10114            decorator_list,
10115            name,
10116            type_params,
10117            parameters,
10118            returns,
10119            body,
10120            range: _,
10121            node_index: _,
10122        } = self;
10123
10124        for elm in decorator_list {
10125            visitor.visit_decorator(elm);
10126        }
10127        visitor.visit_identifier(name);
10128
10129        if let Some(type_params) = type_params {
10130            visitor.visit_type_params(type_params);
10131        }
10132
10133        visitor.visit_parameters(parameters);
10134
10135        if let Some(returns) = returns {
10136            visitor.visit_annotation(returns);
10137        }
10138
10139        visitor.visit_body(body);
10140    }
10141}
10142
10143impl StmtClassDef {
10144    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10145    where
10146        V: SourceOrderVisitor<'a> + ?Sized,
10147    {
10148        let StmtClassDef {
10149            decorator_list,
10150            name,
10151            type_params,
10152            arguments,
10153            body,
10154            range: _,
10155            node_index: _,
10156        } = self;
10157
10158        for elm in decorator_list {
10159            visitor.visit_decorator(elm);
10160        }
10161        visitor.visit_identifier(name);
10162
10163        if let Some(type_params) = type_params {
10164            visitor.visit_type_params(type_params);
10165        }
10166
10167        if let Some(arguments) = arguments {
10168            visitor.visit_arguments(arguments);
10169        }
10170
10171        visitor.visit_body(body);
10172    }
10173}
10174
10175impl StmtReturn {
10176    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10177    where
10178        V: SourceOrderVisitor<'a> + ?Sized,
10179    {
10180        let StmtReturn {
10181            value,
10182            range: _,
10183            node_index: _,
10184        } = self;
10185
10186        if let Some(value) = value {
10187            visitor.visit_expr(value);
10188        }
10189    }
10190}
10191
10192impl StmtDelete {
10193    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10194    where
10195        V: SourceOrderVisitor<'a> + ?Sized,
10196    {
10197        let StmtDelete {
10198            targets,
10199            range: _,
10200            node_index: _,
10201        } = self;
10202
10203        for elm in targets {
10204            visitor.visit_expr(elm);
10205        }
10206    }
10207}
10208
10209impl StmtTypeAlias {
10210    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10211    where
10212        V: SourceOrderVisitor<'a> + ?Sized,
10213    {
10214        let StmtTypeAlias {
10215            name,
10216            type_params,
10217            value,
10218            range: _,
10219            node_index: _,
10220        } = self;
10221        visitor.visit_expr(name);
10222
10223        if let Some(type_params) = type_params {
10224            visitor.visit_type_params(type_params);
10225        }
10226
10227        visitor.visit_expr(value);
10228    }
10229}
10230
10231impl StmtAssign {
10232    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10233    where
10234        V: SourceOrderVisitor<'a> + ?Sized,
10235    {
10236        let StmtAssign {
10237            targets,
10238            value,
10239            range: _,
10240            node_index: _,
10241        } = self;
10242
10243        for elm in targets {
10244            visitor.visit_expr(elm);
10245        }
10246        visitor.visit_expr(value);
10247    }
10248}
10249
10250impl StmtAugAssign {
10251    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10252    where
10253        V: SourceOrderVisitor<'a> + ?Sized,
10254    {
10255        let StmtAugAssign {
10256            target,
10257            op,
10258            value,
10259            range: _,
10260            node_index: _,
10261        } = self;
10262        visitor.visit_expr(target);
10263        visitor.visit_operator(op);
10264        visitor.visit_expr(value);
10265    }
10266}
10267
10268impl StmtAnnAssign {
10269    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10270    where
10271        V: SourceOrderVisitor<'a> + ?Sized,
10272    {
10273        let StmtAnnAssign {
10274            target,
10275            annotation,
10276            value,
10277            simple: _,
10278            range: _,
10279            node_index: _,
10280        } = self;
10281        visitor.visit_expr(target);
10282        visitor.visit_annotation(annotation);
10283
10284        if let Some(value) = value {
10285            visitor.visit_expr(value);
10286        }
10287    }
10288}
10289
10290impl StmtFor {
10291    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10292    where
10293        V: SourceOrderVisitor<'a> + ?Sized,
10294    {
10295        let StmtFor {
10296            is_async: _,
10297            target,
10298            iter,
10299            body,
10300            orelse,
10301            range: _,
10302            node_index: _,
10303        } = self;
10304        visitor.visit_expr(target);
10305        visitor.visit_expr(iter);
10306        visitor.visit_body(body);
10307        visitor.visit_body(orelse);
10308    }
10309}
10310
10311impl StmtWhile {
10312    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10313    where
10314        V: SourceOrderVisitor<'a> + ?Sized,
10315    {
10316        let StmtWhile {
10317            test,
10318            body,
10319            orelse,
10320            range: _,
10321            node_index: _,
10322        } = self;
10323        visitor.visit_expr(test);
10324        visitor.visit_body(body);
10325        visitor.visit_body(orelse);
10326    }
10327}
10328
10329impl StmtIf {
10330    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10331    where
10332        V: SourceOrderVisitor<'a> + ?Sized,
10333    {
10334        let StmtIf {
10335            test,
10336            body,
10337            elif_else_clauses,
10338            range: _,
10339            node_index: _,
10340        } = self;
10341        visitor.visit_expr(test);
10342        visitor.visit_body(body);
10343
10344        for elm in elif_else_clauses {
10345            visitor.visit_elif_else_clause(elm);
10346        }
10347    }
10348}
10349
10350impl StmtWith {
10351    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10352    where
10353        V: SourceOrderVisitor<'a> + ?Sized,
10354    {
10355        let StmtWith {
10356            is_async: _,
10357            items,
10358            body,
10359            range: _,
10360            node_index: _,
10361        } = self;
10362
10363        for elm in items {
10364            visitor.visit_with_item(elm);
10365        }
10366        visitor.visit_body(body);
10367    }
10368}
10369
10370impl StmtMatch {
10371    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10372    where
10373        V: SourceOrderVisitor<'a> + ?Sized,
10374    {
10375        let StmtMatch {
10376            subject,
10377            cases,
10378            range: _,
10379            node_index: _,
10380        } = self;
10381        visitor.visit_expr(subject);
10382
10383        for elm in cases {
10384            visitor.visit_match_case(elm);
10385        }
10386    }
10387}
10388
10389impl StmtRaise {
10390    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10391    where
10392        V: SourceOrderVisitor<'a> + ?Sized,
10393    {
10394        let StmtRaise {
10395            exc,
10396            cause,
10397            range: _,
10398            node_index: _,
10399        } = self;
10400
10401        if let Some(exc) = exc {
10402            visitor.visit_expr(exc);
10403        }
10404
10405        if let Some(cause) = cause {
10406            visitor.visit_expr(cause);
10407        }
10408    }
10409}
10410
10411impl StmtTry {
10412    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10413    where
10414        V: SourceOrderVisitor<'a> + ?Sized,
10415    {
10416        let StmtTry {
10417            body,
10418            handlers,
10419            orelse,
10420            finalbody,
10421            is_star: _,
10422            range: _,
10423            node_index: _,
10424        } = self;
10425        visitor.visit_body(body);
10426
10427        for elm in handlers {
10428            visitor.visit_except_handler(elm);
10429        }
10430        visitor.visit_body(orelse);
10431        visitor.visit_body(finalbody);
10432    }
10433}
10434
10435impl StmtAssert {
10436    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10437    where
10438        V: SourceOrderVisitor<'a> + ?Sized,
10439    {
10440        let StmtAssert {
10441            test,
10442            msg,
10443            range: _,
10444            node_index: _,
10445        } = self;
10446        visitor.visit_expr(test);
10447
10448        if let Some(msg) = msg {
10449            visitor.visit_expr(msg);
10450        }
10451    }
10452}
10453
10454impl StmtImport {
10455    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10456    where
10457        V: SourceOrderVisitor<'a> + ?Sized,
10458    {
10459        let StmtImport {
10460            names,
10461            is_lazy: _,
10462            range: _,
10463            node_index: _,
10464        } = self;
10465
10466        for elm in names {
10467            visitor.visit_alias(elm);
10468        }
10469    }
10470}
10471
10472impl StmtImportFrom {
10473    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10474    where
10475        V: SourceOrderVisitor<'a> + ?Sized,
10476    {
10477        let StmtImportFrom {
10478            module,
10479            names,
10480            level: _,
10481            is_lazy: _,
10482            range: _,
10483            node_index: _,
10484        } = self;
10485
10486        if let Some(module) = module {
10487            visitor.visit_identifier(module);
10488        }
10489
10490        for elm in names {
10491            visitor.visit_alias(elm);
10492        }
10493    }
10494}
10495
10496impl StmtGlobal {
10497    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10498    where
10499        V: SourceOrderVisitor<'a> + ?Sized,
10500    {
10501        let StmtGlobal {
10502            names,
10503            range: _,
10504            node_index: _,
10505        } = self;
10506
10507        for elm in names {
10508            visitor.visit_identifier(elm);
10509        }
10510    }
10511}
10512
10513impl StmtNonlocal {
10514    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10515    where
10516        V: SourceOrderVisitor<'a> + ?Sized,
10517    {
10518        let StmtNonlocal {
10519            names,
10520            range: _,
10521            node_index: _,
10522        } = self;
10523
10524        for elm in names {
10525            visitor.visit_identifier(elm);
10526        }
10527    }
10528}
10529
10530impl StmtExpr {
10531    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10532    where
10533        V: SourceOrderVisitor<'a> + ?Sized,
10534    {
10535        let StmtExpr {
10536            value,
10537            range: _,
10538            node_index: _,
10539        } = self;
10540        visitor.visit_expr(value);
10541    }
10542}
10543
10544impl StmtPass {
10545    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10546    where
10547        V: SourceOrderVisitor<'a> + ?Sized,
10548    {
10549        let StmtPass {
10550            range: _,
10551            node_index: _,
10552        } = self;
10553    }
10554}
10555
10556impl StmtBreak {
10557    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10558    where
10559        V: SourceOrderVisitor<'a> + ?Sized,
10560    {
10561        let StmtBreak {
10562            range: _,
10563            node_index: _,
10564        } = self;
10565    }
10566}
10567
10568impl StmtContinue {
10569    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10570    where
10571        V: SourceOrderVisitor<'a> + ?Sized,
10572    {
10573        let StmtContinue {
10574            range: _,
10575            node_index: _,
10576        } = self;
10577    }
10578}
10579
10580impl StmtIpyEscapeCommand {
10581    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10582    where
10583        V: SourceOrderVisitor<'a> + ?Sized,
10584    {
10585        let StmtIpyEscapeCommand {
10586            kind: _,
10587            value: _,
10588            range: _,
10589            node_index: _,
10590        } = self;
10591    }
10592}
10593
10594impl ExprNamed {
10595    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10596    where
10597        V: SourceOrderVisitor<'a> + ?Sized,
10598    {
10599        let ExprNamed {
10600            target,
10601            value,
10602            range: _,
10603            node_index: _,
10604        } = self;
10605        visitor.visit_expr(target);
10606        visitor.visit_expr(value);
10607    }
10608}
10609
10610impl ExprBinOp {
10611    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10612    where
10613        V: SourceOrderVisitor<'a> + ?Sized,
10614    {
10615        let ExprBinOp {
10616            left,
10617            op,
10618            right,
10619            range: _,
10620            node_index: _,
10621        } = self;
10622        visitor.visit_expr(left);
10623        visitor.visit_operator(op);
10624        visitor.visit_expr(right);
10625    }
10626}
10627
10628impl ExprUnaryOp {
10629    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10630    where
10631        V: SourceOrderVisitor<'a> + ?Sized,
10632    {
10633        let ExprUnaryOp {
10634            op,
10635            operand,
10636            range: _,
10637            node_index: _,
10638        } = self;
10639        visitor.visit_unary_op(op);
10640        visitor.visit_expr(operand);
10641    }
10642}
10643
10644impl ExprLambda {
10645    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10646    where
10647        V: SourceOrderVisitor<'a> + ?Sized,
10648    {
10649        let ExprLambda {
10650            parameters,
10651            body,
10652            range: _,
10653            node_index: _,
10654        } = self;
10655
10656        if let Some(parameters) = parameters {
10657            visitor.visit_parameters(parameters);
10658        }
10659
10660        visitor.visit_expr(body);
10661    }
10662}
10663
10664impl ExprIf {
10665    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10666    where
10667        V: SourceOrderVisitor<'a> + ?Sized,
10668    {
10669        let ExprIf {
10670            test,
10671            body,
10672            orelse,
10673            range: _,
10674            node_index: _,
10675        } = self;
10676        visitor.visit_expr(body);
10677        visitor.visit_expr(test);
10678        visitor.visit_expr(orelse);
10679    }
10680}
10681
10682impl ExprSet {
10683    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10684    where
10685        V: SourceOrderVisitor<'a> + ?Sized,
10686    {
10687        let ExprSet {
10688            elts,
10689            range: _,
10690            node_index: _,
10691        } = self;
10692
10693        for elm in elts {
10694            visitor.visit_expr(elm);
10695        }
10696    }
10697}
10698
10699impl ExprListComp {
10700    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10701    where
10702        V: SourceOrderVisitor<'a> + ?Sized,
10703    {
10704        let ExprListComp {
10705            elt,
10706            generators,
10707            range: _,
10708            node_index: _,
10709        } = self;
10710        visitor.visit_expr(elt);
10711
10712        for elm in generators {
10713            visitor.visit_comprehension(elm);
10714        }
10715    }
10716}
10717
10718impl ExprSetComp {
10719    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10720    where
10721        V: SourceOrderVisitor<'a> + ?Sized,
10722    {
10723        let ExprSetComp {
10724            elt,
10725            generators,
10726            range: _,
10727            node_index: _,
10728        } = self;
10729        visitor.visit_expr(elt);
10730
10731        for elm in generators {
10732            visitor.visit_comprehension(elm);
10733        }
10734    }
10735}
10736
10737impl ExprDictComp {
10738    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10739    where
10740        V: SourceOrderVisitor<'a> + ?Sized,
10741    {
10742        let ExprDictComp {
10743            key,
10744            value,
10745            generators,
10746            range: _,
10747            node_index: _,
10748        } = self;
10749
10750        if let Some(key) = key {
10751            visitor.visit_expr(key);
10752        }
10753
10754        visitor.visit_expr(value);
10755
10756        for elm in generators {
10757            visitor.visit_comprehension(elm);
10758        }
10759    }
10760}
10761
10762impl ExprGenerator {
10763    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10764    where
10765        V: SourceOrderVisitor<'a> + ?Sized,
10766    {
10767        let ExprGenerator {
10768            elt,
10769            generators,
10770            parenthesized: _,
10771            range: _,
10772            node_index: _,
10773        } = self;
10774        visitor.visit_expr(elt);
10775
10776        for elm in generators {
10777            visitor.visit_comprehension(elm);
10778        }
10779    }
10780}
10781
10782impl ExprAwait {
10783    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10784    where
10785        V: SourceOrderVisitor<'a> + ?Sized,
10786    {
10787        let ExprAwait {
10788            value,
10789            range: _,
10790            node_index: _,
10791        } = self;
10792        visitor.visit_expr(value);
10793    }
10794}
10795
10796impl ExprYield {
10797    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10798    where
10799        V: SourceOrderVisitor<'a> + ?Sized,
10800    {
10801        let ExprYield {
10802            value,
10803            range: _,
10804            node_index: _,
10805        } = self;
10806
10807        if let Some(value) = value {
10808            visitor.visit_expr(value);
10809        }
10810    }
10811}
10812
10813impl ExprYieldFrom {
10814    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10815    where
10816        V: SourceOrderVisitor<'a> + ?Sized,
10817    {
10818        let ExprYieldFrom {
10819            value,
10820            range: _,
10821            node_index: _,
10822        } = self;
10823        visitor.visit_expr(value);
10824    }
10825}
10826
10827impl ExprCall {
10828    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10829    where
10830        V: SourceOrderVisitor<'a> + ?Sized,
10831    {
10832        let ExprCall {
10833            range_start: _,
10834            func,
10835            arguments,
10836            node_index: _,
10837        } = self;
10838        visitor.visit_expr(func);
10839        visitor.visit_arguments(arguments);
10840    }
10841}
10842
10843impl ExprNumberLiteral {
10844    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10845    where
10846        V: SourceOrderVisitor<'a> + ?Sized,
10847    {
10848        let ExprNumberLiteral {
10849            value: _,
10850            range: _,
10851            node_index: _,
10852        } = self;
10853    }
10854}
10855
10856impl ExprBooleanLiteral {
10857    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10858    where
10859        V: SourceOrderVisitor<'a> + ?Sized,
10860    {
10861        let ExprBooleanLiteral {
10862            value: _,
10863            range: _,
10864            node_index: _,
10865        } = self;
10866    }
10867}
10868
10869impl ExprNoneLiteral {
10870    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10871    where
10872        V: SourceOrderVisitor<'a> + ?Sized,
10873    {
10874        let ExprNoneLiteral {
10875            range: _,
10876            node_index: _,
10877        } = self;
10878    }
10879}
10880
10881impl ExprEllipsisLiteral {
10882    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10883    where
10884        V: SourceOrderVisitor<'a> + ?Sized,
10885    {
10886        let ExprEllipsisLiteral {
10887            range: _,
10888            node_index: _,
10889        } = self;
10890    }
10891}
10892
10893impl ExprAttribute {
10894    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10895    where
10896        V: SourceOrderVisitor<'a> + ?Sized,
10897    {
10898        let ExprAttribute {
10899            value,
10900            attr,
10901            ctx: _,
10902            range: _,
10903            node_index: _,
10904        } = self;
10905        visitor.visit_expr(value);
10906        visitor.visit_identifier(attr);
10907    }
10908}
10909
10910impl ExprSubscript {
10911    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10912    where
10913        V: SourceOrderVisitor<'a> + ?Sized,
10914    {
10915        let ExprSubscript {
10916            value,
10917            slice,
10918            ctx: _,
10919            range: _,
10920            node_index: _,
10921        } = self;
10922        visitor.visit_expr(value);
10923        visitor.visit_expr(slice);
10924    }
10925}
10926
10927impl ExprStarred {
10928    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10929    where
10930        V: SourceOrderVisitor<'a> + ?Sized,
10931    {
10932        let ExprStarred {
10933            value,
10934            ctx: _,
10935            range: _,
10936            node_index: _,
10937        } = self;
10938        visitor.visit_expr(value);
10939    }
10940}
10941
10942impl ExprName {
10943    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
10944    where
10945        V: SourceOrderVisitor<'a> + ?Sized,
10946    {
10947        let ExprName {
10948            id: _,
10949            ctx: _,
10950            range: _,
10951            node_index: _,
10952        } = self;
10953    }
10954}
10955
10956impl ExprList {
10957    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10958    where
10959        V: SourceOrderVisitor<'a> + ?Sized,
10960    {
10961        let ExprList {
10962            elts,
10963            ctx: _,
10964            range: _,
10965            node_index: _,
10966        } = self;
10967
10968        for elm in elts {
10969            visitor.visit_expr(elm);
10970        }
10971    }
10972}
10973
10974impl ExprTuple {
10975    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10976    where
10977        V: SourceOrderVisitor<'a> + ?Sized,
10978    {
10979        let ExprTuple {
10980            elts,
10981            ctx: _,
10982            parenthesized: _,
10983            range: _,
10984            node_index: _,
10985        } = self;
10986
10987        for elm in elts {
10988            visitor.visit_expr(elm);
10989        }
10990    }
10991}
10992
10993impl ExprSlice {
10994    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
10995    where
10996        V: SourceOrderVisitor<'a> + ?Sized,
10997    {
10998        let ExprSlice {
10999            lower,
11000            upper,
11001            step,
11002            range: _,
11003            node_index: _,
11004        } = self;
11005
11006        if let Some(lower) = lower {
11007            visitor.visit_expr(lower);
11008        }
11009
11010        if let Some(upper) = upper {
11011            visitor.visit_expr(upper);
11012        }
11013
11014        if let Some(step) = step {
11015            visitor.visit_expr(step);
11016        }
11017    }
11018}
11019
11020impl ExprIpyEscapeCommand {
11021    pub(crate) fn visit_source_order<'a, V>(&'a self, _: &mut V)
11022    where
11023        V: SourceOrderVisitor<'a> + ?Sized,
11024    {
11025        let ExprIpyEscapeCommand {
11026            kind: _,
11027            value: _,
11028            range: _,
11029            node_index: _,
11030        } = self;
11031    }
11032}
11033
11034impl PatternMatchValue {
11035    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11036    where
11037        V: SourceOrderVisitor<'a> + ?Sized,
11038    {
11039        let PatternMatchValue {
11040            value,
11041            range: _,
11042            node_index: _,
11043        } = self;
11044        visitor.visit_expr(value);
11045    }
11046}
11047
11048impl PatternMatchSingleton {
11049    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11050    where
11051        V: SourceOrderVisitor<'a> + ?Sized,
11052    {
11053        let PatternMatchSingleton {
11054            value,
11055            range: _,
11056            node_index: _,
11057        } = self;
11058        visitor.visit_singleton(value);
11059    }
11060}
11061
11062impl PatternMatchSequence {
11063    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11064    where
11065        V: SourceOrderVisitor<'a> + ?Sized,
11066    {
11067        let PatternMatchSequence {
11068            patterns,
11069            range: _,
11070            node_index: _,
11071        } = self;
11072
11073        for elm in patterns {
11074            visitor.visit_pattern(elm);
11075        }
11076    }
11077}
11078
11079impl PatternMatchClass {
11080    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11081    where
11082        V: SourceOrderVisitor<'a> + ?Sized,
11083    {
11084        let PatternMatchClass {
11085            cls,
11086            arguments,
11087            range: _,
11088            node_index: _,
11089        } = self;
11090        visitor.visit_expr(cls);
11091        visitor.visit_pattern_arguments(arguments);
11092    }
11093}
11094
11095impl PatternMatchStar {
11096    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11097    where
11098        V: SourceOrderVisitor<'a> + ?Sized,
11099    {
11100        let PatternMatchStar {
11101            name,
11102            range: _,
11103            node_index: _,
11104        } = self;
11105
11106        if let Some(name) = name {
11107            visitor.visit_identifier(name);
11108        }
11109    }
11110}
11111
11112impl PatternMatchAs {
11113    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11114    where
11115        V: SourceOrderVisitor<'a> + ?Sized,
11116    {
11117        let PatternMatchAs {
11118            pattern,
11119            name,
11120            range: _,
11121            node_index: _,
11122        } = self;
11123
11124        if let Some(pattern) = pattern {
11125            visitor.visit_pattern(pattern);
11126        }
11127
11128        if let Some(name) = name {
11129            visitor.visit_identifier(name);
11130        }
11131    }
11132}
11133
11134impl PatternMatchOr {
11135    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11136    where
11137        V: SourceOrderVisitor<'a> + ?Sized,
11138    {
11139        let PatternMatchOr {
11140            patterns,
11141            range: _,
11142            node_index: _,
11143        } = self;
11144
11145        for elm in patterns {
11146            visitor.visit_pattern(elm);
11147        }
11148    }
11149}
11150
11151impl TypeParamTypeVar {
11152    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11153    where
11154        V: SourceOrderVisitor<'a> + ?Sized,
11155    {
11156        let TypeParamTypeVar {
11157            name,
11158            bound,
11159            default,
11160            range: _,
11161            node_index: _,
11162        } = self;
11163        visitor.visit_identifier(name);
11164
11165        if let Some(bound) = bound {
11166            visitor.visit_expr(bound);
11167        }
11168
11169        if let Some(default) = default {
11170            visitor.visit_expr(default);
11171        }
11172    }
11173}
11174
11175impl TypeParamTypeVarTuple {
11176    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11177    where
11178        V: SourceOrderVisitor<'a> + ?Sized,
11179    {
11180        let TypeParamTypeVarTuple {
11181            name,
11182            default,
11183            range: _,
11184            node_index: _,
11185        } = self;
11186        visitor.visit_identifier(name);
11187
11188        if let Some(default) = default {
11189            visitor.visit_expr(default);
11190        }
11191    }
11192}
11193
11194impl TypeParamParamSpec {
11195    pub(crate) fn visit_source_order<'a, V>(&'a self, visitor: &mut V)
11196    where
11197        V: SourceOrderVisitor<'a> + ?Sized,
11198    {
11199        let TypeParamParamSpec {
11200            name,
11201            default,
11202            range: _,
11203            node_index: _,
11204        } = self;
11205        visitor.visit_identifier(name);
11206
11207        if let Some(default) = default {
11208            visitor.visit_expr(default);
11209        }
11210    }
11211}