1#![forbid(unsafe_code)]
61#![allow(clippy::wildcard_imports)]
62#![allow(clippy::return_self_not_must_use)]
63#![allow(dead_code)]
64#![allow(missing_docs)]
65
66use cyrs_syntax::{SyntaxElement, SyntaxKind, SyntaxNode, SyntaxToken};
67
68#[derive(Debug, Clone, PartialEq, Eq, Hash)]
69pub struct SourceFile {
70 syntax: SyntaxNode,
71}
72
73impl SourceFile {
74 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
75 (syntax.kind() == SyntaxKind::SOURCE_FILE).then_some(Self { syntax })
76 }
77
78 pub fn syntax(&self) -> &SyntaxNode {
79 &self.syntax
80 }
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, Hash)]
84pub struct UnionTail {
85 syntax: SyntaxNode,
86}
87
88impl UnionTail {
89 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
90 (syntax.kind() == SyntaxKind::UNION_TAIL).then_some(Self { syntax })
91 }
92
93 pub fn syntax(&self) -> &SyntaxNode {
94 &self.syntax
95 }
96
97 pub fn union_token(&self) -> Option<SyntaxToken> {
98 self.syntax
99 .children_with_tokens()
100 .filter_map(SyntaxElement::into_token)
101 .find(|t| t.kind() == SyntaxKind::UNION_KW)
102 }
103
104 pub fn all_token(&self) -> Option<SyntaxToken> {
105 self.syntax
106 .children_with_tokens()
107 .filter_map(SyntaxElement::into_token)
108 .find(|t| t.kind() == SyntaxKind::ALL_KW)
109 }
110}
111
112#[derive(Debug, Clone, PartialEq, Eq, Hash)]
113pub struct MatchClause {
114 syntax: SyntaxNode,
115}
116
117impl MatchClause {
118 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
119 (syntax.kind() == SyntaxKind::MATCH_CLAUSE).then_some(Self { syntax })
120 }
121
122 pub fn syntax(&self) -> &SyntaxNode {
123 &self.syntax
124 }
125
126 pub fn pattern(&self) -> impl Iterator<Item = Pattern> + '_ {
127 self.syntax.children().filter_map(Pattern::cast)
128 }
129
130 pub fn where_clause(&self) -> Option<WhereClause> {
131 self.syntax.children().find_map(WhereClause::cast)
132 }
133
134 pub fn optional_token(&self) -> Option<SyntaxToken> {
135 self.syntax
136 .children_with_tokens()
137 .filter_map(SyntaxElement::into_token)
138 .find(|t| t.kind() == SyntaxKind::OPTIONAL_KW)
139 }
140
141 pub fn match_token(&self) -> Option<SyntaxToken> {
142 self.syntax
143 .children_with_tokens()
144 .filter_map(SyntaxElement::into_token)
145 .find(|t| t.kind() == SyntaxKind::MATCH_KW)
146 }
147}
148
149#[derive(Debug, Clone, PartialEq, Eq, Hash)]
150pub struct WithClause {
151 syntax: SyntaxNode,
152}
153
154impl WithClause {
155 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
156 (syntax.kind() == SyntaxKind::WITH_CLAUSE).then_some(Self { syntax })
157 }
158
159 pub fn syntax(&self) -> &SyntaxNode {
160 &self.syntax
161 }
162
163 pub fn where_clause(&self) -> Option<WhereClause> {
164 self.syntax.children().find_map(WhereClause::cast)
165 }
166
167 pub fn order_by(&self) -> Option<OrderBy> {
168 self.syntax.children().find_map(OrderBy::cast)
169 }
170
171 pub fn with_token(&self) -> Option<SyntaxToken> {
172 self.syntax
173 .children_with_tokens()
174 .filter_map(SyntaxElement::into_token)
175 .find(|t| t.kind() == SyntaxKind::WITH_KW)
176 }
177
178 pub fn distinct_token(&self) -> Option<SyntaxToken> {
179 self.syntax
180 .children_with_tokens()
181 .filter_map(SyntaxElement::into_token)
182 .find(|t| t.kind() == SyntaxKind::DISTINCT_KW)
183 }
184}
185
186#[derive(Debug, Clone, PartialEq, Eq, Hash)]
187pub struct ReturnClause {
188 syntax: SyntaxNode,
189}
190
191impl ReturnClause {
192 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
193 (syntax.kind() == SyntaxKind::RETURN_CLAUSE).then_some(Self { syntax })
194 }
195
196 pub fn syntax(&self) -> &SyntaxNode {
197 &self.syntax
198 }
199
200 pub fn order_by(&self) -> Option<OrderBy> {
201 self.syntax.children().find_map(OrderBy::cast)
202 }
203
204 pub fn return_token(&self) -> Option<SyntaxToken> {
205 self.syntax
206 .children_with_tokens()
207 .filter_map(SyntaxElement::into_token)
208 .find(|t| t.kind() == SyntaxKind::RETURN_KW)
209 }
210
211 pub fn distinct_token(&self) -> Option<SyntaxToken> {
212 self.syntax
213 .children_with_tokens()
214 .filter_map(SyntaxElement::into_token)
215 .find(|t| t.kind() == SyntaxKind::DISTINCT_KW)
216 }
217}
218
219#[derive(Debug, Clone, PartialEq, Eq, Hash)]
220pub struct UnwindClause {
221 syntax: SyntaxNode,
222}
223
224impl UnwindClause {
225 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
226 (syntax.kind() == SyntaxKind::UNWIND_CLAUSE).then_some(Self { syntax })
227 }
228
229 pub fn syntax(&self) -> &SyntaxNode {
230 &self.syntax
231 }
232
233 pub fn expr(&self) -> Option<Expr> {
234 self.syntax.children().find_map(Expr::cast)
235 }
236
237 pub fn unwind_token(&self) -> Option<SyntaxToken> {
238 self.syntax
239 .children_with_tokens()
240 .filter_map(SyntaxElement::into_token)
241 .find(|t| t.kind() == SyntaxKind::UNWIND_KW)
242 }
243
244 pub fn as_token(&self) -> Option<SyntaxToken> {
245 self.syntax
246 .children_with_tokens()
247 .filter_map(SyntaxElement::into_token)
248 .find(|t| t.kind() == SyntaxKind::AS_KW)
249 }
250}
251
252#[derive(Debug, Clone, PartialEq, Eq, Hash)]
253pub struct CallClause {
254 syntax: SyntaxNode,
255}
256
257impl CallClause {
258 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
259 (syntax.kind() == SyntaxKind::CALL_CLAUSE).then_some(Self { syntax })
260 }
261
262 pub fn syntax(&self) -> &SyntaxNode {
263 &self.syntax
264 }
265
266 pub fn arg_list(&self) -> Option<ArgList> {
267 self.syntax.children().find_map(ArgList::cast)
268 }
269
270 pub fn call_token(&self) -> Option<SyntaxToken> {
271 self.syntax
272 .children_with_tokens()
273 .filter_map(SyntaxElement::into_token)
274 .find(|t| t.kind() == SyntaxKind::CALL_KW)
275 }
276}
277
278#[derive(Debug, Clone, PartialEq, Eq, Hash)]
279pub struct CreateClause {
280 syntax: SyntaxNode,
281}
282
283impl CreateClause {
284 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
285 (syntax.kind() == SyntaxKind::CREATE_CLAUSE).then_some(Self { syntax })
286 }
287
288 pub fn syntax(&self) -> &SyntaxNode {
289 &self.syntax
290 }
291
292 pub fn pattern(&self) -> impl Iterator<Item = Pattern> + '_ {
293 self.syntax.children().filter_map(Pattern::cast)
294 }
295
296 pub fn create_token(&self) -> Option<SyntaxToken> {
297 self.syntax
298 .children_with_tokens()
299 .filter_map(SyntaxElement::into_token)
300 .find(|t| t.kind() == SyntaxKind::CREATE_KW)
301 }
302}
303
304#[derive(Debug, Clone, PartialEq, Eq, Hash)]
305pub struct MergeClause {
306 syntax: SyntaxNode,
307}
308
309impl MergeClause {
310 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
311 (syntax.kind() == SyntaxKind::MERGE_CLAUSE).then_some(Self { syntax })
312 }
313
314 pub fn syntax(&self) -> &SyntaxNode {
315 &self.syntax
316 }
317
318 pub fn pattern(&self) -> Option<Pattern> {
319 self.syntax.children().find_map(Pattern::cast)
320 }
321
322 pub fn merge_action(&self) -> impl Iterator<Item = MergeAction> + '_ {
323 self.syntax.children().filter_map(MergeAction::cast)
324 }
325
326 pub fn merge_token(&self) -> Option<SyntaxToken> {
327 self.syntax
328 .children_with_tokens()
329 .filter_map(SyntaxElement::into_token)
330 .find(|t| t.kind() == SyntaxKind::MERGE_KW)
331 }
332}
333
334#[derive(Debug, Clone, PartialEq, Eq, Hash)]
335pub struct SetClause {
336 syntax: SyntaxNode,
337}
338
339impl SetClause {
340 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
341 (syntax.kind() == SyntaxKind::SET_CLAUSE).then_some(Self { syntax })
342 }
343
344 pub fn syntax(&self) -> &SyntaxNode {
345 &self.syntax
346 }
347
348 pub fn set_token(&self) -> Option<SyntaxToken> {
349 self.syntax
350 .children_with_tokens()
351 .filter_map(SyntaxElement::into_token)
352 .find(|t| t.kind() == SyntaxKind::SET_KW)
353 }
354}
355
356#[derive(Debug, Clone, PartialEq, Eq, Hash)]
357pub struct RemoveClause {
358 syntax: SyntaxNode,
359}
360
361impl RemoveClause {
362 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
363 (syntax.kind() == SyntaxKind::REMOVE_CLAUSE).then_some(Self { syntax })
364 }
365
366 pub fn syntax(&self) -> &SyntaxNode {
367 &self.syntax
368 }
369
370 pub fn remove_token(&self) -> Option<SyntaxToken> {
371 self.syntax
372 .children_with_tokens()
373 .filter_map(SyntaxElement::into_token)
374 .find(|t| t.kind() == SyntaxKind::REMOVE_KW)
375 }
376}
377
378#[derive(Debug, Clone, PartialEq, Eq, Hash)]
379pub struct DeleteClause {
380 syntax: SyntaxNode,
381}
382
383impl DeleteClause {
384 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
385 (syntax.kind() == SyntaxKind::DELETE_CLAUSE).then_some(Self { syntax })
386 }
387
388 pub fn syntax(&self) -> &SyntaxNode {
389 &self.syntax
390 }
391
392 pub fn expr(&self) -> impl Iterator<Item = Expr> + '_ {
393 self.syntax.children().filter_map(Expr::cast)
394 }
395
396 pub fn detach_token(&self) -> Option<SyntaxToken> {
397 self.syntax
398 .children_with_tokens()
399 .filter_map(SyntaxElement::into_token)
400 .find(|t| t.kind() == SyntaxKind::DETACH_KW)
401 }
402
403 pub fn delete_token(&self) -> Option<SyntaxToken> {
404 self.syntax
405 .children_with_tokens()
406 .filter_map(SyntaxElement::into_token)
407 .find(|t| t.kind() == SyntaxKind::DELETE_KW)
408 }
409}
410
411#[derive(Debug, Clone, PartialEq, Eq, Hash)]
412pub struct Pattern {
413 syntax: SyntaxNode,
414}
415
416impl Pattern {
417 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
418 (syntax.kind() == SyntaxKind::PATTERN).then_some(Self { syntax })
419 }
420
421 pub fn syntax(&self) -> &SyntaxNode {
422 &self.syntax
423 }
424}
425
426#[derive(Debug, Clone, PartialEq, Eq, Hash)]
427pub struct WhereClause {
428 syntax: SyntaxNode,
429}
430
431impl WhereClause {
432 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
433 (syntax.kind() == SyntaxKind::WHERE_CLAUSE).then_some(Self { syntax })
434 }
435
436 pub fn syntax(&self) -> &SyntaxNode {
437 &self.syntax
438 }
439
440 pub fn expr(&self) -> Option<Expr> {
441 self.syntax.children().find_map(Expr::cast)
442 }
443
444 pub fn where_token(&self) -> Option<SyntaxToken> {
445 self.syntax
446 .children_with_tokens()
447 .filter_map(SyntaxElement::into_token)
448 .find(|t| t.kind() == SyntaxKind::WHERE_KW)
449 }
450}
451
452#[derive(Debug, Clone, PartialEq, Eq, Hash)]
453pub struct OrderBy {
454 syntax: SyntaxNode,
455}
456
457impl OrderBy {
458 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
459 (syntax.kind() == SyntaxKind::ORDER_BY).then_some(Self { syntax })
460 }
461
462 pub fn syntax(&self) -> &SyntaxNode {
463 &self.syntax
464 }
465
466 pub fn order_token(&self) -> Option<SyntaxToken> {
467 self.syntax
468 .children_with_tokens()
469 .filter_map(SyntaxElement::into_token)
470 .find(|t| t.kind() == SyntaxKind::ORDER_KW)
471 }
472
473 pub fn by_token(&self) -> Option<SyntaxToken> {
474 self.syntax
475 .children_with_tokens()
476 .filter_map(SyntaxElement::into_token)
477 .find(|t| t.kind() == SyntaxKind::BY_KW)
478 }
479}
480
481#[derive(Debug, Clone, PartialEq, Eq, Hash)]
482pub struct ArgList {
483 syntax: SyntaxNode,
484}
485
486impl ArgList {
487 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
488 (syntax.kind() == SyntaxKind::ARG_LIST).then_some(Self { syntax })
489 }
490
491 pub fn syntax(&self) -> &SyntaxNode {
492 &self.syntax
493 }
494
495 pub fn expr(&self) -> impl Iterator<Item = Expr> + '_ {
496 self.syntax.children().filter_map(Expr::cast)
497 }
498}
499
500#[derive(Debug, Clone, PartialEq, Eq, Hash)]
501pub struct YieldItem {
502 syntax: SyntaxNode,
503}
504
505impl YieldItem {
506 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
507 (syntax.kind() == SyntaxKind::YIELD_ITEM).then_some(Self { syntax })
508 }
509
510 pub fn syntax(&self) -> &SyntaxNode {
511 &self.syntax
512 }
513
514 pub fn as_token(&self) -> Option<SyntaxToken> {
515 self.syntax
516 .children_with_tokens()
517 .filter_map(SyntaxElement::into_token)
518 .find(|t| t.kind() == SyntaxKind::AS_KW)
519 }
520}
521
522#[derive(Debug, Clone, PartialEq, Eq, Hash)]
523pub struct MergeAction {
524 syntax: SyntaxNode,
525}
526
527impl MergeAction {
528 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
529 (syntax.kind() == SyntaxKind::MERGE_ACTION).then_some(Self { syntax })
530 }
531
532 pub fn syntax(&self) -> &SyntaxNode {
533 &self.syntax
534 }
535
536 pub fn set_clause(&self) -> Option<SetClause> {
537 self.syntax.children().find_map(SetClause::cast)
538 }
539
540 pub fn on_token(&self) -> Option<SyntaxToken> {
541 self.syntax
542 .children_with_tokens()
543 .filter_map(SyntaxElement::into_token)
544 .find(|t| t.kind() == SyntaxKind::ON_KW)
545 }
546
547 pub fn create_token(&self) -> Option<SyntaxToken> {
548 self.syntax
549 .children_with_tokens()
550 .filter_map(SyntaxElement::into_token)
551 .find(|t| t.kind() == SyntaxKind::CREATE_KW)
552 }
553
554 pub fn match_token(&self) -> Option<SyntaxToken> {
555 self.syntax
556 .children_with_tokens()
557 .filter_map(SyntaxElement::into_token)
558 .find(|t| t.kind() == SyntaxKind::MATCH_KW)
559 }
560}
561
562#[derive(Debug, Clone, PartialEq, Eq, Hash)]
563pub struct ReturnItem {
564 syntax: SyntaxNode,
565}
566
567impl ReturnItem {
568 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
569 (syntax.kind() == SyntaxKind::RETURN_ITEM).then_some(Self { syntax })
570 }
571
572 pub fn syntax(&self) -> &SyntaxNode {
573 &self.syntax
574 }
575
576 pub fn expr(&self) -> Option<Expr> {
577 self.syntax.children().find_map(Expr::cast)
578 }
579
580 pub fn as_token(&self) -> Option<SyntaxToken> {
581 self.syntax
582 .children_with_tokens()
583 .filter_map(SyntaxElement::into_token)
584 .find(|t| t.kind() == SyntaxKind::AS_KW)
585 }
586}
587
588#[derive(Debug, Clone, PartialEq, Eq, Hash)]
589pub struct LabelExpr {
590 syntax: SyntaxNode,
591}
592
593impl LabelExpr {
594 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
595 (syntax.kind() == SyntaxKind::LABEL_EXPR).then_some(Self { syntax })
596 }
597
598 pub fn syntax(&self) -> &SyntaxNode {
599 &self.syntax
600 }
601}
602
603#[derive(Debug, Clone, PartialEq, Eq, Hash)]
604pub struct ShortestPathPattern {
605 syntax: SyntaxNode,
606}
607
608impl ShortestPathPattern {
609 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
610 (syntax.kind() == SyntaxKind::SHORTEST_PATH_PATTERN).then_some(Self { syntax })
611 }
612
613 pub fn syntax(&self) -> &SyntaxNode {
614 &self.syntax
615 }
616
617 pub fn shortestpath_token(&self) -> Option<SyntaxToken> {
618 self.syntax
619 .children_with_tokens()
620 .filter_map(SyntaxElement::into_token)
621 .find(|t| t.kind() == SyntaxKind::SHORTESTPATH_KW)
622 }
623
624 pub fn allshortestpaths_token(&self) -> Option<SyntaxToken> {
625 self.syntax
626 .children_with_tokens()
627 .filter_map(SyntaxElement::into_token)
628 .find(|t| t.kind() == SyntaxKind::ALLSHORTESTPATHS_KW)
629 }
630}
631
632#[derive(Debug, Clone, PartialEq, Eq, Hash)]
633pub struct NodePattern {
634 syntax: SyntaxNode,
635}
636
637impl NodePattern {
638 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
639 (syntax.kind() == SyntaxKind::NODE_PATTERN).then_some(Self { syntax })
640 }
641
642 pub fn syntax(&self) -> &SyntaxNode {
643 &self.syntax
644 }
645
646 pub fn label_expr(&self) -> Option<LabelExpr> {
647 self.syntax.children().find_map(LabelExpr::cast)
648 }
649
650 pub fn property_map(&self) -> Option<PropertyMap> {
651 self.syntax.children().find_map(PropertyMap::cast)
652 }
653}
654
655#[derive(Debug, Clone, PartialEq, Eq, Hash)]
656pub struct PropertyMap {
657 syntax: SyntaxNode,
658}
659
660impl PropertyMap {
661 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
662 (syntax.kind() == SyntaxKind::PROPERTY_MAP).then_some(Self { syntax })
663 }
664
665 pub fn syntax(&self) -> &SyntaxNode {
666 &self.syntax
667 }
668}
669
670#[derive(Debug, Clone, PartialEq, Eq, Hash)]
671pub struct RelDetail {
672 syntax: SyntaxNode,
673}
674
675impl RelDetail {
676 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
677 (syntax.kind() == SyntaxKind::REL_DETAIL).then_some(Self { syntax })
678 }
679
680 pub fn syntax(&self) -> &SyntaxNode {
681 &self.syntax
682 }
683
684 pub fn property_map(&self) -> Option<PropertyMap> {
685 self.syntax.children().find_map(PropertyMap::cast)
686 }
687}
688
689#[derive(Debug, Clone, PartialEq, Eq, Hash)]
690pub struct IndexExpr {
691 syntax: SyntaxNode,
692}
693
694impl IndexExpr {
695 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
696 (syntax.kind() == SyntaxKind::INDEX_EXPR).then_some(Self { syntax })
697 }
698
699 pub fn syntax(&self) -> &SyntaxNode {
700 &self.syntax
701 }
702
703 pub fn receiver(&self) -> Option<Expr> {
704 self.syntax.children().find_map(Expr::cast)
705 }
706
707 pub fn index(&self) -> Option<Expr> {
708 self.syntax.children().find_map(Expr::cast)
709 }
710}
711
712#[derive(Debug, Clone, PartialEq, Eq, Hash)]
713pub struct SliceExpr {
714 syntax: SyntaxNode,
715}
716
717impl SliceExpr {
718 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
719 (syntax.kind() == SyntaxKind::SLICE_EXPR).then_some(Self { syntax })
720 }
721
722 pub fn syntax(&self) -> &SyntaxNode {
723 &self.syntax
724 }
725
726 pub fn receiver(&self) -> Option<Expr> {
727 self.syntax.children().find_map(Expr::cast)
728 }
729
730 pub fn start(&self) -> Option<Expr> {
731 self.syntax.children().find_map(Expr::cast)
732 }
733
734 pub fn end(&self) -> Option<Expr> {
735 self.syntax.children().find_map(Expr::cast)
736 }
737}
738
739#[derive(Debug, Clone, PartialEq, Eq, Hash)]
740pub struct FunctionCall {
741 syntax: SyntaxNode,
742}
743
744impl FunctionCall {
745 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
746 (syntax.kind() == SyntaxKind::FUNCTION_CALL).then_some(Self { syntax })
747 }
748
749 pub fn syntax(&self) -> &SyntaxNode {
750 &self.syntax
751 }
752
753 pub fn arg_list(&self) -> Option<ArgList> {
754 self.syntax.children().find_map(ArgList::cast)
755 }
756
757 pub fn distinct_token(&self) -> Option<SyntaxToken> {
758 self.syntax
759 .children_with_tokens()
760 .filter_map(SyntaxElement::into_token)
761 .find(|t| t.kind() == SyntaxKind::DISTINCT_KW)
762 }
763}
764
765#[derive(Debug, Clone, PartialEq, Eq, Hash)]
766pub struct ParenExpr {
767 syntax: SyntaxNode,
768}
769
770impl ParenExpr {
771 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
772 (syntax.kind() == SyntaxKind::PAREN_EXPR).then_some(Self { syntax })
773 }
774
775 pub fn syntax(&self) -> &SyntaxNode {
776 &self.syntax
777 }
778
779 pub fn expr(&self) -> Option<Expr> {
780 self.syntax.children().find_map(Expr::cast)
781 }
782}
783
784#[derive(Debug, Clone, PartialEq, Eq, Hash)]
785pub struct ListLiteral {
786 syntax: SyntaxNode,
787}
788
789impl ListLiteral {
790 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
791 (syntax.kind() == SyntaxKind::LIST_LITERAL).then_some(Self { syntax })
792 }
793
794 pub fn syntax(&self) -> &SyntaxNode {
795 &self.syntax
796 }
797
798 pub fn expr(&self) -> impl Iterator<Item = Expr> + '_ {
799 self.syntax.children().filter_map(Expr::cast)
800 }
801}
802
803#[derive(Debug, Clone, PartialEq, Eq, Hash)]
804pub struct MapLiteral {
805 syntax: SyntaxNode,
806}
807
808impl MapLiteral {
809 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
810 (syntax.kind() == SyntaxKind::MAP_LITERAL).then_some(Self { syntax })
811 }
812
813 pub fn syntax(&self) -> &SyntaxNode {
814 &self.syntax
815 }
816}
817
818#[derive(Debug, Clone, PartialEq, Eq, Hash)]
819pub struct MapProjection {
820 syntax: SyntaxNode,
821}
822
823impl MapProjection {
824 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
825 (syntax.kind() == SyntaxKind::MAP_PROJECTION).then_some(Self { syntax })
826 }
827
828 pub fn syntax(&self) -> &SyntaxNode {
829 &self.syntax
830 }
831
832 pub fn subject(&self) -> Option<Expr> {
833 self.syntax.children().find_map(Expr::cast)
834 }
835}
836
837#[derive(Debug, Clone, PartialEq, Eq, Hash)]
838pub struct ListComprehension {
839 syntax: SyntaxNode,
840}
841
842impl ListComprehension {
843 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
844 (syntax.kind() == SyntaxKind::LIST_COMPREHENSION).then_some(Self { syntax })
845 }
846
847 pub fn syntax(&self) -> &SyntaxNode {
848 &self.syntax
849 }
850
851 pub fn source(&self) -> Option<Expr> {
852 self.syntax.children().find_map(Expr::cast)
853 }
854
855 pub fn where_clause(&self) -> Option<WhereClause> {
856 self.syntax.children().find_map(WhereClause::cast)
857 }
858
859 pub fn projection(&self) -> Option<Expr> {
860 self.syntax.children().find_map(Expr::cast)
861 }
862
863 pub fn in_token(&self) -> Option<SyntaxToken> {
864 self.syntax
865 .children_with_tokens()
866 .filter_map(SyntaxElement::into_token)
867 .find(|t| t.kind() == SyntaxKind::IN_KW)
868 }
869}
870
871#[derive(Debug, Clone, PartialEq, Eq, Hash)]
872pub struct ListPredicateExpr {
873 syntax: SyntaxNode,
874}
875
876impl ListPredicateExpr {
877 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
878 (syntax.kind() == SyntaxKind::LIST_PREDICATE_EXPR).then_some(Self { syntax })
879 }
880
881 pub fn syntax(&self) -> &SyntaxNode {
882 &self.syntax
883 }
884
885 pub fn source(&self) -> Option<Expr> {
886 self.syntax.children().find_map(Expr::cast)
887 }
888
889 pub fn where_clause(&self) -> Option<WhereClause> {
890 self.syntax.children().find_map(WhereClause::cast)
891 }
892
893 pub fn any_token(&self) -> Option<SyntaxToken> {
894 self.syntax
895 .children_with_tokens()
896 .filter_map(SyntaxElement::into_token)
897 .find(|t| t.kind() == SyntaxKind::ANY_KW)
898 }
899
900 pub fn all_token(&self) -> Option<SyntaxToken> {
901 self.syntax
902 .children_with_tokens()
903 .filter_map(SyntaxElement::into_token)
904 .find(|t| t.kind() == SyntaxKind::ALL_KW)
905 }
906
907 pub fn none_token(&self) -> Option<SyntaxToken> {
908 self.syntax
909 .children_with_tokens()
910 .filter_map(SyntaxElement::into_token)
911 .find(|t| t.kind() == SyntaxKind::NONE_KW)
912 }
913
914 pub fn single_token(&self) -> Option<SyntaxToken> {
915 self.syntax
916 .children_with_tokens()
917 .filter_map(SyntaxElement::into_token)
918 .find(|t| t.kind() == SyntaxKind::SINGLE_KW)
919 }
920
921 pub fn in_token(&self) -> Option<SyntaxToken> {
922 self.syntax
923 .children_with_tokens()
924 .filter_map(SyntaxElement::into_token)
925 .find(|t| t.kind() == SyntaxKind::IN_KW)
926 }
927}
928
929#[derive(Debug, Clone, PartialEq, Eq, Hash)]
930pub struct PatternComprehension {
931 syntax: SyntaxNode,
932}
933
934impl PatternComprehension {
935 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
936 (syntax.kind() == SyntaxKind::PATTERN_COMPREHENSION).then_some(Self { syntax })
937 }
938
939 pub fn syntax(&self) -> &SyntaxNode {
940 &self.syntax
941 }
942
943 pub fn where_clause(&self) -> Option<WhereClause> {
944 self.syntax.children().find_map(WhereClause::cast)
945 }
946
947 pub fn projection(&self) -> Option<Expr> {
948 self.syntax.children().find_map(Expr::cast)
949 }
950}
951
952#[derive(Debug, Clone, PartialEq, Eq, Hash)]
953pub struct CaseExpr {
954 syntax: SyntaxNode,
955}
956
957impl CaseExpr {
958 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
959 (syntax.kind() == SyntaxKind::CASE_EXPR).then_some(Self { syntax })
960 }
961
962 pub fn syntax(&self) -> &SyntaxNode {
963 &self.syntax
964 }
965
966 pub fn scrutinee(&self) -> Option<Expr> {
967 self.syntax.children().find_map(Expr::cast)
968 }
969
970 pub fn arms(&self) -> Option<CaseWhenArm> {
971 self.syntax.children().find_map(CaseWhenArm::cast)
972 }
973
974 pub fn case_when_arm(&self) -> impl Iterator<Item = CaseWhenArm> + '_ {
975 self.syntax.children().filter_map(CaseWhenArm::cast)
976 }
977
978 pub fn else_arm(&self) -> Option<CaseElseArm> {
979 self.syntax.children().find_map(CaseElseArm::cast)
980 }
981
982 pub fn case_token(&self) -> Option<SyntaxToken> {
983 self.syntax
984 .children_with_tokens()
985 .filter_map(SyntaxElement::into_token)
986 .find(|t| t.kind() == SyntaxKind::CASE_KW)
987 }
988
989 pub fn end_token(&self) -> Option<SyntaxToken> {
990 self.syntax
991 .children_with_tokens()
992 .filter_map(SyntaxElement::into_token)
993 .find(|t| t.kind() == SyntaxKind::END_KW)
994 }
995}
996
997#[derive(Debug, Clone, PartialEq, Eq, Hash)]
998pub struct BinaryExpr {
999 syntax: SyntaxNode,
1000}
1001
1002impl BinaryExpr {
1003 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1004 (syntax.kind() == SyntaxKind::BINARY_EXPR).then_some(Self { syntax })
1005 }
1006
1007 pub fn syntax(&self) -> &SyntaxNode {
1008 &self.syntax
1009 }
1010
1011 pub fn lhs(&self) -> Option<Expr> {
1012 self.syntax.children().find_map(Expr::cast)
1013 }
1014
1015 pub fn rhs(&self) -> Option<Expr> {
1016 self.syntax.children().find_map(Expr::cast)
1017 }
1018}
1019
1020#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1021pub struct UnaryExpr {
1022 syntax: SyntaxNode,
1023}
1024
1025impl UnaryExpr {
1026 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1027 (syntax.kind() == SyntaxKind::UNARY_EXPR).then_some(Self { syntax })
1028 }
1029
1030 pub fn syntax(&self) -> &SyntaxNode {
1031 &self.syntax
1032 }
1033
1034 pub fn operand(&self) -> Option<Expr> {
1035 self.syntax.children().find_map(Expr::cast)
1036 }
1037}
1038
1039#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1040pub struct PatternPredicate {
1041 syntax: SyntaxNode,
1042}
1043
1044impl PatternPredicate {
1045 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1046 (syntax.kind() == SyntaxKind::PATTERN_PREDICATE).then_some(Self { syntax })
1047 }
1048
1049 pub fn syntax(&self) -> &SyntaxNode {
1050 &self.syntax
1051 }
1052}
1053
1054#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1055pub struct CaseWhenArm {
1056 syntax: SyntaxNode,
1057}
1058
1059impl CaseWhenArm {
1060 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1061 (syntax.kind() == SyntaxKind::CASE_WHEN_ARM).then_some(Self { syntax })
1062 }
1063
1064 pub fn syntax(&self) -> &SyntaxNode {
1065 &self.syntax
1066 }
1067
1068 pub fn when_value(&self) -> Option<Expr> {
1069 self.syntax.children().find_map(Expr::cast)
1070 }
1071
1072 pub fn then_value(&self) -> Option<Expr> {
1073 self.syntax.children().find_map(Expr::cast)
1074 }
1075
1076 pub fn when_token(&self) -> Option<SyntaxToken> {
1077 self.syntax
1078 .children_with_tokens()
1079 .filter_map(SyntaxElement::into_token)
1080 .find(|t| t.kind() == SyntaxKind::WHEN_KW)
1081 }
1082
1083 pub fn then_token(&self) -> Option<SyntaxToken> {
1084 self.syntax
1085 .children_with_tokens()
1086 .filter_map(SyntaxElement::into_token)
1087 .find(|t| t.kind() == SyntaxKind::THEN_KW)
1088 }
1089}
1090
1091#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1092pub struct CaseElseArm {
1093 syntax: SyntaxNode,
1094}
1095
1096impl CaseElseArm {
1097 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1098 (syntax.kind() == SyntaxKind::CASE_ELSE_ARM).then_some(Self { syntax })
1099 }
1100
1101 pub fn syntax(&self) -> &SyntaxNode {
1102 &self.syntax
1103 }
1104
1105 pub fn value(&self) -> Option<Expr> {
1106 self.syntax.children().find_map(Expr::cast)
1107 }
1108
1109 pub fn else_token(&self) -> Option<SyntaxToken> {
1110 self.syntax
1111 .children_with_tokens()
1112 .filter_map(SyntaxElement::into_token)
1113 .find(|t| t.kind() == SyntaxKind::ELSE_KW)
1114 }
1115}
1116
1117#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1118pub enum Clause {
1119 MatchClause(MatchClause),
1120 WithClause(WithClause),
1121 ReturnClause(ReturnClause),
1122 UnwindClause(UnwindClause),
1123 CallClause(CallClause),
1124 CreateClause(CreateClause),
1125 MergeClause(MergeClause),
1126 SetClause(SetClause),
1127 RemoveClause(RemoveClause),
1128 DeleteClause(DeleteClause),
1129}
1130
1131impl Clause {
1132 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1133 if let Some(inner) = MatchClause::cast(syntax.clone()) {
1134 return Some(Self::MatchClause(inner));
1135 }
1136 if let Some(inner) = WithClause::cast(syntax.clone()) {
1137 return Some(Self::WithClause(inner));
1138 }
1139 if let Some(inner) = ReturnClause::cast(syntax.clone()) {
1140 return Some(Self::ReturnClause(inner));
1141 }
1142 if let Some(inner) = UnwindClause::cast(syntax.clone()) {
1143 return Some(Self::UnwindClause(inner));
1144 }
1145 if let Some(inner) = CallClause::cast(syntax.clone()) {
1146 return Some(Self::CallClause(inner));
1147 }
1148 if let Some(inner) = CreateClause::cast(syntax.clone()) {
1149 return Some(Self::CreateClause(inner));
1150 }
1151 if let Some(inner) = MergeClause::cast(syntax.clone()) {
1152 return Some(Self::MergeClause(inner));
1153 }
1154 if let Some(inner) = SetClause::cast(syntax.clone()) {
1155 return Some(Self::SetClause(inner));
1156 }
1157 if let Some(inner) = RemoveClause::cast(syntax.clone()) {
1158 return Some(Self::RemoveClause(inner));
1159 }
1160 if let Some(inner) = DeleteClause::cast(syntax) {
1161 return Some(Self::DeleteClause(inner));
1162 }
1163 None
1164 }
1165
1166 pub fn syntax(&self) -> &SyntaxNode {
1167 match self {
1168 Self::MatchClause(inner) => inner.syntax(),
1169 Self::WithClause(inner) => inner.syntax(),
1170 Self::ReturnClause(inner) => inner.syntax(),
1171 Self::UnwindClause(inner) => inner.syntax(),
1172 Self::CallClause(inner) => inner.syntax(),
1173 Self::CreateClause(inner) => inner.syntax(),
1174 Self::MergeClause(inner) => inner.syntax(),
1175 Self::SetClause(inner) => inner.syntax(),
1176 Self::RemoveClause(inner) => inner.syntax(),
1177 Self::DeleteClause(inner) => inner.syntax(),
1178 }
1179 }
1180}
1181
1182#[derive(Debug, Clone, PartialEq, Eq, Hash)]
1183pub enum Expr {
1184 IndexExpr(IndexExpr),
1185 SliceExpr(SliceExpr),
1186 FunctionCall(FunctionCall),
1187 ParenExpr(ParenExpr),
1188 ListLiteral(ListLiteral),
1189 MapLiteral(MapLiteral),
1190 MapProjection(MapProjection),
1191 ListComprehension(ListComprehension),
1192 ListPredicateExpr(ListPredicateExpr),
1193 PatternComprehension(PatternComprehension),
1194 CaseExpr(CaseExpr),
1195 BinaryExpr(BinaryExpr),
1196 UnaryExpr(UnaryExpr),
1197 PatternPredicate(PatternPredicate),
1198}
1199
1200impl Expr {
1201 pub fn cast(syntax: SyntaxNode) -> Option<Self> {
1202 if let Some(inner) = IndexExpr::cast(syntax.clone()) {
1203 return Some(Self::IndexExpr(inner));
1204 }
1205 if let Some(inner) = SliceExpr::cast(syntax.clone()) {
1206 return Some(Self::SliceExpr(inner));
1207 }
1208 if let Some(inner) = FunctionCall::cast(syntax.clone()) {
1209 return Some(Self::FunctionCall(inner));
1210 }
1211 if let Some(inner) = ParenExpr::cast(syntax.clone()) {
1212 return Some(Self::ParenExpr(inner));
1213 }
1214 if let Some(inner) = ListLiteral::cast(syntax.clone()) {
1215 return Some(Self::ListLiteral(inner));
1216 }
1217 if let Some(inner) = MapLiteral::cast(syntax.clone()) {
1218 return Some(Self::MapLiteral(inner));
1219 }
1220 if let Some(inner) = MapProjection::cast(syntax.clone()) {
1221 return Some(Self::MapProjection(inner));
1222 }
1223 if let Some(inner) = ListComprehension::cast(syntax.clone()) {
1224 return Some(Self::ListComprehension(inner));
1225 }
1226 if let Some(inner) = ListPredicateExpr::cast(syntax.clone()) {
1227 return Some(Self::ListPredicateExpr(inner));
1228 }
1229 if let Some(inner) = PatternComprehension::cast(syntax.clone()) {
1230 return Some(Self::PatternComprehension(inner));
1231 }
1232 if let Some(inner) = CaseExpr::cast(syntax.clone()) {
1233 return Some(Self::CaseExpr(inner));
1234 }
1235 if let Some(inner) = BinaryExpr::cast(syntax.clone()) {
1236 return Some(Self::BinaryExpr(inner));
1237 }
1238 if let Some(inner) = UnaryExpr::cast(syntax.clone()) {
1239 return Some(Self::UnaryExpr(inner));
1240 }
1241 if let Some(inner) = PatternPredicate::cast(syntax) {
1242 return Some(Self::PatternPredicate(inner));
1243 }
1244 None
1245 }
1246
1247 pub fn syntax(&self) -> &SyntaxNode {
1248 match self {
1249 Self::IndexExpr(inner) => inner.syntax(),
1250 Self::SliceExpr(inner) => inner.syntax(),
1251 Self::FunctionCall(inner) => inner.syntax(),
1252 Self::ParenExpr(inner) => inner.syntax(),
1253 Self::ListLiteral(inner) => inner.syntax(),
1254 Self::MapLiteral(inner) => inner.syntax(),
1255 Self::MapProjection(inner) => inner.syntax(),
1256 Self::ListComprehension(inner) => inner.syntax(),
1257 Self::ListPredicateExpr(inner) => inner.syntax(),
1258 Self::PatternComprehension(inner) => inner.syntax(),
1259 Self::CaseExpr(inner) => inner.syntax(),
1260 Self::BinaryExpr(inner) => inner.syntax(),
1261 Self::UnaryExpr(inner) => inner.syntax(),
1262 Self::PatternPredicate(inner) => inner.syntax(),
1263 }
1264 }
1265}