1#![allow(clippy::match_single_binding)]
3#![allow(clippy::too_many_arguments)]
4#![allow(dead_code)]
5#![allow(unused_variables)]
6use std::ops::Deref;
7use std::sync::Arc;
8
9use cairo_lang_filesystem::span::TextWidth;
10use cairo_lang_utils::{Intern, LookupIntern, extract_matches};
11use smol_str::SmolStr;
12
13use super::element_list::ElementList;
14use super::green::GreenNodeDetails;
15use super::kind::SyntaxKind;
16use super::{
17 GreenId, GreenNode, SyntaxGroup, SyntaxNode, SyntaxStablePtr, SyntaxStablePtrId, Terminal,
18 Token, TypedStablePtr, TypedSyntaxNode,
19};
20#[path = "ast_ext.rs"]
21mod ast_ext;
22#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23pub struct Trivia(ElementList<Trivium, 1>);
24impl Deref for Trivia {
25 type Target = ElementList<Trivium, 1>;
26 fn deref(&self) -> &Self::Target {
27 &self.0
28 }
29}
30impl Trivia {
31 pub fn new_green(db: &dyn SyntaxGroup, children: &[TriviumGreen]) -> TriviaGreen {
32 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
33 TriviaGreen(
34 Arc::new(GreenNode {
35 kind: SyntaxKind::Trivia,
36 details: GreenNodeDetails::Node {
37 children: children.iter().map(|x| x.0).collect(),
38 width,
39 },
40 })
41 .intern(db),
42 )
43 }
44}
45#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
46pub struct TriviaPtr(pub SyntaxStablePtrId);
47impl TypedStablePtr for TriviaPtr {
48 type SyntaxNode = Trivia;
49 fn untyped(&self) -> SyntaxStablePtrId {
50 self.0
51 }
52 fn lookup(&self, db: &dyn SyntaxGroup) -> Trivia {
53 Trivia::from_syntax_node(db, self.0.lookup(db))
54 }
55}
56impl From<TriviaPtr> for SyntaxStablePtrId {
57 fn from(ptr: TriviaPtr) -> Self {
58 ptr.untyped()
59 }
60}
61#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
62pub struct TriviaGreen(pub GreenId);
63impl TypedSyntaxNode for Trivia {
64 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Trivia);
65 type StablePtr = TriviaPtr;
66 type Green = TriviaGreen;
67 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
68 TriviaGreen(
69 Arc::new(GreenNode {
70 kind: SyntaxKind::Trivia,
71 details: GreenNodeDetails::Node {
72 children: [].into(),
73 width: TextWidth::default(),
74 },
75 })
76 .intern(db),
77 )
78 }
79 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
80 Self(ElementList::new(node))
81 }
82 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
83 if node.kind(db) == SyntaxKind::Trivia { Some(Self(ElementList::new(node))) } else { None }
84 }
85 fn as_syntax_node(&self) -> SyntaxNode {
86 self.node
87 }
88 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
89 TriviaPtr(self.node.stable_ptr(db))
90 }
91}
92#[derive(Clone, Debug, Eq, Hash, PartialEq)]
93pub enum Trivium {
94 SingleLineComment(TokenSingleLineComment),
95 SingleLineDocComment(TokenSingleLineDocComment),
96 SingleLineInnerComment(TokenSingleLineInnerComment),
97 Whitespace(TokenWhitespace),
98 Newline(TokenNewline),
99 Skipped(TokenSkipped),
100 SkippedNode(TriviumSkippedNode),
101}
102#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
103pub struct TriviumPtr(pub SyntaxStablePtrId);
104impl TypedStablePtr for TriviumPtr {
105 type SyntaxNode = Trivium;
106 fn untyped(&self) -> SyntaxStablePtrId {
107 self.0
108 }
109 fn lookup(&self, db: &dyn SyntaxGroup) -> Trivium {
110 Trivium::from_syntax_node(db, self.0.lookup(db))
111 }
112}
113impl From<TriviumPtr> for SyntaxStablePtrId {
114 fn from(ptr: TriviumPtr) -> Self {
115 ptr.untyped()
116 }
117}
118impl From<TokenSingleLineCommentPtr> for TriviumPtr {
119 fn from(value: TokenSingleLineCommentPtr) -> Self {
120 Self(value.0)
121 }
122}
123impl From<TokenSingleLineDocCommentPtr> for TriviumPtr {
124 fn from(value: TokenSingleLineDocCommentPtr) -> Self {
125 Self(value.0)
126 }
127}
128impl From<TokenSingleLineInnerCommentPtr> for TriviumPtr {
129 fn from(value: TokenSingleLineInnerCommentPtr) -> Self {
130 Self(value.0)
131 }
132}
133impl From<TokenWhitespacePtr> for TriviumPtr {
134 fn from(value: TokenWhitespacePtr) -> Self {
135 Self(value.0)
136 }
137}
138impl From<TokenNewlinePtr> for TriviumPtr {
139 fn from(value: TokenNewlinePtr) -> Self {
140 Self(value.0)
141 }
142}
143impl From<TokenSkippedPtr> for TriviumPtr {
144 fn from(value: TokenSkippedPtr) -> Self {
145 Self(value.0)
146 }
147}
148impl From<TriviumSkippedNodePtr> for TriviumPtr {
149 fn from(value: TriviumSkippedNodePtr) -> Self {
150 Self(value.0)
151 }
152}
153impl From<TokenSingleLineCommentGreen> for TriviumGreen {
154 fn from(value: TokenSingleLineCommentGreen) -> Self {
155 Self(value.0)
156 }
157}
158impl From<TokenSingleLineDocCommentGreen> for TriviumGreen {
159 fn from(value: TokenSingleLineDocCommentGreen) -> Self {
160 Self(value.0)
161 }
162}
163impl From<TokenSingleLineInnerCommentGreen> for TriviumGreen {
164 fn from(value: TokenSingleLineInnerCommentGreen) -> Self {
165 Self(value.0)
166 }
167}
168impl From<TokenWhitespaceGreen> for TriviumGreen {
169 fn from(value: TokenWhitespaceGreen) -> Self {
170 Self(value.0)
171 }
172}
173impl From<TokenNewlineGreen> for TriviumGreen {
174 fn from(value: TokenNewlineGreen) -> Self {
175 Self(value.0)
176 }
177}
178impl From<TokenSkippedGreen> for TriviumGreen {
179 fn from(value: TokenSkippedGreen) -> Self {
180 Self(value.0)
181 }
182}
183impl From<TriviumSkippedNodeGreen> for TriviumGreen {
184 fn from(value: TriviumSkippedNodeGreen) -> Self {
185 Self(value.0)
186 }
187}
188#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
189pub struct TriviumGreen(pub GreenId);
190impl TypedSyntaxNode for Trivium {
191 const OPTIONAL_KIND: Option<SyntaxKind> = None;
192 type StablePtr = TriviumPtr;
193 type Green = TriviumGreen;
194 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
195 panic!("No missing variant.");
196 }
197 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
198 let kind = node.kind(db);
199 match kind {
200 SyntaxKind::TokenSingleLineComment => {
201 Trivium::SingleLineComment(TokenSingleLineComment::from_syntax_node(db, node))
202 }
203 SyntaxKind::TokenSingleLineDocComment => {
204 Trivium::SingleLineDocComment(TokenSingleLineDocComment::from_syntax_node(db, node))
205 }
206 SyntaxKind::TokenSingleLineInnerComment => Trivium::SingleLineInnerComment(
207 TokenSingleLineInnerComment::from_syntax_node(db, node),
208 ),
209 SyntaxKind::TokenWhitespace => {
210 Trivium::Whitespace(TokenWhitespace::from_syntax_node(db, node))
211 }
212 SyntaxKind::TokenNewline => Trivium::Newline(TokenNewline::from_syntax_node(db, node)),
213 SyntaxKind::TokenSkipped => Trivium::Skipped(TokenSkipped::from_syntax_node(db, node)),
214 SyntaxKind::TriviumSkippedNode => {
215 Trivium::SkippedNode(TriviumSkippedNode::from_syntax_node(db, node))
216 }
217 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Trivium"),
218 }
219 }
220 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
221 let kind = node.kind(db);
222 match kind {
223 SyntaxKind::TokenSingleLineComment => {
224 Some(Trivium::SingleLineComment(TokenSingleLineComment::from_syntax_node(db, node)))
225 }
226 SyntaxKind::TokenSingleLineDocComment => Some(Trivium::SingleLineDocComment(
227 TokenSingleLineDocComment::from_syntax_node(db, node),
228 )),
229 SyntaxKind::TokenSingleLineInnerComment => Some(Trivium::SingleLineInnerComment(
230 TokenSingleLineInnerComment::from_syntax_node(db, node),
231 )),
232 SyntaxKind::TokenWhitespace => {
233 Some(Trivium::Whitespace(TokenWhitespace::from_syntax_node(db, node)))
234 }
235 SyntaxKind::TokenNewline => {
236 Some(Trivium::Newline(TokenNewline::from_syntax_node(db, node)))
237 }
238 SyntaxKind::TokenSkipped => {
239 Some(Trivium::Skipped(TokenSkipped::from_syntax_node(db, node)))
240 }
241 SyntaxKind::TriviumSkippedNode => {
242 Some(Trivium::SkippedNode(TriviumSkippedNode::from_syntax_node(db, node)))
243 }
244 _ => None,
245 }
246 }
247 fn as_syntax_node(&self) -> SyntaxNode {
248 match self {
249 Trivium::SingleLineComment(x) => x.as_syntax_node(),
250 Trivium::SingleLineDocComment(x) => x.as_syntax_node(),
251 Trivium::SingleLineInnerComment(x) => x.as_syntax_node(),
252 Trivium::Whitespace(x) => x.as_syntax_node(),
253 Trivium::Newline(x) => x.as_syntax_node(),
254 Trivium::Skipped(x) => x.as_syntax_node(),
255 Trivium::SkippedNode(x) => x.as_syntax_node(),
256 }
257 }
258 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
259 TriviumPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
260 }
261}
262impl Trivium {
263 pub fn is_variant(kind: SyntaxKind) -> bool {
265 matches!(
266 kind,
267 SyntaxKind::TokenSingleLineComment
268 | SyntaxKind::TokenSingleLineDocComment
269 | SyntaxKind::TokenSingleLineInnerComment
270 | SyntaxKind::TokenWhitespace
271 | SyntaxKind::TokenNewline
272 | SyntaxKind::TokenSkipped
273 | SyntaxKind::TriviumSkippedNode
274 )
275 }
276}
277#[derive(Clone, Debug, Eq, Hash, PartialEq)]
278pub enum Expr {
279 Path(ExprPath),
280 Literal(TerminalLiteralNumber),
281 ShortString(TerminalShortString),
282 String(TerminalString),
283 False(TerminalFalse),
284 True(TerminalTrue),
285 Parenthesized(ExprParenthesized),
286 Unary(ExprUnary),
287 Binary(ExprBinary),
288 Tuple(ExprListParenthesized),
289 FunctionCall(ExprFunctionCall),
290 StructCtorCall(ExprStructCtorCall),
291 Block(ExprBlock),
292 Match(ExprMatch),
293 If(ExprIf),
294 Loop(ExprLoop),
295 While(ExprWhile),
296 For(ExprFor),
297 Closure(ExprClosure),
298 ErrorPropagate(ExprErrorPropagate),
299 FieldInitShorthand(ExprFieldInitShorthand),
300 Indexed(ExprIndexed),
301 InlineMacro(ExprInlineMacro),
302 FixedSizeArray(ExprFixedSizeArray),
303 Placeholder(ExprPlaceholder),
304 Missing(ExprMissing),
305}
306#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
307pub struct ExprPtr(pub SyntaxStablePtrId);
308impl TypedStablePtr for ExprPtr {
309 type SyntaxNode = Expr;
310 fn untyped(&self) -> SyntaxStablePtrId {
311 self.0
312 }
313 fn lookup(&self, db: &dyn SyntaxGroup) -> Expr {
314 Expr::from_syntax_node(db, self.0.lookup(db))
315 }
316}
317impl From<ExprPtr> for SyntaxStablePtrId {
318 fn from(ptr: ExprPtr) -> Self {
319 ptr.untyped()
320 }
321}
322impl From<ExprPathPtr> for ExprPtr {
323 fn from(value: ExprPathPtr) -> Self {
324 Self(value.0)
325 }
326}
327impl From<TerminalLiteralNumberPtr> for ExprPtr {
328 fn from(value: TerminalLiteralNumberPtr) -> Self {
329 Self(value.0)
330 }
331}
332impl From<TerminalShortStringPtr> for ExprPtr {
333 fn from(value: TerminalShortStringPtr) -> Self {
334 Self(value.0)
335 }
336}
337impl From<TerminalStringPtr> for ExprPtr {
338 fn from(value: TerminalStringPtr) -> Self {
339 Self(value.0)
340 }
341}
342impl From<TerminalFalsePtr> for ExprPtr {
343 fn from(value: TerminalFalsePtr) -> Self {
344 Self(value.0)
345 }
346}
347impl From<TerminalTruePtr> for ExprPtr {
348 fn from(value: TerminalTruePtr) -> Self {
349 Self(value.0)
350 }
351}
352impl From<ExprParenthesizedPtr> for ExprPtr {
353 fn from(value: ExprParenthesizedPtr) -> Self {
354 Self(value.0)
355 }
356}
357impl From<ExprUnaryPtr> for ExprPtr {
358 fn from(value: ExprUnaryPtr) -> Self {
359 Self(value.0)
360 }
361}
362impl From<ExprBinaryPtr> for ExprPtr {
363 fn from(value: ExprBinaryPtr) -> Self {
364 Self(value.0)
365 }
366}
367impl From<ExprListParenthesizedPtr> for ExprPtr {
368 fn from(value: ExprListParenthesizedPtr) -> Self {
369 Self(value.0)
370 }
371}
372impl From<ExprFunctionCallPtr> for ExprPtr {
373 fn from(value: ExprFunctionCallPtr) -> Self {
374 Self(value.0)
375 }
376}
377impl From<ExprStructCtorCallPtr> for ExprPtr {
378 fn from(value: ExprStructCtorCallPtr) -> Self {
379 Self(value.0)
380 }
381}
382impl From<ExprBlockPtr> for ExprPtr {
383 fn from(value: ExprBlockPtr) -> Self {
384 Self(value.0)
385 }
386}
387impl From<ExprMatchPtr> for ExprPtr {
388 fn from(value: ExprMatchPtr) -> Self {
389 Self(value.0)
390 }
391}
392impl From<ExprIfPtr> for ExprPtr {
393 fn from(value: ExprIfPtr) -> Self {
394 Self(value.0)
395 }
396}
397impl From<ExprLoopPtr> for ExprPtr {
398 fn from(value: ExprLoopPtr) -> Self {
399 Self(value.0)
400 }
401}
402impl From<ExprWhilePtr> for ExprPtr {
403 fn from(value: ExprWhilePtr) -> Self {
404 Self(value.0)
405 }
406}
407impl From<ExprForPtr> for ExprPtr {
408 fn from(value: ExprForPtr) -> Self {
409 Self(value.0)
410 }
411}
412impl From<ExprClosurePtr> for ExprPtr {
413 fn from(value: ExprClosurePtr) -> Self {
414 Self(value.0)
415 }
416}
417impl From<ExprErrorPropagatePtr> for ExprPtr {
418 fn from(value: ExprErrorPropagatePtr) -> Self {
419 Self(value.0)
420 }
421}
422impl From<ExprFieldInitShorthandPtr> for ExprPtr {
423 fn from(value: ExprFieldInitShorthandPtr) -> Self {
424 Self(value.0)
425 }
426}
427impl From<ExprIndexedPtr> for ExprPtr {
428 fn from(value: ExprIndexedPtr) -> Self {
429 Self(value.0)
430 }
431}
432impl From<ExprInlineMacroPtr> for ExprPtr {
433 fn from(value: ExprInlineMacroPtr) -> Self {
434 Self(value.0)
435 }
436}
437impl From<ExprFixedSizeArrayPtr> for ExprPtr {
438 fn from(value: ExprFixedSizeArrayPtr) -> Self {
439 Self(value.0)
440 }
441}
442impl From<ExprPlaceholderPtr> for ExprPtr {
443 fn from(value: ExprPlaceholderPtr) -> Self {
444 Self(value.0)
445 }
446}
447impl From<ExprMissingPtr> for ExprPtr {
448 fn from(value: ExprMissingPtr) -> Self {
449 Self(value.0)
450 }
451}
452impl From<ExprPathGreen> for ExprGreen {
453 fn from(value: ExprPathGreen) -> Self {
454 Self(value.0)
455 }
456}
457impl From<TerminalLiteralNumberGreen> for ExprGreen {
458 fn from(value: TerminalLiteralNumberGreen) -> Self {
459 Self(value.0)
460 }
461}
462impl From<TerminalShortStringGreen> for ExprGreen {
463 fn from(value: TerminalShortStringGreen) -> Self {
464 Self(value.0)
465 }
466}
467impl From<TerminalStringGreen> for ExprGreen {
468 fn from(value: TerminalStringGreen) -> Self {
469 Self(value.0)
470 }
471}
472impl From<TerminalFalseGreen> for ExprGreen {
473 fn from(value: TerminalFalseGreen) -> Self {
474 Self(value.0)
475 }
476}
477impl From<TerminalTrueGreen> for ExprGreen {
478 fn from(value: TerminalTrueGreen) -> Self {
479 Self(value.0)
480 }
481}
482impl From<ExprParenthesizedGreen> for ExprGreen {
483 fn from(value: ExprParenthesizedGreen) -> Self {
484 Self(value.0)
485 }
486}
487impl From<ExprUnaryGreen> for ExprGreen {
488 fn from(value: ExprUnaryGreen) -> Self {
489 Self(value.0)
490 }
491}
492impl From<ExprBinaryGreen> for ExprGreen {
493 fn from(value: ExprBinaryGreen) -> Self {
494 Self(value.0)
495 }
496}
497impl From<ExprListParenthesizedGreen> for ExprGreen {
498 fn from(value: ExprListParenthesizedGreen) -> Self {
499 Self(value.0)
500 }
501}
502impl From<ExprFunctionCallGreen> for ExprGreen {
503 fn from(value: ExprFunctionCallGreen) -> Self {
504 Self(value.0)
505 }
506}
507impl From<ExprStructCtorCallGreen> for ExprGreen {
508 fn from(value: ExprStructCtorCallGreen) -> Self {
509 Self(value.0)
510 }
511}
512impl From<ExprBlockGreen> for ExprGreen {
513 fn from(value: ExprBlockGreen) -> Self {
514 Self(value.0)
515 }
516}
517impl From<ExprMatchGreen> for ExprGreen {
518 fn from(value: ExprMatchGreen) -> Self {
519 Self(value.0)
520 }
521}
522impl From<ExprIfGreen> for ExprGreen {
523 fn from(value: ExprIfGreen) -> Self {
524 Self(value.0)
525 }
526}
527impl From<ExprLoopGreen> for ExprGreen {
528 fn from(value: ExprLoopGreen) -> Self {
529 Self(value.0)
530 }
531}
532impl From<ExprWhileGreen> for ExprGreen {
533 fn from(value: ExprWhileGreen) -> Self {
534 Self(value.0)
535 }
536}
537impl From<ExprForGreen> for ExprGreen {
538 fn from(value: ExprForGreen) -> Self {
539 Self(value.0)
540 }
541}
542impl From<ExprClosureGreen> for ExprGreen {
543 fn from(value: ExprClosureGreen) -> Self {
544 Self(value.0)
545 }
546}
547impl From<ExprErrorPropagateGreen> for ExprGreen {
548 fn from(value: ExprErrorPropagateGreen) -> Self {
549 Self(value.0)
550 }
551}
552impl From<ExprFieldInitShorthandGreen> for ExprGreen {
553 fn from(value: ExprFieldInitShorthandGreen) -> Self {
554 Self(value.0)
555 }
556}
557impl From<ExprIndexedGreen> for ExprGreen {
558 fn from(value: ExprIndexedGreen) -> Self {
559 Self(value.0)
560 }
561}
562impl From<ExprInlineMacroGreen> for ExprGreen {
563 fn from(value: ExprInlineMacroGreen) -> Self {
564 Self(value.0)
565 }
566}
567impl From<ExprFixedSizeArrayGreen> for ExprGreen {
568 fn from(value: ExprFixedSizeArrayGreen) -> Self {
569 Self(value.0)
570 }
571}
572impl From<ExprPlaceholderGreen> for ExprGreen {
573 fn from(value: ExprPlaceholderGreen) -> Self {
574 Self(value.0)
575 }
576}
577impl From<ExprMissingGreen> for ExprGreen {
578 fn from(value: ExprMissingGreen) -> Self {
579 Self(value.0)
580 }
581}
582#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
583pub struct ExprGreen(pub GreenId);
584impl TypedSyntaxNode for Expr {
585 const OPTIONAL_KIND: Option<SyntaxKind> = None;
586 type StablePtr = ExprPtr;
587 type Green = ExprGreen;
588 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
589 ExprGreen(ExprMissing::missing(db).0)
590 }
591 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
592 let kind = node.kind(db);
593 match kind {
594 SyntaxKind::ExprPath => Expr::Path(ExprPath::from_syntax_node(db, node)),
595 SyntaxKind::TerminalLiteralNumber => {
596 Expr::Literal(TerminalLiteralNumber::from_syntax_node(db, node))
597 }
598 SyntaxKind::TerminalShortString => {
599 Expr::ShortString(TerminalShortString::from_syntax_node(db, node))
600 }
601 SyntaxKind::TerminalString => Expr::String(TerminalString::from_syntax_node(db, node)),
602 SyntaxKind::TerminalFalse => Expr::False(TerminalFalse::from_syntax_node(db, node)),
603 SyntaxKind::TerminalTrue => Expr::True(TerminalTrue::from_syntax_node(db, node)),
604 SyntaxKind::ExprParenthesized => {
605 Expr::Parenthesized(ExprParenthesized::from_syntax_node(db, node))
606 }
607 SyntaxKind::ExprUnary => Expr::Unary(ExprUnary::from_syntax_node(db, node)),
608 SyntaxKind::ExprBinary => Expr::Binary(ExprBinary::from_syntax_node(db, node)),
609 SyntaxKind::ExprListParenthesized => {
610 Expr::Tuple(ExprListParenthesized::from_syntax_node(db, node))
611 }
612 SyntaxKind::ExprFunctionCall => {
613 Expr::FunctionCall(ExprFunctionCall::from_syntax_node(db, node))
614 }
615 SyntaxKind::ExprStructCtorCall => {
616 Expr::StructCtorCall(ExprStructCtorCall::from_syntax_node(db, node))
617 }
618 SyntaxKind::ExprBlock => Expr::Block(ExprBlock::from_syntax_node(db, node)),
619 SyntaxKind::ExprMatch => Expr::Match(ExprMatch::from_syntax_node(db, node)),
620 SyntaxKind::ExprIf => Expr::If(ExprIf::from_syntax_node(db, node)),
621 SyntaxKind::ExprLoop => Expr::Loop(ExprLoop::from_syntax_node(db, node)),
622 SyntaxKind::ExprWhile => Expr::While(ExprWhile::from_syntax_node(db, node)),
623 SyntaxKind::ExprFor => Expr::For(ExprFor::from_syntax_node(db, node)),
624 SyntaxKind::ExprClosure => Expr::Closure(ExprClosure::from_syntax_node(db, node)),
625 SyntaxKind::ExprErrorPropagate => {
626 Expr::ErrorPropagate(ExprErrorPropagate::from_syntax_node(db, node))
627 }
628 SyntaxKind::ExprFieldInitShorthand => {
629 Expr::FieldInitShorthand(ExprFieldInitShorthand::from_syntax_node(db, node))
630 }
631 SyntaxKind::ExprIndexed => Expr::Indexed(ExprIndexed::from_syntax_node(db, node)),
632 SyntaxKind::ExprInlineMacro => {
633 Expr::InlineMacro(ExprInlineMacro::from_syntax_node(db, node))
634 }
635 SyntaxKind::ExprFixedSizeArray => {
636 Expr::FixedSizeArray(ExprFixedSizeArray::from_syntax_node(db, node))
637 }
638 SyntaxKind::ExprPlaceholder => {
639 Expr::Placeholder(ExprPlaceholder::from_syntax_node(db, node))
640 }
641 SyntaxKind::ExprMissing => Expr::Missing(ExprMissing::from_syntax_node(db, node)),
642 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Expr"),
643 }
644 }
645 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
646 let kind = node.kind(db);
647 match kind {
648 SyntaxKind::ExprPath => Some(Expr::Path(ExprPath::from_syntax_node(db, node))),
649 SyntaxKind::TerminalLiteralNumber => {
650 Some(Expr::Literal(TerminalLiteralNumber::from_syntax_node(db, node)))
651 }
652 SyntaxKind::TerminalShortString => {
653 Some(Expr::ShortString(TerminalShortString::from_syntax_node(db, node)))
654 }
655 SyntaxKind::TerminalString => {
656 Some(Expr::String(TerminalString::from_syntax_node(db, node)))
657 }
658 SyntaxKind::TerminalFalse => {
659 Some(Expr::False(TerminalFalse::from_syntax_node(db, node)))
660 }
661 SyntaxKind::TerminalTrue => Some(Expr::True(TerminalTrue::from_syntax_node(db, node))),
662 SyntaxKind::ExprParenthesized => {
663 Some(Expr::Parenthesized(ExprParenthesized::from_syntax_node(db, node)))
664 }
665 SyntaxKind::ExprUnary => Some(Expr::Unary(ExprUnary::from_syntax_node(db, node))),
666 SyntaxKind::ExprBinary => Some(Expr::Binary(ExprBinary::from_syntax_node(db, node))),
667 SyntaxKind::ExprListParenthesized => {
668 Some(Expr::Tuple(ExprListParenthesized::from_syntax_node(db, node)))
669 }
670 SyntaxKind::ExprFunctionCall => {
671 Some(Expr::FunctionCall(ExprFunctionCall::from_syntax_node(db, node)))
672 }
673 SyntaxKind::ExprStructCtorCall => {
674 Some(Expr::StructCtorCall(ExprStructCtorCall::from_syntax_node(db, node)))
675 }
676 SyntaxKind::ExprBlock => Some(Expr::Block(ExprBlock::from_syntax_node(db, node))),
677 SyntaxKind::ExprMatch => Some(Expr::Match(ExprMatch::from_syntax_node(db, node))),
678 SyntaxKind::ExprIf => Some(Expr::If(ExprIf::from_syntax_node(db, node))),
679 SyntaxKind::ExprLoop => Some(Expr::Loop(ExprLoop::from_syntax_node(db, node))),
680 SyntaxKind::ExprWhile => Some(Expr::While(ExprWhile::from_syntax_node(db, node))),
681 SyntaxKind::ExprFor => Some(Expr::For(ExprFor::from_syntax_node(db, node))),
682 SyntaxKind::ExprClosure => Some(Expr::Closure(ExprClosure::from_syntax_node(db, node))),
683 SyntaxKind::ExprErrorPropagate => {
684 Some(Expr::ErrorPropagate(ExprErrorPropagate::from_syntax_node(db, node)))
685 }
686 SyntaxKind::ExprFieldInitShorthand => {
687 Some(Expr::FieldInitShorthand(ExprFieldInitShorthand::from_syntax_node(db, node)))
688 }
689 SyntaxKind::ExprIndexed => Some(Expr::Indexed(ExprIndexed::from_syntax_node(db, node))),
690 SyntaxKind::ExprInlineMacro => {
691 Some(Expr::InlineMacro(ExprInlineMacro::from_syntax_node(db, node)))
692 }
693 SyntaxKind::ExprFixedSizeArray => {
694 Some(Expr::FixedSizeArray(ExprFixedSizeArray::from_syntax_node(db, node)))
695 }
696 SyntaxKind::ExprPlaceholder => {
697 Some(Expr::Placeholder(ExprPlaceholder::from_syntax_node(db, node)))
698 }
699 SyntaxKind::ExprMissing => Some(Expr::Missing(ExprMissing::from_syntax_node(db, node))),
700 _ => None,
701 }
702 }
703 fn as_syntax_node(&self) -> SyntaxNode {
704 match self {
705 Expr::Path(x) => x.as_syntax_node(),
706 Expr::Literal(x) => x.as_syntax_node(),
707 Expr::ShortString(x) => x.as_syntax_node(),
708 Expr::String(x) => x.as_syntax_node(),
709 Expr::False(x) => x.as_syntax_node(),
710 Expr::True(x) => x.as_syntax_node(),
711 Expr::Parenthesized(x) => x.as_syntax_node(),
712 Expr::Unary(x) => x.as_syntax_node(),
713 Expr::Binary(x) => x.as_syntax_node(),
714 Expr::Tuple(x) => x.as_syntax_node(),
715 Expr::FunctionCall(x) => x.as_syntax_node(),
716 Expr::StructCtorCall(x) => x.as_syntax_node(),
717 Expr::Block(x) => x.as_syntax_node(),
718 Expr::Match(x) => x.as_syntax_node(),
719 Expr::If(x) => x.as_syntax_node(),
720 Expr::Loop(x) => x.as_syntax_node(),
721 Expr::While(x) => x.as_syntax_node(),
722 Expr::For(x) => x.as_syntax_node(),
723 Expr::Closure(x) => x.as_syntax_node(),
724 Expr::ErrorPropagate(x) => x.as_syntax_node(),
725 Expr::FieldInitShorthand(x) => x.as_syntax_node(),
726 Expr::Indexed(x) => x.as_syntax_node(),
727 Expr::InlineMacro(x) => x.as_syntax_node(),
728 Expr::FixedSizeArray(x) => x.as_syntax_node(),
729 Expr::Placeholder(x) => x.as_syntax_node(),
730 Expr::Missing(x) => x.as_syntax_node(),
731 }
732 }
733 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
734 ExprPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
735 }
736}
737impl Expr {
738 pub fn is_variant(kind: SyntaxKind) -> bool {
740 matches!(
741 kind,
742 SyntaxKind::ExprPath
743 | SyntaxKind::TerminalLiteralNumber
744 | SyntaxKind::TerminalShortString
745 | SyntaxKind::TerminalString
746 | SyntaxKind::TerminalFalse
747 | SyntaxKind::TerminalTrue
748 | SyntaxKind::ExprParenthesized
749 | SyntaxKind::ExprUnary
750 | SyntaxKind::ExprBinary
751 | SyntaxKind::ExprListParenthesized
752 | SyntaxKind::ExprFunctionCall
753 | SyntaxKind::ExprStructCtorCall
754 | SyntaxKind::ExprBlock
755 | SyntaxKind::ExprMatch
756 | SyntaxKind::ExprIf
757 | SyntaxKind::ExprLoop
758 | SyntaxKind::ExprWhile
759 | SyntaxKind::ExprFor
760 | SyntaxKind::ExprClosure
761 | SyntaxKind::ExprErrorPropagate
762 | SyntaxKind::ExprFieldInitShorthand
763 | SyntaxKind::ExprIndexed
764 | SyntaxKind::ExprInlineMacro
765 | SyntaxKind::ExprFixedSizeArray
766 | SyntaxKind::ExprPlaceholder
767 | SyntaxKind::ExprMissing
768 )
769 }
770}
771#[derive(Clone, Debug, Eq, Hash, PartialEq)]
772pub struct ExprList(ElementList<Expr, 2>);
773impl Deref for ExprList {
774 type Target = ElementList<Expr, 2>;
775 fn deref(&self) -> &Self::Target {
776 &self.0
777 }
778}
779impl ExprList {
780 pub fn new_green(
781 db: &dyn SyntaxGroup,
782 children: &[ExprListElementOrSeparatorGreen],
783 ) -> ExprListGreen {
784 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
785 ExprListGreen(
786 Arc::new(GreenNode {
787 kind: SyntaxKind::ExprList,
788 details: GreenNodeDetails::Node {
789 children: children.iter().map(|x| x.id()).collect(),
790 width,
791 },
792 })
793 .intern(db),
794 )
795 }
796}
797#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
798pub struct ExprListPtr(pub SyntaxStablePtrId);
799impl TypedStablePtr for ExprListPtr {
800 type SyntaxNode = ExprList;
801 fn untyped(&self) -> SyntaxStablePtrId {
802 self.0
803 }
804 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprList {
805 ExprList::from_syntax_node(db, self.0.lookup(db))
806 }
807}
808impl From<ExprListPtr> for SyntaxStablePtrId {
809 fn from(ptr: ExprListPtr) -> Self {
810 ptr.untyped()
811 }
812}
813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
814pub enum ExprListElementOrSeparatorGreen {
815 Separator(TerminalCommaGreen),
816 Element(ExprGreen),
817}
818impl From<TerminalCommaGreen> for ExprListElementOrSeparatorGreen {
819 fn from(value: TerminalCommaGreen) -> Self {
820 ExprListElementOrSeparatorGreen::Separator(value)
821 }
822}
823impl From<ExprGreen> for ExprListElementOrSeparatorGreen {
824 fn from(value: ExprGreen) -> Self {
825 ExprListElementOrSeparatorGreen::Element(value)
826 }
827}
828impl ExprListElementOrSeparatorGreen {
829 fn id(&self) -> GreenId {
830 match self {
831 ExprListElementOrSeparatorGreen::Separator(green) => green.0,
832 ExprListElementOrSeparatorGreen::Element(green) => green.0,
833 }
834 }
835}
836#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
837pub struct ExprListGreen(pub GreenId);
838impl TypedSyntaxNode for ExprList {
839 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprList);
840 type StablePtr = ExprListPtr;
841 type Green = ExprListGreen;
842 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
843 ExprListGreen(
844 Arc::new(GreenNode {
845 kind: SyntaxKind::ExprList,
846 details: GreenNodeDetails::Node {
847 children: [].into(),
848 width: TextWidth::default(),
849 },
850 })
851 .intern(db),
852 )
853 }
854 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
855 Self(ElementList::new(node))
856 }
857 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
858 if node.kind(db) == SyntaxKind::ExprList {
859 Some(Self(ElementList::new(node)))
860 } else {
861 None
862 }
863 }
864 fn as_syntax_node(&self) -> SyntaxNode {
865 self.node
866 }
867 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
868 ExprListPtr(self.node.stable_ptr(db))
869 }
870}
871#[derive(Clone, Debug, Eq, Hash, PartialEq)]
872pub struct Arg {
873 node: SyntaxNode,
874}
875impl Arg {
876 pub const INDEX_MODIFIERS: usize = 0;
877 pub const INDEX_ARG_CLAUSE: usize = 1;
878 pub fn new_green(
879 db: &dyn SyntaxGroup,
880 modifiers: ModifierListGreen,
881 arg_clause: ArgClauseGreen,
882 ) -> ArgGreen {
883 let children = [modifiers.0, arg_clause.0];
884 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
885 ArgGreen(
886 Arc::new(GreenNode {
887 kind: SyntaxKind::Arg,
888 details: GreenNodeDetails::Node { children: children.into(), width },
889 })
890 .intern(db),
891 )
892 }
893}
894impl Arg {
895 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
896 ModifierList::from_syntax_node(db, self.node.get_children(db)[0])
897 }
898 pub fn arg_clause(&self, db: &dyn SyntaxGroup) -> ArgClause {
899 ArgClause::from_syntax_node(db, self.node.get_children(db)[1])
900 }
901}
902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
903pub struct ArgPtr(pub SyntaxStablePtrId);
904impl ArgPtr {}
905impl TypedStablePtr for ArgPtr {
906 type SyntaxNode = Arg;
907 fn untyped(&self) -> SyntaxStablePtrId {
908 self.0
909 }
910 fn lookup(&self, db: &dyn SyntaxGroup) -> Arg {
911 Arg::from_syntax_node(db, self.0.lookup(db))
912 }
913}
914impl From<ArgPtr> for SyntaxStablePtrId {
915 fn from(ptr: ArgPtr) -> Self {
916 ptr.untyped()
917 }
918}
919#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
920pub struct ArgGreen(pub GreenId);
921impl TypedSyntaxNode for Arg {
922 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Arg);
923 type StablePtr = ArgPtr;
924 type Green = ArgGreen;
925 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
926 ArgGreen(
927 Arc::new(GreenNode {
928 kind: SyntaxKind::Arg,
929 details: GreenNodeDetails::Node {
930 children: [ModifierList::missing(db).0, ArgClause::missing(db).0].into(),
931 width: TextWidth::default(),
932 },
933 })
934 .intern(db),
935 )
936 }
937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
938 let kind = node.kind(db);
939 assert_eq!(
940 kind,
941 SyntaxKind::Arg,
942 "Unexpected SyntaxKind {:?}. Expected {:?}.",
943 kind,
944 SyntaxKind::Arg
945 );
946 Self { node }
947 }
948 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
949 let kind = node.kind(db);
950 if kind == SyntaxKind::Arg { Some(Self::from_syntax_node(db, node)) } else { None }
951 }
952 fn as_syntax_node(&self) -> SyntaxNode {
953 self.node
954 }
955 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
956 ArgPtr(self.node.stable_ptr(db))
957 }
958}
959#[derive(Clone, Debug, Eq, Hash, PartialEq)]
960pub enum ArgClause {
961 Unnamed(ArgClauseUnnamed),
962 Named(ArgClauseNamed),
963 FieldInitShorthand(ArgClauseFieldInitShorthand),
964}
965#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
966pub struct ArgClausePtr(pub SyntaxStablePtrId);
967impl TypedStablePtr for ArgClausePtr {
968 type SyntaxNode = ArgClause;
969 fn untyped(&self) -> SyntaxStablePtrId {
970 self.0
971 }
972 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClause {
973 ArgClause::from_syntax_node(db, self.0.lookup(db))
974 }
975}
976impl From<ArgClausePtr> for SyntaxStablePtrId {
977 fn from(ptr: ArgClausePtr) -> Self {
978 ptr.untyped()
979 }
980}
981impl From<ArgClauseUnnamedPtr> for ArgClausePtr {
982 fn from(value: ArgClauseUnnamedPtr) -> Self {
983 Self(value.0)
984 }
985}
986impl From<ArgClauseNamedPtr> for ArgClausePtr {
987 fn from(value: ArgClauseNamedPtr) -> Self {
988 Self(value.0)
989 }
990}
991impl From<ArgClauseFieldInitShorthandPtr> for ArgClausePtr {
992 fn from(value: ArgClauseFieldInitShorthandPtr) -> Self {
993 Self(value.0)
994 }
995}
996impl From<ArgClauseUnnamedGreen> for ArgClauseGreen {
997 fn from(value: ArgClauseUnnamedGreen) -> Self {
998 Self(value.0)
999 }
1000}
1001impl From<ArgClauseNamedGreen> for ArgClauseGreen {
1002 fn from(value: ArgClauseNamedGreen) -> Self {
1003 Self(value.0)
1004 }
1005}
1006impl From<ArgClauseFieldInitShorthandGreen> for ArgClauseGreen {
1007 fn from(value: ArgClauseFieldInitShorthandGreen) -> Self {
1008 Self(value.0)
1009 }
1010}
1011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1012pub struct ArgClauseGreen(pub GreenId);
1013impl TypedSyntaxNode for ArgClause {
1014 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1015 type StablePtr = ArgClausePtr;
1016 type Green = ArgClauseGreen;
1017 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1018 panic!("No missing variant.");
1019 }
1020 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1021 let kind = node.kind(db);
1022 match kind {
1023 SyntaxKind::ArgClauseUnnamed => {
1024 ArgClause::Unnamed(ArgClauseUnnamed::from_syntax_node(db, node))
1025 }
1026 SyntaxKind::ArgClauseNamed => {
1027 ArgClause::Named(ArgClauseNamed::from_syntax_node(db, node))
1028 }
1029 SyntaxKind::ArgClauseFieldInitShorthand => ArgClause::FieldInitShorthand(
1030 ArgClauseFieldInitShorthand::from_syntax_node(db, node),
1031 ),
1032 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ArgClause"),
1033 }
1034 }
1035 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1036 let kind = node.kind(db);
1037 match kind {
1038 SyntaxKind::ArgClauseUnnamed => {
1039 Some(ArgClause::Unnamed(ArgClauseUnnamed::from_syntax_node(db, node)))
1040 }
1041 SyntaxKind::ArgClauseNamed => {
1042 Some(ArgClause::Named(ArgClauseNamed::from_syntax_node(db, node)))
1043 }
1044 SyntaxKind::ArgClauseFieldInitShorthand => Some(ArgClause::FieldInitShorthand(
1045 ArgClauseFieldInitShorthand::from_syntax_node(db, node),
1046 )),
1047 _ => None,
1048 }
1049 }
1050 fn as_syntax_node(&self) -> SyntaxNode {
1051 match self {
1052 ArgClause::Unnamed(x) => x.as_syntax_node(),
1053 ArgClause::Named(x) => x.as_syntax_node(),
1054 ArgClause::FieldInitShorthand(x) => x.as_syntax_node(),
1055 }
1056 }
1057 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1058 ArgClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
1059 }
1060}
1061impl ArgClause {
1062 pub fn is_variant(kind: SyntaxKind) -> bool {
1064 matches!(
1065 kind,
1066 SyntaxKind::ArgClauseUnnamed
1067 | SyntaxKind::ArgClauseNamed
1068 | SyntaxKind::ArgClauseFieldInitShorthand
1069 )
1070 }
1071}
1072#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1073pub struct ArgClauseNamed {
1074 node: SyntaxNode,
1075}
1076impl ArgClauseNamed {
1077 pub const INDEX_NAME: usize = 0;
1078 pub const INDEX_COLON: usize = 1;
1079 pub const INDEX_VALUE: usize = 2;
1080 pub fn new_green(
1081 db: &dyn SyntaxGroup,
1082 name: TerminalIdentifierGreen,
1083 colon: TerminalColonGreen,
1084 value: ExprGreen,
1085 ) -> ArgClauseNamedGreen {
1086 let children = [name.0, colon.0, value.0];
1087 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1088 ArgClauseNamedGreen(
1089 Arc::new(GreenNode {
1090 kind: SyntaxKind::ArgClauseNamed,
1091 details: GreenNodeDetails::Node { children: children.into(), width },
1092 })
1093 .intern(db),
1094 )
1095 }
1096}
1097impl ArgClauseNamed {
1098 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1099 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
1100 }
1101 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
1102 TerminalColon::from_syntax_node(db, self.node.get_children(db)[1])
1103 }
1104 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
1105 Expr::from_syntax_node(db, self.node.get_children(db)[2])
1106 }
1107}
1108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1109pub struct ArgClauseNamedPtr(pub SyntaxStablePtrId);
1110impl ArgClauseNamedPtr {}
1111impl TypedStablePtr for ArgClauseNamedPtr {
1112 type SyntaxNode = ArgClauseNamed;
1113 fn untyped(&self) -> SyntaxStablePtrId {
1114 self.0
1115 }
1116 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseNamed {
1117 ArgClauseNamed::from_syntax_node(db, self.0.lookup(db))
1118 }
1119}
1120impl From<ArgClauseNamedPtr> for SyntaxStablePtrId {
1121 fn from(ptr: ArgClauseNamedPtr) -> Self {
1122 ptr.untyped()
1123 }
1124}
1125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1126pub struct ArgClauseNamedGreen(pub GreenId);
1127impl TypedSyntaxNode for ArgClauseNamed {
1128 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseNamed);
1129 type StablePtr = ArgClauseNamedPtr;
1130 type Green = ArgClauseNamedGreen;
1131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1132 ArgClauseNamedGreen(
1133 Arc::new(GreenNode {
1134 kind: SyntaxKind::ArgClauseNamed,
1135 details: GreenNodeDetails::Node {
1136 children: [
1137 TerminalIdentifier::missing(db).0,
1138 TerminalColon::missing(db).0,
1139 Expr::missing(db).0,
1140 ]
1141 .into(),
1142 width: TextWidth::default(),
1143 },
1144 })
1145 .intern(db),
1146 )
1147 }
1148 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1149 let kind = node.kind(db);
1150 assert_eq!(
1151 kind,
1152 SyntaxKind::ArgClauseNamed,
1153 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1154 kind,
1155 SyntaxKind::ArgClauseNamed
1156 );
1157 Self { node }
1158 }
1159 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1160 let kind = node.kind(db);
1161 if kind == SyntaxKind::ArgClauseNamed {
1162 Some(Self::from_syntax_node(db, node))
1163 } else {
1164 None
1165 }
1166 }
1167 fn as_syntax_node(&self) -> SyntaxNode {
1168 self.node
1169 }
1170 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1171 ArgClauseNamedPtr(self.node.stable_ptr(db))
1172 }
1173}
1174#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1175pub struct ArgClauseUnnamed {
1176 node: SyntaxNode,
1177}
1178impl ArgClauseUnnamed {
1179 pub const INDEX_VALUE: usize = 0;
1180 pub fn new_green(db: &dyn SyntaxGroup, value: ExprGreen) -> ArgClauseUnnamedGreen {
1181 let children = [value.0];
1182 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1183 ArgClauseUnnamedGreen(
1184 Arc::new(GreenNode {
1185 kind: SyntaxKind::ArgClauseUnnamed,
1186 details: GreenNodeDetails::Node { children: children.into(), width },
1187 })
1188 .intern(db),
1189 )
1190 }
1191}
1192impl ArgClauseUnnamed {
1193 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
1194 Expr::from_syntax_node(db, self.node.get_children(db)[0])
1195 }
1196}
1197#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1198pub struct ArgClauseUnnamedPtr(pub SyntaxStablePtrId);
1199impl ArgClauseUnnamedPtr {}
1200impl TypedStablePtr for ArgClauseUnnamedPtr {
1201 type SyntaxNode = ArgClauseUnnamed;
1202 fn untyped(&self) -> SyntaxStablePtrId {
1203 self.0
1204 }
1205 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseUnnamed {
1206 ArgClauseUnnamed::from_syntax_node(db, self.0.lookup(db))
1207 }
1208}
1209impl From<ArgClauseUnnamedPtr> for SyntaxStablePtrId {
1210 fn from(ptr: ArgClauseUnnamedPtr) -> Self {
1211 ptr.untyped()
1212 }
1213}
1214#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1215pub struct ArgClauseUnnamedGreen(pub GreenId);
1216impl TypedSyntaxNode for ArgClauseUnnamed {
1217 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseUnnamed);
1218 type StablePtr = ArgClauseUnnamedPtr;
1219 type Green = ArgClauseUnnamedGreen;
1220 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1221 ArgClauseUnnamedGreen(
1222 Arc::new(GreenNode {
1223 kind: SyntaxKind::ArgClauseUnnamed,
1224 details: GreenNodeDetails::Node {
1225 children: [Expr::missing(db).0].into(),
1226 width: TextWidth::default(),
1227 },
1228 })
1229 .intern(db),
1230 )
1231 }
1232 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1233 let kind = node.kind(db);
1234 assert_eq!(
1235 kind,
1236 SyntaxKind::ArgClauseUnnamed,
1237 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1238 kind,
1239 SyntaxKind::ArgClauseUnnamed
1240 );
1241 Self { node }
1242 }
1243 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1244 let kind = node.kind(db);
1245 if kind == SyntaxKind::ArgClauseUnnamed {
1246 Some(Self::from_syntax_node(db, node))
1247 } else {
1248 None
1249 }
1250 }
1251 fn as_syntax_node(&self) -> SyntaxNode {
1252 self.node
1253 }
1254 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1255 ArgClauseUnnamedPtr(self.node.stable_ptr(db))
1256 }
1257}
1258#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1259pub struct ArgClauseFieldInitShorthand {
1260 node: SyntaxNode,
1261}
1262impl ArgClauseFieldInitShorthand {
1263 pub const INDEX_COLON: usize = 0;
1264 pub const INDEX_NAME: usize = 1;
1265 pub fn new_green(
1266 db: &dyn SyntaxGroup,
1267 colon: TerminalColonGreen,
1268 name: ExprFieldInitShorthandGreen,
1269 ) -> ArgClauseFieldInitShorthandGreen {
1270 let children = [colon.0, name.0];
1271 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1272 ArgClauseFieldInitShorthandGreen(
1273 Arc::new(GreenNode {
1274 kind: SyntaxKind::ArgClauseFieldInitShorthand,
1275 details: GreenNodeDetails::Node { children: children.into(), width },
1276 })
1277 .intern(db),
1278 )
1279 }
1280}
1281impl ArgClauseFieldInitShorthand {
1282 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
1283 TerminalColon::from_syntax_node(db, self.node.get_children(db)[0])
1284 }
1285 pub fn name(&self, db: &dyn SyntaxGroup) -> ExprFieldInitShorthand {
1286 ExprFieldInitShorthand::from_syntax_node(db, self.node.get_children(db)[1])
1287 }
1288}
1289#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1290pub struct ArgClauseFieldInitShorthandPtr(pub SyntaxStablePtrId);
1291impl ArgClauseFieldInitShorthandPtr {}
1292impl TypedStablePtr for ArgClauseFieldInitShorthandPtr {
1293 type SyntaxNode = ArgClauseFieldInitShorthand;
1294 fn untyped(&self) -> SyntaxStablePtrId {
1295 self.0
1296 }
1297 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseFieldInitShorthand {
1298 ArgClauseFieldInitShorthand::from_syntax_node(db, self.0.lookup(db))
1299 }
1300}
1301impl From<ArgClauseFieldInitShorthandPtr> for SyntaxStablePtrId {
1302 fn from(ptr: ArgClauseFieldInitShorthandPtr) -> Self {
1303 ptr.untyped()
1304 }
1305}
1306#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1307pub struct ArgClauseFieldInitShorthandGreen(pub GreenId);
1308impl TypedSyntaxNode for ArgClauseFieldInitShorthand {
1309 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseFieldInitShorthand);
1310 type StablePtr = ArgClauseFieldInitShorthandPtr;
1311 type Green = ArgClauseFieldInitShorthandGreen;
1312 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1313 ArgClauseFieldInitShorthandGreen(
1314 Arc::new(GreenNode {
1315 kind: SyntaxKind::ArgClauseFieldInitShorthand,
1316 details: GreenNodeDetails::Node {
1317 children: [TerminalColon::missing(db).0, ExprFieldInitShorthand::missing(db).0]
1318 .into(),
1319 width: TextWidth::default(),
1320 },
1321 })
1322 .intern(db),
1323 )
1324 }
1325 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1326 let kind = node.kind(db);
1327 assert_eq!(
1328 kind,
1329 SyntaxKind::ArgClauseFieldInitShorthand,
1330 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1331 kind,
1332 SyntaxKind::ArgClauseFieldInitShorthand
1333 );
1334 Self { node }
1335 }
1336 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1337 let kind = node.kind(db);
1338 if kind == SyntaxKind::ArgClauseFieldInitShorthand {
1339 Some(Self::from_syntax_node(db, node))
1340 } else {
1341 None
1342 }
1343 }
1344 fn as_syntax_node(&self) -> SyntaxNode {
1345 self.node
1346 }
1347 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1348 ArgClauseFieldInitShorthandPtr(self.node.stable_ptr(db))
1349 }
1350}
1351#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1352pub struct ExprFieldInitShorthand {
1353 node: SyntaxNode,
1354}
1355impl ExprFieldInitShorthand {
1356 pub const INDEX_NAME: usize = 0;
1357 pub fn new_green(
1358 db: &dyn SyntaxGroup,
1359 name: TerminalIdentifierGreen,
1360 ) -> ExprFieldInitShorthandGreen {
1361 let children = [name.0];
1362 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1363 ExprFieldInitShorthandGreen(
1364 Arc::new(GreenNode {
1365 kind: SyntaxKind::ExprFieldInitShorthand,
1366 details: GreenNodeDetails::Node { children: children.into(), width },
1367 })
1368 .intern(db),
1369 )
1370 }
1371}
1372impl ExprFieldInitShorthand {
1373 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1374 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
1375 }
1376}
1377#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1378pub struct ExprFieldInitShorthandPtr(pub SyntaxStablePtrId);
1379impl ExprFieldInitShorthandPtr {}
1380impl TypedStablePtr for ExprFieldInitShorthandPtr {
1381 type SyntaxNode = ExprFieldInitShorthand;
1382 fn untyped(&self) -> SyntaxStablePtrId {
1383 self.0
1384 }
1385 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFieldInitShorthand {
1386 ExprFieldInitShorthand::from_syntax_node(db, self.0.lookup(db))
1387 }
1388}
1389impl From<ExprFieldInitShorthandPtr> for SyntaxStablePtrId {
1390 fn from(ptr: ExprFieldInitShorthandPtr) -> Self {
1391 ptr.untyped()
1392 }
1393}
1394#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1395pub struct ExprFieldInitShorthandGreen(pub GreenId);
1396impl TypedSyntaxNode for ExprFieldInitShorthand {
1397 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFieldInitShorthand);
1398 type StablePtr = ExprFieldInitShorthandPtr;
1399 type Green = ExprFieldInitShorthandGreen;
1400 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1401 ExprFieldInitShorthandGreen(
1402 Arc::new(GreenNode {
1403 kind: SyntaxKind::ExprFieldInitShorthand,
1404 details: GreenNodeDetails::Node {
1405 children: [TerminalIdentifier::missing(db).0].into(),
1406 width: TextWidth::default(),
1407 },
1408 })
1409 .intern(db),
1410 )
1411 }
1412 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1413 let kind = node.kind(db);
1414 assert_eq!(
1415 kind,
1416 SyntaxKind::ExprFieldInitShorthand,
1417 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1418 kind,
1419 SyntaxKind::ExprFieldInitShorthand
1420 );
1421 Self { node }
1422 }
1423 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1424 let kind = node.kind(db);
1425 if kind == SyntaxKind::ExprFieldInitShorthand {
1426 Some(Self::from_syntax_node(db, node))
1427 } else {
1428 None
1429 }
1430 }
1431 fn as_syntax_node(&self) -> SyntaxNode {
1432 self.node
1433 }
1434 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1435 ExprFieldInitShorthandPtr(self.node.stable_ptr(db))
1436 }
1437}
1438#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1439pub struct ArgList(ElementList<Arg, 2>);
1440impl Deref for ArgList {
1441 type Target = ElementList<Arg, 2>;
1442 fn deref(&self) -> &Self::Target {
1443 &self.0
1444 }
1445}
1446impl ArgList {
1447 pub fn new_green(
1448 db: &dyn SyntaxGroup,
1449 children: &[ArgListElementOrSeparatorGreen],
1450 ) -> ArgListGreen {
1451 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
1452 ArgListGreen(
1453 Arc::new(GreenNode {
1454 kind: SyntaxKind::ArgList,
1455 details: GreenNodeDetails::Node {
1456 children: children.iter().map(|x| x.id()).collect(),
1457 width,
1458 },
1459 })
1460 .intern(db),
1461 )
1462 }
1463}
1464#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1465pub struct ArgListPtr(pub SyntaxStablePtrId);
1466impl TypedStablePtr for ArgListPtr {
1467 type SyntaxNode = ArgList;
1468 fn untyped(&self) -> SyntaxStablePtrId {
1469 self.0
1470 }
1471 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgList {
1472 ArgList::from_syntax_node(db, self.0.lookup(db))
1473 }
1474}
1475impl From<ArgListPtr> for SyntaxStablePtrId {
1476 fn from(ptr: ArgListPtr) -> Self {
1477 ptr.untyped()
1478 }
1479}
1480#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1481pub enum ArgListElementOrSeparatorGreen {
1482 Separator(TerminalCommaGreen),
1483 Element(ArgGreen),
1484}
1485impl From<TerminalCommaGreen> for ArgListElementOrSeparatorGreen {
1486 fn from(value: TerminalCommaGreen) -> Self {
1487 ArgListElementOrSeparatorGreen::Separator(value)
1488 }
1489}
1490impl From<ArgGreen> for ArgListElementOrSeparatorGreen {
1491 fn from(value: ArgGreen) -> Self {
1492 ArgListElementOrSeparatorGreen::Element(value)
1493 }
1494}
1495impl ArgListElementOrSeparatorGreen {
1496 fn id(&self) -> GreenId {
1497 match self {
1498 ArgListElementOrSeparatorGreen::Separator(green) => green.0,
1499 ArgListElementOrSeparatorGreen::Element(green) => green.0,
1500 }
1501 }
1502}
1503#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1504pub struct ArgListGreen(pub GreenId);
1505impl TypedSyntaxNode for ArgList {
1506 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgList);
1507 type StablePtr = ArgListPtr;
1508 type Green = ArgListGreen;
1509 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1510 ArgListGreen(
1511 Arc::new(GreenNode {
1512 kind: SyntaxKind::ArgList,
1513 details: GreenNodeDetails::Node {
1514 children: [].into(),
1515 width: TextWidth::default(),
1516 },
1517 })
1518 .intern(db),
1519 )
1520 }
1521 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1522 Self(ElementList::new(node))
1523 }
1524 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1525 if node.kind(db) == SyntaxKind::ArgList { Some(Self(ElementList::new(node))) } else { None }
1526 }
1527 fn as_syntax_node(&self) -> SyntaxNode {
1528 self.node
1529 }
1530 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1531 ArgListPtr(self.node.stable_ptr(db))
1532 }
1533}
1534#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1535pub struct ExprMissing {
1536 node: SyntaxNode,
1537}
1538impl ExprMissing {
1539 pub fn new_green(db: &dyn SyntaxGroup) -> ExprMissingGreen {
1540 let children = [];
1541 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1542 ExprMissingGreen(
1543 Arc::new(GreenNode {
1544 kind: SyntaxKind::ExprMissing,
1545 details: GreenNodeDetails::Node { children: children.into(), width },
1546 })
1547 .intern(db),
1548 )
1549 }
1550}
1551impl ExprMissing {}
1552#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1553pub struct ExprMissingPtr(pub SyntaxStablePtrId);
1554impl ExprMissingPtr {}
1555impl TypedStablePtr for ExprMissingPtr {
1556 type SyntaxNode = ExprMissing;
1557 fn untyped(&self) -> SyntaxStablePtrId {
1558 self.0
1559 }
1560 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprMissing {
1561 ExprMissing::from_syntax_node(db, self.0.lookup(db))
1562 }
1563}
1564impl From<ExprMissingPtr> for SyntaxStablePtrId {
1565 fn from(ptr: ExprMissingPtr) -> Self {
1566 ptr.untyped()
1567 }
1568}
1569#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1570pub struct ExprMissingGreen(pub GreenId);
1571impl TypedSyntaxNode for ExprMissing {
1572 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprMissing);
1573 type StablePtr = ExprMissingPtr;
1574 type Green = ExprMissingGreen;
1575 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1576 ExprMissingGreen(
1577 Arc::new(GreenNode {
1578 kind: SyntaxKind::ExprMissing,
1579 details: GreenNodeDetails::Node {
1580 children: [].into(),
1581 width: TextWidth::default(),
1582 },
1583 })
1584 .intern(db),
1585 )
1586 }
1587 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1588 let kind = node.kind(db);
1589 assert_eq!(
1590 kind,
1591 SyntaxKind::ExprMissing,
1592 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1593 kind,
1594 SyntaxKind::ExprMissing
1595 );
1596 Self { node }
1597 }
1598 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1599 let kind = node.kind(db);
1600 if kind == SyntaxKind::ExprMissing { Some(Self::from_syntax_node(db, node)) } else { None }
1601 }
1602 fn as_syntax_node(&self) -> SyntaxNode {
1603 self.node
1604 }
1605 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1606 ExprMissingPtr(self.node.stable_ptr(db))
1607 }
1608}
1609#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1610pub enum PathSegment {
1611 Simple(PathSegmentSimple),
1612 WithGenericArgs(PathSegmentWithGenericArgs),
1613 Missing(PathSegmentMissing),
1614}
1615#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1616pub struct PathSegmentPtr(pub SyntaxStablePtrId);
1617impl TypedStablePtr for PathSegmentPtr {
1618 type SyntaxNode = PathSegment;
1619 fn untyped(&self) -> SyntaxStablePtrId {
1620 self.0
1621 }
1622 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegment {
1623 PathSegment::from_syntax_node(db, self.0.lookup(db))
1624 }
1625}
1626impl From<PathSegmentPtr> for SyntaxStablePtrId {
1627 fn from(ptr: PathSegmentPtr) -> Self {
1628 ptr.untyped()
1629 }
1630}
1631impl From<PathSegmentSimplePtr> for PathSegmentPtr {
1632 fn from(value: PathSegmentSimplePtr) -> Self {
1633 Self(value.0)
1634 }
1635}
1636impl From<PathSegmentWithGenericArgsPtr> for PathSegmentPtr {
1637 fn from(value: PathSegmentWithGenericArgsPtr) -> Self {
1638 Self(value.0)
1639 }
1640}
1641impl From<PathSegmentMissingPtr> for PathSegmentPtr {
1642 fn from(value: PathSegmentMissingPtr) -> Self {
1643 Self(value.0)
1644 }
1645}
1646impl From<PathSegmentSimpleGreen> for PathSegmentGreen {
1647 fn from(value: PathSegmentSimpleGreen) -> Self {
1648 Self(value.0)
1649 }
1650}
1651impl From<PathSegmentWithGenericArgsGreen> for PathSegmentGreen {
1652 fn from(value: PathSegmentWithGenericArgsGreen) -> Self {
1653 Self(value.0)
1654 }
1655}
1656impl From<PathSegmentMissingGreen> for PathSegmentGreen {
1657 fn from(value: PathSegmentMissingGreen) -> Self {
1658 Self(value.0)
1659 }
1660}
1661#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1662pub struct PathSegmentGreen(pub GreenId);
1663impl TypedSyntaxNode for PathSegment {
1664 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1665 type StablePtr = PathSegmentPtr;
1666 type Green = PathSegmentGreen;
1667 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1668 PathSegmentGreen(PathSegmentMissing::missing(db).0)
1669 }
1670 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1671 let kind = node.kind(db);
1672 match kind {
1673 SyntaxKind::PathSegmentSimple => {
1674 PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node))
1675 }
1676 SyntaxKind::PathSegmentWithGenericArgs => {
1677 PathSegment::WithGenericArgs(PathSegmentWithGenericArgs::from_syntax_node(db, node))
1678 }
1679 SyntaxKind::PathSegmentMissing => {
1680 PathSegment::Missing(PathSegmentMissing::from_syntax_node(db, node))
1681 }
1682 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "PathSegment"),
1683 }
1684 }
1685 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1686 let kind = node.kind(db);
1687 match kind {
1688 SyntaxKind::PathSegmentSimple => {
1689 Some(PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node)))
1690 }
1691 SyntaxKind::PathSegmentWithGenericArgs => Some(PathSegment::WithGenericArgs(
1692 PathSegmentWithGenericArgs::from_syntax_node(db, node),
1693 )),
1694 SyntaxKind::PathSegmentMissing => {
1695 Some(PathSegment::Missing(PathSegmentMissing::from_syntax_node(db, node)))
1696 }
1697 _ => None,
1698 }
1699 }
1700 fn as_syntax_node(&self) -> SyntaxNode {
1701 match self {
1702 PathSegment::Simple(x) => x.as_syntax_node(),
1703 PathSegment::WithGenericArgs(x) => x.as_syntax_node(),
1704 PathSegment::Missing(x) => x.as_syntax_node(),
1705 }
1706 }
1707 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1708 PathSegmentPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
1709 }
1710}
1711impl PathSegment {
1712 pub fn is_variant(kind: SyntaxKind) -> bool {
1714 matches!(
1715 kind,
1716 SyntaxKind::PathSegmentSimple
1717 | SyntaxKind::PathSegmentWithGenericArgs
1718 | SyntaxKind::PathSegmentMissing
1719 )
1720 }
1721}
1722#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1723pub struct PathSegmentSimple {
1724 node: SyntaxNode,
1725}
1726impl PathSegmentSimple {
1727 pub const INDEX_IDENT: usize = 0;
1728 pub fn new_green(
1729 db: &dyn SyntaxGroup,
1730 ident: TerminalIdentifierGreen,
1731 ) -> PathSegmentSimpleGreen {
1732 let children = [ident.0];
1733 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1734 PathSegmentSimpleGreen(
1735 Arc::new(GreenNode {
1736 kind: SyntaxKind::PathSegmentSimple,
1737 details: GreenNodeDetails::Node { children: children.into(), width },
1738 })
1739 .intern(db),
1740 )
1741 }
1742}
1743impl PathSegmentSimple {
1744 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1745 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
1746 }
1747}
1748#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1749pub struct PathSegmentSimplePtr(pub SyntaxStablePtrId);
1750impl PathSegmentSimplePtr {}
1751impl TypedStablePtr for PathSegmentSimplePtr {
1752 type SyntaxNode = PathSegmentSimple;
1753 fn untyped(&self) -> SyntaxStablePtrId {
1754 self.0
1755 }
1756 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentSimple {
1757 PathSegmentSimple::from_syntax_node(db, self.0.lookup(db))
1758 }
1759}
1760impl From<PathSegmentSimplePtr> for SyntaxStablePtrId {
1761 fn from(ptr: PathSegmentSimplePtr) -> Self {
1762 ptr.untyped()
1763 }
1764}
1765#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1766pub struct PathSegmentSimpleGreen(pub GreenId);
1767impl TypedSyntaxNode for PathSegmentSimple {
1768 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentSimple);
1769 type StablePtr = PathSegmentSimplePtr;
1770 type Green = PathSegmentSimpleGreen;
1771 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1772 PathSegmentSimpleGreen(
1773 Arc::new(GreenNode {
1774 kind: SyntaxKind::PathSegmentSimple,
1775 details: GreenNodeDetails::Node {
1776 children: [TerminalIdentifier::missing(db).0].into(),
1777 width: TextWidth::default(),
1778 },
1779 })
1780 .intern(db),
1781 )
1782 }
1783 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1784 let kind = node.kind(db);
1785 assert_eq!(
1786 kind,
1787 SyntaxKind::PathSegmentSimple,
1788 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1789 kind,
1790 SyntaxKind::PathSegmentSimple
1791 );
1792 Self { node }
1793 }
1794 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1795 let kind = node.kind(db);
1796 if kind == SyntaxKind::PathSegmentSimple {
1797 Some(Self::from_syntax_node(db, node))
1798 } else {
1799 None
1800 }
1801 }
1802 fn as_syntax_node(&self) -> SyntaxNode {
1803 self.node
1804 }
1805 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1806 PathSegmentSimplePtr(self.node.stable_ptr(db))
1807 }
1808}
1809#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1810pub enum OptionTerminalColonColon {
1811 Empty(OptionTerminalColonColonEmpty),
1812 TerminalColonColon(TerminalColonColon),
1813}
1814#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1815pub struct OptionTerminalColonColonPtr(pub SyntaxStablePtrId);
1816impl TypedStablePtr for OptionTerminalColonColonPtr {
1817 type SyntaxNode = OptionTerminalColonColon;
1818 fn untyped(&self) -> SyntaxStablePtrId {
1819 self.0
1820 }
1821 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
1822 OptionTerminalColonColon::from_syntax_node(db, self.0.lookup(db))
1823 }
1824}
1825impl From<OptionTerminalColonColonPtr> for SyntaxStablePtrId {
1826 fn from(ptr: OptionTerminalColonColonPtr) -> Self {
1827 ptr.untyped()
1828 }
1829}
1830impl From<OptionTerminalColonColonEmptyPtr> for OptionTerminalColonColonPtr {
1831 fn from(value: OptionTerminalColonColonEmptyPtr) -> Self {
1832 Self(value.0)
1833 }
1834}
1835impl From<TerminalColonColonPtr> for OptionTerminalColonColonPtr {
1836 fn from(value: TerminalColonColonPtr) -> Self {
1837 Self(value.0)
1838 }
1839}
1840impl From<OptionTerminalColonColonEmptyGreen> for OptionTerminalColonColonGreen {
1841 fn from(value: OptionTerminalColonColonEmptyGreen) -> Self {
1842 Self(value.0)
1843 }
1844}
1845impl From<TerminalColonColonGreen> for OptionTerminalColonColonGreen {
1846 fn from(value: TerminalColonColonGreen) -> Self {
1847 Self(value.0)
1848 }
1849}
1850#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1851pub struct OptionTerminalColonColonGreen(pub GreenId);
1852impl TypedSyntaxNode for OptionTerminalColonColon {
1853 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1854 type StablePtr = OptionTerminalColonColonPtr;
1855 type Green = OptionTerminalColonColonGreen;
1856 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1857 panic!("No missing variant.");
1858 }
1859 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1860 let kind = node.kind(db);
1861 match kind {
1862 SyntaxKind::OptionTerminalColonColonEmpty => OptionTerminalColonColon::Empty(
1863 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1864 ),
1865 SyntaxKind::TerminalColonColon => OptionTerminalColonColon::TerminalColonColon(
1866 TerminalColonColon::from_syntax_node(db, node),
1867 ),
1868 _ => panic!(
1869 "Unexpected syntax kind {:?} when constructing {}.",
1870 kind, "OptionTerminalColonColon"
1871 ),
1872 }
1873 }
1874 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1875 let kind = node.kind(db);
1876 match kind {
1877 SyntaxKind::OptionTerminalColonColonEmpty => Some(OptionTerminalColonColon::Empty(
1878 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1879 )),
1880 SyntaxKind::TerminalColonColon => Some(OptionTerminalColonColon::TerminalColonColon(
1881 TerminalColonColon::from_syntax_node(db, node),
1882 )),
1883 _ => None,
1884 }
1885 }
1886 fn as_syntax_node(&self) -> SyntaxNode {
1887 match self {
1888 OptionTerminalColonColon::Empty(x) => x.as_syntax_node(),
1889 OptionTerminalColonColon::TerminalColonColon(x) => x.as_syntax_node(),
1890 }
1891 }
1892 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1893 OptionTerminalColonColonPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
1894 }
1895}
1896impl OptionTerminalColonColon {
1897 pub fn is_variant(kind: SyntaxKind) -> bool {
1899 matches!(kind, SyntaxKind::OptionTerminalColonColonEmpty | SyntaxKind::TerminalColonColon)
1900 }
1901}
1902#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1903pub struct OptionTerminalColonColonEmpty {
1904 node: SyntaxNode,
1905}
1906impl OptionTerminalColonColonEmpty {
1907 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmptyGreen {
1908 let children = [];
1909 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1910 OptionTerminalColonColonEmptyGreen(
1911 Arc::new(GreenNode {
1912 kind: SyntaxKind::OptionTerminalColonColonEmpty,
1913 details: GreenNodeDetails::Node { children: children.into(), width },
1914 })
1915 .intern(db),
1916 )
1917 }
1918}
1919impl OptionTerminalColonColonEmpty {}
1920#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1921pub struct OptionTerminalColonColonEmptyPtr(pub SyntaxStablePtrId);
1922impl OptionTerminalColonColonEmptyPtr {}
1923impl TypedStablePtr for OptionTerminalColonColonEmptyPtr {
1924 type SyntaxNode = OptionTerminalColonColonEmpty;
1925 fn untyped(&self) -> SyntaxStablePtrId {
1926 self.0
1927 }
1928 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmpty {
1929 OptionTerminalColonColonEmpty::from_syntax_node(db, self.0.lookup(db))
1930 }
1931}
1932impl From<OptionTerminalColonColonEmptyPtr> for SyntaxStablePtrId {
1933 fn from(ptr: OptionTerminalColonColonEmptyPtr) -> Self {
1934 ptr.untyped()
1935 }
1936}
1937#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1938pub struct OptionTerminalColonColonEmptyGreen(pub GreenId);
1939impl TypedSyntaxNode for OptionTerminalColonColonEmpty {
1940 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalColonColonEmpty);
1941 type StablePtr = OptionTerminalColonColonEmptyPtr;
1942 type Green = OptionTerminalColonColonEmptyGreen;
1943 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1944 OptionTerminalColonColonEmptyGreen(
1945 Arc::new(GreenNode {
1946 kind: SyntaxKind::OptionTerminalColonColonEmpty,
1947 details: GreenNodeDetails::Node {
1948 children: [].into(),
1949 width: TextWidth::default(),
1950 },
1951 })
1952 .intern(db),
1953 )
1954 }
1955 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1956 let kind = node.kind(db);
1957 assert_eq!(
1958 kind,
1959 SyntaxKind::OptionTerminalColonColonEmpty,
1960 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1961 kind,
1962 SyntaxKind::OptionTerminalColonColonEmpty
1963 );
1964 Self { node }
1965 }
1966 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1967 let kind = node.kind(db);
1968 if kind == SyntaxKind::OptionTerminalColonColonEmpty {
1969 Some(Self::from_syntax_node(db, node))
1970 } else {
1971 None
1972 }
1973 }
1974 fn as_syntax_node(&self) -> SyntaxNode {
1975 self.node
1976 }
1977 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
1978 OptionTerminalColonColonEmptyPtr(self.node.stable_ptr(db))
1979 }
1980}
1981#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1982pub struct PathSegmentWithGenericArgs {
1983 node: SyntaxNode,
1984}
1985impl PathSegmentWithGenericArgs {
1986 pub const INDEX_IDENT: usize = 0;
1987 pub const INDEX_SEPARATOR: usize = 1;
1988 pub const INDEX_GENERIC_ARGS: usize = 2;
1989 pub fn new_green(
1990 db: &dyn SyntaxGroup,
1991 ident: TerminalIdentifierGreen,
1992 separator: OptionTerminalColonColonGreen,
1993 generic_args: GenericArgsGreen,
1994 ) -> PathSegmentWithGenericArgsGreen {
1995 let children = [ident.0, separator.0, generic_args.0];
1996 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
1997 PathSegmentWithGenericArgsGreen(
1998 Arc::new(GreenNode {
1999 kind: SyntaxKind::PathSegmentWithGenericArgs,
2000 details: GreenNodeDetails::Node { children: children.into(), width },
2001 })
2002 .intern(db),
2003 )
2004 }
2005}
2006impl PathSegmentWithGenericArgs {
2007 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
2008 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
2009 }
2010 pub fn separator(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
2011 OptionTerminalColonColon::from_syntax_node(db, self.node.get_children(db)[1])
2012 }
2013 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgs {
2014 GenericArgs::from_syntax_node(db, self.node.get_children(db)[2])
2015 }
2016}
2017#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2018pub struct PathSegmentWithGenericArgsPtr(pub SyntaxStablePtrId);
2019impl PathSegmentWithGenericArgsPtr {}
2020impl TypedStablePtr for PathSegmentWithGenericArgsPtr {
2021 type SyntaxNode = PathSegmentWithGenericArgs;
2022 fn untyped(&self) -> SyntaxStablePtrId {
2023 self.0
2024 }
2025 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentWithGenericArgs {
2026 PathSegmentWithGenericArgs::from_syntax_node(db, self.0.lookup(db))
2027 }
2028}
2029impl From<PathSegmentWithGenericArgsPtr> for SyntaxStablePtrId {
2030 fn from(ptr: PathSegmentWithGenericArgsPtr) -> Self {
2031 ptr.untyped()
2032 }
2033}
2034#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2035pub struct PathSegmentWithGenericArgsGreen(pub GreenId);
2036impl TypedSyntaxNode for PathSegmentWithGenericArgs {
2037 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentWithGenericArgs);
2038 type StablePtr = PathSegmentWithGenericArgsPtr;
2039 type Green = PathSegmentWithGenericArgsGreen;
2040 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2041 PathSegmentWithGenericArgsGreen(
2042 Arc::new(GreenNode {
2043 kind: SyntaxKind::PathSegmentWithGenericArgs,
2044 details: GreenNodeDetails::Node {
2045 children: [
2046 TerminalIdentifier::missing(db).0,
2047 OptionTerminalColonColon::missing(db).0,
2048 GenericArgs::missing(db).0,
2049 ]
2050 .into(),
2051 width: TextWidth::default(),
2052 },
2053 })
2054 .intern(db),
2055 )
2056 }
2057 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2058 let kind = node.kind(db);
2059 assert_eq!(
2060 kind,
2061 SyntaxKind::PathSegmentWithGenericArgs,
2062 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2063 kind,
2064 SyntaxKind::PathSegmentWithGenericArgs
2065 );
2066 Self { node }
2067 }
2068 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2069 let kind = node.kind(db);
2070 if kind == SyntaxKind::PathSegmentWithGenericArgs {
2071 Some(Self::from_syntax_node(db, node))
2072 } else {
2073 None
2074 }
2075 }
2076 fn as_syntax_node(&self) -> SyntaxNode {
2077 self.node
2078 }
2079 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2080 PathSegmentWithGenericArgsPtr(self.node.stable_ptr(db))
2081 }
2082}
2083#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2084pub struct ExprPath {
2085 node: SyntaxNode,
2086}
2087impl ExprPath {
2088 pub const INDEX_DOLLAR: usize = 0;
2089 pub const INDEX_SEGMENTS: usize = 1;
2090 pub fn new_green(
2091 db: &dyn SyntaxGroup,
2092 dollar: OptionTerminalDollarGreen,
2093 segments: ExprPathInnerGreen,
2094 ) -> ExprPathGreen {
2095 let children = [dollar.0, segments.0];
2096 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2097 ExprPathGreen(
2098 Arc::new(GreenNode {
2099 kind: SyntaxKind::ExprPath,
2100 details: GreenNodeDetails::Node { children: children.into(), width },
2101 })
2102 .intern(db),
2103 )
2104 }
2105}
2106impl ExprPath {
2107 pub fn dollar(&self, db: &dyn SyntaxGroup) -> OptionTerminalDollar {
2108 OptionTerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
2109 }
2110 pub fn segments(&self, db: &dyn SyntaxGroup) -> ExprPathInner {
2111 ExprPathInner::from_syntax_node(db, self.node.get_children(db)[1])
2112 }
2113}
2114#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2115pub struct ExprPathPtr(pub SyntaxStablePtrId);
2116impl ExprPathPtr {}
2117impl TypedStablePtr for ExprPathPtr {
2118 type SyntaxNode = ExprPath;
2119 fn untyped(&self) -> SyntaxStablePtrId {
2120 self.0
2121 }
2122 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprPath {
2123 ExprPath::from_syntax_node(db, self.0.lookup(db))
2124 }
2125}
2126impl From<ExprPathPtr> for SyntaxStablePtrId {
2127 fn from(ptr: ExprPathPtr) -> Self {
2128 ptr.untyped()
2129 }
2130}
2131#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2132pub struct ExprPathGreen(pub GreenId);
2133impl TypedSyntaxNode for ExprPath {
2134 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprPath);
2135 type StablePtr = ExprPathPtr;
2136 type Green = ExprPathGreen;
2137 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2138 ExprPathGreen(
2139 Arc::new(GreenNode {
2140 kind: SyntaxKind::ExprPath,
2141 details: GreenNodeDetails::Node {
2142 children: [OptionTerminalDollar::missing(db).0, ExprPathInner::missing(db).0]
2143 .into(),
2144 width: TextWidth::default(),
2145 },
2146 })
2147 .intern(db),
2148 )
2149 }
2150 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2151 let kind = node.kind(db);
2152 assert_eq!(
2153 kind,
2154 SyntaxKind::ExprPath,
2155 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2156 kind,
2157 SyntaxKind::ExprPath
2158 );
2159 Self { node }
2160 }
2161 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2162 let kind = node.kind(db);
2163 if kind == SyntaxKind::ExprPath { Some(Self::from_syntax_node(db, node)) } else { None }
2164 }
2165 fn as_syntax_node(&self) -> SyntaxNode {
2166 self.node
2167 }
2168 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2169 ExprPathPtr(self.node.stable_ptr(db))
2170 }
2171}
2172#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2173pub enum OptionTerminalDollar {
2174 Empty(OptionTerminalDollarEmpty),
2175 TerminalDollar(TerminalDollar),
2176}
2177#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2178pub struct OptionTerminalDollarPtr(pub SyntaxStablePtrId);
2179impl TypedStablePtr for OptionTerminalDollarPtr {
2180 type SyntaxNode = OptionTerminalDollar;
2181 fn untyped(&self) -> SyntaxStablePtrId {
2182 self.0
2183 }
2184 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalDollar {
2185 OptionTerminalDollar::from_syntax_node(db, self.0.lookup(db))
2186 }
2187}
2188impl From<OptionTerminalDollarPtr> for SyntaxStablePtrId {
2189 fn from(ptr: OptionTerminalDollarPtr) -> Self {
2190 ptr.untyped()
2191 }
2192}
2193impl From<OptionTerminalDollarEmptyPtr> for OptionTerminalDollarPtr {
2194 fn from(value: OptionTerminalDollarEmptyPtr) -> Self {
2195 Self(value.0)
2196 }
2197}
2198impl From<TerminalDollarPtr> for OptionTerminalDollarPtr {
2199 fn from(value: TerminalDollarPtr) -> Self {
2200 Self(value.0)
2201 }
2202}
2203impl From<OptionTerminalDollarEmptyGreen> for OptionTerminalDollarGreen {
2204 fn from(value: OptionTerminalDollarEmptyGreen) -> Self {
2205 Self(value.0)
2206 }
2207}
2208impl From<TerminalDollarGreen> for OptionTerminalDollarGreen {
2209 fn from(value: TerminalDollarGreen) -> Self {
2210 Self(value.0)
2211 }
2212}
2213#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2214pub struct OptionTerminalDollarGreen(pub GreenId);
2215impl TypedSyntaxNode for OptionTerminalDollar {
2216 const OPTIONAL_KIND: Option<SyntaxKind> = None;
2217 type StablePtr = OptionTerminalDollarPtr;
2218 type Green = OptionTerminalDollarGreen;
2219 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2220 panic!("No missing variant.");
2221 }
2222 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2223 let kind = node.kind(db);
2224 match kind {
2225 SyntaxKind::OptionTerminalDollarEmpty => {
2226 OptionTerminalDollar::Empty(OptionTerminalDollarEmpty::from_syntax_node(db, node))
2227 }
2228 SyntaxKind::TerminalDollar => {
2229 OptionTerminalDollar::TerminalDollar(TerminalDollar::from_syntax_node(db, node))
2230 }
2231 _ => panic!(
2232 "Unexpected syntax kind {:?} when constructing {}.",
2233 kind, "OptionTerminalDollar"
2234 ),
2235 }
2236 }
2237 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2238 let kind = node.kind(db);
2239 match kind {
2240 SyntaxKind::OptionTerminalDollarEmpty => Some(OptionTerminalDollar::Empty(
2241 OptionTerminalDollarEmpty::from_syntax_node(db, node),
2242 )),
2243 SyntaxKind::TerminalDollar => Some(OptionTerminalDollar::TerminalDollar(
2244 TerminalDollar::from_syntax_node(db, node),
2245 )),
2246 _ => None,
2247 }
2248 }
2249 fn as_syntax_node(&self) -> SyntaxNode {
2250 match self {
2251 OptionTerminalDollar::Empty(x) => x.as_syntax_node(),
2252 OptionTerminalDollar::TerminalDollar(x) => x.as_syntax_node(),
2253 }
2254 }
2255 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2256 OptionTerminalDollarPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
2257 }
2258}
2259impl OptionTerminalDollar {
2260 pub fn is_variant(kind: SyntaxKind) -> bool {
2262 matches!(kind, SyntaxKind::OptionTerminalDollarEmpty | SyntaxKind::TerminalDollar)
2263 }
2264}
2265#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2266pub struct OptionTerminalDollarEmpty {
2267 node: SyntaxNode,
2268}
2269impl OptionTerminalDollarEmpty {
2270 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalDollarEmptyGreen {
2271 let children = [];
2272 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2273 OptionTerminalDollarEmptyGreen(
2274 Arc::new(GreenNode {
2275 kind: SyntaxKind::OptionTerminalDollarEmpty,
2276 details: GreenNodeDetails::Node { children: children.into(), width },
2277 })
2278 .intern(db),
2279 )
2280 }
2281}
2282impl OptionTerminalDollarEmpty {}
2283#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2284pub struct OptionTerminalDollarEmptyPtr(pub SyntaxStablePtrId);
2285impl OptionTerminalDollarEmptyPtr {}
2286impl TypedStablePtr for OptionTerminalDollarEmptyPtr {
2287 type SyntaxNode = OptionTerminalDollarEmpty;
2288 fn untyped(&self) -> SyntaxStablePtrId {
2289 self.0
2290 }
2291 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalDollarEmpty {
2292 OptionTerminalDollarEmpty::from_syntax_node(db, self.0.lookup(db))
2293 }
2294}
2295impl From<OptionTerminalDollarEmptyPtr> for SyntaxStablePtrId {
2296 fn from(ptr: OptionTerminalDollarEmptyPtr) -> Self {
2297 ptr.untyped()
2298 }
2299}
2300#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2301pub struct OptionTerminalDollarEmptyGreen(pub GreenId);
2302impl TypedSyntaxNode for OptionTerminalDollarEmpty {
2303 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalDollarEmpty);
2304 type StablePtr = OptionTerminalDollarEmptyPtr;
2305 type Green = OptionTerminalDollarEmptyGreen;
2306 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2307 OptionTerminalDollarEmptyGreen(
2308 Arc::new(GreenNode {
2309 kind: SyntaxKind::OptionTerminalDollarEmpty,
2310 details: GreenNodeDetails::Node {
2311 children: [].into(),
2312 width: TextWidth::default(),
2313 },
2314 })
2315 .intern(db),
2316 )
2317 }
2318 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2319 let kind = node.kind(db);
2320 assert_eq!(
2321 kind,
2322 SyntaxKind::OptionTerminalDollarEmpty,
2323 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2324 kind,
2325 SyntaxKind::OptionTerminalDollarEmpty
2326 );
2327 Self { node }
2328 }
2329 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2330 let kind = node.kind(db);
2331 if kind == SyntaxKind::OptionTerminalDollarEmpty {
2332 Some(Self::from_syntax_node(db, node))
2333 } else {
2334 None
2335 }
2336 }
2337 fn as_syntax_node(&self) -> SyntaxNode {
2338 self.node
2339 }
2340 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2341 OptionTerminalDollarEmptyPtr(self.node.stable_ptr(db))
2342 }
2343}
2344#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2345pub struct PathSegmentMissing {
2346 node: SyntaxNode,
2347}
2348impl PathSegmentMissing {
2349 pub const INDEX_IDENT: usize = 0;
2350 pub fn new_green(
2351 db: &dyn SyntaxGroup,
2352 ident: TerminalIdentifierGreen,
2353 ) -> PathSegmentMissingGreen {
2354 let children = [ident.0];
2355 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2356 PathSegmentMissingGreen(
2357 Arc::new(GreenNode {
2358 kind: SyntaxKind::PathSegmentMissing,
2359 details: GreenNodeDetails::Node { children: children.into(), width },
2360 })
2361 .intern(db),
2362 )
2363 }
2364}
2365impl PathSegmentMissing {
2366 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
2367 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
2368 }
2369}
2370#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2371pub struct PathSegmentMissingPtr(pub SyntaxStablePtrId);
2372impl PathSegmentMissingPtr {}
2373impl TypedStablePtr for PathSegmentMissingPtr {
2374 type SyntaxNode = PathSegmentMissing;
2375 fn untyped(&self) -> SyntaxStablePtrId {
2376 self.0
2377 }
2378 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentMissing {
2379 PathSegmentMissing::from_syntax_node(db, self.0.lookup(db))
2380 }
2381}
2382impl From<PathSegmentMissingPtr> for SyntaxStablePtrId {
2383 fn from(ptr: PathSegmentMissingPtr) -> Self {
2384 ptr.untyped()
2385 }
2386}
2387#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2388pub struct PathSegmentMissingGreen(pub GreenId);
2389impl TypedSyntaxNode for PathSegmentMissing {
2390 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentMissing);
2391 type StablePtr = PathSegmentMissingPtr;
2392 type Green = PathSegmentMissingGreen;
2393 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2394 PathSegmentMissingGreen(
2395 Arc::new(GreenNode {
2396 kind: SyntaxKind::PathSegmentMissing,
2397 details: GreenNodeDetails::Node {
2398 children: [TerminalIdentifier::missing(db).0].into(),
2399 width: TextWidth::default(),
2400 },
2401 })
2402 .intern(db),
2403 )
2404 }
2405 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2406 let kind = node.kind(db);
2407 assert_eq!(
2408 kind,
2409 SyntaxKind::PathSegmentMissing,
2410 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2411 kind,
2412 SyntaxKind::PathSegmentMissing
2413 );
2414 Self { node }
2415 }
2416 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2417 let kind = node.kind(db);
2418 if kind == SyntaxKind::PathSegmentMissing {
2419 Some(Self::from_syntax_node(db, node))
2420 } else {
2421 None
2422 }
2423 }
2424 fn as_syntax_node(&self) -> SyntaxNode {
2425 self.node
2426 }
2427 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2428 PathSegmentMissingPtr(self.node.stable_ptr(db))
2429 }
2430}
2431#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2432pub struct ExprPathInner(ElementList<PathSegment, 2>);
2433impl Deref for ExprPathInner {
2434 type Target = ElementList<PathSegment, 2>;
2435 fn deref(&self) -> &Self::Target {
2436 &self.0
2437 }
2438}
2439impl ExprPathInner {
2440 pub fn new_green(
2441 db: &dyn SyntaxGroup,
2442 children: &[ExprPathInnerElementOrSeparatorGreen],
2443 ) -> ExprPathInnerGreen {
2444 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
2445 ExprPathInnerGreen(
2446 Arc::new(GreenNode {
2447 kind: SyntaxKind::ExprPathInner,
2448 details: GreenNodeDetails::Node {
2449 children: children.iter().map(|x| x.id()).collect(),
2450 width,
2451 },
2452 })
2453 .intern(db),
2454 )
2455 }
2456}
2457#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2458pub struct ExprPathInnerPtr(pub SyntaxStablePtrId);
2459impl TypedStablePtr for ExprPathInnerPtr {
2460 type SyntaxNode = ExprPathInner;
2461 fn untyped(&self) -> SyntaxStablePtrId {
2462 self.0
2463 }
2464 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprPathInner {
2465 ExprPathInner::from_syntax_node(db, self.0.lookup(db))
2466 }
2467}
2468impl From<ExprPathInnerPtr> for SyntaxStablePtrId {
2469 fn from(ptr: ExprPathInnerPtr) -> Self {
2470 ptr.untyped()
2471 }
2472}
2473#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2474pub enum ExprPathInnerElementOrSeparatorGreen {
2475 Separator(TerminalColonColonGreen),
2476 Element(PathSegmentGreen),
2477}
2478impl From<TerminalColonColonGreen> for ExprPathInnerElementOrSeparatorGreen {
2479 fn from(value: TerminalColonColonGreen) -> Self {
2480 ExprPathInnerElementOrSeparatorGreen::Separator(value)
2481 }
2482}
2483impl From<PathSegmentGreen> for ExprPathInnerElementOrSeparatorGreen {
2484 fn from(value: PathSegmentGreen) -> Self {
2485 ExprPathInnerElementOrSeparatorGreen::Element(value)
2486 }
2487}
2488impl ExprPathInnerElementOrSeparatorGreen {
2489 fn id(&self) -> GreenId {
2490 match self {
2491 ExprPathInnerElementOrSeparatorGreen::Separator(green) => green.0,
2492 ExprPathInnerElementOrSeparatorGreen::Element(green) => green.0,
2493 }
2494 }
2495}
2496#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2497pub struct ExprPathInnerGreen(pub GreenId);
2498impl TypedSyntaxNode for ExprPathInner {
2499 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprPathInner);
2500 type StablePtr = ExprPathInnerPtr;
2501 type Green = ExprPathInnerGreen;
2502 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2503 ExprPathInnerGreen(
2504 Arc::new(GreenNode {
2505 kind: SyntaxKind::ExprPathInner,
2506 details: GreenNodeDetails::Node {
2507 children: [].into(),
2508 width: TextWidth::default(),
2509 },
2510 })
2511 .intern(db),
2512 )
2513 }
2514 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2515 Self(ElementList::new(node))
2516 }
2517 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2518 if node.kind(db) == SyntaxKind::ExprPathInner {
2519 Some(Self(ElementList::new(node)))
2520 } else {
2521 None
2522 }
2523 }
2524 fn as_syntax_node(&self) -> SyntaxNode {
2525 self.node
2526 }
2527 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2528 ExprPathInnerPtr(self.node.stable_ptr(db))
2529 }
2530}
2531#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2532pub struct ExprParenthesized {
2533 node: SyntaxNode,
2534}
2535impl ExprParenthesized {
2536 pub const INDEX_LPAREN: usize = 0;
2537 pub const INDEX_EXPR: usize = 1;
2538 pub const INDEX_RPAREN: usize = 2;
2539 pub fn new_green(
2540 db: &dyn SyntaxGroup,
2541 lparen: TerminalLParenGreen,
2542 expr: ExprGreen,
2543 rparen: TerminalRParenGreen,
2544 ) -> ExprParenthesizedGreen {
2545 let children = [lparen.0, expr.0, rparen.0];
2546 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2547 ExprParenthesizedGreen(
2548 Arc::new(GreenNode {
2549 kind: SyntaxKind::ExprParenthesized,
2550 details: GreenNodeDetails::Node { children: children.into(), width },
2551 })
2552 .intern(db),
2553 )
2554 }
2555}
2556impl ExprParenthesized {
2557 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
2558 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
2559 }
2560 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2561 Expr::from_syntax_node(db, self.node.get_children(db)[1])
2562 }
2563 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
2564 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
2565 }
2566}
2567#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2568pub struct ExprParenthesizedPtr(pub SyntaxStablePtrId);
2569impl ExprParenthesizedPtr {}
2570impl TypedStablePtr for ExprParenthesizedPtr {
2571 type SyntaxNode = ExprParenthesized;
2572 fn untyped(&self) -> SyntaxStablePtrId {
2573 self.0
2574 }
2575 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprParenthesized {
2576 ExprParenthesized::from_syntax_node(db, self.0.lookup(db))
2577 }
2578}
2579impl From<ExprParenthesizedPtr> for SyntaxStablePtrId {
2580 fn from(ptr: ExprParenthesizedPtr) -> Self {
2581 ptr.untyped()
2582 }
2583}
2584#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2585pub struct ExprParenthesizedGreen(pub GreenId);
2586impl TypedSyntaxNode for ExprParenthesized {
2587 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprParenthesized);
2588 type StablePtr = ExprParenthesizedPtr;
2589 type Green = ExprParenthesizedGreen;
2590 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2591 ExprParenthesizedGreen(
2592 Arc::new(GreenNode {
2593 kind: SyntaxKind::ExprParenthesized,
2594 details: GreenNodeDetails::Node {
2595 children: [
2596 TerminalLParen::missing(db).0,
2597 Expr::missing(db).0,
2598 TerminalRParen::missing(db).0,
2599 ]
2600 .into(),
2601 width: TextWidth::default(),
2602 },
2603 })
2604 .intern(db),
2605 )
2606 }
2607 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2608 let kind = node.kind(db);
2609 assert_eq!(
2610 kind,
2611 SyntaxKind::ExprParenthesized,
2612 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2613 kind,
2614 SyntaxKind::ExprParenthesized
2615 );
2616 Self { node }
2617 }
2618 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2619 let kind = node.kind(db);
2620 if kind == SyntaxKind::ExprParenthesized {
2621 Some(Self::from_syntax_node(db, node))
2622 } else {
2623 None
2624 }
2625 }
2626 fn as_syntax_node(&self) -> SyntaxNode {
2627 self.node
2628 }
2629 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2630 ExprParenthesizedPtr(self.node.stable_ptr(db))
2631 }
2632}
2633#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2634pub struct ExprUnary {
2635 node: SyntaxNode,
2636}
2637impl ExprUnary {
2638 pub const INDEX_OP: usize = 0;
2639 pub const INDEX_EXPR: usize = 1;
2640 pub fn new_green(
2641 db: &dyn SyntaxGroup,
2642 op: UnaryOperatorGreen,
2643 expr: ExprGreen,
2644 ) -> ExprUnaryGreen {
2645 let children = [op.0, expr.0];
2646 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2647 ExprUnaryGreen(
2648 Arc::new(GreenNode {
2649 kind: SyntaxKind::ExprUnary,
2650 details: GreenNodeDetails::Node { children: children.into(), width },
2651 })
2652 .intern(db),
2653 )
2654 }
2655}
2656impl ExprUnary {
2657 pub fn op(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2658 UnaryOperator::from_syntax_node(db, self.node.get_children(db)[0])
2659 }
2660 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2661 Expr::from_syntax_node(db, self.node.get_children(db)[1])
2662 }
2663}
2664#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2665pub struct ExprUnaryPtr(pub SyntaxStablePtrId);
2666impl ExprUnaryPtr {}
2667impl TypedStablePtr for ExprUnaryPtr {
2668 type SyntaxNode = ExprUnary;
2669 fn untyped(&self) -> SyntaxStablePtrId {
2670 self.0
2671 }
2672 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprUnary {
2673 ExprUnary::from_syntax_node(db, self.0.lookup(db))
2674 }
2675}
2676impl From<ExprUnaryPtr> for SyntaxStablePtrId {
2677 fn from(ptr: ExprUnaryPtr) -> Self {
2678 ptr.untyped()
2679 }
2680}
2681#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2682pub struct ExprUnaryGreen(pub GreenId);
2683impl TypedSyntaxNode for ExprUnary {
2684 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprUnary);
2685 type StablePtr = ExprUnaryPtr;
2686 type Green = ExprUnaryGreen;
2687 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2688 ExprUnaryGreen(
2689 Arc::new(GreenNode {
2690 kind: SyntaxKind::ExprUnary,
2691 details: GreenNodeDetails::Node {
2692 children: [UnaryOperator::missing(db).0, Expr::missing(db).0].into(),
2693 width: TextWidth::default(),
2694 },
2695 })
2696 .intern(db),
2697 )
2698 }
2699 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2700 let kind = node.kind(db);
2701 assert_eq!(
2702 kind,
2703 SyntaxKind::ExprUnary,
2704 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2705 kind,
2706 SyntaxKind::ExprUnary
2707 );
2708 Self { node }
2709 }
2710 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2711 let kind = node.kind(db);
2712 if kind == SyntaxKind::ExprUnary { Some(Self::from_syntax_node(db, node)) } else { None }
2713 }
2714 fn as_syntax_node(&self) -> SyntaxNode {
2715 self.node
2716 }
2717 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2718 ExprUnaryPtr(self.node.stable_ptr(db))
2719 }
2720}
2721#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2722pub enum UnaryOperator {
2723 Not(TerminalNot),
2724 BitNot(TerminalBitNot),
2725 Minus(TerminalMinus),
2726 At(TerminalAt),
2727 Desnap(TerminalMul),
2728}
2729#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2730pub struct UnaryOperatorPtr(pub SyntaxStablePtrId);
2731impl TypedStablePtr for UnaryOperatorPtr {
2732 type SyntaxNode = UnaryOperator;
2733 fn untyped(&self) -> SyntaxStablePtrId {
2734 self.0
2735 }
2736 fn lookup(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2737 UnaryOperator::from_syntax_node(db, self.0.lookup(db))
2738 }
2739}
2740impl From<UnaryOperatorPtr> for SyntaxStablePtrId {
2741 fn from(ptr: UnaryOperatorPtr) -> Self {
2742 ptr.untyped()
2743 }
2744}
2745impl From<TerminalNotPtr> for UnaryOperatorPtr {
2746 fn from(value: TerminalNotPtr) -> Self {
2747 Self(value.0)
2748 }
2749}
2750impl From<TerminalBitNotPtr> for UnaryOperatorPtr {
2751 fn from(value: TerminalBitNotPtr) -> Self {
2752 Self(value.0)
2753 }
2754}
2755impl From<TerminalMinusPtr> for UnaryOperatorPtr {
2756 fn from(value: TerminalMinusPtr) -> Self {
2757 Self(value.0)
2758 }
2759}
2760impl From<TerminalAtPtr> for UnaryOperatorPtr {
2761 fn from(value: TerminalAtPtr) -> Self {
2762 Self(value.0)
2763 }
2764}
2765impl From<TerminalMulPtr> for UnaryOperatorPtr {
2766 fn from(value: TerminalMulPtr) -> Self {
2767 Self(value.0)
2768 }
2769}
2770impl From<TerminalNotGreen> for UnaryOperatorGreen {
2771 fn from(value: TerminalNotGreen) -> Self {
2772 Self(value.0)
2773 }
2774}
2775impl From<TerminalBitNotGreen> for UnaryOperatorGreen {
2776 fn from(value: TerminalBitNotGreen) -> Self {
2777 Self(value.0)
2778 }
2779}
2780impl From<TerminalMinusGreen> for UnaryOperatorGreen {
2781 fn from(value: TerminalMinusGreen) -> Self {
2782 Self(value.0)
2783 }
2784}
2785impl From<TerminalAtGreen> for UnaryOperatorGreen {
2786 fn from(value: TerminalAtGreen) -> Self {
2787 Self(value.0)
2788 }
2789}
2790impl From<TerminalMulGreen> for UnaryOperatorGreen {
2791 fn from(value: TerminalMulGreen) -> Self {
2792 Self(value.0)
2793 }
2794}
2795#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2796pub struct UnaryOperatorGreen(pub GreenId);
2797impl TypedSyntaxNode for UnaryOperator {
2798 const OPTIONAL_KIND: Option<SyntaxKind> = None;
2799 type StablePtr = UnaryOperatorPtr;
2800 type Green = UnaryOperatorGreen;
2801 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2802 panic!("No missing variant.");
2803 }
2804 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2805 let kind = node.kind(db);
2806 match kind {
2807 SyntaxKind::TerminalNot => UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
2808 SyntaxKind::TerminalBitNot => {
2809 UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node))
2810 }
2811 SyntaxKind::TerminalMinus => {
2812 UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
2813 }
2814 SyntaxKind::TerminalAt => UnaryOperator::At(TerminalAt::from_syntax_node(db, node)),
2815 SyntaxKind::TerminalMul => {
2816 UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node))
2817 }
2818 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UnaryOperator"),
2819 }
2820 }
2821 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2822 let kind = node.kind(db);
2823 match kind {
2824 SyntaxKind::TerminalNot => {
2825 Some(UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
2826 }
2827 SyntaxKind::TerminalBitNot => {
2828 Some(UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node)))
2829 }
2830 SyntaxKind::TerminalMinus => {
2831 Some(UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
2832 }
2833 SyntaxKind::TerminalAt => {
2834 Some(UnaryOperator::At(TerminalAt::from_syntax_node(db, node)))
2835 }
2836 SyntaxKind::TerminalMul => {
2837 Some(UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node)))
2838 }
2839 _ => None,
2840 }
2841 }
2842 fn as_syntax_node(&self) -> SyntaxNode {
2843 match self {
2844 UnaryOperator::Not(x) => x.as_syntax_node(),
2845 UnaryOperator::BitNot(x) => x.as_syntax_node(),
2846 UnaryOperator::Minus(x) => x.as_syntax_node(),
2847 UnaryOperator::At(x) => x.as_syntax_node(),
2848 UnaryOperator::Desnap(x) => x.as_syntax_node(),
2849 }
2850 }
2851 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2852 UnaryOperatorPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
2853 }
2854}
2855impl UnaryOperator {
2856 pub fn is_variant(kind: SyntaxKind) -> bool {
2858 matches!(
2859 kind,
2860 SyntaxKind::TerminalNot
2861 | SyntaxKind::TerminalBitNot
2862 | SyntaxKind::TerminalMinus
2863 | SyntaxKind::TerminalAt
2864 | SyntaxKind::TerminalMul
2865 )
2866 }
2867}
2868#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2869pub struct ExprBinary {
2870 node: SyntaxNode,
2871}
2872impl ExprBinary {
2873 pub const INDEX_LHS: usize = 0;
2874 pub const INDEX_OP: usize = 1;
2875 pub const INDEX_RHS: usize = 2;
2876 pub fn new_green(
2877 db: &dyn SyntaxGroup,
2878 lhs: ExprGreen,
2879 op: BinaryOperatorGreen,
2880 rhs: ExprGreen,
2881 ) -> ExprBinaryGreen {
2882 let children = [lhs.0, op.0, rhs.0];
2883 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
2884 ExprBinaryGreen(
2885 Arc::new(GreenNode {
2886 kind: SyntaxKind::ExprBinary,
2887 details: GreenNodeDetails::Node { children: children.into(), width },
2888 })
2889 .intern(db),
2890 )
2891 }
2892}
2893impl ExprBinary {
2894 pub fn lhs(&self, db: &dyn SyntaxGroup) -> Expr {
2895 Expr::from_syntax_node(db, self.node.get_children(db)[0])
2896 }
2897 pub fn op(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
2898 BinaryOperator::from_syntax_node(db, self.node.get_children(db)[1])
2899 }
2900 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
2901 Expr::from_syntax_node(db, self.node.get_children(db)[2])
2902 }
2903}
2904#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2905pub struct ExprBinaryPtr(pub SyntaxStablePtrId);
2906impl ExprBinaryPtr {}
2907impl TypedStablePtr for ExprBinaryPtr {
2908 type SyntaxNode = ExprBinary;
2909 fn untyped(&self) -> SyntaxStablePtrId {
2910 self.0
2911 }
2912 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBinary {
2913 ExprBinary::from_syntax_node(db, self.0.lookup(db))
2914 }
2915}
2916impl From<ExprBinaryPtr> for SyntaxStablePtrId {
2917 fn from(ptr: ExprBinaryPtr) -> Self {
2918 ptr.untyped()
2919 }
2920}
2921#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2922pub struct ExprBinaryGreen(pub GreenId);
2923impl TypedSyntaxNode for ExprBinary {
2924 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBinary);
2925 type StablePtr = ExprBinaryPtr;
2926 type Green = ExprBinaryGreen;
2927 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2928 ExprBinaryGreen(
2929 Arc::new(GreenNode {
2930 kind: SyntaxKind::ExprBinary,
2931 details: GreenNodeDetails::Node {
2932 children: [
2933 Expr::missing(db).0,
2934 BinaryOperator::missing(db).0,
2935 Expr::missing(db).0,
2936 ]
2937 .into(),
2938 width: TextWidth::default(),
2939 },
2940 })
2941 .intern(db),
2942 )
2943 }
2944 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2945 let kind = node.kind(db);
2946 assert_eq!(
2947 kind,
2948 SyntaxKind::ExprBinary,
2949 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2950 kind,
2951 SyntaxKind::ExprBinary
2952 );
2953 Self { node }
2954 }
2955 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2956 let kind = node.kind(db);
2957 if kind == SyntaxKind::ExprBinary { Some(Self::from_syntax_node(db, node)) } else { None }
2958 }
2959 fn as_syntax_node(&self) -> SyntaxNode {
2960 self.node
2961 }
2962 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
2963 ExprBinaryPtr(self.node.stable_ptr(db))
2964 }
2965}
2966#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2967pub enum BinaryOperator {
2968 Dot(TerminalDot),
2969 Not(TerminalNot),
2970 Mul(TerminalMul),
2971 MulEq(TerminalMulEq),
2972 Div(TerminalDiv),
2973 DivEq(TerminalDivEq),
2974 Mod(TerminalMod),
2975 ModEq(TerminalModEq),
2976 Plus(TerminalPlus),
2977 PlusEq(TerminalPlusEq),
2978 Minus(TerminalMinus),
2979 MinusEq(TerminalMinusEq),
2980 EqEq(TerminalEqEq),
2981 Neq(TerminalNeq),
2982 Eq(TerminalEq),
2983 And(TerminalAnd),
2984 AndAnd(TerminalAndAnd),
2985 Or(TerminalOr),
2986 OrOr(TerminalOrOr),
2987 Xor(TerminalXor),
2988 LE(TerminalLE),
2989 GE(TerminalGE),
2990 LT(TerminalLT),
2991 GT(TerminalGT),
2992 DotDot(TerminalDotDot),
2993 DotDotEq(TerminalDotDotEq),
2994}
2995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2996pub struct BinaryOperatorPtr(pub SyntaxStablePtrId);
2997impl TypedStablePtr for BinaryOperatorPtr {
2998 type SyntaxNode = BinaryOperator;
2999 fn untyped(&self) -> SyntaxStablePtrId {
3000 self.0
3001 }
3002 fn lookup(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
3003 BinaryOperator::from_syntax_node(db, self.0.lookup(db))
3004 }
3005}
3006impl From<BinaryOperatorPtr> for SyntaxStablePtrId {
3007 fn from(ptr: BinaryOperatorPtr) -> Self {
3008 ptr.untyped()
3009 }
3010}
3011impl From<TerminalDotPtr> for BinaryOperatorPtr {
3012 fn from(value: TerminalDotPtr) -> Self {
3013 Self(value.0)
3014 }
3015}
3016impl From<TerminalNotPtr> for BinaryOperatorPtr {
3017 fn from(value: TerminalNotPtr) -> Self {
3018 Self(value.0)
3019 }
3020}
3021impl From<TerminalMulPtr> for BinaryOperatorPtr {
3022 fn from(value: TerminalMulPtr) -> Self {
3023 Self(value.0)
3024 }
3025}
3026impl From<TerminalMulEqPtr> for BinaryOperatorPtr {
3027 fn from(value: TerminalMulEqPtr) -> Self {
3028 Self(value.0)
3029 }
3030}
3031impl From<TerminalDivPtr> for BinaryOperatorPtr {
3032 fn from(value: TerminalDivPtr) -> Self {
3033 Self(value.0)
3034 }
3035}
3036impl From<TerminalDivEqPtr> for BinaryOperatorPtr {
3037 fn from(value: TerminalDivEqPtr) -> Self {
3038 Self(value.0)
3039 }
3040}
3041impl From<TerminalModPtr> for BinaryOperatorPtr {
3042 fn from(value: TerminalModPtr) -> Self {
3043 Self(value.0)
3044 }
3045}
3046impl From<TerminalModEqPtr> for BinaryOperatorPtr {
3047 fn from(value: TerminalModEqPtr) -> Self {
3048 Self(value.0)
3049 }
3050}
3051impl From<TerminalPlusPtr> for BinaryOperatorPtr {
3052 fn from(value: TerminalPlusPtr) -> Self {
3053 Self(value.0)
3054 }
3055}
3056impl From<TerminalPlusEqPtr> for BinaryOperatorPtr {
3057 fn from(value: TerminalPlusEqPtr) -> Self {
3058 Self(value.0)
3059 }
3060}
3061impl From<TerminalMinusPtr> for BinaryOperatorPtr {
3062 fn from(value: TerminalMinusPtr) -> Self {
3063 Self(value.0)
3064 }
3065}
3066impl From<TerminalMinusEqPtr> for BinaryOperatorPtr {
3067 fn from(value: TerminalMinusEqPtr) -> Self {
3068 Self(value.0)
3069 }
3070}
3071impl From<TerminalEqEqPtr> for BinaryOperatorPtr {
3072 fn from(value: TerminalEqEqPtr) -> Self {
3073 Self(value.0)
3074 }
3075}
3076impl From<TerminalNeqPtr> for BinaryOperatorPtr {
3077 fn from(value: TerminalNeqPtr) -> Self {
3078 Self(value.0)
3079 }
3080}
3081impl From<TerminalEqPtr> for BinaryOperatorPtr {
3082 fn from(value: TerminalEqPtr) -> Self {
3083 Self(value.0)
3084 }
3085}
3086impl From<TerminalAndPtr> for BinaryOperatorPtr {
3087 fn from(value: TerminalAndPtr) -> Self {
3088 Self(value.0)
3089 }
3090}
3091impl From<TerminalAndAndPtr> for BinaryOperatorPtr {
3092 fn from(value: TerminalAndAndPtr) -> Self {
3093 Self(value.0)
3094 }
3095}
3096impl From<TerminalOrPtr> for BinaryOperatorPtr {
3097 fn from(value: TerminalOrPtr) -> Self {
3098 Self(value.0)
3099 }
3100}
3101impl From<TerminalOrOrPtr> for BinaryOperatorPtr {
3102 fn from(value: TerminalOrOrPtr) -> Self {
3103 Self(value.0)
3104 }
3105}
3106impl From<TerminalXorPtr> for BinaryOperatorPtr {
3107 fn from(value: TerminalXorPtr) -> Self {
3108 Self(value.0)
3109 }
3110}
3111impl From<TerminalLEPtr> for BinaryOperatorPtr {
3112 fn from(value: TerminalLEPtr) -> Self {
3113 Self(value.0)
3114 }
3115}
3116impl From<TerminalGEPtr> for BinaryOperatorPtr {
3117 fn from(value: TerminalGEPtr) -> Self {
3118 Self(value.0)
3119 }
3120}
3121impl From<TerminalLTPtr> for BinaryOperatorPtr {
3122 fn from(value: TerminalLTPtr) -> Self {
3123 Self(value.0)
3124 }
3125}
3126impl From<TerminalGTPtr> for BinaryOperatorPtr {
3127 fn from(value: TerminalGTPtr) -> Self {
3128 Self(value.0)
3129 }
3130}
3131impl From<TerminalDotDotPtr> for BinaryOperatorPtr {
3132 fn from(value: TerminalDotDotPtr) -> Self {
3133 Self(value.0)
3134 }
3135}
3136impl From<TerminalDotDotEqPtr> for BinaryOperatorPtr {
3137 fn from(value: TerminalDotDotEqPtr) -> Self {
3138 Self(value.0)
3139 }
3140}
3141impl From<TerminalDotGreen> for BinaryOperatorGreen {
3142 fn from(value: TerminalDotGreen) -> Self {
3143 Self(value.0)
3144 }
3145}
3146impl From<TerminalNotGreen> for BinaryOperatorGreen {
3147 fn from(value: TerminalNotGreen) -> Self {
3148 Self(value.0)
3149 }
3150}
3151impl From<TerminalMulGreen> for BinaryOperatorGreen {
3152 fn from(value: TerminalMulGreen) -> Self {
3153 Self(value.0)
3154 }
3155}
3156impl From<TerminalMulEqGreen> for BinaryOperatorGreen {
3157 fn from(value: TerminalMulEqGreen) -> Self {
3158 Self(value.0)
3159 }
3160}
3161impl From<TerminalDivGreen> for BinaryOperatorGreen {
3162 fn from(value: TerminalDivGreen) -> Self {
3163 Self(value.0)
3164 }
3165}
3166impl From<TerminalDivEqGreen> for BinaryOperatorGreen {
3167 fn from(value: TerminalDivEqGreen) -> Self {
3168 Self(value.0)
3169 }
3170}
3171impl From<TerminalModGreen> for BinaryOperatorGreen {
3172 fn from(value: TerminalModGreen) -> Self {
3173 Self(value.0)
3174 }
3175}
3176impl From<TerminalModEqGreen> for BinaryOperatorGreen {
3177 fn from(value: TerminalModEqGreen) -> Self {
3178 Self(value.0)
3179 }
3180}
3181impl From<TerminalPlusGreen> for BinaryOperatorGreen {
3182 fn from(value: TerminalPlusGreen) -> Self {
3183 Self(value.0)
3184 }
3185}
3186impl From<TerminalPlusEqGreen> for BinaryOperatorGreen {
3187 fn from(value: TerminalPlusEqGreen) -> Self {
3188 Self(value.0)
3189 }
3190}
3191impl From<TerminalMinusGreen> for BinaryOperatorGreen {
3192 fn from(value: TerminalMinusGreen) -> Self {
3193 Self(value.0)
3194 }
3195}
3196impl From<TerminalMinusEqGreen> for BinaryOperatorGreen {
3197 fn from(value: TerminalMinusEqGreen) -> Self {
3198 Self(value.0)
3199 }
3200}
3201impl From<TerminalEqEqGreen> for BinaryOperatorGreen {
3202 fn from(value: TerminalEqEqGreen) -> Self {
3203 Self(value.0)
3204 }
3205}
3206impl From<TerminalNeqGreen> for BinaryOperatorGreen {
3207 fn from(value: TerminalNeqGreen) -> Self {
3208 Self(value.0)
3209 }
3210}
3211impl From<TerminalEqGreen> for BinaryOperatorGreen {
3212 fn from(value: TerminalEqGreen) -> Self {
3213 Self(value.0)
3214 }
3215}
3216impl From<TerminalAndGreen> for BinaryOperatorGreen {
3217 fn from(value: TerminalAndGreen) -> Self {
3218 Self(value.0)
3219 }
3220}
3221impl From<TerminalAndAndGreen> for BinaryOperatorGreen {
3222 fn from(value: TerminalAndAndGreen) -> Self {
3223 Self(value.0)
3224 }
3225}
3226impl From<TerminalOrGreen> for BinaryOperatorGreen {
3227 fn from(value: TerminalOrGreen) -> Self {
3228 Self(value.0)
3229 }
3230}
3231impl From<TerminalOrOrGreen> for BinaryOperatorGreen {
3232 fn from(value: TerminalOrOrGreen) -> Self {
3233 Self(value.0)
3234 }
3235}
3236impl From<TerminalXorGreen> for BinaryOperatorGreen {
3237 fn from(value: TerminalXorGreen) -> Self {
3238 Self(value.0)
3239 }
3240}
3241impl From<TerminalLEGreen> for BinaryOperatorGreen {
3242 fn from(value: TerminalLEGreen) -> Self {
3243 Self(value.0)
3244 }
3245}
3246impl From<TerminalGEGreen> for BinaryOperatorGreen {
3247 fn from(value: TerminalGEGreen) -> Self {
3248 Self(value.0)
3249 }
3250}
3251impl From<TerminalLTGreen> for BinaryOperatorGreen {
3252 fn from(value: TerminalLTGreen) -> Self {
3253 Self(value.0)
3254 }
3255}
3256impl From<TerminalGTGreen> for BinaryOperatorGreen {
3257 fn from(value: TerminalGTGreen) -> Self {
3258 Self(value.0)
3259 }
3260}
3261impl From<TerminalDotDotGreen> for BinaryOperatorGreen {
3262 fn from(value: TerminalDotDotGreen) -> Self {
3263 Self(value.0)
3264 }
3265}
3266impl From<TerminalDotDotEqGreen> for BinaryOperatorGreen {
3267 fn from(value: TerminalDotDotEqGreen) -> Self {
3268 Self(value.0)
3269 }
3270}
3271#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3272pub struct BinaryOperatorGreen(pub GreenId);
3273impl TypedSyntaxNode for BinaryOperator {
3274 const OPTIONAL_KIND: Option<SyntaxKind> = None;
3275 type StablePtr = BinaryOperatorPtr;
3276 type Green = BinaryOperatorGreen;
3277 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3278 panic!("No missing variant.");
3279 }
3280 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3281 let kind = node.kind(db);
3282 match kind {
3283 SyntaxKind::TerminalDot => BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)),
3284 SyntaxKind::TerminalNot => BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
3285 SyntaxKind::TerminalMul => BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)),
3286 SyntaxKind::TerminalMulEq => {
3287 BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node))
3288 }
3289 SyntaxKind::TerminalDiv => BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)),
3290 SyntaxKind::TerminalDivEq => {
3291 BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node))
3292 }
3293 SyntaxKind::TerminalMod => BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)),
3294 SyntaxKind::TerminalModEq => {
3295 BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node))
3296 }
3297 SyntaxKind::TerminalPlus => {
3298 BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node))
3299 }
3300 SyntaxKind::TerminalPlusEq => {
3301 BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node))
3302 }
3303 SyntaxKind::TerminalMinus => {
3304 BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
3305 }
3306 SyntaxKind::TerminalMinusEq => {
3307 BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node))
3308 }
3309 SyntaxKind::TerminalEqEq => {
3310 BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node))
3311 }
3312 SyntaxKind::TerminalNeq => BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)),
3313 SyntaxKind::TerminalEq => BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)),
3314 SyntaxKind::TerminalAnd => BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)),
3315 SyntaxKind::TerminalAndAnd => {
3316 BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node))
3317 }
3318 SyntaxKind::TerminalOr => BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)),
3319 SyntaxKind::TerminalOrOr => {
3320 BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node))
3321 }
3322 SyntaxKind::TerminalXor => BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)),
3323 SyntaxKind::TerminalLE => BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)),
3324 SyntaxKind::TerminalGE => BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)),
3325 SyntaxKind::TerminalLT => BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)),
3326 SyntaxKind::TerminalGT => BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)),
3327 SyntaxKind::TerminalDotDot => {
3328 BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node))
3329 }
3330 SyntaxKind::TerminalDotDotEq => {
3331 BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
3332 }
3333 _ => {
3334 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BinaryOperator")
3335 }
3336 }
3337 }
3338 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3339 let kind = node.kind(db);
3340 match kind {
3341 SyntaxKind::TerminalDot => {
3342 Some(BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)))
3343 }
3344 SyntaxKind::TerminalNot => {
3345 Some(BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
3346 }
3347 SyntaxKind::TerminalMul => {
3348 Some(BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)))
3349 }
3350 SyntaxKind::TerminalMulEq => {
3351 Some(BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node)))
3352 }
3353 SyntaxKind::TerminalDiv => {
3354 Some(BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)))
3355 }
3356 SyntaxKind::TerminalDivEq => {
3357 Some(BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node)))
3358 }
3359 SyntaxKind::TerminalMod => {
3360 Some(BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)))
3361 }
3362 SyntaxKind::TerminalModEq => {
3363 Some(BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node)))
3364 }
3365 SyntaxKind::TerminalPlus => {
3366 Some(BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node)))
3367 }
3368 SyntaxKind::TerminalPlusEq => {
3369 Some(BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node)))
3370 }
3371 SyntaxKind::TerminalMinus => {
3372 Some(BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
3373 }
3374 SyntaxKind::TerminalMinusEq => {
3375 Some(BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node)))
3376 }
3377 SyntaxKind::TerminalEqEq => {
3378 Some(BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node)))
3379 }
3380 SyntaxKind::TerminalNeq => {
3381 Some(BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)))
3382 }
3383 SyntaxKind::TerminalEq => {
3384 Some(BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)))
3385 }
3386 SyntaxKind::TerminalAnd => {
3387 Some(BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)))
3388 }
3389 SyntaxKind::TerminalAndAnd => {
3390 Some(BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node)))
3391 }
3392 SyntaxKind::TerminalOr => {
3393 Some(BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)))
3394 }
3395 SyntaxKind::TerminalOrOr => {
3396 Some(BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node)))
3397 }
3398 SyntaxKind::TerminalXor => {
3399 Some(BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)))
3400 }
3401 SyntaxKind::TerminalLE => {
3402 Some(BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)))
3403 }
3404 SyntaxKind::TerminalGE => {
3405 Some(BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)))
3406 }
3407 SyntaxKind::TerminalLT => {
3408 Some(BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)))
3409 }
3410 SyntaxKind::TerminalGT => {
3411 Some(BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)))
3412 }
3413 SyntaxKind::TerminalDotDot => {
3414 Some(BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node)))
3415 }
3416 SyntaxKind::TerminalDotDotEq => {
3417 Some(BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
3418 }
3419 _ => None,
3420 }
3421 }
3422 fn as_syntax_node(&self) -> SyntaxNode {
3423 match self {
3424 BinaryOperator::Dot(x) => x.as_syntax_node(),
3425 BinaryOperator::Not(x) => x.as_syntax_node(),
3426 BinaryOperator::Mul(x) => x.as_syntax_node(),
3427 BinaryOperator::MulEq(x) => x.as_syntax_node(),
3428 BinaryOperator::Div(x) => x.as_syntax_node(),
3429 BinaryOperator::DivEq(x) => x.as_syntax_node(),
3430 BinaryOperator::Mod(x) => x.as_syntax_node(),
3431 BinaryOperator::ModEq(x) => x.as_syntax_node(),
3432 BinaryOperator::Plus(x) => x.as_syntax_node(),
3433 BinaryOperator::PlusEq(x) => x.as_syntax_node(),
3434 BinaryOperator::Minus(x) => x.as_syntax_node(),
3435 BinaryOperator::MinusEq(x) => x.as_syntax_node(),
3436 BinaryOperator::EqEq(x) => x.as_syntax_node(),
3437 BinaryOperator::Neq(x) => x.as_syntax_node(),
3438 BinaryOperator::Eq(x) => x.as_syntax_node(),
3439 BinaryOperator::And(x) => x.as_syntax_node(),
3440 BinaryOperator::AndAnd(x) => x.as_syntax_node(),
3441 BinaryOperator::Or(x) => x.as_syntax_node(),
3442 BinaryOperator::OrOr(x) => x.as_syntax_node(),
3443 BinaryOperator::Xor(x) => x.as_syntax_node(),
3444 BinaryOperator::LE(x) => x.as_syntax_node(),
3445 BinaryOperator::GE(x) => x.as_syntax_node(),
3446 BinaryOperator::LT(x) => x.as_syntax_node(),
3447 BinaryOperator::GT(x) => x.as_syntax_node(),
3448 BinaryOperator::DotDot(x) => x.as_syntax_node(),
3449 BinaryOperator::DotDotEq(x) => x.as_syntax_node(),
3450 }
3451 }
3452 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3453 BinaryOperatorPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
3454 }
3455}
3456impl BinaryOperator {
3457 pub fn is_variant(kind: SyntaxKind) -> bool {
3459 matches!(
3460 kind,
3461 SyntaxKind::TerminalDot
3462 | SyntaxKind::TerminalNot
3463 | SyntaxKind::TerminalMul
3464 | SyntaxKind::TerminalMulEq
3465 | SyntaxKind::TerminalDiv
3466 | SyntaxKind::TerminalDivEq
3467 | SyntaxKind::TerminalMod
3468 | SyntaxKind::TerminalModEq
3469 | SyntaxKind::TerminalPlus
3470 | SyntaxKind::TerminalPlusEq
3471 | SyntaxKind::TerminalMinus
3472 | SyntaxKind::TerminalMinusEq
3473 | SyntaxKind::TerminalEqEq
3474 | SyntaxKind::TerminalNeq
3475 | SyntaxKind::TerminalEq
3476 | SyntaxKind::TerminalAnd
3477 | SyntaxKind::TerminalAndAnd
3478 | SyntaxKind::TerminalOr
3479 | SyntaxKind::TerminalOrOr
3480 | SyntaxKind::TerminalXor
3481 | SyntaxKind::TerminalLE
3482 | SyntaxKind::TerminalGE
3483 | SyntaxKind::TerminalLT
3484 | SyntaxKind::TerminalGT
3485 | SyntaxKind::TerminalDotDot
3486 | SyntaxKind::TerminalDotDotEq
3487 )
3488 }
3489}
3490#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3491pub struct ExprListParenthesized {
3492 node: SyntaxNode,
3493}
3494impl ExprListParenthesized {
3495 pub const INDEX_LPAREN: usize = 0;
3496 pub const INDEX_EXPRESSIONS: usize = 1;
3497 pub const INDEX_RPAREN: usize = 2;
3498 pub fn new_green(
3499 db: &dyn SyntaxGroup,
3500 lparen: TerminalLParenGreen,
3501 expressions: ExprListGreen,
3502 rparen: TerminalRParenGreen,
3503 ) -> ExprListParenthesizedGreen {
3504 let children = [lparen.0, expressions.0, rparen.0];
3505 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
3506 ExprListParenthesizedGreen(
3507 Arc::new(GreenNode {
3508 kind: SyntaxKind::ExprListParenthesized,
3509 details: GreenNodeDetails::Node { children: children.into(), width },
3510 })
3511 .intern(db),
3512 )
3513 }
3514}
3515impl ExprListParenthesized {
3516 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3517 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
3518 }
3519 pub fn expressions(&self, db: &dyn SyntaxGroup) -> ExprList {
3520 ExprList::from_syntax_node(db, self.node.get_children(db)[1])
3521 }
3522 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3523 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
3524 }
3525}
3526#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3527pub struct ExprListParenthesizedPtr(pub SyntaxStablePtrId);
3528impl ExprListParenthesizedPtr {}
3529impl TypedStablePtr for ExprListParenthesizedPtr {
3530 type SyntaxNode = ExprListParenthesized;
3531 fn untyped(&self) -> SyntaxStablePtrId {
3532 self.0
3533 }
3534 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprListParenthesized {
3535 ExprListParenthesized::from_syntax_node(db, self.0.lookup(db))
3536 }
3537}
3538impl From<ExprListParenthesizedPtr> for SyntaxStablePtrId {
3539 fn from(ptr: ExprListParenthesizedPtr) -> Self {
3540 ptr.untyped()
3541 }
3542}
3543#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3544pub struct ExprListParenthesizedGreen(pub GreenId);
3545impl TypedSyntaxNode for ExprListParenthesized {
3546 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprListParenthesized);
3547 type StablePtr = ExprListParenthesizedPtr;
3548 type Green = ExprListParenthesizedGreen;
3549 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3550 ExprListParenthesizedGreen(
3551 Arc::new(GreenNode {
3552 kind: SyntaxKind::ExprListParenthesized,
3553 details: GreenNodeDetails::Node {
3554 children: [
3555 TerminalLParen::missing(db).0,
3556 ExprList::missing(db).0,
3557 TerminalRParen::missing(db).0,
3558 ]
3559 .into(),
3560 width: TextWidth::default(),
3561 },
3562 })
3563 .intern(db),
3564 )
3565 }
3566 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3567 let kind = node.kind(db);
3568 assert_eq!(
3569 kind,
3570 SyntaxKind::ExprListParenthesized,
3571 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3572 kind,
3573 SyntaxKind::ExprListParenthesized
3574 );
3575 Self { node }
3576 }
3577 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3578 let kind = node.kind(db);
3579 if kind == SyntaxKind::ExprListParenthesized {
3580 Some(Self::from_syntax_node(db, node))
3581 } else {
3582 None
3583 }
3584 }
3585 fn as_syntax_node(&self) -> SyntaxNode {
3586 self.node
3587 }
3588 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3589 ExprListParenthesizedPtr(self.node.stable_ptr(db))
3590 }
3591}
3592#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3593pub struct ExprFunctionCall {
3594 node: SyntaxNode,
3595}
3596impl ExprFunctionCall {
3597 pub const INDEX_PATH: usize = 0;
3598 pub const INDEX_ARGUMENTS: usize = 1;
3599 pub fn new_green(
3600 db: &dyn SyntaxGroup,
3601 path: ExprPathGreen,
3602 arguments: ArgListParenthesizedGreen,
3603 ) -> ExprFunctionCallGreen {
3604 let children = [path.0, arguments.0];
3605 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
3606 ExprFunctionCallGreen(
3607 Arc::new(GreenNode {
3608 kind: SyntaxKind::ExprFunctionCall,
3609 details: GreenNodeDetails::Node { children: children.into(), width },
3610 })
3611 .intern(db),
3612 )
3613 }
3614}
3615impl ExprFunctionCall {
3616 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3617 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
3618 }
3619 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3620 ArgListParenthesized::from_syntax_node(db, self.node.get_children(db)[1])
3621 }
3622}
3623#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3624pub struct ExprFunctionCallPtr(pub SyntaxStablePtrId);
3625impl ExprFunctionCallPtr {}
3626impl TypedStablePtr for ExprFunctionCallPtr {
3627 type SyntaxNode = ExprFunctionCall;
3628 fn untyped(&self) -> SyntaxStablePtrId {
3629 self.0
3630 }
3631 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFunctionCall {
3632 ExprFunctionCall::from_syntax_node(db, self.0.lookup(db))
3633 }
3634}
3635impl From<ExprFunctionCallPtr> for SyntaxStablePtrId {
3636 fn from(ptr: ExprFunctionCallPtr) -> Self {
3637 ptr.untyped()
3638 }
3639}
3640#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3641pub struct ExprFunctionCallGreen(pub GreenId);
3642impl TypedSyntaxNode for ExprFunctionCall {
3643 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFunctionCall);
3644 type StablePtr = ExprFunctionCallPtr;
3645 type Green = ExprFunctionCallGreen;
3646 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3647 ExprFunctionCallGreen(
3648 Arc::new(GreenNode {
3649 kind: SyntaxKind::ExprFunctionCall,
3650 details: GreenNodeDetails::Node {
3651 children: [ExprPath::missing(db).0, ArgListParenthesized::missing(db).0].into(),
3652 width: TextWidth::default(),
3653 },
3654 })
3655 .intern(db),
3656 )
3657 }
3658 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3659 let kind = node.kind(db);
3660 assert_eq!(
3661 kind,
3662 SyntaxKind::ExprFunctionCall,
3663 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3664 kind,
3665 SyntaxKind::ExprFunctionCall
3666 );
3667 Self { node }
3668 }
3669 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3670 let kind = node.kind(db);
3671 if kind == SyntaxKind::ExprFunctionCall {
3672 Some(Self::from_syntax_node(db, node))
3673 } else {
3674 None
3675 }
3676 }
3677 fn as_syntax_node(&self) -> SyntaxNode {
3678 self.node
3679 }
3680 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3681 ExprFunctionCallPtr(self.node.stable_ptr(db))
3682 }
3683}
3684#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3685pub struct ArgListParenthesized {
3686 node: SyntaxNode,
3687}
3688impl ArgListParenthesized {
3689 pub const INDEX_LPAREN: usize = 0;
3690 pub const INDEX_ARGUMENTS: usize = 1;
3691 pub const INDEX_RPAREN: usize = 2;
3692 pub fn new_green(
3693 db: &dyn SyntaxGroup,
3694 lparen: TerminalLParenGreen,
3695 arguments: ArgListGreen,
3696 rparen: TerminalRParenGreen,
3697 ) -> ArgListParenthesizedGreen {
3698 let children = [lparen.0, arguments.0, rparen.0];
3699 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
3700 ArgListParenthesizedGreen(
3701 Arc::new(GreenNode {
3702 kind: SyntaxKind::ArgListParenthesized,
3703 details: GreenNodeDetails::Node { children: children.into(), width },
3704 })
3705 .intern(db),
3706 )
3707 }
3708}
3709impl ArgListParenthesized {
3710 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3711 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
3712 }
3713 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
3714 ArgList::from_syntax_node(db, self.node.get_children(db)[1])
3715 }
3716 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3717 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
3718 }
3719}
3720#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3721pub struct ArgListParenthesizedPtr(pub SyntaxStablePtrId);
3722impl ArgListParenthesizedPtr {}
3723impl TypedStablePtr for ArgListParenthesizedPtr {
3724 type SyntaxNode = ArgListParenthesized;
3725 fn untyped(&self) -> SyntaxStablePtrId {
3726 self.0
3727 }
3728 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3729 ArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3730 }
3731}
3732impl From<ArgListParenthesizedPtr> for SyntaxStablePtrId {
3733 fn from(ptr: ArgListParenthesizedPtr) -> Self {
3734 ptr.untyped()
3735 }
3736}
3737#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3738pub struct ArgListParenthesizedGreen(pub GreenId);
3739impl TypedSyntaxNode for ArgListParenthesized {
3740 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListParenthesized);
3741 type StablePtr = ArgListParenthesizedPtr;
3742 type Green = ArgListParenthesizedGreen;
3743 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3744 ArgListParenthesizedGreen(
3745 Arc::new(GreenNode {
3746 kind: SyntaxKind::ArgListParenthesized,
3747 details: GreenNodeDetails::Node {
3748 children: [
3749 TerminalLParen::missing(db).0,
3750 ArgList::missing(db).0,
3751 TerminalRParen::missing(db).0,
3752 ]
3753 .into(),
3754 width: TextWidth::default(),
3755 },
3756 })
3757 .intern(db),
3758 )
3759 }
3760 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3761 let kind = node.kind(db);
3762 assert_eq!(
3763 kind,
3764 SyntaxKind::ArgListParenthesized,
3765 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3766 kind,
3767 SyntaxKind::ArgListParenthesized
3768 );
3769 Self { node }
3770 }
3771 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3772 let kind = node.kind(db);
3773 if kind == SyntaxKind::ArgListParenthesized {
3774 Some(Self::from_syntax_node(db, node))
3775 } else {
3776 None
3777 }
3778 }
3779 fn as_syntax_node(&self) -> SyntaxNode {
3780 self.node
3781 }
3782 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3783 ArgListParenthesizedPtr(self.node.stable_ptr(db))
3784 }
3785}
3786#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3787pub enum OptionArgListParenthesized {
3788 Empty(OptionArgListParenthesizedEmpty),
3789 ArgListParenthesized(ArgListParenthesized),
3790}
3791#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3792pub struct OptionArgListParenthesizedPtr(pub SyntaxStablePtrId);
3793impl TypedStablePtr for OptionArgListParenthesizedPtr {
3794 type SyntaxNode = OptionArgListParenthesized;
3795 fn untyped(&self) -> SyntaxStablePtrId {
3796 self.0
3797 }
3798 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
3799 OptionArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3800 }
3801}
3802impl From<OptionArgListParenthesizedPtr> for SyntaxStablePtrId {
3803 fn from(ptr: OptionArgListParenthesizedPtr) -> Self {
3804 ptr.untyped()
3805 }
3806}
3807impl From<OptionArgListParenthesizedEmptyPtr> for OptionArgListParenthesizedPtr {
3808 fn from(value: OptionArgListParenthesizedEmptyPtr) -> Self {
3809 Self(value.0)
3810 }
3811}
3812impl From<ArgListParenthesizedPtr> for OptionArgListParenthesizedPtr {
3813 fn from(value: ArgListParenthesizedPtr) -> Self {
3814 Self(value.0)
3815 }
3816}
3817impl From<OptionArgListParenthesizedEmptyGreen> for OptionArgListParenthesizedGreen {
3818 fn from(value: OptionArgListParenthesizedEmptyGreen) -> Self {
3819 Self(value.0)
3820 }
3821}
3822impl From<ArgListParenthesizedGreen> for OptionArgListParenthesizedGreen {
3823 fn from(value: ArgListParenthesizedGreen) -> Self {
3824 Self(value.0)
3825 }
3826}
3827#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3828pub struct OptionArgListParenthesizedGreen(pub GreenId);
3829impl TypedSyntaxNode for OptionArgListParenthesized {
3830 const OPTIONAL_KIND: Option<SyntaxKind> = None;
3831 type StablePtr = OptionArgListParenthesizedPtr;
3832 type Green = OptionArgListParenthesizedGreen;
3833 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3834 panic!("No missing variant.");
3835 }
3836 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3837 let kind = node.kind(db);
3838 match kind {
3839 SyntaxKind::OptionArgListParenthesizedEmpty => OptionArgListParenthesized::Empty(
3840 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3841 ),
3842 SyntaxKind::ArgListParenthesized => OptionArgListParenthesized::ArgListParenthesized(
3843 ArgListParenthesized::from_syntax_node(db, node),
3844 ),
3845 _ => panic!(
3846 "Unexpected syntax kind {:?} when constructing {}.",
3847 kind, "OptionArgListParenthesized"
3848 ),
3849 }
3850 }
3851 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3852 let kind = node.kind(db);
3853 match kind {
3854 SyntaxKind::OptionArgListParenthesizedEmpty => Some(OptionArgListParenthesized::Empty(
3855 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3856 )),
3857 SyntaxKind::ArgListParenthesized => {
3858 Some(OptionArgListParenthesized::ArgListParenthesized(
3859 ArgListParenthesized::from_syntax_node(db, node),
3860 ))
3861 }
3862 _ => None,
3863 }
3864 }
3865 fn as_syntax_node(&self) -> SyntaxNode {
3866 match self {
3867 OptionArgListParenthesized::Empty(x) => x.as_syntax_node(),
3868 OptionArgListParenthesized::ArgListParenthesized(x) => x.as_syntax_node(),
3869 }
3870 }
3871 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3872 OptionArgListParenthesizedPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
3873 }
3874}
3875impl OptionArgListParenthesized {
3876 pub fn is_variant(kind: SyntaxKind) -> bool {
3878 matches!(
3879 kind,
3880 SyntaxKind::OptionArgListParenthesizedEmpty | SyntaxKind::ArgListParenthesized
3881 )
3882 }
3883}
3884#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3885pub struct OptionArgListParenthesizedEmpty {
3886 node: SyntaxNode,
3887}
3888impl OptionArgListParenthesizedEmpty {
3889 pub fn new_green(db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmptyGreen {
3890 let children = [];
3891 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
3892 OptionArgListParenthesizedEmptyGreen(
3893 Arc::new(GreenNode {
3894 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3895 details: GreenNodeDetails::Node { children: children.into(), width },
3896 })
3897 .intern(db),
3898 )
3899 }
3900}
3901impl OptionArgListParenthesizedEmpty {}
3902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3903pub struct OptionArgListParenthesizedEmptyPtr(pub SyntaxStablePtrId);
3904impl OptionArgListParenthesizedEmptyPtr {}
3905impl TypedStablePtr for OptionArgListParenthesizedEmptyPtr {
3906 type SyntaxNode = OptionArgListParenthesizedEmpty;
3907 fn untyped(&self) -> SyntaxStablePtrId {
3908 self.0
3909 }
3910 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmpty {
3911 OptionArgListParenthesizedEmpty::from_syntax_node(db, self.0.lookup(db))
3912 }
3913}
3914impl From<OptionArgListParenthesizedEmptyPtr> for SyntaxStablePtrId {
3915 fn from(ptr: OptionArgListParenthesizedEmptyPtr) -> Self {
3916 ptr.untyped()
3917 }
3918}
3919#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3920pub struct OptionArgListParenthesizedEmptyGreen(pub GreenId);
3921impl TypedSyntaxNode for OptionArgListParenthesizedEmpty {
3922 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionArgListParenthesizedEmpty);
3923 type StablePtr = OptionArgListParenthesizedEmptyPtr;
3924 type Green = OptionArgListParenthesizedEmptyGreen;
3925 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3926 OptionArgListParenthesizedEmptyGreen(
3927 Arc::new(GreenNode {
3928 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3929 details: GreenNodeDetails::Node {
3930 children: [].into(),
3931 width: TextWidth::default(),
3932 },
3933 })
3934 .intern(db),
3935 )
3936 }
3937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3938 let kind = node.kind(db);
3939 assert_eq!(
3940 kind,
3941 SyntaxKind::OptionArgListParenthesizedEmpty,
3942 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3943 kind,
3944 SyntaxKind::OptionArgListParenthesizedEmpty
3945 );
3946 Self { node }
3947 }
3948 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3949 let kind = node.kind(db);
3950 if kind == SyntaxKind::OptionArgListParenthesizedEmpty {
3951 Some(Self::from_syntax_node(db, node))
3952 } else {
3953 None
3954 }
3955 }
3956 fn as_syntax_node(&self) -> SyntaxNode {
3957 self.node
3958 }
3959 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
3960 OptionArgListParenthesizedEmptyPtr(self.node.stable_ptr(db))
3961 }
3962}
3963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3964pub struct ExprStructCtorCall {
3965 node: SyntaxNode,
3966}
3967impl ExprStructCtorCall {
3968 pub const INDEX_PATH: usize = 0;
3969 pub const INDEX_ARGUMENTS: usize = 1;
3970 pub fn new_green(
3971 db: &dyn SyntaxGroup,
3972 path: ExprPathGreen,
3973 arguments: StructArgListBracedGreen,
3974 ) -> ExprStructCtorCallGreen {
3975 let children = [path.0, arguments.0];
3976 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
3977 ExprStructCtorCallGreen(
3978 Arc::new(GreenNode {
3979 kind: SyntaxKind::ExprStructCtorCall,
3980 details: GreenNodeDetails::Node { children: children.into(), width },
3981 })
3982 .intern(db),
3983 )
3984 }
3985}
3986impl ExprStructCtorCall {
3987 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3988 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
3989 }
3990 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
3991 StructArgListBraced::from_syntax_node(db, self.node.get_children(db)[1])
3992 }
3993}
3994#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3995pub struct ExprStructCtorCallPtr(pub SyntaxStablePtrId);
3996impl ExprStructCtorCallPtr {}
3997impl TypedStablePtr for ExprStructCtorCallPtr {
3998 type SyntaxNode = ExprStructCtorCall;
3999 fn untyped(&self) -> SyntaxStablePtrId {
4000 self.0
4001 }
4002 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprStructCtorCall {
4003 ExprStructCtorCall::from_syntax_node(db, self.0.lookup(db))
4004 }
4005}
4006impl From<ExprStructCtorCallPtr> for SyntaxStablePtrId {
4007 fn from(ptr: ExprStructCtorCallPtr) -> Self {
4008 ptr.untyped()
4009 }
4010}
4011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4012pub struct ExprStructCtorCallGreen(pub GreenId);
4013impl TypedSyntaxNode for ExprStructCtorCall {
4014 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprStructCtorCall);
4015 type StablePtr = ExprStructCtorCallPtr;
4016 type Green = ExprStructCtorCallGreen;
4017 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4018 ExprStructCtorCallGreen(
4019 Arc::new(GreenNode {
4020 kind: SyntaxKind::ExprStructCtorCall,
4021 details: GreenNodeDetails::Node {
4022 children: [ExprPath::missing(db).0, StructArgListBraced::missing(db).0].into(),
4023 width: TextWidth::default(),
4024 },
4025 })
4026 .intern(db),
4027 )
4028 }
4029 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4030 let kind = node.kind(db);
4031 assert_eq!(
4032 kind,
4033 SyntaxKind::ExprStructCtorCall,
4034 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4035 kind,
4036 SyntaxKind::ExprStructCtorCall
4037 );
4038 Self { node }
4039 }
4040 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4041 let kind = node.kind(db);
4042 if kind == SyntaxKind::ExprStructCtorCall {
4043 Some(Self::from_syntax_node(db, node))
4044 } else {
4045 None
4046 }
4047 }
4048 fn as_syntax_node(&self) -> SyntaxNode {
4049 self.node
4050 }
4051 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4052 ExprStructCtorCallPtr(self.node.stable_ptr(db))
4053 }
4054}
4055#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4056pub struct StructArgListBraced {
4057 node: SyntaxNode,
4058}
4059impl StructArgListBraced {
4060 pub const INDEX_LBRACE: usize = 0;
4061 pub const INDEX_ARGUMENTS: usize = 1;
4062 pub const INDEX_RBRACE: usize = 2;
4063 pub fn new_green(
4064 db: &dyn SyntaxGroup,
4065 lbrace: TerminalLBraceGreen,
4066 arguments: StructArgListGreen,
4067 rbrace: TerminalRBraceGreen,
4068 ) -> StructArgListBracedGreen {
4069 let children = [lbrace.0, arguments.0, rbrace.0];
4070 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4071 StructArgListBracedGreen(
4072 Arc::new(GreenNode {
4073 kind: SyntaxKind::StructArgListBraced,
4074 details: GreenNodeDetails::Node { children: children.into(), width },
4075 })
4076 .intern(db),
4077 )
4078 }
4079}
4080impl StructArgListBraced {
4081 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4082 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
4083 }
4084 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgList {
4085 StructArgList::from_syntax_node(db, self.node.get_children(db)[1])
4086 }
4087 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4088 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
4089 }
4090}
4091#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4092pub struct StructArgListBracedPtr(pub SyntaxStablePtrId);
4093impl StructArgListBracedPtr {}
4094impl TypedStablePtr for StructArgListBracedPtr {
4095 type SyntaxNode = StructArgListBraced;
4096 fn untyped(&self) -> SyntaxStablePtrId {
4097 self.0
4098 }
4099 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
4100 StructArgListBraced::from_syntax_node(db, self.0.lookup(db))
4101 }
4102}
4103impl From<StructArgListBracedPtr> for SyntaxStablePtrId {
4104 fn from(ptr: StructArgListBracedPtr) -> Self {
4105 ptr.untyped()
4106 }
4107}
4108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4109pub struct StructArgListBracedGreen(pub GreenId);
4110impl TypedSyntaxNode for StructArgListBraced {
4111 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgListBraced);
4112 type StablePtr = StructArgListBracedPtr;
4113 type Green = StructArgListBracedGreen;
4114 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4115 StructArgListBracedGreen(
4116 Arc::new(GreenNode {
4117 kind: SyntaxKind::StructArgListBraced,
4118 details: GreenNodeDetails::Node {
4119 children: [
4120 TerminalLBrace::missing(db).0,
4121 StructArgList::missing(db).0,
4122 TerminalRBrace::missing(db).0,
4123 ]
4124 .into(),
4125 width: TextWidth::default(),
4126 },
4127 })
4128 .intern(db),
4129 )
4130 }
4131 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4132 let kind = node.kind(db);
4133 assert_eq!(
4134 kind,
4135 SyntaxKind::StructArgListBraced,
4136 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4137 kind,
4138 SyntaxKind::StructArgListBraced
4139 );
4140 Self { node }
4141 }
4142 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4143 let kind = node.kind(db);
4144 if kind == SyntaxKind::StructArgListBraced {
4145 Some(Self::from_syntax_node(db, node))
4146 } else {
4147 None
4148 }
4149 }
4150 fn as_syntax_node(&self) -> SyntaxNode {
4151 self.node
4152 }
4153 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4154 StructArgListBracedPtr(self.node.stable_ptr(db))
4155 }
4156}
4157#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4158pub struct ExprBlock {
4159 node: SyntaxNode,
4160}
4161impl ExprBlock {
4162 pub const INDEX_LBRACE: usize = 0;
4163 pub const INDEX_STATEMENTS: usize = 1;
4164 pub const INDEX_RBRACE: usize = 2;
4165 pub fn new_green(
4166 db: &dyn SyntaxGroup,
4167 lbrace: TerminalLBraceGreen,
4168 statements: StatementListGreen,
4169 rbrace: TerminalRBraceGreen,
4170 ) -> ExprBlockGreen {
4171 let children = [lbrace.0, statements.0, rbrace.0];
4172 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4173 ExprBlockGreen(
4174 Arc::new(GreenNode {
4175 kind: SyntaxKind::ExprBlock,
4176 details: GreenNodeDetails::Node { children: children.into(), width },
4177 })
4178 .intern(db),
4179 )
4180 }
4181}
4182impl ExprBlock {
4183 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4184 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
4185 }
4186 pub fn statements(&self, db: &dyn SyntaxGroup) -> StatementList {
4187 StatementList::from_syntax_node(db, self.node.get_children(db)[1])
4188 }
4189 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4190 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
4191 }
4192}
4193#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4194pub struct ExprBlockPtr(pub SyntaxStablePtrId);
4195impl ExprBlockPtr {}
4196impl TypedStablePtr for ExprBlockPtr {
4197 type SyntaxNode = ExprBlock;
4198 fn untyped(&self) -> SyntaxStablePtrId {
4199 self.0
4200 }
4201 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4202 ExprBlock::from_syntax_node(db, self.0.lookup(db))
4203 }
4204}
4205impl From<ExprBlockPtr> for SyntaxStablePtrId {
4206 fn from(ptr: ExprBlockPtr) -> Self {
4207 ptr.untyped()
4208 }
4209}
4210#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4211pub struct ExprBlockGreen(pub GreenId);
4212impl TypedSyntaxNode for ExprBlock {
4213 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBlock);
4214 type StablePtr = ExprBlockPtr;
4215 type Green = ExprBlockGreen;
4216 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4217 ExprBlockGreen(
4218 Arc::new(GreenNode {
4219 kind: SyntaxKind::ExprBlock,
4220 details: GreenNodeDetails::Node {
4221 children: [
4222 TerminalLBrace::missing(db).0,
4223 StatementList::missing(db).0,
4224 TerminalRBrace::missing(db).0,
4225 ]
4226 .into(),
4227 width: TextWidth::default(),
4228 },
4229 })
4230 .intern(db),
4231 )
4232 }
4233 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4234 let kind = node.kind(db);
4235 assert_eq!(
4236 kind,
4237 SyntaxKind::ExprBlock,
4238 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4239 kind,
4240 SyntaxKind::ExprBlock
4241 );
4242 Self { node }
4243 }
4244 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4245 let kind = node.kind(db);
4246 if kind == SyntaxKind::ExprBlock { Some(Self::from_syntax_node(db, node)) } else { None }
4247 }
4248 fn as_syntax_node(&self) -> SyntaxNode {
4249 self.node
4250 }
4251 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4252 ExprBlockPtr(self.node.stable_ptr(db))
4253 }
4254}
4255#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4256pub struct ExprMatch {
4257 node: SyntaxNode,
4258}
4259impl ExprMatch {
4260 pub const INDEX_MATCH_KW: usize = 0;
4261 pub const INDEX_EXPR: usize = 1;
4262 pub const INDEX_LBRACE: usize = 2;
4263 pub const INDEX_ARMS: usize = 3;
4264 pub const INDEX_RBRACE: usize = 4;
4265 pub fn new_green(
4266 db: &dyn SyntaxGroup,
4267 match_kw: TerminalMatchGreen,
4268 expr: ExprGreen,
4269 lbrace: TerminalLBraceGreen,
4270 arms: MatchArmsGreen,
4271 rbrace: TerminalRBraceGreen,
4272 ) -> ExprMatchGreen {
4273 let children = [match_kw.0, expr.0, lbrace.0, arms.0, rbrace.0];
4274 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4275 ExprMatchGreen(
4276 Arc::new(GreenNode {
4277 kind: SyntaxKind::ExprMatch,
4278 details: GreenNodeDetails::Node { children: children.into(), width },
4279 })
4280 .intern(db),
4281 )
4282 }
4283}
4284impl ExprMatch {
4285 pub fn match_kw(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
4286 TerminalMatch::from_syntax_node(db, self.node.get_children(db)[0])
4287 }
4288 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4289 Expr::from_syntax_node(db, self.node.get_children(db)[1])
4290 }
4291 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4292 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[2])
4293 }
4294 pub fn arms(&self, db: &dyn SyntaxGroup) -> MatchArms {
4295 MatchArms::from_syntax_node(db, self.node.get_children(db)[3])
4296 }
4297 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4298 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[4])
4299 }
4300}
4301#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4302pub struct ExprMatchPtr(pub SyntaxStablePtrId);
4303impl ExprMatchPtr {}
4304impl TypedStablePtr for ExprMatchPtr {
4305 type SyntaxNode = ExprMatch;
4306 fn untyped(&self) -> SyntaxStablePtrId {
4307 self.0
4308 }
4309 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprMatch {
4310 ExprMatch::from_syntax_node(db, self.0.lookup(db))
4311 }
4312}
4313impl From<ExprMatchPtr> for SyntaxStablePtrId {
4314 fn from(ptr: ExprMatchPtr) -> Self {
4315 ptr.untyped()
4316 }
4317}
4318#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4319pub struct ExprMatchGreen(pub GreenId);
4320impl TypedSyntaxNode for ExprMatch {
4321 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprMatch);
4322 type StablePtr = ExprMatchPtr;
4323 type Green = ExprMatchGreen;
4324 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4325 ExprMatchGreen(
4326 Arc::new(GreenNode {
4327 kind: SyntaxKind::ExprMatch,
4328 details: GreenNodeDetails::Node {
4329 children: [
4330 TerminalMatch::missing(db).0,
4331 Expr::missing(db).0,
4332 TerminalLBrace::missing(db).0,
4333 MatchArms::missing(db).0,
4334 TerminalRBrace::missing(db).0,
4335 ]
4336 .into(),
4337 width: TextWidth::default(),
4338 },
4339 })
4340 .intern(db),
4341 )
4342 }
4343 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4344 let kind = node.kind(db);
4345 assert_eq!(
4346 kind,
4347 SyntaxKind::ExprMatch,
4348 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4349 kind,
4350 SyntaxKind::ExprMatch
4351 );
4352 Self { node }
4353 }
4354 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4355 let kind = node.kind(db);
4356 if kind == SyntaxKind::ExprMatch { Some(Self::from_syntax_node(db, node)) } else { None }
4357 }
4358 fn as_syntax_node(&self) -> SyntaxNode {
4359 self.node
4360 }
4361 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4362 ExprMatchPtr(self.node.stable_ptr(db))
4363 }
4364}
4365#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4366pub struct MatchArms(ElementList<MatchArm, 2>);
4367impl Deref for MatchArms {
4368 type Target = ElementList<MatchArm, 2>;
4369 fn deref(&self) -> &Self::Target {
4370 &self.0
4371 }
4372}
4373impl MatchArms {
4374 pub fn new_green(
4375 db: &dyn SyntaxGroup,
4376 children: &[MatchArmsElementOrSeparatorGreen],
4377 ) -> MatchArmsGreen {
4378 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
4379 MatchArmsGreen(
4380 Arc::new(GreenNode {
4381 kind: SyntaxKind::MatchArms,
4382 details: GreenNodeDetails::Node {
4383 children: children.iter().map(|x| x.id()).collect(),
4384 width,
4385 },
4386 })
4387 .intern(db),
4388 )
4389 }
4390}
4391#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4392pub struct MatchArmsPtr(pub SyntaxStablePtrId);
4393impl TypedStablePtr for MatchArmsPtr {
4394 type SyntaxNode = MatchArms;
4395 fn untyped(&self) -> SyntaxStablePtrId {
4396 self.0
4397 }
4398 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArms {
4399 MatchArms::from_syntax_node(db, self.0.lookup(db))
4400 }
4401}
4402impl From<MatchArmsPtr> for SyntaxStablePtrId {
4403 fn from(ptr: MatchArmsPtr) -> Self {
4404 ptr.untyped()
4405 }
4406}
4407#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4408pub enum MatchArmsElementOrSeparatorGreen {
4409 Separator(TerminalCommaGreen),
4410 Element(MatchArmGreen),
4411}
4412impl From<TerminalCommaGreen> for MatchArmsElementOrSeparatorGreen {
4413 fn from(value: TerminalCommaGreen) -> Self {
4414 MatchArmsElementOrSeparatorGreen::Separator(value)
4415 }
4416}
4417impl From<MatchArmGreen> for MatchArmsElementOrSeparatorGreen {
4418 fn from(value: MatchArmGreen) -> Self {
4419 MatchArmsElementOrSeparatorGreen::Element(value)
4420 }
4421}
4422impl MatchArmsElementOrSeparatorGreen {
4423 fn id(&self) -> GreenId {
4424 match self {
4425 MatchArmsElementOrSeparatorGreen::Separator(green) => green.0,
4426 MatchArmsElementOrSeparatorGreen::Element(green) => green.0,
4427 }
4428 }
4429}
4430#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4431pub struct MatchArmsGreen(pub GreenId);
4432impl TypedSyntaxNode for MatchArms {
4433 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArms);
4434 type StablePtr = MatchArmsPtr;
4435 type Green = MatchArmsGreen;
4436 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4437 MatchArmsGreen(
4438 Arc::new(GreenNode {
4439 kind: SyntaxKind::MatchArms,
4440 details: GreenNodeDetails::Node {
4441 children: [].into(),
4442 width: TextWidth::default(),
4443 },
4444 })
4445 .intern(db),
4446 )
4447 }
4448 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4449 Self(ElementList::new(node))
4450 }
4451 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4452 if node.kind(db) == SyntaxKind::MatchArms {
4453 Some(Self(ElementList::new(node)))
4454 } else {
4455 None
4456 }
4457 }
4458 fn as_syntax_node(&self) -> SyntaxNode {
4459 self.node
4460 }
4461 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4462 MatchArmsPtr(self.node.stable_ptr(db))
4463 }
4464}
4465#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4466pub struct MatchArm {
4467 node: SyntaxNode,
4468}
4469impl MatchArm {
4470 pub const INDEX_PATTERNS: usize = 0;
4471 pub const INDEX_ARROW: usize = 1;
4472 pub const INDEX_EXPRESSION: usize = 2;
4473 pub fn new_green(
4474 db: &dyn SyntaxGroup,
4475 patterns: PatternListOrGreen,
4476 arrow: TerminalMatchArrowGreen,
4477 expression: ExprGreen,
4478 ) -> MatchArmGreen {
4479 let children = [patterns.0, arrow.0, expression.0];
4480 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4481 MatchArmGreen(
4482 Arc::new(GreenNode {
4483 kind: SyntaxKind::MatchArm,
4484 details: GreenNodeDetails::Node { children: children.into(), width },
4485 })
4486 .intern(db),
4487 )
4488 }
4489}
4490impl MatchArm {
4491 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4492 PatternListOr::from_syntax_node(db, self.node.get_children(db)[0])
4493 }
4494 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
4495 TerminalMatchArrow::from_syntax_node(db, self.node.get_children(db)[1])
4496 }
4497 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
4498 Expr::from_syntax_node(db, self.node.get_children(db)[2])
4499 }
4500}
4501#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4502pub struct MatchArmPtr(pub SyntaxStablePtrId);
4503impl MatchArmPtr {}
4504impl TypedStablePtr for MatchArmPtr {
4505 type SyntaxNode = MatchArm;
4506 fn untyped(&self) -> SyntaxStablePtrId {
4507 self.0
4508 }
4509 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArm {
4510 MatchArm::from_syntax_node(db, self.0.lookup(db))
4511 }
4512}
4513impl From<MatchArmPtr> for SyntaxStablePtrId {
4514 fn from(ptr: MatchArmPtr) -> Self {
4515 ptr.untyped()
4516 }
4517}
4518#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4519pub struct MatchArmGreen(pub GreenId);
4520impl TypedSyntaxNode for MatchArm {
4521 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArm);
4522 type StablePtr = MatchArmPtr;
4523 type Green = MatchArmGreen;
4524 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4525 MatchArmGreen(
4526 Arc::new(GreenNode {
4527 kind: SyntaxKind::MatchArm,
4528 details: GreenNodeDetails::Node {
4529 children: [
4530 PatternListOr::missing(db).0,
4531 TerminalMatchArrow::missing(db).0,
4532 Expr::missing(db).0,
4533 ]
4534 .into(),
4535 width: TextWidth::default(),
4536 },
4537 })
4538 .intern(db),
4539 )
4540 }
4541 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4542 let kind = node.kind(db);
4543 assert_eq!(
4544 kind,
4545 SyntaxKind::MatchArm,
4546 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4547 kind,
4548 SyntaxKind::MatchArm
4549 );
4550 Self { node }
4551 }
4552 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4553 let kind = node.kind(db);
4554 if kind == SyntaxKind::MatchArm { Some(Self::from_syntax_node(db, node)) } else { None }
4555 }
4556 fn as_syntax_node(&self) -> SyntaxNode {
4557 self.node
4558 }
4559 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4560 MatchArmPtr(self.node.stable_ptr(db))
4561 }
4562}
4563#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4564pub struct ExprIf {
4565 node: SyntaxNode,
4566}
4567impl ExprIf {
4568 pub const INDEX_IF_KW: usize = 0;
4569 pub const INDEX_CONDITIONS: usize = 1;
4570 pub const INDEX_IF_BLOCK: usize = 2;
4571 pub const INDEX_ELSE_CLAUSE: usize = 3;
4572 pub fn new_green(
4573 db: &dyn SyntaxGroup,
4574 if_kw: TerminalIfGreen,
4575 conditions: ConditionListAndGreen,
4576 if_block: ExprBlockGreen,
4577 else_clause: OptionElseClauseGreen,
4578 ) -> ExprIfGreen {
4579 let children = [if_kw.0, conditions.0, if_block.0, else_clause.0];
4580 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4581 ExprIfGreen(
4582 Arc::new(GreenNode {
4583 kind: SyntaxKind::ExprIf,
4584 details: GreenNodeDetails::Node { children: children.into(), width },
4585 })
4586 .intern(db),
4587 )
4588 }
4589}
4590impl ExprIf {
4591 pub fn if_kw(&self, db: &dyn SyntaxGroup) -> TerminalIf {
4592 TerminalIf::from_syntax_node(db, self.node.get_children(db)[0])
4593 }
4594 pub fn conditions(&self, db: &dyn SyntaxGroup) -> ConditionListAnd {
4595 ConditionListAnd::from_syntax_node(db, self.node.get_children(db)[1])
4596 }
4597 pub fn if_block(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4598 ExprBlock::from_syntax_node(db, self.node.get_children(db)[2])
4599 }
4600 pub fn else_clause(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
4601 OptionElseClause::from_syntax_node(db, self.node.get_children(db)[3])
4602 }
4603}
4604#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4605pub struct ExprIfPtr(pub SyntaxStablePtrId);
4606impl ExprIfPtr {}
4607impl TypedStablePtr for ExprIfPtr {
4608 type SyntaxNode = ExprIf;
4609 fn untyped(&self) -> SyntaxStablePtrId {
4610 self.0
4611 }
4612 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIf {
4613 ExprIf::from_syntax_node(db, self.0.lookup(db))
4614 }
4615}
4616impl From<ExprIfPtr> for SyntaxStablePtrId {
4617 fn from(ptr: ExprIfPtr) -> Self {
4618 ptr.untyped()
4619 }
4620}
4621#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4622pub struct ExprIfGreen(pub GreenId);
4623impl TypedSyntaxNode for ExprIf {
4624 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIf);
4625 type StablePtr = ExprIfPtr;
4626 type Green = ExprIfGreen;
4627 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4628 ExprIfGreen(
4629 Arc::new(GreenNode {
4630 kind: SyntaxKind::ExprIf,
4631 details: GreenNodeDetails::Node {
4632 children: [
4633 TerminalIf::missing(db).0,
4634 ConditionListAnd::missing(db).0,
4635 ExprBlock::missing(db).0,
4636 OptionElseClause::missing(db).0,
4637 ]
4638 .into(),
4639 width: TextWidth::default(),
4640 },
4641 })
4642 .intern(db),
4643 )
4644 }
4645 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4646 let kind = node.kind(db);
4647 assert_eq!(
4648 kind,
4649 SyntaxKind::ExprIf,
4650 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4651 kind,
4652 SyntaxKind::ExprIf
4653 );
4654 Self { node }
4655 }
4656 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4657 let kind = node.kind(db);
4658 if kind == SyntaxKind::ExprIf { Some(Self::from_syntax_node(db, node)) } else { None }
4659 }
4660 fn as_syntax_node(&self) -> SyntaxNode {
4661 self.node
4662 }
4663 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4664 ExprIfPtr(self.node.stable_ptr(db))
4665 }
4666}
4667#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4668pub struct ConditionListAnd(ElementList<Condition, 2>);
4669impl Deref for ConditionListAnd {
4670 type Target = ElementList<Condition, 2>;
4671 fn deref(&self) -> &Self::Target {
4672 &self.0
4673 }
4674}
4675impl ConditionListAnd {
4676 pub fn new_green(
4677 db: &dyn SyntaxGroup,
4678 children: &[ConditionListAndElementOrSeparatorGreen],
4679 ) -> ConditionListAndGreen {
4680 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
4681 ConditionListAndGreen(
4682 Arc::new(GreenNode {
4683 kind: SyntaxKind::ConditionListAnd,
4684 details: GreenNodeDetails::Node {
4685 children: children.iter().map(|x| x.id()).collect(),
4686 width,
4687 },
4688 })
4689 .intern(db),
4690 )
4691 }
4692}
4693#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4694pub struct ConditionListAndPtr(pub SyntaxStablePtrId);
4695impl TypedStablePtr for ConditionListAndPtr {
4696 type SyntaxNode = ConditionListAnd;
4697 fn untyped(&self) -> SyntaxStablePtrId {
4698 self.0
4699 }
4700 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionListAnd {
4701 ConditionListAnd::from_syntax_node(db, self.0.lookup(db))
4702 }
4703}
4704impl From<ConditionListAndPtr> for SyntaxStablePtrId {
4705 fn from(ptr: ConditionListAndPtr) -> Self {
4706 ptr.untyped()
4707 }
4708}
4709#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4710pub enum ConditionListAndElementOrSeparatorGreen {
4711 Separator(TerminalAndAndGreen),
4712 Element(ConditionGreen),
4713}
4714impl From<TerminalAndAndGreen> for ConditionListAndElementOrSeparatorGreen {
4715 fn from(value: TerminalAndAndGreen) -> Self {
4716 ConditionListAndElementOrSeparatorGreen::Separator(value)
4717 }
4718}
4719impl From<ConditionGreen> for ConditionListAndElementOrSeparatorGreen {
4720 fn from(value: ConditionGreen) -> Self {
4721 ConditionListAndElementOrSeparatorGreen::Element(value)
4722 }
4723}
4724impl ConditionListAndElementOrSeparatorGreen {
4725 fn id(&self) -> GreenId {
4726 match self {
4727 ConditionListAndElementOrSeparatorGreen::Separator(green) => green.0,
4728 ConditionListAndElementOrSeparatorGreen::Element(green) => green.0,
4729 }
4730 }
4731}
4732#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4733pub struct ConditionListAndGreen(pub GreenId);
4734impl TypedSyntaxNode for ConditionListAnd {
4735 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionListAnd);
4736 type StablePtr = ConditionListAndPtr;
4737 type Green = ConditionListAndGreen;
4738 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4739 ConditionListAndGreen(
4740 Arc::new(GreenNode {
4741 kind: SyntaxKind::ConditionListAnd,
4742 details: GreenNodeDetails::Node {
4743 children: [].into(),
4744 width: TextWidth::default(),
4745 },
4746 })
4747 .intern(db),
4748 )
4749 }
4750 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4751 Self(ElementList::new(node))
4752 }
4753 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4754 if node.kind(db) == SyntaxKind::ConditionListAnd {
4755 Some(Self(ElementList::new(node)))
4756 } else {
4757 None
4758 }
4759 }
4760 fn as_syntax_node(&self) -> SyntaxNode {
4761 self.node
4762 }
4763 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4764 ConditionListAndPtr(self.node.stable_ptr(db))
4765 }
4766}
4767#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4768pub enum Condition {
4769 Let(ConditionLet),
4770 Expr(ConditionExpr),
4771}
4772#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4773pub struct ConditionPtr(pub SyntaxStablePtrId);
4774impl TypedStablePtr for ConditionPtr {
4775 type SyntaxNode = Condition;
4776 fn untyped(&self) -> SyntaxStablePtrId {
4777 self.0
4778 }
4779 fn lookup(&self, db: &dyn SyntaxGroup) -> Condition {
4780 Condition::from_syntax_node(db, self.0.lookup(db))
4781 }
4782}
4783impl From<ConditionPtr> for SyntaxStablePtrId {
4784 fn from(ptr: ConditionPtr) -> Self {
4785 ptr.untyped()
4786 }
4787}
4788impl From<ConditionLetPtr> for ConditionPtr {
4789 fn from(value: ConditionLetPtr) -> Self {
4790 Self(value.0)
4791 }
4792}
4793impl From<ConditionExprPtr> for ConditionPtr {
4794 fn from(value: ConditionExprPtr) -> Self {
4795 Self(value.0)
4796 }
4797}
4798impl From<ConditionLetGreen> for ConditionGreen {
4799 fn from(value: ConditionLetGreen) -> Self {
4800 Self(value.0)
4801 }
4802}
4803impl From<ConditionExprGreen> for ConditionGreen {
4804 fn from(value: ConditionExprGreen) -> Self {
4805 Self(value.0)
4806 }
4807}
4808#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4809pub struct ConditionGreen(pub GreenId);
4810impl TypedSyntaxNode for Condition {
4811 const OPTIONAL_KIND: Option<SyntaxKind> = None;
4812 type StablePtr = ConditionPtr;
4813 type Green = ConditionGreen;
4814 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4815 panic!("No missing variant.");
4816 }
4817 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4818 let kind = node.kind(db);
4819 match kind {
4820 SyntaxKind::ConditionLet => Condition::Let(ConditionLet::from_syntax_node(db, node)),
4821 SyntaxKind::ConditionExpr => Condition::Expr(ConditionExpr::from_syntax_node(db, node)),
4822 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Condition"),
4823 }
4824 }
4825 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4826 let kind = node.kind(db);
4827 match kind {
4828 SyntaxKind::ConditionLet => {
4829 Some(Condition::Let(ConditionLet::from_syntax_node(db, node)))
4830 }
4831 SyntaxKind::ConditionExpr => {
4832 Some(Condition::Expr(ConditionExpr::from_syntax_node(db, node)))
4833 }
4834 _ => None,
4835 }
4836 }
4837 fn as_syntax_node(&self) -> SyntaxNode {
4838 match self {
4839 Condition::Let(x) => x.as_syntax_node(),
4840 Condition::Expr(x) => x.as_syntax_node(),
4841 }
4842 }
4843 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4844 ConditionPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
4845 }
4846}
4847impl Condition {
4848 pub fn is_variant(kind: SyntaxKind) -> bool {
4850 matches!(kind, SyntaxKind::ConditionLet | SyntaxKind::ConditionExpr)
4851 }
4852}
4853#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4854pub struct ConditionLet {
4855 node: SyntaxNode,
4856}
4857impl ConditionLet {
4858 pub const INDEX_LET_KW: usize = 0;
4859 pub const INDEX_PATTERNS: usize = 1;
4860 pub const INDEX_EQ: usize = 2;
4861 pub const INDEX_EXPR: usize = 3;
4862 pub fn new_green(
4863 db: &dyn SyntaxGroup,
4864 let_kw: TerminalLetGreen,
4865 patterns: PatternListOrGreen,
4866 eq: TerminalEqGreen,
4867 expr: ExprGreen,
4868 ) -> ConditionLetGreen {
4869 let children = [let_kw.0, patterns.0, eq.0, expr.0];
4870 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4871 ConditionLetGreen(
4872 Arc::new(GreenNode {
4873 kind: SyntaxKind::ConditionLet,
4874 details: GreenNodeDetails::Node { children: children.into(), width },
4875 })
4876 .intern(db),
4877 )
4878 }
4879}
4880impl ConditionLet {
4881 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
4882 TerminalLet::from_syntax_node(db, self.node.get_children(db)[0])
4883 }
4884 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4885 PatternListOr::from_syntax_node(db, self.node.get_children(db)[1])
4886 }
4887 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
4888 TerminalEq::from_syntax_node(db, self.node.get_children(db)[2])
4889 }
4890 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4891 Expr::from_syntax_node(db, self.node.get_children(db)[3])
4892 }
4893}
4894#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4895pub struct ConditionLetPtr(pub SyntaxStablePtrId);
4896impl ConditionLetPtr {}
4897impl TypedStablePtr for ConditionLetPtr {
4898 type SyntaxNode = ConditionLet;
4899 fn untyped(&self) -> SyntaxStablePtrId {
4900 self.0
4901 }
4902 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionLet {
4903 ConditionLet::from_syntax_node(db, self.0.lookup(db))
4904 }
4905}
4906impl From<ConditionLetPtr> for SyntaxStablePtrId {
4907 fn from(ptr: ConditionLetPtr) -> Self {
4908 ptr.untyped()
4909 }
4910}
4911#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4912pub struct ConditionLetGreen(pub GreenId);
4913impl TypedSyntaxNode for ConditionLet {
4914 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionLet);
4915 type StablePtr = ConditionLetPtr;
4916 type Green = ConditionLetGreen;
4917 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4918 ConditionLetGreen(
4919 Arc::new(GreenNode {
4920 kind: SyntaxKind::ConditionLet,
4921 details: GreenNodeDetails::Node {
4922 children: [
4923 TerminalLet::missing(db).0,
4924 PatternListOr::missing(db).0,
4925 TerminalEq::missing(db).0,
4926 Expr::missing(db).0,
4927 ]
4928 .into(),
4929 width: TextWidth::default(),
4930 },
4931 })
4932 .intern(db),
4933 )
4934 }
4935 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4936 let kind = node.kind(db);
4937 assert_eq!(
4938 kind,
4939 SyntaxKind::ConditionLet,
4940 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4941 kind,
4942 SyntaxKind::ConditionLet
4943 );
4944 Self { node }
4945 }
4946 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4947 let kind = node.kind(db);
4948 if kind == SyntaxKind::ConditionLet { Some(Self::from_syntax_node(db, node)) } else { None }
4949 }
4950 fn as_syntax_node(&self) -> SyntaxNode {
4951 self.node
4952 }
4953 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
4954 ConditionLetPtr(self.node.stable_ptr(db))
4955 }
4956}
4957#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4958pub struct ConditionExpr {
4959 node: SyntaxNode,
4960}
4961impl ConditionExpr {
4962 pub const INDEX_EXPR: usize = 0;
4963 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ConditionExprGreen {
4964 let children = [expr.0];
4965 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
4966 ConditionExprGreen(
4967 Arc::new(GreenNode {
4968 kind: SyntaxKind::ConditionExpr,
4969 details: GreenNodeDetails::Node { children: children.into(), width },
4970 })
4971 .intern(db),
4972 )
4973 }
4974}
4975impl ConditionExpr {
4976 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4977 Expr::from_syntax_node(db, self.node.get_children(db)[0])
4978 }
4979}
4980#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4981pub struct ConditionExprPtr(pub SyntaxStablePtrId);
4982impl ConditionExprPtr {}
4983impl TypedStablePtr for ConditionExprPtr {
4984 type SyntaxNode = ConditionExpr;
4985 fn untyped(&self) -> SyntaxStablePtrId {
4986 self.0
4987 }
4988 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionExpr {
4989 ConditionExpr::from_syntax_node(db, self.0.lookup(db))
4990 }
4991}
4992impl From<ConditionExprPtr> for SyntaxStablePtrId {
4993 fn from(ptr: ConditionExprPtr) -> Self {
4994 ptr.untyped()
4995 }
4996}
4997#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4998pub struct ConditionExprGreen(pub GreenId);
4999impl TypedSyntaxNode for ConditionExpr {
5000 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionExpr);
5001 type StablePtr = ConditionExprPtr;
5002 type Green = ConditionExprGreen;
5003 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5004 ConditionExprGreen(
5005 Arc::new(GreenNode {
5006 kind: SyntaxKind::ConditionExpr,
5007 details: GreenNodeDetails::Node {
5008 children: [Expr::missing(db).0].into(),
5009 width: TextWidth::default(),
5010 },
5011 })
5012 .intern(db),
5013 )
5014 }
5015 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5016 let kind = node.kind(db);
5017 assert_eq!(
5018 kind,
5019 SyntaxKind::ConditionExpr,
5020 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5021 kind,
5022 SyntaxKind::ConditionExpr
5023 );
5024 Self { node }
5025 }
5026 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5027 let kind = node.kind(db);
5028 if kind == SyntaxKind::ConditionExpr {
5029 Some(Self::from_syntax_node(db, node))
5030 } else {
5031 None
5032 }
5033 }
5034 fn as_syntax_node(&self) -> SyntaxNode {
5035 self.node
5036 }
5037 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5038 ConditionExprPtr(self.node.stable_ptr(db))
5039 }
5040}
5041#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5042pub enum BlockOrIf {
5043 Block(ExprBlock),
5044 If(ExprIf),
5045}
5046#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5047pub struct BlockOrIfPtr(pub SyntaxStablePtrId);
5048impl TypedStablePtr for BlockOrIfPtr {
5049 type SyntaxNode = BlockOrIf;
5050 fn untyped(&self) -> SyntaxStablePtrId {
5051 self.0
5052 }
5053 fn lookup(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
5054 BlockOrIf::from_syntax_node(db, self.0.lookup(db))
5055 }
5056}
5057impl From<BlockOrIfPtr> for SyntaxStablePtrId {
5058 fn from(ptr: BlockOrIfPtr) -> Self {
5059 ptr.untyped()
5060 }
5061}
5062impl From<ExprBlockPtr> for BlockOrIfPtr {
5063 fn from(value: ExprBlockPtr) -> Self {
5064 Self(value.0)
5065 }
5066}
5067impl From<ExprIfPtr> for BlockOrIfPtr {
5068 fn from(value: ExprIfPtr) -> Self {
5069 Self(value.0)
5070 }
5071}
5072impl From<ExprBlockGreen> for BlockOrIfGreen {
5073 fn from(value: ExprBlockGreen) -> Self {
5074 Self(value.0)
5075 }
5076}
5077impl From<ExprIfGreen> for BlockOrIfGreen {
5078 fn from(value: ExprIfGreen) -> Self {
5079 Self(value.0)
5080 }
5081}
5082#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5083pub struct BlockOrIfGreen(pub GreenId);
5084impl TypedSyntaxNode for BlockOrIf {
5085 const OPTIONAL_KIND: Option<SyntaxKind> = None;
5086 type StablePtr = BlockOrIfPtr;
5087 type Green = BlockOrIfGreen;
5088 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5089 panic!("No missing variant.");
5090 }
5091 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5092 let kind = node.kind(db);
5093 match kind {
5094 SyntaxKind::ExprBlock => BlockOrIf::Block(ExprBlock::from_syntax_node(db, node)),
5095 SyntaxKind::ExprIf => BlockOrIf::If(ExprIf::from_syntax_node(db, node)),
5096 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BlockOrIf"),
5097 }
5098 }
5099 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5100 let kind = node.kind(db);
5101 match kind {
5102 SyntaxKind::ExprBlock => Some(BlockOrIf::Block(ExprBlock::from_syntax_node(db, node))),
5103 SyntaxKind::ExprIf => Some(BlockOrIf::If(ExprIf::from_syntax_node(db, node))),
5104 _ => None,
5105 }
5106 }
5107 fn as_syntax_node(&self) -> SyntaxNode {
5108 match self {
5109 BlockOrIf::Block(x) => x.as_syntax_node(),
5110 BlockOrIf::If(x) => x.as_syntax_node(),
5111 }
5112 }
5113 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5114 BlockOrIfPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
5115 }
5116}
5117impl BlockOrIf {
5118 pub fn is_variant(kind: SyntaxKind) -> bool {
5120 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::ExprIf)
5121 }
5122}
5123#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5124pub struct ExprLoop {
5125 node: SyntaxNode,
5126}
5127impl ExprLoop {
5128 pub const INDEX_LOOP_KW: usize = 0;
5129 pub const INDEX_BODY: usize = 1;
5130 pub fn new_green(
5131 db: &dyn SyntaxGroup,
5132 loop_kw: TerminalLoopGreen,
5133 body: ExprBlockGreen,
5134 ) -> ExprLoopGreen {
5135 let children = [loop_kw.0, body.0];
5136 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5137 ExprLoopGreen(
5138 Arc::new(GreenNode {
5139 kind: SyntaxKind::ExprLoop,
5140 details: GreenNodeDetails::Node { children: children.into(), width },
5141 })
5142 .intern(db),
5143 )
5144 }
5145}
5146impl ExprLoop {
5147 pub fn loop_kw(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
5148 TerminalLoop::from_syntax_node(db, self.node.get_children(db)[0])
5149 }
5150 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5151 ExprBlock::from_syntax_node(db, self.node.get_children(db)[1])
5152 }
5153}
5154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5155pub struct ExprLoopPtr(pub SyntaxStablePtrId);
5156impl ExprLoopPtr {}
5157impl TypedStablePtr for ExprLoopPtr {
5158 type SyntaxNode = ExprLoop;
5159 fn untyped(&self) -> SyntaxStablePtrId {
5160 self.0
5161 }
5162 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprLoop {
5163 ExprLoop::from_syntax_node(db, self.0.lookup(db))
5164 }
5165}
5166impl From<ExprLoopPtr> for SyntaxStablePtrId {
5167 fn from(ptr: ExprLoopPtr) -> Self {
5168 ptr.untyped()
5169 }
5170}
5171#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5172pub struct ExprLoopGreen(pub GreenId);
5173impl TypedSyntaxNode for ExprLoop {
5174 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprLoop);
5175 type StablePtr = ExprLoopPtr;
5176 type Green = ExprLoopGreen;
5177 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5178 ExprLoopGreen(
5179 Arc::new(GreenNode {
5180 kind: SyntaxKind::ExprLoop,
5181 details: GreenNodeDetails::Node {
5182 children: [TerminalLoop::missing(db).0, ExprBlock::missing(db).0].into(),
5183 width: TextWidth::default(),
5184 },
5185 })
5186 .intern(db),
5187 )
5188 }
5189 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5190 let kind = node.kind(db);
5191 assert_eq!(
5192 kind,
5193 SyntaxKind::ExprLoop,
5194 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5195 kind,
5196 SyntaxKind::ExprLoop
5197 );
5198 Self { node }
5199 }
5200 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5201 let kind = node.kind(db);
5202 if kind == SyntaxKind::ExprLoop { Some(Self::from_syntax_node(db, node)) } else { None }
5203 }
5204 fn as_syntax_node(&self) -> SyntaxNode {
5205 self.node
5206 }
5207 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5208 ExprLoopPtr(self.node.stable_ptr(db))
5209 }
5210}
5211#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5212pub struct ExprWhile {
5213 node: SyntaxNode,
5214}
5215impl ExprWhile {
5216 pub const INDEX_WHILE_KW: usize = 0;
5217 pub const INDEX_CONDITIONS: usize = 1;
5218 pub const INDEX_BODY: usize = 2;
5219 pub fn new_green(
5220 db: &dyn SyntaxGroup,
5221 while_kw: TerminalWhileGreen,
5222 conditions: ConditionListAndGreen,
5223 body: ExprBlockGreen,
5224 ) -> ExprWhileGreen {
5225 let children = [while_kw.0, conditions.0, body.0];
5226 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5227 ExprWhileGreen(
5228 Arc::new(GreenNode {
5229 kind: SyntaxKind::ExprWhile,
5230 details: GreenNodeDetails::Node { children: children.into(), width },
5231 })
5232 .intern(db),
5233 )
5234 }
5235}
5236impl ExprWhile {
5237 pub fn while_kw(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
5238 TerminalWhile::from_syntax_node(db, self.node.get_children(db)[0])
5239 }
5240 pub fn conditions(&self, db: &dyn SyntaxGroup) -> ConditionListAnd {
5241 ConditionListAnd::from_syntax_node(db, self.node.get_children(db)[1])
5242 }
5243 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5244 ExprBlock::from_syntax_node(db, self.node.get_children(db)[2])
5245 }
5246}
5247#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5248pub struct ExprWhilePtr(pub SyntaxStablePtrId);
5249impl ExprWhilePtr {}
5250impl TypedStablePtr for ExprWhilePtr {
5251 type SyntaxNode = ExprWhile;
5252 fn untyped(&self) -> SyntaxStablePtrId {
5253 self.0
5254 }
5255 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprWhile {
5256 ExprWhile::from_syntax_node(db, self.0.lookup(db))
5257 }
5258}
5259impl From<ExprWhilePtr> for SyntaxStablePtrId {
5260 fn from(ptr: ExprWhilePtr) -> Self {
5261 ptr.untyped()
5262 }
5263}
5264#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5265pub struct ExprWhileGreen(pub GreenId);
5266impl TypedSyntaxNode for ExprWhile {
5267 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprWhile);
5268 type StablePtr = ExprWhilePtr;
5269 type Green = ExprWhileGreen;
5270 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5271 ExprWhileGreen(
5272 Arc::new(GreenNode {
5273 kind: SyntaxKind::ExprWhile,
5274 details: GreenNodeDetails::Node {
5275 children: [
5276 TerminalWhile::missing(db).0,
5277 ConditionListAnd::missing(db).0,
5278 ExprBlock::missing(db).0,
5279 ]
5280 .into(),
5281 width: TextWidth::default(),
5282 },
5283 })
5284 .intern(db),
5285 )
5286 }
5287 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5288 let kind = node.kind(db);
5289 assert_eq!(
5290 kind,
5291 SyntaxKind::ExprWhile,
5292 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5293 kind,
5294 SyntaxKind::ExprWhile
5295 );
5296 Self { node }
5297 }
5298 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5299 let kind = node.kind(db);
5300 if kind == SyntaxKind::ExprWhile { Some(Self::from_syntax_node(db, node)) } else { None }
5301 }
5302 fn as_syntax_node(&self) -> SyntaxNode {
5303 self.node
5304 }
5305 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5306 ExprWhilePtr(self.node.stable_ptr(db))
5307 }
5308}
5309#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5310pub struct ExprFor {
5311 node: SyntaxNode,
5312}
5313impl ExprFor {
5314 pub const INDEX_FOR_KW: usize = 0;
5315 pub const INDEX_PATTERN: usize = 1;
5316 pub const INDEX_IDENTIFIER: usize = 2;
5317 pub const INDEX_EXPR: usize = 3;
5318 pub const INDEX_BODY: usize = 4;
5319 pub fn new_green(
5320 db: &dyn SyntaxGroup,
5321 for_kw: TerminalForGreen,
5322 pattern: PatternGreen,
5323 identifier: TerminalIdentifierGreen,
5324 expr: ExprGreen,
5325 body: ExprBlockGreen,
5326 ) -> ExprForGreen {
5327 let children = [for_kw.0, pattern.0, identifier.0, expr.0, body.0];
5328 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5329 ExprForGreen(
5330 Arc::new(GreenNode {
5331 kind: SyntaxKind::ExprFor,
5332 details: GreenNodeDetails::Node { children: children.into(), width },
5333 })
5334 .intern(db),
5335 )
5336 }
5337}
5338impl ExprFor {
5339 pub fn for_kw(&self, db: &dyn SyntaxGroup) -> TerminalFor {
5340 TerminalFor::from_syntax_node(db, self.node.get_children(db)[0])
5341 }
5342 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
5343 Pattern::from_syntax_node(db, self.node.get_children(db)[1])
5344 }
5345 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
5346 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
5347 }
5348 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5349 Expr::from_syntax_node(db, self.node.get_children(db)[3])
5350 }
5351 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5352 ExprBlock::from_syntax_node(db, self.node.get_children(db)[4])
5353 }
5354}
5355#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5356pub struct ExprForPtr(pub SyntaxStablePtrId);
5357impl ExprForPtr {
5358 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
5359 let ptr = self.0.lookup_intern(db);
5360 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5361 PatternGreen(key_fields[0])
5362 } else {
5363 panic!("Unexpected key field query on root.");
5364 }
5365 }
5366 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
5367 let ptr = self.0.lookup_intern(db);
5368 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5369 TerminalIdentifierGreen(key_fields[1])
5370 } else {
5371 panic!("Unexpected key field query on root.");
5372 }
5373 }
5374}
5375impl TypedStablePtr for ExprForPtr {
5376 type SyntaxNode = ExprFor;
5377 fn untyped(&self) -> SyntaxStablePtrId {
5378 self.0
5379 }
5380 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFor {
5381 ExprFor::from_syntax_node(db, self.0.lookup(db))
5382 }
5383}
5384impl From<ExprForPtr> for SyntaxStablePtrId {
5385 fn from(ptr: ExprForPtr) -> Self {
5386 ptr.untyped()
5387 }
5388}
5389#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5390pub struct ExprForGreen(pub GreenId);
5391impl TypedSyntaxNode for ExprFor {
5392 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFor);
5393 type StablePtr = ExprForPtr;
5394 type Green = ExprForGreen;
5395 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5396 ExprForGreen(
5397 Arc::new(GreenNode {
5398 kind: SyntaxKind::ExprFor,
5399 details: GreenNodeDetails::Node {
5400 children: [
5401 TerminalFor::missing(db).0,
5402 Pattern::missing(db).0,
5403 TerminalIdentifier::missing(db).0,
5404 Expr::missing(db).0,
5405 ExprBlock::missing(db).0,
5406 ]
5407 .into(),
5408 width: TextWidth::default(),
5409 },
5410 })
5411 .intern(db),
5412 )
5413 }
5414 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5415 let kind = node.kind(db);
5416 assert_eq!(
5417 kind,
5418 SyntaxKind::ExprFor,
5419 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5420 kind,
5421 SyntaxKind::ExprFor
5422 );
5423 Self { node }
5424 }
5425 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5426 let kind = node.kind(db);
5427 if kind == SyntaxKind::ExprFor { Some(Self::from_syntax_node(db, node)) } else { None }
5428 }
5429 fn as_syntax_node(&self) -> SyntaxNode {
5430 self.node
5431 }
5432 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5433 ExprForPtr(self.node.stable_ptr(db))
5434 }
5435}
5436#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5437pub struct ElseClause {
5438 node: SyntaxNode,
5439}
5440impl ElseClause {
5441 pub const INDEX_ELSE_KW: usize = 0;
5442 pub const INDEX_ELSE_BLOCK_OR_IF: usize = 1;
5443 pub fn new_green(
5444 db: &dyn SyntaxGroup,
5445 else_kw: TerminalElseGreen,
5446 else_block_or_if: BlockOrIfGreen,
5447 ) -> ElseClauseGreen {
5448 let children = [else_kw.0, else_block_or_if.0];
5449 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5450 ElseClauseGreen(
5451 Arc::new(GreenNode {
5452 kind: SyntaxKind::ElseClause,
5453 details: GreenNodeDetails::Node { children: children.into(), width },
5454 })
5455 .intern(db),
5456 )
5457 }
5458}
5459impl ElseClause {
5460 pub fn else_kw(&self, db: &dyn SyntaxGroup) -> TerminalElse {
5461 TerminalElse::from_syntax_node(db, self.node.get_children(db)[0])
5462 }
5463 pub fn else_block_or_if(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
5464 BlockOrIf::from_syntax_node(db, self.node.get_children(db)[1])
5465 }
5466}
5467#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5468pub struct ElseClausePtr(pub SyntaxStablePtrId);
5469impl ElseClausePtr {}
5470impl TypedStablePtr for ElseClausePtr {
5471 type SyntaxNode = ElseClause;
5472 fn untyped(&self) -> SyntaxStablePtrId {
5473 self.0
5474 }
5475 fn lookup(&self, db: &dyn SyntaxGroup) -> ElseClause {
5476 ElseClause::from_syntax_node(db, self.0.lookup(db))
5477 }
5478}
5479impl From<ElseClausePtr> for SyntaxStablePtrId {
5480 fn from(ptr: ElseClausePtr) -> Self {
5481 ptr.untyped()
5482 }
5483}
5484#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5485pub struct ElseClauseGreen(pub GreenId);
5486impl TypedSyntaxNode for ElseClause {
5487 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ElseClause);
5488 type StablePtr = ElseClausePtr;
5489 type Green = ElseClauseGreen;
5490 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5491 ElseClauseGreen(
5492 Arc::new(GreenNode {
5493 kind: SyntaxKind::ElseClause,
5494 details: GreenNodeDetails::Node {
5495 children: [TerminalElse::missing(db).0, BlockOrIf::missing(db).0].into(),
5496 width: TextWidth::default(),
5497 },
5498 })
5499 .intern(db),
5500 )
5501 }
5502 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5503 let kind = node.kind(db);
5504 assert_eq!(
5505 kind,
5506 SyntaxKind::ElseClause,
5507 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5508 kind,
5509 SyntaxKind::ElseClause
5510 );
5511 Self { node }
5512 }
5513 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5514 let kind = node.kind(db);
5515 if kind == SyntaxKind::ElseClause { Some(Self::from_syntax_node(db, node)) } else { None }
5516 }
5517 fn as_syntax_node(&self) -> SyntaxNode {
5518 self.node
5519 }
5520 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5521 ElseClausePtr(self.node.stable_ptr(db))
5522 }
5523}
5524#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5525pub enum OptionElseClause {
5526 Empty(OptionElseClauseEmpty),
5527 ElseClause(ElseClause),
5528}
5529#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5530pub struct OptionElseClausePtr(pub SyntaxStablePtrId);
5531impl TypedStablePtr for OptionElseClausePtr {
5532 type SyntaxNode = OptionElseClause;
5533 fn untyped(&self) -> SyntaxStablePtrId {
5534 self.0
5535 }
5536 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
5537 OptionElseClause::from_syntax_node(db, self.0.lookup(db))
5538 }
5539}
5540impl From<OptionElseClausePtr> for SyntaxStablePtrId {
5541 fn from(ptr: OptionElseClausePtr) -> Self {
5542 ptr.untyped()
5543 }
5544}
5545impl From<OptionElseClauseEmptyPtr> for OptionElseClausePtr {
5546 fn from(value: OptionElseClauseEmptyPtr) -> Self {
5547 Self(value.0)
5548 }
5549}
5550impl From<ElseClausePtr> for OptionElseClausePtr {
5551 fn from(value: ElseClausePtr) -> Self {
5552 Self(value.0)
5553 }
5554}
5555impl From<OptionElseClauseEmptyGreen> for OptionElseClauseGreen {
5556 fn from(value: OptionElseClauseEmptyGreen) -> Self {
5557 Self(value.0)
5558 }
5559}
5560impl From<ElseClauseGreen> for OptionElseClauseGreen {
5561 fn from(value: ElseClauseGreen) -> Self {
5562 Self(value.0)
5563 }
5564}
5565#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5566pub struct OptionElseClauseGreen(pub GreenId);
5567impl TypedSyntaxNode for OptionElseClause {
5568 const OPTIONAL_KIND: Option<SyntaxKind> = None;
5569 type StablePtr = OptionElseClausePtr;
5570 type Green = OptionElseClauseGreen;
5571 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5572 panic!("No missing variant.");
5573 }
5574 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5575 let kind = node.kind(db);
5576 match kind {
5577 SyntaxKind::OptionElseClauseEmpty => {
5578 OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node))
5579 }
5580 SyntaxKind::ElseClause => {
5581 OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node))
5582 }
5583 _ => panic!(
5584 "Unexpected syntax kind {:?} when constructing {}.",
5585 kind, "OptionElseClause"
5586 ),
5587 }
5588 }
5589 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5590 let kind = node.kind(db);
5591 match kind {
5592 SyntaxKind::OptionElseClauseEmpty => {
5593 Some(OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node)))
5594 }
5595 SyntaxKind::ElseClause => {
5596 Some(OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node)))
5597 }
5598 _ => None,
5599 }
5600 }
5601 fn as_syntax_node(&self) -> SyntaxNode {
5602 match self {
5603 OptionElseClause::Empty(x) => x.as_syntax_node(),
5604 OptionElseClause::ElseClause(x) => x.as_syntax_node(),
5605 }
5606 }
5607 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5608 OptionElseClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
5609 }
5610}
5611impl OptionElseClause {
5612 pub fn is_variant(kind: SyntaxKind) -> bool {
5614 matches!(kind, SyntaxKind::OptionElseClauseEmpty | SyntaxKind::ElseClause)
5615 }
5616}
5617#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5618pub struct OptionElseClauseEmpty {
5619 node: SyntaxNode,
5620}
5621impl OptionElseClauseEmpty {
5622 pub fn new_green(db: &dyn SyntaxGroup) -> OptionElseClauseEmptyGreen {
5623 let children = [];
5624 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5625 OptionElseClauseEmptyGreen(
5626 Arc::new(GreenNode {
5627 kind: SyntaxKind::OptionElseClauseEmpty,
5628 details: GreenNodeDetails::Node { children: children.into(), width },
5629 })
5630 .intern(db),
5631 )
5632 }
5633}
5634impl OptionElseClauseEmpty {}
5635#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5636pub struct OptionElseClauseEmptyPtr(pub SyntaxStablePtrId);
5637impl OptionElseClauseEmptyPtr {}
5638impl TypedStablePtr for OptionElseClauseEmptyPtr {
5639 type SyntaxNode = OptionElseClauseEmpty;
5640 fn untyped(&self) -> SyntaxStablePtrId {
5641 self.0
5642 }
5643 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClauseEmpty {
5644 OptionElseClauseEmpty::from_syntax_node(db, self.0.lookup(db))
5645 }
5646}
5647impl From<OptionElseClauseEmptyPtr> for SyntaxStablePtrId {
5648 fn from(ptr: OptionElseClauseEmptyPtr) -> Self {
5649 ptr.untyped()
5650 }
5651}
5652#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5653pub struct OptionElseClauseEmptyGreen(pub GreenId);
5654impl TypedSyntaxNode for OptionElseClauseEmpty {
5655 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionElseClauseEmpty);
5656 type StablePtr = OptionElseClauseEmptyPtr;
5657 type Green = OptionElseClauseEmptyGreen;
5658 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5659 OptionElseClauseEmptyGreen(
5660 Arc::new(GreenNode {
5661 kind: SyntaxKind::OptionElseClauseEmpty,
5662 details: GreenNodeDetails::Node {
5663 children: [].into(),
5664 width: TextWidth::default(),
5665 },
5666 })
5667 .intern(db),
5668 )
5669 }
5670 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5671 let kind = node.kind(db);
5672 assert_eq!(
5673 kind,
5674 SyntaxKind::OptionElseClauseEmpty,
5675 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5676 kind,
5677 SyntaxKind::OptionElseClauseEmpty
5678 );
5679 Self { node }
5680 }
5681 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5682 let kind = node.kind(db);
5683 if kind == SyntaxKind::OptionElseClauseEmpty {
5684 Some(Self::from_syntax_node(db, node))
5685 } else {
5686 None
5687 }
5688 }
5689 fn as_syntax_node(&self) -> SyntaxNode {
5690 self.node
5691 }
5692 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5693 OptionElseClauseEmptyPtr(self.node.stable_ptr(db))
5694 }
5695}
5696#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5697pub struct ExprErrorPropagate {
5698 node: SyntaxNode,
5699}
5700impl ExprErrorPropagate {
5701 pub const INDEX_EXPR: usize = 0;
5702 pub const INDEX_OP: usize = 1;
5703 pub fn new_green(
5704 db: &dyn SyntaxGroup,
5705 expr: ExprGreen,
5706 op: TerminalQuestionMarkGreen,
5707 ) -> ExprErrorPropagateGreen {
5708 let children = [expr.0, op.0];
5709 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5710 ExprErrorPropagateGreen(
5711 Arc::new(GreenNode {
5712 kind: SyntaxKind::ExprErrorPropagate,
5713 details: GreenNodeDetails::Node { children: children.into(), width },
5714 })
5715 .intern(db),
5716 )
5717 }
5718}
5719impl ExprErrorPropagate {
5720 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5721 Expr::from_syntax_node(db, self.node.get_children(db)[0])
5722 }
5723 pub fn op(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
5724 TerminalQuestionMark::from_syntax_node(db, self.node.get_children(db)[1])
5725 }
5726}
5727#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5728pub struct ExprErrorPropagatePtr(pub SyntaxStablePtrId);
5729impl ExprErrorPropagatePtr {}
5730impl TypedStablePtr for ExprErrorPropagatePtr {
5731 type SyntaxNode = ExprErrorPropagate;
5732 fn untyped(&self) -> SyntaxStablePtrId {
5733 self.0
5734 }
5735 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprErrorPropagate {
5736 ExprErrorPropagate::from_syntax_node(db, self.0.lookup(db))
5737 }
5738}
5739impl From<ExprErrorPropagatePtr> for SyntaxStablePtrId {
5740 fn from(ptr: ExprErrorPropagatePtr) -> Self {
5741 ptr.untyped()
5742 }
5743}
5744#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5745pub struct ExprErrorPropagateGreen(pub GreenId);
5746impl TypedSyntaxNode for ExprErrorPropagate {
5747 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprErrorPropagate);
5748 type StablePtr = ExprErrorPropagatePtr;
5749 type Green = ExprErrorPropagateGreen;
5750 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5751 ExprErrorPropagateGreen(
5752 Arc::new(GreenNode {
5753 kind: SyntaxKind::ExprErrorPropagate,
5754 details: GreenNodeDetails::Node {
5755 children: [Expr::missing(db).0, TerminalQuestionMark::missing(db).0].into(),
5756 width: TextWidth::default(),
5757 },
5758 })
5759 .intern(db),
5760 )
5761 }
5762 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5763 let kind = node.kind(db);
5764 assert_eq!(
5765 kind,
5766 SyntaxKind::ExprErrorPropagate,
5767 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5768 kind,
5769 SyntaxKind::ExprErrorPropagate
5770 );
5771 Self { node }
5772 }
5773 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5774 let kind = node.kind(db);
5775 if kind == SyntaxKind::ExprErrorPropagate {
5776 Some(Self::from_syntax_node(db, node))
5777 } else {
5778 None
5779 }
5780 }
5781 fn as_syntax_node(&self) -> SyntaxNode {
5782 self.node
5783 }
5784 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5785 ExprErrorPropagatePtr(self.node.stable_ptr(db))
5786 }
5787}
5788#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5789pub struct ExprIndexed {
5790 node: SyntaxNode,
5791}
5792impl ExprIndexed {
5793 pub const INDEX_EXPR: usize = 0;
5794 pub const INDEX_LBRACK: usize = 1;
5795 pub const INDEX_INDEX_EXPR: usize = 2;
5796 pub const INDEX_RBRACK: usize = 3;
5797 pub fn new_green(
5798 db: &dyn SyntaxGroup,
5799 expr: ExprGreen,
5800 lbrack: TerminalLBrackGreen,
5801 index_expr: ExprGreen,
5802 rbrack: TerminalRBrackGreen,
5803 ) -> ExprIndexedGreen {
5804 let children = [expr.0, lbrack.0, index_expr.0, rbrack.0];
5805 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5806 ExprIndexedGreen(
5807 Arc::new(GreenNode {
5808 kind: SyntaxKind::ExprIndexed,
5809 details: GreenNodeDetails::Node { children: children.into(), width },
5810 })
5811 .intern(db),
5812 )
5813 }
5814}
5815impl ExprIndexed {
5816 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5817 Expr::from_syntax_node(db, self.node.get_children(db)[0])
5818 }
5819 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5820 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[1])
5821 }
5822 pub fn index_expr(&self, db: &dyn SyntaxGroup) -> Expr {
5823 Expr::from_syntax_node(db, self.node.get_children(db)[2])
5824 }
5825 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5826 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[3])
5827 }
5828}
5829#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5830pub struct ExprIndexedPtr(pub SyntaxStablePtrId);
5831impl ExprIndexedPtr {}
5832impl TypedStablePtr for ExprIndexedPtr {
5833 type SyntaxNode = ExprIndexed;
5834 fn untyped(&self) -> SyntaxStablePtrId {
5835 self.0
5836 }
5837 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIndexed {
5838 ExprIndexed::from_syntax_node(db, self.0.lookup(db))
5839 }
5840}
5841impl From<ExprIndexedPtr> for SyntaxStablePtrId {
5842 fn from(ptr: ExprIndexedPtr) -> Self {
5843 ptr.untyped()
5844 }
5845}
5846#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5847pub struct ExprIndexedGreen(pub GreenId);
5848impl TypedSyntaxNode for ExprIndexed {
5849 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIndexed);
5850 type StablePtr = ExprIndexedPtr;
5851 type Green = ExprIndexedGreen;
5852 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5853 ExprIndexedGreen(
5854 Arc::new(GreenNode {
5855 kind: SyntaxKind::ExprIndexed,
5856 details: GreenNodeDetails::Node {
5857 children: [
5858 Expr::missing(db).0,
5859 TerminalLBrack::missing(db).0,
5860 Expr::missing(db).0,
5861 TerminalRBrack::missing(db).0,
5862 ]
5863 .into(),
5864 width: TextWidth::default(),
5865 },
5866 })
5867 .intern(db),
5868 )
5869 }
5870 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5871 let kind = node.kind(db);
5872 assert_eq!(
5873 kind,
5874 SyntaxKind::ExprIndexed,
5875 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5876 kind,
5877 SyntaxKind::ExprIndexed
5878 );
5879 Self { node }
5880 }
5881 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5882 let kind = node.kind(db);
5883 if kind == SyntaxKind::ExprIndexed { Some(Self::from_syntax_node(db, node)) } else { None }
5884 }
5885 fn as_syntax_node(&self) -> SyntaxNode {
5886 self.node
5887 }
5888 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5889 ExprIndexedPtr(self.node.stable_ptr(db))
5890 }
5891}
5892#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5893pub struct ExprFixedSizeArray {
5894 node: SyntaxNode,
5895}
5896impl ExprFixedSizeArray {
5897 pub const INDEX_LBRACK: usize = 0;
5898 pub const INDEX_EXPRS: usize = 1;
5899 pub const INDEX_SIZE: usize = 2;
5900 pub const INDEX_RBRACK: usize = 3;
5901 pub fn new_green(
5902 db: &dyn SyntaxGroup,
5903 lbrack: TerminalLBrackGreen,
5904 exprs: ExprListGreen,
5905 size: OptionFixedSizeArraySizeGreen,
5906 rbrack: TerminalRBrackGreen,
5907 ) -> ExprFixedSizeArrayGreen {
5908 let children = [lbrack.0, exprs.0, size.0, rbrack.0];
5909 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
5910 ExprFixedSizeArrayGreen(
5911 Arc::new(GreenNode {
5912 kind: SyntaxKind::ExprFixedSizeArray,
5913 details: GreenNodeDetails::Node { children: children.into(), width },
5914 })
5915 .intern(db),
5916 )
5917 }
5918}
5919impl ExprFixedSizeArray {
5920 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5921 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
5922 }
5923 pub fn exprs(&self, db: &dyn SyntaxGroup) -> ExprList {
5924 ExprList::from_syntax_node(db, self.node.get_children(db)[1])
5925 }
5926 pub fn size(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
5927 OptionFixedSizeArraySize::from_syntax_node(db, self.node.get_children(db)[2])
5928 }
5929 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5930 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[3])
5931 }
5932}
5933#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5934pub struct ExprFixedSizeArrayPtr(pub SyntaxStablePtrId);
5935impl ExprFixedSizeArrayPtr {}
5936impl TypedStablePtr for ExprFixedSizeArrayPtr {
5937 type SyntaxNode = ExprFixedSizeArray;
5938 fn untyped(&self) -> SyntaxStablePtrId {
5939 self.0
5940 }
5941 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFixedSizeArray {
5942 ExprFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
5943 }
5944}
5945impl From<ExprFixedSizeArrayPtr> for SyntaxStablePtrId {
5946 fn from(ptr: ExprFixedSizeArrayPtr) -> Self {
5947 ptr.untyped()
5948 }
5949}
5950#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5951pub struct ExprFixedSizeArrayGreen(pub GreenId);
5952impl TypedSyntaxNode for ExprFixedSizeArray {
5953 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFixedSizeArray);
5954 type StablePtr = ExprFixedSizeArrayPtr;
5955 type Green = ExprFixedSizeArrayGreen;
5956 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5957 ExprFixedSizeArrayGreen(
5958 Arc::new(GreenNode {
5959 kind: SyntaxKind::ExprFixedSizeArray,
5960 details: GreenNodeDetails::Node {
5961 children: [
5962 TerminalLBrack::missing(db).0,
5963 ExprList::missing(db).0,
5964 OptionFixedSizeArraySize::missing(db).0,
5965 TerminalRBrack::missing(db).0,
5966 ]
5967 .into(),
5968 width: TextWidth::default(),
5969 },
5970 })
5971 .intern(db),
5972 )
5973 }
5974 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5975 let kind = node.kind(db);
5976 assert_eq!(
5977 kind,
5978 SyntaxKind::ExprFixedSizeArray,
5979 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5980 kind,
5981 SyntaxKind::ExprFixedSizeArray
5982 );
5983 Self { node }
5984 }
5985 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5986 let kind = node.kind(db);
5987 if kind == SyntaxKind::ExprFixedSizeArray {
5988 Some(Self::from_syntax_node(db, node))
5989 } else {
5990 None
5991 }
5992 }
5993 fn as_syntax_node(&self) -> SyntaxNode {
5994 self.node
5995 }
5996 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
5997 ExprFixedSizeArrayPtr(self.node.stable_ptr(db))
5998 }
5999}
6000#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6001pub struct FixedSizeArraySize {
6002 node: SyntaxNode,
6003}
6004impl FixedSizeArraySize {
6005 pub const INDEX_SEMICOLON: usize = 0;
6006 pub const INDEX_SIZE: usize = 1;
6007 pub fn new_green(
6008 db: &dyn SyntaxGroup,
6009 semicolon: TerminalSemicolonGreen,
6010 size: ExprGreen,
6011 ) -> FixedSizeArraySizeGreen {
6012 let children = [semicolon.0, size.0];
6013 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6014 FixedSizeArraySizeGreen(
6015 Arc::new(GreenNode {
6016 kind: SyntaxKind::FixedSizeArraySize,
6017 details: GreenNodeDetails::Node { children: children.into(), width },
6018 })
6019 .intern(db),
6020 )
6021 }
6022}
6023impl FixedSizeArraySize {
6024 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
6025 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[0])
6026 }
6027 pub fn size(&self, db: &dyn SyntaxGroup) -> Expr {
6028 Expr::from_syntax_node(db, self.node.get_children(db)[1])
6029 }
6030}
6031#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6032pub struct FixedSizeArraySizePtr(pub SyntaxStablePtrId);
6033impl FixedSizeArraySizePtr {}
6034impl TypedStablePtr for FixedSizeArraySizePtr {
6035 type SyntaxNode = FixedSizeArraySize;
6036 fn untyped(&self) -> SyntaxStablePtrId {
6037 self.0
6038 }
6039 fn lookup(&self, db: &dyn SyntaxGroup) -> FixedSizeArraySize {
6040 FixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
6041 }
6042}
6043impl From<FixedSizeArraySizePtr> for SyntaxStablePtrId {
6044 fn from(ptr: FixedSizeArraySizePtr) -> Self {
6045 ptr.untyped()
6046 }
6047}
6048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6049pub struct FixedSizeArraySizeGreen(pub GreenId);
6050impl TypedSyntaxNode for FixedSizeArraySize {
6051 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FixedSizeArraySize);
6052 type StablePtr = FixedSizeArraySizePtr;
6053 type Green = FixedSizeArraySizeGreen;
6054 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6055 FixedSizeArraySizeGreen(
6056 Arc::new(GreenNode {
6057 kind: SyntaxKind::FixedSizeArraySize,
6058 details: GreenNodeDetails::Node {
6059 children: [TerminalSemicolon::missing(db).0, Expr::missing(db).0].into(),
6060 width: TextWidth::default(),
6061 },
6062 })
6063 .intern(db),
6064 )
6065 }
6066 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6067 let kind = node.kind(db);
6068 assert_eq!(
6069 kind,
6070 SyntaxKind::FixedSizeArraySize,
6071 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6072 kind,
6073 SyntaxKind::FixedSizeArraySize
6074 );
6075 Self { node }
6076 }
6077 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6078 let kind = node.kind(db);
6079 if kind == SyntaxKind::FixedSizeArraySize {
6080 Some(Self::from_syntax_node(db, node))
6081 } else {
6082 None
6083 }
6084 }
6085 fn as_syntax_node(&self) -> SyntaxNode {
6086 self.node
6087 }
6088 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6089 FixedSizeArraySizePtr(self.node.stable_ptr(db))
6090 }
6091}
6092#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6093pub enum OptionFixedSizeArraySize {
6094 Empty(OptionFixedSizeArraySizeEmpty),
6095 FixedSizeArraySize(FixedSizeArraySize),
6096}
6097#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6098pub struct OptionFixedSizeArraySizePtr(pub SyntaxStablePtrId);
6099impl TypedStablePtr for OptionFixedSizeArraySizePtr {
6100 type SyntaxNode = OptionFixedSizeArraySize;
6101 fn untyped(&self) -> SyntaxStablePtrId {
6102 self.0
6103 }
6104 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
6105 OptionFixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
6106 }
6107}
6108impl From<OptionFixedSizeArraySizePtr> for SyntaxStablePtrId {
6109 fn from(ptr: OptionFixedSizeArraySizePtr) -> Self {
6110 ptr.untyped()
6111 }
6112}
6113impl From<OptionFixedSizeArraySizeEmptyPtr> for OptionFixedSizeArraySizePtr {
6114 fn from(value: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6115 Self(value.0)
6116 }
6117}
6118impl From<FixedSizeArraySizePtr> for OptionFixedSizeArraySizePtr {
6119 fn from(value: FixedSizeArraySizePtr) -> Self {
6120 Self(value.0)
6121 }
6122}
6123impl From<OptionFixedSizeArraySizeEmptyGreen> for OptionFixedSizeArraySizeGreen {
6124 fn from(value: OptionFixedSizeArraySizeEmptyGreen) -> Self {
6125 Self(value.0)
6126 }
6127}
6128impl From<FixedSizeArraySizeGreen> for OptionFixedSizeArraySizeGreen {
6129 fn from(value: FixedSizeArraySizeGreen) -> Self {
6130 Self(value.0)
6131 }
6132}
6133#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6134pub struct OptionFixedSizeArraySizeGreen(pub GreenId);
6135impl TypedSyntaxNode for OptionFixedSizeArraySize {
6136 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6137 type StablePtr = OptionFixedSizeArraySizePtr;
6138 type Green = OptionFixedSizeArraySizeGreen;
6139 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6140 panic!("No missing variant.");
6141 }
6142 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6143 let kind = node.kind(db);
6144 match kind {
6145 SyntaxKind::OptionFixedSizeArraySizeEmpty => OptionFixedSizeArraySize::Empty(
6146 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6147 ),
6148 SyntaxKind::FixedSizeArraySize => OptionFixedSizeArraySize::FixedSizeArraySize(
6149 FixedSizeArraySize::from_syntax_node(db, node),
6150 ),
6151 _ => panic!(
6152 "Unexpected syntax kind {:?} when constructing {}.",
6153 kind, "OptionFixedSizeArraySize"
6154 ),
6155 }
6156 }
6157 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6158 let kind = node.kind(db);
6159 match kind {
6160 SyntaxKind::OptionFixedSizeArraySizeEmpty => Some(OptionFixedSizeArraySize::Empty(
6161 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6162 )),
6163 SyntaxKind::FixedSizeArraySize => Some(OptionFixedSizeArraySize::FixedSizeArraySize(
6164 FixedSizeArraySize::from_syntax_node(db, node),
6165 )),
6166 _ => None,
6167 }
6168 }
6169 fn as_syntax_node(&self) -> SyntaxNode {
6170 match self {
6171 OptionFixedSizeArraySize::Empty(x) => x.as_syntax_node(),
6172 OptionFixedSizeArraySize::FixedSizeArraySize(x) => x.as_syntax_node(),
6173 }
6174 }
6175 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6176 OptionFixedSizeArraySizePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
6177 }
6178}
6179impl OptionFixedSizeArraySize {
6180 pub fn is_variant(kind: SyntaxKind) -> bool {
6182 matches!(kind, SyntaxKind::OptionFixedSizeArraySizeEmpty | SyntaxKind::FixedSizeArraySize)
6183 }
6184}
6185#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6186pub struct OptionFixedSizeArraySizeEmpty {
6187 node: SyntaxNode,
6188}
6189impl OptionFixedSizeArraySizeEmpty {
6190 pub fn new_green(db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmptyGreen {
6191 let children = [];
6192 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6193 OptionFixedSizeArraySizeEmptyGreen(
6194 Arc::new(GreenNode {
6195 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6196 details: GreenNodeDetails::Node { children: children.into(), width },
6197 })
6198 .intern(db),
6199 )
6200 }
6201}
6202impl OptionFixedSizeArraySizeEmpty {}
6203#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6204pub struct OptionFixedSizeArraySizeEmptyPtr(pub SyntaxStablePtrId);
6205impl OptionFixedSizeArraySizeEmptyPtr {}
6206impl TypedStablePtr for OptionFixedSizeArraySizeEmptyPtr {
6207 type SyntaxNode = OptionFixedSizeArraySizeEmpty;
6208 fn untyped(&self) -> SyntaxStablePtrId {
6209 self.0
6210 }
6211 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmpty {
6212 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, self.0.lookup(db))
6213 }
6214}
6215impl From<OptionFixedSizeArraySizeEmptyPtr> for SyntaxStablePtrId {
6216 fn from(ptr: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6217 ptr.untyped()
6218 }
6219}
6220#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6221pub struct OptionFixedSizeArraySizeEmptyGreen(pub GreenId);
6222impl TypedSyntaxNode for OptionFixedSizeArraySizeEmpty {
6223 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionFixedSizeArraySizeEmpty);
6224 type StablePtr = OptionFixedSizeArraySizeEmptyPtr;
6225 type Green = OptionFixedSizeArraySizeEmptyGreen;
6226 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6227 OptionFixedSizeArraySizeEmptyGreen(
6228 Arc::new(GreenNode {
6229 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6230 details: GreenNodeDetails::Node {
6231 children: [].into(),
6232 width: TextWidth::default(),
6233 },
6234 })
6235 .intern(db),
6236 )
6237 }
6238 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6239 let kind = node.kind(db);
6240 assert_eq!(
6241 kind,
6242 SyntaxKind::OptionFixedSizeArraySizeEmpty,
6243 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6244 kind,
6245 SyntaxKind::OptionFixedSizeArraySizeEmpty
6246 );
6247 Self { node }
6248 }
6249 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6250 let kind = node.kind(db);
6251 if kind == SyntaxKind::OptionFixedSizeArraySizeEmpty {
6252 Some(Self::from_syntax_node(db, node))
6253 } else {
6254 None
6255 }
6256 }
6257 fn as_syntax_node(&self) -> SyntaxNode {
6258 self.node
6259 }
6260 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6261 OptionFixedSizeArraySizeEmptyPtr(self.node.stable_ptr(db))
6262 }
6263}
6264#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6265pub struct ExprClosure {
6266 node: SyntaxNode,
6267}
6268impl ExprClosure {
6269 pub const INDEX_WRAPPER: usize = 0;
6270 pub const INDEX_RET_TY: usize = 1;
6271 pub const INDEX_OPTIONAL_NO_PANIC: usize = 2;
6272 pub const INDEX_EXPR: usize = 3;
6273 pub fn new_green(
6274 db: &dyn SyntaxGroup,
6275 wrapper: ClosureParamWrapperGreen,
6276 ret_ty: OptionReturnTypeClauseGreen,
6277 optional_no_panic: OptionTerminalNoPanicGreen,
6278 expr: ExprGreen,
6279 ) -> ExprClosureGreen {
6280 let children = [wrapper.0, ret_ty.0, optional_no_panic.0, expr.0];
6281 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6282 ExprClosureGreen(
6283 Arc::new(GreenNode {
6284 kind: SyntaxKind::ExprClosure,
6285 details: GreenNodeDetails::Node { children: children.into(), width },
6286 })
6287 .intern(db),
6288 )
6289 }
6290}
6291impl ExprClosure {
6292 pub fn wrapper(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6293 ClosureParamWrapper::from_syntax_node(db, self.node.get_children(db)[0])
6294 }
6295 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
6296 OptionReturnTypeClause::from_syntax_node(db, self.node.get_children(db)[1])
6297 }
6298 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
6299 OptionTerminalNoPanic::from_syntax_node(db, self.node.get_children(db)[2])
6300 }
6301 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6302 Expr::from_syntax_node(db, self.node.get_children(db)[3])
6303 }
6304}
6305#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6306pub struct ExprClosurePtr(pub SyntaxStablePtrId);
6307impl ExprClosurePtr {}
6308impl TypedStablePtr for ExprClosurePtr {
6309 type SyntaxNode = ExprClosure;
6310 fn untyped(&self) -> SyntaxStablePtrId {
6311 self.0
6312 }
6313 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClosure {
6314 ExprClosure::from_syntax_node(db, self.0.lookup(db))
6315 }
6316}
6317impl From<ExprClosurePtr> for SyntaxStablePtrId {
6318 fn from(ptr: ExprClosurePtr) -> Self {
6319 ptr.untyped()
6320 }
6321}
6322#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6323pub struct ExprClosureGreen(pub GreenId);
6324impl TypedSyntaxNode for ExprClosure {
6325 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClosure);
6326 type StablePtr = ExprClosurePtr;
6327 type Green = ExprClosureGreen;
6328 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6329 ExprClosureGreen(
6330 Arc::new(GreenNode {
6331 kind: SyntaxKind::ExprClosure,
6332 details: GreenNodeDetails::Node {
6333 children: [
6334 ClosureParamWrapper::missing(db).0,
6335 OptionReturnTypeClause::missing(db).0,
6336 OptionTerminalNoPanic::missing(db).0,
6337 Expr::missing(db).0,
6338 ]
6339 .into(),
6340 width: TextWidth::default(),
6341 },
6342 })
6343 .intern(db),
6344 )
6345 }
6346 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6347 let kind = node.kind(db);
6348 assert_eq!(
6349 kind,
6350 SyntaxKind::ExprClosure,
6351 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6352 kind,
6353 SyntaxKind::ExprClosure
6354 );
6355 Self { node }
6356 }
6357 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6358 let kind = node.kind(db);
6359 if kind == SyntaxKind::ExprClosure { Some(Self::from_syntax_node(db, node)) } else { None }
6360 }
6361 fn as_syntax_node(&self) -> SyntaxNode {
6362 self.node
6363 }
6364 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6365 ExprClosurePtr(self.node.stable_ptr(db))
6366 }
6367}
6368#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6369pub enum ClosureParamWrapper {
6370 Nullary(TerminalOrOr),
6371 NAry(ClosureParamWrapperNAry),
6372}
6373#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6374pub struct ClosureParamWrapperPtr(pub SyntaxStablePtrId);
6375impl TypedStablePtr for ClosureParamWrapperPtr {
6376 type SyntaxNode = ClosureParamWrapper;
6377 fn untyped(&self) -> SyntaxStablePtrId {
6378 self.0
6379 }
6380 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6381 ClosureParamWrapper::from_syntax_node(db, self.0.lookup(db))
6382 }
6383}
6384impl From<ClosureParamWrapperPtr> for SyntaxStablePtrId {
6385 fn from(ptr: ClosureParamWrapperPtr) -> Self {
6386 ptr.untyped()
6387 }
6388}
6389impl From<TerminalOrOrPtr> for ClosureParamWrapperPtr {
6390 fn from(value: TerminalOrOrPtr) -> Self {
6391 Self(value.0)
6392 }
6393}
6394impl From<ClosureParamWrapperNAryPtr> for ClosureParamWrapperPtr {
6395 fn from(value: ClosureParamWrapperNAryPtr) -> Self {
6396 Self(value.0)
6397 }
6398}
6399impl From<TerminalOrOrGreen> for ClosureParamWrapperGreen {
6400 fn from(value: TerminalOrOrGreen) -> Self {
6401 Self(value.0)
6402 }
6403}
6404impl From<ClosureParamWrapperNAryGreen> for ClosureParamWrapperGreen {
6405 fn from(value: ClosureParamWrapperNAryGreen) -> Self {
6406 Self(value.0)
6407 }
6408}
6409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6410pub struct ClosureParamWrapperGreen(pub GreenId);
6411impl TypedSyntaxNode for ClosureParamWrapper {
6412 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6413 type StablePtr = ClosureParamWrapperPtr;
6414 type Green = ClosureParamWrapperGreen;
6415 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6416 panic!("No missing variant.");
6417 }
6418 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6419 let kind = node.kind(db);
6420 match kind {
6421 SyntaxKind::TerminalOrOr => {
6422 ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node))
6423 }
6424 SyntaxKind::ClosureParamWrapperNAry => {
6425 ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node))
6426 }
6427 _ => panic!(
6428 "Unexpected syntax kind {:?} when constructing {}.",
6429 kind, "ClosureParamWrapper"
6430 ),
6431 }
6432 }
6433 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6434 let kind = node.kind(db);
6435 match kind {
6436 SyntaxKind::TerminalOrOr => {
6437 Some(ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node)))
6438 }
6439 SyntaxKind::ClosureParamWrapperNAry => {
6440 Some(ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node)))
6441 }
6442 _ => None,
6443 }
6444 }
6445 fn as_syntax_node(&self) -> SyntaxNode {
6446 match self {
6447 ClosureParamWrapper::Nullary(x) => x.as_syntax_node(),
6448 ClosureParamWrapper::NAry(x) => x.as_syntax_node(),
6449 }
6450 }
6451 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6452 ClosureParamWrapperPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
6453 }
6454}
6455impl ClosureParamWrapper {
6456 pub fn is_variant(kind: SyntaxKind) -> bool {
6458 matches!(kind, SyntaxKind::TerminalOrOr | SyntaxKind::ClosureParamWrapperNAry)
6459 }
6460}
6461#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6462pub struct ClosureParamWrapperNAry {
6463 node: SyntaxNode,
6464}
6465impl ClosureParamWrapperNAry {
6466 pub const INDEX_LEFTOR: usize = 0;
6467 pub const INDEX_PARAMS: usize = 1;
6468 pub const INDEX_RIGHTOR: usize = 2;
6469 pub fn new_green(
6470 db: &dyn SyntaxGroup,
6471 leftor: TerminalOrGreen,
6472 params: ParamListGreen,
6473 rightor: TerminalOrGreen,
6474 ) -> ClosureParamWrapperNAryGreen {
6475 let children = [leftor.0, params.0, rightor.0];
6476 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6477 ClosureParamWrapperNAryGreen(
6478 Arc::new(GreenNode {
6479 kind: SyntaxKind::ClosureParamWrapperNAry,
6480 details: GreenNodeDetails::Node { children: children.into(), width },
6481 })
6482 .intern(db),
6483 )
6484 }
6485}
6486impl ClosureParamWrapperNAry {
6487 pub fn leftor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6488 TerminalOr::from_syntax_node(db, self.node.get_children(db)[0])
6489 }
6490 pub fn params(&self, db: &dyn SyntaxGroup) -> ParamList {
6491 ParamList::from_syntax_node(db, self.node.get_children(db)[1])
6492 }
6493 pub fn rightor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6494 TerminalOr::from_syntax_node(db, self.node.get_children(db)[2])
6495 }
6496}
6497#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6498pub struct ClosureParamWrapperNAryPtr(pub SyntaxStablePtrId);
6499impl ClosureParamWrapperNAryPtr {}
6500impl TypedStablePtr for ClosureParamWrapperNAryPtr {
6501 type SyntaxNode = ClosureParamWrapperNAry;
6502 fn untyped(&self) -> SyntaxStablePtrId {
6503 self.0
6504 }
6505 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapperNAry {
6506 ClosureParamWrapperNAry::from_syntax_node(db, self.0.lookup(db))
6507 }
6508}
6509impl From<ClosureParamWrapperNAryPtr> for SyntaxStablePtrId {
6510 fn from(ptr: ClosureParamWrapperNAryPtr) -> Self {
6511 ptr.untyped()
6512 }
6513}
6514#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6515pub struct ClosureParamWrapperNAryGreen(pub GreenId);
6516impl TypedSyntaxNode for ClosureParamWrapperNAry {
6517 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ClosureParamWrapperNAry);
6518 type StablePtr = ClosureParamWrapperNAryPtr;
6519 type Green = ClosureParamWrapperNAryGreen;
6520 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6521 ClosureParamWrapperNAryGreen(
6522 Arc::new(GreenNode {
6523 kind: SyntaxKind::ClosureParamWrapperNAry,
6524 details: GreenNodeDetails::Node {
6525 children: [
6526 TerminalOr::missing(db).0,
6527 ParamList::missing(db).0,
6528 TerminalOr::missing(db).0,
6529 ]
6530 .into(),
6531 width: TextWidth::default(),
6532 },
6533 })
6534 .intern(db),
6535 )
6536 }
6537 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6538 let kind = node.kind(db);
6539 assert_eq!(
6540 kind,
6541 SyntaxKind::ClosureParamWrapperNAry,
6542 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6543 kind,
6544 SyntaxKind::ClosureParamWrapperNAry
6545 );
6546 Self { node }
6547 }
6548 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6549 let kind = node.kind(db);
6550 if kind == SyntaxKind::ClosureParamWrapperNAry {
6551 Some(Self::from_syntax_node(db, node))
6552 } else {
6553 None
6554 }
6555 }
6556 fn as_syntax_node(&self) -> SyntaxNode {
6557 self.node
6558 }
6559 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6560 ClosureParamWrapperNAryPtr(self.node.stable_ptr(db))
6561 }
6562}
6563#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6564pub struct ExprPlaceholder {
6565 node: SyntaxNode,
6566}
6567impl ExprPlaceholder {
6568 pub const INDEX_DOLLAR: usize = 0;
6569 pub const INDEX_PATH: usize = 1;
6570 pub fn new_green(
6571 db: &dyn SyntaxGroup,
6572 dollar: TerminalDollarGreen,
6573 path: ExprPathGreen,
6574 ) -> ExprPlaceholderGreen {
6575 let children = [dollar.0, path.0];
6576 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6577 ExprPlaceholderGreen(
6578 Arc::new(GreenNode {
6579 kind: SyntaxKind::ExprPlaceholder,
6580 details: GreenNodeDetails::Node { children: children.into(), width },
6581 })
6582 .intern(db),
6583 )
6584 }
6585}
6586impl ExprPlaceholder {
6587 pub fn dollar(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
6588 TerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
6589 }
6590 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
6591 ExprPath::from_syntax_node(db, self.node.get_children(db)[1])
6592 }
6593}
6594#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6595pub struct ExprPlaceholderPtr(pub SyntaxStablePtrId);
6596impl ExprPlaceholderPtr {}
6597impl TypedStablePtr for ExprPlaceholderPtr {
6598 type SyntaxNode = ExprPlaceholder;
6599 fn untyped(&self) -> SyntaxStablePtrId {
6600 self.0
6601 }
6602 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprPlaceholder {
6603 ExprPlaceholder::from_syntax_node(db, self.0.lookup(db))
6604 }
6605}
6606impl From<ExprPlaceholderPtr> for SyntaxStablePtrId {
6607 fn from(ptr: ExprPlaceholderPtr) -> Self {
6608 ptr.untyped()
6609 }
6610}
6611#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6612pub struct ExprPlaceholderGreen(pub GreenId);
6613impl TypedSyntaxNode for ExprPlaceholder {
6614 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprPlaceholder);
6615 type StablePtr = ExprPlaceholderPtr;
6616 type Green = ExprPlaceholderGreen;
6617 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6618 ExprPlaceholderGreen(
6619 Arc::new(GreenNode {
6620 kind: SyntaxKind::ExprPlaceholder,
6621 details: GreenNodeDetails::Node {
6622 children: [TerminalDollar::missing(db).0, ExprPath::missing(db).0].into(),
6623 width: TextWidth::default(),
6624 },
6625 })
6626 .intern(db),
6627 )
6628 }
6629 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6630 let kind = node.kind(db);
6631 assert_eq!(
6632 kind,
6633 SyntaxKind::ExprPlaceholder,
6634 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6635 kind,
6636 SyntaxKind::ExprPlaceholder
6637 );
6638 Self { node }
6639 }
6640 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6641 let kind = node.kind(db);
6642 if kind == SyntaxKind::ExprPlaceholder {
6643 Some(Self::from_syntax_node(db, node))
6644 } else {
6645 None
6646 }
6647 }
6648 fn as_syntax_node(&self) -> SyntaxNode {
6649 self.node
6650 }
6651 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6652 ExprPlaceholderPtr(self.node.stable_ptr(db))
6653 }
6654}
6655#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6656pub struct StructArgExpr {
6657 node: SyntaxNode,
6658}
6659impl StructArgExpr {
6660 pub const INDEX_COLON: usize = 0;
6661 pub const INDEX_EXPR: usize = 1;
6662 pub fn new_green(
6663 db: &dyn SyntaxGroup,
6664 colon: TerminalColonGreen,
6665 expr: ExprGreen,
6666 ) -> StructArgExprGreen {
6667 let children = [colon.0, expr.0];
6668 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6669 StructArgExprGreen(
6670 Arc::new(GreenNode {
6671 kind: SyntaxKind::StructArgExpr,
6672 details: GreenNodeDetails::Node { children: children.into(), width },
6673 })
6674 .intern(db),
6675 )
6676 }
6677}
6678impl StructArgExpr {
6679 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
6680 TerminalColon::from_syntax_node(db, self.node.get_children(db)[0])
6681 }
6682 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6683 Expr::from_syntax_node(db, self.node.get_children(db)[1])
6684 }
6685}
6686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6687pub struct StructArgExprPtr(pub SyntaxStablePtrId);
6688impl StructArgExprPtr {}
6689impl TypedStablePtr for StructArgExprPtr {
6690 type SyntaxNode = StructArgExpr;
6691 fn untyped(&self) -> SyntaxStablePtrId {
6692 self.0
6693 }
6694 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgExpr {
6695 StructArgExpr::from_syntax_node(db, self.0.lookup(db))
6696 }
6697}
6698impl From<StructArgExprPtr> for SyntaxStablePtrId {
6699 fn from(ptr: StructArgExprPtr) -> Self {
6700 ptr.untyped()
6701 }
6702}
6703#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6704pub struct StructArgExprGreen(pub GreenId);
6705impl TypedSyntaxNode for StructArgExpr {
6706 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgExpr);
6707 type StablePtr = StructArgExprPtr;
6708 type Green = StructArgExprGreen;
6709 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6710 StructArgExprGreen(
6711 Arc::new(GreenNode {
6712 kind: SyntaxKind::StructArgExpr,
6713 details: GreenNodeDetails::Node {
6714 children: [TerminalColon::missing(db).0, Expr::missing(db).0].into(),
6715 width: TextWidth::default(),
6716 },
6717 })
6718 .intern(db),
6719 )
6720 }
6721 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6722 let kind = node.kind(db);
6723 assert_eq!(
6724 kind,
6725 SyntaxKind::StructArgExpr,
6726 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6727 kind,
6728 SyntaxKind::StructArgExpr
6729 );
6730 Self { node }
6731 }
6732 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6733 let kind = node.kind(db);
6734 if kind == SyntaxKind::StructArgExpr {
6735 Some(Self::from_syntax_node(db, node))
6736 } else {
6737 None
6738 }
6739 }
6740 fn as_syntax_node(&self) -> SyntaxNode {
6741 self.node
6742 }
6743 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6744 StructArgExprPtr(self.node.stable_ptr(db))
6745 }
6746}
6747#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6748pub enum OptionStructArgExpr {
6749 Empty(OptionStructArgExprEmpty),
6750 StructArgExpr(StructArgExpr),
6751}
6752#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6753pub struct OptionStructArgExprPtr(pub SyntaxStablePtrId);
6754impl TypedStablePtr for OptionStructArgExprPtr {
6755 type SyntaxNode = OptionStructArgExpr;
6756 fn untyped(&self) -> SyntaxStablePtrId {
6757 self.0
6758 }
6759 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6760 OptionStructArgExpr::from_syntax_node(db, self.0.lookup(db))
6761 }
6762}
6763impl From<OptionStructArgExprPtr> for SyntaxStablePtrId {
6764 fn from(ptr: OptionStructArgExprPtr) -> Self {
6765 ptr.untyped()
6766 }
6767}
6768impl From<OptionStructArgExprEmptyPtr> for OptionStructArgExprPtr {
6769 fn from(value: OptionStructArgExprEmptyPtr) -> Self {
6770 Self(value.0)
6771 }
6772}
6773impl From<StructArgExprPtr> for OptionStructArgExprPtr {
6774 fn from(value: StructArgExprPtr) -> Self {
6775 Self(value.0)
6776 }
6777}
6778impl From<OptionStructArgExprEmptyGreen> for OptionStructArgExprGreen {
6779 fn from(value: OptionStructArgExprEmptyGreen) -> Self {
6780 Self(value.0)
6781 }
6782}
6783impl From<StructArgExprGreen> for OptionStructArgExprGreen {
6784 fn from(value: StructArgExprGreen) -> Self {
6785 Self(value.0)
6786 }
6787}
6788#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6789pub struct OptionStructArgExprGreen(pub GreenId);
6790impl TypedSyntaxNode for OptionStructArgExpr {
6791 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6792 type StablePtr = OptionStructArgExprPtr;
6793 type Green = OptionStructArgExprGreen;
6794 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6795 panic!("No missing variant.");
6796 }
6797 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6798 let kind = node.kind(db);
6799 match kind {
6800 SyntaxKind::OptionStructArgExprEmpty => {
6801 OptionStructArgExpr::Empty(OptionStructArgExprEmpty::from_syntax_node(db, node))
6802 }
6803 SyntaxKind::StructArgExpr => {
6804 OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node))
6805 }
6806 _ => panic!(
6807 "Unexpected syntax kind {:?} when constructing {}.",
6808 kind, "OptionStructArgExpr"
6809 ),
6810 }
6811 }
6812 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6813 let kind = node.kind(db);
6814 match kind {
6815 SyntaxKind::OptionStructArgExprEmpty => Some(OptionStructArgExpr::Empty(
6816 OptionStructArgExprEmpty::from_syntax_node(db, node),
6817 )),
6818 SyntaxKind::StructArgExpr => {
6819 Some(OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node)))
6820 }
6821 _ => None,
6822 }
6823 }
6824 fn as_syntax_node(&self) -> SyntaxNode {
6825 match self {
6826 OptionStructArgExpr::Empty(x) => x.as_syntax_node(),
6827 OptionStructArgExpr::StructArgExpr(x) => x.as_syntax_node(),
6828 }
6829 }
6830 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6831 OptionStructArgExprPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
6832 }
6833}
6834impl OptionStructArgExpr {
6835 pub fn is_variant(kind: SyntaxKind) -> bool {
6837 matches!(kind, SyntaxKind::OptionStructArgExprEmpty | SyntaxKind::StructArgExpr)
6838 }
6839}
6840#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6841pub struct OptionStructArgExprEmpty {
6842 node: SyntaxNode,
6843}
6844impl OptionStructArgExprEmpty {
6845 pub fn new_green(db: &dyn SyntaxGroup) -> OptionStructArgExprEmptyGreen {
6846 let children = [];
6847 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6848 OptionStructArgExprEmptyGreen(
6849 Arc::new(GreenNode {
6850 kind: SyntaxKind::OptionStructArgExprEmpty,
6851 details: GreenNodeDetails::Node { children: children.into(), width },
6852 })
6853 .intern(db),
6854 )
6855 }
6856}
6857impl OptionStructArgExprEmpty {}
6858#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6859pub struct OptionStructArgExprEmptyPtr(pub SyntaxStablePtrId);
6860impl OptionStructArgExprEmptyPtr {}
6861impl TypedStablePtr for OptionStructArgExprEmptyPtr {
6862 type SyntaxNode = OptionStructArgExprEmpty;
6863 fn untyped(&self) -> SyntaxStablePtrId {
6864 self.0
6865 }
6866 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExprEmpty {
6867 OptionStructArgExprEmpty::from_syntax_node(db, self.0.lookup(db))
6868 }
6869}
6870impl From<OptionStructArgExprEmptyPtr> for SyntaxStablePtrId {
6871 fn from(ptr: OptionStructArgExprEmptyPtr) -> Self {
6872 ptr.untyped()
6873 }
6874}
6875#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6876pub struct OptionStructArgExprEmptyGreen(pub GreenId);
6877impl TypedSyntaxNode for OptionStructArgExprEmpty {
6878 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionStructArgExprEmpty);
6879 type StablePtr = OptionStructArgExprEmptyPtr;
6880 type Green = OptionStructArgExprEmptyGreen;
6881 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6882 OptionStructArgExprEmptyGreen(
6883 Arc::new(GreenNode {
6884 kind: SyntaxKind::OptionStructArgExprEmpty,
6885 details: GreenNodeDetails::Node {
6886 children: [].into(),
6887 width: TextWidth::default(),
6888 },
6889 })
6890 .intern(db),
6891 )
6892 }
6893 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6894 let kind = node.kind(db);
6895 assert_eq!(
6896 kind,
6897 SyntaxKind::OptionStructArgExprEmpty,
6898 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6899 kind,
6900 SyntaxKind::OptionStructArgExprEmpty
6901 );
6902 Self { node }
6903 }
6904 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6905 let kind = node.kind(db);
6906 if kind == SyntaxKind::OptionStructArgExprEmpty {
6907 Some(Self::from_syntax_node(db, node))
6908 } else {
6909 None
6910 }
6911 }
6912 fn as_syntax_node(&self) -> SyntaxNode {
6913 self.node
6914 }
6915 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
6916 OptionStructArgExprEmptyPtr(self.node.stable_ptr(db))
6917 }
6918}
6919#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6920pub struct StructArgSingle {
6921 node: SyntaxNode,
6922}
6923impl StructArgSingle {
6924 pub const INDEX_IDENTIFIER: usize = 0;
6925 pub const INDEX_ARG_EXPR: usize = 1;
6926 pub fn new_green(
6927 db: &dyn SyntaxGroup,
6928 identifier: TerminalIdentifierGreen,
6929 arg_expr: OptionStructArgExprGreen,
6930 ) -> StructArgSingleGreen {
6931 let children = [identifier.0, arg_expr.0];
6932 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
6933 StructArgSingleGreen(
6934 Arc::new(GreenNode {
6935 kind: SyntaxKind::StructArgSingle,
6936 details: GreenNodeDetails::Node { children: children.into(), width },
6937 })
6938 .intern(db),
6939 )
6940 }
6941}
6942impl StructArgSingle {
6943 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
6944 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
6945 }
6946 pub fn arg_expr(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6947 OptionStructArgExpr::from_syntax_node(db, self.node.get_children(db)[1])
6948 }
6949}
6950#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6951pub struct StructArgSinglePtr(pub SyntaxStablePtrId);
6952impl StructArgSinglePtr {
6953 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
6954 let ptr = self.0.lookup_intern(db);
6955 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
6956 TerminalIdentifierGreen(key_fields[0])
6957 } else {
6958 panic!("Unexpected key field query on root.");
6959 }
6960 }
6961}
6962impl TypedStablePtr for StructArgSinglePtr {
6963 type SyntaxNode = StructArgSingle;
6964 fn untyped(&self) -> SyntaxStablePtrId {
6965 self.0
6966 }
6967 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgSingle {
6968 StructArgSingle::from_syntax_node(db, self.0.lookup(db))
6969 }
6970}
6971impl From<StructArgSinglePtr> for SyntaxStablePtrId {
6972 fn from(ptr: StructArgSinglePtr) -> Self {
6973 ptr.untyped()
6974 }
6975}
6976#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6977pub struct StructArgSingleGreen(pub GreenId);
6978impl TypedSyntaxNode for StructArgSingle {
6979 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgSingle);
6980 type StablePtr = StructArgSinglePtr;
6981 type Green = StructArgSingleGreen;
6982 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6983 StructArgSingleGreen(
6984 Arc::new(GreenNode {
6985 kind: SyntaxKind::StructArgSingle,
6986 details: GreenNodeDetails::Node {
6987 children: [
6988 TerminalIdentifier::missing(db).0,
6989 OptionStructArgExpr::missing(db).0,
6990 ]
6991 .into(),
6992 width: TextWidth::default(),
6993 },
6994 })
6995 .intern(db),
6996 )
6997 }
6998 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6999 let kind = node.kind(db);
7000 assert_eq!(
7001 kind,
7002 SyntaxKind::StructArgSingle,
7003 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7004 kind,
7005 SyntaxKind::StructArgSingle
7006 );
7007 Self { node }
7008 }
7009 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7010 let kind = node.kind(db);
7011 if kind == SyntaxKind::StructArgSingle {
7012 Some(Self::from_syntax_node(db, node))
7013 } else {
7014 None
7015 }
7016 }
7017 fn as_syntax_node(&self) -> SyntaxNode {
7018 self.node
7019 }
7020 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7021 StructArgSinglePtr(self.node.stable_ptr(db))
7022 }
7023}
7024#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7025pub struct StructArgTail {
7026 node: SyntaxNode,
7027}
7028impl StructArgTail {
7029 pub const INDEX_DOTDOT: usize = 0;
7030 pub const INDEX_EXPRESSION: usize = 1;
7031 pub fn new_green(
7032 db: &dyn SyntaxGroup,
7033 dotdot: TerminalDotDotGreen,
7034 expression: ExprGreen,
7035 ) -> StructArgTailGreen {
7036 let children = [dotdot.0, expression.0];
7037 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
7038 StructArgTailGreen(
7039 Arc::new(GreenNode {
7040 kind: SyntaxKind::StructArgTail,
7041 details: GreenNodeDetails::Node { children: children.into(), width },
7042 })
7043 .intern(db),
7044 )
7045 }
7046}
7047impl StructArgTail {
7048 pub fn dotdot(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
7049 TerminalDotDot::from_syntax_node(db, self.node.get_children(db)[0])
7050 }
7051 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
7052 Expr::from_syntax_node(db, self.node.get_children(db)[1])
7053 }
7054}
7055#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7056pub struct StructArgTailPtr(pub SyntaxStablePtrId);
7057impl StructArgTailPtr {}
7058impl TypedStablePtr for StructArgTailPtr {
7059 type SyntaxNode = StructArgTail;
7060 fn untyped(&self) -> SyntaxStablePtrId {
7061 self.0
7062 }
7063 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgTail {
7064 StructArgTail::from_syntax_node(db, self.0.lookup(db))
7065 }
7066}
7067impl From<StructArgTailPtr> for SyntaxStablePtrId {
7068 fn from(ptr: StructArgTailPtr) -> Self {
7069 ptr.untyped()
7070 }
7071}
7072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7073pub struct StructArgTailGreen(pub GreenId);
7074impl TypedSyntaxNode for StructArgTail {
7075 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgTail);
7076 type StablePtr = StructArgTailPtr;
7077 type Green = StructArgTailGreen;
7078 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7079 StructArgTailGreen(
7080 Arc::new(GreenNode {
7081 kind: SyntaxKind::StructArgTail,
7082 details: GreenNodeDetails::Node {
7083 children: [TerminalDotDot::missing(db).0, Expr::missing(db).0].into(),
7084 width: TextWidth::default(),
7085 },
7086 })
7087 .intern(db),
7088 )
7089 }
7090 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7091 let kind = node.kind(db);
7092 assert_eq!(
7093 kind,
7094 SyntaxKind::StructArgTail,
7095 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7096 kind,
7097 SyntaxKind::StructArgTail
7098 );
7099 Self { node }
7100 }
7101 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7102 let kind = node.kind(db);
7103 if kind == SyntaxKind::StructArgTail {
7104 Some(Self::from_syntax_node(db, node))
7105 } else {
7106 None
7107 }
7108 }
7109 fn as_syntax_node(&self) -> SyntaxNode {
7110 self.node
7111 }
7112 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7113 StructArgTailPtr(self.node.stable_ptr(db))
7114 }
7115}
7116#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7117pub enum StructArg {
7118 StructArgSingle(StructArgSingle),
7119 StructArgTail(StructArgTail),
7120}
7121#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7122pub struct StructArgPtr(pub SyntaxStablePtrId);
7123impl TypedStablePtr for StructArgPtr {
7124 type SyntaxNode = StructArg;
7125 fn untyped(&self) -> SyntaxStablePtrId {
7126 self.0
7127 }
7128 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArg {
7129 StructArg::from_syntax_node(db, self.0.lookup(db))
7130 }
7131}
7132impl From<StructArgPtr> for SyntaxStablePtrId {
7133 fn from(ptr: StructArgPtr) -> Self {
7134 ptr.untyped()
7135 }
7136}
7137impl From<StructArgSinglePtr> for StructArgPtr {
7138 fn from(value: StructArgSinglePtr) -> Self {
7139 Self(value.0)
7140 }
7141}
7142impl From<StructArgTailPtr> for StructArgPtr {
7143 fn from(value: StructArgTailPtr) -> Self {
7144 Self(value.0)
7145 }
7146}
7147impl From<StructArgSingleGreen> for StructArgGreen {
7148 fn from(value: StructArgSingleGreen) -> Self {
7149 Self(value.0)
7150 }
7151}
7152impl From<StructArgTailGreen> for StructArgGreen {
7153 fn from(value: StructArgTailGreen) -> Self {
7154 Self(value.0)
7155 }
7156}
7157#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7158pub struct StructArgGreen(pub GreenId);
7159impl TypedSyntaxNode for StructArg {
7160 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7161 type StablePtr = StructArgPtr;
7162 type Green = StructArgGreen;
7163 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7164 panic!("No missing variant.");
7165 }
7166 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7167 let kind = node.kind(db);
7168 match kind {
7169 SyntaxKind::StructArgSingle => {
7170 StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node))
7171 }
7172 SyntaxKind::StructArgTail => {
7173 StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node))
7174 }
7175 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "StructArg"),
7176 }
7177 }
7178 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7179 let kind = node.kind(db);
7180 match kind {
7181 SyntaxKind::StructArgSingle => {
7182 Some(StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node)))
7183 }
7184 SyntaxKind::StructArgTail => {
7185 Some(StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node)))
7186 }
7187 _ => None,
7188 }
7189 }
7190 fn as_syntax_node(&self) -> SyntaxNode {
7191 match self {
7192 StructArg::StructArgSingle(x) => x.as_syntax_node(),
7193 StructArg::StructArgTail(x) => x.as_syntax_node(),
7194 }
7195 }
7196 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7197 StructArgPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
7198 }
7199}
7200impl StructArg {
7201 pub fn is_variant(kind: SyntaxKind) -> bool {
7203 matches!(kind, SyntaxKind::StructArgSingle | SyntaxKind::StructArgTail)
7204 }
7205}
7206#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7207pub struct StructArgList(ElementList<StructArg, 2>);
7208impl Deref for StructArgList {
7209 type Target = ElementList<StructArg, 2>;
7210 fn deref(&self) -> &Self::Target {
7211 &self.0
7212 }
7213}
7214impl StructArgList {
7215 pub fn new_green(
7216 db: &dyn SyntaxGroup,
7217 children: &[StructArgListElementOrSeparatorGreen],
7218 ) -> StructArgListGreen {
7219 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
7220 StructArgListGreen(
7221 Arc::new(GreenNode {
7222 kind: SyntaxKind::StructArgList,
7223 details: GreenNodeDetails::Node {
7224 children: children.iter().map(|x| x.id()).collect(),
7225 width,
7226 },
7227 })
7228 .intern(db),
7229 )
7230 }
7231}
7232#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7233pub struct StructArgListPtr(pub SyntaxStablePtrId);
7234impl TypedStablePtr for StructArgListPtr {
7235 type SyntaxNode = StructArgList;
7236 fn untyped(&self) -> SyntaxStablePtrId {
7237 self.0
7238 }
7239 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgList {
7240 StructArgList::from_syntax_node(db, self.0.lookup(db))
7241 }
7242}
7243impl From<StructArgListPtr> for SyntaxStablePtrId {
7244 fn from(ptr: StructArgListPtr) -> Self {
7245 ptr.untyped()
7246 }
7247}
7248#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7249pub enum StructArgListElementOrSeparatorGreen {
7250 Separator(TerminalCommaGreen),
7251 Element(StructArgGreen),
7252}
7253impl From<TerminalCommaGreen> for StructArgListElementOrSeparatorGreen {
7254 fn from(value: TerminalCommaGreen) -> Self {
7255 StructArgListElementOrSeparatorGreen::Separator(value)
7256 }
7257}
7258impl From<StructArgGreen> for StructArgListElementOrSeparatorGreen {
7259 fn from(value: StructArgGreen) -> Self {
7260 StructArgListElementOrSeparatorGreen::Element(value)
7261 }
7262}
7263impl StructArgListElementOrSeparatorGreen {
7264 fn id(&self) -> GreenId {
7265 match self {
7266 StructArgListElementOrSeparatorGreen::Separator(green) => green.0,
7267 StructArgListElementOrSeparatorGreen::Element(green) => green.0,
7268 }
7269 }
7270}
7271#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7272pub struct StructArgListGreen(pub GreenId);
7273impl TypedSyntaxNode for StructArgList {
7274 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgList);
7275 type StablePtr = StructArgListPtr;
7276 type Green = StructArgListGreen;
7277 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7278 StructArgListGreen(
7279 Arc::new(GreenNode {
7280 kind: SyntaxKind::StructArgList,
7281 details: GreenNodeDetails::Node {
7282 children: [].into(),
7283 width: TextWidth::default(),
7284 },
7285 })
7286 .intern(db),
7287 )
7288 }
7289 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7290 Self(ElementList::new(node))
7291 }
7292 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7293 if node.kind(db) == SyntaxKind::StructArgList {
7294 Some(Self(ElementList::new(node)))
7295 } else {
7296 None
7297 }
7298 }
7299 fn as_syntax_node(&self) -> SyntaxNode {
7300 self.node
7301 }
7302 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7303 StructArgListPtr(self.node.stable_ptr(db))
7304 }
7305}
7306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7307pub struct ArgListBraced {
7308 node: SyntaxNode,
7309}
7310impl ArgListBraced {
7311 pub const INDEX_LBRACE: usize = 0;
7312 pub const INDEX_ARGUMENTS: usize = 1;
7313 pub const INDEX_RBRACE: usize = 2;
7314 pub fn new_green(
7315 db: &dyn SyntaxGroup,
7316 lbrace: TerminalLBraceGreen,
7317 arguments: ArgListGreen,
7318 rbrace: TerminalRBraceGreen,
7319 ) -> ArgListBracedGreen {
7320 let children = [lbrace.0, arguments.0, rbrace.0];
7321 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
7322 ArgListBracedGreen(
7323 Arc::new(GreenNode {
7324 kind: SyntaxKind::ArgListBraced,
7325 details: GreenNodeDetails::Node { children: children.into(), width },
7326 })
7327 .intern(db),
7328 )
7329 }
7330}
7331impl ArgListBraced {
7332 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
7333 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
7334 }
7335 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7336 ArgList::from_syntax_node(db, self.node.get_children(db)[1])
7337 }
7338 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
7339 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
7340 }
7341}
7342#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7343pub struct ArgListBracedPtr(pub SyntaxStablePtrId);
7344impl ArgListBracedPtr {}
7345impl TypedStablePtr for ArgListBracedPtr {
7346 type SyntaxNode = ArgListBraced;
7347 fn untyped(&self) -> SyntaxStablePtrId {
7348 self.0
7349 }
7350 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBraced {
7351 ArgListBraced::from_syntax_node(db, self.0.lookup(db))
7352 }
7353}
7354impl From<ArgListBracedPtr> for SyntaxStablePtrId {
7355 fn from(ptr: ArgListBracedPtr) -> Self {
7356 ptr.untyped()
7357 }
7358}
7359#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7360pub struct ArgListBracedGreen(pub GreenId);
7361impl TypedSyntaxNode for ArgListBraced {
7362 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBraced);
7363 type StablePtr = ArgListBracedPtr;
7364 type Green = ArgListBracedGreen;
7365 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7366 ArgListBracedGreen(
7367 Arc::new(GreenNode {
7368 kind: SyntaxKind::ArgListBraced,
7369 details: GreenNodeDetails::Node {
7370 children: [
7371 TerminalLBrace::missing(db).0,
7372 ArgList::missing(db).0,
7373 TerminalRBrace::missing(db).0,
7374 ]
7375 .into(),
7376 width: TextWidth::default(),
7377 },
7378 })
7379 .intern(db),
7380 )
7381 }
7382 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7383 let kind = node.kind(db);
7384 assert_eq!(
7385 kind,
7386 SyntaxKind::ArgListBraced,
7387 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7388 kind,
7389 SyntaxKind::ArgListBraced
7390 );
7391 Self { node }
7392 }
7393 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7394 let kind = node.kind(db);
7395 if kind == SyntaxKind::ArgListBraced {
7396 Some(Self::from_syntax_node(db, node))
7397 } else {
7398 None
7399 }
7400 }
7401 fn as_syntax_node(&self) -> SyntaxNode {
7402 self.node
7403 }
7404 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7405 ArgListBracedPtr(self.node.stable_ptr(db))
7406 }
7407}
7408#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7409pub struct ArgListBracketed {
7410 node: SyntaxNode,
7411}
7412impl ArgListBracketed {
7413 pub const INDEX_LBRACK: usize = 0;
7414 pub const INDEX_ARGUMENTS: usize = 1;
7415 pub const INDEX_RBRACK: usize = 2;
7416 pub fn new_green(
7417 db: &dyn SyntaxGroup,
7418 lbrack: TerminalLBrackGreen,
7419 arguments: ArgListGreen,
7420 rbrack: TerminalRBrackGreen,
7421 ) -> ArgListBracketedGreen {
7422 let children = [lbrack.0, arguments.0, rbrack.0];
7423 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
7424 ArgListBracketedGreen(
7425 Arc::new(GreenNode {
7426 kind: SyntaxKind::ArgListBracketed,
7427 details: GreenNodeDetails::Node { children: children.into(), width },
7428 })
7429 .intern(db),
7430 )
7431 }
7432}
7433impl ArgListBracketed {
7434 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
7435 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
7436 }
7437 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7438 ArgList::from_syntax_node(db, self.node.get_children(db)[1])
7439 }
7440 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
7441 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[2])
7442 }
7443}
7444#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7445pub struct ArgListBracketedPtr(pub SyntaxStablePtrId);
7446impl ArgListBracketedPtr {}
7447impl TypedStablePtr for ArgListBracketedPtr {
7448 type SyntaxNode = ArgListBracketed;
7449 fn untyped(&self) -> SyntaxStablePtrId {
7450 self.0
7451 }
7452 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBracketed {
7453 ArgListBracketed::from_syntax_node(db, self.0.lookup(db))
7454 }
7455}
7456impl From<ArgListBracketedPtr> for SyntaxStablePtrId {
7457 fn from(ptr: ArgListBracketedPtr) -> Self {
7458 ptr.untyped()
7459 }
7460}
7461#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7462pub struct ArgListBracketedGreen(pub GreenId);
7463impl TypedSyntaxNode for ArgListBracketed {
7464 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBracketed);
7465 type StablePtr = ArgListBracketedPtr;
7466 type Green = ArgListBracketedGreen;
7467 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7468 ArgListBracketedGreen(
7469 Arc::new(GreenNode {
7470 kind: SyntaxKind::ArgListBracketed,
7471 details: GreenNodeDetails::Node {
7472 children: [
7473 TerminalLBrack::missing(db).0,
7474 ArgList::missing(db).0,
7475 TerminalRBrack::missing(db).0,
7476 ]
7477 .into(),
7478 width: TextWidth::default(),
7479 },
7480 })
7481 .intern(db),
7482 )
7483 }
7484 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7485 let kind = node.kind(db);
7486 assert_eq!(
7487 kind,
7488 SyntaxKind::ArgListBracketed,
7489 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7490 kind,
7491 SyntaxKind::ArgListBracketed
7492 );
7493 Self { node }
7494 }
7495 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7496 let kind = node.kind(db);
7497 if kind == SyntaxKind::ArgListBracketed {
7498 Some(Self::from_syntax_node(db, node))
7499 } else {
7500 None
7501 }
7502 }
7503 fn as_syntax_node(&self) -> SyntaxNode {
7504 self.node
7505 }
7506 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7507 ArgListBracketedPtr(self.node.stable_ptr(db))
7508 }
7509}
7510#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7511pub enum WrappedArgList {
7512 BracketedArgList(ArgListBracketed),
7513 ParenthesizedArgList(ArgListParenthesized),
7514 BracedArgList(ArgListBraced),
7515 Missing(WrappedArgListMissing),
7516}
7517#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7518pub struct WrappedArgListPtr(pub SyntaxStablePtrId);
7519impl TypedStablePtr for WrappedArgListPtr {
7520 type SyntaxNode = WrappedArgList;
7521 fn untyped(&self) -> SyntaxStablePtrId {
7522 self.0
7523 }
7524 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
7525 WrappedArgList::from_syntax_node(db, self.0.lookup(db))
7526 }
7527}
7528impl From<WrappedArgListPtr> for SyntaxStablePtrId {
7529 fn from(ptr: WrappedArgListPtr) -> Self {
7530 ptr.untyped()
7531 }
7532}
7533impl From<ArgListBracketedPtr> for WrappedArgListPtr {
7534 fn from(value: ArgListBracketedPtr) -> Self {
7535 Self(value.0)
7536 }
7537}
7538impl From<ArgListParenthesizedPtr> for WrappedArgListPtr {
7539 fn from(value: ArgListParenthesizedPtr) -> Self {
7540 Self(value.0)
7541 }
7542}
7543impl From<ArgListBracedPtr> for WrappedArgListPtr {
7544 fn from(value: ArgListBracedPtr) -> Self {
7545 Self(value.0)
7546 }
7547}
7548impl From<WrappedArgListMissingPtr> for WrappedArgListPtr {
7549 fn from(value: WrappedArgListMissingPtr) -> Self {
7550 Self(value.0)
7551 }
7552}
7553impl From<ArgListBracketedGreen> for WrappedArgListGreen {
7554 fn from(value: ArgListBracketedGreen) -> Self {
7555 Self(value.0)
7556 }
7557}
7558impl From<ArgListParenthesizedGreen> for WrappedArgListGreen {
7559 fn from(value: ArgListParenthesizedGreen) -> Self {
7560 Self(value.0)
7561 }
7562}
7563impl From<ArgListBracedGreen> for WrappedArgListGreen {
7564 fn from(value: ArgListBracedGreen) -> Self {
7565 Self(value.0)
7566 }
7567}
7568impl From<WrappedArgListMissingGreen> for WrappedArgListGreen {
7569 fn from(value: WrappedArgListMissingGreen) -> Self {
7570 Self(value.0)
7571 }
7572}
7573#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7574pub struct WrappedArgListGreen(pub GreenId);
7575impl TypedSyntaxNode for WrappedArgList {
7576 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7577 type StablePtr = WrappedArgListPtr;
7578 type Green = WrappedArgListGreen;
7579 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7580 WrappedArgListGreen(WrappedArgListMissing::missing(db).0)
7581 }
7582 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7583 let kind = node.kind(db);
7584 match kind {
7585 SyntaxKind::ArgListBracketed => {
7586 WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node))
7587 }
7588 SyntaxKind::ArgListParenthesized => WrappedArgList::ParenthesizedArgList(
7589 ArgListParenthesized::from_syntax_node(db, node),
7590 ),
7591 SyntaxKind::ArgListBraced => {
7592 WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node))
7593 }
7594 SyntaxKind::WrappedArgListMissing => {
7595 WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node))
7596 }
7597 _ => {
7598 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "WrappedArgList")
7599 }
7600 }
7601 }
7602 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7603 let kind = node.kind(db);
7604 match kind {
7605 SyntaxKind::ArgListBracketed => {
7606 Some(WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node)))
7607 }
7608 SyntaxKind::ArgListParenthesized => Some(WrappedArgList::ParenthesizedArgList(
7609 ArgListParenthesized::from_syntax_node(db, node),
7610 )),
7611 SyntaxKind::ArgListBraced => {
7612 Some(WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node)))
7613 }
7614 SyntaxKind::WrappedArgListMissing => {
7615 Some(WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node)))
7616 }
7617 _ => None,
7618 }
7619 }
7620 fn as_syntax_node(&self) -> SyntaxNode {
7621 match self {
7622 WrappedArgList::BracketedArgList(x) => x.as_syntax_node(),
7623 WrappedArgList::ParenthesizedArgList(x) => x.as_syntax_node(),
7624 WrappedArgList::BracedArgList(x) => x.as_syntax_node(),
7625 WrappedArgList::Missing(x) => x.as_syntax_node(),
7626 }
7627 }
7628 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7629 WrappedArgListPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
7630 }
7631}
7632impl WrappedArgList {
7633 pub fn is_variant(kind: SyntaxKind) -> bool {
7635 matches!(
7636 kind,
7637 SyntaxKind::ArgListBracketed
7638 | SyntaxKind::ArgListParenthesized
7639 | SyntaxKind::ArgListBraced
7640 | SyntaxKind::WrappedArgListMissing
7641 )
7642 }
7643}
7644#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7645pub struct WrappedArgListMissing {
7646 node: SyntaxNode,
7647}
7648impl WrappedArgListMissing {
7649 pub fn new_green(db: &dyn SyntaxGroup) -> WrappedArgListMissingGreen {
7650 let children = [];
7651 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
7652 WrappedArgListMissingGreen(
7653 Arc::new(GreenNode {
7654 kind: SyntaxKind::WrappedArgListMissing,
7655 details: GreenNodeDetails::Node { children: children.into(), width },
7656 })
7657 .intern(db),
7658 )
7659 }
7660}
7661impl WrappedArgListMissing {}
7662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7663pub struct WrappedArgListMissingPtr(pub SyntaxStablePtrId);
7664impl WrappedArgListMissingPtr {}
7665impl TypedStablePtr for WrappedArgListMissingPtr {
7666 type SyntaxNode = WrappedArgListMissing;
7667 fn untyped(&self) -> SyntaxStablePtrId {
7668 self.0
7669 }
7670 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgListMissing {
7671 WrappedArgListMissing::from_syntax_node(db, self.0.lookup(db))
7672 }
7673}
7674impl From<WrappedArgListMissingPtr> for SyntaxStablePtrId {
7675 fn from(ptr: WrappedArgListMissingPtr) -> Self {
7676 ptr.untyped()
7677 }
7678}
7679#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7680pub struct WrappedArgListMissingGreen(pub GreenId);
7681impl TypedSyntaxNode for WrappedArgListMissing {
7682 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedArgListMissing);
7683 type StablePtr = WrappedArgListMissingPtr;
7684 type Green = WrappedArgListMissingGreen;
7685 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7686 WrappedArgListMissingGreen(
7687 Arc::new(GreenNode {
7688 kind: SyntaxKind::WrappedArgListMissing,
7689 details: GreenNodeDetails::Node {
7690 children: [].into(),
7691 width: TextWidth::default(),
7692 },
7693 })
7694 .intern(db),
7695 )
7696 }
7697 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7698 let kind = node.kind(db);
7699 assert_eq!(
7700 kind,
7701 SyntaxKind::WrappedArgListMissing,
7702 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7703 kind,
7704 SyntaxKind::WrappedArgListMissing
7705 );
7706 Self { node }
7707 }
7708 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7709 let kind = node.kind(db);
7710 if kind == SyntaxKind::WrappedArgListMissing {
7711 Some(Self::from_syntax_node(db, node))
7712 } else {
7713 None
7714 }
7715 }
7716 fn as_syntax_node(&self) -> SyntaxNode {
7717 self.node
7718 }
7719 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7720 WrappedArgListMissingPtr(self.node.stable_ptr(db))
7721 }
7722}
7723#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7724pub enum Pattern {
7725 Underscore(TerminalUnderscore),
7726 Literal(TerminalLiteralNumber),
7727 False(TerminalFalse),
7728 True(TerminalTrue),
7729 ShortString(TerminalShortString),
7730 String(TerminalString),
7731 Identifier(PatternIdentifier),
7732 Struct(PatternStruct),
7733 Tuple(PatternTuple),
7734 Enum(PatternEnum),
7735 FixedSizeArray(PatternFixedSizeArray),
7736 Path(ExprPath),
7737}
7738#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7739pub struct PatternPtr(pub SyntaxStablePtrId);
7740impl TypedStablePtr for PatternPtr {
7741 type SyntaxNode = Pattern;
7742 fn untyped(&self) -> SyntaxStablePtrId {
7743 self.0
7744 }
7745 fn lookup(&self, db: &dyn SyntaxGroup) -> Pattern {
7746 Pattern::from_syntax_node(db, self.0.lookup(db))
7747 }
7748}
7749impl From<PatternPtr> for SyntaxStablePtrId {
7750 fn from(ptr: PatternPtr) -> Self {
7751 ptr.untyped()
7752 }
7753}
7754impl From<TerminalUnderscorePtr> for PatternPtr {
7755 fn from(value: TerminalUnderscorePtr) -> Self {
7756 Self(value.0)
7757 }
7758}
7759impl From<TerminalLiteralNumberPtr> for PatternPtr {
7760 fn from(value: TerminalLiteralNumberPtr) -> Self {
7761 Self(value.0)
7762 }
7763}
7764impl From<TerminalFalsePtr> for PatternPtr {
7765 fn from(value: TerminalFalsePtr) -> Self {
7766 Self(value.0)
7767 }
7768}
7769impl From<TerminalTruePtr> for PatternPtr {
7770 fn from(value: TerminalTruePtr) -> Self {
7771 Self(value.0)
7772 }
7773}
7774impl From<TerminalShortStringPtr> for PatternPtr {
7775 fn from(value: TerminalShortStringPtr) -> Self {
7776 Self(value.0)
7777 }
7778}
7779impl From<TerminalStringPtr> for PatternPtr {
7780 fn from(value: TerminalStringPtr) -> Self {
7781 Self(value.0)
7782 }
7783}
7784impl From<PatternIdentifierPtr> for PatternPtr {
7785 fn from(value: PatternIdentifierPtr) -> Self {
7786 Self(value.0)
7787 }
7788}
7789impl From<PatternStructPtr> for PatternPtr {
7790 fn from(value: PatternStructPtr) -> Self {
7791 Self(value.0)
7792 }
7793}
7794impl From<PatternTuplePtr> for PatternPtr {
7795 fn from(value: PatternTuplePtr) -> Self {
7796 Self(value.0)
7797 }
7798}
7799impl From<PatternEnumPtr> for PatternPtr {
7800 fn from(value: PatternEnumPtr) -> Self {
7801 Self(value.0)
7802 }
7803}
7804impl From<PatternFixedSizeArrayPtr> for PatternPtr {
7805 fn from(value: PatternFixedSizeArrayPtr) -> Self {
7806 Self(value.0)
7807 }
7808}
7809impl From<ExprPathPtr> for PatternPtr {
7810 fn from(value: ExprPathPtr) -> Self {
7811 Self(value.0)
7812 }
7813}
7814impl From<TerminalUnderscoreGreen> for PatternGreen {
7815 fn from(value: TerminalUnderscoreGreen) -> Self {
7816 Self(value.0)
7817 }
7818}
7819impl From<TerminalLiteralNumberGreen> for PatternGreen {
7820 fn from(value: TerminalLiteralNumberGreen) -> Self {
7821 Self(value.0)
7822 }
7823}
7824impl From<TerminalFalseGreen> for PatternGreen {
7825 fn from(value: TerminalFalseGreen) -> Self {
7826 Self(value.0)
7827 }
7828}
7829impl From<TerminalTrueGreen> for PatternGreen {
7830 fn from(value: TerminalTrueGreen) -> Self {
7831 Self(value.0)
7832 }
7833}
7834impl From<TerminalShortStringGreen> for PatternGreen {
7835 fn from(value: TerminalShortStringGreen) -> Self {
7836 Self(value.0)
7837 }
7838}
7839impl From<TerminalStringGreen> for PatternGreen {
7840 fn from(value: TerminalStringGreen) -> Self {
7841 Self(value.0)
7842 }
7843}
7844impl From<PatternIdentifierGreen> for PatternGreen {
7845 fn from(value: PatternIdentifierGreen) -> Self {
7846 Self(value.0)
7847 }
7848}
7849impl From<PatternStructGreen> for PatternGreen {
7850 fn from(value: PatternStructGreen) -> Self {
7851 Self(value.0)
7852 }
7853}
7854impl From<PatternTupleGreen> for PatternGreen {
7855 fn from(value: PatternTupleGreen) -> Self {
7856 Self(value.0)
7857 }
7858}
7859impl From<PatternEnumGreen> for PatternGreen {
7860 fn from(value: PatternEnumGreen) -> Self {
7861 Self(value.0)
7862 }
7863}
7864impl From<PatternFixedSizeArrayGreen> for PatternGreen {
7865 fn from(value: PatternFixedSizeArrayGreen) -> Self {
7866 Self(value.0)
7867 }
7868}
7869impl From<ExprPathGreen> for PatternGreen {
7870 fn from(value: ExprPathGreen) -> Self {
7871 Self(value.0)
7872 }
7873}
7874#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7875pub struct PatternGreen(pub GreenId);
7876impl TypedSyntaxNode for Pattern {
7877 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7878 type StablePtr = PatternPtr;
7879 type Green = PatternGreen;
7880 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7881 panic!("No missing variant.");
7882 }
7883 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7884 let kind = node.kind(db);
7885 match kind {
7886 SyntaxKind::TerminalUnderscore => {
7887 Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node))
7888 }
7889 SyntaxKind::TerminalLiteralNumber => {
7890 Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node))
7891 }
7892 SyntaxKind::TerminalFalse => Pattern::False(TerminalFalse::from_syntax_node(db, node)),
7893 SyntaxKind::TerminalTrue => Pattern::True(TerminalTrue::from_syntax_node(db, node)),
7894 SyntaxKind::TerminalShortString => {
7895 Pattern::ShortString(TerminalShortString::from_syntax_node(db, node))
7896 }
7897 SyntaxKind::TerminalString => {
7898 Pattern::String(TerminalString::from_syntax_node(db, node))
7899 }
7900 SyntaxKind::PatternIdentifier => {
7901 Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node))
7902 }
7903 SyntaxKind::PatternStruct => Pattern::Struct(PatternStruct::from_syntax_node(db, node)),
7904 SyntaxKind::PatternTuple => Pattern::Tuple(PatternTuple::from_syntax_node(db, node)),
7905 SyntaxKind::PatternEnum => Pattern::Enum(PatternEnum::from_syntax_node(db, node)),
7906 SyntaxKind::PatternFixedSizeArray => {
7907 Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node))
7908 }
7909 SyntaxKind::ExprPath => Pattern::Path(ExprPath::from_syntax_node(db, node)),
7910 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Pattern"),
7911 }
7912 }
7913 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7914 let kind = node.kind(db);
7915 match kind {
7916 SyntaxKind::TerminalUnderscore => {
7917 Some(Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
7918 }
7919 SyntaxKind::TerminalLiteralNumber => {
7920 Some(Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node)))
7921 }
7922 SyntaxKind::TerminalFalse => {
7923 Some(Pattern::False(TerminalFalse::from_syntax_node(db, node)))
7924 }
7925 SyntaxKind::TerminalTrue => {
7926 Some(Pattern::True(TerminalTrue::from_syntax_node(db, node)))
7927 }
7928 SyntaxKind::TerminalShortString => {
7929 Some(Pattern::ShortString(TerminalShortString::from_syntax_node(db, node)))
7930 }
7931 SyntaxKind::TerminalString => {
7932 Some(Pattern::String(TerminalString::from_syntax_node(db, node)))
7933 }
7934 SyntaxKind::PatternIdentifier => {
7935 Some(Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node)))
7936 }
7937 SyntaxKind::PatternStruct => {
7938 Some(Pattern::Struct(PatternStruct::from_syntax_node(db, node)))
7939 }
7940 SyntaxKind::PatternTuple => {
7941 Some(Pattern::Tuple(PatternTuple::from_syntax_node(db, node)))
7942 }
7943 SyntaxKind::PatternEnum => Some(Pattern::Enum(PatternEnum::from_syntax_node(db, node))),
7944 SyntaxKind::PatternFixedSizeArray => {
7945 Some(Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node)))
7946 }
7947 SyntaxKind::ExprPath => Some(Pattern::Path(ExprPath::from_syntax_node(db, node))),
7948 _ => None,
7949 }
7950 }
7951 fn as_syntax_node(&self) -> SyntaxNode {
7952 match self {
7953 Pattern::Underscore(x) => x.as_syntax_node(),
7954 Pattern::Literal(x) => x.as_syntax_node(),
7955 Pattern::False(x) => x.as_syntax_node(),
7956 Pattern::True(x) => x.as_syntax_node(),
7957 Pattern::ShortString(x) => x.as_syntax_node(),
7958 Pattern::String(x) => x.as_syntax_node(),
7959 Pattern::Identifier(x) => x.as_syntax_node(),
7960 Pattern::Struct(x) => x.as_syntax_node(),
7961 Pattern::Tuple(x) => x.as_syntax_node(),
7962 Pattern::Enum(x) => x.as_syntax_node(),
7963 Pattern::FixedSizeArray(x) => x.as_syntax_node(),
7964 Pattern::Path(x) => x.as_syntax_node(),
7965 }
7966 }
7967 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
7968 PatternPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
7969 }
7970}
7971impl Pattern {
7972 pub fn is_variant(kind: SyntaxKind) -> bool {
7974 matches!(
7975 kind,
7976 SyntaxKind::TerminalUnderscore
7977 | SyntaxKind::TerminalLiteralNumber
7978 | SyntaxKind::TerminalFalse
7979 | SyntaxKind::TerminalTrue
7980 | SyntaxKind::TerminalShortString
7981 | SyntaxKind::TerminalString
7982 | SyntaxKind::PatternIdentifier
7983 | SyntaxKind::PatternStruct
7984 | SyntaxKind::PatternTuple
7985 | SyntaxKind::PatternEnum
7986 | SyntaxKind::PatternFixedSizeArray
7987 | SyntaxKind::ExprPath
7988 )
7989 }
7990}
7991#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7992pub struct PatternIdentifier {
7993 node: SyntaxNode,
7994}
7995impl PatternIdentifier {
7996 pub const INDEX_MODIFIERS: usize = 0;
7997 pub const INDEX_NAME: usize = 1;
7998 pub fn new_green(
7999 db: &dyn SyntaxGroup,
8000 modifiers: ModifierListGreen,
8001 name: TerminalIdentifierGreen,
8002 ) -> PatternIdentifierGreen {
8003 let children = [modifiers.0, name.0];
8004 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8005 PatternIdentifierGreen(
8006 Arc::new(GreenNode {
8007 kind: SyntaxKind::PatternIdentifier,
8008 details: GreenNodeDetails::Node { children: children.into(), width },
8009 })
8010 .intern(db),
8011 )
8012 }
8013}
8014impl PatternIdentifier {
8015 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
8016 ModifierList::from_syntax_node(db, self.node.get_children(db)[0])
8017 }
8018 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
8019 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
8020 }
8021}
8022#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8023pub struct PatternIdentifierPtr(pub SyntaxStablePtrId);
8024impl PatternIdentifierPtr {
8025 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
8026 let ptr = self.0.lookup_intern(db);
8027 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
8028 TerminalIdentifierGreen(key_fields[0])
8029 } else {
8030 panic!("Unexpected key field query on root.");
8031 }
8032 }
8033}
8034impl TypedStablePtr for PatternIdentifierPtr {
8035 type SyntaxNode = PatternIdentifier;
8036 fn untyped(&self) -> SyntaxStablePtrId {
8037 self.0
8038 }
8039 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternIdentifier {
8040 PatternIdentifier::from_syntax_node(db, self.0.lookup(db))
8041 }
8042}
8043impl From<PatternIdentifierPtr> for SyntaxStablePtrId {
8044 fn from(ptr: PatternIdentifierPtr) -> Self {
8045 ptr.untyped()
8046 }
8047}
8048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8049pub struct PatternIdentifierGreen(pub GreenId);
8050impl TypedSyntaxNode for PatternIdentifier {
8051 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternIdentifier);
8052 type StablePtr = PatternIdentifierPtr;
8053 type Green = PatternIdentifierGreen;
8054 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8055 PatternIdentifierGreen(
8056 Arc::new(GreenNode {
8057 kind: SyntaxKind::PatternIdentifier,
8058 details: GreenNodeDetails::Node {
8059 children: [ModifierList::missing(db).0, TerminalIdentifier::missing(db).0]
8060 .into(),
8061 width: TextWidth::default(),
8062 },
8063 })
8064 .intern(db),
8065 )
8066 }
8067 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8068 let kind = node.kind(db);
8069 assert_eq!(
8070 kind,
8071 SyntaxKind::PatternIdentifier,
8072 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8073 kind,
8074 SyntaxKind::PatternIdentifier
8075 );
8076 Self { node }
8077 }
8078 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8079 let kind = node.kind(db);
8080 if kind == SyntaxKind::PatternIdentifier {
8081 Some(Self::from_syntax_node(db, node))
8082 } else {
8083 None
8084 }
8085 }
8086 fn as_syntax_node(&self) -> SyntaxNode {
8087 self.node
8088 }
8089 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8090 PatternIdentifierPtr(self.node.stable_ptr(db))
8091 }
8092}
8093#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8094pub struct PatternStruct {
8095 node: SyntaxNode,
8096}
8097impl PatternStruct {
8098 pub const INDEX_PATH: usize = 0;
8099 pub const INDEX_LBRACE: usize = 1;
8100 pub const INDEX_PARAMS: usize = 2;
8101 pub const INDEX_RBRACE: usize = 3;
8102 pub fn new_green(
8103 db: &dyn SyntaxGroup,
8104 path: ExprPathGreen,
8105 lbrace: TerminalLBraceGreen,
8106 params: PatternStructParamListGreen,
8107 rbrace: TerminalRBraceGreen,
8108 ) -> PatternStructGreen {
8109 let children = [path.0, lbrace.0, params.0, rbrace.0];
8110 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8111 PatternStructGreen(
8112 Arc::new(GreenNode {
8113 kind: SyntaxKind::PatternStruct,
8114 details: GreenNodeDetails::Node { children: children.into(), width },
8115 })
8116 .intern(db),
8117 )
8118 }
8119}
8120impl PatternStruct {
8121 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8122 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
8123 }
8124 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
8125 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[1])
8126 }
8127 pub fn params(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8128 PatternStructParamList::from_syntax_node(db, self.node.get_children(db)[2])
8129 }
8130 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
8131 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[3])
8132 }
8133}
8134#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8135pub struct PatternStructPtr(pub SyntaxStablePtrId);
8136impl PatternStructPtr {}
8137impl TypedStablePtr for PatternStructPtr {
8138 type SyntaxNode = PatternStruct;
8139 fn untyped(&self) -> SyntaxStablePtrId {
8140 self.0
8141 }
8142 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStruct {
8143 PatternStruct::from_syntax_node(db, self.0.lookup(db))
8144 }
8145}
8146impl From<PatternStructPtr> for SyntaxStablePtrId {
8147 fn from(ptr: PatternStructPtr) -> Self {
8148 ptr.untyped()
8149 }
8150}
8151#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8152pub struct PatternStructGreen(pub GreenId);
8153impl TypedSyntaxNode for PatternStruct {
8154 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStruct);
8155 type StablePtr = PatternStructPtr;
8156 type Green = PatternStructGreen;
8157 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8158 PatternStructGreen(
8159 Arc::new(GreenNode {
8160 kind: SyntaxKind::PatternStruct,
8161 details: GreenNodeDetails::Node {
8162 children: [
8163 ExprPath::missing(db).0,
8164 TerminalLBrace::missing(db).0,
8165 PatternStructParamList::missing(db).0,
8166 TerminalRBrace::missing(db).0,
8167 ]
8168 .into(),
8169 width: TextWidth::default(),
8170 },
8171 })
8172 .intern(db),
8173 )
8174 }
8175 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8176 let kind = node.kind(db);
8177 assert_eq!(
8178 kind,
8179 SyntaxKind::PatternStruct,
8180 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8181 kind,
8182 SyntaxKind::PatternStruct
8183 );
8184 Self { node }
8185 }
8186 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8187 let kind = node.kind(db);
8188 if kind == SyntaxKind::PatternStruct {
8189 Some(Self::from_syntax_node(db, node))
8190 } else {
8191 None
8192 }
8193 }
8194 fn as_syntax_node(&self) -> SyntaxNode {
8195 self.node
8196 }
8197 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8198 PatternStructPtr(self.node.stable_ptr(db))
8199 }
8200}
8201#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8202pub struct PatternStructParamList(ElementList<PatternStructParam, 2>);
8203impl Deref for PatternStructParamList {
8204 type Target = ElementList<PatternStructParam, 2>;
8205 fn deref(&self) -> &Self::Target {
8206 &self.0
8207 }
8208}
8209impl PatternStructParamList {
8210 pub fn new_green(
8211 db: &dyn SyntaxGroup,
8212 children: &[PatternStructParamListElementOrSeparatorGreen],
8213 ) -> PatternStructParamListGreen {
8214 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8215 PatternStructParamListGreen(
8216 Arc::new(GreenNode {
8217 kind: SyntaxKind::PatternStructParamList,
8218 details: GreenNodeDetails::Node {
8219 children: children.iter().map(|x| x.id()).collect(),
8220 width,
8221 },
8222 })
8223 .intern(db),
8224 )
8225 }
8226}
8227#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8228pub struct PatternStructParamListPtr(pub SyntaxStablePtrId);
8229impl TypedStablePtr for PatternStructParamListPtr {
8230 type SyntaxNode = PatternStructParamList;
8231 fn untyped(&self) -> SyntaxStablePtrId {
8232 self.0
8233 }
8234 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8235 PatternStructParamList::from_syntax_node(db, self.0.lookup(db))
8236 }
8237}
8238impl From<PatternStructParamListPtr> for SyntaxStablePtrId {
8239 fn from(ptr: PatternStructParamListPtr) -> Self {
8240 ptr.untyped()
8241 }
8242}
8243#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8244pub enum PatternStructParamListElementOrSeparatorGreen {
8245 Separator(TerminalCommaGreen),
8246 Element(PatternStructParamGreen),
8247}
8248impl From<TerminalCommaGreen> for PatternStructParamListElementOrSeparatorGreen {
8249 fn from(value: TerminalCommaGreen) -> Self {
8250 PatternStructParamListElementOrSeparatorGreen::Separator(value)
8251 }
8252}
8253impl From<PatternStructParamGreen> for PatternStructParamListElementOrSeparatorGreen {
8254 fn from(value: PatternStructParamGreen) -> Self {
8255 PatternStructParamListElementOrSeparatorGreen::Element(value)
8256 }
8257}
8258impl PatternStructParamListElementOrSeparatorGreen {
8259 fn id(&self) -> GreenId {
8260 match self {
8261 PatternStructParamListElementOrSeparatorGreen::Separator(green) => green.0,
8262 PatternStructParamListElementOrSeparatorGreen::Element(green) => green.0,
8263 }
8264 }
8265}
8266#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8267pub struct PatternStructParamListGreen(pub GreenId);
8268impl TypedSyntaxNode for PatternStructParamList {
8269 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamList);
8270 type StablePtr = PatternStructParamListPtr;
8271 type Green = PatternStructParamListGreen;
8272 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8273 PatternStructParamListGreen(
8274 Arc::new(GreenNode {
8275 kind: SyntaxKind::PatternStructParamList,
8276 details: GreenNodeDetails::Node {
8277 children: [].into(),
8278 width: TextWidth::default(),
8279 },
8280 })
8281 .intern(db),
8282 )
8283 }
8284 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8285 Self(ElementList::new(node))
8286 }
8287 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8288 if node.kind(db) == SyntaxKind::PatternStructParamList {
8289 Some(Self(ElementList::new(node)))
8290 } else {
8291 None
8292 }
8293 }
8294 fn as_syntax_node(&self) -> SyntaxNode {
8295 self.node
8296 }
8297 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8298 PatternStructParamListPtr(self.node.stable_ptr(db))
8299 }
8300}
8301#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8302pub struct PatternTuple {
8303 node: SyntaxNode,
8304}
8305impl PatternTuple {
8306 pub const INDEX_LPAREN: usize = 0;
8307 pub const INDEX_PATTERNS: usize = 1;
8308 pub const INDEX_RPAREN: usize = 2;
8309 pub fn new_green(
8310 db: &dyn SyntaxGroup,
8311 lparen: TerminalLParenGreen,
8312 patterns: PatternListGreen,
8313 rparen: TerminalRParenGreen,
8314 ) -> PatternTupleGreen {
8315 let children = [lparen.0, patterns.0, rparen.0];
8316 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8317 PatternTupleGreen(
8318 Arc::new(GreenNode {
8319 kind: SyntaxKind::PatternTuple,
8320 details: GreenNodeDetails::Node { children: children.into(), width },
8321 })
8322 .intern(db),
8323 )
8324 }
8325}
8326impl PatternTuple {
8327 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
8328 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
8329 }
8330 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8331 PatternList::from_syntax_node(db, self.node.get_children(db)[1])
8332 }
8333 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
8334 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
8335 }
8336}
8337#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8338pub struct PatternTuplePtr(pub SyntaxStablePtrId);
8339impl PatternTuplePtr {}
8340impl TypedStablePtr for PatternTuplePtr {
8341 type SyntaxNode = PatternTuple;
8342 fn untyped(&self) -> SyntaxStablePtrId {
8343 self.0
8344 }
8345 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternTuple {
8346 PatternTuple::from_syntax_node(db, self.0.lookup(db))
8347 }
8348}
8349impl From<PatternTuplePtr> for SyntaxStablePtrId {
8350 fn from(ptr: PatternTuplePtr) -> Self {
8351 ptr.untyped()
8352 }
8353}
8354#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8355pub struct PatternTupleGreen(pub GreenId);
8356impl TypedSyntaxNode for PatternTuple {
8357 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternTuple);
8358 type StablePtr = PatternTuplePtr;
8359 type Green = PatternTupleGreen;
8360 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8361 PatternTupleGreen(
8362 Arc::new(GreenNode {
8363 kind: SyntaxKind::PatternTuple,
8364 details: GreenNodeDetails::Node {
8365 children: [
8366 TerminalLParen::missing(db).0,
8367 PatternList::missing(db).0,
8368 TerminalRParen::missing(db).0,
8369 ]
8370 .into(),
8371 width: TextWidth::default(),
8372 },
8373 })
8374 .intern(db),
8375 )
8376 }
8377 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8378 let kind = node.kind(db);
8379 assert_eq!(
8380 kind,
8381 SyntaxKind::PatternTuple,
8382 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8383 kind,
8384 SyntaxKind::PatternTuple
8385 );
8386 Self { node }
8387 }
8388 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8389 let kind = node.kind(db);
8390 if kind == SyntaxKind::PatternTuple { Some(Self::from_syntax_node(db, node)) } else { None }
8391 }
8392 fn as_syntax_node(&self) -> SyntaxNode {
8393 self.node
8394 }
8395 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8396 PatternTuplePtr(self.node.stable_ptr(db))
8397 }
8398}
8399#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8400pub struct PatternFixedSizeArray {
8401 node: SyntaxNode,
8402}
8403impl PatternFixedSizeArray {
8404 pub const INDEX_LBRACK: usize = 0;
8405 pub const INDEX_PATTERNS: usize = 1;
8406 pub const INDEX_RBRACK: usize = 2;
8407 pub fn new_green(
8408 db: &dyn SyntaxGroup,
8409 lbrack: TerminalLBrackGreen,
8410 patterns: PatternListGreen,
8411 rbrack: TerminalRBrackGreen,
8412 ) -> PatternFixedSizeArrayGreen {
8413 let children = [lbrack.0, patterns.0, rbrack.0];
8414 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8415 PatternFixedSizeArrayGreen(
8416 Arc::new(GreenNode {
8417 kind: SyntaxKind::PatternFixedSizeArray,
8418 details: GreenNodeDetails::Node { children: children.into(), width },
8419 })
8420 .intern(db),
8421 )
8422 }
8423}
8424impl PatternFixedSizeArray {
8425 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
8426 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
8427 }
8428 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8429 PatternList::from_syntax_node(db, self.node.get_children(db)[1])
8430 }
8431 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
8432 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[2])
8433 }
8434}
8435#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8436pub struct PatternFixedSizeArrayPtr(pub SyntaxStablePtrId);
8437impl PatternFixedSizeArrayPtr {}
8438impl TypedStablePtr for PatternFixedSizeArrayPtr {
8439 type SyntaxNode = PatternFixedSizeArray;
8440 fn untyped(&self) -> SyntaxStablePtrId {
8441 self.0
8442 }
8443 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternFixedSizeArray {
8444 PatternFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
8445 }
8446}
8447impl From<PatternFixedSizeArrayPtr> for SyntaxStablePtrId {
8448 fn from(ptr: PatternFixedSizeArrayPtr) -> Self {
8449 ptr.untyped()
8450 }
8451}
8452#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8453pub struct PatternFixedSizeArrayGreen(pub GreenId);
8454impl TypedSyntaxNode for PatternFixedSizeArray {
8455 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternFixedSizeArray);
8456 type StablePtr = PatternFixedSizeArrayPtr;
8457 type Green = PatternFixedSizeArrayGreen;
8458 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8459 PatternFixedSizeArrayGreen(
8460 Arc::new(GreenNode {
8461 kind: SyntaxKind::PatternFixedSizeArray,
8462 details: GreenNodeDetails::Node {
8463 children: [
8464 TerminalLBrack::missing(db).0,
8465 PatternList::missing(db).0,
8466 TerminalRBrack::missing(db).0,
8467 ]
8468 .into(),
8469 width: TextWidth::default(),
8470 },
8471 })
8472 .intern(db),
8473 )
8474 }
8475 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8476 let kind = node.kind(db);
8477 assert_eq!(
8478 kind,
8479 SyntaxKind::PatternFixedSizeArray,
8480 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8481 kind,
8482 SyntaxKind::PatternFixedSizeArray
8483 );
8484 Self { node }
8485 }
8486 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8487 let kind = node.kind(db);
8488 if kind == SyntaxKind::PatternFixedSizeArray {
8489 Some(Self::from_syntax_node(db, node))
8490 } else {
8491 None
8492 }
8493 }
8494 fn as_syntax_node(&self) -> SyntaxNode {
8495 self.node
8496 }
8497 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8498 PatternFixedSizeArrayPtr(self.node.stable_ptr(db))
8499 }
8500}
8501#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8502pub struct PatternList(ElementList<Pattern, 2>);
8503impl Deref for PatternList {
8504 type Target = ElementList<Pattern, 2>;
8505 fn deref(&self) -> &Self::Target {
8506 &self.0
8507 }
8508}
8509impl PatternList {
8510 pub fn new_green(
8511 db: &dyn SyntaxGroup,
8512 children: &[PatternListElementOrSeparatorGreen],
8513 ) -> PatternListGreen {
8514 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8515 PatternListGreen(
8516 Arc::new(GreenNode {
8517 kind: SyntaxKind::PatternList,
8518 details: GreenNodeDetails::Node {
8519 children: children.iter().map(|x| x.id()).collect(),
8520 width,
8521 },
8522 })
8523 .intern(db),
8524 )
8525 }
8526}
8527#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8528pub struct PatternListPtr(pub SyntaxStablePtrId);
8529impl TypedStablePtr for PatternListPtr {
8530 type SyntaxNode = PatternList;
8531 fn untyped(&self) -> SyntaxStablePtrId {
8532 self.0
8533 }
8534 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternList {
8535 PatternList::from_syntax_node(db, self.0.lookup(db))
8536 }
8537}
8538impl From<PatternListPtr> for SyntaxStablePtrId {
8539 fn from(ptr: PatternListPtr) -> Self {
8540 ptr.untyped()
8541 }
8542}
8543#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8544pub enum PatternListElementOrSeparatorGreen {
8545 Separator(TerminalCommaGreen),
8546 Element(PatternGreen),
8547}
8548impl From<TerminalCommaGreen> for PatternListElementOrSeparatorGreen {
8549 fn from(value: TerminalCommaGreen) -> Self {
8550 PatternListElementOrSeparatorGreen::Separator(value)
8551 }
8552}
8553impl From<PatternGreen> for PatternListElementOrSeparatorGreen {
8554 fn from(value: PatternGreen) -> Self {
8555 PatternListElementOrSeparatorGreen::Element(value)
8556 }
8557}
8558impl PatternListElementOrSeparatorGreen {
8559 fn id(&self) -> GreenId {
8560 match self {
8561 PatternListElementOrSeparatorGreen::Separator(green) => green.0,
8562 PatternListElementOrSeparatorGreen::Element(green) => green.0,
8563 }
8564 }
8565}
8566#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8567pub struct PatternListGreen(pub GreenId);
8568impl TypedSyntaxNode for PatternList {
8569 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternList);
8570 type StablePtr = PatternListPtr;
8571 type Green = PatternListGreen;
8572 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8573 PatternListGreen(
8574 Arc::new(GreenNode {
8575 kind: SyntaxKind::PatternList,
8576 details: GreenNodeDetails::Node {
8577 children: [].into(),
8578 width: TextWidth::default(),
8579 },
8580 })
8581 .intern(db),
8582 )
8583 }
8584 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8585 Self(ElementList::new(node))
8586 }
8587 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8588 if node.kind(db) == SyntaxKind::PatternList {
8589 Some(Self(ElementList::new(node)))
8590 } else {
8591 None
8592 }
8593 }
8594 fn as_syntax_node(&self) -> SyntaxNode {
8595 self.node
8596 }
8597 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8598 PatternListPtr(self.node.stable_ptr(db))
8599 }
8600}
8601#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8602pub struct PatternListOr(ElementList<Pattern, 2>);
8603impl Deref for PatternListOr {
8604 type Target = ElementList<Pattern, 2>;
8605 fn deref(&self) -> &Self::Target {
8606 &self.0
8607 }
8608}
8609impl PatternListOr {
8610 pub fn new_green(
8611 db: &dyn SyntaxGroup,
8612 children: &[PatternListOrElementOrSeparatorGreen],
8613 ) -> PatternListOrGreen {
8614 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8615 PatternListOrGreen(
8616 Arc::new(GreenNode {
8617 kind: SyntaxKind::PatternListOr,
8618 details: GreenNodeDetails::Node {
8619 children: children.iter().map(|x| x.id()).collect(),
8620 width,
8621 },
8622 })
8623 .intern(db),
8624 )
8625 }
8626}
8627#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8628pub struct PatternListOrPtr(pub SyntaxStablePtrId);
8629impl TypedStablePtr for PatternListOrPtr {
8630 type SyntaxNode = PatternListOr;
8631 fn untyped(&self) -> SyntaxStablePtrId {
8632 self.0
8633 }
8634 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternListOr {
8635 PatternListOr::from_syntax_node(db, self.0.lookup(db))
8636 }
8637}
8638impl From<PatternListOrPtr> for SyntaxStablePtrId {
8639 fn from(ptr: PatternListOrPtr) -> Self {
8640 ptr.untyped()
8641 }
8642}
8643#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8644pub enum PatternListOrElementOrSeparatorGreen {
8645 Separator(TerminalOrGreen),
8646 Element(PatternGreen),
8647}
8648impl From<TerminalOrGreen> for PatternListOrElementOrSeparatorGreen {
8649 fn from(value: TerminalOrGreen) -> Self {
8650 PatternListOrElementOrSeparatorGreen::Separator(value)
8651 }
8652}
8653impl From<PatternGreen> for PatternListOrElementOrSeparatorGreen {
8654 fn from(value: PatternGreen) -> Self {
8655 PatternListOrElementOrSeparatorGreen::Element(value)
8656 }
8657}
8658impl PatternListOrElementOrSeparatorGreen {
8659 fn id(&self) -> GreenId {
8660 match self {
8661 PatternListOrElementOrSeparatorGreen::Separator(green) => green.0,
8662 PatternListOrElementOrSeparatorGreen::Element(green) => green.0,
8663 }
8664 }
8665}
8666#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8667pub struct PatternListOrGreen(pub GreenId);
8668impl TypedSyntaxNode for PatternListOr {
8669 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternListOr);
8670 type StablePtr = PatternListOrPtr;
8671 type Green = PatternListOrGreen;
8672 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8673 PatternListOrGreen(
8674 Arc::new(GreenNode {
8675 kind: SyntaxKind::PatternListOr,
8676 details: GreenNodeDetails::Node {
8677 children: [].into(),
8678 width: TextWidth::default(),
8679 },
8680 })
8681 .intern(db),
8682 )
8683 }
8684 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8685 Self(ElementList::new(node))
8686 }
8687 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8688 if node.kind(db) == SyntaxKind::PatternListOr {
8689 Some(Self(ElementList::new(node)))
8690 } else {
8691 None
8692 }
8693 }
8694 fn as_syntax_node(&self) -> SyntaxNode {
8695 self.node
8696 }
8697 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8698 PatternListOrPtr(self.node.stable_ptr(db))
8699 }
8700}
8701#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8702pub enum PatternStructParam {
8703 Single(PatternIdentifier),
8704 WithExpr(PatternStructParamWithExpr),
8705 Tail(TerminalDotDot),
8706}
8707#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8708pub struct PatternStructParamPtr(pub SyntaxStablePtrId);
8709impl TypedStablePtr for PatternStructParamPtr {
8710 type SyntaxNode = PatternStructParam;
8711 fn untyped(&self) -> SyntaxStablePtrId {
8712 self.0
8713 }
8714 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParam {
8715 PatternStructParam::from_syntax_node(db, self.0.lookup(db))
8716 }
8717}
8718impl From<PatternStructParamPtr> for SyntaxStablePtrId {
8719 fn from(ptr: PatternStructParamPtr) -> Self {
8720 ptr.untyped()
8721 }
8722}
8723impl From<PatternIdentifierPtr> for PatternStructParamPtr {
8724 fn from(value: PatternIdentifierPtr) -> Self {
8725 Self(value.0)
8726 }
8727}
8728impl From<PatternStructParamWithExprPtr> for PatternStructParamPtr {
8729 fn from(value: PatternStructParamWithExprPtr) -> Self {
8730 Self(value.0)
8731 }
8732}
8733impl From<TerminalDotDotPtr> for PatternStructParamPtr {
8734 fn from(value: TerminalDotDotPtr) -> Self {
8735 Self(value.0)
8736 }
8737}
8738impl From<PatternIdentifierGreen> for PatternStructParamGreen {
8739 fn from(value: PatternIdentifierGreen) -> Self {
8740 Self(value.0)
8741 }
8742}
8743impl From<PatternStructParamWithExprGreen> for PatternStructParamGreen {
8744 fn from(value: PatternStructParamWithExprGreen) -> Self {
8745 Self(value.0)
8746 }
8747}
8748impl From<TerminalDotDotGreen> for PatternStructParamGreen {
8749 fn from(value: TerminalDotDotGreen) -> Self {
8750 Self(value.0)
8751 }
8752}
8753#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8754pub struct PatternStructParamGreen(pub GreenId);
8755impl TypedSyntaxNode for PatternStructParam {
8756 const OPTIONAL_KIND: Option<SyntaxKind> = None;
8757 type StablePtr = PatternStructParamPtr;
8758 type Green = PatternStructParamGreen;
8759 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8760 panic!("No missing variant.");
8761 }
8762 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8763 let kind = node.kind(db);
8764 match kind {
8765 SyntaxKind::PatternIdentifier => {
8766 PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node))
8767 }
8768 SyntaxKind::PatternStructParamWithExpr => {
8769 PatternStructParam::WithExpr(PatternStructParamWithExpr::from_syntax_node(db, node))
8770 }
8771 SyntaxKind::TerminalDotDot => {
8772 PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node))
8773 }
8774 _ => panic!(
8775 "Unexpected syntax kind {:?} when constructing {}.",
8776 kind, "PatternStructParam"
8777 ),
8778 }
8779 }
8780 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8781 let kind = node.kind(db);
8782 match kind {
8783 SyntaxKind::PatternIdentifier => {
8784 Some(PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node)))
8785 }
8786 SyntaxKind::PatternStructParamWithExpr => Some(PatternStructParam::WithExpr(
8787 PatternStructParamWithExpr::from_syntax_node(db, node),
8788 )),
8789 SyntaxKind::TerminalDotDot => {
8790 Some(PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node)))
8791 }
8792 _ => None,
8793 }
8794 }
8795 fn as_syntax_node(&self) -> SyntaxNode {
8796 match self {
8797 PatternStructParam::Single(x) => x.as_syntax_node(),
8798 PatternStructParam::WithExpr(x) => x.as_syntax_node(),
8799 PatternStructParam::Tail(x) => x.as_syntax_node(),
8800 }
8801 }
8802 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8803 PatternStructParamPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
8804 }
8805}
8806impl PatternStructParam {
8807 pub fn is_variant(kind: SyntaxKind) -> bool {
8809 matches!(
8810 kind,
8811 SyntaxKind::PatternIdentifier
8812 | SyntaxKind::PatternStructParamWithExpr
8813 | SyntaxKind::TerminalDotDot
8814 )
8815 }
8816}
8817#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8818pub struct PatternStructParamWithExpr {
8819 node: SyntaxNode,
8820}
8821impl PatternStructParamWithExpr {
8822 pub const INDEX_MODIFIERS: usize = 0;
8823 pub const INDEX_NAME: usize = 1;
8824 pub const INDEX_COLON: usize = 2;
8825 pub const INDEX_PATTERN: usize = 3;
8826 pub fn new_green(
8827 db: &dyn SyntaxGroup,
8828 modifiers: ModifierListGreen,
8829 name: TerminalIdentifierGreen,
8830 colon: TerminalColonGreen,
8831 pattern: PatternGreen,
8832 ) -> PatternStructParamWithExprGreen {
8833 let children = [modifiers.0, name.0, colon.0, pattern.0];
8834 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8835 PatternStructParamWithExprGreen(
8836 Arc::new(GreenNode {
8837 kind: SyntaxKind::PatternStructParamWithExpr,
8838 details: GreenNodeDetails::Node { children: children.into(), width },
8839 })
8840 .intern(db),
8841 )
8842 }
8843}
8844impl PatternStructParamWithExpr {
8845 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
8846 ModifierList::from_syntax_node(db, self.node.get_children(db)[0])
8847 }
8848 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
8849 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
8850 }
8851 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
8852 TerminalColon::from_syntax_node(db, self.node.get_children(db)[2])
8853 }
8854 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
8855 Pattern::from_syntax_node(db, self.node.get_children(db)[3])
8856 }
8857}
8858#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8859pub struct PatternStructParamWithExprPtr(pub SyntaxStablePtrId);
8860impl PatternStructParamWithExprPtr {}
8861impl TypedStablePtr for PatternStructParamWithExprPtr {
8862 type SyntaxNode = PatternStructParamWithExpr;
8863 fn untyped(&self) -> SyntaxStablePtrId {
8864 self.0
8865 }
8866 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamWithExpr {
8867 PatternStructParamWithExpr::from_syntax_node(db, self.0.lookup(db))
8868 }
8869}
8870impl From<PatternStructParamWithExprPtr> for SyntaxStablePtrId {
8871 fn from(ptr: PatternStructParamWithExprPtr) -> Self {
8872 ptr.untyped()
8873 }
8874}
8875#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8876pub struct PatternStructParamWithExprGreen(pub GreenId);
8877impl TypedSyntaxNode for PatternStructParamWithExpr {
8878 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamWithExpr);
8879 type StablePtr = PatternStructParamWithExprPtr;
8880 type Green = PatternStructParamWithExprGreen;
8881 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8882 PatternStructParamWithExprGreen(
8883 Arc::new(GreenNode {
8884 kind: SyntaxKind::PatternStructParamWithExpr,
8885 details: GreenNodeDetails::Node {
8886 children: [
8887 ModifierList::missing(db).0,
8888 TerminalIdentifier::missing(db).0,
8889 TerminalColon::missing(db).0,
8890 Pattern::missing(db).0,
8891 ]
8892 .into(),
8893 width: TextWidth::default(),
8894 },
8895 })
8896 .intern(db),
8897 )
8898 }
8899 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8900 let kind = node.kind(db);
8901 assert_eq!(
8902 kind,
8903 SyntaxKind::PatternStructParamWithExpr,
8904 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8905 kind,
8906 SyntaxKind::PatternStructParamWithExpr
8907 );
8908 Self { node }
8909 }
8910 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8911 let kind = node.kind(db);
8912 if kind == SyntaxKind::PatternStructParamWithExpr {
8913 Some(Self::from_syntax_node(db, node))
8914 } else {
8915 None
8916 }
8917 }
8918 fn as_syntax_node(&self) -> SyntaxNode {
8919 self.node
8920 }
8921 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
8922 PatternStructParamWithExprPtr(self.node.stable_ptr(db))
8923 }
8924}
8925#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8926pub struct PatternEnum {
8927 node: SyntaxNode,
8928}
8929impl PatternEnum {
8930 pub const INDEX_PATH: usize = 0;
8931 pub const INDEX_PATTERN: usize = 1;
8932 pub fn new_green(
8933 db: &dyn SyntaxGroup,
8934 path: ExprPathGreen,
8935 pattern: OptionPatternEnumInnerPatternGreen,
8936 ) -> PatternEnumGreen {
8937 let children = [path.0, pattern.0];
8938 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
8939 PatternEnumGreen(
8940 Arc::new(GreenNode {
8941 kind: SyntaxKind::PatternEnum,
8942 details: GreenNodeDetails::Node { children: children.into(), width },
8943 })
8944 .intern(db),
8945 )
8946 }
8947}
8948impl PatternEnum {
8949 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8950 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
8951 }
8952 pub fn pattern(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
8953 OptionPatternEnumInnerPattern::from_syntax_node(db, self.node.get_children(db)[1])
8954 }
8955}
8956#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8957pub struct PatternEnumPtr(pub SyntaxStablePtrId);
8958impl PatternEnumPtr {}
8959impl TypedStablePtr for PatternEnumPtr {
8960 type SyntaxNode = PatternEnum;
8961 fn untyped(&self) -> SyntaxStablePtrId {
8962 self.0
8963 }
8964 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnum {
8965 PatternEnum::from_syntax_node(db, self.0.lookup(db))
8966 }
8967}
8968impl From<PatternEnumPtr> for SyntaxStablePtrId {
8969 fn from(ptr: PatternEnumPtr) -> Self {
8970 ptr.untyped()
8971 }
8972}
8973#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8974pub struct PatternEnumGreen(pub GreenId);
8975impl TypedSyntaxNode for PatternEnum {
8976 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnum);
8977 type StablePtr = PatternEnumPtr;
8978 type Green = PatternEnumGreen;
8979 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8980 PatternEnumGreen(
8981 Arc::new(GreenNode {
8982 kind: SyntaxKind::PatternEnum,
8983 details: GreenNodeDetails::Node {
8984 children: [
8985 ExprPath::missing(db).0,
8986 OptionPatternEnumInnerPattern::missing(db).0,
8987 ]
8988 .into(),
8989 width: TextWidth::default(),
8990 },
8991 })
8992 .intern(db),
8993 )
8994 }
8995 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8996 let kind = node.kind(db);
8997 assert_eq!(
8998 kind,
8999 SyntaxKind::PatternEnum,
9000 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9001 kind,
9002 SyntaxKind::PatternEnum
9003 );
9004 Self { node }
9005 }
9006 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9007 let kind = node.kind(db);
9008 if kind == SyntaxKind::PatternEnum { Some(Self::from_syntax_node(db, node)) } else { None }
9009 }
9010 fn as_syntax_node(&self) -> SyntaxNode {
9011 self.node
9012 }
9013 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9014 PatternEnumPtr(self.node.stable_ptr(db))
9015 }
9016}
9017#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9018pub struct PatternEnumInnerPattern {
9019 node: SyntaxNode,
9020}
9021impl PatternEnumInnerPattern {
9022 pub const INDEX_LPAREN: usize = 0;
9023 pub const INDEX_PATTERN: usize = 1;
9024 pub const INDEX_RPAREN: usize = 2;
9025 pub fn new_green(
9026 db: &dyn SyntaxGroup,
9027 lparen: TerminalLParenGreen,
9028 pattern: PatternGreen,
9029 rparen: TerminalRParenGreen,
9030 ) -> PatternEnumInnerPatternGreen {
9031 let children = [lparen.0, pattern.0, rparen.0];
9032 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9033 PatternEnumInnerPatternGreen(
9034 Arc::new(GreenNode {
9035 kind: SyntaxKind::PatternEnumInnerPattern,
9036 details: GreenNodeDetails::Node { children: children.into(), width },
9037 })
9038 .intern(db),
9039 )
9040 }
9041}
9042impl PatternEnumInnerPattern {
9043 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
9044 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
9045 }
9046 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
9047 Pattern::from_syntax_node(db, self.node.get_children(db)[1])
9048 }
9049 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
9050 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
9051 }
9052}
9053#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9054pub struct PatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
9055impl PatternEnumInnerPatternPtr {}
9056impl TypedStablePtr for PatternEnumInnerPatternPtr {
9057 type SyntaxNode = PatternEnumInnerPattern;
9058 fn untyped(&self) -> SyntaxStablePtrId {
9059 self.0
9060 }
9061 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnumInnerPattern {
9062 PatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
9063 }
9064}
9065impl From<PatternEnumInnerPatternPtr> for SyntaxStablePtrId {
9066 fn from(ptr: PatternEnumInnerPatternPtr) -> Self {
9067 ptr.untyped()
9068 }
9069}
9070#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9071pub struct PatternEnumInnerPatternGreen(pub GreenId);
9072impl TypedSyntaxNode for PatternEnumInnerPattern {
9073 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnumInnerPattern);
9074 type StablePtr = PatternEnumInnerPatternPtr;
9075 type Green = PatternEnumInnerPatternGreen;
9076 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9077 PatternEnumInnerPatternGreen(
9078 Arc::new(GreenNode {
9079 kind: SyntaxKind::PatternEnumInnerPattern,
9080 details: GreenNodeDetails::Node {
9081 children: [
9082 TerminalLParen::missing(db).0,
9083 Pattern::missing(db).0,
9084 TerminalRParen::missing(db).0,
9085 ]
9086 .into(),
9087 width: TextWidth::default(),
9088 },
9089 })
9090 .intern(db),
9091 )
9092 }
9093 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9094 let kind = node.kind(db);
9095 assert_eq!(
9096 kind,
9097 SyntaxKind::PatternEnumInnerPattern,
9098 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9099 kind,
9100 SyntaxKind::PatternEnumInnerPattern
9101 );
9102 Self { node }
9103 }
9104 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9105 let kind = node.kind(db);
9106 if kind == SyntaxKind::PatternEnumInnerPattern {
9107 Some(Self::from_syntax_node(db, node))
9108 } else {
9109 None
9110 }
9111 }
9112 fn as_syntax_node(&self) -> SyntaxNode {
9113 self.node
9114 }
9115 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9116 PatternEnumInnerPatternPtr(self.node.stable_ptr(db))
9117 }
9118}
9119#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9120pub enum OptionPatternEnumInnerPattern {
9121 Empty(OptionPatternEnumInnerPatternEmpty),
9122 PatternEnumInnerPattern(PatternEnumInnerPattern),
9123}
9124#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9125pub struct OptionPatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
9126impl TypedStablePtr for OptionPatternEnumInnerPatternPtr {
9127 type SyntaxNode = OptionPatternEnumInnerPattern;
9128 fn untyped(&self) -> SyntaxStablePtrId {
9129 self.0
9130 }
9131 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
9132 OptionPatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
9133 }
9134}
9135impl From<OptionPatternEnumInnerPatternPtr> for SyntaxStablePtrId {
9136 fn from(ptr: OptionPatternEnumInnerPatternPtr) -> Self {
9137 ptr.untyped()
9138 }
9139}
9140impl From<OptionPatternEnumInnerPatternEmptyPtr> for OptionPatternEnumInnerPatternPtr {
9141 fn from(value: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9142 Self(value.0)
9143 }
9144}
9145impl From<PatternEnumInnerPatternPtr> for OptionPatternEnumInnerPatternPtr {
9146 fn from(value: PatternEnumInnerPatternPtr) -> Self {
9147 Self(value.0)
9148 }
9149}
9150impl From<OptionPatternEnumInnerPatternEmptyGreen> for OptionPatternEnumInnerPatternGreen {
9151 fn from(value: OptionPatternEnumInnerPatternEmptyGreen) -> Self {
9152 Self(value.0)
9153 }
9154}
9155impl From<PatternEnumInnerPatternGreen> for OptionPatternEnumInnerPatternGreen {
9156 fn from(value: PatternEnumInnerPatternGreen) -> Self {
9157 Self(value.0)
9158 }
9159}
9160#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9161pub struct OptionPatternEnumInnerPatternGreen(pub GreenId);
9162impl TypedSyntaxNode for OptionPatternEnumInnerPattern {
9163 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9164 type StablePtr = OptionPatternEnumInnerPatternPtr;
9165 type Green = OptionPatternEnumInnerPatternGreen;
9166 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9167 panic!("No missing variant.");
9168 }
9169 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9170 let kind = node.kind(db);
9171 match kind {
9172 SyntaxKind::OptionPatternEnumInnerPatternEmpty => OptionPatternEnumInnerPattern::Empty(
9173 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9174 ),
9175 SyntaxKind::PatternEnumInnerPattern => {
9176 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9177 PatternEnumInnerPattern::from_syntax_node(db, node),
9178 )
9179 }
9180 _ => panic!(
9181 "Unexpected syntax kind {:?} when constructing {}.",
9182 kind, "OptionPatternEnumInnerPattern"
9183 ),
9184 }
9185 }
9186 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9187 let kind = node.kind(db);
9188 match kind {
9189 SyntaxKind::OptionPatternEnumInnerPatternEmpty => {
9190 Some(OptionPatternEnumInnerPattern::Empty(
9191 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9192 ))
9193 }
9194 SyntaxKind::PatternEnumInnerPattern => {
9195 Some(OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9196 PatternEnumInnerPattern::from_syntax_node(db, node),
9197 ))
9198 }
9199 _ => None,
9200 }
9201 }
9202 fn as_syntax_node(&self) -> SyntaxNode {
9203 match self {
9204 OptionPatternEnumInnerPattern::Empty(x) => x.as_syntax_node(),
9205 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(x) => x.as_syntax_node(),
9206 }
9207 }
9208 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9209 OptionPatternEnumInnerPatternPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
9210 }
9211}
9212impl OptionPatternEnumInnerPattern {
9213 pub fn is_variant(kind: SyntaxKind) -> bool {
9215 matches!(
9216 kind,
9217 SyntaxKind::OptionPatternEnumInnerPatternEmpty | SyntaxKind::PatternEnumInnerPattern
9218 )
9219 }
9220}
9221#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9222pub struct OptionPatternEnumInnerPatternEmpty {
9223 node: SyntaxNode,
9224}
9225impl OptionPatternEnumInnerPatternEmpty {
9226 pub fn new_green(db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmptyGreen {
9227 let children = [];
9228 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9229 OptionPatternEnumInnerPatternEmptyGreen(
9230 Arc::new(GreenNode {
9231 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9232 details: GreenNodeDetails::Node { children: children.into(), width },
9233 })
9234 .intern(db),
9235 )
9236 }
9237}
9238impl OptionPatternEnumInnerPatternEmpty {}
9239#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9240pub struct OptionPatternEnumInnerPatternEmptyPtr(pub SyntaxStablePtrId);
9241impl OptionPatternEnumInnerPatternEmptyPtr {}
9242impl TypedStablePtr for OptionPatternEnumInnerPatternEmptyPtr {
9243 type SyntaxNode = OptionPatternEnumInnerPatternEmpty;
9244 fn untyped(&self) -> SyntaxStablePtrId {
9245 self.0
9246 }
9247 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmpty {
9248 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, self.0.lookup(db))
9249 }
9250}
9251impl From<OptionPatternEnumInnerPatternEmptyPtr> for SyntaxStablePtrId {
9252 fn from(ptr: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9253 ptr.untyped()
9254 }
9255}
9256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9257pub struct OptionPatternEnumInnerPatternEmptyGreen(pub GreenId);
9258impl TypedSyntaxNode for OptionPatternEnumInnerPatternEmpty {
9259 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionPatternEnumInnerPatternEmpty);
9260 type StablePtr = OptionPatternEnumInnerPatternEmptyPtr;
9261 type Green = OptionPatternEnumInnerPatternEmptyGreen;
9262 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9263 OptionPatternEnumInnerPatternEmptyGreen(
9264 Arc::new(GreenNode {
9265 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9266 details: GreenNodeDetails::Node {
9267 children: [].into(),
9268 width: TextWidth::default(),
9269 },
9270 })
9271 .intern(db),
9272 )
9273 }
9274 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9275 let kind = node.kind(db);
9276 assert_eq!(
9277 kind,
9278 SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9279 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9280 kind,
9281 SyntaxKind::OptionPatternEnumInnerPatternEmpty
9282 );
9283 Self { node }
9284 }
9285 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9286 let kind = node.kind(db);
9287 if kind == SyntaxKind::OptionPatternEnumInnerPatternEmpty {
9288 Some(Self::from_syntax_node(db, node))
9289 } else {
9290 None
9291 }
9292 }
9293 fn as_syntax_node(&self) -> SyntaxNode {
9294 self.node
9295 }
9296 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9297 OptionPatternEnumInnerPatternEmptyPtr(self.node.stable_ptr(db))
9298 }
9299}
9300#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9301pub struct TypeClause {
9302 node: SyntaxNode,
9303}
9304impl TypeClause {
9305 pub const INDEX_COLON: usize = 0;
9306 pub const INDEX_TY: usize = 1;
9307 pub fn new_green(
9308 db: &dyn SyntaxGroup,
9309 colon: TerminalColonGreen,
9310 ty: ExprGreen,
9311 ) -> TypeClauseGreen {
9312 let children = [colon.0, ty.0];
9313 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9314 TypeClauseGreen(
9315 Arc::new(GreenNode {
9316 kind: SyntaxKind::TypeClause,
9317 details: GreenNodeDetails::Node { children: children.into(), width },
9318 })
9319 .intern(db),
9320 )
9321 }
9322}
9323impl TypeClause {
9324 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
9325 TerminalColon::from_syntax_node(db, self.node.get_children(db)[0])
9326 }
9327 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9328 Expr::from_syntax_node(db, self.node.get_children(db)[1])
9329 }
9330}
9331#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9332pub struct TypeClausePtr(pub SyntaxStablePtrId);
9333impl TypeClausePtr {}
9334impl TypedStablePtr for TypeClausePtr {
9335 type SyntaxNode = TypeClause;
9336 fn untyped(&self) -> SyntaxStablePtrId {
9337 self.0
9338 }
9339 fn lookup(&self, db: &dyn SyntaxGroup) -> TypeClause {
9340 TypeClause::from_syntax_node(db, self.0.lookup(db))
9341 }
9342}
9343impl From<TypeClausePtr> for SyntaxStablePtrId {
9344 fn from(ptr: TypeClausePtr) -> Self {
9345 ptr.untyped()
9346 }
9347}
9348#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9349pub struct TypeClauseGreen(pub GreenId);
9350impl TypedSyntaxNode for TypeClause {
9351 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TypeClause);
9352 type StablePtr = TypeClausePtr;
9353 type Green = TypeClauseGreen;
9354 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9355 TypeClauseGreen(
9356 Arc::new(GreenNode {
9357 kind: SyntaxKind::TypeClause,
9358 details: GreenNodeDetails::Node {
9359 children: [TerminalColon::missing(db).0, Expr::missing(db).0].into(),
9360 width: TextWidth::default(),
9361 },
9362 })
9363 .intern(db),
9364 )
9365 }
9366 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9367 let kind = node.kind(db);
9368 assert_eq!(
9369 kind,
9370 SyntaxKind::TypeClause,
9371 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9372 kind,
9373 SyntaxKind::TypeClause
9374 );
9375 Self { node }
9376 }
9377 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9378 let kind = node.kind(db);
9379 if kind == SyntaxKind::TypeClause { Some(Self::from_syntax_node(db, node)) } else { None }
9380 }
9381 fn as_syntax_node(&self) -> SyntaxNode {
9382 self.node
9383 }
9384 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9385 TypeClausePtr(self.node.stable_ptr(db))
9386 }
9387}
9388#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9389pub enum OptionTypeClause {
9390 Empty(OptionTypeClauseEmpty),
9391 TypeClause(TypeClause),
9392}
9393#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9394pub struct OptionTypeClausePtr(pub SyntaxStablePtrId);
9395impl TypedStablePtr for OptionTypeClausePtr {
9396 type SyntaxNode = OptionTypeClause;
9397 fn untyped(&self) -> SyntaxStablePtrId {
9398 self.0
9399 }
9400 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
9401 OptionTypeClause::from_syntax_node(db, self.0.lookup(db))
9402 }
9403}
9404impl From<OptionTypeClausePtr> for SyntaxStablePtrId {
9405 fn from(ptr: OptionTypeClausePtr) -> Self {
9406 ptr.untyped()
9407 }
9408}
9409impl From<OptionTypeClauseEmptyPtr> for OptionTypeClausePtr {
9410 fn from(value: OptionTypeClauseEmptyPtr) -> Self {
9411 Self(value.0)
9412 }
9413}
9414impl From<TypeClausePtr> for OptionTypeClausePtr {
9415 fn from(value: TypeClausePtr) -> Self {
9416 Self(value.0)
9417 }
9418}
9419impl From<OptionTypeClauseEmptyGreen> for OptionTypeClauseGreen {
9420 fn from(value: OptionTypeClauseEmptyGreen) -> Self {
9421 Self(value.0)
9422 }
9423}
9424impl From<TypeClauseGreen> for OptionTypeClauseGreen {
9425 fn from(value: TypeClauseGreen) -> Self {
9426 Self(value.0)
9427 }
9428}
9429#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9430pub struct OptionTypeClauseGreen(pub GreenId);
9431impl TypedSyntaxNode for OptionTypeClause {
9432 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9433 type StablePtr = OptionTypeClausePtr;
9434 type Green = OptionTypeClauseGreen;
9435 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9436 panic!("No missing variant.");
9437 }
9438 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9439 let kind = node.kind(db);
9440 match kind {
9441 SyntaxKind::OptionTypeClauseEmpty => {
9442 OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node))
9443 }
9444 SyntaxKind::TypeClause => {
9445 OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node))
9446 }
9447 _ => panic!(
9448 "Unexpected syntax kind {:?} when constructing {}.",
9449 kind, "OptionTypeClause"
9450 ),
9451 }
9452 }
9453 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9454 let kind = node.kind(db);
9455 match kind {
9456 SyntaxKind::OptionTypeClauseEmpty => {
9457 Some(OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node)))
9458 }
9459 SyntaxKind::TypeClause => {
9460 Some(OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node)))
9461 }
9462 _ => None,
9463 }
9464 }
9465 fn as_syntax_node(&self) -> SyntaxNode {
9466 match self {
9467 OptionTypeClause::Empty(x) => x.as_syntax_node(),
9468 OptionTypeClause::TypeClause(x) => x.as_syntax_node(),
9469 }
9470 }
9471 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9472 OptionTypeClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
9473 }
9474}
9475impl OptionTypeClause {
9476 pub fn is_variant(kind: SyntaxKind) -> bool {
9478 matches!(kind, SyntaxKind::OptionTypeClauseEmpty | SyntaxKind::TypeClause)
9479 }
9480}
9481#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9482pub struct OptionTypeClauseEmpty {
9483 node: SyntaxNode,
9484}
9485impl OptionTypeClauseEmpty {
9486 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTypeClauseEmptyGreen {
9487 let children = [];
9488 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9489 OptionTypeClauseEmptyGreen(
9490 Arc::new(GreenNode {
9491 kind: SyntaxKind::OptionTypeClauseEmpty,
9492 details: GreenNodeDetails::Node { children: children.into(), width },
9493 })
9494 .intern(db),
9495 )
9496 }
9497}
9498impl OptionTypeClauseEmpty {}
9499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9500pub struct OptionTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9501impl OptionTypeClauseEmptyPtr {}
9502impl TypedStablePtr for OptionTypeClauseEmptyPtr {
9503 type SyntaxNode = OptionTypeClauseEmpty;
9504 fn untyped(&self) -> SyntaxStablePtrId {
9505 self.0
9506 }
9507 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClauseEmpty {
9508 OptionTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9509 }
9510}
9511impl From<OptionTypeClauseEmptyPtr> for SyntaxStablePtrId {
9512 fn from(ptr: OptionTypeClauseEmptyPtr) -> Self {
9513 ptr.untyped()
9514 }
9515}
9516#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9517pub struct OptionTypeClauseEmptyGreen(pub GreenId);
9518impl TypedSyntaxNode for OptionTypeClauseEmpty {
9519 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTypeClauseEmpty);
9520 type StablePtr = OptionTypeClauseEmptyPtr;
9521 type Green = OptionTypeClauseEmptyGreen;
9522 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9523 OptionTypeClauseEmptyGreen(
9524 Arc::new(GreenNode {
9525 kind: SyntaxKind::OptionTypeClauseEmpty,
9526 details: GreenNodeDetails::Node {
9527 children: [].into(),
9528 width: TextWidth::default(),
9529 },
9530 })
9531 .intern(db),
9532 )
9533 }
9534 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9535 let kind = node.kind(db);
9536 assert_eq!(
9537 kind,
9538 SyntaxKind::OptionTypeClauseEmpty,
9539 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9540 kind,
9541 SyntaxKind::OptionTypeClauseEmpty
9542 );
9543 Self { node }
9544 }
9545 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9546 let kind = node.kind(db);
9547 if kind == SyntaxKind::OptionTypeClauseEmpty {
9548 Some(Self::from_syntax_node(db, node))
9549 } else {
9550 None
9551 }
9552 }
9553 fn as_syntax_node(&self) -> SyntaxNode {
9554 self.node
9555 }
9556 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9557 OptionTypeClauseEmptyPtr(self.node.stable_ptr(db))
9558 }
9559}
9560#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9561pub struct ReturnTypeClause {
9562 node: SyntaxNode,
9563}
9564impl ReturnTypeClause {
9565 pub const INDEX_ARROW: usize = 0;
9566 pub const INDEX_TY: usize = 1;
9567 pub fn new_green(
9568 db: &dyn SyntaxGroup,
9569 arrow: TerminalArrowGreen,
9570 ty: ExprGreen,
9571 ) -> ReturnTypeClauseGreen {
9572 let children = [arrow.0, ty.0];
9573 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9574 ReturnTypeClauseGreen(
9575 Arc::new(GreenNode {
9576 kind: SyntaxKind::ReturnTypeClause,
9577 details: GreenNodeDetails::Node { children: children.into(), width },
9578 })
9579 .intern(db),
9580 )
9581 }
9582}
9583impl ReturnTypeClause {
9584 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
9585 TerminalArrow::from_syntax_node(db, self.node.get_children(db)[0])
9586 }
9587 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9588 Expr::from_syntax_node(db, self.node.get_children(db)[1])
9589 }
9590}
9591#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9592pub struct ReturnTypeClausePtr(pub SyntaxStablePtrId);
9593impl ReturnTypeClausePtr {}
9594impl TypedStablePtr for ReturnTypeClausePtr {
9595 type SyntaxNode = ReturnTypeClause;
9596 fn untyped(&self) -> SyntaxStablePtrId {
9597 self.0
9598 }
9599 fn lookup(&self, db: &dyn SyntaxGroup) -> ReturnTypeClause {
9600 ReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9601 }
9602}
9603impl From<ReturnTypeClausePtr> for SyntaxStablePtrId {
9604 fn from(ptr: ReturnTypeClausePtr) -> Self {
9605 ptr.untyped()
9606 }
9607}
9608#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9609pub struct ReturnTypeClauseGreen(pub GreenId);
9610impl TypedSyntaxNode for ReturnTypeClause {
9611 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ReturnTypeClause);
9612 type StablePtr = ReturnTypeClausePtr;
9613 type Green = ReturnTypeClauseGreen;
9614 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9615 ReturnTypeClauseGreen(
9616 Arc::new(GreenNode {
9617 kind: SyntaxKind::ReturnTypeClause,
9618 details: GreenNodeDetails::Node {
9619 children: [TerminalArrow::missing(db).0, Expr::missing(db).0].into(),
9620 width: TextWidth::default(),
9621 },
9622 })
9623 .intern(db),
9624 )
9625 }
9626 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9627 let kind = node.kind(db);
9628 assert_eq!(
9629 kind,
9630 SyntaxKind::ReturnTypeClause,
9631 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9632 kind,
9633 SyntaxKind::ReturnTypeClause
9634 );
9635 Self { node }
9636 }
9637 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9638 let kind = node.kind(db);
9639 if kind == SyntaxKind::ReturnTypeClause {
9640 Some(Self::from_syntax_node(db, node))
9641 } else {
9642 None
9643 }
9644 }
9645 fn as_syntax_node(&self) -> SyntaxNode {
9646 self.node
9647 }
9648 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9649 ReturnTypeClausePtr(self.node.stable_ptr(db))
9650 }
9651}
9652#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9653pub enum OptionReturnTypeClause {
9654 Empty(OptionReturnTypeClauseEmpty),
9655 ReturnTypeClause(ReturnTypeClause),
9656}
9657#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9658pub struct OptionReturnTypeClausePtr(pub SyntaxStablePtrId);
9659impl TypedStablePtr for OptionReturnTypeClausePtr {
9660 type SyntaxNode = OptionReturnTypeClause;
9661 fn untyped(&self) -> SyntaxStablePtrId {
9662 self.0
9663 }
9664 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
9665 OptionReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9666 }
9667}
9668impl From<OptionReturnTypeClausePtr> for SyntaxStablePtrId {
9669 fn from(ptr: OptionReturnTypeClausePtr) -> Self {
9670 ptr.untyped()
9671 }
9672}
9673impl From<OptionReturnTypeClauseEmptyPtr> for OptionReturnTypeClausePtr {
9674 fn from(value: OptionReturnTypeClauseEmptyPtr) -> Self {
9675 Self(value.0)
9676 }
9677}
9678impl From<ReturnTypeClausePtr> for OptionReturnTypeClausePtr {
9679 fn from(value: ReturnTypeClausePtr) -> Self {
9680 Self(value.0)
9681 }
9682}
9683impl From<OptionReturnTypeClauseEmptyGreen> for OptionReturnTypeClauseGreen {
9684 fn from(value: OptionReturnTypeClauseEmptyGreen) -> Self {
9685 Self(value.0)
9686 }
9687}
9688impl From<ReturnTypeClauseGreen> for OptionReturnTypeClauseGreen {
9689 fn from(value: ReturnTypeClauseGreen) -> Self {
9690 Self(value.0)
9691 }
9692}
9693#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9694pub struct OptionReturnTypeClauseGreen(pub GreenId);
9695impl TypedSyntaxNode for OptionReturnTypeClause {
9696 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9697 type StablePtr = OptionReturnTypeClausePtr;
9698 type Green = OptionReturnTypeClauseGreen;
9699 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9700 panic!("No missing variant.");
9701 }
9702 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9703 let kind = node.kind(db);
9704 match kind {
9705 SyntaxKind::OptionReturnTypeClauseEmpty => OptionReturnTypeClause::Empty(
9706 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9707 ),
9708 SyntaxKind::ReturnTypeClause => OptionReturnTypeClause::ReturnTypeClause(
9709 ReturnTypeClause::from_syntax_node(db, node),
9710 ),
9711 _ => panic!(
9712 "Unexpected syntax kind {:?} when constructing {}.",
9713 kind, "OptionReturnTypeClause"
9714 ),
9715 }
9716 }
9717 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9718 let kind = node.kind(db);
9719 match kind {
9720 SyntaxKind::OptionReturnTypeClauseEmpty => Some(OptionReturnTypeClause::Empty(
9721 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9722 )),
9723 SyntaxKind::ReturnTypeClause => Some(OptionReturnTypeClause::ReturnTypeClause(
9724 ReturnTypeClause::from_syntax_node(db, node),
9725 )),
9726 _ => None,
9727 }
9728 }
9729 fn as_syntax_node(&self) -> SyntaxNode {
9730 match self {
9731 OptionReturnTypeClause::Empty(x) => x.as_syntax_node(),
9732 OptionReturnTypeClause::ReturnTypeClause(x) => x.as_syntax_node(),
9733 }
9734 }
9735 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9736 OptionReturnTypeClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
9737 }
9738}
9739impl OptionReturnTypeClause {
9740 pub fn is_variant(kind: SyntaxKind) -> bool {
9742 matches!(kind, SyntaxKind::OptionReturnTypeClauseEmpty | SyntaxKind::ReturnTypeClause)
9743 }
9744}
9745#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9746pub struct OptionReturnTypeClauseEmpty {
9747 node: SyntaxNode,
9748}
9749impl OptionReturnTypeClauseEmpty {
9750 pub fn new_green(db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmptyGreen {
9751 let children = [];
9752 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
9753 OptionReturnTypeClauseEmptyGreen(
9754 Arc::new(GreenNode {
9755 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9756 details: GreenNodeDetails::Node { children: children.into(), width },
9757 })
9758 .intern(db),
9759 )
9760 }
9761}
9762impl OptionReturnTypeClauseEmpty {}
9763#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9764pub struct OptionReturnTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9765impl OptionReturnTypeClauseEmptyPtr {}
9766impl TypedStablePtr for OptionReturnTypeClauseEmptyPtr {
9767 type SyntaxNode = OptionReturnTypeClauseEmpty;
9768 fn untyped(&self) -> SyntaxStablePtrId {
9769 self.0
9770 }
9771 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmpty {
9772 OptionReturnTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9773 }
9774}
9775impl From<OptionReturnTypeClauseEmptyPtr> for SyntaxStablePtrId {
9776 fn from(ptr: OptionReturnTypeClauseEmptyPtr) -> Self {
9777 ptr.untyped()
9778 }
9779}
9780#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9781pub struct OptionReturnTypeClauseEmptyGreen(pub GreenId);
9782impl TypedSyntaxNode for OptionReturnTypeClauseEmpty {
9783 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionReturnTypeClauseEmpty);
9784 type StablePtr = OptionReturnTypeClauseEmptyPtr;
9785 type Green = OptionReturnTypeClauseEmptyGreen;
9786 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9787 OptionReturnTypeClauseEmptyGreen(
9788 Arc::new(GreenNode {
9789 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9790 details: GreenNodeDetails::Node {
9791 children: [].into(),
9792 width: TextWidth::default(),
9793 },
9794 })
9795 .intern(db),
9796 )
9797 }
9798 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9799 let kind = node.kind(db);
9800 assert_eq!(
9801 kind,
9802 SyntaxKind::OptionReturnTypeClauseEmpty,
9803 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9804 kind,
9805 SyntaxKind::OptionReturnTypeClauseEmpty
9806 );
9807 Self { node }
9808 }
9809 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9810 let kind = node.kind(db);
9811 if kind == SyntaxKind::OptionReturnTypeClauseEmpty {
9812 Some(Self::from_syntax_node(db, node))
9813 } else {
9814 None
9815 }
9816 }
9817 fn as_syntax_node(&self) -> SyntaxNode {
9818 self.node
9819 }
9820 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9821 OptionReturnTypeClauseEmptyPtr(self.node.stable_ptr(db))
9822 }
9823}
9824#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9825pub enum Statement {
9826 Let(StatementLet),
9827 Expr(StatementExpr),
9828 Continue(StatementContinue),
9829 Return(StatementReturn),
9830 Break(StatementBreak),
9831 Item(StatementItem),
9832 Missing(StatementMissing),
9833}
9834#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9835pub struct StatementPtr(pub SyntaxStablePtrId);
9836impl TypedStablePtr for StatementPtr {
9837 type SyntaxNode = Statement;
9838 fn untyped(&self) -> SyntaxStablePtrId {
9839 self.0
9840 }
9841 fn lookup(&self, db: &dyn SyntaxGroup) -> Statement {
9842 Statement::from_syntax_node(db, self.0.lookup(db))
9843 }
9844}
9845impl From<StatementPtr> for SyntaxStablePtrId {
9846 fn from(ptr: StatementPtr) -> Self {
9847 ptr.untyped()
9848 }
9849}
9850impl From<StatementLetPtr> for StatementPtr {
9851 fn from(value: StatementLetPtr) -> Self {
9852 Self(value.0)
9853 }
9854}
9855impl From<StatementExprPtr> for StatementPtr {
9856 fn from(value: StatementExprPtr) -> Self {
9857 Self(value.0)
9858 }
9859}
9860impl From<StatementContinuePtr> for StatementPtr {
9861 fn from(value: StatementContinuePtr) -> Self {
9862 Self(value.0)
9863 }
9864}
9865impl From<StatementReturnPtr> for StatementPtr {
9866 fn from(value: StatementReturnPtr) -> Self {
9867 Self(value.0)
9868 }
9869}
9870impl From<StatementBreakPtr> for StatementPtr {
9871 fn from(value: StatementBreakPtr) -> Self {
9872 Self(value.0)
9873 }
9874}
9875impl From<StatementItemPtr> for StatementPtr {
9876 fn from(value: StatementItemPtr) -> Self {
9877 Self(value.0)
9878 }
9879}
9880impl From<StatementMissingPtr> for StatementPtr {
9881 fn from(value: StatementMissingPtr) -> Self {
9882 Self(value.0)
9883 }
9884}
9885impl From<StatementLetGreen> for StatementGreen {
9886 fn from(value: StatementLetGreen) -> Self {
9887 Self(value.0)
9888 }
9889}
9890impl From<StatementExprGreen> for StatementGreen {
9891 fn from(value: StatementExprGreen) -> Self {
9892 Self(value.0)
9893 }
9894}
9895impl From<StatementContinueGreen> for StatementGreen {
9896 fn from(value: StatementContinueGreen) -> Self {
9897 Self(value.0)
9898 }
9899}
9900impl From<StatementReturnGreen> for StatementGreen {
9901 fn from(value: StatementReturnGreen) -> Self {
9902 Self(value.0)
9903 }
9904}
9905impl From<StatementBreakGreen> for StatementGreen {
9906 fn from(value: StatementBreakGreen) -> Self {
9907 Self(value.0)
9908 }
9909}
9910impl From<StatementItemGreen> for StatementGreen {
9911 fn from(value: StatementItemGreen) -> Self {
9912 Self(value.0)
9913 }
9914}
9915impl From<StatementMissingGreen> for StatementGreen {
9916 fn from(value: StatementMissingGreen) -> Self {
9917 Self(value.0)
9918 }
9919}
9920#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9921pub struct StatementGreen(pub GreenId);
9922impl TypedSyntaxNode for Statement {
9923 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9924 type StablePtr = StatementPtr;
9925 type Green = StatementGreen;
9926 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9927 StatementGreen(StatementMissing::missing(db).0)
9928 }
9929 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9930 let kind = node.kind(db);
9931 match kind {
9932 SyntaxKind::StatementLet => Statement::Let(StatementLet::from_syntax_node(db, node)),
9933 SyntaxKind::StatementExpr => Statement::Expr(StatementExpr::from_syntax_node(db, node)),
9934 SyntaxKind::StatementContinue => {
9935 Statement::Continue(StatementContinue::from_syntax_node(db, node))
9936 }
9937 SyntaxKind::StatementReturn => {
9938 Statement::Return(StatementReturn::from_syntax_node(db, node))
9939 }
9940 SyntaxKind::StatementBreak => {
9941 Statement::Break(StatementBreak::from_syntax_node(db, node))
9942 }
9943 SyntaxKind::StatementItem => Statement::Item(StatementItem::from_syntax_node(db, node)),
9944 SyntaxKind::StatementMissing => {
9945 Statement::Missing(StatementMissing::from_syntax_node(db, node))
9946 }
9947 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Statement"),
9948 }
9949 }
9950 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9951 let kind = node.kind(db);
9952 match kind {
9953 SyntaxKind::StatementLet => {
9954 Some(Statement::Let(StatementLet::from_syntax_node(db, node)))
9955 }
9956 SyntaxKind::StatementExpr => {
9957 Some(Statement::Expr(StatementExpr::from_syntax_node(db, node)))
9958 }
9959 SyntaxKind::StatementContinue => {
9960 Some(Statement::Continue(StatementContinue::from_syntax_node(db, node)))
9961 }
9962 SyntaxKind::StatementReturn => {
9963 Some(Statement::Return(StatementReturn::from_syntax_node(db, node)))
9964 }
9965 SyntaxKind::StatementBreak => {
9966 Some(Statement::Break(StatementBreak::from_syntax_node(db, node)))
9967 }
9968 SyntaxKind::StatementItem => {
9969 Some(Statement::Item(StatementItem::from_syntax_node(db, node)))
9970 }
9971 SyntaxKind::StatementMissing => {
9972 Some(Statement::Missing(StatementMissing::from_syntax_node(db, node)))
9973 }
9974 _ => None,
9975 }
9976 }
9977 fn as_syntax_node(&self) -> SyntaxNode {
9978 match self {
9979 Statement::Let(x) => x.as_syntax_node(),
9980 Statement::Expr(x) => x.as_syntax_node(),
9981 Statement::Continue(x) => x.as_syntax_node(),
9982 Statement::Return(x) => x.as_syntax_node(),
9983 Statement::Break(x) => x.as_syntax_node(),
9984 Statement::Item(x) => x.as_syntax_node(),
9985 Statement::Missing(x) => x.as_syntax_node(),
9986 }
9987 }
9988 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
9989 StatementPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
9990 }
9991}
9992impl Statement {
9993 pub fn is_variant(kind: SyntaxKind) -> bool {
9995 matches!(
9996 kind,
9997 SyntaxKind::StatementLet
9998 | SyntaxKind::StatementExpr
9999 | SyntaxKind::StatementContinue
10000 | SyntaxKind::StatementReturn
10001 | SyntaxKind::StatementBreak
10002 | SyntaxKind::StatementItem
10003 | SyntaxKind::StatementMissing
10004 )
10005 }
10006}
10007#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10008pub struct StatementList(ElementList<Statement, 1>);
10009impl Deref for StatementList {
10010 type Target = ElementList<Statement, 1>;
10011 fn deref(&self) -> &Self::Target {
10012 &self.0
10013 }
10014}
10015impl StatementList {
10016 pub fn new_green(db: &dyn SyntaxGroup, children: &[StatementGreen]) -> StatementListGreen {
10017 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
10018 StatementListGreen(
10019 Arc::new(GreenNode {
10020 kind: SyntaxKind::StatementList,
10021 details: GreenNodeDetails::Node {
10022 children: children.iter().map(|x| x.0).collect(),
10023 width,
10024 },
10025 })
10026 .intern(db),
10027 )
10028 }
10029}
10030#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10031pub struct StatementListPtr(pub SyntaxStablePtrId);
10032impl TypedStablePtr for StatementListPtr {
10033 type SyntaxNode = StatementList;
10034 fn untyped(&self) -> SyntaxStablePtrId {
10035 self.0
10036 }
10037 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementList {
10038 StatementList::from_syntax_node(db, self.0.lookup(db))
10039 }
10040}
10041impl From<StatementListPtr> for SyntaxStablePtrId {
10042 fn from(ptr: StatementListPtr) -> Self {
10043 ptr.untyped()
10044 }
10045}
10046#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10047pub struct StatementListGreen(pub GreenId);
10048impl TypedSyntaxNode for StatementList {
10049 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementList);
10050 type StablePtr = StatementListPtr;
10051 type Green = StatementListGreen;
10052 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10053 StatementListGreen(
10054 Arc::new(GreenNode {
10055 kind: SyntaxKind::StatementList,
10056 details: GreenNodeDetails::Node {
10057 children: [].into(),
10058 width: TextWidth::default(),
10059 },
10060 })
10061 .intern(db),
10062 )
10063 }
10064 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10065 Self(ElementList::new(node))
10066 }
10067 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10068 if node.kind(db) == SyntaxKind::StatementList {
10069 Some(Self(ElementList::new(node)))
10070 } else {
10071 None
10072 }
10073 }
10074 fn as_syntax_node(&self) -> SyntaxNode {
10075 self.node
10076 }
10077 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10078 StatementListPtr(self.node.stable_ptr(db))
10079 }
10080}
10081#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10082pub struct StatementMissing {
10083 node: SyntaxNode,
10084}
10085impl StatementMissing {
10086 pub fn new_green(db: &dyn SyntaxGroup) -> StatementMissingGreen {
10087 let children = [];
10088 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10089 StatementMissingGreen(
10090 Arc::new(GreenNode {
10091 kind: SyntaxKind::StatementMissing,
10092 details: GreenNodeDetails::Node { children: children.into(), width },
10093 })
10094 .intern(db),
10095 )
10096 }
10097}
10098impl StatementMissing {}
10099#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10100pub struct StatementMissingPtr(pub SyntaxStablePtrId);
10101impl StatementMissingPtr {}
10102impl TypedStablePtr for StatementMissingPtr {
10103 type SyntaxNode = StatementMissing;
10104 fn untyped(&self) -> SyntaxStablePtrId {
10105 self.0
10106 }
10107 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementMissing {
10108 StatementMissing::from_syntax_node(db, self.0.lookup(db))
10109 }
10110}
10111impl From<StatementMissingPtr> for SyntaxStablePtrId {
10112 fn from(ptr: StatementMissingPtr) -> Self {
10113 ptr.untyped()
10114 }
10115}
10116#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10117pub struct StatementMissingGreen(pub GreenId);
10118impl TypedSyntaxNode for StatementMissing {
10119 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementMissing);
10120 type StablePtr = StatementMissingPtr;
10121 type Green = StatementMissingGreen;
10122 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10123 StatementMissingGreen(
10124 Arc::new(GreenNode {
10125 kind: SyntaxKind::StatementMissing,
10126 details: GreenNodeDetails::Node {
10127 children: [].into(),
10128 width: TextWidth::default(),
10129 },
10130 })
10131 .intern(db),
10132 )
10133 }
10134 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10135 let kind = node.kind(db);
10136 assert_eq!(
10137 kind,
10138 SyntaxKind::StatementMissing,
10139 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10140 kind,
10141 SyntaxKind::StatementMissing
10142 );
10143 Self { node }
10144 }
10145 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10146 let kind = node.kind(db);
10147 if kind == SyntaxKind::StatementMissing {
10148 Some(Self::from_syntax_node(db, node))
10149 } else {
10150 None
10151 }
10152 }
10153 fn as_syntax_node(&self) -> SyntaxNode {
10154 self.node
10155 }
10156 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10157 StatementMissingPtr(self.node.stable_ptr(db))
10158 }
10159}
10160#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10161pub struct StatementLet {
10162 node: SyntaxNode,
10163}
10164impl StatementLet {
10165 pub const INDEX_ATTRIBUTES: usize = 0;
10166 pub const INDEX_LET_KW: usize = 1;
10167 pub const INDEX_PATTERN: usize = 2;
10168 pub const INDEX_TYPE_CLAUSE: usize = 3;
10169 pub const INDEX_EQ: usize = 4;
10170 pub const INDEX_RHS: usize = 5;
10171 pub const INDEX_LET_ELSE_CLAUSE: usize = 6;
10172 pub const INDEX_SEMICOLON: usize = 7;
10173 pub fn new_green(
10174 db: &dyn SyntaxGroup,
10175 attributes: AttributeListGreen,
10176 let_kw: TerminalLetGreen,
10177 pattern: PatternGreen,
10178 type_clause: OptionTypeClauseGreen,
10179 eq: TerminalEqGreen,
10180 rhs: ExprGreen,
10181 let_else_clause: OptionLetElseClauseGreen,
10182 semicolon: TerminalSemicolonGreen,
10183 ) -> StatementLetGreen {
10184 let children = [
10185 attributes.0,
10186 let_kw.0,
10187 pattern.0,
10188 type_clause.0,
10189 eq.0,
10190 rhs.0,
10191 let_else_clause.0,
10192 semicolon.0,
10193 ];
10194 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10195 StatementLetGreen(
10196 Arc::new(GreenNode {
10197 kind: SyntaxKind::StatementLet,
10198 details: GreenNodeDetails::Node { children: children.into(), width },
10199 })
10200 .intern(db),
10201 )
10202 }
10203}
10204impl StatementLet {
10205 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10206 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
10207 }
10208 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
10209 TerminalLet::from_syntax_node(db, self.node.get_children(db)[1])
10210 }
10211 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
10212 Pattern::from_syntax_node(db, self.node.get_children(db)[2])
10213 }
10214 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
10215 OptionTypeClause::from_syntax_node(db, self.node.get_children(db)[3])
10216 }
10217 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
10218 TerminalEq::from_syntax_node(db, self.node.get_children(db)[4])
10219 }
10220 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
10221 Expr::from_syntax_node(db, self.node.get_children(db)[5])
10222 }
10223 pub fn let_else_clause(&self, db: &dyn SyntaxGroup) -> OptionLetElseClause {
10224 OptionLetElseClause::from_syntax_node(db, self.node.get_children(db)[6])
10225 }
10226 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10227 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[7])
10228 }
10229}
10230#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10231pub struct StatementLetPtr(pub SyntaxStablePtrId);
10232impl StatementLetPtr {
10233 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
10234 let ptr = self.0.lookup_intern(db);
10235 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
10236 PatternGreen(key_fields[0])
10237 } else {
10238 panic!("Unexpected key field query on root.");
10239 }
10240 }
10241}
10242impl TypedStablePtr for StatementLetPtr {
10243 type SyntaxNode = StatementLet;
10244 fn untyped(&self) -> SyntaxStablePtrId {
10245 self.0
10246 }
10247 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementLet {
10248 StatementLet::from_syntax_node(db, self.0.lookup(db))
10249 }
10250}
10251impl From<StatementLetPtr> for SyntaxStablePtrId {
10252 fn from(ptr: StatementLetPtr) -> Self {
10253 ptr.untyped()
10254 }
10255}
10256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10257pub struct StatementLetGreen(pub GreenId);
10258impl TypedSyntaxNode for StatementLet {
10259 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementLet);
10260 type StablePtr = StatementLetPtr;
10261 type Green = StatementLetGreen;
10262 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10263 StatementLetGreen(
10264 Arc::new(GreenNode {
10265 kind: SyntaxKind::StatementLet,
10266 details: GreenNodeDetails::Node {
10267 children: [
10268 AttributeList::missing(db).0,
10269 TerminalLet::missing(db).0,
10270 Pattern::missing(db).0,
10271 OptionTypeClause::missing(db).0,
10272 TerminalEq::missing(db).0,
10273 Expr::missing(db).0,
10274 OptionLetElseClause::missing(db).0,
10275 TerminalSemicolon::missing(db).0,
10276 ]
10277 .into(),
10278 width: TextWidth::default(),
10279 },
10280 })
10281 .intern(db),
10282 )
10283 }
10284 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10285 let kind = node.kind(db);
10286 assert_eq!(
10287 kind,
10288 SyntaxKind::StatementLet,
10289 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10290 kind,
10291 SyntaxKind::StatementLet
10292 );
10293 Self { node }
10294 }
10295 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10296 let kind = node.kind(db);
10297 if kind == SyntaxKind::StatementLet { Some(Self::from_syntax_node(db, node)) } else { None }
10298 }
10299 fn as_syntax_node(&self) -> SyntaxNode {
10300 self.node
10301 }
10302 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10303 StatementLetPtr(self.node.stable_ptr(db))
10304 }
10305}
10306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10307pub struct LetElseClause {
10308 node: SyntaxNode,
10309}
10310impl LetElseClause {
10311 pub const INDEX_ELSE_KW: usize = 0;
10312 pub const INDEX_ELSE_BLOCK: usize = 1;
10313 pub fn new_green(
10314 db: &dyn SyntaxGroup,
10315 else_kw: TerminalElseGreen,
10316 else_block: ExprBlockGreen,
10317 ) -> LetElseClauseGreen {
10318 let children = [else_kw.0, else_block.0];
10319 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10320 LetElseClauseGreen(
10321 Arc::new(GreenNode {
10322 kind: SyntaxKind::LetElseClause,
10323 details: GreenNodeDetails::Node { children: children.into(), width },
10324 })
10325 .intern(db),
10326 )
10327 }
10328}
10329impl LetElseClause {
10330 pub fn else_kw(&self, db: &dyn SyntaxGroup) -> TerminalElse {
10331 TerminalElse::from_syntax_node(db, self.node.get_children(db)[0])
10332 }
10333 pub fn else_block(&self, db: &dyn SyntaxGroup) -> ExprBlock {
10334 ExprBlock::from_syntax_node(db, self.node.get_children(db)[1])
10335 }
10336}
10337#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10338pub struct LetElseClausePtr(pub SyntaxStablePtrId);
10339impl LetElseClausePtr {}
10340impl TypedStablePtr for LetElseClausePtr {
10341 type SyntaxNode = LetElseClause;
10342 fn untyped(&self) -> SyntaxStablePtrId {
10343 self.0
10344 }
10345 fn lookup(&self, db: &dyn SyntaxGroup) -> LetElseClause {
10346 LetElseClause::from_syntax_node(db, self.0.lookup(db))
10347 }
10348}
10349impl From<LetElseClausePtr> for SyntaxStablePtrId {
10350 fn from(ptr: LetElseClausePtr) -> Self {
10351 ptr.untyped()
10352 }
10353}
10354#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10355pub struct LetElseClauseGreen(pub GreenId);
10356impl TypedSyntaxNode for LetElseClause {
10357 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::LetElseClause);
10358 type StablePtr = LetElseClausePtr;
10359 type Green = LetElseClauseGreen;
10360 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10361 LetElseClauseGreen(
10362 Arc::new(GreenNode {
10363 kind: SyntaxKind::LetElseClause,
10364 details: GreenNodeDetails::Node {
10365 children: [TerminalElse::missing(db).0, ExprBlock::missing(db).0].into(),
10366 width: TextWidth::default(),
10367 },
10368 })
10369 .intern(db),
10370 )
10371 }
10372 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10373 let kind = node.kind(db);
10374 assert_eq!(
10375 kind,
10376 SyntaxKind::LetElseClause,
10377 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10378 kind,
10379 SyntaxKind::LetElseClause
10380 );
10381 Self { node }
10382 }
10383 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10384 let kind = node.kind(db);
10385 if kind == SyntaxKind::LetElseClause {
10386 Some(Self::from_syntax_node(db, node))
10387 } else {
10388 None
10389 }
10390 }
10391 fn as_syntax_node(&self) -> SyntaxNode {
10392 self.node
10393 }
10394 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10395 LetElseClausePtr(self.node.stable_ptr(db))
10396 }
10397}
10398#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10399pub enum OptionLetElseClause {
10400 Empty(OptionLetElseClauseEmpty),
10401 LetElseClause(LetElseClause),
10402}
10403#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10404pub struct OptionLetElseClausePtr(pub SyntaxStablePtrId);
10405impl TypedStablePtr for OptionLetElseClausePtr {
10406 type SyntaxNode = OptionLetElseClause;
10407 fn untyped(&self) -> SyntaxStablePtrId {
10408 self.0
10409 }
10410 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionLetElseClause {
10411 OptionLetElseClause::from_syntax_node(db, self.0.lookup(db))
10412 }
10413}
10414impl From<OptionLetElseClausePtr> for SyntaxStablePtrId {
10415 fn from(ptr: OptionLetElseClausePtr) -> Self {
10416 ptr.untyped()
10417 }
10418}
10419impl From<OptionLetElseClauseEmptyPtr> for OptionLetElseClausePtr {
10420 fn from(value: OptionLetElseClauseEmptyPtr) -> Self {
10421 Self(value.0)
10422 }
10423}
10424impl From<LetElseClausePtr> for OptionLetElseClausePtr {
10425 fn from(value: LetElseClausePtr) -> Self {
10426 Self(value.0)
10427 }
10428}
10429impl From<OptionLetElseClauseEmptyGreen> for OptionLetElseClauseGreen {
10430 fn from(value: OptionLetElseClauseEmptyGreen) -> Self {
10431 Self(value.0)
10432 }
10433}
10434impl From<LetElseClauseGreen> for OptionLetElseClauseGreen {
10435 fn from(value: LetElseClauseGreen) -> Self {
10436 Self(value.0)
10437 }
10438}
10439#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10440pub struct OptionLetElseClauseGreen(pub GreenId);
10441impl TypedSyntaxNode for OptionLetElseClause {
10442 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10443 type StablePtr = OptionLetElseClausePtr;
10444 type Green = OptionLetElseClauseGreen;
10445 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10446 panic!("No missing variant.");
10447 }
10448 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10449 let kind = node.kind(db);
10450 match kind {
10451 SyntaxKind::OptionLetElseClauseEmpty => {
10452 OptionLetElseClause::Empty(OptionLetElseClauseEmpty::from_syntax_node(db, node))
10453 }
10454 SyntaxKind::LetElseClause => {
10455 OptionLetElseClause::LetElseClause(LetElseClause::from_syntax_node(db, node))
10456 }
10457 _ => panic!(
10458 "Unexpected syntax kind {:?} when constructing {}.",
10459 kind, "OptionLetElseClause"
10460 ),
10461 }
10462 }
10463 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10464 let kind = node.kind(db);
10465 match kind {
10466 SyntaxKind::OptionLetElseClauseEmpty => Some(OptionLetElseClause::Empty(
10467 OptionLetElseClauseEmpty::from_syntax_node(db, node),
10468 )),
10469 SyntaxKind::LetElseClause => {
10470 Some(OptionLetElseClause::LetElseClause(LetElseClause::from_syntax_node(db, node)))
10471 }
10472 _ => None,
10473 }
10474 }
10475 fn as_syntax_node(&self) -> SyntaxNode {
10476 match self {
10477 OptionLetElseClause::Empty(x) => x.as_syntax_node(),
10478 OptionLetElseClause::LetElseClause(x) => x.as_syntax_node(),
10479 }
10480 }
10481 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10482 OptionLetElseClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
10483 }
10484}
10485impl OptionLetElseClause {
10486 pub fn is_variant(kind: SyntaxKind) -> bool {
10488 matches!(kind, SyntaxKind::OptionLetElseClauseEmpty | SyntaxKind::LetElseClause)
10489 }
10490}
10491#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10492pub struct OptionLetElseClauseEmpty {
10493 node: SyntaxNode,
10494}
10495impl OptionLetElseClauseEmpty {
10496 pub fn new_green(db: &dyn SyntaxGroup) -> OptionLetElseClauseEmptyGreen {
10497 let children = [];
10498 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10499 OptionLetElseClauseEmptyGreen(
10500 Arc::new(GreenNode {
10501 kind: SyntaxKind::OptionLetElseClauseEmpty,
10502 details: GreenNodeDetails::Node { children: children.into(), width },
10503 })
10504 .intern(db),
10505 )
10506 }
10507}
10508impl OptionLetElseClauseEmpty {}
10509#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10510pub struct OptionLetElseClauseEmptyPtr(pub SyntaxStablePtrId);
10511impl OptionLetElseClauseEmptyPtr {}
10512impl TypedStablePtr for OptionLetElseClauseEmptyPtr {
10513 type SyntaxNode = OptionLetElseClauseEmpty;
10514 fn untyped(&self) -> SyntaxStablePtrId {
10515 self.0
10516 }
10517 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionLetElseClauseEmpty {
10518 OptionLetElseClauseEmpty::from_syntax_node(db, self.0.lookup(db))
10519 }
10520}
10521impl From<OptionLetElseClauseEmptyPtr> for SyntaxStablePtrId {
10522 fn from(ptr: OptionLetElseClauseEmptyPtr) -> Self {
10523 ptr.untyped()
10524 }
10525}
10526#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10527pub struct OptionLetElseClauseEmptyGreen(pub GreenId);
10528impl TypedSyntaxNode for OptionLetElseClauseEmpty {
10529 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionLetElseClauseEmpty);
10530 type StablePtr = OptionLetElseClauseEmptyPtr;
10531 type Green = OptionLetElseClauseEmptyGreen;
10532 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10533 OptionLetElseClauseEmptyGreen(
10534 Arc::new(GreenNode {
10535 kind: SyntaxKind::OptionLetElseClauseEmpty,
10536 details: GreenNodeDetails::Node {
10537 children: [].into(),
10538 width: TextWidth::default(),
10539 },
10540 })
10541 .intern(db),
10542 )
10543 }
10544 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10545 let kind = node.kind(db);
10546 assert_eq!(
10547 kind,
10548 SyntaxKind::OptionLetElseClauseEmpty,
10549 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10550 kind,
10551 SyntaxKind::OptionLetElseClauseEmpty
10552 );
10553 Self { node }
10554 }
10555 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10556 let kind = node.kind(db);
10557 if kind == SyntaxKind::OptionLetElseClauseEmpty {
10558 Some(Self::from_syntax_node(db, node))
10559 } else {
10560 None
10561 }
10562 }
10563 fn as_syntax_node(&self) -> SyntaxNode {
10564 self.node
10565 }
10566 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10567 OptionLetElseClauseEmptyPtr(self.node.stable_ptr(db))
10568 }
10569}
10570#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10571pub enum OptionTerminalSemicolon {
10572 Empty(OptionTerminalSemicolonEmpty),
10573 TerminalSemicolon(TerminalSemicolon),
10574}
10575#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10576pub struct OptionTerminalSemicolonPtr(pub SyntaxStablePtrId);
10577impl TypedStablePtr for OptionTerminalSemicolonPtr {
10578 type SyntaxNode = OptionTerminalSemicolon;
10579 fn untyped(&self) -> SyntaxStablePtrId {
10580 self.0
10581 }
10582 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10583 OptionTerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
10584 }
10585}
10586impl From<OptionTerminalSemicolonPtr> for SyntaxStablePtrId {
10587 fn from(ptr: OptionTerminalSemicolonPtr) -> Self {
10588 ptr.untyped()
10589 }
10590}
10591impl From<OptionTerminalSemicolonEmptyPtr> for OptionTerminalSemicolonPtr {
10592 fn from(value: OptionTerminalSemicolonEmptyPtr) -> Self {
10593 Self(value.0)
10594 }
10595}
10596impl From<TerminalSemicolonPtr> for OptionTerminalSemicolonPtr {
10597 fn from(value: TerminalSemicolonPtr) -> Self {
10598 Self(value.0)
10599 }
10600}
10601impl From<OptionTerminalSemicolonEmptyGreen> for OptionTerminalSemicolonGreen {
10602 fn from(value: OptionTerminalSemicolonEmptyGreen) -> Self {
10603 Self(value.0)
10604 }
10605}
10606impl From<TerminalSemicolonGreen> for OptionTerminalSemicolonGreen {
10607 fn from(value: TerminalSemicolonGreen) -> Self {
10608 Self(value.0)
10609 }
10610}
10611#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10612pub struct OptionTerminalSemicolonGreen(pub GreenId);
10613impl TypedSyntaxNode for OptionTerminalSemicolon {
10614 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10615 type StablePtr = OptionTerminalSemicolonPtr;
10616 type Green = OptionTerminalSemicolonGreen;
10617 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10618 panic!("No missing variant.");
10619 }
10620 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10621 let kind = node.kind(db);
10622 match kind {
10623 SyntaxKind::OptionTerminalSemicolonEmpty => OptionTerminalSemicolon::Empty(
10624 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10625 ),
10626 SyntaxKind::TerminalSemicolon => OptionTerminalSemicolon::TerminalSemicolon(
10627 TerminalSemicolon::from_syntax_node(db, node),
10628 ),
10629 _ => panic!(
10630 "Unexpected syntax kind {:?} when constructing {}.",
10631 kind, "OptionTerminalSemicolon"
10632 ),
10633 }
10634 }
10635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10636 let kind = node.kind(db);
10637 match kind {
10638 SyntaxKind::OptionTerminalSemicolonEmpty => Some(OptionTerminalSemicolon::Empty(
10639 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10640 )),
10641 SyntaxKind::TerminalSemicolon => Some(OptionTerminalSemicolon::TerminalSemicolon(
10642 TerminalSemicolon::from_syntax_node(db, node),
10643 )),
10644 _ => None,
10645 }
10646 }
10647 fn as_syntax_node(&self) -> SyntaxNode {
10648 match self {
10649 OptionTerminalSemicolon::Empty(x) => x.as_syntax_node(),
10650 OptionTerminalSemicolon::TerminalSemicolon(x) => x.as_syntax_node(),
10651 }
10652 }
10653 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10654 OptionTerminalSemicolonPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
10655 }
10656}
10657impl OptionTerminalSemicolon {
10658 pub fn is_variant(kind: SyntaxKind) -> bool {
10660 matches!(kind, SyntaxKind::OptionTerminalSemicolonEmpty | SyntaxKind::TerminalSemicolon)
10661 }
10662}
10663#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10664pub struct OptionTerminalSemicolonEmpty {
10665 node: SyntaxNode,
10666}
10667impl OptionTerminalSemicolonEmpty {
10668 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmptyGreen {
10669 let children = [];
10670 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10671 OptionTerminalSemicolonEmptyGreen(
10672 Arc::new(GreenNode {
10673 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10674 details: GreenNodeDetails::Node { children: children.into(), width },
10675 })
10676 .intern(db),
10677 )
10678 }
10679}
10680impl OptionTerminalSemicolonEmpty {}
10681#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10682pub struct OptionTerminalSemicolonEmptyPtr(pub SyntaxStablePtrId);
10683impl OptionTerminalSemicolonEmptyPtr {}
10684impl TypedStablePtr for OptionTerminalSemicolonEmptyPtr {
10685 type SyntaxNode = OptionTerminalSemicolonEmpty;
10686 fn untyped(&self) -> SyntaxStablePtrId {
10687 self.0
10688 }
10689 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmpty {
10690 OptionTerminalSemicolonEmpty::from_syntax_node(db, self.0.lookup(db))
10691 }
10692}
10693impl From<OptionTerminalSemicolonEmptyPtr> for SyntaxStablePtrId {
10694 fn from(ptr: OptionTerminalSemicolonEmptyPtr) -> Self {
10695 ptr.untyped()
10696 }
10697}
10698#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10699pub struct OptionTerminalSemicolonEmptyGreen(pub GreenId);
10700impl TypedSyntaxNode for OptionTerminalSemicolonEmpty {
10701 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalSemicolonEmpty);
10702 type StablePtr = OptionTerminalSemicolonEmptyPtr;
10703 type Green = OptionTerminalSemicolonEmptyGreen;
10704 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10705 OptionTerminalSemicolonEmptyGreen(
10706 Arc::new(GreenNode {
10707 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10708 details: GreenNodeDetails::Node {
10709 children: [].into(),
10710 width: TextWidth::default(),
10711 },
10712 })
10713 .intern(db),
10714 )
10715 }
10716 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10717 let kind = node.kind(db);
10718 assert_eq!(
10719 kind,
10720 SyntaxKind::OptionTerminalSemicolonEmpty,
10721 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10722 kind,
10723 SyntaxKind::OptionTerminalSemicolonEmpty
10724 );
10725 Self { node }
10726 }
10727 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10728 let kind = node.kind(db);
10729 if kind == SyntaxKind::OptionTerminalSemicolonEmpty {
10730 Some(Self::from_syntax_node(db, node))
10731 } else {
10732 None
10733 }
10734 }
10735 fn as_syntax_node(&self) -> SyntaxNode {
10736 self.node
10737 }
10738 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10739 OptionTerminalSemicolonEmptyPtr(self.node.stable_ptr(db))
10740 }
10741}
10742#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10743pub struct StatementExpr {
10744 node: SyntaxNode,
10745}
10746impl StatementExpr {
10747 pub const INDEX_ATTRIBUTES: usize = 0;
10748 pub const INDEX_EXPR: usize = 1;
10749 pub const INDEX_SEMICOLON: usize = 2;
10750 pub fn new_green(
10751 db: &dyn SyntaxGroup,
10752 attributes: AttributeListGreen,
10753 expr: ExprGreen,
10754 semicolon: OptionTerminalSemicolonGreen,
10755 ) -> StatementExprGreen {
10756 let children = [attributes.0, expr.0, semicolon.0];
10757 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10758 StatementExprGreen(
10759 Arc::new(GreenNode {
10760 kind: SyntaxKind::StatementExpr,
10761 details: GreenNodeDetails::Node { children: children.into(), width },
10762 })
10763 .intern(db),
10764 )
10765 }
10766}
10767impl StatementExpr {
10768 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10769 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
10770 }
10771 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10772 Expr::from_syntax_node(db, self.node.get_children(db)[1])
10773 }
10774 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10775 OptionTerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[2])
10776 }
10777}
10778#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10779pub struct StatementExprPtr(pub SyntaxStablePtrId);
10780impl StatementExprPtr {}
10781impl TypedStablePtr for StatementExprPtr {
10782 type SyntaxNode = StatementExpr;
10783 fn untyped(&self) -> SyntaxStablePtrId {
10784 self.0
10785 }
10786 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementExpr {
10787 StatementExpr::from_syntax_node(db, self.0.lookup(db))
10788 }
10789}
10790impl From<StatementExprPtr> for SyntaxStablePtrId {
10791 fn from(ptr: StatementExprPtr) -> Self {
10792 ptr.untyped()
10793 }
10794}
10795#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10796pub struct StatementExprGreen(pub GreenId);
10797impl TypedSyntaxNode for StatementExpr {
10798 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementExpr);
10799 type StablePtr = StatementExprPtr;
10800 type Green = StatementExprGreen;
10801 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10802 StatementExprGreen(
10803 Arc::new(GreenNode {
10804 kind: SyntaxKind::StatementExpr,
10805 details: GreenNodeDetails::Node {
10806 children: [
10807 AttributeList::missing(db).0,
10808 Expr::missing(db).0,
10809 OptionTerminalSemicolon::missing(db).0,
10810 ]
10811 .into(),
10812 width: TextWidth::default(),
10813 },
10814 })
10815 .intern(db),
10816 )
10817 }
10818 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10819 let kind = node.kind(db);
10820 assert_eq!(
10821 kind,
10822 SyntaxKind::StatementExpr,
10823 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10824 kind,
10825 SyntaxKind::StatementExpr
10826 );
10827 Self { node }
10828 }
10829 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10830 let kind = node.kind(db);
10831 if kind == SyntaxKind::StatementExpr {
10832 Some(Self::from_syntax_node(db, node))
10833 } else {
10834 None
10835 }
10836 }
10837 fn as_syntax_node(&self) -> SyntaxNode {
10838 self.node
10839 }
10840 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10841 StatementExprPtr(self.node.stable_ptr(db))
10842 }
10843}
10844#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10845pub struct StatementContinue {
10846 node: SyntaxNode,
10847}
10848impl StatementContinue {
10849 pub const INDEX_ATTRIBUTES: usize = 0;
10850 pub const INDEX_CONTINUE_KW: usize = 1;
10851 pub const INDEX_SEMICOLON: usize = 2;
10852 pub fn new_green(
10853 db: &dyn SyntaxGroup,
10854 attributes: AttributeListGreen,
10855 continue_kw: TerminalContinueGreen,
10856 semicolon: TerminalSemicolonGreen,
10857 ) -> StatementContinueGreen {
10858 let children = [attributes.0, continue_kw.0, semicolon.0];
10859 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10860 StatementContinueGreen(
10861 Arc::new(GreenNode {
10862 kind: SyntaxKind::StatementContinue,
10863 details: GreenNodeDetails::Node { children: children.into(), width },
10864 })
10865 .intern(db),
10866 )
10867 }
10868}
10869impl StatementContinue {
10870 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10871 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
10872 }
10873 pub fn continue_kw(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
10874 TerminalContinue::from_syntax_node(db, self.node.get_children(db)[1])
10875 }
10876 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10877 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[2])
10878 }
10879}
10880#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10881pub struct StatementContinuePtr(pub SyntaxStablePtrId);
10882impl StatementContinuePtr {}
10883impl TypedStablePtr for StatementContinuePtr {
10884 type SyntaxNode = StatementContinue;
10885 fn untyped(&self) -> SyntaxStablePtrId {
10886 self.0
10887 }
10888 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementContinue {
10889 StatementContinue::from_syntax_node(db, self.0.lookup(db))
10890 }
10891}
10892impl From<StatementContinuePtr> for SyntaxStablePtrId {
10893 fn from(ptr: StatementContinuePtr) -> Self {
10894 ptr.untyped()
10895 }
10896}
10897#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10898pub struct StatementContinueGreen(pub GreenId);
10899impl TypedSyntaxNode for StatementContinue {
10900 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementContinue);
10901 type StablePtr = StatementContinuePtr;
10902 type Green = StatementContinueGreen;
10903 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10904 StatementContinueGreen(
10905 Arc::new(GreenNode {
10906 kind: SyntaxKind::StatementContinue,
10907 details: GreenNodeDetails::Node {
10908 children: [
10909 AttributeList::missing(db).0,
10910 TerminalContinue::missing(db).0,
10911 TerminalSemicolon::missing(db).0,
10912 ]
10913 .into(),
10914 width: TextWidth::default(),
10915 },
10916 })
10917 .intern(db),
10918 )
10919 }
10920 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10921 let kind = node.kind(db);
10922 assert_eq!(
10923 kind,
10924 SyntaxKind::StatementContinue,
10925 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10926 kind,
10927 SyntaxKind::StatementContinue
10928 );
10929 Self { node }
10930 }
10931 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10932 let kind = node.kind(db);
10933 if kind == SyntaxKind::StatementContinue {
10934 Some(Self::from_syntax_node(db, node))
10935 } else {
10936 None
10937 }
10938 }
10939 fn as_syntax_node(&self) -> SyntaxNode {
10940 self.node
10941 }
10942 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
10943 StatementContinuePtr(self.node.stable_ptr(db))
10944 }
10945}
10946#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10947pub struct ExprClause {
10948 node: SyntaxNode,
10949}
10950impl ExprClause {
10951 pub const INDEX_EXPR: usize = 0;
10952 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ExprClauseGreen {
10953 let children = [expr.0];
10954 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
10955 ExprClauseGreen(
10956 Arc::new(GreenNode {
10957 kind: SyntaxKind::ExprClause,
10958 details: GreenNodeDetails::Node { children: children.into(), width },
10959 })
10960 .intern(db),
10961 )
10962 }
10963}
10964impl ExprClause {
10965 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10966 Expr::from_syntax_node(db, self.node.get_children(db)[0])
10967 }
10968}
10969#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10970pub struct ExprClausePtr(pub SyntaxStablePtrId);
10971impl ExprClausePtr {}
10972impl TypedStablePtr for ExprClausePtr {
10973 type SyntaxNode = ExprClause;
10974 fn untyped(&self) -> SyntaxStablePtrId {
10975 self.0
10976 }
10977 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClause {
10978 ExprClause::from_syntax_node(db, self.0.lookup(db))
10979 }
10980}
10981impl From<ExprClausePtr> for SyntaxStablePtrId {
10982 fn from(ptr: ExprClausePtr) -> Self {
10983 ptr.untyped()
10984 }
10985}
10986#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10987pub struct ExprClauseGreen(pub GreenId);
10988impl TypedSyntaxNode for ExprClause {
10989 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClause);
10990 type StablePtr = ExprClausePtr;
10991 type Green = ExprClauseGreen;
10992 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10993 ExprClauseGreen(
10994 Arc::new(GreenNode {
10995 kind: SyntaxKind::ExprClause,
10996 details: GreenNodeDetails::Node {
10997 children: [Expr::missing(db).0].into(),
10998 width: TextWidth::default(),
10999 },
11000 })
11001 .intern(db),
11002 )
11003 }
11004 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11005 let kind = node.kind(db);
11006 assert_eq!(
11007 kind,
11008 SyntaxKind::ExprClause,
11009 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11010 kind,
11011 SyntaxKind::ExprClause
11012 );
11013 Self { node }
11014 }
11015 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11016 let kind = node.kind(db);
11017 if kind == SyntaxKind::ExprClause { Some(Self::from_syntax_node(db, node)) } else { None }
11018 }
11019 fn as_syntax_node(&self) -> SyntaxNode {
11020 self.node
11021 }
11022 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11023 ExprClausePtr(self.node.stable_ptr(db))
11024 }
11025}
11026#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11027pub enum OptionExprClause {
11028 Empty(OptionExprClauseEmpty),
11029 ExprClause(ExprClause),
11030}
11031#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11032pub struct OptionExprClausePtr(pub SyntaxStablePtrId);
11033impl TypedStablePtr for OptionExprClausePtr {
11034 type SyntaxNode = OptionExprClause;
11035 fn untyped(&self) -> SyntaxStablePtrId {
11036 self.0
11037 }
11038 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11039 OptionExprClause::from_syntax_node(db, self.0.lookup(db))
11040 }
11041}
11042impl From<OptionExprClausePtr> for SyntaxStablePtrId {
11043 fn from(ptr: OptionExprClausePtr) -> Self {
11044 ptr.untyped()
11045 }
11046}
11047impl From<OptionExprClauseEmptyPtr> for OptionExprClausePtr {
11048 fn from(value: OptionExprClauseEmptyPtr) -> Self {
11049 Self(value.0)
11050 }
11051}
11052impl From<ExprClausePtr> for OptionExprClausePtr {
11053 fn from(value: ExprClausePtr) -> Self {
11054 Self(value.0)
11055 }
11056}
11057impl From<OptionExprClauseEmptyGreen> for OptionExprClauseGreen {
11058 fn from(value: OptionExprClauseEmptyGreen) -> Self {
11059 Self(value.0)
11060 }
11061}
11062impl From<ExprClauseGreen> for OptionExprClauseGreen {
11063 fn from(value: ExprClauseGreen) -> Self {
11064 Self(value.0)
11065 }
11066}
11067#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11068pub struct OptionExprClauseGreen(pub GreenId);
11069impl TypedSyntaxNode for OptionExprClause {
11070 const OPTIONAL_KIND: Option<SyntaxKind> = None;
11071 type StablePtr = OptionExprClausePtr;
11072 type Green = OptionExprClauseGreen;
11073 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11074 panic!("No missing variant.");
11075 }
11076 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11077 let kind = node.kind(db);
11078 match kind {
11079 SyntaxKind::OptionExprClauseEmpty => {
11080 OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node))
11081 }
11082 SyntaxKind::ExprClause => {
11083 OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node))
11084 }
11085 _ => panic!(
11086 "Unexpected syntax kind {:?} when constructing {}.",
11087 kind, "OptionExprClause"
11088 ),
11089 }
11090 }
11091 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11092 let kind = node.kind(db);
11093 match kind {
11094 SyntaxKind::OptionExprClauseEmpty => {
11095 Some(OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node)))
11096 }
11097 SyntaxKind::ExprClause => {
11098 Some(OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node)))
11099 }
11100 _ => None,
11101 }
11102 }
11103 fn as_syntax_node(&self) -> SyntaxNode {
11104 match self {
11105 OptionExprClause::Empty(x) => x.as_syntax_node(),
11106 OptionExprClause::ExprClause(x) => x.as_syntax_node(),
11107 }
11108 }
11109 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11110 OptionExprClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
11111 }
11112}
11113impl OptionExprClause {
11114 pub fn is_variant(kind: SyntaxKind) -> bool {
11116 matches!(kind, SyntaxKind::OptionExprClauseEmpty | SyntaxKind::ExprClause)
11117 }
11118}
11119#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11120pub struct OptionExprClauseEmpty {
11121 node: SyntaxNode,
11122}
11123impl OptionExprClauseEmpty {
11124 pub fn new_green(db: &dyn SyntaxGroup) -> OptionExprClauseEmptyGreen {
11125 let children = [];
11126 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11127 OptionExprClauseEmptyGreen(
11128 Arc::new(GreenNode {
11129 kind: SyntaxKind::OptionExprClauseEmpty,
11130 details: GreenNodeDetails::Node { children: children.into(), width },
11131 })
11132 .intern(db),
11133 )
11134 }
11135}
11136impl OptionExprClauseEmpty {}
11137#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11138pub struct OptionExprClauseEmptyPtr(pub SyntaxStablePtrId);
11139impl OptionExprClauseEmptyPtr {}
11140impl TypedStablePtr for OptionExprClauseEmptyPtr {
11141 type SyntaxNode = OptionExprClauseEmpty;
11142 fn untyped(&self) -> SyntaxStablePtrId {
11143 self.0
11144 }
11145 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClauseEmpty {
11146 OptionExprClauseEmpty::from_syntax_node(db, self.0.lookup(db))
11147 }
11148}
11149impl From<OptionExprClauseEmptyPtr> for SyntaxStablePtrId {
11150 fn from(ptr: OptionExprClauseEmptyPtr) -> Self {
11151 ptr.untyped()
11152 }
11153}
11154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11155pub struct OptionExprClauseEmptyGreen(pub GreenId);
11156impl TypedSyntaxNode for OptionExprClauseEmpty {
11157 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionExprClauseEmpty);
11158 type StablePtr = OptionExprClauseEmptyPtr;
11159 type Green = OptionExprClauseEmptyGreen;
11160 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11161 OptionExprClauseEmptyGreen(
11162 Arc::new(GreenNode {
11163 kind: SyntaxKind::OptionExprClauseEmpty,
11164 details: GreenNodeDetails::Node {
11165 children: [].into(),
11166 width: TextWidth::default(),
11167 },
11168 })
11169 .intern(db),
11170 )
11171 }
11172 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11173 let kind = node.kind(db);
11174 assert_eq!(
11175 kind,
11176 SyntaxKind::OptionExprClauseEmpty,
11177 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11178 kind,
11179 SyntaxKind::OptionExprClauseEmpty
11180 );
11181 Self { node }
11182 }
11183 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11184 let kind = node.kind(db);
11185 if kind == SyntaxKind::OptionExprClauseEmpty {
11186 Some(Self::from_syntax_node(db, node))
11187 } else {
11188 None
11189 }
11190 }
11191 fn as_syntax_node(&self) -> SyntaxNode {
11192 self.node
11193 }
11194 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11195 OptionExprClauseEmptyPtr(self.node.stable_ptr(db))
11196 }
11197}
11198#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11199pub struct StatementReturn {
11200 node: SyntaxNode,
11201}
11202impl StatementReturn {
11203 pub const INDEX_ATTRIBUTES: usize = 0;
11204 pub const INDEX_RETURN_KW: usize = 1;
11205 pub const INDEX_EXPR_CLAUSE: usize = 2;
11206 pub const INDEX_SEMICOLON: usize = 3;
11207 pub fn new_green(
11208 db: &dyn SyntaxGroup,
11209 attributes: AttributeListGreen,
11210 return_kw: TerminalReturnGreen,
11211 expr_clause: OptionExprClauseGreen,
11212 semicolon: TerminalSemicolonGreen,
11213 ) -> StatementReturnGreen {
11214 let children = [attributes.0, return_kw.0, expr_clause.0, semicolon.0];
11215 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11216 StatementReturnGreen(
11217 Arc::new(GreenNode {
11218 kind: SyntaxKind::StatementReturn,
11219 details: GreenNodeDetails::Node { children: children.into(), width },
11220 })
11221 .intern(db),
11222 )
11223 }
11224}
11225impl StatementReturn {
11226 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
11227 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
11228 }
11229 pub fn return_kw(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
11230 TerminalReturn::from_syntax_node(db, self.node.get_children(db)[1])
11231 }
11232 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11233 OptionExprClause::from_syntax_node(db, self.node.get_children(db)[2])
11234 }
11235 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
11236 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[3])
11237 }
11238}
11239#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11240pub struct StatementReturnPtr(pub SyntaxStablePtrId);
11241impl StatementReturnPtr {}
11242impl TypedStablePtr for StatementReturnPtr {
11243 type SyntaxNode = StatementReturn;
11244 fn untyped(&self) -> SyntaxStablePtrId {
11245 self.0
11246 }
11247 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementReturn {
11248 StatementReturn::from_syntax_node(db, self.0.lookup(db))
11249 }
11250}
11251impl From<StatementReturnPtr> for SyntaxStablePtrId {
11252 fn from(ptr: StatementReturnPtr) -> Self {
11253 ptr.untyped()
11254 }
11255}
11256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11257pub struct StatementReturnGreen(pub GreenId);
11258impl TypedSyntaxNode for StatementReturn {
11259 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementReturn);
11260 type StablePtr = StatementReturnPtr;
11261 type Green = StatementReturnGreen;
11262 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11263 StatementReturnGreen(
11264 Arc::new(GreenNode {
11265 kind: SyntaxKind::StatementReturn,
11266 details: GreenNodeDetails::Node {
11267 children: [
11268 AttributeList::missing(db).0,
11269 TerminalReturn::missing(db).0,
11270 OptionExprClause::missing(db).0,
11271 TerminalSemicolon::missing(db).0,
11272 ]
11273 .into(),
11274 width: TextWidth::default(),
11275 },
11276 })
11277 .intern(db),
11278 )
11279 }
11280 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11281 let kind = node.kind(db);
11282 assert_eq!(
11283 kind,
11284 SyntaxKind::StatementReturn,
11285 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11286 kind,
11287 SyntaxKind::StatementReturn
11288 );
11289 Self { node }
11290 }
11291 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11292 let kind = node.kind(db);
11293 if kind == SyntaxKind::StatementReturn {
11294 Some(Self::from_syntax_node(db, node))
11295 } else {
11296 None
11297 }
11298 }
11299 fn as_syntax_node(&self) -> SyntaxNode {
11300 self.node
11301 }
11302 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11303 StatementReturnPtr(self.node.stable_ptr(db))
11304 }
11305}
11306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11307pub struct StatementBreak {
11308 node: SyntaxNode,
11309}
11310impl StatementBreak {
11311 pub const INDEX_ATTRIBUTES: usize = 0;
11312 pub const INDEX_BREAK_KW: usize = 1;
11313 pub const INDEX_EXPR_CLAUSE: usize = 2;
11314 pub const INDEX_SEMICOLON: usize = 3;
11315 pub fn new_green(
11316 db: &dyn SyntaxGroup,
11317 attributes: AttributeListGreen,
11318 break_kw: TerminalBreakGreen,
11319 expr_clause: OptionExprClauseGreen,
11320 semicolon: TerminalSemicolonGreen,
11321 ) -> StatementBreakGreen {
11322 let children = [attributes.0, break_kw.0, expr_clause.0, semicolon.0];
11323 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11324 StatementBreakGreen(
11325 Arc::new(GreenNode {
11326 kind: SyntaxKind::StatementBreak,
11327 details: GreenNodeDetails::Node { children: children.into(), width },
11328 })
11329 .intern(db),
11330 )
11331 }
11332}
11333impl StatementBreak {
11334 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
11335 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
11336 }
11337 pub fn break_kw(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
11338 TerminalBreak::from_syntax_node(db, self.node.get_children(db)[1])
11339 }
11340 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11341 OptionExprClause::from_syntax_node(db, self.node.get_children(db)[2])
11342 }
11343 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
11344 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[3])
11345 }
11346}
11347#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11348pub struct StatementBreakPtr(pub SyntaxStablePtrId);
11349impl StatementBreakPtr {}
11350impl TypedStablePtr for StatementBreakPtr {
11351 type SyntaxNode = StatementBreak;
11352 fn untyped(&self) -> SyntaxStablePtrId {
11353 self.0
11354 }
11355 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementBreak {
11356 StatementBreak::from_syntax_node(db, self.0.lookup(db))
11357 }
11358}
11359impl From<StatementBreakPtr> for SyntaxStablePtrId {
11360 fn from(ptr: StatementBreakPtr) -> Self {
11361 ptr.untyped()
11362 }
11363}
11364#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11365pub struct StatementBreakGreen(pub GreenId);
11366impl TypedSyntaxNode for StatementBreak {
11367 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementBreak);
11368 type StablePtr = StatementBreakPtr;
11369 type Green = StatementBreakGreen;
11370 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11371 StatementBreakGreen(
11372 Arc::new(GreenNode {
11373 kind: SyntaxKind::StatementBreak,
11374 details: GreenNodeDetails::Node {
11375 children: [
11376 AttributeList::missing(db).0,
11377 TerminalBreak::missing(db).0,
11378 OptionExprClause::missing(db).0,
11379 TerminalSemicolon::missing(db).0,
11380 ]
11381 .into(),
11382 width: TextWidth::default(),
11383 },
11384 })
11385 .intern(db),
11386 )
11387 }
11388 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11389 let kind = node.kind(db);
11390 assert_eq!(
11391 kind,
11392 SyntaxKind::StatementBreak,
11393 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11394 kind,
11395 SyntaxKind::StatementBreak
11396 );
11397 Self { node }
11398 }
11399 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11400 let kind = node.kind(db);
11401 if kind == SyntaxKind::StatementBreak {
11402 Some(Self::from_syntax_node(db, node))
11403 } else {
11404 None
11405 }
11406 }
11407 fn as_syntax_node(&self) -> SyntaxNode {
11408 self.node
11409 }
11410 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11411 StatementBreakPtr(self.node.stable_ptr(db))
11412 }
11413}
11414#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11415pub struct StatementItem {
11416 node: SyntaxNode,
11417}
11418impl StatementItem {
11419 pub const INDEX_ITEM: usize = 0;
11420 pub fn new_green(db: &dyn SyntaxGroup, item: ModuleItemGreen) -> StatementItemGreen {
11421 let children = [item.0];
11422 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11423 StatementItemGreen(
11424 Arc::new(GreenNode {
11425 kind: SyntaxKind::StatementItem,
11426 details: GreenNodeDetails::Node { children: children.into(), width },
11427 })
11428 .intern(db),
11429 )
11430 }
11431}
11432impl StatementItem {
11433 pub fn item(&self, db: &dyn SyntaxGroup) -> ModuleItem {
11434 ModuleItem::from_syntax_node(db, self.node.get_children(db)[0])
11435 }
11436}
11437#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11438pub struct StatementItemPtr(pub SyntaxStablePtrId);
11439impl StatementItemPtr {}
11440impl TypedStablePtr for StatementItemPtr {
11441 type SyntaxNode = StatementItem;
11442 fn untyped(&self) -> SyntaxStablePtrId {
11443 self.0
11444 }
11445 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementItem {
11446 StatementItem::from_syntax_node(db, self.0.lookup(db))
11447 }
11448}
11449impl From<StatementItemPtr> for SyntaxStablePtrId {
11450 fn from(ptr: StatementItemPtr) -> Self {
11451 ptr.untyped()
11452 }
11453}
11454#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11455pub struct StatementItemGreen(pub GreenId);
11456impl TypedSyntaxNode for StatementItem {
11457 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementItem);
11458 type StablePtr = StatementItemPtr;
11459 type Green = StatementItemGreen;
11460 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11461 StatementItemGreen(
11462 Arc::new(GreenNode {
11463 kind: SyntaxKind::StatementItem,
11464 details: GreenNodeDetails::Node {
11465 children: [ModuleItem::missing(db).0].into(),
11466 width: TextWidth::default(),
11467 },
11468 })
11469 .intern(db),
11470 )
11471 }
11472 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11473 let kind = node.kind(db);
11474 assert_eq!(
11475 kind,
11476 SyntaxKind::StatementItem,
11477 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11478 kind,
11479 SyntaxKind::StatementItem
11480 );
11481 Self { node }
11482 }
11483 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11484 let kind = node.kind(db);
11485 if kind == SyntaxKind::StatementItem {
11486 Some(Self::from_syntax_node(db, node))
11487 } else {
11488 None
11489 }
11490 }
11491 fn as_syntax_node(&self) -> SyntaxNode {
11492 self.node
11493 }
11494 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11495 StatementItemPtr(self.node.stable_ptr(db))
11496 }
11497}
11498#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11499pub struct Param {
11500 node: SyntaxNode,
11501}
11502impl Param {
11503 pub const INDEX_MODIFIERS: usize = 0;
11504 pub const INDEX_NAME: usize = 1;
11505 pub const INDEX_TYPE_CLAUSE: usize = 2;
11506 pub fn new_green(
11507 db: &dyn SyntaxGroup,
11508 modifiers: ModifierListGreen,
11509 name: TerminalIdentifierGreen,
11510 type_clause: OptionTypeClauseGreen,
11511 ) -> ParamGreen {
11512 let children = [modifiers.0, name.0, type_clause.0];
11513 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11514 ParamGreen(
11515 Arc::new(GreenNode {
11516 kind: SyntaxKind::Param,
11517 details: GreenNodeDetails::Node { children: children.into(), width },
11518 })
11519 .intern(db),
11520 )
11521 }
11522}
11523impl Param {
11524 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
11525 ModifierList::from_syntax_node(db, self.node.get_children(db)[0])
11526 }
11527 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
11528 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
11529 }
11530 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
11531 OptionTypeClause::from_syntax_node(db, self.node.get_children(db)[2])
11532 }
11533}
11534#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11535pub struct ParamPtr(pub SyntaxStablePtrId);
11536impl ParamPtr {
11537 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
11538 let ptr = self.0.lookup_intern(db);
11539 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
11540 TerminalIdentifierGreen(key_fields[0])
11541 } else {
11542 panic!("Unexpected key field query on root.");
11543 }
11544 }
11545}
11546impl TypedStablePtr for ParamPtr {
11547 type SyntaxNode = Param;
11548 fn untyped(&self) -> SyntaxStablePtrId {
11549 self.0
11550 }
11551 fn lookup(&self, db: &dyn SyntaxGroup) -> Param {
11552 Param::from_syntax_node(db, self.0.lookup(db))
11553 }
11554}
11555impl From<ParamPtr> for SyntaxStablePtrId {
11556 fn from(ptr: ParamPtr) -> Self {
11557 ptr.untyped()
11558 }
11559}
11560#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11561pub struct ParamGreen(pub GreenId);
11562impl TypedSyntaxNode for Param {
11563 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Param);
11564 type StablePtr = ParamPtr;
11565 type Green = ParamGreen;
11566 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11567 ParamGreen(
11568 Arc::new(GreenNode {
11569 kind: SyntaxKind::Param,
11570 details: GreenNodeDetails::Node {
11571 children: [
11572 ModifierList::missing(db).0,
11573 TerminalIdentifier::missing(db).0,
11574 OptionTypeClause::missing(db).0,
11575 ]
11576 .into(),
11577 width: TextWidth::default(),
11578 },
11579 })
11580 .intern(db),
11581 )
11582 }
11583 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11584 let kind = node.kind(db);
11585 assert_eq!(
11586 kind,
11587 SyntaxKind::Param,
11588 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11589 kind,
11590 SyntaxKind::Param
11591 );
11592 Self { node }
11593 }
11594 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11595 let kind = node.kind(db);
11596 if kind == SyntaxKind::Param { Some(Self::from_syntax_node(db, node)) } else { None }
11597 }
11598 fn as_syntax_node(&self) -> SyntaxNode {
11599 self.node
11600 }
11601 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11602 ParamPtr(self.node.stable_ptr(db))
11603 }
11604}
11605#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11606pub struct ModifierList(ElementList<Modifier, 1>);
11607impl Deref for ModifierList {
11608 type Target = ElementList<Modifier, 1>;
11609 fn deref(&self) -> &Self::Target {
11610 &self.0
11611 }
11612}
11613impl ModifierList {
11614 pub fn new_green(db: &dyn SyntaxGroup, children: &[ModifierGreen]) -> ModifierListGreen {
11615 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
11616 ModifierListGreen(
11617 Arc::new(GreenNode {
11618 kind: SyntaxKind::ModifierList,
11619 details: GreenNodeDetails::Node {
11620 children: children.iter().map(|x| x.0).collect(),
11621 width,
11622 },
11623 })
11624 .intern(db),
11625 )
11626 }
11627}
11628#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11629pub struct ModifierListPtr(pub SyntaxStablePtrId);
11630impl TypedStablePtr for ModifierListPtr {
11631 type SyntaxNode = ModifierList;
11632 fn untyped(&self) -> SyntaxStablePtrId {
11633 self.0
11634 }
11635 fn lookup(&self, db: &dyn SyntaxGroup) -> ModifierList {
11636 ModifierList::from_syntax_node(db, self.0.lookup(db))
11637 }
11638}
11639impl From<ModifierListPtr> for SyntaxStablePtrId {
11640 fn from(ptr: ModifierListPtr) -> Self {
11641 ptr.untyped()
11642 }
11643}
11644#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11645pub struct ModifierListGreen(pub GreenId);
11646impl TypedSyntaxNode for ModifierList {
11647 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModifierList);
11648 type StablePtr = ModifierListPtr;
11649 type Green = ModifierListGreen;
11650 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11651 ModifierListGreen(
11652 Arc::new(GreenNode {
11653 kind: SyntaxKind::ModifierList,
11654 details: GreenNodeDetails::Node {
11655 children: [].into(),
11656 width: TextWidth::default(),
11657 },
11658 })
11659 .intern(db),
11660 )
11661 }
11662 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11663 Self(ElementList::new(node))
11664 }
11665 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11666 if node.kind(db) == SyntaxKind::ModifierList {
11667 Some(Self(ElementList::new(node)))
11668 } else {
11669 None
11670 }
11671 }
11672 fn as_syntax_node(&self) -> SyntaxNode {
11673 self.node
11674 }
11675 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11676 ModifierListPtr(self.node.stable_ptr(db))
11677 }
11678}
11679#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11680pub enum Modifier {
11681 Ref(TerminalRef),
11682 Mut(TerminalMut),
11683}
11684#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11685pub struct ModifierPtr(pub SyntaxStablePtrId);
11686impl TypedStablePtr for ModifierPtr {
11687 type SyntaxNode = Modifier;
11688 fn untyped(&self) -> SyntaxStablePtrId {
11689 self.0
11690 }
11691 fn lookup(&self, db: &dyn SyntaxGroup) -> Modifier {
11692 Modifier::from_syntax_node(db, self.0.lookup(db))
11693 }
11694}
11695impl From<ModifierPtr> for SyntaxStablePtrId {
11696 fn from(ptr: ModifierPtr) -> Self {
11697 ptr.untyped()
11698 }
11699}
11700impl From<TerminalRefPtr> for ModifierPtr {
11701 fn from(value: TerminalRefPtr) -> Self {
11702 Self(value.0)
11703 }
11704}
11705impl From<TerminalMutPtr> for ModifierPtr {
11706 fn from(value: TerminalMutPtr) -> Self {
11707 Self(value.0)
11708 }
11709}
11710impl From<TerminalRefGreen> for ModifierGreen {
11711 fn from(value: TerminalRefGreen) -> Self {
11712 Self(value.0)
11713 }
11714}
11715impl From<TerminalMutGreen> for ModifierGreen {
11716 fn from(value: TerminalMutGreen) -> Self {
11717 Self(value.0)
11718 }
11719}
11720#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11721pub struct ModifierGreen(pub GreenId);
11722impl TypedSyntaxNode for Modifier {
11723 const OPTIONAL_KIND: Option<SyntaxKind> = None;
11724 type StablePtr = ModifierPtr;
11725 type Green = ModifierGreen;
11726 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11727 panic!("No missing variant.");
11728 }
11729 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11730 let kind = node.kind(db);
11731 match kind {
11732 SyntaxKind::TerminalRef => Modifier::Ref(TerminalRef::from_syntax_node(db, node)),
11733 SyntaxKind::TerminalMut => Modifier::Mut(TerminalMut::from_syntax_node(db, node)),
11734 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Modifier"),
11735 }
11736 }
11737 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11738 let kind = node.kind(db);
11739 match kind {
11740 SyntaxKind::TerminalRef => Some(Modifier::Ref(TerminalRef::from_syntax_node(db, node))),
11741 SyntaxKind::TerminalMut => Some(Modifier::Mut(TerminalMut::from_syntax_node(db, node))),
11742 _ => None,
11743 }
11744 }
11745 fn as_syntax_node(&self) -> SyntaxNode {
11746 match self {
11747 Modifier::Ref(x) => x.as_syntax_node(),
11748 Modifier::Mut(x) => x.as_syntax_node(),
11749 }
11750 }
11751 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11752 ModifierPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
11753 }
11754}
11755impl Modifier {
11756 pub fn is_variant(kind: SyntaxKind) -> bool {
11758 matches!(kind, SyntaxKind::TerminalRef | SyntaxKind::TerminalMut)
11759 }
11760}
11761#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11762pub struct ParamList(ElementList<Param, 2>);
11763impl Deref for ParamList {
11764 type Target = ElementList<Param, 2>;
11765 fn deref(&self) -> &Self::Target {
11766 &self.0
11767 }
11768}
11769impl ParamList {
11770 pub fn new_green(
11771 db: &dyn SyntaxGroup,
11772 children: &[ParamListElementOrSeparatorGreen],
11773 ) -> ParamListGreen {
11774 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11775 ParamListGreen(
11776 Arc::new(GreenNode {
11777 kind: SyntaxKind::ParamList,
11778 details: GreenNodeDetails::Node {
11779 children: children.iter().map(|x| x.id()).collect(),
11780 width,
11781 },
11782 })
11783 .intern(db),
11784 )
11785 }
11786}
11787#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11788pub struct ParamListPtr(pub SyntaxStablePtrId);
11789impl TypedStablePtr for ParamListPtr {
11790 type SyntaxNode = ParamList;
11791 fn untyped(&self) -> SyntaxStablePtrId {
11792 self.0
11793 }
11794 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamList {
11795 ParamList::from_syntax_node(db, self.0.lookup(db))
11796 }
11797}
11798impl From<ParamListPtr> for SyntaxStablePtrId {
11799 fn from(ptr: ParamListPtr) -> Self {
11800 ptr.untyped()
11801 }
11802}
11803#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11804pub enum ParamListElementOrSeparatorGreen {
11805 Separator(TerminalCommaGreen),
11806 Element(ParamGreen),
11807}
11808impl From<TerminalCommaGreen> for ParamListElementOrSeparatorGreen {
11809 fn from(value: TerminalCommaGreen) -> Self {
11810 ParamListElementOrSeparatorGreen::Separator(value)
11811 }
11812}
11813impl From<ParamGreen> for ParamListElementOrSeparatorGreen {
11814 fn from(value: ParamGreen) -> Self {
11815 ParamListElementOrSeparatorGreen::Element(value)
11816 }
11817}
11818impl ParamListElementOrSeparatorGreen {
11819 fn id(&self) -> GreenId {
11820 match self {
11821 ParamListElementOrSeparatorGreen::Separator(green) => green.0,
11822 ParamListElementOrSeparatorGreen::Element(green) => green.0,
11823 }
11824 }
11825}
11826#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11827pub struct ParamListGreen(pub GreenId);
11828impl TypedSyntaxNode for ParamList {
11829 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamList);
11830 type StablePtr = ParamListPtr;
11831 type Green = ParamListGreen;
11832 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11833 ParamListGreen(
11834 Arc::new(GreenNode {
11835 kind: SyntaxKind::ParamList,
11836 details: GreenNodeDetails::Node {
11837 children: [].into(),
11838 width: TextWidth::default(),
11839 },
11840 })
11841 .intern(db),
11842 )
11843 }
11844 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11845 Self(ElementList::new(node))
11846 }
11847 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11848 if node.kind(db) == SyntaxKind::ParamList {
11849 Some(Self(ElementList::new(node)))
11850 } else {
11851 None
11852 }
11853 }
11854 fn as_syntax_node(&self) -> SyntaxNode {
11855 self.node
11856 }
11857 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11858 ParamListPtr(self.node.stable_ptr(db))
11859 }
11860}
11861#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11862pub struct ImplicitsClause {
11863 node: SyntaxNode,
11864}
11865impl ImplicitsClause {
11866 pub const INDEX_IMPLICITS_KW: usize = 0;
11867 pub const INDEX_LPAREN: usize = 1;
11868 pub const INDEX_IMPLICITS: usize = 2;
11869 pub const INDEX_RPAREN: usize = 3;
11870 pub fn new_green(
11871 db: &dyn SyntaxGroup,
11872 implicits_kw: TerminalImplicitsGreen,
11873 lparen: TerminalLParenGreen,
11874 implicits: ImplicitsListGreen,
11875 rparen: TerminalRParenGreen,
11876 ) -> ImplicitsClauseGreen {
11877 let children = [implicits_kw.0, lparen.0, implicits.0, rparen.0];
11878 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
11879 ImplicitsClauseGreen(
11880 Arc::new(GreenNode {
11881 kind: SyntaxKind::ImplicitsClause,
11882 details: GreenNodeDetails::Node { children: children.into(), width },
11883 })
11884 .intern(db),
11885 )
11886 }
11887}
11888impl ImplicitsClause {
11889 pub fn implicits_kw(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
11890 TerminalImplicits::from_syntax_node(db, self.node.get_children(db)[0])
11891 }
11892 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
11893 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[1])
11894 }
11895 pub fn implicits(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
11896 ImplicitsList::from_syntax_node(db, self.node.get_children(db)[2])
11897 }
11898 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
11899 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[3])
11900 }
11901}
11902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11903pub struct ImplicitsClausePtr(pub SyntaxStablePtrId);
11904impl ImplicitsClausePtr {}
11905impl TypedStablePtr for ImplicitsClausePtr {
11906 type SyntaxNode = ImplicitsClause;
11907 fn untyped(&self) -> SyntaxStablePtrId {
11908 self.0
11909 }
11910 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsClause {
11911 ImplicitsClause::from_syntax_node(db, self.0.lookup(db))
11912 }
11913}
11914impl From<ImplicitsClausePtr> for SyntaxStablePtrId {
11915 fn from(ptr: ImplicitsClausePtr) -> Self {
11916 ptr.untyped()
11917 }
11918}
11919#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11920pub struct ImplicitsClauseGreen(pub GreenId);
11921impl TypedSyntaxNode for ImplicitsClause {
11922 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsClause);
11923 type StablePtr = ImplicitsClausePtr;
11924 type Green = ImplicitsClauseGreen;
11925 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11926 ImplicitsClauseGreen(
11927 Arc::new(GreenNode {
11928 kind: SyntaxKind::ImplicitsClause,
11929 details: GreenNodeDetails::Node {
11930 children: [
11931 TerminalImplicits::missing(db).0,
11932 TerminalLParen::missing(db).0,
11933 ImplicitsList::missing(db).0,
11934 TerminalRParen::missing(db).0,
11935 ]
11936 .into(),
11937 width: TextWidth::default(),
11938 },
11939 })
11940 .intern(db),
11941 )
11942 }
11943 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11944 let kind = node.kind(db);
11945 assert_eq!(
11946 kind,
11947 SyntaxKind::ImplicitsClause,
11948 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11949 kind,
11950 SyntaxKind::ImplicitsClause
11951 );
11952 Self { node }
11953 }
11954 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11955 let kind = node.kind(db);
11956 if kind == SyntaxKind::ImplicitsClause {
11957 Some(Self::from_syntax_node(db, node))
11958 } else {
11959 None
11960 }
11961 }
11962 fn as_syntax_node(&self) -> SyntaxNode {
11963 self.node
11964 }
11965 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
11966 ImplicitsClausePtr(self.node.stable_ptr(db))
11967 }
11968}
11969#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11970pub struct ImplicitsList(ElementList<ExprPath, 2>);
11971impl Deref for ImplicitsList {
11972 type Target = ElementList<ExprPath, 2>;
11973 fn deref(&self) -> &Self::Target {
11974 &self.0
11975 }
11976}
11977impl ImplicitsList {
11978 pub fn new_green(
11979 db: &dyn SyntaxGroup,
11980 children: &[ImplicitsListElementOrSeparatorGreen],
11981 ) -> ImplicitsListGreen {
11982 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11983 ImplicitsListGreen(
11984 Arc::new(GreenNode {
11985 kind: SyntaxKind::ImplicitsList,
11986 details: GreenNodeDetails::Node {
11987 children: children.iter().map(|x| x.id()).collect(),
11988 width,
11989 },
11990 })
11991 .intern(db),
11992 )
11993 }
11994}
11995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11996pub struct ImplicitsListPtr(pub SyntaxStablePtrId);
11997impl TypedStablePtr for ImplicitsListPtr {
11998 type SyntaxNode = ImplicitsList;
11999 fn untyped(&self) -> SyntaxStablePtrId {
12000 self.0
12001 }
12002 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
12003 ImplicitsList::from_syntax_node(db, self.0.lookup(db))
12004 }
12005}
12006impl From<ImplicitsListPtr> for SyntaxStablePtrId {
12007 fn from(ptr: ImplicitsListPtr) -> Self {
12008 ptr.untyped()
12009 }
12010}
12011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12012pub enum ImplicitsListElementOrSeparatorGreen {
12013 Separator(TerminalCommaGreen),
12014 Element(ExprPathGreen),
12015}
12016impl From<TerminalCommaGreen> for ImplicitsListElementOrSeparatorGreen {
12017 fn from(value: TerminalCommaGreen) -> Self {
12018 ImplicitsListElementOrSeparatorGreen::Separator(value)
12019 }
12020}
12021impl From<ExprPathGreen> for ImplicitsListElementOrSeparatorGreen {
12022 fn from(value: ExprPathGreen) -> Self {
12023 ImplicitsListElementOrSeparatorGreen::Element(value)
12024 }
12025}
12026impl ImplicitsListElementOrSeparatorGreen {
12027 fn id(&self) -> GreenId {
12028 match self {
12029 ImplicitsListElementOrSeparatorGreen::Separator(green) => green.0,
12030 ImplicitsListElementOrSeparatorGreen::Element(green) => green.0,
12031 }
12032 }
12033}
12034#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12035pub struct ImplicitsListGreen(pub GreenId);
12036impl TypedSyntaxNode for ImplicitsList {
12037 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsList);
12038 type StablePtr = ImplicitsListPtr;
12039 type Green = ImplicitsListGreen;
12040 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12041 ImplicitsListGreen(
12042 Arc::new(GreenNode {
12043 kind: SyntaxKind::ImplicitsList,
12044 details: GreenNodeDetails::Node {
12045 children: [].into(),
12046 width: TextWidth::default(),
12047 },
12048 })
12049 .intern(db),
12050 )
12051 }
12052 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12053 Self(ElementList::new(node))
12054 }
12055 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12056 if node.kind(db) == SyntaxKind::ImplicitsList {
12057 Some(Self(ElementList::new(node)))
12058 } else {
12059 None
12060 }
12061 }
12062 fn as_syntax_node(&self) -> SyntaxNode {
12063 self.node
12064 }
12065 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12066 ImplicitsListPtr(self.node.stable_ptr(db))
12067 }
12068}
12069#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12070pub enum OptionImplicitsClause {
12071 Empty(OptionImplicitsClauseEmpty),
12072 ImplicitsClause(ImplicitsClause),
12073}
12074#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12075pub struct OptionImplicitsClausePtr(pub SyntaxStablePtrId);
12076impl TypedStablePtr for OptionImplicitsClausePtr {
12077 type SyntaxNode = OptionImplicitsClause;
12078 fn untyped(&self) -> SyntaxStablePtrId {
12079 self.0
12080 }
12081 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
12082 OptionImplicitsClause::from_syntax_node(db, self.0.lookup(db))
12083 }
12084}
12085impl From<OptionImplicitsClausePtr> for SyntaxStablePtrId {
12086 fn from(ptr: OptionImplicitsClausePtr) -> Self {
12087 ptr.untyped()
12088 }
12089}
12090impl From<OptionImplicitsClauseEmptyPtr> for OptionImplicitsClausePtr {
12091 fn from(value: OptionImplicitsClauseEmptyPtr) -> Self {
12092 Self(value.0)
12093 }
12094}
12095impl From<ImplicitsClausePtr> for OptionImplicitsClausePtr {
12096 fn from(value: ImplicitsClausePtr) -> Self {
12097 Self(value.0)
12098 }
12099}
12100impl From<OptionImplicitsClauseEmptyGreen> for OptionImplicitsClauseGreen {
12101 fn from(value: OptionImplicitsClauseEmptyGreen) -> Self {
12102 Self(value.0)
12103 }
12104}
12105impl From<ImplicitsClauseGreen> for OptionImplicitsClauseGreen {
12106 fn from(value: ImplicitsClauseGreen) -> Self {
12107 Self(value.0)
12108 }
12109}
12110#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12111pub struct OptionImplicitsClauseGreen(pub GreenId);
12112impl TypedSyntaxNode for OptionImplicitsClause {
12113 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12114 type StablePtr = OptionImplicitsClausePtr;
12115 type Green = OptionImplicitsClauseGreen;
12116 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12117 panic!("No missing variant.");
12118 }
12119 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12120 let kind = node.kind(db);
12121 match kind {
12122 SyntaxKind::OptionImplicitsClauseEmpty => {
12123 OptionImplicitsClause::Empty(OptionImplicitsClauseEmpty::from_syntax_node(db, node))
12124 }
12125 SyntaxKind::ImplicitsClause => {
12126 OptionImplicitsClause::ImplicitsClause(ImplicitsClause::from_syntax_node(db, node))
12127 }
12128 _ => panic!(
12129 "Unexpected syntax kind {:?} when constructing {}.",
12130 kind, "OptionImplicitsClause"
12131 ),
12132 }
12133 }
12134 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12135 let kind = node.kind(db);
12136 match kind {
12137 SyntaxKind::OptionImplicitsClauseEmpty => Some(OptionImplicitsClause::Empty(
12138 OptionImplicitsClauseEmpty::from_syntax_node(db, node),
12139 )),
12140 SyntaxKind::ImplicitsClause => Some(OptionImplicitsClause::ImplicitsClause(
12141 ImplicitsClause::from_syntax_node(db, node),
12142 )),
12143 _ => None,
12144 }
12145 }
12146 fn as_syntax_node(&self) -> SyntaxNode {
12147 match self {
12148 OptionImplicitsClause::Empty(x) => x.as_syntax_node(),
12149 OptionImplicitsClause::ImplicitsClause(x) => x.as_syntax_node(),
12150 }
12151 }
12152 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12153 OptionImplicitsClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
12154 }
12155}
12156impl OptionImplicitsClause {
12157 pub fn is_variant(kind: SyntaxKind) -> bool {
12159 matches!(kind, SyntaxKind::OptionImplicitsClauseEmpty | SyntaxKind::ImplicitsClause)
12160 }
12161}
12162#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12163pub struct OptionImplicitsClauseEmpty {
12164 node: SyntaxNode,
12165}
12166impl OptionImplicitsClauseEmpty {
12167 pub fn new_green(db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmptyGreen {
12168 let children = [];
12169 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12170 OptionImplicitsClauseEmptyGreen(
12171 Arc::new(GreenNode {
12172 kind: SyntaxKind::OptionImplicitsClauseEmpty,
12173 details: GreenNodeDetails::Node { children: children.into(), width },
12174 })
12175 .intern(db),
12176 )
12177 }
12178}
12179impl OptionImplicitsClauseEmpty {}
12180#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12181pub struct OptionImplicitsClauseEmptyPtr(pub SyntaxStablePtrId);
12182impl OptionImplicitsClauseEmptyPtr {}
12183impl TypedStablePtr for OptionImplicitsClauseEmptyPtr {
12184 type SyntaxNode = OptionImplicitsClauseEmpty;
12185 fn untyped(&self) -> SyntaxStablePtrId {
12186 self.0
12187 }
12188 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmpty {
12189 OptionImplicitsClauseEmpty::from_syntax_node(db, self.0.lookup(db))
12190 }
12191}
12192impl From<OptionImplicitsClauseEmptyPtr> for SyntaxStablePtrId {
12193 fn from(ptr: OptionImplicitsClauseEmptyPtr) -> Self {
12194 ptr.untyped()
12195 }
12196}
12197#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12198pub struct OptionImplicitsClauseEmptyGreen(pub GreenId);
12199impl TypedSyntaxNode for OptionImplicitsClauseEmpty {
12200 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionImplicitsClauseEmpty);
12201 type StablePtr = OptionImplicitsClauseEmptyPtr;
12202 type Green = OptionImplicitsClauseEmptyGreen;
12203 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12204 OptionImplicitsClauseEmptyGreen(
12205 Arc::new(GreenNode {
12206 kind: SyntaxKind::OptionImplicitsClauseEmpty,
12207 details: GreenNodeDetails::Node {
12208 children: [].into(),
12209 width: TextWidth::default(),
12210 },
12211 })
12212 .intern(db),
12213 )
12214 }
12215 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12216 let kind = node.kind(db);
12217 assert_eq!(
12218 kind,
12219 SyntaxKind::OptionImplicitsClauseEmpty,
12220 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12221 kind,
12222 SyntaxKind::OptionImplicitsClauseEmpty
12223 );
12224 Self { node }
12225 }
12226 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12227 let kind = node.kind(db);
12228 if kind == SyntaxKind::OptionImplicitsClauseEmpty {
12229 Some(Self::from_syntax_node(db, node))
12230 } else {
12231 None
12232 }
12233 }
12234 fn as_syntax_node(&self) -> SyntaxNode {
12235 self.node
12236 }
12237 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12238 OptionImplicitsClauseEmptyPtr(self.node.stable_ptr(db))
12239 }
12240}
12241#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12242pub enum OptionTerminalNoPanic {
12243 Empty(OptionTerminalNoPanicEmpty),
12244 TerminalNoPanic(TerminalNoPanic),
12245}
12246#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12247pub struct OptionTerminalNoPanicPtr(pub SyntaxStablePtrId);
12248impl TypedStablePtr for OptionTerminalNoPanicPtr {
12249 type SyntaxNode = OptionTerminalNoPanic;
12250 fn untyped(&self) -> SyntaxStablePtrId {
12251 self.0
12252 }
12253 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12254 OptionTerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
12255 }
12256}
12257impl From<OptionTerminalNoPanicPtr> for SyntaxStablePtrId {
12258 fn from(ptr: OptionTerminalNoPanicPtr) -> Self {
12259 ptr.untyped()
12260 }
12261}
12262impl From<OptionTerminalNoPanicEmptyPtr> for OptionTerminalNoPanicPtr {
12263 fn from(value: OptionTerminalNoPanicEmptyPtr) -> Self {
12264 Self(value.0)
12265 }
12266}
12267impl From<TerminalNoPanicPtr> for OptionTerminalNoPanicPtr {
12268 fn from(value: TerminalNoPanicPtr) -> Self {
12269 Self(value.0)
12270 }
12271}
12272impl From<OptionTerminalNoPanicEmptyGreen> for OptionTerminalNoPanicGreen {
12273 fn from(value: OptionTerminalNoPanicEmptyGreen) -> Self {
12274 Self(value.0)
12275 }
12276}
12277impl From<TerminalNoPanicGreen> for OptionTerminalNoPanicGreen {
12278 fn from(value: TerminalNoPanicGreen) -> Self {
12279 Self(value.0)
12280 }
12281}
12282#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12283pub struct OptionTerminalNoPanicGreen(pub GreenId);
12284impl TypedSyntaxNode for OptionTerminalNoPanic {
12285 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12286 type StablePtr = OptionTerminalNoPanicPtr;
12287 type Green = OptionTerminalNoPanicGreen;
12288 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12289 panic!("No missing variant.");
12290 }
12291 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12292 let kind = node.kind(db);
12293 match kind {
12294 SyntaxKind::OptionTerminalNoPanicEmpty => {
12295 OptionTerminalNoPanic::Empty(OptionTerminalNoPanicEmpty::from_syntax_node(db, node))
12296 }
12297 SyntaxKind::TerminalNoPanic => {
12298 OptionTerminalNoPanic::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
12299 }
12300 _ => panic!(
12301 "Unexpected syntax kind {:?} when constructing {}.",
12302 kind, "OptionTerminalNoPanic"
12303 ),
12304 }
12305 }
12306 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12307 let kind = node.kind(db);
12308 match kind {
12309 SyntaxKind::OptionTerminalNoPanicEmpty => Some(OptionTerminalNoPanic::Empty(
12310 OptionTerminalNoPanicEmpty::from_syntax_node(db, node),
12311 )),
12312 SyntaxKind::TerminalNoPanic => Some(OptionTerminalNoPanic::TerminalNoPanic(
12313 TerminalNoPanic::from_syntax_node(db, node),
12314 )),
12315 _ => None,
12316 }
12317 }
12318 fn as_syntax_node(&self) -> SyntaxNode {
12319 match self {
12320 OptionTerminalNoPanic::Empty(x) => x.as_syntax_node(),
12321 OptionTerminalNoPanic::TerminalNoPanic(x) => x.as_syntax_node(),
12322 }
12323 }
12324 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12325 OptionTerminalNoPanicPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
12326 }
12327}
12328impl OptionTerminalNoPanic {
12329 pub fn is_variant(kind: SyntaxKind) -> bool {
12331 matches!(kind, SyntaxKind::OptionTerminalNoPanicEmpty | SyntaxKind::TerminalNoPanic)
12332 }
12333}
12334#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12335pub struct OptionTerminalNoPanicEmpty {
12336 node: SyntaxNode,
12337}
12338impl OptionTerminalNoPanicEmpty {
12339 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmptyGreen {
12340 let children = [];
12341 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12342 OptionTerminalNoPanicEmptyGreen(
12343 Arc::new(GreenNode {
12344 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12345 details: GreenNodeDetails::Node { children: children.into(), width },
12346 })
12347 .intern(db),
12348 )
12349 }
12350}
12351impl OptionTerminalNoPanicEmpty {}
12352#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12353pub struct OptionTerminalNoPanicEmptyPtr(pub SyntaxStablePtrId);
12354impl OptionTerminalNoPanicEmptyPtr {}
12355impl TypedStablePtr for OptionTerminalNoPanicEmptyPtr {
12356 type SyntaxNode = OptionTerminalNoPanicEmpty;
12357 fn untyped(&self) -> SyntaxStablePtrId {
12358 self.0
12359 }
12360 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmpty {
12361 OptionTerminalNoPanicEmpty::from_syntax_node(db, self.0.lookup(db))
12362 }
12363}
12364impl From<OptionTerminalNoPanicEmptyPtr> for SyntaxStablePtrId {
12365 fn from(ptr: OptionTerminalNoPanicEmptyPtr) -> Self {
12366 ptr.untyped()
12367 }
12368}
12369#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12370pub struct OptionTerminalNoPanicEmptyGreen(pub GreenId);
12371impl TypedSyntaxNode for OptionTerminalNoPanicEmpty {
12372 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalNoPanicEmpty);
12373 type StablePtr = OptionTerminalNoPanicEmptyPtr;
12374 type Green = OptionTerminalNoPanicEmptyGreen;
12375 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12376 OptionTerminalNoPanicEmptyGreen(
12377 Arc::new(GreenNode {
12378 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12379 details: GreenNodeDetails::Node {
12380 children: [].into(),
12381 width: TextWidth::default(),
12382 },
12383 })
12384 .intern(db),
12385 )
12386 }
12387 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12388 let kind = node.kind(db);
12389 assert_eq!(
12390 kind,
12391 SyntaxKind::OptionTerminalNoPanicEmpty,
12392 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12393 kind,
12394 SyntaxKind::OptionTerminalNoPanicEmpty
12395 );
12396 Self { node }
12397 }
12398 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12399 let kind = node.kind(db);
12400 if kind == SyntaxKind::OptionTerminalNoPanicEmpty {
12401 Some(Self::from_syntax_node(db, node))
12402 } else {
12403 None
12404 }
12405 }
12406 fn as_syntax_node(&self) -> SyntaxNode {
12407 self.node
12408 }
12409 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12410 OptionTerminalNoPanicEmptyPtr(self.node.stable_ptr(db))
12411 }
12412}
12413#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12414pub enum OptionTerminalConst {
12415 Empty(OptionTerminalConstEmpty),
12416 TerminalConst(TerminalConst),
12417}
12418#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12419pub struct OptionTerminalConstPtr(pub SyntaxStablePtrId);
12420impl TypedStablePtr for OptionTerminalConstPtr {
12421 type SyntaxNode = OptionTerminalConst;
12422 fn untyped(&self) -> SyntaxStablePtrId {
12423 self.0
12424 }
12425 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
12426 OptionTerminalConst::from_syntax_node(db, self.0.lookup(db))
12427 }
12428}
12429impl From<OptionTerminalConstPtr> for SyntaxStablePtrId {
12430 fn from(ptr: OptionTerminalConstPtr) -> Self {
12431 ptr.untyped()
12432 }
12433}
12434impl From<OptionTerminalConstEmptyPtr> for OptionTerminalConstPtr {
12435 fn from(value: OptionTerminalConstEmptyPtr) -> Self {
12436 Self(value.0)
12437 }
12438}
12439impl From<TerminalConstPtr> for OptionTerminalConstPtr {
12440 fn from(value: TerminalConstPtr) -> Self {
12441 Self(value.0)
12442 }
12443}
12444impl From<OptionTerminalConstEmptyGreen> for OptionTerminalConstGreen {
12445 fn from(value: OptionTerminalConstEmptyGreen) -> Self {
12446 Self(value.0)
12447 }
12448}
12449impl From<TerminalConstGreen> for OptionTerminalConstGreen {
12450 fn from(value: TerminalConstGreen) -> Self {
12451 Self(value.0)
12452 }
12453}
12454#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12455pub struct OptionTerminalConstGreen(pub GreenId);
12456impl TypedSyntaxNode for OptionTerminalConst {
12457 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12458 type StablePtr = OptionTerminalConstPtr;
12459 type Green = OptionTerminalConstGreen;
12460 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12461 panic!("No missing variant.");
12462 }
12463 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12464 let kind = node.kind(db);
12465 match kind {
12466 SyntaxKind::OptionTerminalConstEmpty => {
12467 OptionTerminalConst::Empty(OptionTerminalConstEmpty::from_syntax_node(db, node))
12468 }
12469 SyntaxKind::TerminalConst => {
12470 OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node))
12471 }
12472 _ => panic!(
12473 "Unexpected syntax kind {:?} when constructing {}.",
12474 kind, "OptionTerminalConst"
12475 ),
12476 }
12477 }
12478 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12479 let kind = node.kind(db);
12480 match kind {
12481 SyntaxKind::OptionTerminalConstEmpty => Some(OptionTerminalConst::Empty(
12482 OptionTerminalConstEmpty::from_syntax_node(db, node),
12483 )),
12484 SyntaxKind::TerminalConst => {
12485 Some(OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node)))
12486 }
12487 _ => None,
12488 }
12489 }
12490 fn as_syntax_node(&self) -> SyntaxNode {
12491 match self {
12492 OptionTerminalConst::Empty(x) => x.as_syntax_node(),
12493 OptionTerminalConst::TerminalConst(x) => x.as_syntax_node(),
12494 }
12495 }
12496 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12497 OptionTerminalConstPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
12498 }
12499}
12500impl OptionTerminalConst {
12501 pub fn is_variant(kind: SyntaxKind) -> bool {
12503 matches!(kind, SyntaxKind::OptionTerminalConstEmpty | SyntaxKind::TerminalConst)
12504 }
12505}
12506#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12507pub struct OptionTerminalConstEmpty {
12508 node: SyntaxNode,
12509}
12510impl OptionTerminalConstEmpty {
12511 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalConstEmptyGreen {
12512 let children = [];
12513 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12514 OptionTerminalConstEmptyGreen(
12515 Arc::new(GreenNode {
12516 kind: SyntaxKind::OptionTerminalConstEmpty,
12517 details: GreenNodeDetails::Node { children: children.into(), width },
12518 })
12519 .intern(db),
12520 )
12521 }
12522}
12523impl OptionTerminalConstEmpty {}
12524#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12525pub struct OptionTerminalConstEmptyPtr(pub SyntaxStablePtrId);
12526impl OptionTerminalConstEmptyPtr {}
12527impl TypedStablePtr for OptionTerminalConstEmptyPtr {
12528 type SyntaxNode = OptionTerminalConstEmpty;
12529 fn untyped(&self) -> SyntaxStablePtrId {
12530 self.0
12531 }
12532 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConstEmpty {
12533 OptionTerminalConstEmpty::from_syntax_node(db, self.0.lookup(db))
12534 }
12535}
12536impl From<OptionTerminalConstEmptyPtr> for SyntaxStablePtrId {
12537 fn from(ptr: OptionTerminalConstEmptyPtr) -> Self {
12538 ptr.untyped()
12539 }
12540}
12541#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12542pub struct OptionTerminalConstEmptyGreen(pub GreenId);
12543impl TypedSyntaxNode for OptionTerminalConstEmpty {
12544 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalConstEmpty);
12545 type StablePtr = OptionTerminalConstEmptyPtr;
12546 type Green = OptionTerminalConstEmptyGreen;
12547 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12548 OptionTerminalConstEmptyGreen(
12549 Arc::new(GreenNode {
12550 kind: SyntaxKind::OptionTerminalConstEmpty,
12551 details: GreenNodeDetails::Node {
12552 children: [].into(),
12553 width: TextWidth::default(),
12554 },
12555 })
12556 .intern(db),
12557 )
12558 }
12559 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12560 let kind = node.kind(db);
12561 assert_eq!(
12562 kind,
12563 SyntaxKind::OptionTerminalConstEmpty,
12564 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12565 kind,
12566 SyntaxKind::OptionTerminalConstEmpty
12567 );
12568 Self { node }
12569 }
12570 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12571 let kind = node.kind(db);
12572 if kind == SyntaxKind::OptionTerminalConstEmpty {
12573 Some(Self::from_syntax_node(db, node))
12574 } else {
12575 None
12576 }
12577 }
12578 fn as_syntax_node(&self) -> SyntaxNode {
12579 self.node
12580 }
12581 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12582 OptionTerminalConstEmptyPtr(self.node.stable_ptr(db))
12583 }
12584}
12585#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12586pub struct FunctionSignature {
12587 node: SyntaxNode,
12588}
12589impl FunctionSignature {
12590 pub const INDEX_LPAREN: usize = 0;
12591 pub const INDEX_PARAMETERS: usize = 1;
12592 pub const INDEX_RPAREN: usize = 2;
12593 pub const INDEX_RET_TY: usize = 3;
12594 pub const INDEX_IMPLICITS_CLAUSE: usize = 4;
12595 pub const INDEX_OPTIONAL_NO_PANIC: usize = 5;
12596 pub fn new_green(
12597 db: &dyn SyntaxGroup,
12598 lparen: TerminalLParenGreen,
12599 parameters: ParamListGreen,
12600 rparen: TerminalRParenGreen,
12601 ret_ty: OptionReturnTypeClauseGreen,
12602 implicits_clause: OptionImplicitsClauseGreen,
12603 optional_no_panic: OptionTerminalNoPanicGreen,
12604 ) -> FunctionSignatureGreen {
12605 let children =
12606 [lparen.0, parameters.0, rparen.0, ret_ty.0, implicits_clause.0, optional_no_panic.0];
12607 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12608 FunctionSignatureGreen(
12609 Arc::new(GreenNode {
12610 kind: SyntaxKind::FunctionSignature,
12611 details: GreenNodeDetails::Node { children: children.into(), width },
12612 })
12613 .intern(db),
12614 )
12615 }
12616}
12617impl FunctionSignature {
12618 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
12619 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
12620 }
12621 pub fn parameters(&self, db: &dyn SyntaxGroup) -> ParamList {
12622 ParamList::from_syntax_node(db, self.node.get_children(db)[1])
12623 }
12624 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
12625 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
12626 }
12627 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
12628 OptionReturnTypeClause::from_syntax_node(db, self.node.get_children(db)[3])
12629 }
12630 pub fn implicits_clause(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
12631 OptionImplicitsClause::from_syntax_node(db, self.node.get_children(db)[4])
12632 }
12633 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12634 OptionTerminalNoPanic::from_syntax_node(db, self.node.get_children(db)[5])
12635 }
12636}
12637#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12638pub struct FunctionSignaturePtr(pub SyntaxStablePtrId);
12639impl FunctionSignaturePtr {}
12640impl TypedStablePtr for FunctionSignaturePtr {
12641 type SyntaxNode = FunctionSignature;
12642 fn untyped(&self) -> SyntaxStablePtrId {
12643 self.0
12644 }
12645 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
12646 FunctionSignature::from_syntax_node(db, self.0.lookup(db))
12647 }
12648}
12649impl From<FunctionSignaturePtr> for SyntaxStablePtrId {
12650 fn from(ptr: FunctionSignaturePtr) -> Self {
12651 ptr.untyped()
12652 }
12653}
12654#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12655pub struct FunctionSignatureGreen(pub GreenId);
12656impl TypedSyntaxNode for FunctionSignature {
12657 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionSignature);
12658 type StablePtr = FunctionSignaturePtr;
12659 type Green = FunctionSignatureGreen;
12660 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12661 FunctionSignatureGreen(
12662 Arc::new(GreenNode {
12663 kind: SyntaxKind::FunctionSignature,
12664 details: GreenNodeDetails::Node {
12665 children: [
12666 TerminalLParen::missing(db).0,
12667 ParamList::missing(db).0,
12668 TerminalRParen::missing(db).0,
12669 OptionReturnTypeClause::missing(db).0,
12670 OptionImplicitsClause::missing(db).0,
12671 OptionTerminalNoPanic::missing(db).0,
12672 ]
12673 .into(),
12674 width: TextWidth::default(),
12675 },
12676 })
12677 .intern(db),
12678 )
12679 }
12680 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12681 let kind = node.kind(db);
12682 assert_eq!(
12683 kind,
12684 SyntaxKind::FunctionSignature,
12685 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12686 kind,
12687 SyntaxKind::FunctionSignature
12688 );
12689 Self { node }
12690 }
12691 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12692 let kind = node.kind(db);
12693 if kind == SyntaxKind::FunctionSignature {
12694 Some(Self::from_syntax_node(db, node))
12695 } else {
12696 None
12697 }
12698 }
12699 fn as_syntax_node(&self) -> SyntaxNode {
12700 self.node
12701 }
12702 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12703 FunctionSignaturePtr(self.node.stable_ptr(db))
12704 }
12705}
12706#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12707pub struct Member {
12708 node: SyntaxNode,
12709}
12710impl Member {
12711 pub const INDEX_ATTRIBUTES: usize = 0;
12712 pub const INDEX_VISIBILITY: usize = 1;
12713 pub const INDEX_NAME: usize = 2;
12714 pub const INDEX_TYPE_CLAUSE: usize = 3;
12715 pub fn new_green(
12716 db: &dyn SyntaxGroup,
12717 attributes: AttributeListGreen,
12718 visibility: VisibilityGreen,
12719 name: TerminalIdentifierGreen,
12720 type_clause: TypeClauseGreen,
12721 ) -> MemberGreen {
12722 let children = [attributes.0, visibility.0, name.0, type_clause.0];
12723 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12724 MemberGreen(
12725 Arc::new(GreenNode {
12726 kind: SyntaxKind::Member,
12727 details: GreenNodeDetails::Node { children: children.into(), width },
12728 })
12729 .intern(db),
12730 )
12731 }
12732}
12733impl Member {
12734 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12735 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
12736 }
12737 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
12738 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
12739 }
12740 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12741 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
12742 }
12743 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
12744 TypeClause::from_syntax_node(db, self.node.get_children(db)[3])
12745 }
12746}
12747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12748pub struct MemberPtr(pub SyntaxStablePtrId);
12749impl MemberPtr {
12750 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12751 let ptr = self.0.lookup_intern(db);
12752 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12753 TerminalIdentifierGreen(key_fields[0])
12754 } else {
12755 panic!("Unexpected key field query on root.");
12756 }
12757 }
12758}
12759impl TypedStablePtr for MemberPtr {
12760 type SyntaxNode = Member;
12761 fn untyped(&self) -> SyntaxStablePtrId {
12762 self.0
12763 }
12764 fn lookup(&self, db: &dyn SyntaxGroup) -> Member {
12765 Member::from_syntax_node(db, self.0.lookup(db))
12766 }
12767}
12768impl From<MemberPtr> for SyntaxStablePtrId {
12769 fn from(ptr: MemberPtr) -> Self {
12770 ptr.untyped()
12771 }
12772}
12773#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12774pub struct MemberGreen(pub GreenId);
12775impl TypedSyntaxNode for Member {
12776 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Member);
12777 type StablePtr = MemberPtr;
12778 type Green = MemberGreen;
12779 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12780 MemberGreen(
12781 Arc::new(GreenNode {
12782 kind: SyntaxKind::Member,
12783 details: GreenNodeDetails::Node {
12784 children: [
12785 AttributeList::missing(db).0,
12786 Visibility::missing(db).0,
12787 TerminalIdentifier::missing(db).0,
12788 TypeClause::missing(db).0,
12789 ]
12790 .into(),
12791 width: TextWidth::default(),
12792 },
12793 })
12794 .intern(db),
12795 )
12796 }
12797 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12798 let kind = node.kind(db);
12799 assert_eq!(
12800 kind,
12801 SyntaxKind::Member,
12802 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12803 kind,
12804 SyntaxKind::Member
12805 );
12806 Self { node }
12807 }
12808 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12809 let kind = node.kind(db);
12810 if kind == SyntaxKind::Member { Some(Self::from_syntax_node(db, node)) } else { None }
12811 }
12812 fn as_syntax_node(&self) -> SyntaxNode {
12813 self.node
12814 }
12815 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12816 MemberPtr(self.node.stable_ptr(db))
12817 }
12818}
12819#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12820pub struct MemberList(ElementList<Member, 2>);
12821impl Deref for MemberList {
12822 type Target = ElementList<Member, 2>;
12823 fn deref(&self) -> &Self::Target {
12824 &self.0
12825 }
12826}
12827impl MemberList {
12828 pub fn new_green(
12829 db: &dyn SyntaxGroup,
12830 children: &[MemberListElementOrSeparatorGreen],
12831 ) -> MemberListGreen {
12832 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
12833 MemberListGreen(
12834 Arc::new(GreenNode {
12835 kind: SyntaxKind::MemberList,
12836 details: GreenNodeDetails::Node {
12837 children: children.iter().map(|x| x.id()).collect(),
12838 width,
12839 },
12840 })
12841 .intern(db),
12842 )
12843 }
12844}
12845#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12846pub struct MemberListPtr(pub SyntaxStablePtrId);
12847impl TypedStablePtr for MemberListPtr {
12848 type SyntaxNode = MemberList;
12849 fn untyped(&self) -> SyntaxStablePtrId {
12850 self.0
12851 }
12852 fn lookup(&self, db: &dyn SyntaxGroup) -> MemberList {
12853 MemberList::from_syntax_node(db, self.0.lookup(db))
12854 }
12855}
12856impl From<MemberListPtr> for SyntaxStablePtrId {
12857 fn from(ptr: MemberListPtr) -> Self {
12858 ptr.untyped()
12859 }
12860}
12861#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12862pub enum MemberListElementOrSeparatorGreen {
12863 Separator(TerminalCommaGreen),
12864 Element(MemberGreen),
12865}
12866impl From<TerminalCommaGreen> for MemberListElementOrSeparatorGreen {
12867 fn from(value: TerminalCommaGreen) -> Self {
12868 MemberListElementOrSeparatorGreen::Separator(value)
12869 }
12870}
12871impl From<MemberGreen> for MemberListElementOrSeparatorGreen {
12872 fn from(value: MemberGreen) -> Self {
12873 MemberListElementOrSeparatorGreen::Element(value)
12874 }
12875}
12876impl MemberListElementOrSeparatorGreen {
12877 fn id(&self) -> GreenId {
12878 match self {
12879 MemberListElementOrSeparatorGreen::Separator(green) => green.0,
12880 MemberListElementOrSeparatorGreen::Element(green) => green.0,
12881 }
12882 }
12883}
12884#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12885pub struct MemberListGreen(pub GreenId);
12886impl TypedSyntaxNode for MemberList {
12887 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MemberList);
12888 type StablePtr = MemberListPtr;
12889 type Green = MemberListGreen;
12890 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12891 MemberListGreen(
12892 Arc::new(GreenNode {
12893 kind: SyntaxKind::MemberList,
12894 details: GreenNodeDetails::Node {
12895 children: [].into(),
12896 width: TextWidth::default(),
12897 },
12898 })
12899 .intern(db),
12900 )
12901 }
12902 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12903 Self(ElementList::new(node))
12904 }
12905 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12906 if node.kind(db) == SyntaxKind::MemberList {
12907 Some(Self(ElementList::new(node)))
12908 } else {
12909 None
12910 }
12911 }
12912 fn as_syntax_node(&self) -> SyntaxNode {
12913 self.node
12914 }
12915 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
12916 MemberListPtr(self.node.stable_ptr(db))
12917 }
12918}
12919#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12920pub struct Variant {
12921 node: SyntaxNode,
12922}
12923impl Variant {
12924 pub const INDEX_ATTRIBUTES: usize = 0;
12925 pub const INDEX_NAME: usize = 1;
12926 pub const INDEX_TYPE_CLAUSE: usize = 2;
12927 pub fn new_green(
12928 db: &dyn SyntaxGroup,
12929 attributes: AttributeListGreen,
12930 name: TerminalIdentifierGreen,
12931 type_clause: OptionTypeClauseGreen,
12932 ) -> VariantGreen {
12933 let children = [attributes.0, name.0, type_clause.0];
12934 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
12935 VariantGreen(
12936 Arc::new(GreenNode {
12937 kind: SyntaxKind::Variant,
12938 details: GreenNodeDetails::Node { children: children.into(), width },
12939 })
12940 .intern(db),
12941 )
12942 }
12943}
12944impl Variant {
12945 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12946 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
12947 }
12948 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12949 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
12950 }
12951 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
12952 OptionTypeClause::from_syntax_node(db, self.node.get_children(db)[2])
12953 }
12954}
12955#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12956pub struct VariantPtr(pub SyntaxStablePtrId);
12957impl VariantPtr {
12958 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12959 let ptr = self.0.lookup_intern(db);
12960 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12961 TerminalIdentifierGreen(key_fields[0])
12962 } else {
12963 panic!("Unexpected key field query on root.");
12964 }
12965 }
12966}
12967impl TypedStablePtr for VariantPtr {
12968 type SyntaxNode = Variant;
12969 fn untyped(&self) -> SyntaxStablePtrId {
12970 self.0
12971 }
12972 fn lookup(&self, db: &dyn SyntaxGroup) -> Variant {
12973 Variant::from_syntax_node(db, self.0.lookup(db))
12974 }
12975}
12976impl From<VariantPtr> for SyntaxStablePtrId {
12977 fn from(ptr: VariantPtr) -> Self {
12978 ptr.untyped()
12979 }
12980}
12981#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12982pub struct VariantGreen(pub GreenId);
12983impl TypedSyntaxNode for Variant {
12984 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Variant);
12985 type StablePtr = VariantPtr;
12986 type Green = VariantGreen;
12987 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12988 VariantGreen(
12989 Arc::new(GreenNode {
12990 kind: SyntaxKind::Variant,
12991 details: GreenNodeDetails::Node {
12992 children: [
12993 AttributeList::missing(db).0,
12994 TerminalIdentifier::missing(db).0,
12995 OptionTypeClause::missing(db).0,
12996 ]
12997 .into(),
12998 width: TextWidth::default(),
12999 },
13000 })
13001 .intern(db),
13002 )
13003 }
13004 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13005 let kind = node.kind(db);
13006 assert_eq!(
13007 kind,
13008 SyntaxKind::Variant,
13009 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13010 kind,
13011 SyntaxKind::Variant
13012 );
13013 Self { node }
13014 }
13015 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13016 let kind = node.kind(db);
13017 if kind == SyntaxKind::Variant { Some(Self::from_syntax_node(db, node)) } else { None }
13018 }
13019 fn as_syntax_node(&self) -> SyntaxNode {
13020 self.node
13021 }
13022 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13023 VariantPtr(self.node.stable_ptr(db))
13024 }
13025}
13026#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13027pub struct VariantList(ElementList<Variant, 2>);
13028impl Deref for VariantList {
13029 type Target = ElementList<Variant, 2>;
13030 fn deref(&self) -> &Self::Target {
13031 &self.0
13032 }
13033}
13034impl VariantList {
13035 pub fn new_green(
13036 db: &dyn SyntaxGroup,
13037 children: &[VariantListElementOrSeparatorGreen],
13038 ) -> VariantListGreen {
13039 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
13040 VariantListGreen(
13041 Arc::new(GreenNode {
13042 kind: SyntaxKind::VariantList,
13043 details: GreenNodeDetails::Node {
13044 children: children.iter().map(|x| x.id()).collect(),
13045 width,
13046 },
13047 })
13048 .intern(db),
13049 )
13050 }
13051}
13052#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13053pub struct VariantListPtr(pub SyntaxStablePtrId);
13054impl TypedStablePtr for VariantListPtr {
13055 type SyntaxNode = VariantList;
13056 fn untyped(&self) -> SyntaxStablePtrId {
13057 self.0
13058 }
13059 fn lookup(&self, db: &dyn SyntaxGroup) -> VariantList {
13060 VariantList::from_syntax_node(db, self.0.lookup(db))
13061 }
13062}
13063impl From<VariantListPtr> for SyntaxStablePtrId {
13064 fn from(ptr: VariantListPtr) -> Self {
13065 ptr.untyped()
13066 }
13067}
13068#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13069pub enum VariantListElementOrSeparatorGreen {
13070 Separator(TerminalCommaGreen),
13071 Element(VariantGreen),
13072}
13073impl From<TerminalCommaGreen> for VariantListElementOrSeparatorGreen {
13074 fn from(value: TerminalCommaGreen) -> Self {
13075 VariantListElementOrSeparatorGreen::Separator(value)
13076 }
13077}
13078impl From<VariantGreen> for VariantListElementOrSeparatorGreen {
13079 fn from(value: VariantGreen) -> Self {
13080 VariantListElementOrSeparatorGreen::Element(value)
13081 }
13082}
13083impl VariantListElementOrSeparatorGreen {
13084 fn id(&self) -> GreenId {
13085 match self {
13086 VariantListElementOrSeparatorGreen::Separator(green) => green.0,
13087 VariantListElementOrSeparatorGreen::Element(green) => green.0,
13088 }
13089 }
13090}
13091#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13092pub struct VariantListGreen(pub GreenId);
13093impl TypedSyntaxNode for VariantList {
13094 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VariantList);
13095 type StablePtr = VariantListPtr;
13096 type Green = VariantListGreen;
13097 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13098 VariantListGreen(
13099 Arc::new(GreenNode {
13100 kind: SyntaxKind::VariantList,
13101 details: GreenNodeDetails::Node {
13102 children: [].into(),
13103 width: TextWidth::default(),
13104 },
13105 })
13106 .intern(db),
13107 )
13108 }
13109 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13110 Self(ElementList::new(node))
13111 }
13112 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13113 if node.kind(db) == SyntaxKind::VariantList {
13114 Some(Self(ElementList::new(node)))
13115 } else {
13116 None
13117 }
13118 }
13119 fn as_syntax_node(&self) -> SyntaxNode {
13120 self.node
13121 }
13122 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13123 VariantListPtr(self.node.stable_ptr(db))
13124 }
13125}
13126#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13127pub enum ModuleItem {
13128 Constant(ItemConstant),
13129 Module(ItemModule),
13130 Use(ItemUse),
13131 FreeFunction(FunctionWithBody),
13132 ExternFunction(ItemExternFunction),
13133 ExternType(ItemExternType),
13134 Trait(ItemTrait),
13135 Impl(ItemImpl),
13136 ImplAlias(ItemImplAlias),
13137 Struct(ItemStruct),
13138 Enum(ItemEnum),
13139 TypeAlias(ItemTypeAlias),
13140 InlineMacro(ItemInlineMacro),
13141 MacroDeclaration(ItemMacroDeclaration),
13142 HeaderDoc(ItemHeaderDoc),
13143 Missing(ModuleItemMissing),
13144}
13145#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13146pub struct ModuleItemPtr(pub SyntaxStablePtrId);
13147impl TypedStablePtr for ModuleItemPtr {
13148 type SyntaxNode = ModuleItem;
13149 fn untyped(&self) -> SyntaxStablePtrId {
13150 self.0
13151 }
13152 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItem {
13153 ModuleItem::from_syntax_node(db, self.0.lookup(db))
13154 }
13155}
13156impl From<ModuleItemPtr> for SyntaxStablePtrId {
13157 fn from(ptr: ModuleItemPtr) -> Self {
13158 ptr.untyped()
13159 }
13160}
13161impl From<ItemConstantPtr> for ModuleItemPtr {
13162 fn from(value: ItemConstantPtr) -> Self {
13163 Self(value.0)
13164 }
13165}
13166impl From<ItemModulePtr> for ModuleItemPtr {
13167 fn from(value: ItemModulePtr) -> Self {
13168 Self(value.0)
13169 }
13170}
13171impl From<ItemUsePtr> for ModuleItemPtr {
13172 fn from(value: ItemUsePtr) -> Self {
13173 Self(value.0)
13174 }
13175}
13176impl From<FunctionWithBodyPtr> for ModuleItemPtr {
13177 fn from(value: FunctionWithBodyPtr) -> Self {
13178 Self(value.0)
13179 }
13180}
13181impl From<ItemExternFunctionPtr> for ModuleItemPtr {
13182 fn from(value: ItemExternFunctionPtr) -> Self {
13183 Self(value.0)
13184 }
13185}
13186impl From<ItemExternTypePtr> for ModuleItemPtr {
13187 fn from(value: ItemExternTypePtr) -> Self {
13188 Self(value.0)
13189 }
13190}
13191impl From<ItemTraitPtr> for ModuleItemPtr {
13192 fn from(value: ItemTraitPtr) -> Self {
13193 Self(value.0)
13194 }
13195}
13196impl From<ItemImplPtr> for ModuleItemPtr {
13197 fn from(value: ItemImplPtr) -> Self {
13198 Self(value.0)
13199 }
13200}
13201impl From<ItemImplAliasPtr> for ModuleItemPtr {
13202 fn from(value: ItemImplAliasPtr) -> Self {
13203 Self(value.0)
13204 }
13205}
13206impl From<ItemStructPtr> for ModuleItemPtr {
13207 fn from(value: ItemStructPtr) -> Self {
13208 Self(value.0)
13209 }
13210}
13211impl From<ItemEnumPtr> for ModuleItemPtr {
13212 fn from(value: ItemEnumPtr) -> Self {
13213 Self(value.0)
13214 }
13215}
13216impl From<ItemTypeAliasPtr> for ModuleItemPtr {
13217 fn from(value: ItemTypeAliasPtr) -> Self {
13218 Self(value.0)
13219 }
13220}
13221impl From<ItemInlineMacroPtr> for ModuleItemPtr {
13222 fn from(value: ItemInlineMacroPtr) -> Self {
13223 Self(value.0)
13224 }
13225}
13226impl From<ItemMacroDeclarationPtr> for ModuleItemPtr {
13227 fn from(value: ItemMacroDeclarationPtr) -> Self {
13228 Self(value.0)
13229 }
13230}
13231impl From<ItemHeaderDocPtr> for ModuleItemPtr {
13232 fn from(value: ItemHeaderDocPtr) -> Self {
13233 Self(value.0)
13234 }
13235}
13236impl From<ModuleItemMissingPtr> for ModuleItemPtr {
13237 fn from(value: ModuleItemMissingPtr) -> Self {
13238 Self(value.0)
13239 }
13240}
13241impl From<ItemConstantGreen> for ModuleItemGreen {
13242 fn from(value: ItemConstantGreen) -> Self {
13243 Self(value.0)
13244 }
13245}
13246impl From<ItemModuleGreen> for ModuleItemGreen {
13247 fn from(value: ItemModuleGreen) -> Self {
13248 Self(value.0)
13249 }
13250}
13251impl From<ItemUseGreen> for ModuleItemGreen {
13252 fn from(value: ItemUseGreen) -> Self {
13253 Self(value.0)
13254 }
13255}
13256impl From<FunctionWithBodyGreen> for ModuleItemGreen {
13257 fn from(value: FunctionWithBodyGreen) -> Self {
13258 Self(value.0)
13259 }
13260}
13261impl From<ItemExternFunctionGreen> for ModuleItemGreen {
13262 fn from(value: ItemExternFunctionGreen) -> Self {
13263 Self(value.0)
13264 }
13265}
13266impl From<ItemExternTypeGreen> for ModuleItemGreen {
13267 fn from(value: ItemExternTypeGreen) -> Self {
13268 Self(value.0)
13269 }
13270}
13271impl From<ItemTraitGreen> for ModuleItemGreen {
13272 fn from(value: ItemTraitGreen) -> Self {
13273 Self(value.0)
13274 }
13275}
13276impl From<ItemImplGreen> for ModuleItemGreen {
13277 fn from(value: ItemImplGreen) -> Self {
13278 Self(value.0)
13279 }
13280}
13281impl From<ItemImplAliasGreen> for ModuleItemGreen {
13282 fn from(value: ItemImplAliasGreen) -> Self {
13283 Self(value.0)
13284 }
13285}
13286impl From<ItemStructGreen> for ModuleItemGreen {
13287 fn from(value: ItemStructGreen) -> Self {
13288 Self(value.0)
13289 }
13290}
13291impl From<ItemEnumGreen> for ModuleItemGreen {
13292 fn from(value: ItemEnumGreen) -> Self {
13293 Self(value.0)
13294 }
13295}
13296impl From<ItemTypeAliasGreen> for ModuleItemGreen {
13297 fn from(value: ItemTypeAliasGreen) -> Self {
13298 Self(value.0)
13299 }
13300}
13301impl From<ItemInlineMacroGreen> for ModuleItemGreen {
13302 fn from(value: ItemInlineMacroGreen) -> Self {
13303 Self(value.0)
13304 }
13305}
13306impl From<ItemMacroDeclarationGreen> for ModuleItemGreen {
13307 fn from(value: ItemMacroDeclarationGreen) -> Self {
13308 Self(value.0)
13309 }
13310}
13311impl From<ItemHeaderDocGreen> for ModuleItemGreen {
13312 fn from(value: ItemHeaderDocGreen) -> Self {
13313 Self(value.0)
13314 }
13315}
13316impl From<ModuleItemMissingGreen> for ModuleItemGreen {
13317 fn from(value: ModuleItemMissingGreen) -> Self {
13318 Self(value.0)
13319 }
13320}
13321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13322pub struct ModuleItemGreen(pub GreenId);
13323impl TypedSyntaxNode for ModuleItem {
13324 const OPTIONAL_KIND: Option<SyntaxKind> = None;
13325 type StablePtr = ModuleItemPtr;
13326 type Green = ModuleItemGreen;
13327 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13328 ModuleItemGreen(ModuleItemMissing::missing(db).0)
13329 }
13330 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13331 let kind = node.kind(db);
13332 match kind {
13333 SyntaxKind::ItemConstant => {
13334 ModuleItem::Constant(ItemConstant::from_syntax_node(db, node))
13335 }
13336 SyntaxKind::ItemModule => ModuleItem::Module(ItemModule::from_syntax_node(db, node)),
13337 SyntaxKind::ItemUse => ModuleItem::Use(ItemUse::from_syntax_node(db, node)),
13338 SyntaxKind::FunctionWithBody => {
13339 ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node))
13340 }
13341 SyntaxKind::ItemExternFunction => {
13342 ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
13343 }
13344 SyntaxKind::ItemExternType => {
13345 ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node))
13346 }
13347 SyntaxKind::ItemTrait => ModuleItem::Trait(ItemTrait::from_syntax_node(db, node)),
13348 SyntaxKind::ItemImpl => ModuleItem::Impl(ItemImpl::from_syntax_node(db, node)),
13349 SyntaxKind::ItemImplAlias => {
13350 ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node))
13351 }
13352 SyntaxKind::ItemStruct => ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)),
13353 SyntaxKind::ItemEnum => ModuleItem::Enum(ItemEnum::from_syntax_node(db, node)),
13354 SyntaxKind::ItemTypeAlias => {
13355 ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node))
13356 }
13357 SyntaxKind::ItemInlineMacro => {
13358 ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node))
13359 }
13360 SyntaxKind::ItemMacroDeclaration => {
13361 ModuleItem::MacroDeclaration(ItemMacroDeclaration::from_syntax_node(db, node))
13362 }
13363 SyntaxKind::ItemHeaderDoc => {
13364 ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node))
13365 }
13366 SyntaxKind::ModuleItemMissing => {
13367 ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node))
13368 }
13369 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ModuleItem"),
13370 }
13371 }
13372 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13373 let kind = node.kind(db);
13374 match kind {
13375 SyntaxKind::ItemConstant => {
13376 Some(ModuleItem::Constant(ItemConstant::from_syntax_node(db, node)))
13377 }
13378 SyntaxKind::ItemModule => {
13379 Some(ModuleItem::Module(ItemModule::from_syntax_node(db, node)))
13380 }
13381 SyntaxKind::ItemUse => Some(ModuleItem::Use(ItemUse::from_syntax_node(db, node))),
13382 SyntaxKind::FunctionWithBody => {
13383 Some(ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node)))
13384 }
13385 SyntaxKind::ItemExternFunction => {
13386 Some(ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
13387 }
13388 SyntaxKind::ItemExternType => {
13389 Some(ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node)))
13390 }
13391 SyntaxKind::ItemTrait => Some(ModuleItem::Trait(ItemTrait::from_syntax_node(db, node))),
13392 SyntaxKind::ItemImpl => Some(ModuleItem::Impl(ItemImpl::from_syntax_node(db, node))),
13393 SyntaxKind::ItemImplAlias => {
13394 Some(ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node)))
13395 }
13396 SyntaxKind::ItemStruct => {
13397 Some(ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)))
13398 }
13399 SyntaxKind::ItemEnum => Some(ModuleItem::Enum(ItemEnum::from_syntax_node(db, node))),
13400 SyntaxKind::ItemTypeAlias => {
13401 Some(ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node)))
13402 }
13403 SyntaxKind::ItemInlineMacro => {
13404 Some(ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node)))
13405 }
13406 SyntaxKind::ItemMacroDeclaration => {
13407 Some(ModuleItem::MacroDeclaration(ItemMacroDeclaration::from_syntax_node(db, node)))
13408 }
13409 SyntaxKind::ItemHeaderDoc => {
13410 Some(ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node)))
13411 }
13412 SyntaxKind::ModuleItemMissing => {
13413 Some(ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node)))
13414 }
13415 _ => None,
13416 }
13417 }
13418 fn as_syntax_node(&self) -> SyntaxNode {
13419 match self {
13420 ModuleItem::Constant(x) => x.as_syntax_node(),
13421 ModuleItem::Module(x) => x.as_syntax_node(),
13422 ModuleItem::Use(x) => x.as_syntax_node(),
13423 ModuleItem::FreeFunction(x) => x.as_syntax_node(),
13424 ModuleItem::ExternFunction(x) => x.as_syntax_node(),
13425 ModuleItem::ExternType(x) => x.as_syntax_node(),
13426 ModuleItem::Trait(x) => x.as_syntax_node(),
13427 ModuleItem::Impl(x) => x.as_syntax_node(),
13428 ModuleItem::ImplAlias(x) => x.as_syntax_node(),
13429 ModuleItem::Struct(x) => x.as_syntax_node(),
13430 ModuleItem::Enum(x) => x.as_syntax_node(),
13431 ModuleItem::TypeAlias(x) => x.as_syntax_node(),
13432 ModuleItem::InlineMacro(x) => x.as_syntax_node(),
13433 ModuleItem::MacroDeclaration(x) => x.as_syntax_node(),
13434 ModuleItem::HeaderDoc(x) => x.as_syntax_node(),
13435 ModuleItem::Missing(x) => x.as_syntax_node(),
13436 }
13437 }
13438 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13439 ModuleItemPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
13440 }
13441}
13442impl ModuleItem {
13443 pub fn is_variant(kind: SyntaxKind) -> bool {
13445 matches!(
13446 kind,
13447 SyntaxKind::ItemConstant
13448 | SyntaxKind::ItemModule
13449 | SyntaxKind::ItemUse
13450 | SyntaxKind::FunctionWithBody
13451 | SyntaxKind::ItemExternFunction
13452 | SyntaxKind::ItemExternType
13453 | SyntaxKind::ItemTrait
13454 | SyntaxKind::ItemImpl
13455 | SyntaxKind::ItemImplAlias
13456 | SyntaxKind::ItemStruct
13457 | SyntaxKind::ItemEnum
13458 | SyntaxKind::ItemTypeAlias
13459 | SyntaxKind::ItemInlineMacro
13460 | SyntaxKind::ItemMacroDeclaration
13461 | SyntaxKind::ItemHeaderDoc
13462 | SyntaxKind::ModuleItemMissing
13463 )
13464 }
13465}
13466#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13467pub struct ModuleItemList(ElementList<ModuleItem, 1>);
13468impl Deref for ModuleItemList {
13469 type Target = ElementList<ModuleItem, 1>;
13470 fn deref(&self) -> &Self::Target {
13471 &self.0
13472 }
13473}
13474impl ModuleItemList {
13475 pub fn new_green(db: &dyn SyntaxGroup, children: &[ModuleItemGreen]) -> ModuleItemListGreen {
13476 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13477 ModuleItemListGreen(
13478 Arc::new(GreenNode {
13479 kind: SyntaxKind::ModuleItemList,
13480 details: GreenNodeDetails::Node {
13481 children: children.iter().map(|x| x.0).collect(),
13482 width,
13483 },
13484 })
13485 .intern(db),
13486 )
13487 }
13488}
13489#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13490pub struct ModuleItemListPtr(pub SyntaxStablePtrId);
13491impl TypedStablePtr for ModuleItemListPtr {
13492 type SyntaxNode = ModuleItemList;
13493 fn untyped(&self) -> SyntaxStablePtrId {
13494 self.0
13495 }
13496 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
13497 ModuleItemList::from_syntax_node(db, self.0.lookup(db))
13498 }
13499}
13500impl From<ModuleItemListPtr> for SyntaxStablePtrId {
13501 fn from(ptr: ModuleItemListPtr) -> Self {
13502 ptr.untyped()
13503 }
13504}
13505#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13506pub struct ModuleItemListGreen(pub GreenId);
13507impl TypedSyntaxNode for ModuleItemList {
13508 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemList);
13509 type StablePtr = ModuleItemListPtr;
13510 type Green = ModuleItemListGreen;
13511 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13512 ModuleItemListGreen(
13513 Arc::new(GreenNode {
13514 kind: SyntaxKind::ModuleItemList,
13515 details: GreenNodeDetails::Node {
13516 children: [].into(),
13517 width: TextWidth::default(),
13518 },
13519 })
13520 .intern(db),
13521 )
13522 }
13523 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13524 Self(ElementList::new(node))
13525 }
13526 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13527 if node.kind(db) == SyntaxKind::ModuleItemList {
13528 Some(Self(ElementList::new(node)))
13529 } else {
13530 None
13531 }
13532 }
13533 fn as_syntax_node(&self) -> SyntaxNode {
13534 self.node
13535 }
13536 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13537 ModuleItemListPtr(self.node.stable_ptr(db))
13538 }
13539}
13540#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13541pub struct ModuleItemMissing {
13542 node: SyntaxNode,
13543}
13544impl ModuleItemMissing {
13545 pub fn new_green(db: &dyn SyntaxGroup) -> ModuleItemMissingGreen {
13546 let children = [];
13547 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
13548 ModuleItemMissingGreen(
13549 Arc::new(GreenNode {
13550 kind: SyntaxKind::ModuleItemMissing,
13551 details: GreenNodeDetails::Node { children: children.into(), width },
13552 })
13553 .intern(db),
13554 )
13555 }
13556}
13557impl ModuleItemMissing {}
13558#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13559pub struct ModuleItemMissingPtr(pub SyntaxStablePtrId);
13560impl ModuleItemMissingPtr {}
13561impl TypedStablePtr for ModuleItemMissingPtr {
13562 type SyntaxNode = ModuleItemMissing;
13563 fn untyped(&self) -> SyntaxStablePtrId {
13564 self.0
13565 }
13566 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemMissing {
13567 ModuleItemMissing::from_syntax_node(db, self.0.lookup(db))
13568 }
13569}
13570impl From<ModuleItemMissingPtr> for SyntaxStablePtrId {
13571 fn from(ptr: ModuleItemMissingPtr) -> Self {
13572 ptr.untyped()
13573 }
13574}
13575#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13576pub struct ModuleItemMissingGreen(pub GreenId);
13577impl TypedSyntaxNode for ModuleItemMissing {
13578 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemMissing);
13579 type StablePtr = ModuleItemMissingPtr;
13580 type Green = ModuleItemMissingGreen;
13581 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13582 ModuleItemMissingGreen(
13583 Arc::new(GreenNode {
13584 kind: SyntaxKind::ModuleItemMissing,
13585 details: GreenNodeDetails::Node {
13586 children: [].into(),
13587 width: TextWidth::default(),
13588 },
13589 })
13590 .intern(db),
13591 )
13592 }
13593 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13594 let kind = node.kind(db);
13595 assert_eq!(
13596 kind,
13597 SyntaxKind::ModuleItemMissing,
13598 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13599 kind,
13600 SyntaxKind::ModuleItemMissing
13601 );
13602 Self { node }
13603 }
13604 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13605 let kind = node.kind(db);
13606 if kind == SyntaxKind::ModuleItemMissing {
13607 Some(Self::from_syntax_node(db, node))
13608 } else {
13609 None
13610 }
13611 }
13612 fn as_syntax_node(&self) -> SyntaxNode {
13613 self.node
13614 }
13615 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13616 ModuleItemMissingPtr(self.node.stable_ptr(db))
13617 }
13618}
13619#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13620pub struct Attribute {
13621 node: SyntaxNode,
13622}
13623impl Attribute {
13624 pub const INDEX_HASH: usize = 0;
13625 pub const INDEX_LBRACK: usize = 1;
13626 pub const INDEX_ATTR: usize = 2;
13627 pub const INDEX_ARGUMENTS: usize = 3;
13628 pub const INDEX_RBRACK: usize = 4;
13629 pub fn new_green(
13630 db: &dyn SyntaxGroup,
13631 hash: TerminalHashGreen,
13632 lbrack: TerminalLBrackGreen,
13633 attr: ExprPathGreen,
13634 arguments: OptionArgListParenthesizedGreen,
13635 rbrack: TerminalRBrackGreen,
13636 ) -> AttributeGreen {
13637 let children = [hash.0, lbrack.0, attr.0, arguments.0, rbrack.0];
13638 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
13639 AttributeGreen(
13640 Arc::new(GreenNode {
13641 kind: SyntaxKind::Attribute,
13642 details: GreenNodeDetails::Node { children: children.into(), width },
13643 })
13644 .intern(db),
13645 )
13646 }
13647}
13648impl Attribute {
13649 pub fn hash(&self, db: &dyn SyntaxGroup) -> TerminalHash {
13650 TerminalHash::from_syntax_node(db, self.node.get_children(db)[0])
13651 }
13652 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
13653 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[1])
13654 }
13655 pub fn attr(&self, db: &dyn SyntaxGroup) -> ExprPath {
13656 ExprPath::from_syntax_node(db, self.node.get_children(db)[2])
13657 }
13658 pub fn arguments(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
13659 OptionArgListParenthesized::from_syntax_node(db, self.node.get_children(db)[3])
13660 }
13661 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
13662 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[4])
13663 }
13664}
13665#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13666pub struct AttributePtr(pub SyntaxStablePtrId);
13667impl AttributePtr {}
13668impl TypedStablePtr for AttributePtr {
13669 type SyntaxNode = Attribute;
13670 fn untyped(&self) -> SyntaxStablePtrId {
13671 self.0
13672 }
13673 fn lookup(&self, db: &dyn SyntaxGroup) -> Attribute {
13674 Attribute::from_syntax_node(db, self.0.lookup(db))
13675 }
13676}
13677impl From<AttributePtr> for SyntaxStablePtrId {
13678 fn from(ptr: AttributePtr) -> Self {
13679 ptr.untyped()
13680 }
13681}
13682#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13683pub struct AttributeGreen(pub GreenId);
13684impl TypedSyntaxNode for Attribute {
13685 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Attribute);
13686 type StablePtr = AttributePtr;
13687 type Green = AttributeGreen;
13688 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13689 AttributeGreen(
13690 Arc::new(GreenNode {
13691 kind: SyntaxKind::Attribute,
13692 details: GreenNodeDetails::Node {
13693 children: [
13694 TerminalHash::missing(db).0,
13695 TerminalLBrack::missing(db).0,
13696 ExprPath::missing(db).0,
13697 OptionArgListParenthesized::missing(db).0,
13698 TerminalRBrack::missing(db).0,
13699 ]
13700 .into(),
13701 width: TextWidth::default(),
13702 },
13703 })
13704 .intern(db),
13705 )
13706 }
13707 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13708 let kind = node.kind(db);
13709 assert_eq!(
13710 kind,
13711 SyntaxKind::Attribute,
13712 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13713 kind,
13714 SyntaxKind::Attribute
13715 );
13716 Self { node }
13717 }
13718 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13719 let kind = node.kind(db);
13720 if kind == SyntaxKind::Attribute { Some(Self::from_syntax_node(db, node)) } else { None }
13721 }
13722 fn as_syntax_node(&self) -> SyntaxNode {
13723 self.node
13724 }
13725 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13726 AttributePtr(self.node.stable_ptr(db))
13727 }
13728}
13729#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13730pub struct AttributeList(ElementList<Attribute, 1>);
13731impl Deref for AttributeList {
13732 type Target = ElementList<Attribute, 1>;
13733 fn deref(&self) -> &Self::Target {
13734 &self.0
13735 }
13736}
13737impl AttributeList {
13738 pub fn new_green(db: &dyn SyntaxGroup, children: &[AttributeGreen]) -> AttributeListGreen {
13739 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13740 AttributeListGreen(
13741 Arc::new(GreenNode {
13742 kind: SyntaxKind::AttributeList,
13743 details: GreenNodeDetails::Node {
13744 children: children.iter().map(|x| x.0).collect(),
13745 width,
13746 },
13747 })
13748 .intern(db),
13749 )
13750 }
13751}
13752#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13753pub struct AttributeListPtr(pub SyntaxStablePtrId);
13754impl TypedStablePtr for AttributeListPtr {
13755 type SyntaxNode = AttributeList;
13756 fn untyped(&self) -> SyntaxStablePtrId {
13757 self.0
13758 }
13759 fn lookup(&self, db: &dyn SyntaxGroup) -> AttributeList {
13760 AttributeList::from_syntax_node(db, self.0.lookup(db))
13761 }
13762}
13763impl From<AttributeListPtr> for SyntaxStablePtrId {
13764 fn from(ptr: AttributeListPtr) -> Self {
13765 ptr.untyped()
13766 }
13767}
13768#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13769pub struct AttributeListGreen(pub GreenId);
13770impl TypedSyntaxNode for AttributeList {
13771 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AttributeList);
13772 type StablePtr = AttributeListPtr;
13773 type Green = AttributeListGreen;
13774 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13775 AttributeListGreen(
13776 Arc::new(GreenNode {
13777 kind: SyntaxKind::AttributeList,
13778 details: GreenNodeDetails::Node {
13779 children: [].into(),
13780 width: TextWidth::default(),
13781 },
13782 })
13783 .intern(db),
13784 )
13785 }
13786 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13787 Self(ElementList::new(node))
13788 }
13789 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13790 if node.kind(db) == SyntaxKind::AttributeList {
13791 Some(Self(ElementList::new(node)))
13792 } else {
13793 None
13794 }
13795 }
13796 fn as_syntax_node(&self) -> SyntaxNode {
13797 self.node
13798 }
13799 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13800 AttributeListPtr(self.node.stable_ptr(db))
13801 }
13802}
13803#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13804pub struct VisibilityDefault {
13805 node: SyntaxNode,
13806}
13807impl VisibilityDefault {
13808 pub fn new_green(db: &dyn SyntaxGroup) -> VisibilityDefaultGreen {
13809 let children = [];
13810 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
13811 VisibilityDefaultGreen(
13812 Arc::new(GreenNode {
13813 kind: SyntaxKind::VisibilityDefault,
13814 details: GreenNodeDetails::Node { children: children.into(), width },
13815 })
13816 .intern(db),
13817 )
13818 }
13819}
13820impl VisibilityDefault {}
13821#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13822pub struct VisibilityDefaultPtr(pub SyntaxStablePtrId);
13823impl VisibilityDefaultPtr {}
13824impl TypedStablePtr for VisibilityDefaultPtr {
13825 type SyntaxNode = VisibilityDefault;
13826 fn untyped(&self) -> SyntaxStablePtrId {
13827 self.0
13828 }
13829 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityDefault {
13830 VisibilityDefault::from_syntax_node(db, self.0.lookup(db))
13831 }
13832}
13833impl From<VisibilityDefaultPtr> for SyntaxStablePtrId {
13834 fn from(ptr: VisibilityDefaultPtr) -> Self {
13835 ptr.untyped()
13836 }
13837}
13838#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13839pub struct VisibilityDefaultGreen(pub GreenId);
13840impl TypedSyntaxNode for VisibilityDefault {
13841 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityDefault);
13842 type StablePtr = VisibilityDefaultPtr;
13843 type Green = VisibilityDefaultGreen;
13844 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13845 VisibilityDefaultGreen(
13846 Arc::new(GreenNode {
13847 kind: SyntaxKind::VisibilityDefault,
13848 details: GreenNodeDetails::Node {
13849 children: [].into(),
13850 width: TextWidth::default(),
13851 },
13852 })
13853 .intern(db),
13854 )
13855 }
13856 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13857 let kind = node.kind(db);
13858 assert_eq!(
13859 kind,
13860 SyntaxKind::VisibilityDefault,
13861 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13862 kind,
13863 SyntaxKind::VisibilityDefault
13864 );
13865 Self { node }
13866 }
13867 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13868 let kind = node.kind(db);
13869 if kind == SyntaxKind::VisibilityDefault {
13870 Some(Self::from_syntax_node(db, node))
13871 } else {
13872 None
13873 }
13874 }
13875 fn as_syntax_node(&self) -> SyntaxNode {
13876 self.node
13877 }
13878 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13879 VisibilityDefaultPtr(self.node.stable_ptr(db))
13880 }
13881}
13882#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13883pub struct VisibilityPubArgumentClause {
13884 node: SyntaxNode,
13885}
13886impl VisibilityPubArgumentClause {
13887 pub const INDEX_LPAREN: usize = 0;
13888 pub const INDEX_ARGUMENT: usize = 1;
13889 pub const INDEX_RPAREN: usize = 2;
13890 pub fn new_green(
13891 db: &dyn SyntaxGroup,
13892 lparen: TerminalLParenGreen,
13893 argument: TerminalIdentifierGreen,
13894 rparen: TerminalRParenGreen,
13895 ) -> VisibilityPubArgumentClauseGreen {
13896 let children = [lparen.0, argument.0, rparen.0];
13897 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
13898 VisibilityPubArgumentClauseGreen(
13899 Arc::new(GreenNode {
13900 kind: SyntaxKind::VisibilityPubArgumentClause,
13901 details: GreenNodeDetails::Node { children: children.into(), width },
13902 })
13903 .intern(db),
13904 )
13905 }
13906}
13907impl VisibilityPubArgumentClause {
13908 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
13909 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
13910 }
13911 pub fn argument(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
13912 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
13913 }
13914 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
13915 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
13916 }
13917}
13918#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13919pub struct VisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13920impl VisibilityPubArgumentClausePtr {}
13921impl TypedStablePtr for VisibilityPubArgumentClausePtr {
13922 type SyntaxNode = VisibilityPubArgumentClause;
13923 fn untyped(&self) -> SyntaxStablePtrId {
13924 self.0
13925 }
13926 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPubArgumentClause {
13927 VisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13928 }
13929}
13930impl From<VisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
13931 fn from(ptr: VisibilityPubArgumentClausePtr) -> Self {
13932 ptr.untyped()
13933 }
13934}
13935#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13936pub struct VisibilityPubArgumentClauseGreen(pub GreenId);
13937impl TypedSyntaxNode for VisibilityPubArgumentClause {
13938 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPubArgumentClause);
13939 type StablePtr = VisibilityPubArgumentClausePtr;
13940 type Green = VisibilityPubArgumentClauseGreen;
13941 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13942 VisibilityPubArgumentClauseGreen(
13943 Arc::new(GreenNode {
13944 kind: SyntaxKind::VisibilityPubArgumentClause,
13945 details: GreenNodeDetails::Node {
13946 children: [
13947 TerminalLParen::missing(db).0,
13948 TerminalIdentifier::missing(db).0,
13949 TerminalRParen::missing(db).0,
13950 ]
13951 .into(),
13952 width: TextWidth::default(),
13953 },
13954 })
13955 .intern(db),
13956 )
13957 }
13958 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13959 let kind = node.kind(db);
13960 assert_eq!(
13961 kind,
13962 SyntaxKind::VisibilityPubArgumentClause,
13963 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13964 kind,
13965 SyntaxKind::VisibilityPubArgumentClause
13966 );
13967 Self { node }
13968 }
13969 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13970 let kind = node.kind(db);
13971 if kind == SyntaxKind::VisibilityPubArgumentClause {
13972 Some(Self::from_syntax_node(db, node))
13973 } else {
13974 None
13975 }
13976 }
13977 fn as_syntax_node(&self) -> SyntaxNode {
13978 self.node
13979 }
13980 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
13981 VisibilityPubArgumentClausePtr(self.node.stable_ptr(db))
13982 }
13983}
13984#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13985pub enum OptionVisibilityPubArgumentClause {
13986 Empty(OptionVisibilityPubArgumentClauseEmpty),
13987 VisibilityPubArgumentClause(VisibilityPubArgumentClause),
13988}
13989#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13990pub struct OptionVisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13991impl TypedStablePtr for OptionVisibilityPubArgumentClausePtr {
13992 type SyntaxNode = OptionVisibilityPubArgumentClause;
13993 fn untyped(&self) -> SyntaxStablePtrId {
13994 self.0
13995 }
13996 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
13997 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13998 }
13999}
14000impl From<OptionVisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
14001 fn from(ptr: OptionVisibilityPubArgumentClausePtr) -> Self {
14002 ptr.untyped()
14003 }
14004}
14005impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for OptionVisibilityPubArgumentClausePtr {
14006 fn from(value: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
14007 Self(value.0)
14008 }
14009}
14010impl From<VisibilityPubArgumentClausePtr> for OptionVisibilityPubArgumentClausePtr {
14011 fn from(value: VisibilityPubArgumentClausePtr) -> Self {
14012 Self(value.0)
14013 }
14014}
14015impl From<OptionVisibilityPubArgumentClauseEmptyGreen> for OptionVisibilityPubArgumentClauseGreen {
14016 fn from(value: OptionVisibilityPubArgumentClauseEmptyGreen) -> Self {
14017 Self(value.0)
14018 }
14019}
14020impl From<VisibilityPubArgumentClauseGreen> for OptionVisibilityPubArgumentClauseGreen {
14021 fn from(value: VisibilityPubArgumentClauseGreen) -> Self {
14022 Self(value.0)
14023 }
14024}
14025#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14026pub struct OptionVisibilityPubArgumentClauseGreen(pub GreenId);
14027impl TypedSyntaxNode for OptionVisibilityPubArgumentClause {
14028 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14029 type StablePtr = OptionVisibilityPubArgumentClausePtr;
14030 type Green = OptionVisibilityPubArgumentClauseGreen;
14031 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14032 panic!("No missing variant.");
14033 }
14034 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14035 let kind = node.kind(db);
14036 match kind {
14037 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
14038 OptionVisibilityPubArgumentClause::Empty(
14039 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
14040 )
14041 }
14042 SyntaxKind::VisibilityPubArgumentClause => {
14043 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
14044 VisibilityPubArgumentClause::from_syntax_node(db, node),
14045 )
14046 }
14047 _ => panic!(
14048 "Unexpected syntax kind {:?} when constructing {}.",
14049 kind, "OptionVisibilityPubArgumentClause"
14050 ),
14051 }
14052 }
14053 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14054 let kind = node.kind(db);
14055 match kind {
14056 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
14057 Some(OptionVisibilityPubArgumentClause::Empty(
14058 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
14059 ))
14060 }
14061 SyntaxKind::VisibilityPubArgumentClause => {
14062 Some(OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
14063 VisibilityPubArgumentClause::from_syntax_node(db, node),
14064 ))
14065 }
14066 _ => None,
14067 }
14068 }
14069 fn as_syntax_node(&self) -> SyntaxNode {
14070 match self {
14071 OptionVisibilityPubArgumentClause::Empty(x) => x.as_syntax_node(),
14072 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(x) => x.as_syntax_node(),
14073 }
14074 }
14075 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14076 OptionVisibilityPubArgumentClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
14077 }
14078}
14079impl OptionVisibilityPubArgumentClause {
14080 pub fn is_variant(kind: SyntaxKind) -> bool {
14082 matches!(
14083 kind,
14084 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
14085 | SyntaxKind::VisibilityPubArgumentClause
14086 )
14087 }
14088}
14089#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14090pub struct OptionVisibilityPubArgumentClauseEmpty {
14091 node: SyntaxNode,
14092}
14093impl OptionVisibilityPubArgumentClauseEmpty {
14094 pub fn new_green(db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmptyGreen {
14095 let children = [];
14096 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14097 OptionVisibilityPubArgumentClauseEmptyGreen(
14098 Arc::new(GreenNode {
14099 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14100 details: GreenNodeDetails::Node { children: children.into(), width },
14101 })
14102 .intern(db),
14103 )
14104 }
14105}
14106impl OptionVisibilityPubArgumentClauseEmpty {}
14107#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14108pub struct OptionVisibilityPubArgumentClauseEmptyPtr(pub SyntaxStablePtrId);
14109impl OptionVisibilityPubArgumentClauseEmptyPtr {}
14110impl TypedStablePtr for OptionVisibilityPubArgumentClauseEmptyPtr {
14111 type SyntaxNode = OptionVisibilityPubArgumentClauseEmpty;
14112 fn untyped(&self) -> SyntaxStablePtrId {
14113 self.0
14114 }
14115 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmpty {
14116 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, self.0.lookup(db))
14117 }
14118}
14119impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for SyntaxStablePtrId {
14120 fn from(ptr: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
14121 ptr.untyped()
14122 }
14123}
14124#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14125pub struct OptionVisibilityPubArgumentClauseEmptyGreen(pub GreenId);
14126impl TypedSyntaxNode for OptionVisibilityPubArgumentClauseEmpty {
14127 const OPTIONAL_KIND: Option<SyntaxKind> =
14128 Some(SyntaxKind::OptionVisibilityPubArgumentClauseEmpty);
14129 type StablePtr = OptionVisibilityPubArgumentClauseEmptyPtr;
14130 type Green = OptionVisibilityPubArgumentClauseEmptyGreen;
14131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14132 OptionVisibilityPubArgumentClauseEmptyGreen(
14133 Arc::new(GreenNode {
14134 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14135 details: GreenNodeDetails::Node {
14136 children: [].into(),
14137 width: TextWidth::default(),
14138 },
14139 })
14140 .intern(db),
14141 )
14142 }
14143 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14144 let kind = node.kind(db);
14145 assert_eq!(
14146 kind,
14147 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14148 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14149 kind,
14150 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
14151 );
14152 Self { node }
14153 }
14154 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14155 let kind = node.kind(db);
14156 if kind == SyntaxKind::OptionVisibilityPubArgumentClauseEmpty {
14157 Some(Self::from_syntax_node(db, node))
14158 } else {
14159 None
14160 }
14161 }
14162 fn as_syntax_node(&self) -> SyntaxNode {
14163 self.node
14164 }
14165 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14166 OptionVisibilityPubArgumentClauseEmptyPtr(self.node.stable_ptr(db))
14167 }
14168}
14169#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14170pub struct VisibilityPub {
14171 node: SyntaxNode,
14172}
14173impl VisibilityPub {
14174 pub const INDEX_PUB_KW: usize = 0;
14175 pub const INDEX_ARGUMENT_CLAUSE: usize = 1;
14176 pub fn new_green(
14177 db: &dyn SyntaxGroup,
14178 pub_kw: TerminalPubGreen,
14179 argument_clause: OptionVisibilityPubArgumentClauseGreen,
14180 ) -> VisibilityPubGreen {
14181 let children = [pub_kw.0, argument_clause.0];
14182 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14183 VisibilityPubGreen(
14184 Arc::new(GreenNode {
14185 kind: SyntaxKind::VisibilityPub,
14186 details: GreenNodeDetails::Node { children: children.into(), width },
14187 })
14188 .intern(db),
14189 )
14190 }
14191}
14192impl VisibilityPub {
14193 pub fn pub_kw(&self, db: &dyn SyntaxGroup) -> TerminalPub {
14194 TerminalPub::from_syntax_node(db, self.node.get_children(db)[0])
14195 }
14196 pub fn argument_clause(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
14197 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.node.get_children(db)[1])
14198 }
14199}
14200#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14201pub struct VisibilityPubPtr(pub SyntaxStablePtrId);
14202impl VisibilityPubPtr {}
14203impl TypedStablePtr for VisibilityPubPtr {
14204 type SyntaxNode = VisibilityPub;
14205 fn untyped(&self) -> SyntaxStablePtrId {
14206 self.0
14207 }
14208 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPub {
14209 VisibilityPub::from_syntax_node(db, self.0.lookup(db))
14210 }
14211}
14212impl From<VisibilityPubPtr> for SyntaxStablePtrId {
14213 fn from(ptr: VisibilityPubPtr) -> Self {
14214 ptr.untyped()
14215 }
14216}
14217#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14218pub struct VisibilityPubGreen(pub GreenId);
14219impl TypedSyntaxNode for VisibilityPub {
14220 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPub);
14221 type StablePtr = VisibilityPubPtr;
14222 type Green = VisibilityPubGreen;
14223 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14224 VisibilityPubGreen(
14225 Arc::new(GreenNode {
14226 kind: SyntaxKind::VisibilityPub,
14227 details: GreenNodeDetails::Node {
14228 children: [
14229 TerminalPub::missing(db).0,
14230 OptionVisibilityPubArgumentClause::missing(db).0,
14231 ]
14232 .into(),
14233 width: TextWidth::default(),
14234 },
14235 })
14236 .intern(db),
14237 )
14238 }
14239 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14240 let kind = node.kind(db);
14241 assert_eq!(
14242 kind,
14243 SyntaxKind::VisibilityPub,
14244 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14245 kind,
14246 SyntaxKind::VisibilityPub
14247 );
14248 Self { node }
14249 }
14250 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14251 let kind = node.kind(db);
14252 if kind == SyntaxKind::VisibilityPub {
14253 Some(Self::from_syntax_node(db, node))
14254 } else {
14255 None
14256 }
14257 }
14258 fn as_syntax_node(&self) -> SyntaxNode {
14259 self.node
14260 }
14261 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14262 VisibilityPubPtr(self.node.stable_ptr(db))
14263 }
14264}
14265#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14266pub enum Visibility {
14267 Default(VisibilityDefault),
14268 Pub(VisibilityPub),
14269}
14270#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14271pub struct VisibilityPtr(pub SyntaxStablePtrId);
14272impl TypedStablePtr for VisibilityPtr {
14273 type SyntaxNode = Visibility;
14274 fn untyped(&self) -> SyntaxStablePtrId {
14275 self.0
14276 }
14277 fn lookup(&self, db: &dyn SyntaxGroup) -> Visibility {
14278 Visibility::from_syntax_node(db, self.0.lookup(db))
14279 }
14280}
14281impl From<VisibilityPtr> for SyntaxStablePtrId {
14282 fn from(ptr: VisibilityPtr) -> Self {
14283 ptr.untyped()
14284 }
14285}
14286impl From<VisibilityDefaultPtr> for VisibilityPtr {
14287 fn from(value: VisibilityDefaultPtr) -> Self {
14288 Self(value.0)
14289 }
14290}
14291impl From<VisibilityPubPtr> for VisibilityPtr {
14292 fn from(value: VisibilityPubPtr) -> Self {
14293 Self(value.0)
14294 }
14295}
14296impl From<VisibilityDefaultGreen> for VisibilityGreen {
14297 fn from(value: VisibilityDefaultGreen) -> Self {
14298 Self(value.0)
14299 }
14300}
14301impl From<VisibilityPubGreen> for VisibilityGreen {
14302 fn from(value: VisibilityPubGreen) -> Self {
14303 Self(value.0)
14304 }
14305}
14306#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14307pub struct VisibilityGreen(pub GreenId);
14308impl TypedSyntaxNode for Visibility {
14309 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14310 type StablePtr = VisibilityPtr;
14311 type Green = VisibilityGreen;
14312 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14313 panic!("No missing variant.");
14314 }
14315 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14316 let kind = node.kind(db);
14317 match kind {
14318 SyntaxKind::VisibilityDefault => {
14319 Visibility::Default(VisibilityDefault::from_syntax_node(db, node))
14320 }
14321 SyntaxKind::VisibilityPub => Visibility::Pub(VisibilityPub::from_syntax_node(db, node)),
14322 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Visibility"),
14323 }
14324 }
14325 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14326 let kind = node.kind(db);
14327 match kind {
14328 SyntaxKind::VisibilityDefault => {
14329 Some(Visibility::Default(VisibilityDefault::from_syntax_node(db, node)))
14330 }
14331 SyntaxKind::VisibilityPub => {
14332 Some(Visibility::Pub(VisibilityPub::from_syntax_node(db, node)))
14333 }
14334 _ => None,
14335 }
14336 }
14337 fn as_syntax_node(&self) -> SyntaxNode {
14338 match self {
14339 Visibility::Default(x) => x.as_syntax_node(),
14340 Visibility::Pub(x) => x.as_syntax_node(),
14341 }
14342 }
14343 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14344 VisibilityPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
14345 }
14346}
14347impl Visibility {
14348 pub fn is_variant(kind: SyntaxKind) -> bool {
14350 matches!(kind, SyntaxKind::VisibilityDefault | SyntaxKind::VisibilityPub)
14351 }
14352}
14353#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14354pub struct ItemModule {
14355 node: SyntaxNode,
14356}
14357impl ItemModule {
14358 pub const INDEX_ATTRIBUTES: usize = 0;
14359 pub const INDEX_VISIBILITY: usize = 1;
14360 pub const INDEX_MODULE_KW: usize = 2;
14361 pub const INDEX_NAME: usize = 3;
14362 pub const INDEX_BODY: usize = 4;
14363 pub fn new_green(
14364 db: &dyn SyntaxGroup,
14365 attributes: AttributeListGreen,
14366 visibility: VisibilityGreen,
14367 module_kw: TerminalModuleGreen,
14368 name: TerminalIdentifierGreen,
14369 body: MaybeModuleBodyGreen,
14370 ) -> ItemModuleGreen {
14371 let children = [attributes.0, visibility.0, module_kw.0, name.0, body.0];
14372 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14373 ItemModuleGreen(
14374 Arc::new(GreenNode {
14375 kind: SyntaxKind::ItemModule,
14376 details: GreenNodeDetails::Node { children: children.into(), width },
14377 })
14378 .intern(db),
14379 )
14380 }
14381}
14382impl ItemModule {
14383 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14384 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
14385 }
14386 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14387 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
14388 }
14389 pub fn module_kw(&self, db: &dyn SyntaxGroup) -> TerminalModule {
14390 TerminalModule::from_syntax_node(db, self.node.get_children(db)[2])
14391 }
14392 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14393 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
14394 }
14395 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14396 MaybeModuleBody::from_syntax_node(db, self.node.get_children(db)[4])
14397 }
14398}
14399#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14400pub struct ItemModulePtr(pub SyntaxStablePtrId);
14401impl ItemModulePtr {
14402 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14403 let ptr = self.0.lookup_intern(db);
14404 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14405 TerminalIdentifierGreen(key_fields[0])
14406 } else {
14407 panic!("Unexpected key field query on root.");
14408 }
14409 }
14410}
14411impl TypedStablePtr for ItemModulePtr {
14412 type SyntaxNode = ItemModule;
14413 fn untyped(&self) -> SyntaxStablePtrId {
14414 self.0
14415 }
14416 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemModule {
14417 ItemModule::from_syntax_node(db, self.0.lookup(db))
14418 }
14419}
14420impl From<ItemModulePtr> for SyntaxStablePtrId {
14421 fn from(ptr: ItemModulePtr) -> Self {
14422 ptr.untyped()
14423 }
14424}
14425#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14426pub struct ItemModuleGreen(pub GreenId);
14427impl TypedSyntaxNode for ItemModule {
14428 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemModule);
14429 type StablePtr = ItemModulePtr;
14430 type Green = ItemModuleGreen;
14431 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14432 ItemModuleGreen(
14433 Arc::new(GreenNode {
14434 kind: SyntaxKind::ItemModule,
14435 details: GreenNodeDetails::Node {
14436 children: [
14437 AttributeList::missing(db).0,
14438 Visibility::missing(db).0,
14439 TerminalModule::missing(db).0,
14440 TerminalIdentifier::missing(db).0,
14441 MaybeModuleBody::missing(db).0,
14442 ]
14443 .into(),
14444 width: TextWidth::default(),
14445 },
14446 })
14447 .intern(db),
14448 )
14449 }
14450 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14451 let kind = node.kind(db);
14452 assert_eq!(
14453 kind,
14454 SyntaxKind::ItemModule,
14455 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14456 kind,
14457 SyntaxKind::ItemModule
14458 );
14459 Self { node }
14460 }
14461 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14462 let kind = node.kind(db);
14463 if kind == SyntaxKind::ItemModule { Some(Self::from_syntax_node(db, node)) } else { None }
14464 }
14465 fn as_syntax_node(&self) -> SyntaxNode {
14466 self.node
14467 }
14468 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14469 ItemModulePtr(self.node.stable_ptr(db))
14470 }
14471}
14472#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14473pub enum MaybeModuleBody {
14474 Some(ModuleBody),
14475 None(TerminalSemicolon),
14476}
14477#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14478pub struct MaybeModuleBodyPtr(pub SyntaxStablePtrId);
14479impl TypedStablePtr for MaybeModuleBodyPtr {
14480 type SyntaxNode = MaybeModuleBody;
14481 fn untyped(&self) -> SyntaxStablePtrId {
14482 self.0
14483 }
14484 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14485 MaybeModuleBody::from_syntax_node(db, self.0.lookup(db))
14486 }
14487}
14488impl From<MaybeModuleBodyPtr> for SyntaxStablePtrId {
14489 fn from(ptr: MaybeModuleBodyPtr) -> Self {
14490 ptr.untyped()
14491 }
14492}
14493impl From<ModuleBodyPtr> for MaybeModuleBodyPtr {
14494 fn from(value: ModuleBodyPtr) -> Self {
14495 Self(value.0)
14496 }
14497}
14498impl From<TerminalSemicolonPtr> for MaybeModuleBodyPtr {
14499 fn from(value: TerminalSemicolonPtr) -> Self {
14500 Self(value.0)
14501 }
14502}
14503impl From<ModuleBodyGreen> for MaybeModuleBodyGreen {
14504 fn from(value: ModuleBodyGreen) -> Self {
14505 Self(value.0)
14506 }
14507}
14508impl From<TerminalSemicolonGreen> for MaybeModuleBodyGreen {
14509 fn from(value: TerminalSemicolonGreen) -> Self {
14510 Self(value.0)
14511 }
14512}
14513#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14514pub struct MaybeModuleBodyGreen(pub GreenId);
14515impl TypedSyntaxNode for MaybeModuleBody {
14516 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14517 type StablePtr = MaybeModuleBodyPtr;
14518 type Green = MaybeModuleBodyGreen;
14519 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14520 panic!("No missing variant.");
14521 }
14522 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14523 let kind = node.kind(db);
14524 match kind {
14525 SyntaxKind::ModuleBody => MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)),
14526 SyntaxKind::TerminalSemicolon => {
14527 MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node))
14528 }
14529 _ => {
14530 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeModuleBody")
14531 }
14532 }
14533 }
14534 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14535 let kind = node.kind(db);
14536 match kind {
14537 SyntaxKind::ModuleBody => {
14538 Some(MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)))
14539 }
14540 SyntaxKind::TerminalSemicolon => {
14541 Some(MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node)))
14542 }
14543 _ => None,
14544 }
14545 }
14546 fn as_syntax_node(&self) -> SyntaxNode {
14547 match self {
14548 MaybeModuleBody::Some(x) => x.as_syntax_node(),
14549 MaybeModuleBody::None(x) => x.as_syntax_node(),
14550 }
14551 }
14552 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14553 MaybeModuleBodyPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
14554 }
14555}
14556impl MaybeModuleBody {
14557 pub fn is_variant(kind: SyntaxKind) -> bool {
14559 matches!(kind, SyntaxKind::ModuleBody | SyntaxKind::TerminalSemicolon)
14560 }
14561}
14562#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14563pub struct ModuleBody {
14564 node: SyntaxNode,
14565}
14566impl ModuleBody {
14567 pub const INDEX_LBRACE: usize = 0;
14568 pub const INDEX_ITEMS: usize = 1;
14569 pub const INDEX_RBRACE: usize = 2;
14570 pub fn new_green(
14571 db: &dyn SyntaxGroup,
14572 lbrace: TerminalLBraceGreen,
14573 items: ModuleItemListGreen,
14574 rbrace: TerminalRBraceGreen,
14575 ) -> ModuleBodyGreen {
14576 let children = [lbrace.0, items.0, rbrace.0];
14577 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14578 ModuleBodyGreen(
14579 Arc::new(GreenNode {
14580 kind: SyntaxKind::ModuleBody,
14581 details: GreenNodeDetails::Node { children: children.into(), width },
14582 })
14583 .intern(db),
14584 )
14585 }
14586}
14587impl ModuleBody {
14588 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
14589 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
14590 }
14591 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
14592 ModuleItemList::from_syntax_node(db, self.node.get_children(db)[1])
14593 }
14594 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
14595 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
14596 }
14597}
14598#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14599pub struct ModuleBodyPtr(pub SyntaxStablePtrId);
14600impl ModuleBodyPtr {}
14601impl TypedStablePtr for ModuleBodyPtr {
14602 type SyntaxNode = ModuleBody;
14603 fn untyped(&self) -> SyntaxStablePtrId {
14604 self.0
14605 }
14606 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleBody {
14607 ModuleBody::from_syntax_node(db, self.0.lookup(db))
14608 }
14609}
14610impl From<ModuleBodyPtr> for SyntaxStablePtrId {
14611 fn from(ptr: ModuleBodyPtr) -> Self {
14612 ptr.untyped()
14613 }
14614}
14615#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14616pub struct ModuleBodyGreen(pub GreenId);
14617impl TypedSyntaxNode for ModuleBody {
14618 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleBody);
14619 type StablePtr = ModuleBodyPtr;
14620 type Green = ModuleBodyGreen;
14621 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14622 ModuleBodyGreen(
14623 Arc::new(GreenNode {
14624 kind: SyntaxKind::ModuleBody,
14625 details: GreenNodeDetails::Node {
14626 children: [
14627 TerminalLBrace::missing(db).0,
14628 ModuleItemList::missing(db).0,
14629 TerminalRBrace::missing(db).0,
14630 ]
14631 .into(),
14632 width: TextWidth::default(),
14633 },
14634 })
14635 .intern(db),
14636 )
14637 }
14638 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14639 let kind = node.kind(db);
14640 assert_eq!(
14641 kind,
14642 SyntaxKind::ModuleBody,
14643 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14644 kind,
14645 SyntaxKind::ModuleBody
14646 );
14647 Self { node }
14648 }
14649 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14650 let kind = node.kind(db);
14651 if kind == SyntaxKind::ModuleBody { Some(Self::from_syntax_node(db, node)) } else { None }
14652 }
14653 fn as_syntax_node(&self) -> SyntaxNode {
14654 self.node
14655 }
14656 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14657 ModuleBodyPtr(self.node.stable_ptr(db))
14658 }
14659}
14660#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14661pub struct FunctionDeclaration {
14662 node: SyntaxNode,
14663}
14664impl FunctionDeclaration {
14665 pub const INDEX_OPTIONAL_CONST: usize = 0;
14666 pub const INDEX_FUNCTION_KW: usize = 1;
14667 pub const INDEX_NAME: usize = 2;
14668 pub const INDEX_GENERIC_PARAMS: usize = 3;
14669 pub const INDEX_SIGNATURE: usize = 4;
14670 pub fn new_green(
14671 db: &dyn SyntaxGroup,
14672 optional_const: OptionTerminalConstGreen,
14673 function_kw: TerminalFunctionGreen,
14674 name: TerminalIdentifierGreen,
14675 generic_params: OptionWrappedGenericParamListGreen,
14676 signature: FunctionSignatureGreen,
14677 ) -> FunctionDeclarationGreen {
14678 let children = [optional_const.0, function_kw.0, name.0, generic_params.0, signature.0];
14679 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14680 FunctionDeclarationGreen(
14681 Arc::new(GreenNode {
14682 kind: SyntaxKind::FunctionDeclaration,
14683 details: GreenNodeDetails::Node { children: children.into(), width },
14684 })
14685 .intern(db),
14686 )
14687 }
14688}
14689impl FunctionDeclaration {
14690 pub fn optional_const(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
14691 OptionTerminalConst::from_syntax_node(db, self.node.get_children(db)[0])
14692 }
14693 pub fn function_kw(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
14694 TerminalFunction::from_syntax_node(db, self.node.get_children(db)[1])
14695 }
14696 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14697 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
14698 }
14699 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
14700 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[3])
14701 }
14702 pub fn signature(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
14703 FunctionSignature::from_syntax_node(db, self.node.get_children(db)[4])
14704 }
14705}
14706#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14707pub struct FunctionDeclarationPtr(pub SyntaxStablePtrId);
14708impl FunctionDeclarationPtr {
14709 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14710 let ptr = self.0.lookup_intern(db);
14711 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14712 TerminalIdentifierGreen(key_fields[0])
14713 } else {
14714 panic!("Unexpected key field query on root.");
14715 }
14716 }
14717}
14718impl TypedStablePtr for FunctionDeclarationPtr {
14719 type SyntaxNode = FunctionDeclaration;
14720 fn untyped(&self) -> SyntaxStablePtrId {
14721 self.0
14722 }
14723 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14724 FunctionDeclaration::from_syntax_node(db, self.0.lookup(db))
14725 }
14726}
14727impl From<FunctionDeclarationPtr> for SyntaxStablePtrId {
14728 fn from(ptr: FunctionDeclarationPtr) -> Self {
14729 ptr.untyped()
14730 }
14731}
14732#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14733pub struct FunctionDeclarationGreen(pub GreenId);
14734impl TypedSyntaxNode for FunctionDeclaration {
14735 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionDeclaration);
14736 type StablePtr = FunctionDeclarationPtr;
14737 type Green = FunctionDeclarationGreen;
14738 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14739 FunctionDeclarationGreen(
14740 Arc::new(GreenNode {
14741 kind: SyntaxKind::FunctionDeclaration,
14742 details: GreenNodeDetails::Node {
14743 children: [
14744 OptionTerminalConst::missing(db).0,
14745 TerminalFunction::missing(db).0,
14746 TerminalIdentifier::missing(db).0,
14747 OptionWrappedGenericParamList::missing(db).0,
14748 FunctionSignature::missing(db).0,
14749 ]
14750 .into(),
14751 width: TextWidth::default(),
14752 },
14753 })
14754 .intern(db),
14755 )
14756 }
14757 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14758 let kind = node.kind(db);
14759 assert_eq!(
14760 kind,
14761 SyntaxKind::FunctionDeclaration,
14762 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14763 kind,
14764 SyntaxKind::FunctionDeclaration
14765 );
14766 Self { node }
14767 }
14768 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14769 let kind = node.kind(db);
14770 if kind == SyntaxKind::FunctionDeclaration {
14771 Some(Self::from_syntax_node(db, node))
14772 } else {
14773 None
14774 }
14775 }
14776 fn as_syntax_node(&self) -> SyntaxNode {
14777 self.node
14778 }
14779 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14780 FunctionDeclarationPtr(self.node.stable_ptr(db))
14781 }
14782}
14783#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14784pub struct ItemConstant {
14785 node: SyntaxNode,
14786}
14787impl ItemConstant {
14788 pub const INDEX_ATTRIBUTES: usize = 0;
14789 pub const INDEX_VISIBILITY: usize = 1;
14790 pub const INDEX_CONST_KW: usize = 2;
14791 pub const INDEX_NAME: usize = 3;
14792 pub const INDEX_TYPE_CLAUSE: usize = 4;
14793 pub const INDEX_EQ: usize = 5;
14794 pub const INDEX_VALUE: usize = 6;
14795 pub const INDEX_SEMICOLON: usize = 7;
14796 pub fn new_green(
14797 db: &dyn SyntaxGroup,
14798 attributes: AttributeListGreen,
14799 visibility: VisibilityGreen,
14800 const_kw: TerminalConstGreen,
14801 name: TerminalIdentifierGreen,
14802 type_clause: TypeClauseGreen,
14803 eq: TerminalEqGreen,
14804 value: ExprGreen,
14805 semicolon: TerminalSemicolonGreen,
14806 ) -> ItemConstantGreen {
14807 let children = [
14808 attributes.0,
14809 visibility.0,
14810 const_kw.0,
14811 name.0,
14812 type_clause.0,
14813 eq.0,
14814 value.0,
14815 semicolon.0,
14816 ];
14817 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14818 ItemConstantGreen(
14819 Arc::new(GreenNode {
14820 kind: SyntaxKind::ItemConstant,
14821 details: GreenNodeDetails::Node { children: children.into(), width },
14822 })
14823 .intern(db),
14824 )
14825 }
14826}
14827impl ItemConstant {
14828 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14829 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
14830 }
14831 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14832 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
14833 }
14834 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
14835 TerminalConst::from_syntax_node(db, self.node.get_children(db)[2])
14836 }
14837 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14838 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
14839 }
14840 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
14841 TypeClause::from_syntax_node(db, self.node.get_children(db)[4])
14842 }
14843 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
14844 TerminalEq::from_syntax_node(db, self.node.get_children(db)[5])
14845 }
14846 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
14847 Expr::from_syntax_node(db, self.node.get_children(db)[6])
14848 }
14849 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
14850 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[7])
14851 }
14852}
14853#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14854pub struct ItemConstantPtr(pub SyntaxStablePtrId);
14855impl ItemConstantPtr {
14856 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14857 let ptr = self.0.lookup_intern(db);
14858 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14859 TerminalIdentifierGreen(key_fields[0])
14860 } else {
14861 panic!("Unexpected key field query on root.");
14862 }
14863 }
14864}
14865impl TypedStablePtr for ItemConstantPtr {
14866 type SyntaxNode = ItemConstant;
14867 fn untyped(&self) -> SyntaxStablePtrId {
14868 self.0
14869 }
14870 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemConstant {
14871 ItemConstant::from_syntax_node(db, self.0.lookup(db))
14872 }
14873}
14874impl From<ItemConstantPtr> for SyntaxStablePtrId {
14875 fn from(ptr: ItemConstantPtr) -> Self {
14876 ptr.untyped()
14877 }
14878}
14879#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14880pub struct ItemConstantGreen(pub GreenId);
14881impl TypedSyntaxNode for ItemConstant {
14882 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemConstant);
14883 type StablePtr = ItemConstantPtr;
14884 type Green = ItemConstantGreen;
14885 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14886 ItemConstantGreen(
14887 Arc::new(GreenNode {
14888 kind: SyntaxKind::ItemConstant,
14889 details: GreenNodeDetails::Node {
14890 children: [
14891 AttributeList::missing(db).0,
14892 Visibility::missing(db).0,
14893 TerminalConst::missing(db).0,
14894 TerminalIdentifier::missing(db).0,
14895 TypeClause::missing(db).0,
14896 TerminalEq::missing(db).0,
14897 Expr::missing(db).0,
14898 TerminalSemicolon::missing(db).0,
14899 ]
14900 .into(),
14901 width: TextWidth::default(),
14902 },
14903 })
14904 .intern(db),
14905 )
14906 }
14907 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14908 let kind = node.kind(db);
14909 assert_eq!(
14910 kind,
14911 SyntaxKind::ItemConstant,
14912 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14913 kind,
14914 SyntaxKind::ItemConstant
14915 );
14916 Self { node }
14917 }
14918 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14919 let kind = node.kind(db);
14920 if kind == SyntaxKind::ItemConstant { Some(Self::from_syntax_node(db, node)) } else { None }
14921 }
14922 fn as_syntax_node(&self) -> SyntaxNode {
14923 self.node
14924 }
14925 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
14926 ItemConstantPtr(self.node.stable_ptr(db))
14927 }
14928}
14929#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14930pub struct FunctionWithBody {
14931 node: SyntaxNode,
14932}
14933impl FunctionWithBody {
14934 pub const INDEX_ATTRIBUTES: usize = 0;
14935 pub const INDEX_VISIBILITY: usize = 1;
14936 pub const INDEX_DECLARATION: usize = 2;
14937 pub const INDEX_BODY: usize = 3;
14938 pub fn new_green(
14939 db: &dyn SyntaxGroup,
14940 attributes: AttributeListGreen,
14941 visibility: VisibilityGreen,
14942 declaration: FunctionDeclarationGreen,
14943 body: ExprBlockGreen,
14944 ) -> FunctionWithBodyGreen {
14945 let children = [attributes.0, visibility.0, declaration.0, body.0];
14946 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
14947 FunctionWithBodyGreen(
14948 Arc::new(GreenNode {
14949 kind: SyntaxKind::FunctionWithBody,
14950 details: GreenNodeDetails::Node { children: children.into(), width },
14951 })
14952 .intern(db),
14953 )
14954 }
14955}
14956impl FunctionWithBody {
14957 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14958 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
14959 }
14960 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14961 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
14962 }
14963 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14964 FunctionDeclaration::from_syntax_node(db, self.node.get_children(db)[2])
14965 }
14966 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
14967 ExprBlock::from_syntax_node(db, self.node.get_children(db)[3])
14968 }
14969}
14970#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14971pub struct FunctionWithBodyPtr(pub SyntaxStablePtrId);
14972impl FunctionWithBodyPtr {
14973 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
14974 let ptr = self.0.lookup_intern(db);
14975 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14976 FunctionDeclarationGreen(key_fields[0])
14977 } else {
14978 panic!("Unexpected key field query on root.");
14979 }
14980 }
14981}
14982impl TypedStablePtr for FunctionWithBodyPtr {
14983 type SyntaxNode = FunctionWithBody;
14984 fn untyped(&self) -> SyntaxStablePtrId {
14985 self.0
14986 }
14987 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionWithBody {
14988 FunctionWithBody::from_syntax_node(db, self.0.lookup(db))
14989 }
14990}
14991impl From<FunctionWithBodyPtr> for SyntaxStablePtrId {
14992 fn from(ptr: FunctionWithBodyPtr) -> Self {
14993 ptr.untyped()
14994 }
14995}
14996#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14997pub struct FunctionWithBodyGreen(pub GreenId);
14998impl TypedSyntaxNode for FunctionWithBody {
14999 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionWithBody);
15000 type StablePtr = FunctionWithBodyPtr;
15001 type Green = FunctionWithBodyGreen;
15002 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15003 FunctionWithBodyGreen(
15004 Arc::new(GreenNode {
15005 kind: SyntaxKind::FunctionWithBody,
15006 details: GreenNodeDetails::Node {
15007 children: [
15008 AttributeList::missing(db).0,
15009 Visibility::missing(db).0,
15010 FunctionDeclaration::missing(db).0,
15011 ExprBlock::missing(db).0,
15012 ]
15013 .into(),
15014 width: TextWidth::default(),
15015 },
15016 })
15017 .intern(db),
15018 )
15019 }
15020 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15021 let kind = node.kind(db);
15022 assert_eq!(
15023 kind,
15024 SyntaxKind::FunctionWithBody,
15025 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15026 kind,
15027 SyntaxKind::FunctionWithBody
15028 );
15029 Self { node }
15030 }
15031 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15032 let kind = node.kind(db);
15033 if kind == SyntaxKind::FunctionWithBody {
15034 Some(Self::from_syntax_node(db, node))
15035 } else {
15036 None
15037 }
15038 }
15039 fn as_syntax_node(&self) -> SyntaxNode {
15040 self.node
15041 }
15042 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15043 FunctionWithBodyPtr(self.node.stable_ptr(db))
15044 }
15045}
15046#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15047pub struct ItemExternFunction {
15048 node: SyntaxNode,
15049}
15050impl ItemExternFunction {
15051 pub const INDEX_ATTRIBUTES: usize = 0;
15052 pub const INDEX_VISIBILITY: usize = 1;
15053 pub const INDEX_EXTERN_KW: usize = 2;
15054 pub const INDEX_DECLARATION: usize = 3;
15055 pub const INDEX_SEMICOLON: usize = 4;
15056 pub fn new_green(
15057 db: &dyn SyntaxGroup,
15058 attributes: AttributeListGreen,
15059 visibility: VisibilityGreen,
15060 extern_kw: TerminalExternGreen,
15061 declaration: FunctionDeclarationGreen,
15062 semicolon: TerminalSemicolonGreen,
15063 ) -> ItemExternFunctionGreen {
15064 let children = [attributes.0, visibility.0, extern_kw.0, declaration.0, semicolon.0];
15065 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15066 ItemExternFunctionGreen(
15067 Arc::new(GreenNode {
15068 kind: SyntaxKind::ItemExternFunction,
15069 details: GreenNodeDetails::Node { children: children.into(), width },
15070 })
15071 .intern(db),
15072 )
15073 }
15074}
15075impl ItemExternFunction {
15076 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15077 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
15078 }
15079 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15080 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
15081 }
15082 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15083 TerminalExtern::from_syntax_node(db, self.node.get_children(db)[2])
15084 }
15085 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
15086 FunctionDeclaration::from_syntax_node(db, self.node.get_children(db)[3])
15087 }
15088 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15089 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
15090 }
15091}
15092#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15093pub struct ItemExternFunctionPtr(pub SyntaxStablePtrId);
15094impl ItemExternFunctionPtr {
15095 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15096 let ptr = self.0.lookup_intern(db);
15097 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15098 FunctionDeclarationGreen(key_fields[0])
15099 } else {
15100 panic!("Unexpected key field query on root.");
15101 }
15102 }
15103}
15104impl TypedStablePtr for ItemExternFunctionPtr {
15105 type SyntaxNode = ItemExternFunction;
15106 fn untyped(&self) -> SyntaxStablePtrId {
15107 self.0
15108 }
15109 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternFunction {
15110 ItemExternFunction::from_syntax_node(db, self.0.lookup(db))
15111 }
15112}
15113impl From<ItemExternFunctionPtr> for SyntaxStablePtrId {
15114 fn from(ptr: ItemExternFunctionPtr) -> Self {
15115 ptr.untyped()
15116 }
15117}
15118#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15119pub struct ItemExternFunctionGreen(pub GreenId);
15120impl TypedSyntaxNode for ItemExternFunction {
15121 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternFunction);
15122 type StablePtr = ItemExternFunctionPtr;
15123 type Green = ItemExternFunctionGreen;
15124 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15125 ItemExternFunctionGreen(
15126 Arc::new(GreenNode {
15127 kind: SyntaxKind::ItemExternFunction,
15128 details: GreenNodeDetails::Node {
15129 children: [
15130 AttributeList::missing(db).0,
15131 Visibility::missing(db).0,
15132 TerminalExtern::missing(db).0,
15133 FunctionDeclaration::missing(db).0,
15134 TerminalSemicolon::missing(db).0,
15135 ]
15136 .into(),
15137 width: TextWidth::default(),
15138 },
15139 })
15140 .intern(db),
15141 )
15142 }
15143 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15144 let kind = node.kind(db);
15145 assert_eq!(
15146 kind,
15147 SyntaxKind::ItemExternFunction,
15148 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15149 kind,
15150 SyntaxKind::ItemExternFunction
15151 );
15152 Self { node }
15153 }
15154 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15155 let kind = node.kind(db);
15156 if kind == SyntaxKind::ItemExternFunction {
15157 Some(Self::from_syntax_node(db, node))
15158 } else {
15159 None
15160 }
15161 }
15162 fn as_syntax_node(&self) -> SyntaxNode {
15163 self.node
15164 }
15165 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15166 ItemExternFunctionPtr(self.node.stable_ptr(db))
15167 }
15168}
15169#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15170pub struct ItemExternType {
15171 node: SyntaxNode,
15172}
15173impl ItemExternType {
15174 pub const INDEX_ATTRIBUTES: usize = 0;
15175 pub const INDEX_VISIBILITY: usize = 1;
15176 pub const INDEX_EXTERN_KW: usize = 2;
15177 pub const INDEX_TYPE_KW: usize = 3;
15178 pub const INDEX_NAME: usize = 4;
15179 pub const INDEX_GENERIC_PARAMS: usize = 5;
15180 pub const INDEX_SEMICOLON: usize = 6;
15181 pub fn new_green(
15182 db: &dyn SyntaxGroup,
15183 attributes: AttributeListGreen,
15184 visibility: VisibilityGreen,
15185 extern_kw: TerminalExternGreen,
15186 type_kw: TerminalTypeGreen,
15187 name: TerminalIdentifierGreen,
15188 generic_params: OptionWrappedGenericParamListGreen,
15189 semicolon: TerminalSemicolonGreen,
15190 ) -> ItemExternTypeGreen {
15191 let children = [
15192 attributes.0,
15193 visibility.0,
15194 extern_kw.0,
15195 type_kw.0,
15196 name.0,
15197 generic_params.0,
15198 semicolon.0,
15199 ];
15200 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15201 ItemExternTypeGreen(
15202 Arc::new(GreenNode {
15203 kind: SyntaxKind::ItemExternType,
15204 details: GreenNodeDetails::Node { children: children.into(), width },
15205 })
15206 .intern(db),
15207 )
15208 }
15209}
15210impl ItemExternType {
15211 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15212 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
15213 }
15214 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15215 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
15216 }
15217 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15218 TerminalExtern::from_syntax_node(db, self.node.get_children(db)[2])
15219 }
15220 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
15221 TerminalType::from_syntax_node(db, self.node.get_children(db)[3])
15222 }
15223 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15224 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[4])
15225 }
15226 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15227 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[5])
15228 }
15229 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15230 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[6])
15231 }
15232}
15233#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15234pub struct ItemExternTypePtr(pub SyntaxStablePtrId);
15235impl ItemExternTypePtr {
15236 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15237 let ptr = self.0.lookup_intern(db);
15238 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15239 TerminalIdentifierGreen(key_fields[0])
15240 } else {
15241 panic!("Unexpected key field query on root.");
15242 }
15243 }
15244}
15245impl TypedStablePtr for ItemExternTypePtr {
15246 type SyntaxNode = ItemExternType;
15247 fn untyped(&self) -> SyntaxStablePtrId {
15248 self.0
15249 }
15250 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternType {
15251 ItemExternType::from_syntax_node(db, self.0.lookup(db))
15252 }
15253}
15254impl From<ItemExternTypePtr> for SyntaxStablePtrId {
15255 fn from(ptr: ItemExternTypePtr) -> Self {
15256 ptr.untyped()
15257 }
15258}
15259#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15260pub struct ItemExternTypeGreen(pub GreenId);
15261impl TypedSyntaxNode for ItemExternType {
15262 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternType);
15263 type StablePtr = ItemExternTypePtr;
15264 type Green = ItemExternTypeGreen;
15265 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15266 ItemExternTypeGreen(
15267 Arc::new(GreenNode {
15268 kind: SyntaxKind::ItemExternType,
15269 details: GreenNodeDetails::Node {
15270 children: [
15271 AttributeList::missing(db).0,
15272 Visibility::missing(db).0,
15273 TerminalExtern::missing(db).0,
15274 TerminalType::missing(db).0,
15275 TerminalIdentifier::missing(db).0,
15276 OptionWrappedGenericParamList::missing(db).0,
15277 TerminalSemicolon::missing(db).0,
15278 ]
15279 .into(),
15280 width: TextWidth::default(),
15281 },
15282 })
15283 .intern(db),
15284 )
15285 }
15286 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15287 let kind = node.kind(db);
15288 assert_eq!(
15289 kind,
15290 SyntaxKind::ItemExternType,
15291 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15292 kind,
15293 SyntaxKind::ItemExternType
15294 );
15295 Self { node }
15296 }
15297 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15298 let kind = node.kind(db);
15299 if kind == SyntaxKind::ItemExternType {
15300 Some(Self::from_syntax_node(db, node))
15301 } else {
15302 None
15303 }
15304 }
15305 fn as_syntax_node(&self) -> SyntaxNode {
15306 self.node
15307 }
15308 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15309 ItemExternTypePtr(self.node.stable_ptr(db))
15310 }
15311}
15312#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15313pub struct ItemTrait {
15314 node: SyntaxNode,
15315}
15316impl ItemTrait {
15317 pub const INDEX_ATTRIBUTES: usize = 0;
15318 pub const INDEX_VISIBILITY: usize = 1;
15319 pub const INDEX_TRAIT_KW: usize = 2;
15320 pub const INDEX_NAME: usize = 3;
15321 pub const INDEX_GENERIC_PARAMS: usize = 4;
15322 pub const INDEX_BODY: usize = 5;
15323 pub fn new_green(
15324 db: &dyn SyntaxGroup,
15325 attributes: AttributeListGreen,
15326 visibility: VisibilityGreen,
15327 trait_kw: TerminalTraitGreen,
15328 name: TerminalIdentifierGreen,
15329 generic_params: OptionWrappedGenericParamListGreen,
15330 body: MaybeTraitBodyGreen,
15331 ) -> ItemTraitGreen {
15332 let children = [attributes.0, visibility.0, trait_kw.0, name.0, generic_params.0, body.0];
15333 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15334 ItemTraitGreen(
15335 Arc::new(GreenNode {
15336 kind: SyntaxKind::ItemTrait,
15337 details: GreenNodeDetails::Node { children: children.into(), width },
15338 })
15339 .intern(db),
15340 )
15341 }
15342}
15343impl ItemTrait {
15344 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15345 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
15346 }
15347 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15348 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
15349 }
15350 pub fn trait_kw(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
15351 TerminalTrait::from_syntax_node(db, self.node.get_children(db)[2])
15352 }
15353 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15354 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
15355 }
15356 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15357 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
15358 }
15359 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15360 MaybeTraitBody::from_syntax_node(db, self.node.get_children(db)[5])
15361 }
15362}
15363#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15364pub struct ItemTraitPtr(pub SyntaxStablePtrId);
15365impl ItemTraitPtr {
15366 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15367 let ptr = self.0.lookup_intern(db);
15368 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15369 TerminalIdentifierGreen(key_fields[0])
15370 } else {
15371 panic!("Unexpected key field query on root.");
15372 }
15373 }
15374}
15375impl TypedStablePtr for ItemTraitPtr {
15376 type SyntaxNode = ItemTrait;
15377 fn untyped(&self) -> SyntaxStablePtrId {
15378 self.0
15379 }
15380 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTrait {
15381 ItemTrait::from_syntax_node(db, self.0.lookup(db))
15382 }
15383}
15384impl From<ItemTraitPtr> for SyntaxStablePtrId {
15385 fn from(ptr: ItemTraitPtr) -> Self {
15386 ptr.untyped()
15387 }
15388}
15389#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15390pub struct ItemTraitGreen(pub GreenId);
15391impl TypedSyntaxNode for ItemTrait {
15392 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTrait);
15393 type StablePtr = ItemTraitPtr;
15394 type Green = ItemTraitGreen;
15395 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15396 ItemTraitGreen(
15397 Arc::new(GreenNode {
15398 kind: SyntaxKind::ItemTrait,
15399 details: GreenNodeDetails::Node {
15400 children: [
15401 AttributeList::missing(db).0,
15402 Visibility::missing(db).0,
15403 TerminalTrait::missing(db).0,
15404 TerminalIdentifier::missing(db).0,
15405 OptionWrappedGenericParamList::missing(db).0,
15406 MaybeTraitBody::missing(db).0,
15407 ]
15408 .into(),
15409 width: TextWidth::default(),
15410 },
15411 })
15412 .intern(db),
15413 )
15414 }
15415 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15416 let kind = node.kind(db);
15417 assert_eq!(
15418 kind,
15419 SyntaxKind::ItemTrait,
15420 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15421 kind,
15422 SyntaxKind::ItemTrait
15423 );
15424 Self { node }
15425 }
15426 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15427 let kind = node.kind(db);
15428 if kind == SyntaxKind::ItemTrait { Some(Self::from_syntax_node(db, node)) } else { None }
15429 }
15430 fn as_syntax_node(&self) -> SyntaxNode {
15431 self.node
15432 }
15433 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15434 ItemTraitPtr(self.node.stable_ptr(db))
15435 }
15436}
15437#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15438pub enum MaybeTraitBody {
15439 Some(TraitBody),
15440 None(TerminalSemicolon),
15441}
15442#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15443pub struct MaybeTraitBodyPtr(pub SyntaxStablePtrId);
15444impl TypedStablePtr for MaybeTraitBodyPtr {
15445 type SyntaxNode = MaybeTraitBody;
15446 fn untyped(&self) -> SyntaxStablePtrId {
15447 self.0
15448 }
15449 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15450 MaybeTraitBody::from_syntax_node(db, self.0.lookup(db))
15451 }
15452}
15453impl From<MaybeTraitBodyPtr> for SyntaxStablePtrId {
15454 fn from(ptr: MaybeTraitBodyPtr) -> Self {
15455 ptr.untyped()
15456 }
15457}
15458impl From<TraitBodyPtr> for MaybeTraitBodyPtr {
15459 fn from(value: TraitBodyPtr) -> Self {
15460 Self(value.0)
15461 }
15462}
15463impl From<TerminalSemicolonPtr> for MaybeTraitBodyPtr {
15464 fn from(value: TerminalSemicolonPtr) -> Self {
15465 Self(value.0)
15466 }
15467}
15468impl From<TraitBodyGreen> for MaybeTraitBodyGreen {
15469 fn from(value: TraitBodyGreen) -> Self {
15470 Self(value.0)
15471 }
15472}
15473impl From<TerminalSemicolonGreen> for MaybeTraitBodyGreen {
15474 fn from(value: TerminalSemicolonGreen) -> Self {
15475 Self(value.0)
15476 }
15477}
15478#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15479pub struct MaybeTraitBodyGreen(pub GreenId);
15480impl TypedSyntaxNode for MaybeTraitBody {
15481 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15482 type StablePtr = MaybeTraitBodyPtr;
15483 type Green = MaybeTraitBodyGreen;
15484 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15485 panic!("No missing variant.");
15486 }
15487 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15488 let kind = node.kind(db);
15489 match kind {
15490 SyntaxKind::TraitBody => MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)),
15491 SyntaxKind::TerminalSemicolon => {
15492 MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node))
15493 }
15494 _ => {
15495 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeTraitBody")
15496 }
15497 }
15498 }
15499 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15500 let kind = node.kind(db);
15501 match kind {
15502 SyntaxKind::TraitBody => {
15503 Some(MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)))
15504 }
15505 SyntaxKind::TerminalSemicolon => {
15506 Some(MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node)))
15507 }
15508 _ => None,
15509 }
15510 }
15511 fn as_syntax_node(&self) -> SyntaxNode {
15512 match self {
15513 MaybeTraitBody::Some(x) => x.as_syntax_node(),
15514 MaybeTraitBody::None(x) => x.as_syntax_node(),
15515 }
15516 }
15517 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15518 MaybeTraitBodyPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
15519 }
15520}
15521impl MaybeTraitBody {
15522 pub fn is_variant(kind: SyntaxKind) -> bool {
15524 matches!(kind, SyntaxKind::TraitBody | SyntaxKind::TerminalSemicolon)
15525 }
15526}
15527#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15528pub struct TraitBody {
15529 node: SyntaxNode,
15530}
15531impl TraitBody {
15532 pub const INDEX_LBRACE: usize = 0;
15533 pub const INDEX_ITEMS: usize = 1;
15534 pub const INDEX_RBRACE: usize = 2;
15535 pub fn new_green(
15536 db: &dyn SyntaxGroup,
15537 lbrace: TerminalLBraceGreen,
15538 items: TraitItemListGreen,
15539 rbrace: TerminalRBraceGreen,
15540 ) -> TraitBodyGreen {
15541 let children = [lbrace.0, items.0, rbrace.0];
15542 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15543 TraitBodyGreen(
15544 Arc::new(GreenNode {
15545 kind: SyntaxKind::TraitBody,
15546 details: GreenNodeDetails::Node { children: children.into(), width },
15547 })
15548 .intern(db),
15549 )
15550 }
15551}
15552impl TraitBody {
15553 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
15554 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
15555 }
15556 pub fn items(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15557 TraitItemList::from_syntax_node(db, self.node.get_children(db)[1])
15558 }
15559 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
15560 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
15561 }
15562}
15563#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15564pub struct TraitBodyPtr(pub SyntaxStablePtrId);
15565impl TraitBodyPtr {}
15566impl TypedStablePtr for TraitBodyPtr {
15567 type SyntaxNode = TraitBody;
15568 fn untyped(&self) -> SyntaxStablePtrId {
15569 self.0
15570 }
15571 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitBody {
15572 TraitBody::from_syntax_node(db, self.0.lookup(db))
15573 }
15574}
15575impl From<TraitBodyPtr> for SyntaxStablePtrId {
15576 fn from(ptr: TraitBodyPtr) -> Self {
15577 ptr.untyped()
15578 }
15579}
15580#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15581pub struct TraitBodyGreen(pub GreenId);
15582impl TypedSyntaxNode for TraitBody {
15583 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitBody);
15584 type StablePtr = TraitBodyPtr;
15585 type Green = TraitBodyGreen;
15586 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15587 TraitBodyGreen(
15588 Arc::new(GreenNode {
15589 kind: SyntaxKind::TraitBody,
15590 details: GreenNodeDetails::Node {
15591 children: [
15592 TerminalLBrace::missing(db).0,
15593 TraitItemList::missing(db).0,
15594 TerminalRBrace::missing(db).0,
15595 ]
15596 .into(),
15597 width: TextWidth::default(),
15598 },
15599 })
15600 .intern(db),
15601 )
15602 }
15603 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15604 let kind = node.kind(db);
15605 assert_eq!(
15606 kind,
15607 SyntaxKind::TraitBody,
15608 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15609 kind,
15610 SyntaxKind::TraitBody
15611 );
15612 Self { node }
15613 }
15614 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15615 let kind = node.kind(db);
15616 if kind == SyntaxKind::TraitBody { Some(Self::from_syntax_node(db, node)) } else { None }
15617 }
15618 fn as_syntax_node(&self) -> SyntaxNode {
15619 self.node
15620 }
15621 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15622 TraitBodyPtr(self.node.stable_ptr(db))
15623 }
15624}
15625#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15626pub struct TraitItemList(ElementList<TraitItem, 1>);
15627impl Deref for TraitItemList {
15628 type Target = ElementList<TraitItem, 1>;
15629 fn deref(&self) -> &Self::Target {
15630 &self.0
15631 }
15632}
15633impl TraitItemList {
15634 pub fn new_green(db: &dyn SyntaxGroup, children: &[TraitItemGreen]) -> TraitItemListGreen {
15635 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
15636 TraitItemListGreen(
15637 Arc::new(GreenNode {
15638 kind: SyntaxKind::TraitItemList,
15639 details: GreenNodeDetails::Node {
15640 children: children.iter().map(|x| x.0).collect(),
15641 width,
15642 },
15643 })
15644 .intern(db),
15645 )
15646 }
15647}
15648#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15649pub struct TraitItemListPtr(pub SyntaxStablePtrId);
15650impl TypedStablePtr for TraitItemListPtr {
15651 type SyntaxNode = TraitItemList;
15652 fn untyped(&self) -> SyntaxStablePtrId {
15653 self.0
15654 }
15655 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15656 TraitItemList::from_syntax_node(db, self.0.lookup(db))
15657 }
15658}
15659impl From<TraitItemListPtr> for SyntaxStablePtrId {
15660 fn from(ptr: TraitItemListPtr) -> Self {
15661 ptr.untyped()
15662 }
15663}
15664#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15665pub struct TraitItemListGreen(pub GreenId);
15666impl TypedSyntaxNode for TraitItemList {
15667 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemList);
15668 type StablePtr = TraitItemListPtr;
15669 type Green = TraitItemListGreen;
15670 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15671 TraitItemListGreen(
15672 Arc::new(GreenNode {
15673 kind: SyntaxKind::TraitItemList,
15674 details: GreenNodeDetails::Node {
15675 children: [].into(),
15676 width: TextWidth::default(),
15677 },
15678 })
15679 .intern(db),
15680 )
15681 }
15682 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15683 Self(ElementList::new(node))
15684 }
15685 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15686 if node.kind(db) == SyntaxKind::TraitItemList {
15687 Some(Self(ElementList::new(node)))
15688 } else {
15689 None
15690 }
15691 }
15692 fn as_syntax_node(&self) -> SyntaxNode {
15693 self.node
15694 }
15695 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15696 TraitItemListPtr(self.node.stable_ptr(db))
15697 }
15698}
15699#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15700pub enum TraitItem {
15701 Function(TraitItemFunction),
15702 Type(TraitItemType),
15703 Constant(TraitItemConstant),
15704 Impl(TraitItemImpl),
15705 Missing(TraitItemMissing),
15706}
15707#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15708pub struct TraitItemPtr(pub SyntaxStablePtrId);
15709impl TypedStablePtr for TraitItemPtr {
15710 type SyntaxNode = TraitItem;
15711 fn untyped(&self) -> SyntaxStablePtrId {
15712 self.0
15713 }
15714 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItem {
15715 TraitItem::from_syntax_node(db, self.0.lookup(db))
15716 }
15717}
15718impl From<TraitItemPtr> for SyntaxStablePtrId {
15719 fn from(ptr: TraitItemPtr) -> Self {
15720 ptr.untyped()
15721 }
15722}
15723impl From<TraitItemFunctionPtr> for TraitItemPtr {
15724 fn from(value: TraitItemFunctionPtr) -> Self {
15725 Self(value.0)
15726 }
15727}
15728impl From<TraitItemTypePtr> for TraitItemPtr {
15729 fn from(value: TraitItemTypePtr) -> Self {
15730 Self(value.0)
15731 }
15732}
15733impl From<TraitItemConstantPtr> for TraitItemPtr {
15734 fn from(value: TraitItemConstantPtr) -> Self {
15735 Self(value.0)
15736 }
15737}
15738impl From<TraitItemImplPtr> for TraitItemPtr {
15739 fn from(value: TraitItemImplPtr) -> Self {
15740 Self(value.0)
15741 }
15742}
15743impl From<TraitItemMissingPtr> for TraitItemPtr {
15744 fn from(value: TraitItemMissingPtr) -> Self {
15745 Self(value.0)
15746 }
15747}
15748impl From<TraitItemFunctionGreen> for TraitItemGreen {
15749 fn from(value: TraitItemFunctionGreen) -> Self {
15750 Self(value.0)
15751 }
15752}
15753impl From<TraitItemTypeGreen> for TraitItemGreen {
15754 fn from(value: TraitItemTypeGreen) -> Self {
15755 Self(value.0)
15756 }
15757}
15758impl From<TraitItemConstantGreen> for TraitItemGreen {
15759 fn from(value: TraitItemConstantGreen) -> Self {
15760 Self(value.0)
15761 }
15762}
15763impl From<TraitItemImplGreen> for TraitItemGreen {
15764 fn from(value: TraitItemImplGreen) -> Self {
15765 Self(value.0)
15766 }
15767}
15768impl From<TraitItemMissingGreen> for TraitItemGreen {
15769 fn from(value: TraitItemMissingGreen) -> Self {
15770 Self(value.0)
15771 }
15772}
15773#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15774pub struct TraitItemGreen(pub GreenId);
15775impl TypedSyntaxNode for TraitItem {
15776 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15777 type StablePtr = TraitItemPtr;
15778 type Green = TraitItemGreen;
15779 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15780 TraitItemGreen(TraitItemMissing::missing(db).0)
15781 }
15782 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15783 let kind = node.kind(db);
15784 match kind {
15785 SyntaxKind::TraitItemFunction => {
15786 TraitItem::Function(TraitItemFunction::from_syntax_node(db, node))
15787 }
15788 SyntaxKind::TraitItemType => TraitItem::Type(TraitItemType::from_syntax_node(db, node)),
15789 SyntaxKind::TraitItemConstant => {
15790 TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node))
15791 }
15792 SyntaxKind::TraitItemImpl => TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)),
15793 SyntaxKind::TraitItemMissing => {
15794 TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node))
15795 }
15796 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TraitItem"),
15797 }
15798 }
15799 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15800 let kind = node.kind(db);
15801 match kind {
15802 SyntaxKind::TraitItemFunction => {
15803 Some(TraitItem::Function(TraitItemFunction::from_syntax_node(db, node)))
15804 }
15805 SyntaxKind::TraitItemType => {
15806 Some(TraitItem::Type(TraitItemType::from_syntax_node(db, node)))
15807 }
15808 SyntaxKind::TraitItemConstant => {
15809 Some(TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node)))
15810 }
15811 SyntaxKind::TraitItemImpl => {
15812 Some(TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)))
15813 }
15814 SyntaxKind::TraitItemMissing => {
15815 Some(TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node)))
15816 }
15817 _ => None,
15818 }
15819 }
15820 fn as_syntax_node(&self) -> SyntaxNode {
15821 match self {
15822 TraitItem::Function(x) => x.as_syntax_node(),
15823 TraitItem::Type(x) => x.as_syntax_node(),
15824 TraitItem::Constant(x) => x.as_syntax_node(),
15825 TraitItem::Impl(x) => x.as_syntax_node(),
15826 TraitItem::Missing(x) => x.as_syntax_node(),
15827 }
15828 }
15829 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15830 TraitItemPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
15831 }
15832}
15833impl TraitItem {
15834 pub fn is_variant(kind: SyntaxKind) -> bool {
15836 matches!(
15837 kind,
15838 SyntaxKind::TraitItemFunction
15839 | SyntaxKind::TraitItemType
15840 | SyntaxKind::TraitItemConstant
15841 | SyntaxKind::TraitItemImpl
15842 | SyntaxKind::TraitItemMissing
15843 )
15844 }
15845}
15846#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15847pub struct TraitItemMissing {
15848 node: SyntaxNode,
15849}
15850impl TraitItemMissing {
15851 pub fn new_green(db: &dyn SyntaxGroup) -> TraitItemMissingGreen {
15852 let children = [];
15853 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15854 TraitItemMissingGreen(
15855 Arc::new(GreenNode {
15856 kind: SyntaxKind::TraitItemMissing,
15857 details: GreenNodeDetails::Node { children: children.into(), width },
15858 })
15859 .intern(db),
15860 )
15861 }
15862}
15863impl TraitItemMissing {}
15864#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15865pub struct TraitItemMissingPtr(pub SyntaxStablePtrId);
15866impl TraitItemMissingPtr {}
15867impl TypedStablePtr for TraitItemMissingPtr {
15868 type SyntaxNode = TraitItemMissing;
15869 fn untyped(&self) -> SyntaxStablePtrId {
15870 self.0
15871 }
15872 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemMissing {
15873 TraitItemMissing::from_syntax_node(db, self.0.lookup(db))
15874 }
15875}
15876impl From<TraitItemMissingPtr> for SyntaxStablePtrId {
15877 fn from(ptr: TraitItemMissingPtr) -> Self {
15878 ptr.untyped()
15879 }
15880}
15881#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15882pub struct TraitItemMissingGreen(pub GreenId);
15883impl TypedSyntaxNode for TraitItemMissing {
15884 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemMissing);
15885 type StablePtr = TraitItemMissingPtr;
15886 type Green = TraitItemMissingGreen;
15887 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15888 TraitItemMissingGreen(
15889 Arc::new(GreenNode {
15890 kind: SyntaxKind::TraitItemMissing,
15891 details: GreenNodeDetails::Node {
15892 children: [].into(),
15893 width: TextWidth::default(),
15894 },
15895 })
15896 .intern(db),
15897 )
15898 }
15899 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15900 let kind = node.kind(db);
15901 assert_eq!(
15902 kind,
15903 SyntaxKind::TraitItemMissing,
15904 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15905 kind,
15906 SyntaxKind::TraitItemMissing
15907 );
15908 Self { node }
15909 }
15910 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15911 let kind = node.kind(db);
15912 if kind == SyntaxKind::TraitItemMissing {
15913 Some(Self::from_syntax_node(db, node))
15914 } else {
15915 None
15916 }
15917 }
15918 fn as_syntax_node(&self) -> SyntaxNode {
15919 self.node
15920 }
15921 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
15922 TraitItemMissingPtr(self.node.stable_ptr(db))
15923 }
15924}
15925#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15926pub struct TraitItemFunction {
15927 node: SyntaxNode,
15928}
15929impl TraitItemFunction {
15930 pub const INDEX_ATTRIBUTES: usize = 0;
15931 pub const INDEX_DECLARATION: usize = 1;
15932 pub const INDEX_BODY: usize = 2;
15933 pub fn new_green(
15934 db: &dyn SyntaxGroup,
15935 attributes: AttributeListGreen,
15936 declaration: FunctionDeclarationGreen,
15937 body: MaybeTraitFunctionBodyGreen,
15938 ) -> TraitItemFunctionGreen {
15939 let children = [attributes.0, declaration.0, body.0];
15940 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
15941 TraitItemFunctionGreen(
15942 Arc::new(GreenNode {
15943 kind: SyntaxKind::TraitItemFunction,
15944 details: GreenNodeDetails::Node { children: children.into(), width },
15945 })
15946 .intern(db),
15947 )
15948 }
15949}
15950impl TraitItemFunction {
15951 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15952 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
15953 }
15954 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
15955 FunctionDeclaration::from_syntax_node(db, self.node.get_children(db)[1])
15956 }
15957 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
15958 MaybeTraitFunctionBody::from_syntax_node(db, self.node.get_children(db)[2])
15959 }
15960}
15961#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15962pub struct TraitItemFunctionPtr(pub SyntaxStablePtrId);
15963impl TraitItemFunctionPtr {
15964 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15965 let ptr = self.0.lookup_intern(db);
15966 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15967 FunctionDeclarationGreen(key_fields[0])
15968 } else {
15969 panic!("Unexpected key field query on root.");
15970 }
15971 }
15972}
15973impl TypedStablePtr for TraitItemFunctionPtr {
15974 type SyntaxNode = TraitItemFunction;
15975 fn untyped(&self) -> SyntaxStablePtrId {
15976 self.0
15977 }
15978 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemFunction {
15979 TraitItemFunction::from_syntax_node(db, self.0.lookup(db))
15980 }
15981}
15982impl From<TraitItemFunctionPtr> for SyntaxStablePtrId {
15983 fn from(ptr: TraitItemFunctionPtr) -> Self {
15984 ptr.untyped()
15985 }
15986}
15987#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15988pub struct TraitItemFunctionGreen(pub GreenId);
15989impl TypedSyntaxNode for TraitItemFunction {
15990 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemFunction);
15991 type StablePtr = TraitItemFunctionPtr;
15992 type Green = TraitItemFunctionGreen;
15993 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15994 TraitItemFunctionGreen(
15995 Arc::new(GreenNode {
15996 kind: SyntaxKind::TraitItemFunction,
15997 details: GreenNodeDetails::Node {
15998 children: [
15999 AttributeList::missing(db).0,
16000 FunctionDeclaration::missing(db).0,
16001 MaybeTraitFunctionBody::missing(db).0,
16002 ]
16003 .into(),
16004 width: TextWidth::default(),
16005 },
16006 })
16007 .intern(db),
16008 )
16009 }
16010 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16011 let kind = node.kind(db);
16012 assert_eq!(
16013 kind,
16014 SyntaxKind::TraitItemFunction,
16015 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16016 kind,
16017 SyntaxKind::TraitItemFunction
16018 );
16019 Self { node }
16020 }
16021 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16022 let kind = node.kind(db);
16023 if kind == SyntaxKind::TraitItemFunction {
16024 Some(Self::from_syntax_node(db, node))
16025 } else {
16026 None
16027 }
16028 }
16029 fn as_syntax_node(&self) -> SyntaxNode {
16030 self.node
16031 }
16032 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16033 TraitItemFunctionPtr(self.node.stable_ptr(db))
16034 }
16035}
16036#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16037pub struct TraitItemType {
16038 node: SyntaxNode,
16039}
16040impl TraitItemType {
16041 pub const INDEX_ATTRIBUTES: usize = 0;
16042 pub const INDEX_TYPE_KW: usize = 1;
16043 pub const INDEX_NAME: usize = 2;
16044 pub const INDEX_GENERIC_PARAMS: usize = 3;
16045 pub const INDEX_SEMICOLON: usize = 4;
16046 pub fn new_green(
16047 db: &dyn SyntaxGroup,
16048 attributes: AttributeListGreen,
16049 type_kw: TerminalTypeGreen,
16050 name: TerminalIdentifierGreen,
16051 generic_params: OptionWrappedGenericParamListGreen,
16052 semicolon: TerminalSemicolonGreen,
16053 ) -> TraitItemTypeGreen {
16054 let children = [attributes.0, type_kw.0, name.0, generic_params.0, semicolon.0];
16055 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16056 TraitItemTypeGreen(
16057 Arc::new(GreenNode {
16058 kind: SyntaxKind::TraitItemType,
16059 details: GreenNodeDetails::Node { children: children.into(), width },
16060 })
16061 .intern(db),
16062 )
16063 }
16064}
16065impl TraitItemType {
16066 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16067 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
16068 }
16069 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
16070 TerminalType::from_syntax_node(db, self.node.get_children(db)[1])
16071 }
16072 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16073 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
16074 }
16075 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16076 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[3])
16077 }
16078 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16079 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
16080 }
16081}
16082#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16083pub struct TraitItemTypePtr(pub SyntaxStablePtrId);
16084impl TraitItemTypePtr {
16085 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16086 let ptr = self.0.lookup_intern(db);
16087 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16088 TerminalIdentifierGreen(key_fields[0])
16089 } else {
16090 panic!("Unexpected key field query on root.");
16091 }
16092 }
16093}
16094impl TypedStablePtr for TraitItemTypePtr {
16095 type SyntaxNode = TraitItemType;
16096 fn untyped(&self) -> SyntaxStablePtrId {
16097 self.0
16098 }
16099 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemType {
16100 TraitItemType::from_syntax_node(db, self.0.lookup(db))
16101 }
16102}
16103impl From<TraitItemTypePtr> for SyntaxStablePtrId {
16104 fn from(ptr: TraitItemTypePtr) -> Self {
16105 ptr.untyped()
16106 }
16107}
16108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16109pub struct TraitItemTypeGreen(pub GreenId);
16110impl TypedSyntaxNode for TraitItemType {
16111 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemType);
16112 type StablePtr = TraitItemTypePtr;
16113 type Green = TraitItemTypeGreen;
16114 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16115 TraitItemTypeGreen(
16116 Arc::new(GreenNode {
16117 kind: SyntaxKind::TraitItemType,
16118 details: GreenNodeDetails::Node {
16119 children: [
16120 AttributeList::missing(db).0,
16121 TerminalType::missing(db).0,
16122 TerminalIdentifier::missing(db).0,
16123 OptionWrappedGenericParamList::missing(db).0,
16124 TerminalSemicolon::missing(db).0,
16125 ]
16126 .into(),
16127 width: TextWidth::default(),
16128 },
16129 })
16130 .intern(db),
16131 )
16132 }
16133 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16134 let kind = node.kind(db);
16135 assert_eq!(
16136 kind,
16137 SyntaxKind::TraitItemType,
16138 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16139 kind,
16140 SyntaxKind::TraitItemType
16141 );
16142 Self { node }
16143 }
16144 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16145 let kind = node.kind(db);
16146 if kind == SyntaxKind::TraitItemType {
16147 Some(Self::from_syntax_node(db, node))
16148 } else {
16149 None
16150 }
16151 }
16152 fn as_syntax_node(&self) -> SyntaxNode {
16153 self.node
16154 }
16155 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16156 TraitItemTypePtr(self.node.stable_ptr(db))
16157 }
16158}
16159#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16160pub struct TraitItemConstant {
16161 node: SyntaxNode,
16162}
16163impl TraitItemConstant {
16164 pub const INDEX_ATTRIBUTES: usize = 0;
16165 pub const INDEX_CONST_KW: usize = 1;
16166 pub const INDEX_NAME: usize = 2;
16167 pub const INDEX_TYPE_CLAUSE: usize = 3;
16168 pub const INDEX_SEMICOLON: usize = 4;
16169 pub fn new_green(
16170 db: &dyn SyntaxGroup,
16171 attributes: AttributeListGreen,
16172 const_kw: TerminalConstGreen,
16173 name: TerminalIdentifierGreen,
16174 type_clause: TypeClauseGreen,
16175 semicolon: TerminalSemicolonGreen,
16176 ) -> TraitItemConstantGreen {
16177 let children = [attributes.0, const_kw.0, name.0, type_clause.0, semicolon.0];
16178 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16179 TraitItemConstantGreen(
16180 Arc::new(GreenNode {
16181 kind: SyntaxKind::TraitItemConstant,
16182 details: GreenNodeDetails::Node { children: children.into(), width },
16183 })
16184 .intern(db),
16185 )
16186 }
16187}
16188impl TraitItemConstant {
16189 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16190 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
16191 }
16192 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
16193 TerminalConst::from_syntax_node(db, self.node.get_children(db)[1])
16194 }
16195 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16196 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
16197 }
16198 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
16199 TypeClause::from_syntax_node(db, self.node.get_children(db)[3])
16200 }
16201 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16202 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
16203 }
16204}
16205#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16206pub struct TraitItemConstantPtr(pub SyntaxStablePtrId);
16207impl TraitItemConstantPtr {
16208 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16209 let ptr = self.0.lookup_intern(db);
16210 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16211 TerminalIdentifierGreen(key_fields[0])
16212 } else {
16213 panic!("Unexpected key field query on root.");
16214 }
16215 }
16216}
16217impl TypedStablePtr for TraitItemConstantPtr {
16218 type SyntaxNode = TraitItemConstant;
16219 fn untyped(&self) -> SyntaxStablePtrId {
16220 self.0
16221 }
16222 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemConstant {
16223 TraitItemConstant::from_syntax_node(db, self.0.lookup(db))
16224 }
16225}
16226impl From<TraitItemConstantPtr> for SyntaxStablePtrId {
16227 fn from(ptr: TraitItemConstantPtr) -> Self {
16228 ptr.untyped()
16229 }
16230}
16231#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16232pub struct TraitItemConstantGreen(pub GreenId);
16233impl TypedSyntaxNode for TraitItemConstant {
16234 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemConstant);
16235 type StablePtr = TraitItemConstantPtr;
16236 type Green = TraitItemConstantGreen;
16237 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16238 TraitItemConstantGreen(
16239 Arc::new(GreenNode {
16240 kind: SyntaxKind::TraitItemConstant,
16241 details: GreenNodeDetails::Node {
16242 children: [
16243 AttributeList::missing(db).0,
16244 TerminalConst::missing(db).0,
16245 TerminalIdentifier::missing(db).0,
16246 TypeClause::missing(db).0,
16247 TerminalSemicolon::missing(db).0,
16248 ]
16249 .into(),
16250 width: TextWidth::default(),
16251 },
16252 })
16253 .intern(db),
16254 )
16255 }
16256 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16257 let kind = node.kind(db);
16258 assert_eq!(
16259 kind,
16260 SyntaxKind::TraitItemConstant,
16261 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16262 kind,
16263 SyntaxKind::TraitItemConstant
16264 );
16265 Self { node }
16266 }
16267 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16268 let kind = node.kind(db);
16269 if kind == SyntaxKind::TraitItemConstant {
16270 Some(Self::from_syntax_node(db, node))
16271 } else {
16272 None
16273 }
16274 }
16275 fn as_syntax_node(&self) -> SyntaxNode {
16276 self.node
16277 }
16278 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16279 TraitItemConstantPtr(self.node.stable_ptr(db))
16280 }
16281}
16282#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16283pub struct TraitItemImpl {
16284 node: SyntaxNode,
16285}
16286impl TraitItemImpl {
16287 pub const INDEX_ATTRIBUTES: usize = 0;
16288 pub const INDEX_IMPL_KW: usize = 1;
16289 pub const INDEX_NAME: usize = 2;
16290 pub const INDEX_COLON: usize = 3;
16291 pub const INDEX_TRAIT_PATH: usize = 4;
16292 pub const INDEX_SEMICOLON: usize = 5;
16293 pub fn new_green(
16294 db: &dyn SyntaxGroup,
16295 attributes: AttributeListGreen,
16296 impl_kw: TerminalImplGreen,
16297 name: TerminalIdentifierGreen,
16298 colon: TerminalColonGreen,
16299 trait_path: ExprPathGreen,
16300 semicolon: TerminalSemicolonGreen,
16301 ) -> TraitItemImplGreen {
16302 let children = [attributes.0, impl_kw.0, name.0, colon.0, trait_path.0, semicolon.0];
16303 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16304 TraitItemImplGreen(
16305 Arc::new(GreenNode {
16306 kind: SyntaxKind::TraitItemImpl,
16307 details: GreenNodeDetails::Node { children: children.into(), width },
16308 })
16309 .intern(db),
16310 )
16311 }
16312}
16313impl TraitItemImpl {
16314 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16315 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
16316 }
16317 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16318 TerminalImpl::from_syntax_node(db, self.node.get_children(db)[1])
16319 }
16320 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16321 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[2])
16322 }
16323 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
16324 TerminalColon::from_syntax_node(db, self.node.get_children(db)[3])
16325 }
16326 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16327 ExprPath::from_syntax_node(db, self.node.get_children(db)[4])
16328 }
16329 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16330 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[5])
16331 }
16332}
16333#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16334pub struct TraitItemImplPtr(pub SyntaxStablePtrId);
16335impl TraitItemImplPtr {
16336 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16337 let ptr = self.0.lookup_intern(db);
16338 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16339 TerminalIdentifierGreen(key_fields[0])
16340 } else {
16341 panic!("Unexpected key field query on root.");
16342 }
16343 }
16344}
16345impl TypedStablePtr for TraitItemImplPtr {
16346 type SyntaxNode = TraitItemImpl;
16347 fn untyped(&self) -> SyntaxStablePtrId {
16348 self.0
16349 }
16350 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemImpl {
16351 TraitItemImpl::from_syntax_node(db, self.0.lookup(db))
16352 }
16353}
16354impl From<TraitItemImplPtr> for SyntaxStablePtrId {
16355 fn from(ptr: TraitItemImplPtr) -> Self {
16356 ptr.untyped()
16357 }
16358}
16359#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16360pub struct TraitItemImplGreen(pub GreenId);
16361impl TypedSyntaxNode for TraitItemImpl {
16362 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemImpl);
16363 type StablePtr = TraitItemImplPtr;
16364 type Green = TraitItemImplGreen;
16365 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16366 TraitItemImplGreen(
16367 Arc::new(GreenNode {
16368 kind: SyntaxKind::TraitItemImpl,
16369 details: GreenNodeDetails::Node {
16370 children: [
16371 AttributeList::missing(db).0,
16372 TerminalImpl::missing(db).0,
16373 TerminalIdentifier::missing(db).0,
16374 TerminalColon::missing(db).0,
16375 ExprPath::missing(db).0,
16376 TerminalSemicolon::missing(db).0,
16377 ]
16378 .into(),
16379 width: TextWidth::default(),
16380 },
16381 })
16382 .intern(db),
16383 )
16384 }
16385 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16386 let kind = node.kind(db);
16387 assert_eq!(
16388 kind,
16389 SyntaxKind::TraitItemImpl,
16390 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16391 kind,
16392 SyntaxKind::TraitItemImpl
16393 );
16394 Self { node }
16395 }
16396 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16397 let kind = node.kind(db);
16398 if kind == SyntaxKind::TraitItemImpl {
16399 Some(Self::from_syntax_node(db, node))
16400 } else {
16401 None
16402 }
16403 }
16404 fn as_syntax_node(&self) -> SyntaxNode {
16405 self.node
16406 }
16407 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16408 TraitItemImplPtr(self.node.stable_ptr(db))
16409 }
16410}
16411#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16412pub enum MaybeTraitFunctionBody {
16413 Some(ExprBlock),
16414 None(TerminalSemicolon),
16415}
16416#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16417pub struct MaybeTraitFunctionBodyPtr(pub SyntaxStablePtrId);
16418impl TypedStablePtr for MaybeTraitFunctionBodyPtr {
16419 type SyntaxNode = MaybeTraitFunctionBody;
16420 fn untyped(&self) -> SyntaxStablePtrId {
16421 self.0
16422 }
16423 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
16424 MaybeTraitFunctionBody::from_syntax_node(db, self.0.lookup(db))
16425 }
16426}
16427impl From<MaybeTraitFunctionBodyPtr> for SyntaxStablePtrId {
16428 fn from(ptr: MaybeTraitFunctionBodyPtr) -> Self {
16429 ptr.untyped()
16430 }
16431}
16432impl From<ExprBlockPtr> for MaybeTraitFunctionBodyPtr {
16433 fn from(value: ExprBlockPtr) -> Self {
16434 Self(value.0)
16435 }
16436}
16437impl From<TerminalSemicolonPtr> for MaybeTraitFunctionBodyPtr {
16438 fn from(value: TerminalSemicolonPtr) -> Self {
16439 Self(value.0)
16440 }
16441}
16442impl From<ExprBlockGreen> for MaybeTraitFunctionBodyGreen {
16443 fn from(value: ExprBlockGreen) -> Self {
16444 Self(value.0)
16445 }
16446}
16447impl From<TerminalSemicolonGreen> for MaybeTraitFunctionBodyGreen {
16448 fn from(value: TerminalSemicolonGreen) -> Self {
16449 Self(value.0)
16450 }
16451}
16452#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16453pub struct MaybeTraitFunctionBodyGreen(pub GreenId);
16454impl TypedSyntaxNode for MaybeTraitFunctionBody {
16455 const OPTIONAL_KIND: Option<SyntaxKind> = None;
16456 type StablePtr = MaybeTraitFunctionBodyPtr;
16457 type Green = MaybeTraitFunctionBodyGreen;
16458 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16459 panic!("No missing variant.");
16460 }
16461 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16462 let kind = node.kind(db);
16463 match kind {
16464 SyntaxKind::ExprBlock => {
16465 MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node))
16466 }
16467 SyntaxKind::TerminalSemicolon => {
16468 MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node))
16469 }
16470 _ => panic!(
16471 "Unexpected syntax kind {:?} when constructing {}.",
16472 kind, "MaybeTraitFunctionBody"
16473 ),
16474 }
16475 }
16476 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16477 let kind = node.kind(db);
16478 match kind {
16479 SyntaxKind::ExprBlock => {
16480 Some(MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node)))
16481 }
16482 SyntaxKind::TerminalSemicolon => {
16483 Some(MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node)))
16484 }
16485 _ => None,
16486 }
16487 }
16488 fn as_syntax_node(&self) -> SyntaxNode {
16489 match self {
16490 MaybeTraitFunctionBody::Some(x) => x.as_syntax_node(),
16491 MaybeTraitFunctionBody::None(x) => x.as_syntax_node(),
16492 }
16493 }
16494 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16495 MaybeTraitFunctionBodyPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
16496 }
16497}
16498impl MaybeTraitFunctionBody {
16499 pub fn is_variant(kind: SyntaxKind) -> bool {
16501 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::TerminalSemicolon)
16502 }
16503}
16504#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16505pub struct ItemImpl {
16506 node: SyntaxNode,
16507}
16508impl ItemImpl {
16509 pub const INDEX_ATTRIBUTES: usize = 0;
16510 pub const INDEX_VISIBILITY: usize = 1;
16511 pub const INDEX_IMPL_KW: usize = 2;
16512 pub const INDEX_NAME: usize = 3;
16513 pub const INDEX_GENERIC_PARAMS: usize = 4;
16514 pub const INDEX_OF_KW: usize = 5;
16515 pub const INDEX_TRAIT_PATH: usize = 6;
16516 pub const INDEX_BODY: usize = 7;
16517 pub fn new_green(
16518 db: &dyn SyntaxGroup,
16519 attributes: AttributeListGreen,
16520 visibility: VisibilityGreen,
16521 impl_kw: TerminalImplGreen,
16522 name: TerminalIdentifierGreen,
16523 generic_params: OptionWrappedGenericParamListGreen,
16524 of_kw: TerminalOfGreen,
16525 trait_path: ExprPathGreen,
16526 body: MaybeImplBodyGreen,
16527 ) -> ItemImplGreen {
16528 let children = [
16529 attributes.0,
16530 visibility.0,
16531 impl_kw.0,
16532 name.0,
16533 generic_params.0,
16534 of_kw.0,
16535 trait_path.0,
16536 body.0,
16537 ];
16538 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16539 ItemImplGreen(
16540 Arc::new(GreenNode {
16541 kind: SyntaxKind::ItemImpl,
16542 details: GreenNodeDetails::Node { children: children.into(), width },
16543 })
16544 .intern(db),
16545 )
16546 }
16547}
16548impl ItemImpl {
16549 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16550 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
16551 }
16552 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
16553 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
16554 }
16555 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16556 TerminalImpl::from_syntax_node(db, self.node.get_children(db)[2])
16557 }
16558 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16559 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
16560 }
16561 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16562 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
16563 }
16564 pub fn of_kw(&self, db: &dyn SyntaxGroup) -> TerminalOf {
16565 TerminalOf::from_syntax_node(db, self.node.get_children(db)[5])
16566 }
16567 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16568 ExprPath::from_syntax_node(db, self.node.get_children(db)[6])
16569 }
16570 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16571 MaybeImplBody::from_syntax_node(db, self.node.get_children(db)[7])
16572 }
16573}
16574#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16575pub struct ItemImplPtr(pub SyntaxStablePtrId);
16576impl ItemImplPtr {
16577 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16578 let ptr = self.0.lookup_intern(db);
16579 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16580 TerminalIdentifierGreen(key_fields[0])
16581 } else {
16582 panic!("Unexpected key field query on root.");
16583 }
16584 }
16585}
16586impl TypedStablePtr for ItemImplPtr {
16587 type SyntaxNode = ItemImpl;
16588 fn untyped(&self) -> SyntaxStablePtrId {
16589 self.0
16590 }
16591 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImpl {
16592 ItemImpl::from_syntax_node(db, self.0.lookup(db))
16593 }
16594}
16595impl From<ItemImplPtr> for SyntaxStablePtrId {
16596 fn from(ptr: ItemImplPtr) -> Self {
16597 ptr.untyped()
16598 }
16599}
16600#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16601pub struct ItemImplGreen(pub GreenId);
16602impl TypedSyntaxNode for ItemImpl {
16603 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImpl);
16604 type StablePtr = ItemImplPtr;
16605 type Green = ItemImplGreen;
16606 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16607 ItemImplGreen(
16608 Arc::new(GreenNode {
16609 kind: SyntaxKind::ItemImpl,
16610 details: GreenNodeDetails::Node {
16611 children: [
16612 AttributeList::missing(db).0,
16613 Visibility::missing(db).0,
16614 TerminalImpl::missing(db).0,
16615 TerminalIdentifier::missing(db).0,
16616 OptionWrappedGenericParamList::missing(db).0,
16617 TerminalOf::missing(db).0,
16618 ExprPath::missing(db).0,
16619 MaybeImplBody::missing(db).0,
16620 ]
16621 .into(),
16622 width: TextWidth::default(),
16623 },
16624 })
16625 .intern(db),
16626 )
16627 }
16628 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16629 let kind = node.kind(db);
16630 assert_eq!(
16631 kind,
16632 SyntaxKind::ItemImpl,
16633 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16634 kind,
16635 SyntaxKind::ItemImpl
16636 );
16637 Self { node }
16638 }
16639 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16640 let kind = node.kind(db);
16641 if kind == SyntaxKind::ItemImpl { Some(Self::from_syntax_node(db, node)) } else { None }
16642 }
16643 fn as_syntax_node(&self) -> SyntaxNode {
16644 self.node
16645 }
16646 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16647 ItemImplPtr(self.node.stable_ptr(db))
16648 }
16649}
16650#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16651pub struct ItemHeaderDoc {
16652 node: SyntaxNode,
16653}
16654impl ItemHeaderDoc {
16655 pub const INDEX_EMPTY: usize = 0;
16656 pub fn new_green(db: &dyn SyntaxGroup, empty: TerminalEmptyGreen) -> ItemHeaderDocGreen {
16657 let children = [empty.0];
16658 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16659 ItemHeaderDocGreen(
16660 Arc::new(GreenNode {
16661 kind: SyntaxKind::ItemHeaderDoc,
16662 details: GreenNodeDetails::Node { children: children.into(), width },
16663 })
16664 .intern(db),
16665 )
16666 }
16667}
16668impl ItemHeaderDoc {
16669 pub fn empty(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
16670 TerminalEmpty::from_syntax_node(db, self.node.get_children(db)[0])
16671 }
16672}
16673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16674pub struct ItemHeaderDocPtr(pub SyntaxStablePtrId);
16675impl ItemHeaderDocPtr {}
16676impl TypedStablePtr for ItemHeaderDocPtr {
16677 type SyntaxNode = ItemHeaderDoc;
16678 fn untyped(&self) -> SyntaxStablePtrId {
16679 self.0
16680 }
16681 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemHeaderDoc {
16682 ItemHeaderDoc::from_syntax_node(db, self.0.lookup(db))
16683 }
16684}
16685impl From<ItemHeaderDocPtr> for SyntaxStablePtrId {
16686 fn from(ptr: ItemHeaderDocPtr) -> Self {
16687 ptr.untyped()
16688 }
16689}
16690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16691pub struct ItemHeaderDocGreen(pub GreenId);
16692impl TypedSyntaxNode for ItemHeaderDoc {
16693 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemHeaderDoc);
16694 type StablePtr = ItemHeaderDocPtr;
16695 type Green = ItemHeaderDocGreen;
16696 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16697 ItemHeaderDocGreen(
16698 Arc::new(GreenNode {
16699 kind: SyntaxKind::ItemHeaderDoc,
16700 details: GreenNodeDetails::Node {
16701 children: [TerminalEmpty::missing(db).0].into(),
16702 width: TextWidth::default(),
16703 },
16704 })
16705 .intern(db),
16706 )
16707 }
16708 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16709 let kind = node.kind(db);
16710 assert_eq!(
16711 kind,
16712 SyntaxKind::ItemHeaderDoc,
16713 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16714 kind,
16715 SyntaxKind::ItemHeaderDoc
16716 );
16717 Self { node }
16718 }
16719 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16720 let kind = node.kind(db);
16721 if kind == SyntaxKind::ItemHeaderDoc {
16722 Some(Self::from_syntax_node(db, node))
16723 } else {
16724 None
16725 }
16726 }
16727 fn as_syntax_node(&self) -> SyntaxNode {
16728 self.node
16729 }
16730 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16731 ItemHeaderDocPtr(self.node.stable_ptr(db))
16732 }
16733}
16734#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16735pub enum MaybeImplBody {
16736 Some(ImplBody),
16737 None(TerminalSemicolon),
16738}
16739#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16740pub struct MaybeImplBodyPtr(pub SyntaxStablePtrId);
16741impl TypedStablePtr for MaybeImplBodyPtr {
16742 type SyntaxNode = MaybeImplBody;
16743 fn untyped(&self) -> SyntaxStablePtrId {
16744 self.0
16745 }
16746 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16747 MaybeImplBody::from_syntax_node(db, self.0.lookup(db))
16748 }
16749}
16750impl From<MaybeImplBodyPtr> for SyntaxStablePtrId {
16751 fn from(ptr: MaybeImplBodyPtr) -> Self {
16752 ptr.untyped()
16753 }
16754}
16755impl From<ImplBodyPtr> for MaybeImplBodyPtr {
16756 fn from(value: ImplBodyPtr) -> Self {
16757 Self(value.0)
16758 }
16759}
16760impl From<TerminalSemicolonPtr> for MaybeImplBodyPtr {
16761 fn from(value: TerminalSemicolonPtr) -> Self {
16762 Self(value.0)
16763 }
16764}
16765impl From<ImplBodyGreen> for MaybeImplBodyGreen {
16766 fn from(value: ImplBodyGreen) -> Self {
16767 Self(value.0)
16768 }
16769}
16770impl From<TerminalSemicolonGreen> for MaybeImplBodyGreen {
16771 fn from(value: TerminalSemicolonGreen) -> Self {
16772 Self(value.0)
16773 }
16774}
16775#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16776pub struct MaybeImplBodyGreen(pub GreenId);
16777impl TypedSyntaxNode for MaybeImplBody {
16778 const OPTIONAL_KIND: Option<SyntaxKind> = None;
16779 type StablePtr = MaybeImplBodyPtr;
16780 type Green = MaybeImplBodyGreen;
16781 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16782 panic!("No missing variant.");
16783 }
16784 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16785 let kind = node.kind(db);
16786 match kind {
16787 SyntaxKind::ImplBody => MaybeImplBody::Some(ImplBody::from_syntax_node(db, node)),
16788 SyntaxKind::TerminalSemicolon => {
16789 MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node))
16790 }
16791 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeImplBody"),
16792 }
16793 }
16794 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16795 let kind = node.kind(db);
16796 match kind {
16797 SyntaxKind::ImplBody => Some(MaybeImplBody::Some(ImplBody::from_syntax_node(db, node))),
16798 SyntaxKind::TerminalSemicolon => {
16799 Some(MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node)))
16800 }
16801 _ => None,
16802 }
16803 }
16804 fn as_syntax_node(&self) -> SyntaxNode {
16805 match self {
16806 MaybeImplBody::Some(x) => x.as_syntax_node(),
16807 MaybeImplBody::None(x) => x.as_syntax_node(),
16808 }
16809 }
16810 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16811 MaybeImplBodyPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
16812 }
16813}
16814impl MaybeImplBody {
16815 pub fn is_variant(kind: SyntaxKind) -> bool {
16817 matches!(kind, SyntaxKind::ImplBody | SyntaxKind::TerminalSemicolon)
16818 }
16819}
16820#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16821pub struct ImplBody {
16822 node: SyntaxNode,
16823}
16824impl ImplBody {
16825 pub const INDEX_LBRACE: usize = 0;
16826 pub const INDEX_ITEMS: usize = 1;
16827 pub const INDEX_RBRACE: usize = 2;
16828 pub fn new_green(
16829 db: &dyn SyntaxGroup,
16830 lbrace: TerminalLBraceGreen,
16831 items: ImplItemListGreen,
16832 rbrace: TerminalRBraceGreen,
16833 ) -> ImplBodyGreen {
16834 let children = [lbrace.0, items.0, rbrace.0];
16835 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
16836 ImplBodyGreen(
16837 Arc::new(GreenNode {
16838 kind: SyntaxKind::ImplBody,
16839 details: GreenNodeDetails::Node { children: children.into(), width },
16840 })
16841 .intern(db),
16842 )
16843 }
16844}
16845impl ImplBody {
16846 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
16847 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
16848 }
16849 pub fn items(&self, db: &dyn SyntaxGroup) -> ImplItemList {
16850 ImplItemList::from_syntax_node(db, self.node.get_children(db)[1])
16851 }
16852 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
16853 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
16854 }
16855}
16856#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16857pub struct ImplBodyPtr(pub SyntaxStablePtrId);
16858impl ImplBodyPtr {}
16859impl TypedStablePtr for ImplBodyPtr {
16860 type SyntaxNode = ImplBody;
16861 fn untyped(&self) -> SyntaxStablePtrId {
16862 self.0
16863 }
16864 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplBody {
16865 ImplBody::from_syntax_node(db, self.0.lookup(db))
16866 }
16867}
16868impl From<ImplBodyPtr> for SyntaxStablePtrId {
16869 fn from(ptr: ImplBodyPtr) -> Self {
16870 ptr.untyped()
16871 }
16872}
16873#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16874pub struct ImplBodyGreen(pub GreenId);
16875impl TypedSyntaxNode for ImplBody {
16876 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplBody);
16877 type StablePtr = ImplBodyPtr;
16878 type Green = ImplBodyGreen;
16879 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16880 ImplBodyGreen(
16881 Arc::new(GreenNode {
16882 kind: SyntaxKind::ImplBody,
16883 details: GreenNodeDetails::Node {
16884 children: [
16885 TerminalLBrace::missing(db).0,
16886 ImplItemList::missing(db).0,
16887 TerminalRBrace::missing(db).0,
16888 ]
16889 .into(),
16890 width: TextWidth::default(),
16891 },
16892 })
16893 .intern(db),
16894 )
16895 }
16896 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16897 let kind = node.kind(db);
16898 assert_eq!(
16899 kind,
16900 SyntaxKind::ImplBody,
16901 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16902 kind,
16903 SyntaxKind::ImplBody
16904 );
16905 Self { node }
16906 }
16907 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16908 let kind = node.kind(db);
16909 if kind == SyntaxKind::ImplBody { Some(Self::from_syntax_node(db, node)) } else { None }
16910 }
16911 fn as_syntax_node(&self) -> SyntaxNode {
16912 self.node
16913 }
16914 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16915 ImplBodyPtr(self.node.stable_ptr(db))
16916 }
16917}
16918#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16919pub struct ImplItemList(ElementList<ImplItem, 1>);
16920impl Deref for ImplItemList {
16921 type Target = ElementList<ImplItem, 1>;
16922 fn deref(&self) -> &Self::Target {
16923 &self.0
16924 }
16925}
16926impl ImplItemList {
16927 pub fn new_green(db: &dyn SyntaxGroup, children: &[ImplItemGreen]) -> ImplItemListGreen {
16928 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
16929 ImplItemListGreen(
16930 Arc::new(GreenNode {
16931 kind: SyntaxKind::ImplItemList,
16932 details: GreenNodeDetails::Node {
16933 children: children.iter().map(|x| x.0).collect(),
16934 width,
16935 },
16936 })
16937 .intern(db),
16938 )
16939 }
16940}
16941#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16942pub struct ImplItemListPtr(pub SyntaxStablePtrId);
16943impl TypedStablePtr for ImplItemListPtr {
16944 type SyntaxNode = ImplItemList;
16945 fn untyped(&self) -> SyntaxStablePtrId {
16946 self.0
16947 }
16948 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemList {
16949 ImplItemList::from_syntax_node(db, self.0.lookup(db))
16950 }
16951}
16952impl From<ImplItemListPtr> for SyntaxStablePtrId {
16953 fn from(ptr: ImplItemListPtr) -> Self {
16954 ptr.untyped()
16955 }
16956}
16957#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16958pub struct ImplItemListGreen(pub GreenId);
16959impl TypedSyntaxNode for ImplItemList {
16960 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemList);
16961 type StablePtr = ImplItemListPtr;
16962 type Green = ImplItemListGreen;
16963 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16964 ImplItemListGreen(
16965 Arc::new(GreenNode {
16966 kind: SyntaxKind::ImplItemList,
16967 details: GreenNodeDetails::Node {
16968 children: [].into(),
16969 width: TextWidth::default(),
16970 },
16971 })
16972 .intern(db),
16973 )
16974 }
16975 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16976 Self(ElementList::new(node))
16977 }
16978 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16979 if node.kind(db) == SyntaxKind::ImplItemList {
16980 Some(Self(ElementList::new(node)))
16981 } else {
16982 None
16983 }
16984 }
16985 fn as_syntax_node(&self) -> SyntaxNode {
16986 self.node
16987 }
16988 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
16989 ImplItemListPtr(self.node.stable_ptr(db))
16990 }
16991}
16992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16993pub enum ImplItem {
16994 Function(FunctionWithBody),
16995 Type(ItemTypeAlias),
16996 Constant(ItemConstant),
16997 Impl(ItemImplAlias),
16998 Module(ItemModule),
16999 Use(ItemUse),
17000 ExternFunction(ItemExternFunction),
17001 ExternType(ItemExternType),
17002 Trait(ItemTrait),
17003 Struct(ItemStruct),
17004 Enum(ItemEnum),
17005 Missing(ImplItemMissing),
17006}
17007#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17008pub struct ImplItemPtr(pub SyntaxStablePtrId);
17009impl TypedStablePtr for ImplItemPtr {
17010 type SyntaxNode = ImplItem;
17011 fn untyped(&self) -> SyntaxStablePtrId {
17012 self.0
17013 }
17014 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItem {
17015 ImplItem::from_syntax_node(db, self.0.lookup(db))
17016 }
17017}
17018impl From<ImplItemPtr> for SyntaxStablePtrId {
17019 fn from(ptr: ImplItemPtr) -> Self {
17020 ptr.untyped()
17021 }
17022}
17023impl From<FunctionWithBodyPtr> for ImplItemPtr {
17024 fn from(value: FunctionWithBodyPtr) -> Self {
17025 Self(value.0)
17026 }
17027}
17028impl From<ItemTypeAliasPtr> for ImplItemPtr {
17029 fn from(value: ItemTypeAliasPtr) -> Self {
17030 Self(value.0)
17031 }
17032}
17033impl From<ItemConstantPtr> for ImplItemPtr {
17034 fn from(value: ItemConstantPtr) -> Self {
17035 Self(value.0)
17036 }
17037}
17038impl From<ItemImplAliasPtr> for ImplItemPtr {
17039 fn from(value: ItemImplAliasPtr) -> Self {
17040 Self(value.0)
17041 }
17042}
17043impl From<ItemModulePtr> for ImplItemPtr {
17044 fn from(value: ItemModulePtr) -> Self {
17045 Self(value.0)
17046 }
17047}
17048impl From<ItemUsePtr> for ImplItemPtr {
17049 fn from(value: ItemUsePtr) -> Self {
17050 Self(value.0)
17051 }
17052}
17053impl From<ItemExternFunctionPtr> for ImplItemPtr {
17054 fn from(value: ItemExternFunctionPtr) -> Self {
17055 Self(value.0)
17056 }
17057}
17058impl From<ItemExternTypePtr> for ImplItemPtr {
17059 fn from(value: ItemExternTypePtr) -> Self {
17060 Self(value.0)
17061 }
17062}
17063impl From<ItemTraitPtr> for ImplItemPtr {
17064 fn from(value: ItemTraitPtr) -> Self {
17065 Self(value.0)
17066 }
17067}
17068impl From<ItemStructPtr> for ImplItemPtr {
17069 fn from(value: ItemStructPtr) -> Self {
17070 Self(value.0)
17071 }
17072}
17073impl From<ItemEnumPtr> for ImplItemPtr {
17074 fn from(value: ItemEnumPtr) -> Self {
17075 Self(value.0)
17076 }
17077}
17078impl From<ImplItemMissingPtr> for ImplItemPtr {
17079 fn from(value: ImplItemMissingPtr) -> Self {
17080 Self(value.0)
17081 }
17082}
17083impl From<FunctionWithBodyGreen> for ImplItemGreen {
17084 fn from(value: FunctionWithBodyGreen) -> Self {
17085 Self(value.0)
17086 }
17087}
17088impl From<ItemTypeAliasGreen> for ImplItemGreen {
17089 fn from(value: ItemTypeAliasGreen) -> Self {
17090 Self(value.0)
17091 }
17092}
17093impl From<ItemConstantGreen> for ImplItemGreen {
17094 fn from(value: ItemConstantGreen) -> Self {
17095 Self(value.0)
17096 }
17097}
17098impl From<ItemImplAliasGreen> for ImplItemGreen {
17099 fn from(value: ItemImplAliasGreen) -> Self {
17100 Self(value.0)
17101 }
17102}
17103impl From<ItemModuleGreen> for ImplItemGreen {
17104 fn from(value: ItemModuleGreen) -> Self {
17105 Self(value.0)
17106 }
17107}
17108impl From<ItemUseGreen> for ImplItemGreen {
17109 fn from(value: ItemUseGreen) -> Self {
17110 Self(value.0)
17111 }
17112}
17113impl From<ItemExternFunctionGreen> for ImplItemGreen {
17114 fn from(value: ItemExternFunctionGreen) -> Self {
17115 Self(value.0)
17116 }
17117}
17118impl From<ItemExternTypeGreen> for ImplItemGreen {
17119 fn from(value: ItemExternTypeGreen) -> Self {
17120 Self(value.0)
17121 }
17122}
17123impl From<ItemTraitGreen> for ImplItemGreen {
17124 fn from(value: ItemTraitGreen) -> Self {
17125 Self(value.0)
17126 }
17127}
17128impl From<ItemStructGreen> for ImplItemGreen {
17129 fn from(value: ItemStructGreen) -> Self {
17130 Self(value.0)
17131 }
17132}
17133impl From<ItemEnumGreen> for ImplItemGreen {
17134 fn from(value: ItemEnumGreen) -> Self {
17135 Self(value.0)
17136 }
17137}
17138impl From<ImplItemMissingGreen> for ImplItemGreen {
17139 fn from(value: ImplItemMissingGreen) -> Self {
17140 Self(value.0)
17141 }
17142}
17143#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17144pub struct ImplItemGreen(pub GreenId);
17145impl TypedSyntaxNode for ImplItem {
17146 const OPTIONAL_KIND: Option<SyntaxKind> = None;
17147 type StablePtr = ImplItemPtr;
17148 type Green = ImplItemGreen;
17149 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17150 ImplItemGreen(ImplItemMissing::missing(db).0)
17151 }
17152 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17153 let kind = node.kind(db);
17154 match kind {
17155 SyntaxKind::FunctionWithBody => {
17156 ImplItem::Function(FunctionWithBody::from_syntax_node(db, node))
17157 }
17158 SyntaxKind::ItemTypeAlias => ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)),
17159 SyntaxKind::ItemConstant => {
17160 ImplItem::Constant(ItemConstant::from_syntax_node(db, node))
17161 }
17162 SyntaxKind::ItemImplAlias => ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)),
17163 SyntaxKind::ItemModule => ImplItem::Module(ItemModule::from_syntax_node(db, node)),
17164 SyntaxKind::ItemUse => ImplItem::Use(ItemUse::from_syntax_node(db, node)),
17165 SyntaxKind::ItemExternFunction => {
17166 ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
17167 }
17168 SyntaxKind::ItemExternType => {
17169 ImplItem::ExternType(ItemExternType::from_syntax_node(db, node))
17170 }
17171 SyntaxKind::ItemTrait => ImplItem::Trait(ItemTrait::from_syntax_node(db, node)),
17172 SyntaxKind::ItemStruct => ImplItem::Struct(ItemStruct::from_syntax_node(db, node)),
17173 SyntaxKind::ItemEnum => ImplItem::Enum(ItemEnum::from_syntax_node(db, node)),
17174 SyntaxKind::ImplItemMissing => {
17175 ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node))
17176 }
17177 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ImplItem"),
17178 }
17179 }
17180 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17181 let kind = node.kind(db);
17182 match kind {
17183 SyntaxKind::FunctionWithBody => {
17184 Some(ImplItem::Function(FunctionWithBody::from_syntax_node(db, node)))
17185 }
17186 SyntaxKind::ItemTypeAlias => {
17187 Some(ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)))
17188 }
17189 SyntaxKind::ItemConstant => {
17190 Some(ImplItem::Constant(ItemConstant::from_syntax_node(db, node)))
17191 }
17192 SyntaxKind::ItemImplAlias => {
17193 Some(ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)))
17194 }
17195 SyntaxKind::ItemModule => {
17196 Some(ImplItem::Module(ItemModule::from_syntax_node(db, node)))
17197 }
17198 SyntaxKind::ItemUse => Some(ImplItem::Use(ItemUse::from_syntax_node(db, node))),
17199 SyntaxKind::ItemExternFunction => {
17200 Some(ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
17201 }
17202 SyntaxKind::ItemExternType => {
17203 Some(ImplItem::ExternType(ItemExternType::from_syntax_node(db, node)))
17204 }
17205 SyntaxKind::ItemTrait => Some(ImplItem::Trait(ItemTrait::from_syntax_node(db, node))),
17206 SyntaxKind::ItemStruct => {
17207 Some(ImplItem::Struct(ItemStruct::from_syntax_node(db, node)))
17208 }
17209 SyntaxKind::ItemEnum => Some(ImplItem::Enum(ItemEnum::from_syntax_node(db, node))),
17210 SyntaxKind::ImplItemMissing => {
17211 Some(ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node)))
17212 }
17213 _ => None,
17214 }
17215 }
17216 fn as_syntax_node(&self) -> SyntaxNode {
17217 match self {
17218 ImplItem::Function(x) => x.as_syntax_node(),
17219 ImplItem::Type(x) => x.as_syntax_node(),
17220 ImplItem::Constant(x) => x.as_syntax_node(),
17221 ImplItem::Impl(x) => x.as_syntax_node(),
17222 ImplItem::Module(x) => x.as_syntax_node(),
17223 ImplItem::Use(x) => x.as_syntax_node(),
17224 ImplItem::ExternFunction(x) => x.as_syntax_node(),
17225 ImplItem::ExternType(x) => x.as_syntax_node(),
17226 ImplItem::Trait(x) => x.as_syntax_node(),
17227 ImplItem::Struct(x) => x.as_syntax_node(),
17228 ImplItem::Enum(x) => x.as_syntax_node(),
17229 ImplItem::Missing(x) => x.as_syntax_node(),
17230 }
17231 }
17232 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17233 ImplItemPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
17234 }
17235}
17236impl ImplItem {
17237 pub fn is_variant(kind: SyntaxKind) -> bool {
17239 matches!(
17240 kind,
17241 SyntaxKind::FunctionWithBody
17242 | SyntaxKind::ItemTypeAlias
17243 | SyntaxKind::ItemConstant
17244 | SyntaxKind::ItemImplAlias
17245 | SyntaxKind::ItemModule
17246 | SyntaxKind::ItemUse
17247 | SyntaxKind::ItemExternFunction
17248 | SyntaxKind::ItemExternType
17249 | SyntaxKind::ItemTrait
17250 | SyntaxKind::ItemStruct
17251 | SyntaxKind::ItemEnum
17252 | SyntaxKind::ImplItemMissing
17253 )
17254 }
17255}
17256#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17257pub struct ImplItemMissing {
17258 node: SyntaxNode,
17259}
17260impl ImplItemMissing {
17261 pub fn new_green(db: &dyn SyntaxGroup) -> ImplItemMissingGreen {
17262 let children = [];
17263 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17264 ImplItemMissingGreen(
17265 Arc::new(GreenNode {
17266 kind: SyntaxKind::ImplItemMissing,
17267 details: GreenNodeDetails::Node { children: children.into(), width },
17268 })
17269 .intern(db),
17270 )
17271 }
17272}
17273impl ImplItemMissing {}
17274#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17275pub struct ImplItemMissingPtr(pub SyntaxStablePtrId);
17276impl ImplItemMissingPtr {}
17277impl TypedStablePtr for ImplItemMissingPtr {
17278 type SyntaxNode = ImplItemMissing;
17279 fn untyped(&self) -> SyntaxStablePtrId {
17280 self.0
17281 }
17282 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemMissing {
17283 ImplItemMissing::from_syntax_node(db, self.0.lookup(db))
17284 }
17285}
17286impl From<ImplItemMissingPtr> for SyntaxStablePtrId {
17287 fn from(ptr: ImplItemMissingPtr) -> Self {
17288 ptr.untyped()
17289 }
17290}
17291#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17292pub struct ImplItemMissingGreen(pub GreenId);
17293impl TypedSyntaxNode for ImplItemMissing {
17294 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemMissing);
17295 type StablePtr = ImplItemMissingPtr;
17296 type Green = ImplItemMissingGreen;
17297 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17298 ImplItemMissingGreen(
17299 Arc::new(GreenNode {
17300 kind: SyntaxKind::ImplItemMissing,
17301 details: GreenNodeDetails::Node {
17302 children: [].into(),
17303 width: TextWidth::default(),
17304 },
17305 })
17306 .intern(db),
17307 )
17308 }
17309 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17310 let kind = node.kind(db);
17311 assert_eq!(
17312 kind,
17313 SyntaxKind::ImplItemMissing,
17314 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17315 kind,
17316 SyntaxKind::ImplItemMissing
17317 );
17318 Self { node }
17319 }
17320 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17321 let kind = node.kind(db);
17322 if kind == SyntaxKind::ImplItemMissing {
17323 Some(Self::from_syntax_node(db, node))
17324 } else {
17325 None
17326 }
17327 }
17328 fn as_syntax_node(&self) -> SyntaxNode {
17329 self.node
17330 }
17331 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17332 ImplItemMissingPtr(self.node.stable_ptr(db))
17333 }
17334}
17335#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17336pub struct ItemImplAlias {
17337 node: SyntaxNode,
17338}
17339impl ItemImplAlias {
17340 pub const INDEX_ATTRIBUTES: usize = 0;
17341 pub const INDEX_VISIBILITY: usize = 1;
17342 pub const INDEX_IMPL_KW: usize = 2;
17343 pub const INDEX_NAME: usize = 3;
17344 pub const INDEX_GENERIC_PARAMS: usize = 4;
17345 pub const INDEX_EQ: usize = 5;
17346 pub const INDEX_IMPL_PATH: usize = 6;
17347 pub const INDEX_SEMICOLON: usize = 7;
17348 pub fn new_green(
17349 db: &dyn SyntaxGroup,
17350 attributes: AttributeListGreen,
17351 visibility: VisibilityGreen,
17352 impl_kw: TerminalImplGreen,
17353 name: TerminalIdentifierGreen,
17354 generic_params: OptionWrappedGenericParamListGreen,
17355 eq: TerminalEqGreen,
17356 impl_path: ExprPathGreen,
17357 semicolon: TerminalSemicolonGreen,
17358 ) -> ItemImplAliasGreen {
17359 let children = [
17360 attributes.0,
17361 visibility.0,
17362 impl_kw.0,
17363 name.0,
17364 generic_params.0,
17365 eq.0,
17366 impl_path.0,
17367 semicolon.0,
17368 ];
17369 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17370 ItemImplAliasGreen(
17371 Arc::new(GreenNode {
17372 kind: SyntaxKind::ItemImplAlias,
17373 details: GreenNodeDetails::Node { children: children.into(), width },
17374 })
17375 .intern(db),
17376 )
17377 }
17378}
17379impl ItemImplAlias {
17380 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17381 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
17382 }
17383 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17384 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
17385 }
17386 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
17387 TerminalImpl::from_syntax_node(db, self.node.get_children(db)[2])
17388 }
17389 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17390 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
17391 }
17392 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17393 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
17394 }
17395 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
17396 TerminalEq::from_syntax_node(db, self.node.get_children(db)[5])
17397 }
17398 pub fn impl_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
17399 ExprPath::from_syntax_node(db, self.node.get_children(db)[6])
17400 }
17401 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
17402 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[7])
17403 }
17404}
17405#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17406pub struct ItemImplAliasPtr(pub SyntaxStablePtrId);
17407impl ItemImplAliasPtr {
17408 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17409 let ptr = self.0.lookup_intern(db);
17410 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17411 TerminalIdentifierGreen(key_fields[0])
17412 } else {
17413 panic!("Unexpected key field query on root.");
17414 }
17415 }
17416}
17417impl TypedStablePtr for ItemImplAliasPtr {
17418 type SyntaxNode = ItemImplAlias;
17419 fn untyped(&self) -> SyntaxStablePtrId {
17420 self.0
17421 }
17422 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImplAlias {
17423 ItemImplAlias::from_syntax_node(db, self.0.lookup(db))
17424 }
17425}
17426impl From<ItemImplAliasPtr> for SyntaxStablePtrId {
17427 fn from(ptr: ItemImplAliasPtr) -> Self {
17428 ptr.untyped()
17429 }
17430}
17431#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17432pub struct ItemImplAliasGreen(pub GreenId);
17433impl TypedSyntaxNode for ItemImplAlias {
17434 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImplAlias);
17435 type StablePtr = ItemImplAliasPtr;
17436 type Green = ItemImplAliasGreen;
17437 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17438 ItemImplAliasGreen(
17439 Arc::new(GreenNode {
17440 kind: SyntaxKind::ItemImplAlias,
17441 details: GreenNodeDetails::Node {
17442 children: [
17443 AttributeList::missing(db).0,
17444 Visibility::missing(db).0,
17445 TerminalImpl::missing(db).0,
17446 TerminalIdentifier::missing(db).0,
17447 OptionWrappedGenericParamList::missing(db).0,
17448 TerminalEq::missing(db).0,
17449 ExprPath::missing(db).0,
17450 TerminalSemicolon::missing(db).0,
17451 ]
17452 .into(),
17453 width: TextWidth::default(),
17454 },
17455 })
17456 .intern(db),
17457 )
17458 }
17459 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17460 let kind = node.kind(db);
17461 assert_eq!(
17462 kind,
17463 SyntaxKind::ItemImplAlias,
17464 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17465 kind,
17466 SyntaxKind::ItemImplAlias
17467 );
17468 Self { node }
17469 }
17470 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17471 let kind = node.kind(db);
17472 if kind == SyntaxKind::ItemImplAlias {
17473 Some(Self::from_syntax_node(db, node))
17474 } else {
17475 None
17476 }
17477 }
17478 fn as_syntax_node(&self) -> SyntaxNode {
17479 self.node
17480 }
17481 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17482 ItemImplAliasPtr(self.node.stable_ptr(db))
17483 }
17484}
17485#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17486pub struct ItemStruct {
17487 node: SyntaxNode,
17488}
17489impl ItemStruct {
17490 pub const INDEX_ATTRIBUTES: usize = 0;
17491 pub const INDEX_VISIBILITY: usize = 1;
17492 pub const INDEX_STRUCT_KW: usize = 2;
17493 pub const INDEX_NAME: usize = 3;
17494 pub const INDEX_GENERIC_PARAMS: usize = 4;
17495 pub const INDEX_LBRACE: usize = 5;
17496 pub const INDEX_MEMBERS: usize = 6;
17497 pub const INDEX_RBRACE: usize = 7;
17498 pub fn new_green(
17499 db: &dyn SyntaxGroup,
17500 attributes: AttributeListGreen,
17501 visibility: VisibilityGreen,
17502 struct_kw: TerminalStructGreen,
17503 name: TerminalIdentifierGreen,
17504 generic_params: OptionWrappedGenericParamListGreen,
17505 lbrace: TerminalLBraceGreen,
17506 members: MemberListGreen,
17507 rbrace: TerminalRBraceGreen,
17508 ) -> ItemStructGreen {
17509 let children = [
17510 attributes.0,
17511 visibility.0,
17512 struct_kw.0,
17513 name.0,
17514 generic_params.0,
17515 lbrace.0,
17516 members.0,
17517 rbrace.0,
17518 ];
17519 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17520 ItemStructGreen(
17521 Arc::new(GreenNode {
17522 kind: SyntaxKind::ItemStruct,
17523 details: GreenNodeDetails::Node { children: children.into(), width },
17524 })
17525 .intern(db),
17526 )
17527 }
17528}
17529impl ItemStruct {
17530 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17531 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
17532 }
17533 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17534 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
17535 }
17536 pub fn struct_kw(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
17537 TerminalStruct::from_syntax_node(db, self.node.get_children(db)[2])
17538 }
17539 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17540 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
17541 }
17542 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17543 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
17544 }
17545 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17546 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[5])
17547 }
17548 pub fn members(&self, db: &dyn SyntaxGroup) -> MemberList {
17549 MemberList::from_syntax_node(db, self.node.get_children(db)[6])
17550 }
17551 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17552 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[7])
17553 }
17554}
17555#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17556pub struct ItemStructPtr(pub SyntaxStablePtrId);
17557impl ItemStructPtr {
17558 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17559 let ptr = self.0.lookup_intern(db);
17560 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17561 TerminalIdentifierGreen(key_fields[0])
17562 } else {
17563 panic!("Unexpected key field query on root.");
17564 }
17565 }
17566}
17567impl TypedStablePtr for ItemStructPtr {
17568 type SyntaxNode = ItemStruct;
17569 fn untyped(&self) -> SyntaxStablePtrId {
17570 self.0
17571 }
17572 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemStruct {
17573 ItemStruct::from_syntax_node(db, self.0.lookup(db))
17574 }
17575}
17576impl From<ItemStructPtr> for SyntaxStablePtrId {
17577 fn from(ptr: ItemStructPtr) -> Self {
17578 ptr.untyped()
17579 }
17580}
17581#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17582pub struct ItemStructGreen(pub GreenId);
17583impl TypedSyntaxNode for ItemStruct {
17584 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemStruct);
17585 type StablePtr = ItemStructPtr;
17586 type Green = ItemStructGreen;
17587 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17588 ItemStructGreen(
17589 Arc::new(GreenNode {
17590 kind: SyntaxKind::ItemStruct,
17591 details: GreenNodeDetails::Node {
17592 children: [
17593 AttributeList::missing(db).0,
17594 Visibility::missing(db).0,
17595 TerminalStruct::missing(db).0,
17596 TerminalIdentifier::missing(db).0,
17597 OptionWrappedGenericParamList::missing(db).0,
17598 TerminalLBrace::missing(db).0,
17599 MemberList::missing(db).0,
17600 TerminalRBrace::missing(db).0,
17601 ]
17602 .into(),
17603 width: TextWidth::default(),
17604 },
17605 })
17606 .intern(db),
17607 )
17608 }
17609 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17610 let kind = node.kind(db);
17611 assert_eq!(
17612 kind,
17613 SyntaxKind::ItemStruct,
17614 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17615 kind,
17616 SyntaxKind::ItemStruct
17617 );
17618 Self { node }
17619 }
17620 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17621 let kind = node.kind(db);
17622 if kind == SyntaxKind::ItemStruct { Some(Self::from_syntax_node(db, node)) } else { None }
17623 }
17624 fn as_syntax_node(&self) -> SyntaxNode {
17625 self.node
17626 }
17627 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17628 ItemStructPtr(self.node.stable_ptr(db))
17629 }
17630}
17631#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17632pub struct ItemEnum {
17633 node: SyntaxNode,
17634}
17635impl ItemEnum {
17636 pub const INDEX_ATTRIBUTES: usize = 0;
17637 pub const INDEX_VISIBILITY: usize = 1;
17638 pub const INDEX_ENUM_KW: usize = 2;
17639 pub const INDEX_NAME: usize = 3;
17640 pub const INDEX_GENERIC_PARAMS: usize = 4;
17641 pub const INDEX_LBRACE: usize = 5;
17642 pub const INDEX_VARIANTS: usize = 6;
17643 pub const INDEX_RBRACE: usize = 7;
17644 pub fn new_green(
17645 db: &dyn SyntaxGroup,
17646 attributes: AttributeListGreen,
17647 visibility: VisibilityGreen,
17648 enum_kw: TerminalEnumGreen,
17649 name: TerminalIdentifierGreen,
17650 generic_params: OptionWrappedGenericParamListGreen,
17651 lbrace: TerminalLBraceGreen,
17652 variants: VariantListGreen,
17653 rbrace: TerminalRBraceGreen,
17654 ) -> ItemEnumGreen {
17655 let children = [
17656 attributes.0,
17657 visibility.0,
17658 enum_kw.0,
17659 name.0,
17660 generic_params.0,
17661 lbrace.0,
17662 variants.0,
17663 rbrace.0,
17664 ];
17665 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17666 ItemEnumGreen(
17667 Arc::new(GreenNode {
17668 kind: SyntaxKind::ItemEnum,
17669 details: GreenNodeDetails::Node { children: children.into(), width },
17670 })
17671 .intern(db),
17672 )
17673 }
17674}
17675impl ItemEnum {
17676 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17677 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
17678 }
17679 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17680 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
17681 }
17682 pub fn enum_kw(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
17683 TerminalEnum::from_syntax_node(db, self.node.get_children(db)[2])
17684 }
17685 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17686 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
17687 }
17688 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17689 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
17690 }
17691 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17692 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[5])
17693 }
17694 pub fn variants(&self, db: &dyn SyntaxGroup) -> VariantList {
17695 VariantList::from_syntax_node(db, self.node.get_children(db)[6])
17696 }
17697 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17698 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[7])
17699 }
17700}
17701#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17702pub struct ItemEnumPtr(pub SyntaxStablePtrId);
17703impl ItemEnumPtr {
17704 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17705 let ptr = self.0.lookup_intern(db);
17706 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17707 TerminalIdentifierGreen(key_fields[0])
17708 } else {
17709 panic!("Unexpected key field query on root.");
17710 }
17711 }
17712}
17713impl TypedStablePtr for ItemEnumPtr {
17714 type SyntaxNode = ItemEnum;
17715 fn untyped(&self) -> SyntaxStablePtrId {
17716 self.0
17717 }
17718 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemEnum {
17719 ItemEnum::from_syntax_node(db, self.0.lookup(db))
17720 }
17721}
17722impl From<ItemEnumPtr> for SyntaxStablePtrId {
17723 fn from(ptr: ItemEnumPtr) -> Self {
17724 ptr.untyped()
17725 }
17726}
17727#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17728pub struct ItemEnumGreen(pub GreenId);
17729impl TypedSyntaxNode for ItemEnum {
17730 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemEnum);
17731 type StablePtr = ItemEnumPtr;
17732 type Green = ItemEnumGreen;
17733 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17734 ItemEnumGreen(
17735 Arc::new(GreenNode {
17736 kind: SyntaxKind::ItemEnum,
17737 details: GreenNodeDetails::Node {
17738 children: [
17739 AttributeList::missing(db).0,
17740 Visibility::missing(db).0,
17741 TerminalEnum::missing(db).0,
17742 TerminalIdentifier::missing(db).0,
17743 OptionWrappedGenericParamList::missing(db).0,
17744 TerminalLBrace::missing(db).0,
17745 VariantList::missing(db).0,
17746 TerminalRBrace::missing(db).0,
17747 ]
17748 .into(),
17749 width: TextWidth::default(),
17750 },
17751 })
17752 .intern(db),
17753 )
17754 }
17755 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17756 let kind = node.kind(db);
17757 assert_eq!(
17758 kind,
17759 SyntaxKind::ItemEnum,
17760 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17761 kind,
17762 SyntaxKind::ItemEnum
17763 );
17764 Self { node }
17765 }
17766 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17767 let kind = node.kind(db);
17768 if kind == SyntaxKind::ItemEnum { Some(Self::from_syntax_node(db, node)) } else { None }
17769 }
17770 fn as_syntax_node(&self) -> SyntaxNode {
17771 self.node
17772 }
17773 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17774 ItemEnumPtr(self.node.stable_ptr(db))
17775 }
17776}
17777#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17778pub struct ItemTypeAlias {
17779 node: SyntaxNode,
17780}
17781impl ItemTypeAlias {
17782 pub const INDEX_ATTRIBUTES: usize = 0;
17783 pub const INDEX_VISIBILITY: usize = 1;
17784 pub const INDEX_TYPE_KW: usize = 2;
17785 pub const INDEX_NAME: usize = 3;
17786 pub const INDEX_GENERIC_PARAMS: usize = 4;
17787 pub const INDEX_EQ: usize = 5;
17788 pub const INDEX_TY: usize = 6;
17789 pub const INDEX_SEMICOLON: usize = 7;
17790 pub fn new_green(
17791 db: &dyn SyntaxGroup,
17792 attributes: AttributeListGreen,
17793 visibility: VisibilityGreen,
17794 type_kw: TerminalTypeGreen,
17795 name: TerminalIdentifierGreen,
17796 generic_params: OptionWrappedGenericParamListGreen,
17797 eq: TerminalEqGreen,
17798 ty: ExprGreen,
17799 semicolon: TerminalSemicolonGreen,
17800 ) -> ItemTypeAliasGreen {
17801 let children = [
17802 attributes.0,
17803 visibility.0,
17804 type_kw.0,
17805 name.0,
17806 generic_params.0,
17807 eq.0,
17808 ty.0,
17809 semicolon.0,
17810 ];
17811 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17812 ItemTypeAliasGreen(
17813 Arc::new(GreenNode {
17814 kind: SyntaxKind::ItemTypeAlias,
17815 details: GreenNodeDetails::Node { children: children.into(), width },
17816 })
17817 .intern(db),
17818 )
17819 }
17820}
17821impl ItemTypeAlias {
17822 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17823 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
17824 }
17825 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17826 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
17827 }
17828 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
17829 TerminalType::from_syntax_node(db, self.node.get_children(db)[2])
17830 }
17831 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17832 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
17833 }
17834 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17835 OptionWrappedGenericParamList::from_syntax_node(db, self.node.get_children(db)[4])
17836 }
17837 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
17838 TerminalEq::from_syntax_node(db, self.node.get_children(db)[5])
17839 }
17840 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
17841 Expr::from_syntax_node(db, self.node.get_children(db)[6])
17842 }
17843 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
17844 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[7])
17845 }
17846}
17847#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17848pub struct ItemTypeAliasPtr(pub SyntaxStablePtrId);
17849impl ItemTypeAliasPtr {
17850 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17851 let ptr = self.0.lookup_intern(db);
17852 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17853 TerminalIdentifierGreen(key_fields[0])
17854 } else {
17855 panic!("Unexpected key field query on root.");
17856 }
17857 }
17858}
17859impl TypedStablePtr for ItemTypeAliasPtr {
17860 type SyntaxNode = ItemTypeAlias;
17861 fn untyped(&self) -> SyntaxStablePtrId {
17862 self.0
17863 }
17864 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTypeAlias {
17865 ItemTypeAlias::from_syntax_node(db, self.0.lookup(db))
17866 }
17867}
17868impl From<ItemTypeAliasPtr> for SyntaxStablePtrId {
17869 fn from(ptr: ItemTypeAliasPtr) -> Self {
17870 ptr.untyped()
17871 }
17872}
17873#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17874pub struct ItemTypeAliasGreen(pub GreenId);
17875impl TypedSyntaxNode for ItemTypeAlias {
17876 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTypeAlias);
17877 type StablePtr = ItemTypeAliasPtr;
17878 type Green = ItemTypeAliasGreen;
17879 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17880 ItemTypeAliasGreen(
17881 Arc::new(GreenNode {
17882 kind: SyntaxKind::ItemTypeAlias,
17883 details: GreenNodeDetails::Node {
17884 children: [
17885 AttributeList::missing(db).0,
17886 Visibility::missing(db).0,
17887 TerminalType::missing(db).0,
17888 TerminalIdentifier::missing(db).0,
17889 OptionWrappedGenericParamList::missing(db).0,
17890 TerminalEq::missing(db).0,
17891 Expr::missing(db).0,
17892 TerminalSemicolon::missing(db).0,
17893 ]
17894 .into(),
17895 width: TextWidth::default(),
17896 },
17897 })
17898 .intern(db),
17899 )
17900 }
17901 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17902 let kind = node.kind(db);
17903 assert_eq!(
17904 kind,
17905 SyntaxKind::ItemTypeAlias,
17906 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17907 kind,
17908 SyntaxKind::ItemTypeAlias
17909 );
17910 Self { node }
17911 }
17912 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17913 let kind = node.kind(db);
17914 if kind == SyntaxKind::ItemTypeAlias {
17915 Some(Self::from_syntax_node(db, node))
17916 } else {
17917 None
17918 }
17919 }
17920 fn as_syntax_node(&self) -> SyntaxNode {
17921 self.node
17922 }
17923 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
17924 ItemTypeAliasPtr(self.node.stable_ptr(db))
17925 }
17926}
17927#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17928pub struct ItemUse {
17929 node: SyntaxNode,
17930}
17931impl ItemUse {
17932 pub const INDEX_ATTRIBUTES: usize = 0;
17933 pub const INDEX_VISIBILITY: usize = 1;
17934 pub const INDEX_USE_KW: usize = 2;
17935 pub const INDEX_USE_PATH: usize = 3;
17936 pub const INDEX_SEMICOLON: usize = 4;
17937 pub fn new_green(
17938 db: &dyn SyntaxGroup,
17939 attributes: AttributeListGreen,
17940 visibility: VisibilityGreen,
17941 use_kw: TerminalUseGreen,
17942 use_path: UsePathGreen,
17943 semicolon: TerminalSemicolonGreen,
17944 ) -> ItemUseGreen {
17945 let children = [attributes.0, visibility.0, use_kw.0, use_path.0, semicolon.0];
17946 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
17947 ItemUseGreen(
17948 Arc::new(GreenNode {
17949 kind: SyntaxKind::ItemUse,
17950 details: GreenNodeDetails::Node { children: children.into(), width },
17951 })
17952 .intern(db),
17953 )
17954 }
17955}
17956impl ItemUse {
17957 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17958 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
17959 }
17960 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17961 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
17962 }
17963 pub fn use_kw(&self, db: &dyn SyntaxGroup) -> TerminalUse {
17964 TerminalUse::from_syntax_node(db, self.node.get_children(db)[2])
17965 }
17966 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
17967 UsePath::from_syntax_node(db, self.node.get_children(db)[3])
17968 }
17969 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
17970 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
17971 }
17972}
17973#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17974pub struct ItemUsePtr(pub SyntaxStablePtrId);
17975impl ItemUsePtr {
17976 pub fn use_path_green(self, db: &dyn SyntaxGroup) -> UsePathGreen {
17977 let ptr = self.0.lookup_intern(db);
17978 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17979 UsePathGreen(key_fields[0])
17980 } else {
17981 panic!("Unexpected key field query on root.");
17982 }
17983 }
17984}
17985impl TypedStablePtr for ItemUsePtr {
17986 type SyntaxNode = ItemUse;
17987 fn untyped(&self) -> SyntaxStablePtrId {
17988 self.0
17989 }
17990 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemUse {
17991 ItemUse::from_syntax_node(db, self.0.lookup(db))
17992 }
17993}
17994impl From<ItemUsePtr> for SyntaxStablePtrId {
17995 fn from(ptr: ItemUsePtr) -> Self {
17996 ptr.untyped()
17997 }
17998}
17999#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18000pub struct ItemUseGreen(pub GreenId);
18001impl TypedSyntaxNode for ItemUse {
18002 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemUse);
18003 type StablePtr = ItemUsePtr;
18004 type Green = ItemUseGreen;
18005 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18006 ItemUseGreen(
18007 Arc::new(GreenNode {
18008 kind: SyntaxKind::ItemUse,
18009 details: GreenNodeDetails::Node {
18010 children: [
18011 AttributeList::missing(db).0,
18012 Visibility::missing(db).0,
18013 TerminalUse::missing(db).0,
18014 UsePath::missing(db).0,
18015 TerminalSemicolon::missing(db).0,
18016 ]
18017 .into(),
18018 width: TextWidth::default(),
18019 },
18020 })
18021 .intern(db),
18022 )
18023 }
18024 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18025 let kind = node.kind(db);
18026 assert_eq!(
18027 kind,
18028 SyntaxKind::ItemUse,
18029 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18030 kind,
18031 SyntaxKind::ItemUse
18032 );
18033 Self { node }
18034 }
18035 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18036 let kind = node.kind(db);
18037 if kind == SyntaxKind::ItemUse { Some(Self::from_syntax_node(db, node)) } else { None }
18038 }
18039 fn as_syntax_node(&self) -> SyntaxNode {
18040 self.node
18041 }
18042 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18043 ItemUsePtr(self.node.stable_ptr(db))
18044 }
18045}
18046#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18047pub enum UsePath {
18048 Leaf(UsePathLeaf),
18049 Single(UsePathSingle),
18050 Multi(UsePathMulti),
18051 Star(UsePathStar),
18052}
18053#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18054pub struct UsePathPtr(pub SyntaxStablePtrId);
18055impl TypedStablePtr for UsePathPtr {
18056 type SyntaxNode = UsePath;
18057 fn untyped(&self) -> SyntaxStablePtrId {
18058 self.0
18059 }
18060 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePath {
18061 UsePath::from_syntax_node(db, self.0.lookup(db))
18062 }
18063}
18064impl From<UsePathPtr> for SyntaxStablePtrId {
18065 fn from(ptr: UsePathPtr) -> Self {
18066 ptr.untyped()
18067 }
18068}
18069impl From<UsePathLeafPtr> for UsePathPtr {
18070 fn from(value: UsePathLeafPtr) -> Self {
18071 Self(value.0)
18072 }
18073}
18074impl From<UsePathSinglePtr> for UsePathPtr {
18075 fn from(value: UsePathSinglePtr) -> Self {
18076 Self(value.0)
18077 }
18078}
18079impl From<UsePathMultiPtr> for UsePathPtr {
18080 fn from(value: UsePathMultiPtr) -> Self {
18081 Self(value.0)
18082 }
18083}
18084impl From<UsePathStarPtr> for UsePathPtr {
18085 fn from(value: UsePathStarPtr) -> Self {
18086 Self(value.0)
18087 }
18088}
18089impl From<UsePathLeafGreen> for UsePathGreen {
18090 fn from(value: UsePathLeafGreen) -> Self {
18091 Self(value.0)
18092 }
18093}
18094impl From<UsePathSingleGreen> for UsePathGreen {
18095 fn from(value: UsePathSingleGreen) -> Self {
18096 Self(value.0)
18097 }
18098}
18099impl From<UsePathMultiGreen> for UsePathGreen {
18100 fn from(value: UsePathMultiGreen) -> Self {
18101 Self(value.0)
18102 }
18103}
18104impl From<UsePathStarGreen> for UsePathGreen {
18105 fn from(value: UsePathStarGreen) -> Self {
18106 Self(value.0)
18107 }
18108}
18109#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18110pub struct UsePathGreen(pub GreenId);
18111impl TypedSyntaxNode for UsePath {
18112 const OPTIONAL_KIND: Option<SyntaxKind> = None;
18113 type StablePtr = UsePathPtr;
18114 type Green = UsePathGreen;
18115 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18116 panic!("No missing variant.");
18117 }
18118 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18119 let kind = node.kind(db);
18120 match kind {
18121 SyntaxKind::UsePathLeaf => UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node)),
18122 SyntaxKind::UsePathSingle => UsePath::Single(UsePathSingle::from_syntax_node(db, node)),
18123 SyntaxKind::UsePathMulti => UsePath::Multi(UsePathMulti::from_syntax_node(db, node)),
18124 SyntaxKind::UsePathStar => UsePath::Star(UsePathStar::from_syntax_node(db, node)),
18125 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UsePath"),
18126 }
18127 }
18128 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18129 let kind = node.kind(db);
18130 match kind {
18131 SyntaxKind::UsePathLeaf => Some(UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node))),
18132 SyntaxKind::UsePathSingle => {
18133 Some(UsePath::Single(UsePathSingle::from_syntax_node(db, node)))
18134 }
18135 SyntaxKind::UsePathMulti => {
18136 Some(UsePath::Multi(UsePathMulti::from_syntax_node(db, node)))
18137 }
18138 SyntaxKind::UsePathStar => Some(UsePath::Star(UsePathStar::from_syntax_node(db, node))),
18139 _ => None,
18140 }
18141 }
18142 fn as_syntax_node(&self) -> SyntaxNode {
18143 match self {
18144 UsePath::Leaf(x) => x.as_syntax_node(),
18145 UsePath::Single(x) => x.as_syntax_node(),
18146 UsePath::Multi(x) => x.as_syntax_node(),
18147 UsePath::Star(x) => x.as_syntax_node(),
18148 }
18149 }
18150 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18151 UsePathPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
18152 }
18153}
18154impl UsePath {
18155 pub fn is_variant(kind: SyntaxKind) -> bool {
18157 matches!(
18158 kind,
18159 SyntaxKind::UsePathLeaf
18160 | SyntaxKind::UsePathSingle
18161 | SyntaxKind::UsePathMulti
18162 | SyntaxKind::UsePathStar
18163 )
18164 }
18165}
18166#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18167pub struct UsePathLeaf {
18168 node: SyntaxNode,
18169}
18170impl UsePathLeaf {
18171 pub const INDEX_IDENT: usize = 0;
18172 pub const INDEX_ALIAS_CLAUSE: usize = 1;
18173 pub fn new_green(
18174 db: &dyn SyntaxGroup,
18175 ident: PathSegmentGreen,
18176 alias_clause: OptionAliasClauseGreen,
18177 ) -> UsePathLeafGreen {
18178 let children = [ident.0, alias_clause.0];
18179 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18180 UsePathLeafGreen(
18181 Arc::new(GreenNode {
18182 kind: SyntaxKind::UsePathLeaf,
18183 details: GreenNodeDetails::Node { children: children.into(), width },
18184 })
18185 .intern(db),
18186 )
18187 }
18188}
18189impl UsePathLeaf {
18190 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18191 PathSegment::from_syntax_node(db, self.node.get_children(db)[0])
18192 }
18193 pub fn alias_clause(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
18194 OptionAliasClause::from_syntax_node(db, self.node.get_children(db)[1])
18195 }
18196}
18197#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18198pub struct UsePathLeafPtr(pub SyntaxStablePtrId);
18199impl UsePathLeafPtr {
18200 pub fn ident_green(self, db: &dyn SyntaxGroup) -> PathSegmentGreen {
18201 let ptr = self.0.lookup_intern(db);
18202 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18203 PathSegmentGreen(key_fields[0])
18204 } else {
18205 panic!("Unexpected key field query on root.");
18206 }
18207 }
18208 pub fn alias_clause_green(self, db: &dyn SyntaxGroup) -> OptionAliasClauseGreen {
18209 let ptr = self.0.lookup_intern(db);
18210 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18211 OptionAliasClauseGreen(key_fields[1])
18212 } else {
18213 panic!("Unexpected key field query on root.");
18214 }
18215 }
18216}
18217impl TypedStablePtr for UsePathLeafPtr {
18218 type SyntaxNode = UsePathLeaf;
18219 fn untyped(&self) -> SyntaxStablePtrId {
18220 self.0
18221 }
18222 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathLeaf {
18223 UsePathLeaf::from_syntax_node(db, self.0.lookup(db))
18224 }
18225}
18226impl From<UsePathLeafPtr> for SyntaxStablePtrId {
18227 fn from(ptr: UsePathLeafPtr) -> Self {
18228 ptr.untyped()
18229 }
18230}
18231#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18232pub struct UsePathLeafGreen(pub GreenId);
18233impl TypedSyntaxNode for UsePathLeaf {
18234 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathLeaf);
18235 type StablePtr = UsePathLeafPtr;
18236 type Green = UsePathLeafGreen;
18237 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18238 UsePathLeafGreen(
18239 Arc::new(GreenNode {
18240 kind: SyntaxKind::UsePathLeaf,
18241 details: GreenNodeDetails::Node {
18242 children: [PathSegment::missing(db).0, OptionAliasClause::missing(db).0].into(),
18243 width: TextWidth::default(),
18244 },
18245 })
18246 .intern(db),
18247 )
18248 }
18249 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18250 let kind = node.kind(db);
18251 assert_eq!(
18252 kind,
18253 SyntaxKind::UsePathLeaf,
18254 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18255 kind,
18256 SyntaxKind::UsePathLeaf
18257 );
18258 Self { node }
18259 }
18260 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18261 let kind = node.kind(db);
18262 if kind == SyntaxKind::UsePathLeaf { Some(Self::from_syntax_node(db, node)) } else { None }
18263 }
18264 fn as_syntax_node(&self) -> SyntaxNode {
18265 self.node
18266 }
18267 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18268 UsePathLeafPtr(self.node.stable_ptr(db))
18269 }
18270}
18271#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18272pub struct UsePathSingle {
18273 node: SyntaxNode,
18274}
18275impl UsePathSingle {
18276 pub const INDEX_IDENT: usize = 0;
18277 pub const INDEX_COLON_COLON: usize = 1;
18278 pub const INDEX_USE_PATH: usize = 2;
18279 pub fn new_green(
18280 db: &dyn SyntaxGroup,
18281 ident: PathSegmentGreen,
18282 colon_colon: TerminalColonColonGreen,
18283 use_path: UsePathGreen,
18284 ) -> UsePathSingleGreen {
18285 let children = [ident.0, colon_colon.0, use_path.0];
18286 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18287 UsePathSingleGreen(
18288 Arc::new(GreenNode {
18289 kind: SyntaxKind::UsePathSingle,
18290 details: GreenNodeDetails::Node { children: children.into(), width },
18291 })
18292 .intern(db),
18293 )
18294 }
18295}
18296impl UsePathSingle {
18297 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18298 PathSegment::from_syntax_node(db, self.node.get_children(db)[0])
18299 }
18300 pub fn colon_colon(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
18301 TerminalColonColon::from_syntax_node(db, self.node.get_children(db)[1])
18302 }
18303 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
18304 UsePath::from_syntax_node(db, self.node.get_children(db)[2])
18305 }
18306}
18307#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18308pub struct UsePathSinglePtr(pub SyntaxStablePtrId);
18309impl UsePathSinglePtr {}
18310impl TypedStablePtr for UsePathSinglePtr {
18311 type SyntaxNode = UsePathSingle;
18312 fn untyped(&self) -> SyntaxStablePtrId {
18313 self.0
18314 }
18315 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathSingle {
18316 UsePathSingle::from_syntax_node(db, self.0.lookup(db))
18317 }
18318}
18319impl From<UsePathSinglePtr> for SyntaxStablePtrId {
18320 fn from(ptr: UsePathSinglePtr) -> Self {
18321 ptr.untyped()
18322 }
18323}
18324#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18325pub struct UsePathSingleGreen(pub GreenId);
18326impl TypedSyntaxNode for UsePathSingle {
18327 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathSingle);
18328 type StablePtr = UsePathSinglePtr;
18329 type Green = UsePathSingleGreen;
18330 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18331 UsePathSingleGreen(
18332 Arc::new(GreenNode {
18333 kind: SyntaxKind::UsePathSingle,
18334 details: GreenNodeDetails::Node {
18335 children: [
18336 PathSegment::missing(db).0,
18337 TerminalColonColon::missing(db).0,
18338 UsePath::missing(db).0,
18339 ]
18340 .into(),
18341 width: TextWidth::default(),
18342 },
18343 })
18344 .intern(db),
18345 )
18346 }
18347 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18348 let kind = node.kind(db);
18349 assert_eq!(
18350 kind,
18351 SyntaxKind::UsePathSingle,
18352 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18353 kind,
18354 SyntaxKind::UsePathSingle
18355 );
18356 Self { node }
18357 }
18358 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18359 let kind = node.kind(db);
18360 if kind == SyntaxKind::UsePathSingle {
18361 Some(Self::from_syntax_node(db, node))
18362 } else {
18363 None
18364 }
18365 }
18366 fn as_syntax_node(&self) -> SyntaxNode {
18367 self.node
18368 }
18369 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18370 UsePathSinglePtr(self.node.stable_ptr(db))
18371 }
18372}
18373#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18374pub struct UsePathMulti {
18375 node: SyntaxNode,
18376}
18377impl UsePathMulti {
18378 pub const INDEX_LBRACE: usize = 0;
18379 pub const INDEX_USE_PATHS: usize = 1;
18380 pub const INDEX_RBRACE: usize = 2;
18381 pub fn new_green(
18382 db: &dyn SyntaxGroup,
18383 lbrace: TerminalLBraceGreen,
18384 use_paths: UsePathListGreen,
18385 rbrace: TerminalRBraceGreen,
18386 ) -> UsePathMultiGreen {
18387 let children = [lbrace.0, use_paths.0, rbrace.0];
18388 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18389 UsePathMultiGreen(
18390 Arc::new(GreenNode {
18391 kind: SyntaxKind::UsePathMulti,
18392 details: GreenNodeDetails::Node { children: children.into(), width },
18393 })
18394 .intern(db),
18395 )
18396 }
18397}
18398impl UsePathMulti {
18399 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
18400 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
18401 }
18402 pub fn use_paths(&self, db: &dyn SyntaxGroup) -> UsePathList {
18403 UsePathList::from_syntax_node(db, self.node.get_children(db)[1])
18404 }
18405 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
18406 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
18407 }
18408}
18409#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18410pub struct UsePathMultiPtr(pub SyntaxStablePtrId);
18411impl UsePathMultiPtr {}
18412impl TypedStablePtr for UsePathMultiPtr {
18413 type SyntaxNode = UsePathMulti;
18414 fn untyped(&self) -> SyntaxStablePtrId {
18415 self.0
18416 }
18417 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathMulti {
18418 UsePathMulti::from_syntax_node(db, self.0.lookup(db))
18419 }
18420}
18421impl From<UsePathMultiPtr> for SyntaxStablePtrId {
18422 fn from(ptr: UsePathMultiPtr) -> Self {
18423 ptr.untyped()
18424 }
18425}
18426#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18427pub struct UsePathMultiGreen(pub GreenId);
18428impl TypedSyntaxNode for UsePathMulti {
18429 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathMulti);
18430 type StablePtr = UsePathMultiPtr;
18431 type Green = UsePathMultiGreen;
18432 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18433 UsePathMultiGreen(
18434 Arc::new(GreenNode {
18435 kind: SyntaxKind::UsePathMulti,
18436 details: GreenNodeDetails::Node {
18437 children: [
18438 TerminalLBrace::missing(db).0,
18439 UsePathList::missing(db).0,
18440 TerminalRBrace::missing(db).0,
18441 ]
18442 .into(),
18443 width: TextWidth::default(),
18444 },
18445 })
18446 .intern(db),
18447 )
18448 }
18449 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18450 let kind = node.kind(db);
18451 assert_eq!(
18452 kind,
18453 SyntaxKind::UsePathMulti,
18454 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18455 kind,
18456 SyntaxKind::UsePathMulti
18457 );
18458 Self { node }
18459 }
18460 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18461 let kind = node.kind(db);
18462 if kind == SyntaxKind::UsePathMulti { Some(Self::from_syntax_node(db, node)) } else { None }
18463 }
18464 fn as_syntax_node(&self) -> SyntaxNode {
18465 self.node
18466 }
18467 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18468 UsePathMultiPtr(self.node.stable_ptr(db))
18469 }
18470}
18471#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18472pub struct UsePathStar {
18473 node: SyntaxNode,
18474}
18475impl UsePathStar {
18476 pub const INDEX_STAR: usize = 0;
18477 pub fn new_green(db: &dyn SyntaxGroup, star: TerminalMulGreen) -> UsePathStarGreen {
18478 let children = [star.0];
18479 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18480 UsePathStarGreen(
18481 Arc::new(GreenNode {
18482 kind: SyntaxKind::UsePathStar,
18483 details: GreenNodeDetails::Node { children: children.into(), width },
18484 })
18485 .intern(db),
18486 )
18487 }
18488}
18489impl UsePathStar {
18490 pub fn star(&self, db: &dyn SyntaxGroup) -> TerminalMul {
18491 TerminalMul::from_syntax_node(db, self.node.get_children(db)[0])
18492 }
18493}
18494#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18495pub struct UsePathStarPtr(pub SyntaxStablePtrId);
18496impl UsePathStarPtr {}
18497impl TypedStablePtr for UsePathStarPtr {
18498 type SyntaxNode = UsePathStar;
18499 fn untyped(&self) -> SyntaxStablePtrId {
18500 self.0
18501 }
18502 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathStar {
18503 UsePathStar::from_syntax_node(db, self.0.lookup(db))
18504 }
18505}
18506impl From<UsePathStarPtr> for SyntaxStablePtrId {
18507 fn from(ptr: UsePathStarPtr) -> Self {
18508 ptr.untyped()
18509 }
18510}
18511#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18512pub struct UsePathStarGreen(pub GreenId);
18513impl TypedSyntaxNode for UsePathStar {
18514 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathStar);
18515 type StablePtr = UsePathStarPtr;
18516 type Green = UsePathStarGreen;
18517 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18518 UsePathStarGreen(
18519 Arc::new(GreenNode {
18520 kind: SyntaxKind::UsePathStar,
18521 details: GreenNodeDetails::Node {
18522 children: [TerminalMul::missing(db).0].into(),
18523 width: TextWidth::default(),
18524 },
18525 })
18526 .intern(db),
18527 )
18528 }
18529 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18530 let kind = node.kind(db);
18531 assert_eq!(
18532 kind,
18533 SyntaxKind::UsePathStar,
18534 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18535 kind,
18536 SyntaxKind::UsePathStar
18537 );
18538 Self { node }
18539 }
18540 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18541 let kind = node.kind(db);
18542 if kind == SyntaxKind::UsePathStar { Some(Self::from_syntax_node(db, node)) } else { None }
18543 }
18544 fn as_syntax_node(&self) -> SyntaxNode {
18545 self.node
18546 }
18547 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18548 UsePathStarPtr(self.node.stable_ptr(db))
18549 }
18550}
18551#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18552pub struct UsePathList(ElementList<UsePath, 2>);
18553impl Deref for UsePathList {
18554 type Target = ElementList<UsePath, 2>;
18555 fn deref(&self) -> &Self::Target {
18556 &self.0
18557 }
18558}
18559impl UsePathList {
18560 pub fn new_green(
18561 db: &dyn SyntaxGroup,
18562 children: &[UsePathListElementOrSeparatorGreen],
18563 ) -> UsePathListGreen {
18564 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
18565 UsePathListGreen(
18566 Arc::new(GreenNode {
18567 kind: SyntaxKind::UsePathList,
18568 details: GreenNodeDetails::Node {
18569 children: children.iter().map(|x| x.id()).collect(),
18570 width,
18571 },
18572 })
18573 .intern(db),
18574 )
18575 }
18576}
18577#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18578pub struct UsePathListPtr(pub SyntaxStablePtrId);
18579impl TypedStablePtr for UsePathListPtr {
18580 type SyntaxNode = UsePathList;
18581 fn untyped(&self) -> SyntaxStablePtrId {
18582 self.0
18583 }
18584 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathList {
18585 UsePathList::from_syntax_node(db, self.0.lookup(db))
18586 }
18587}
18588impl From<UsePathListPtr> for SyntaxStablePtrId {
18589 fn from(ptr: UsePathListPtr) -> Self {
18590 ptr.untyped()
18591 }
18592}
18593#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18594pub enum UsePathListElementOrSeparatorGreen {
18595 Separator(TerminalCommaGreen),
18596 Element(UsePathGreen),
18597}
18598impl From<TerminalCommaGreen> for UsePathListElementOrSeparatorGreen {
18599 fn from(value: TerminalCommaGreen) -> Self {
18600 UsePathListElementOrSeparatorGreen::Separator(value)
18601 }
18602}
18603impl From<UsePathGreen> for UsePathListElementOrSeparatorGreen {
18604 fn from(value: UsePathGreen) -> Self {
18605 UsePathListElementOrSeparatorGreen::Element(value)
18606 }
18607}
18608impl UsePathListElementOrSeparatorGreen {
18609 fn id(&self) -> GreenId {
18610 match self {
18611 UsePathListElementOrSeparatorGreen::Separator(green) => green.0,
18612 UsePathListElementOrSeparatorGreen::Element(green) => green.0,
18613 }
18614 }
18615}
18616#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18617pub struct UsePathListGreen(pub GreenId);
18618impl TypedSyntaxNode for UsePathList {
18619 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathList);
18620 type StablePtr = UsePathListPtr;
18621 type Green = UsePathListGreen;
18622 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18623 UsePathListGreen(
18624 Arc::new(GreenNode {
18625 kind: SyntaxKind::UsePathList,
18626 details: GreenNodeDetails::Node {
18627 children: [].into(),
18628 width: TextWidth::default(),
18629 },
18630 })
18631 .intern(db),
18632 )
18633 }
18634 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18635 Self(ElementList::new(node))
18636 }
18637 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18638 if node.kind(db) == SyntaxKind::UsePathList {
18639 Some(Self(ElementList::new(node)))
18640 } else {
18641 None
18642 }
18643 }
18644 fn as_syntax_node(&self) -> SyntaxNode {
18645 self.node
18646 }
18647 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18648 UsePathListPtr(self.node.stable_ptr(db))
18649 }
18650}
18651#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18652pub struct AliasClause {
18653 node: SyntaxNode,
18654}
18655impl AliasClause {
18656 pub const INDEX_AS_KW: usize = 0;
18657 pub const INDEX_ALIAS: usize = 1;
18658 pub fn new_green(
18659 db: &dyn SyntaxGroup,
18660 as_kw: TerminalAsGreen,
18661 alias: TerminalIdentifierGreen,
18662 ) -> AliasClauseGreen {
18663 let children = [as_kw.0, alias.0];
18664 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18665 AliasClauseGreen(
18666 Arc::new(GreenNode {
18667 kind: SyntaxKind::AliasClause,
18668 details: GreenNodeDetails::Node { children: children.into(), width },
18669 })
18670 .intern(db),
18671 )
18672 }
18673}
18674impl AliasClause {
18675 pub fn as_kw(&self, db: &dyn SyntaxGroup) -> TerminalAs {
18676 TerminalAs::from_syntax_node(db, self.node.get_children(db)[0])
18677 }
18678 pub fn alias(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
18679 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
18680 }
18681}
18682#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18683pub struct AliasClausePtr(pub SyntaxStablePtrId);
18684impl AliasClausePtr {
18685 pub fn alias_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
18686 let ptr = self.0.lookup_intern(db);
18687 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18688 TerminalIdentifierGreen(key_fields[0])
18689 } else {
18690 panic!("Unexpected key field query on root.");
18691 }
18692 }
18693}
18694impl TypedStablePtr for AliasClausePtr {
18695 type SyntaxNode = AliasClause;
18696 fn untyped(&self) -> SyntaxStablePtrId {
18697 self.0
18698 }
18699 fn lookup(&self, db: &dyn SyntaxGroup) -> AliasClause {
18700 AliasClause::from_syntax_node(db, self.0.lookup(db))
18701 }
18702}
18703impl From<AliasClausePtr> for SyntaxStablePtrId {
18704 fn from(ptr: AliasClausePtr) -> Self {
18705 ptr.untyped()
18706 }
18707}
18708#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18709pub struct AliasClauseGreen(pub GreenId);
18710impl TypedSyntaxNode for AliasClause {
18711 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AliasClause);
18712 type StablePtr = AliasClausePtr;
18713 type Green = AliasClauseGreen;
18714 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18715 AliasClauseGreen(
18716 Arc::new(GreenNode {
18717 kind: SyntaxKind::AliasClause,
18718 details: GreenNodeDetails::Node {
18719 children: [TerminalAs::missing(db).0, TerminalIdentifier::missing(db).0].into(),
18720 width: TextWidth::default(),
18721 },
18722 })
18723 .intern(db),
18724 )
18725 }
18726 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18727 let kind = node.kind(db);
18728 assert_eq!(
18729 kind,
18730 SyntaxKind::AliasClause,
18731 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18732 kind,
18733 SyntaxKind::AliasClause
18734 );
18735 Self { node }
18736 }
18737 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18738 let kind = node.kind(db);
18739 if kind == SyntaxKind::AliasClause { Some(Self::from_syntax_node(db, node)) } else { None }
18740 }
18741 fn as_syntax_node(&self) -> SyntaxNode {
18742 self.node
18743 }
18744 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18745 AliasClausePtr(self.node.stable_ptr(db))
18746 }
18747}
18748#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18749pub enum OptionAliasClause {
18750 Empty(OptionAliasClauseEmpty),
18751 AliasClause(AliasClause),
18752}
18753#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18754pub struct OptionAliasClausePtr(pub SyntaxStablePtrId);
18755impl TypedStablePtr for OptionAliasClausePtr {
18756 type SyntaxNode = OptionAliasClause;
18757 fn untyped(&self) -> SyntaxStablePtrId {
18758 self.0
18759 }
18760 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
18761 OptionAliasClause::from_syntax_node(db, self.0.lookup(db))
18762 }
18763}
18764impl From<OptionAliasClausePtr> for SyntaxStablePtrId {
18765 fn from(ptr: OptionAliasClausePtr) -> Self {
18766 ptr.untyped()
18767 }
18768}
18769impl From<OptionAliasClauseEmptyPtr> for OptionAliasClausePtr {
18770 fn from(value: OptionAliasClauseEmptyPtr) -> Self {
18771 Self(value.0)
18772 }
18773}
18774impl From<AliasClausePtr> for OptionAliasClausePtr {
18775 fn from(value: AliasClausePtr) -> Self {
18776 Self(value.0)
18777 }
18778}
18779impl From<OptionAliasClauseEmptyGreen> for OptionAliasClauseGreen {
18780 fn from(value: OptionAliasClauseEmptyGreen) -> Self {
18781 Self(value.0)
18782 }
18783}
18784impl From<AliasClauseGreen> for OptionAliasClauseGreen {
18785 fn from(value: AliasClauseGreen) -> Self {
18786 Self(value.0)
18787 }
18788}
18789#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18790pub struct OptionAliasClauseGreen(pub GreenId);
18791impl TypedSyntaxNode for OptionAliasClause {
18792 const OPTIONAL_KIND: Option<SyntaxKind> = None;
18793 type StablePtr = OptionAliasClausePtr;
18794 type Green = OptionAliasClauseGreen;
18795 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18796 panic!("No missing variant.");
18797 }
18798 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18799 let kind = node.kind(db);
18800 match kind {
18801 SyntaxKind::OptionAliasClauseEmpty => {
18802 OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node))
18803 }
18804 SyntaxKind::AliasClause => {
18805 OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node))
18806 }
18807 _ => panic!(
18808 "Unexpected syntax kind {:?} when constructing {}.",
18809 kind, "OptionAliasClause"
18810 ),
18811 }
18812 }
18813 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18814 let kind = node.kind(db);
18815 match kind {
18816 SyntaxKind::OptionAliasClauseEmpty => {
18817 Some(OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node)))
18818 }
18819 SyntaxKind::AliasClause => {
18820 Some(OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node)))
18821 }
18822 _ => None,
18823 }
18824 }
18825 fn as_syntax_node(&self) -> SyntaxNode {
18826 match self {
18827 OptionAliasClause::Empty(x) => x.as_syntax_node(),
18828 OptionAliasClause::AliasClause(x) => x.as_syntax_node(),
18829 }
18830 }
18831 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18832 OptionAliasClausePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
18833 }
18834}
18835impl OptionAliasClause {
18836 pub fn is_variant(kind: SyntaxKind) -> bool {
18838 matches!(kind, SyntaxKind::OptionAliasClauseEmpty | SyntaxKind::AliasClause)
18839 }
18840}
18841#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18842pub struct OptionAliasClauseEmpty {
18843 node: SyntaxNode,
18844}
18845impl OptionAliasClauseEmpty {
18846 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAliasClauseEmptyGreen {
18847 let children = [];
18848 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
18849 OptionAliasClauseEmptyGreen(
18850 Arc::new(GreenNode {
18851 kind: SyntaxKind::OptionAliasClauseEmpty,
18852 details: GreenNodeDetails::Node { children: children.into(), width },
18853 })
18854 .intern(db),
18855 )
18856 }
18857}
18858impl OptionAliasClauseEmpty {}
18859#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18860pub struct OptionAliasClauseEmptyPtr(pub SyntaxStablePtrId);
18861impl OptionAliasClauseEmptyPtr {}
18862impl TypedStablePtr for OptionAliasClauseEmptyPtr {
18863 type SyntaxNode = OptionAliasClauseEmpty;
18864 fn untyped(&self) -> SyntaxStablePtrId {
18865 self.0
18866 }
18867 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClauseEmpty {
18868 OptionAliasClauseEmpty::from_syntax_node(db, self.0.lookup(db))
18869 }
18870}
18871impl From<OptionAliasClauseEmptyPtr> for SyntaxStablePtrId {
18872 fn from(ptr: OptionAliasClauseEmptyPtr) -> Self {
18873 ptr.untyped()
18874 }
18875}
18876#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18877pub struct OptionAliasClauseEmptyGreen(pub GreenId);
18878impl TypedSyntaxNode for OptionAliasClauseEmpty {
18879 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionAliasClauseEmpty);
18880 type StablePtr = OptionAliasClauseEmptyPtr;
18881 type Green = OptionAliasClauseEmptyGreen;
18882 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18883 OptionAliasClauseEmptyGreen(
18884 Arc::new(GreenNode {
18885 kind: SyntaxKind::OptionAliasClauseEmpty,
18886 details: GreenNodeDetails::Node {
18887 children: [].into(),
18888 width: TextWidth::default(),
18889 },
18890 })
18891 .intern(db),
18892 )
18893 }
18894 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18895 let kind = node.kind(db);
18896 assert_eq!(
18897 kind,
18898 SyntaxKind::OptionAliasClauseEmpty,
18899 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18900 kind,
18901 SyntaxKind::OptionAliasClauseEmpty
18902 );
18903 Self { node }
18904 }
18905 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18906 let kind = node.kind(db);
18907 if kind == SyntaxKind::OptionAliasClauseEmpty {
18908 Some(Self::from_syntax_node(db, node))
18909 } else {
18910 None
18911 }
18912 }
18913 fn as_syntax_node(&self) -> SyntaxNode {
18914 self.node
18915 }
18916 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
18917 OptionAliasClauseEmptyPtr(self.node.stable_ptr(db))
18918 }
18919}
18920#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18921pub enum GenericArg {
18922 Unnamed(GenericArgUnnamed),
18923 Named(GenericArgNamed),
18924}
18925#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18926pub struct GenericArgPtr(pub SyntaxStablePtrId);
18927impl TypedStablePtr for GenericArgPtr {
18928 type SyntaxNode = GenericArg;
18929 fn untyped(&self) -> SyntaxStablePtrId {
18930 self.0
18931 }
18932 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArg {
18933 GenericArg::from_syntax_node(db, self.0.lookup(db))
18934 }
18935}
18936impl From<GenericArgPtr> for SyntaxStablePtrId {
18937 fn from(ptr: GenericArgPtr) -> Self {
18938 ptr.untyped()
18939 }
18940}
18941impl From<GenericArgUnnamedPtr> for GenericArgPtr {
18942 fn from(value: GenericArgUnnamedPtr) -> Self {
18943 Self(value.0)
18944 }
18945}
18946impl From<GenericArgNamedPtr> for GenericArgPtr {
18947 fn from(value: GenericArgNamedPtr) -> Self {
18948 Self(value.0)
18949 }
18950}
18951impl From<GenericArgUnnamedGreen> for GenericArgGreen {
18952 fn from(value: GenericArgUnnamedGreen) -> Self {
18953 Self(value.0)
18954 }
18955}
18956impl From<GenericArgNamedGreen> for GenericArgGreen {
18957 fn from(value: GenericArgNamedGreen) -> Self {
18958 Self(value.0)
18959 }
18960}
18961#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18962pub struct GenericArgGreen(pub GreenId);
18963impl TypedSyntaxNode for GenericArg {
18964 const OPTIONAL_KIND: Option<SyntaxKind> = None;
18965 type StablePtr = GenericArgPtr;
18966 type Green = GenericArgGreen;
18967 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18968 panic!("No missing variant.");
18969 }
18970 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18971 let kind = node.kind(db);
18972 match kind {
18973 SyntaxKind::GenericArgUnnamed => {
18974 GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node))
18975 }
18976 SyntaxKind::GenericArgNamed => {
18977 GenericArg::Named(GenericArgNamed::from_syntax_node(db, node))
18978 }
18979 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArg"),
18980 }
18981 }
18982 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18983 let kind = node.kind(db);
18984 match kind {
18985 SyntaxKind::GenericArgUnnamed => {
18986 Some(GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node)))
18987 }
18988 SyntaxKind::GenericArgNamed => {
18989 Some(GenericArg::Named(GenericArgNamed::from_syntax_node(db, node)))
18990 }
18991 _ => None,
18992 }
18993 }
18994 fn as_syntax_node(&self) -> SyntaxNode {
18995 match self {
18996 GenericArg::Unnamed(x) => x.as_syntax_node(),
18997 GenericArg::Named(x) => x.as_syntax_node(),
18998 }
18999 }
19000 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19001 GenericArgPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
19002 }
19003}
19004impl GenericArg {
19005 pub fn is_variant(kind: SyntaxKind) -> bool {
19007 matches!(kind, SyntaxKind::GenericArgUnnamed | SyntaxKind::GenericArgNamed)
19008 }
19009}
19010#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19011pub struct GenericArgNamed {
19012 node: SyntaxNode,
19013}
19014impl GenericArgNamed {
19015 pub const INDEX_NAME: usize = 0;
19016 pub const INDEX_COLON: usize = 1;
19017 pub const INDEX_VALUE: usize = 2;
19018 pub fn new_green(
19019 db: &dyn SyntaxGroup,
19020 name: TerminalIdentifierGreen,
19021 colon: TerminalColonGreen,
19022 value: GenericArgValueGreen,
19023 ) -> GenericArgNamedGreen {
19024 let children = [name.0, colon.0, value.0];
19025 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19026 GenericArgNamedGreen(
19027 Arc::new(GreenNode {
19028 kind: SyntaxKind::GenericArgNamed,
19029 details: GreenNodeDetails::Node { children: children.into(), width },
19030 })
19031 .intern(db),
19032 )
19033 }
19034}
19035impl GenericArgNamed {
19036 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19037 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
19038 }
19039 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19040 TerminalColon::from_syntax_node(db, self.node.get_children(db)[1])
19041 }
19042 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19043 GenericArgValue::from_syntax_node(db, self.node.get_children(db)[2])
19044 }
19045}
19046#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19047pub struct GenericArgNamedPtr(pub SyntaxStablePtrId);
19048impl GenericArgNamedPtr {}
19049impl TypedStablePtr for GenericArgNamedPtr {
19050 type SyntaxNode = GenericArgNamed;
19051 fn untyped(&self) -> SyntaxStablePtrId {
19052 self.0
19053 }
19054 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgNamed {
19055 GenericArgNamed::from_syntax_node(db, self.0.lookup(db))
19056 }
19057}
19058impl From<GenericArgNamedPtr> for SyntaxStablePtrId {
19059 fn from(ptr: GenericArgNamedPtr) -> Self {
19060 ptr.untyped()
19061 }
19062}
19063#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19064pub struct GenericArgNamedGreen(pub GreenId);
19065impl TypedSyntaxNode for GenericArgNamed {
19066 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgNamed);
19067 type StablePtr = GenericArgNamedPtr;
19068 type Green = GenericArgNamedGreen;
19069 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19070 GenericArgNamedGreen(
19071 Arc::new(GreenNode {
19072 kind: SyntaxKind::GenericArgNamed,
19073 details: GreenNodeDetails::Node {
19074 children: [
19075 TerminalIdentifier::missing(db).0,
19076 TerminalColon::missing(db).0,
19077 GenericArgValue::missing(db).0,
19078 ]
19079 .into(),
19080 width: TextWidth::default(),
19081 },
19082 })
19083 .intern(db),
19084 )
19085 }
19086 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19087 let kind = node.kind(db);
19088 assert_eq!(
19089 kind,
19090 SyntaxKind::GenericArgNamed,
19091 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19092 kind,
19093 SyntaxKind::GenericArgNamed
19094 );
19095 Self { node }
19096 }
19097 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19098 let kind = node.kind(db);
19099 if kind == SyntaxKind::GenericArgNamed {
19100 Some(Self::from_syntax_node(db, node))
19101 } else {
19102 None
19103 }
19104 }
19105 fn as_syntax_node(&self) -> SyntaxNode {
19106 self.node
19107 }
19108 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19109 GenericArgNamedPtr(self.node.stable_ptr(db))
19110 }
19111}
19112#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19113pub struct GenericArgUnnamed {
19114 node: SyntaxNode,
19115}
19116impl GenericArgUnnamed {
19117 pub const INDEX_VALUE: usize = 0;
19118 pub fn new_green(db: &dyn SyntaxGroup, value: GenericArgValueGreen) -> GenericArgUnnamedGreen {
19119 let children = [value.0];
19120 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19121 GenericArgUnnamedGreen(
19122 Arc::new(GreenNode {
19123 kind: SyntaxKind::GenericArgUnnamed,
19124 details: GreenNodeDetails::Node { children: children.into(), width },
19125 })
19126 .intern(db),
19127 )
19128 }
19129}
19130impl GenericArgUnnamed {
19131 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19132 GenericArgValue::from_syntax_node(db, self.node.get_children(db)[0])
19133 }
19134}
19135#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19136pub struct GenericArgUnnamedPtr(pub SyntaxStablePtrId);
19137impl GenericArgUnnamedPtr {}
19138impl TypedStablePtr for GenericArgUnnamedPtr {
19139 type SyntaxNode = GenericArgUnnamed;
19140 fn untyped(&self) -> SyntaxStablePtrId {
19141 self.0
19142 }
19143 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgUnnamed {
19144 GenericArgUnnamed::from_syntax_node(db, self.0.lookup(db))
19145 }
19146}
19147impl From<GenericArgUnnamedPtr> for SyntaxStablePtrId {
19148 fn from(ptr: GenericArgUnnamedPtr) -> Self {
19149 ptr.untyped()
19150 }
19151}
19152#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19153pub struct GenericArgUnnamedGreen(pub GreenId);
19154impl TypedSyntaxNode for GenericArgUnnamed {
19155 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgUnnamed);
19156 type StablePtr = GenericArgUnnamedPtr;
19157 type Green = GenericArgUnnamedGreen;
19158 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19159 GenericArgUnnamedGreen(
19160 Arc::new(GreenNode {
19161 kind: SyntaxKind::GenericArgUnnamed,
19162 details: GreenNodeDetails::Node {
19163 children: [GenericArgValue::missing(db).0].into(),
19164 width: TextWidth::default(),
19165 },
19166 })
19167 .intern(db),
19168 )
19169 }
19170 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19171 let kind = node.kind(db);
19172 assert_eq!(
19173 kind,
19174 SyntaxKind::GenericArgUnnamed,
19175 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19176 kind,
19177 SyntaxKind::GenericArgUnnamed
19178 );
19179 Self { node }
19180 }
19181 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19182 let kind = node.kind(db);
19183 if kind == SyntaxKind::GenericArgUnnamed {
19184 Some(Self::from_syntax_node(db, node))
19185 } else {
19186 None
19187 }
19188 }
19189 fn as_syntax_node(&self) -> SyntaxNode {
19190 self.node
19191 }
19192 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19193 GenericArgUnnamedPtr(self.node.stable_ptr(db))
19194 }
19195}
19196#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19197pub enum GenericArgValue {
19198 Expr(GenericArgValueExpr),
19199 Underscore(TerminalUnderscore),
19200}
19201#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19202pub struct GenericArgValuePtr(pub SyntaxStablePtrId);
19203impl TypedStablePtr for GenericArgValuePtr {
19204 type SyntaxNode = GenericArgValue;
19205 fn untyped(&self) -> SyntaxStablePtrId {
19206 self.0
19207 }
19208 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19209 GenericArgValue::from_syntax_node(db, self.0.lookup(db))
19210 }
19211}
19212impl From<GenericArgValuePtr> for SyntaxStablePtrId {
19213 fn from(ptr: GenericArgValuePtr) -> Self {
19214 ptr.untyped()
19215 }
19216}
19217impl From<GenericArgValueExprPtr> for GenericArgValuePtr {
19218 fn from(value: GenericArgValueExprPtr) -> Self {
19219 Self(value.0)
19220 }
19221}
19222impl From<TerminalUnderscorePtr> for GenericArgValuePtr {
19223 fn from(value: TerminalUnderscorePtr) -> Self {
19224 Self(value.0)
19225 }
19226}
19227impl From<GenericArgValueExprGreen> for GenericArgValueGreen {
19228 fn from(value: GenericArgValueExprGreen) -> Self {
19229 Self(value.0)
19230 }
19231}
19232impl From<TerminalUnderscoreGreen> for GenericArgValueGreen {
19233 fn from(value: TerminalUnderscoreGreen) -> Self {
19234 Self(value.0)
19235 }
19236}
19237#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19238pub struct GenericArgValueGreen(pub GreenId);
19239impl TypedSyntaxNode for GenericArgValue {
19240 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19241 type StablePtr = GenericArgValuePtr;
19242 type Green = GenericArgValueGreen;
19243 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19244 panic!("No missing variant.");
19245 }
19246 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19247 let kind = node.kind(db);
19248 match kind {
19249 SyntaxKind::GenericArgValueExpr => {
19250 GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node))
19251 }
19252 SyntaxKind::TerminalUnderscore => {
19253 GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node))
19254 }
19255 _ => {
19256 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArgValue")
19257 }
19258 }
19259 }
19260 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19261 let kind = node.kind(db);
19262 match kind {
19263 SyntaxKind::GenericArgValueExpr => {
19264 Some(GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node)))
19265 }
19266 SyntaxKind::TerminalUnderscore => {
19267 Some(GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
19268 }
19269 _ => None,
19270 }
19271 }
19272 fn as_syntax_node(&self) -> SyntaxNode {
19273 match self {
19274 GenericArgValue::Expr(x) => x.as_syntax_node(),
19275 GenericArgValue::Underscore(x) => x.as_syntax_node(),
19276 }
19277 }
19278 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19279 GenericArgValuePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
19280 }
19281}
19282impl GenericArgValue {
19283 pub fn is_variant(kind: SyntaxKind) -> bool {
19285 matches!(kind, SyntaxKind::GenericArgValueExpr | SyntaxKind::TerminalUnderscore)
19286 }
19287}
19288#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19289pub struct GenericArgValueExpr {
19290 node: SyntaxNode,
19291}
19292impl GenericArgValueExpr {
19293 pub const INDEX_EXPR: usize = 0;
19294 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> GenericArgValueExprGreen {
19295 let children = [expr.0];
19296 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19297 GenericArgValueExprGreen(
19298 Arc::new(GreenNode {
19299 kind: SyntaxKind::GenericArgValueExpr,
19300 details: GreenNodeDetails::Node { children: children.into(), width },
19301 })
19302 .intern(db),
19303 )
19304 }
19305}
19306impl GenericArgValueExpr {
19307 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
19308 Expr::from_syntax_node(db, self.node.get_children(db)[0])
19309 }
19310}
19311#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19312pub struct GenericArgValueExprPtr(pub SyntaxStablePtrId);
19313impl GenericArgValueExprPtr {}
19314impl TypedStablePtr for GenericArgValueExprPtr {
19315 type SyntaxNode = GenericArgValueExpr;
19316 fn untyped(&self) -> SyntaxStablePtrId {
19317 self.0
19318 }
19319 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValueExpr {
19320 GenericArgValueExpr::from_syntax_node(db, self.0.lookup(db))
19321 }
19322}
19323impl From<GenericArgValueExprPtr> for SyntaxStablePtrId {
19324 fn from(ptr: GenericArgValueExprPtr) -> Self {
19325 ptr.untyped()
19326 }
19327}
19328#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19329pub struct GenericArgValueExprGreen(pub GreenId);
19330impl TypedSyntaxNode for GenericArgValueExpr {
19331 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgValueExpr);
19332 type StablePtr = GenericArgValueExprPtr;
19333 type Green = GenericArgValueExprGreen;
19334 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19335 GenericArgValueExprGreen(
19336 Arc::new(GreenNode {
19337 kind: SyntaxKind::GenericArgValueExpr,
19338 details: GreenNodeDetails::Node {
19339 children: [Expr::missing(db).0].into(),
19340 width: TextWidth::default(),
19341 },
19342 })
19343 .intern(db),
19344 )
19345 }
19346 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19347 let kind = node.kind(db);
19348 assert_eq!(
19349 kind,
19350 SyntaxKind::GenericArgValueExpr,
19351 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19352 kind,
19353 SyntaxKind::GenericArgValueExpr
19354 );
19355 Self { node }
19356 }
19357 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19358 let kind = node.kind(db);
19359 if kind == SyntaxKind::GenericArgValueExpr {
19360 Some(Self::from_syntax_node(db, node))
19361 } else {
19362 None
19363 }
19364 }
19365 fn as_syntax_node(&self) -> SyntaxNode {
19366 self.node
19367 }
19368 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19369 GenericArgValueExprPtr(self.node.stable_ptr(db))
19370 }
19371}
19372#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19373pub struct GenericArgs {
19374 node: SyntaxNode,
19375}
19376impl GenericArgs {
19377 pub const INDEX_LANGLE: usize = 0;
19378 pub const INDEX_GENERIC_ARGS: usize = 1;
19379 pub const INDEX_RANGLE: usize = 2;
19380 pub fn new_green(
19381 db: &dyn SyntaxGroup,
19382 langle: TerminalLTGreen,
19383 generic_args: GenericArgListGreen,
19384 rangle: TerminalGTGreen,
19385 ) -> GenericArgsGreen {
19386 let children = [langle.0, generic_args.0, rangle.0];
19387 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19388 GenericArgsGreen(
19389 Arc::new(GreenNode {
19390 kind: SyntaxKind::GenericArgs,
19391 details: GreenNodeDetails::Node { children: children.into(), width },
19392 })
19393 .intern(db),
19394 )
19395 }
19396}
19397impl GenericArgs {
19398 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
19399 TerminalLT::from_syntax_node(db, self.node.get_children(db)[0])
19400 }
19401 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19402 GenericArgList::from_syntax_node(db, self.node.get_children(db)[1])
19403 }
19404 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
19405 TerminalGT::from_syntax_node(db, self.node.get_children(db)[2])
19406 }
19407}
19408#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19409pub struct GenericArgsPtr(pub SyntaxStablePtrId);
19410impl GenericArgsPtr {}
19411impl TypedStablePtr for GenericArgsPtr {
19412 type SyntaxNode = GenericArgs;
19413 fn untyped(&self) -> SyntaxStablePtrId {
19414 self.0
19415 }
19416 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgs {
19417 GenericArgs::from_syntax_node(db, self.0.lookup(db))
19418 }
19419}
19420impl From<GenericArgsPtr> for SyntaxStablePtrId {
19421 fn from(ptr: GenericArgsPtr) -> Self {
19422 ptr.untyped()
19423 }
19424}
19425#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19426pub struct GenericArgsGreen(pub GreenId);
19427impl TypedSyntaxNode for GenericArgs {
19428 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgs);
19429 type StablePtr = GenericArgsPtr;
19430 type Green = GenericArgsGreen;
19431 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19432 GenericArgsGreen(
19433 Arc::new(GreenNode {
19434 kind: SyntaxKind::GenericArgs,
19435 details: GreenNodeDetails::Node {
19436 children: [
19437 TerminalLT::missing(db).0,
19438 GenericArgList::missing(db).0,
19439 TerminalGT::missing(db).0,
19440 ]
19441 .into(),
19442 width: TextWidth::default(),
19443 },
19444 })
19445 .intern(db),
19446 )
19447 }
19448 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19449 let kind = node.kind(db);
19450 assert_eq!(
19451 kind,
19452 SyntaxKind::GenericArgs,
19453 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19454 kind,
19455 SyntaxKind::GenericArgs
19456 );
19457 Self { node }
19458 }
19459 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19460 let kind = node.kind(db);
19461 if kind == SyntaxKind::GenericArgs { Some(Self::from_syntax_node(db, node)) } else { None }
19462 }
19463 fn as_syntax_node(&self) -> SyntaxNode {
19464 self.node
19465 }
19466 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19467 GenericArgsPtr(self.node.stable_ptr(db))
19468 }
19469}
19470#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19471pub struct GenericArgList(ElementList<GenericArg, 2>);
19472impl Deref for GenericArgList {
19473 type Target = ElementList<GenericArg, 2>;
19474 fn deref(&self) -> &Self::Target {
19475 &self.0
19476 }
19477}
19478impl GenericArgList {
19479 pub fn new_green(
19480 db: &dyn SyntaxGroup,
19481 children: &[GenericArgListElementOrSeparatorGreen],
19482 ) -> GenericArgListGreen {
19483 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
19484 GenericArgListGreen(
19485 Arc::new(GreenNode {
19486 kind: SyntaxKind::GenericArgList,
19487 details: GreenNodeDetails::Node {
19488 children: children.iter().map(|x| x.id()).collect(),
19489 width,
19490 },
19491 })
19492 .intern(db),
19493 )
19494 }
19495}
19496#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19497pub struct GenericArgListPtr(pub SyntaxStablePtrId);
19498impl TypedStablePtr for GenericArgListPtr {
19499 type SyntaxNode = GenericArgList;
19500 fn untyped(&self) -> SyntaxStablePtrId {
19501 self.0
19502 }
19503 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19504 GenericArgList::from_syntax_node(db, self.0.lookup(db))
19505 }
19506}
19507impl From<GenericArgListPtr> for SyntaxStablePtrId {
19508 fn from(ptr: GenericArgListPtr) -> Self {
19509 ptr.untyped()
19510 }
19511}
19512#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19513pub enum GenericArgListElementOrSeparatorGreen {
19514 Separator(TerminalCommaGreen),
19515 Element(GenericArgGreen),
19516}
19517impl From<TerminalCommaGreen> for GenericArgListElementOrSeparatorGreen {
19518 fn from(value: TerminalCommaGreen) -> Self {
19519 GenericArgListElementOrSeparatorGreen::Separator(value)
19520 }
19521}
19522impl From<GenericArgGreen> for GenericArgListElementOrSeparatorGreen {
19523 fn from(value: GenericArgGreen) -> Self {
19524 GenericArgListElementOrSeparatorGreen::Element(value)
19525 }
19526}
19527impl GenericArgListElementOrSeparatorGreen {
19528 fn id(&self) -> GreenId {
19529 match self {
19530 GenericArgListElementOrSeparatorGreen::Separator(green) => green.0,
19531 GenericArgListElementOrSeparatorGreen::Element(green) => green.0,
19532 }
19533 }
19534}
19535#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19536pub struct GenericArgListGreen(pub GreenId);
19537impl TypedSyntaxNode for GenericArgList {
19538 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgList);
19539 type StablePtr = GenericArgListPtr;
19540 type Green = GenericArgListGreen;
19541 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19542 GenericArgListGreen(
19543 Arc::new(GreenNode {
19544 kind: SyntaxKind::GenericArgList,
19545 details: GreenNodeDetails::Node {
19546 children: [].into(),
19547 width: TextWidth::default(),
19548 },
19549 })
19550 .intern(db),
19551 )
19552 }
19553 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19554 Self(ElementList::new(node))
19555 }
19556 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19557 if node.kind(db) == SyntaxKind::GenericArgList {
19558 Some(Self(ElementList::new(node)))
19559 } else {
19560 None
19561 }
19562 }
19563 fn as_syntax_node(&self) -> SyntaxNode {
19564 self.node
19565 }
19566 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19567 GenericArgListPtr(self.node.stable_ptr(db))
19568 }
19569}
19570#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19571pub struct AssociatedItemConstraint {
19572 node: SyntaxNode,
19573}
19574impl AssociatedItemConstraint {
19575 pub const INDEX_ITEM: usize = 0;
19576 pub const INDEX_COLON: usize = 1;
19577 pub const INDEX_VALUE: usize = 2;
19578 pub fn new_green(
19579 db: &dyn SyntaxGroup,
19580 item: TerminalIdentifierGreen,
19581 colon: TerminalColonGreen,
19582 value: ExprGreen,
19583 ) -> AssociatedItemConstraintGreen {
19584 let children = [item.0, colon.0, value.0];
19585 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19586 AssociatedItemConstraintGreen(
19587 Arc::new(GreenNode {
19588 kind: SyntaxKind::AssociatedItemConstraint,
19589 details: GreenNodeDetails::Node { children: children.into(), width },
19590 })
19591 .intern(db),
19592 )
19593 }
19594}
19595impl AssociatedItemConstraint {
19596 pub fn item(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19597 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
19598 }
19599 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19600 TerminalColon::from_syntax_node(db, self.node.get_children(db)[1])
19601 }
19602 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
19603 Expr::from_syntax_node(db, self.node.get_children(db)[2])
19604 }
19605}
19606#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19607pub struct AssociatedItemConstraintPtr(pub SyntaxStablePtrId);
19608impl AssociatedItemConstraintPtr {}
19609impl TypedStablePtr for AssociatedItemConstraintPtr {
19610 type SyntaxNode = AssociatedItemConstraint;
19611 fn untyped(&self) -> SyntaxStablePtrId {
19612 self.0
19613 }
19614 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraint {
19615 AssociatedItemConstraint::from_syntax_node(db, self.0.lookup(db))
19616 }
19617}
19618impl From<AssociatedItemConstraintPtr> for SyntaxStablePtrId {
19619 fn from(ptr: AssociatedItemConstraintPtr) -> Self {
19620 ptr.untyped()
19621 }
19622}
19623#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19624pub struct AssociatedItemConstraintGreen(pub GreenId);
19625impl TypedSyntaxNode for AssociatedItemConstraint {
19626 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraint);
19627 type StablePtr = AssociatedItemConstraintPtr;
19628 type Green = AssociatedItemConstraintGreen;
19629 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19630 AssociatedItemConstraintGreen(
19631 Arc::new(GreenNode {
19632 kind: SyntaxKind::AssociatedItemConstraint,
19633 details: GreenNodeDetails::Node {
19634 children: [
19635 TerminalIdentifier::missing(db).0,
19636 TerminalColon::missing(db).0,
19637 Expr::missing(db).0,
19638 ]
19639 .into(),
19640 width: TextWidth::default(),
19641 },
19642 })
19643 .intern(db),
19644 )
19645 }
19646 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19647 let kind = node.kind(db);
19648 assert_eq!(
19649 kind,
19650 SyntaxKind::AssociatedItemConstraint,
19651 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19652 kind,
19653 SyntaxKind::AssociatedItemConstraint
19654 );
19655 Self { node }
19656 }
19657 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19658 let kind = node.kind(db);
19659 if kind == SyntaxKind::AssociatedItemConstraint {
19660 Some(Self::from_syntax_node(db, node))
19661 } else {
19662 None
19663 }
19664 }
19665 fn as_syntax_node(&self) -> SyntaxNode {
19666 self.node
19667 }
19668 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19669 AssociatedItemConstraintPtr(self.node.stable_ptr(db))
19670 }
19671}
19672#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19673pub struct AssociatedItemConstraints {
19674 node: SyntaxNode,
19675}
19676impl AssociatedItemConstraints {
19677 pub const INDEX_LBRACK: usize = 0;
19678 pub const INDEX_ASSOCIATED_ITEM_CONSTRAINTS: usize = 1;
19679 pub const INDEX_RBRACK: usize = 2;
19680 pub fn new_green(
19681 db: &dyn SyntaxGroup,
19682 lbrack: TerminalLBrackGreen,
19683 associated_item_constraints: AssociatedItemConstraintListGreen,
19684 rbrack: TerminalRBrackGreen,
19685 ) -> AssociatedItemConstraintsGreen {
19686 let children = [lbrack.0, associated_item_constraints.0, rbrack.0];
19687 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19688 AssociatedItemConstraintsGreen(
19689 Arc::new(GreenNode {
19690 kind: SyntaxKind::AssociatedItemConstraints,
19691 details: GreenNodeDetails::Node { children: children.into(), width },
19692 })
19693 .intern(db),
19694 )
19695 }
19696}
19697impl AssociatedItemConstraints {
19698 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
19699 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
19700 }
19701 pub fn associated_item_constraints(
19702 &self,
19703 db: &dyn SyntaxGroup,
19704 ) -> AssociatedItemConstraintList {
19705 AssociatedItemConstraintList::from_syntax_node(db, self.node.get_children(db)[1])
19706 }
19707 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
19708 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[2])
19709 }
19710}
19711#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19712pub struct AssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
19713impl AssociatedItemConstraintsPtr {}
19714impl TypedStablePtr for AssociatedItemConstraintsPtr {
19715 type SyntaxNode = AssociatedItemConstraints;
19716 fn untyped(&self) -> SyntaxStablePtrId {
19717 self.0
19718 }
19719 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraints {
19720 AssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
19721 }
19722}
19723impl From<AssociatedItemConstraintsPtr> for SyntaxStablePtrId {
19724 fn from(ptr: AssociatedItemConstraintsPtr) -> Self {
19725 ptr.untyped()
19726 }
19727}
19728#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19729pub struct AssociatedItemConstraintsGreen(pub GreenId);
19730impl TypedSyntaxNode for AssociatedItemConstraints {
19731 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraints);
19732 type StablePtr = AssociatedItemConstraintsPtr;
19733 type Green = AssociatedItemConstraintsGreen;
19734 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19735 AssociatedItemConstraintsGreen(
19736 Arc::new(GreenNode {
19737 kind: SyntaxKind::AssociatedItemConstraints,
19738 details: GreenNodeDetails::Node {
19739 children: [
19740 TerminalLBrack::missing(db).0,
19741 AssociatedItemConstraintList::missing(db).0,
19742 TerminalRBrack::missing(db).0,
19743 ]
19744 .into(),
19745 width: TextWidth::default(),
19746 },
19747 })
19748 .intern(db),
19749 )
19750 }
19751 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19752 let kind = node.kind(db);
19753 assert_eq!(
19754 kind,
19755 SyntaxKind::AssociatedItemConstraints,
19756 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19757 kind,
19758 SyntaxKind::AssociatedItemConstraints
19759 );
19760 Self { node }
19761 }
19762 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19763 let kind = node.kind(db);
19764 if kind == SyntaxKind::AssociatedItemConstraints {
19765 Some(Self::from_syntax_node(db, node))
19766 } else {
19767 None
19768 }
19769 }
19770 fn as_syntax_node(&self) -> SyntaxNode {
19771 self.node
19772 }
19773 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19774 AssociatedItemConstraintsPtr(self.node.stable_ptr(db))
19775 }
19776}
19777#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19778pub struct AssociatedItemConstraintList(ElementList<AssociatedItemConstraint, 2>);
19779impl Deref for AssociatedItemConstraintList {
19780 type Target = ElementList<AssociatedItemConstraint, 2>;
19781 fn deref(&self) -> &Self::Target {
19782 &self.0
19783 }
19784}
19785impl AssociatedItemConstraintList {
19786 pub fn new_green(
19787 db: &dyn SyntaxGroup,
19788 children: &[AssociatedItemConstraintListElementOrSeparatorGreen],
19789 ) -> AssociatedItemConstraintListGreen {
19790 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
19791 AssociatedItemConstraintListGreen(
19792 Arc::new(GreenNode {
19793 kind: SyntaxKind::AssociatedItemConstraintList,
19794 details: GreenNodeDetails::Node {
19795 children: children.iter().map(|x| x.id()).collect(),
19796 width,
19797 },
19798 })
19799 .intern(db),
19800 )
19801 }
19802}
19803#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19804pub struct AssociatedItemConstraintListPtr(pub SyntaxStablePtrId);
19805impl TypedStablePtr for AssociatedItemConstraintListPtr {
19806 type SyntaxNode = AssociatedItemConstraintList;
19807 fn untyped(&self) -> SyntaxStablePtrId {
19808 self.0
19809 }
19810 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraintList {
19811 AssociatedItemConstraintList::from_syntax_node(db, self.0.lookup(db))
19812 }
19813}
19814impl From<AssociatedItemConstraintListPtr> for SyntaxStablePtrId {
19815 fn from(ptr: AssociatedItemConstraintListPtr) -> Self {
19816 ptr.untyped()
19817 }
19818}
19819#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19820pub enum AssociatedItemConstraintListElementOrSeparatorGreen {
19821 Separator(TerminalCommaGreen),
19822 Element(AssociatedItemConstraintGreen),
19823}
19824impl From<TerminalCommaGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
19825 fn from(value: TerminalCommaGreen) -> Self {
19826 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(value)
19827 }
19828}
19829impl From<AssociatedItemConstraintGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
19830 fn from(value: AssociatedItemConstraintGreen) -> Self {
19831 AssociatedItemConstraintListElementOrSeparatorGreen::Element(value)
19832 }
19833}
19834impl AssociatedItemConstraintListElementOrSeparatorGreen {
19835 fn id(&self) -> GreenId {
19836 match self {
19837 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(green) => green.0,
19838 AssociatedItemConstraintListElementOrSeparatorGreen::Element(green) => green.0,
19839 }
19840 }
19841}
19842#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19843pub struct AssociatedItemConstraintListGreen(pub GreenId);
19844impl TypedSyntaxNode for AssociatedItemConstraintList {
19845 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraintList);
19846 type StablePtr = AssociatedItemConstraintListPtr;
19847 type Green = AssociatedItemConstraintListGreen;
19848 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19849 AssociatedItemConstraintListGreen(
19850 Arc::new(GreenNode {
19851 kind: SyntaxKind::AssociatedItemConstraintList,
19852 details: GreenNodeDetails::Node {
19853 children: [].into(),
19854 width: TextWidth::default(),
19855 },
19856 })
19857 .intern(db),
19858 )
19859 }
19860 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19861 Self(ElementList::new(node))
19862 }
19863 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19864 if node.kind(db) == SyntaxKind::AssociatedItemConstraintList {
19865 Some(Self(ElementList::new(node)))
19866 } else {
19867 None
19868 }
19869 }
19870 fn as_syntax_node(&self) -> SyntaxNode {
19871 self.node
19872 }
19873 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19874 AssociatedItemConstraintListPtr(self.node.stable_ptr(db))
19875 }
19876}
19877#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19878pub enum OptionAssociatedItemConstraints {
19879 Empty(OptionAssociatedItemConstraintsEmpty),
19880 AssociatedItemConstraints(AssociatedItemConstraints),
19881}
19882#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19883pub struct OptionAssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
19884impl TypedStablePtr for OptionAssociatedItemConstraintsPtr {
19885 type SyntaxNode = OptionAssociatedItemConstraints;
19886 fn untyped(&self) -> SyntaxStablePtrId {
19887 self.0
19888 }
19889 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
19890 OptionAssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
19891 }
19892}
19893impl From<OptionAssociatedItemConstraintsPtr> for SyntaxStablePtrId {
19894 fn from(ptr: OptionAssociatedItemConstraintsPtr) -> Self {
19895 ptr.untyped()
19896 }
19897}
19898impl From<OptionAssociatedItemConstraintsEmptyPtr> for OptionAssociatedItemConstraintsPtr {
19899 fn from(value: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
19900 Self(value.0)
19901 }
19902}
19903impl From<AssociatedItemConstraintsPtr> for OptionAssociatedItemConstraintsPtr {
19904 fn from(value: AssociatedItemConstraintsPtr) -> Self {
19905 Self(value.0)
19906 }
19907}
19908impl From<OptionAssociatedItemConstraintsEmptyGreen> for OptionAssociatedItemConstraintsGreen {
19909 fn from(value: OptionAssociatedItemConstraintsEmptyGreen) -> Self {
19910 Self(value.0)
19911 }
19912}
19913impl From<AssociatedItemConstraintsGreen> for OptionAssociatedItemConstraintsGreen {
19914 fn from(value: AssociatedItemConstraintsGreen) -> Self {
19915 Self(value.0)
19916 }
19917}
19918#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19919pub struct OptionAssociatedItemConstraintsGreen(pub GreenId);
19920impl TypedSyntaxNode for OptionAssociatedItemConstraints {
19921 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19922 type StablePtr = OptionAssociatedItemConstraintsPtr;
19923 type Green = OptionAssociatedItemConstraintsGreen;
19924 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19925 panic!("No missing variant.");
19926 }
19927 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19928 let kind = node.kind(db);
19929 match kind {
19930 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
19931 OptionAssociatedItemConstraints::Empty(
19932 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
19933 )
19934 }
19935 SyntaxKind::AssociatedItemConstraints => {
19936 OptionAssociatedItemConstraints::AssociatedItemConstraints(
19937 AssociatedItemConstraints::from_syntax_node(db, node),
19938 )
19939 }
19940 _ => panic!(
19941 "Unexpected syntax kind {:?} when constructing {}.",
19942 kind, "OptionAssociatedItemConstraints"
19943 ),
19944 }
19945 }
19946 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19947 let kind = node.kind(db);
19948 match kind {
19949 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
19950 Some(OptionAssociatedItemConstraints::Empty(
19951 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
19952 ))
19953 }
19954 SyntaxKind::AssociatedItemConstraints => {
19955 Some(OptionAssociatedItemConstraints::AssociatedItemConstraints(
19956 AssociatedItemConstraints::from_syntax_node(db, node),
19957 ))
19958 }
19959 _ => None,
19960 }
19961 }
19962 fn as_syntax_node(&self) -> SyntaxNode {
19963 match self {
19964 OptionAssociatedItemConstraints::Empty(x) => x.as_syntax_node(),
19965 OptionAssociatedItemConstraints::AssociatedItemConstraints(x) => x.as_syntax_node(),
19966 }
19967 }
19968 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
19969 OptionAssociatedItemConstraintsPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
19970 }
19971}
19972impl OptionAssociatedItemConstraints {
19973 pub fn is_variant(kind: SyntaxKind) -> bool {
19975 matches!(
19976 kind,
19977 SyntaxKind::OptionAssociatedItemConstraintsEmpty
19978 | SyntaxKind::AssociatedItemConstraints
19979 )
19980 }
19981}
19982#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19983pub struct OptionAssociatedItemConstraintsEmpty {
19984 node: SyntaxNode,
19985}
19986impl OptionAssociatedItemConstraintsEmpty {
19987 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmptyGreen {
19988 let children = [];
19989 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
19990 OptionAssociatedItemConstraintsEmptyGreen(
19991 Arc::new(GreenNode {
19992 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
19993 details: GreenNodeDetails::Node { children: children.into(), width },
19994 })
19995 .intern(db),
19996 )
19997 }
19998}
19999impl OptionAssociatedItemConstraintsEmpty {}
20000#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20001pub struct OptionAssociatedItemConstraintsEmptyPtr(pub SyntaxStablePtrId);
20002impl OptionAssociatedItemConstraintsEmptyPtr {}
20003impl TypedStablePtr for OptionAssociatedItemConstraintsEmptyPtr {
20004 type SyntaxNode = OptionAssociatedItemConstraintsEmpty;
20005 fn untyped(&self) -> SyntaxStablePtrId {
20006 self.0
20007 }
20008 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmpty {
20009 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, self.0.lookup(db))
20010 }
20011}
20012impl From<OptionAssociatedItemConstraintsEmptyPtr> for SyntaxStablePtrId {
20013 fn from(ptr: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
20014 ptr.untyped()
20015 }
20016}
20017#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20018pub struct OptionAssociatedItemConstraintsEmptyGreen(pub GreenId);
20019impl TypedSyntaxNode for OptionAssociatedItemConstraintsEmpty {
20020 const OPTIONAL_KIND: Option<SyntaxKind> =
20021 Some(SyntaxKind::OptionAssociatedItemConstraintsEmpty);
20022 type StablePtr = OptionAssociatedItemConstraintsEmptyPtr;
20023 type Green = OptionAssociatedItemConstraintsEmptyGreen;
20024 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20025 OptionAssociatedItemConstraintsEmptyGreen(
20026 Arc::new(GreenNode {
20027 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20028 details: GreenNodeDetails::Node {
20029 children: [].into(),
20030 width: TextWidth::default(),
20031 },
20032 })
20033 .intern(db),
20034 )
20035 }
20036 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20037 let kind = node.kind(db);
20038 assert_eq!(
20039 kind,
20040 SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20041 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20042 kind,
20043 SyntaxKind::OptionAssociatedItemConstraintsEmpty
20044 );
20045 Self { node }
20046 }
20047 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20048 let kind = node.kind(db);
20049 if kind == SyntaxKind::OptionAssociatedItemConstraintsEmpty {
20050 Some(Self::from_syntax_node(db, node))
20051 } else {
20052 None
20053 }
20054 }
20055 fn as_syntax_node(&self) -> SyntaxNode {
20056 self.node
20057 }
20058 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20059 OptionAssociatedItemConstraintsEmptyPtr(self.node.stable_ptr(db))
20060 }
20061}
20062#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20063pub enum OptionWrappedGenericParamList {
20064 Empty(OptionWrappedGenericParamListEmpty),
20065 WrappedGenericParamList(WrappedGenericParamList),
20066}
20067#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20068pub struct OptionWrappedGenericParamListPtr(pub SyntaxStablePtrId);
20069impl TypedStablePtr for OptionWrappedGenericParamListPtr {
20070 type SyntaxNode = OptionWrappedGenericParamList;
20071 fn untyped(&self) -> SyntaxStablePtrId {
20072 self.0
20073 }
20074 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
20075 OptionWrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20076 }
20077}
20078impl From<OptionWrappedGenericParamListPtr> for SyntaxStablePtrId {
20079 fn from(ptr: OptionWrappedGenericParamListPtr) -> Self {
20080 ptr.untyped()
20081 }
20082}
20083impl From<OptionWrappedGenericParamListEmptyPtr> for OptionWrappedGenericParamListPtr {
20084 fn from(value: OptionWrappedGenericParamListEmptyPtr) -> Self {
20085 Self(value.0)
20086 }
20087}
20088impl From<WrappedGenericParamListPtr> for OptionWrappedGenericParamListPtr {
20089 fn from(value: WrappedGenericParamListPtr) -> Self {
20090 Self(value.0)
20091 }
20092}
20093impl From<OptionWrappedGenericParamListEmptyGreen> for OptionWrappedGenericParamListGreen {
20094 fn from(value: OptionWrappedGenericParamListEmptyGreen) -> Self {
20095 Self(value.0)
20096 }
20097}
20098impl From<WrappedGenericParamListGreen> for OptionWrappedGenericParamListGreen {
20099 fn from(value: WrappedGenericParamListGreen) -> Self {
20100 Self(value.0)
20101 }
20102}
20103#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20104pub struct OptionWrappedGenericParamListGreen(pub GreenId);
20105impl TypedSyntaxNode for OptionWrappedGenericParamList {
20106 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20107 type StablePtr = OptionWrappedGenericParamListPtr;
20108 type Green = OptionWrappedGenericParamListGreen;
20109 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20110 panic!("No missing variant.");
20111 }
20112 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20113 let kind = node.kind(db);
20114 match kind {
20115 SyntaxKind::OptionWrappedGenericParamListEmpty => OptionWrappedGenericParamList::Empty(
20116 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20117 ),
20118 SyntaxKind::WrappedGenericParamList => {
20119 OptionWrappedGenericParamList::WrappedGenericParamList(
20120 WrappedGenericParamList::from_syntax_node(db, node),
20121 )
20122 }
20123 _ => panic!(
20124 "Unexpected syntax kind {:?} when constructing {}.",
20125 kind, "OptionWrappedGenericParamList"
20126 ),
20127 }
20128 }
20129 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20130 let kind = node.kind(db);
20131 match kind {
20132 SyntaxKind::OptionWrappedGenericParamListEmpty => {
20133 Some(OptionWrappedGenericParamList::Empty(
20134 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20135 ))
20136 }
20137 SyntaxKind::WrappedGenericParamList => {
20138 Some(OptionWrappedGenericParamList::WrappedGenericParamList(
20139 WrappedGenericParamList::from_syntax_node(db, node),
20140 ))
20141 }
20142 _ => None,
20143 }
20144 }
20145 fn as_syntax_node(&self) -> SyntaxNode {
20146 match self {
20147 OptionWrappedGenericParamList::Empty(x) => x.as_syntax_node(),
20148 OptionWrappedGenericParamList::WrappedGenericParamList(x) => x.as_syntax_node(),
20149 }
20150 }
20151 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20152 OptionWrappedGenericParamListPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
20153 }
20154}
20155impl OptionWrappedGenericParamList {
20156 pub fn is_variant(kind: SyntaxKind) -> bool {
20158 matches!(
20159 kind,
20160 SyntaxKind::OptionWrappedGenericParamListEmpty | SyntaxKind::WrappedGenericParamList
20161 )
20162 }
20163}
20164#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20165pub struct OptionWrappedGenericParamListEmpty {
20166 node: SyntaxNode,
20167}
20168impl OptionWrappedGenericParamListEmpty {
20169 pub fn new_green(db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmptyGreen {
20170 let children = [];
20171 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20172 OptionWrappedGenericParamListEmptyGreen(
20173 Arc::new(GreenNode {
20174 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20175 details: GreenNodeDetails::Node { children: children.into(), width },
20176 })
20177 .intern(db),
20178 )
20179 }
20180}
20181impl OptionWrappedGenericParamListEmpty {}
20182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20183pub struct OptionWrappedGenericParamListEmptyPtr(pub SyntaxStablePtrId);
20184impl OptionWrappedGenericParamListEmptyPtr {}
20185impl TypedStablePtr for OptionWrappedGenericParamListEmptyPtr {
20186 type SyntaxNode = OptionWrappedGenericParamListEmpty;
20187 fn untyped(&self) -> SyntaxStablePtrId {
20188 self.0
20189 }
20190 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmpty {
20191 OptionWrappedGenericParamListEmpty::from_syntax_node(db, self.0.lookup(db))
20192 }
20193}
20194impl From<OptionWrappedGenericParamListEmptyPtr> for SyntaxStablePtrId {
20195 fn from(ptr: OptionWrappedGenericParamListEmptyPtr) -> Self {
20196 ptr.untyped()
20197 }
20198}
20199#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20200pub struct OptionWrappedGenericParamListEmptyGreen(pub GreenId);
20201impl TypedSyntaxNode for OptionWrappedGenericParamListEmpty {
20202 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionWrappedGenericParamListEmpty);
20203 type StablePtr = OptionWrappedGenericParamListEmptyPtr;
20204 type Green = OptionWrappedGenericParamListEmptyGreen;
20205 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20206 OptionWrappedGenericParamListEmptyGreen(
20207 Arc::new(GreenNode {
20208 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20209 details: GreenNodeDetails::Node {
20210 children: [].into(),
20211 width: TextWidth::default(),
20212 },
20213 })
20214 .intern(db),
20215 )
20216 }
20217 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20218 let kind = node.kind(db);
20219 assert_eq!(
20220 kind,
20221 SyntaxKind::OptionWrappedGenericParamListEmpty,
20222 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20223 kind,
20224 SyntaxKind::OptionWrappedGenericParamListEmpty
20225 );
20226 Self { node }
20227 }
20228 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20229 let kind = node.kind(db);
20230 if kind == SyntaxKind::OptionWrappedGenericParamListEmpty {
20231 Some(Self::from_syntax_node(db, node))
20232 } else {
20233 None
20234 }
20235 }
20236 fn as_syntax_node(&self) -> SyntaxNode {
20237 self.node
20238 }
20239 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20240 OptionWrappedGenericParamListEmptyPtr(self.node.stable_ptr(db))
20241 }
20242}
20243#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20244pub struct WrappedGenericParamList {
20245 node: SyntaxNode,
20246}
20247impl WrappedGenericParamList {
20248 pub const INDEX_LANGLE: usize = 0;
20249 pub const INDEX_GENERIC_PARAMS: usize = 1;
20250 pub const INDEX_RANGLE: usize = 2;
20251 pub fn new_green(
20252 db: &dyn SyntaxGroup,
20253 langle: TerminalLTGreen,
20254 generic_params: GenericParamListGreen,
20255 rangle: TerminalGTGreen,
20256 ) -> WrappedGenericParamListGreen {
20257 let children = [langle.0, generic_params.0, rangle.0];
20258 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20259 WrappedGenericParamListGreen(
20260 Arc::new(GreenNode {
20261 kind: SyntaxKind::WrappedGenericParamList,
20262 details: GreenNodeDetails::Node { children: children.into(), width },
20263 })
20264 .intern(db),
20265 )
20266 }
20267}
20268impl WrappedGenericParamList {
20269 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
20270 TerminalLT::from_syntax_node(db, self.node.get_children(db)[0])
20271 }
20272 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20273 GenericParamList::from_syntax_node(db, self.node.get_children(db)[1])
20274 }
20275 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
20276 TerminalGT::from_syntax_node(db, self.node.get_children(db)[2])
20277 }
20278}
20279#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20280pub struct WrappedGenericParamListPtr(pub SyntaxStablePtrId);
20281impl WrappedGenericParamListPtr {}
20282impl TypedStablePtr for WrappedGenericParamListPtr {
20283 type SyntaxNode = WrappedGenericParamList;
20284 fn untyped(&self) -> SyntaxStablePtrId {
20285 self.0
20286 }
20287 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedGenericParamList {
20288 WrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20289 }
20290}
20291impl From<WrappedGenericParamListPtr> for SyntaxStablePtrId {
20292 fn from(ptr: WrappedGenericParamListPtr) -> Self {
20293 ptr.untyped()
20294 }
20295}
20296#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20297pub struct WrappedGenericParamListGreen(pub GreenId);
20298impl TypedSyntaxNode for WrappedGenericParamList {
20299 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedGenericParamList);
20300 type StablePtr = WrappedGenericParamListPtr;
20301 type Green = WrappedGenericParamListGreen;
20302 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20303 WrappedGenericParamListGreen(
20304 Arc::new(GreenNode {
20305 kind: SyntaxKind::WrappedGenericParamList,
20306 details: GreenNodeDetails::Node {
20307 children: [
20308 TerminalLT::missing(db).0,
20309 GenericParamList::missing(db).0,
20310 TerminalGT::missing(db).0,
20311 ]
20312 .into(),
20313 width: TextWidth::default(),
20314 },
20315 })
20316 .intern(db),
20317 )
20318 }
20319 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20320 let kind = node.kind(db);
20321 assert_eq!(
20322 kind,
20323 SyntaxKind::WrappedGenericParamList,
20324 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20325 kind,
20326 SyntaxKind::WrappedGenericParamList
20327 );
20328 Self { node }
20329 }
20330 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20331 let kind = node.kind(db);
20332 if kind == SyntaxKind::WrappedGenericParamList {
20333 Some(Self::from_syntax_node(db, node))
20334 } else {
20335 None
20336 }
20337 }
20338 fn as_syntax_node(&self) -> SyntaxNode {
20339 self.node
20340 }
20341 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20342 WrappedGenericParamListPtr(self.node.stable_ptr(db))
20343 }
20344}
20345#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20346pub struct GenericParamList(ElementList<GenericParam, 2>);
20347impl Deref for GenericParamList {
20348 type Target = ElementList<GenericParam, 2>;
20349 fn deref(&self) -> &Self::Target {
20350 &self.0
20351 }
20352}
20353impl GenericParamList {
20354 pub fn new_green(
20355 db: &dyn SyntaxGroup,
20356 children: &[GenericParamListElementOrSeparatorGreen],
20357 ) -> GenericParamListGreen {
20358 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
20359 GenericParamListGreen(
20360 Arc::new(GreenNode {
20361 kind: SyntaxKind::GenericParamList,
20362 details: GreenNodeDetails::Node {
20363 children: children.iter().map(|x| x.id()).collect(),
20364 width,
20365 },
20366 })
20367 .intern(db),
20368 )
20369 }
20370}
20371#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20372pub struct GenericParamListPtr(pub SyntaxStablePtrId);
20373impl TypedStablePtr for GenericParamListPtr {
20374 type SyntaxNode = GenericParamList;
20375 fn untyped(&self) -> SyntaxStablePtrId {
20376 self.0
20377 }
20378 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20379 GenericParamList::from_syntax_node(db, self.0.lookup(db))
20380 }
20381}
20382impl From<GenericParamListPtr> for SyntaxStablePtrId {
20383 fn from(ptr: GenericParamListPtr) -> Self {
20384 ptr.untyped()
20385 }
20386}
20387#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20388pub enum GenericParamListElementOrSeparatorGreen {
20389 Separator(TerminalCommaGreen),
20390 Element(GenericParamGreen),
20391}
20392impl From<TerminalCommaGreen> for GenericParamListElementOrSeparatorGreen {
20393 fn from(value: TerminalCommaGreen) -> Self {
20394 GenericParamListElementOrSeparatorGreen::Separator(value)
20395 }
20396}
20397impl From<GenericParamGreen> for GenericParamListElementOrSeparatorGreen {
20398 fn from(value: GenericParamGreen) -> Self {
20399 GenericParamListElementOrSeparatorGreen::Element(value)
20400 }
20401}
20402impl GenericParamListElementOrSeparatorGreen {
20403 fn id(&self) -> GreenId {
20404 match self {
20405 GenericParamListElementOrSeparatorGreen::Separator(green) => green.0,
20406 GenericParamListElementOrSeparatorGreen::Element(green) => green.0,
20407 }
20408 }
20409}
20410#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20411pub struct GenericParamListGreen(pub GreenId);
20412impl TypedSyntaxNode for GenericParamList {
20413 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamList);
20414 type StablePtr = GenericParamListPtr;
20415 type Green = GenericParamListGreen;
20416 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20417 GenericParamListGreen(
20418 Arc::new(GreenNode {
20419 kind: SyntaxKind::GenericParamList,
20420 details: GreenNodeDetails::Node {
20421 children: [].into(),
20422 width: TextWidth::default(),
20423 },
20424 })
20425 .intern(db),
20426 )
20427 }
20428 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20429 Self(ElementList::new(node))
20430 }
20431 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20432 if node.kind(db) == SyntaxKind::GenericParamList {
20433 Some(Self(ElementList::new(node)))
20434 } else {
20435 None
20436 }
20437 }
20438 fn as_syntax_node(&self) -> SyntaxNode {
20439 self.node
20440 }
20441 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20442 GenericParamListPtr(self.node.stable_ptr(db))
20443 }
20444}
20445#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20446pub enum GenericParam {
20447 Type(GenericParamType),
20448 Const(GenericParamConst),
20449 ImplNamed(GenericParamImplNamed),
20450 ImplAnonymous(GenericParamImplAnonymous),
20451 NegativeImpl(GenericParamNegativeImpl),
20452}
20453#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20454pub struct GenericParamPtr(pub SyntaxStablePtrId);
20455impl TypedStablePtr for GenericParamPtr {
20456 type SyntaxNode = GenericParam;
20457 fn untyped(&self) -> SyntaxStablePtrId {
20458 self.0
20459 }
20460 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParam {
20461 GenericParam::from_syntax_node(db, self.0.lookup(db))
20462 }
20463}
20464impl From<GenericParamPtr> for SyntaxStablePtrId {
20465 fn from(ptr: GenericParamPtr) -> Self {
20466 ptr.untyped()
20467 }
20468}
20469impl From<GenericParamTypePtr> for GenericParamPtr {
20470 fn from(value: GenericParamTypePtr) -> Self {
20471 Self(value.0)
20472 }
20473}
20474impl From<GenericParamConstPtr> for GenericParamPtr {
20475 fn from(value: GenericParamConstPtr) -> Self {
20476 Self(value.0)
20477 }
20478}
20479impl From<GenericParamImplNamedPtr> for GenericParamPtr {
20480 fn from(value: GenericParamImplNamedPtr) -> Self {
20481 Self(value.0)
20482 }
20483}
20484impl From<GenericParamImplAnonymousPtr> for GenericParamPtr {
20485 fn from(value: GenericParamImplAnonymousPtr) -> Self {
20486 Self(value.0)
20487 }
20488}
20489impl From<GenericParamNegativeImplPtr> for GenericParamPtr {
20490 fn from(value: GenericParamNegativeImplPtr) -> Self {
20491 Self(value.0)
20492 }
20493}
20494impl From<GenericParamTypeGreen> for GenericParamGreen {
20495 fn from(value: GenericParamTypeGreen) -> Self {
20496 Self(value.0)
20497 }
20498}
20499impl From<GenericParamConstGreen> for GenericParamGreen {
20500 fn from(value: GenericParamConstGreen) -> Self {
20501 Self(value.0)
20502 }
20503}
20504impl From<GenericParamImplNamedGreen> for GenericParamGreen {
20505 fn from(value: GenericParamImplNamedGreen) -> Self {
20506 Self(value.0)
20507 }
20508}
20509impl From<GenericParamImplAnonymousGreen> for GenericParamGreen {
20510 fn from(value: GenericParamImplAnonymousGreen) -> Self {
20511 Self(value.0)
20512 }
20513}
20514impl From<GenericParamNegativeImplGreen> for GenericParamGreen {
20515 fn from(value: GenericParamNegativeImplGreen) -> Self {
20516 Self(value.0)
20517 }
20518}
20519#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20520pub struct GenericParamGreen(pub GreenId);
20521impl TypedSyntaxNode for GenericParam {
20522 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20523 type StablePtr = GenericParamPtr;
20524 type Green = GenericParamGreen;
20525 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20526 panic!("No missing variant.");
20527 }
20528 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20529 let kind = node.kind(db);
20530 match kind {
20531 SyntaxKind::GenericParamType => {
20532 GenericParam::Type(GenericParamType::from_syntax_node(db, node))
20533 }
20534 SyntaxKind::GenericParamConst => {
20535 GenericParam::Const(GenericParamConst::from_syntax_node(db, node))
20536 }
20537 SyntaxKind::GenericParamImplNamed => {
20538 GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node))
20539 }
20540 SyntaxKind::GenericParamImplAnonymous => {
20541 GenericParam::ImplAnonymous(GenericParamImplAnonymous::from_syntax_node(db, node))
20542 }
20543 SyntaxKind::GenericParamNegativeImpl => {
20544 GenericParam::NegativeImpl(GenericParamNegativeImpl::from_syntax_node(db, node))
20545 }
20546 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericParam"),
20547 }
20548 }
20549 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20550 let kind = node.kind(db);
20551 match kind {
20552 SyntaxKind::GenericParamType => {
20553 Some(GenericParam::Type(GenericParamType::from_syntax_node(db, node)))
20554 }
20555 SyntaxKind::GenericParamConst => {
20556 Some(GenericParam::Const(GenericParamConst::from_syntax_node(db, node)))
20557 }
20558 SyntaxKind::GenericParamImplNamed => {
20559 Some(GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node)))
20560 }
20561 SyntaxKind::GenericParamImplAnonymous => Some(GenericParam::ImplAnonymous(
20562 GenericParamImplAnonymous::from_syntax_node(db, node),
20563 )),
20564 SyntaxKind::GenericParamNegativeImpl => Some(GenericParam::NegativeImpl(
20565 GenericParamNegativeImpl::from_syntax_node(db, node),
20566 )),
20567 _ => None,
20568 }
20569 }
20570 fn as_syntax_node(&self) -> SyntaxNode {
20571 match self {
20572 GenericParam::Type(x) => x.as_syntax_node(),
20573 GenericParam::Const(x) => x.as_syntax_node(),
20574 GenericParam::ImplNamed(x) => x.as_syntax_node(),
20575 GenericParam::ImplAnonymous(x) => x.as_syntax_node(),
20576 GenericParam::NegativeImpl(x) => x.as_syntax_node(),
20577 }
20578 }
20579 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20580 GenericParamPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
20581 }
20582}
20583impl GenericParam {
20584 pub fn is_variant(kind: SyntaxKind) -> bool {
20586 matches!(
20587 kind,
20588 SyntaxKind::GenericParamType
20589 | SyntaxKind::GenericParamConst
20590 | SyntaxKind::GenericParamImplNamed
20591 | SyntaxKind::GenericParamImplAnonymous
20592 | SyntaxKind::GenericParamNegativeImpl
20593 )
20594 }
20595}
20596#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20597pub struct GenericParamType {
20598 node: SyntaxNode,
20599}
20600impl GenericParamType {
20601 pub const INDEX_NAME: usize = 0;
20602 pub fn new_green(db: &dyn SyntaxGroup, name: TerminalIdentifierGreen) -> GenericParamTypeGreen {
20603 let children = [name.0];
20604 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20605 GenericParamTypeGreen(
20606 Arc::new(GreenNode {
20607 kind: SyntaxKind::GenericParamType,
20608 details: GreenNodeDetails::Node { children: children.into(), width },
20609 })
20610 .intern(db),
20611 )
20612 }
20613}
20614impl GenericParamType {
20615 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
20616 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
20617 }
20618}
20619#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20620pub struct GenericParamTypePtr(pub SyntaxStablePtrId);
20621impl GenericParamTypePtr {
20622 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
20623 let ptr = self.0.lookup_intern(db);
20624 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
20625 TerminalIdentifierGreen(key_fields[0])
20626 } else {
20627 panic!("Unexpected key field query on root.");
20628 }
20629 }
20630}
20631impl TypedStablePtr for GenericParamTypePtr {
20632 type SyntaxNode = GenericParamType;
20633 fn untyped(&self) -> SyntaxStablePtrId {
20634 self.0
20635 }
20636 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamType {
20637 GenericParamType::from_syntax_node(db, self.0.lookup(db))
20638 }
20639}
20640impl From<GenericParamTypePtr> for SyntaxStablePtrId {
20641 fn from(ptr: GenericParamTypePtr) -> Self {
20642 ptr.untyped()
20643 }
20644}
20645#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20646pub struct GenericParamTypeGreen(pub GreenId);
20647impl TypedSyntaxNode for GenericParamType {
20648 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamType);
20649 type StablePtr = GenericParamTypePtr;
20650 type Green = GenericParamTypeGreen;
20651 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20652 GenericParamTypeGreen(
20653 Arc::new(GreenNode {
20654 kind: SyntaxKind::GenericParamType,
20655 details: GreenNodeDetails::Node {
20656 children: [TerminalIdentifier::missing(db).0].into(),
20657 width: TextWidth::default(),
20658 },
20659 })
20660 .intern(db),
20661 )
20662 }
20663 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20664 let kind = node.kind(db);
20665 assert_eq!(
20666 kind,
20667 SyntaxKind::GenericParamType,
20668 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20669 kind,
20670 SyntaxKind::GenericParamType
20671 );
20672 Self { node }
20673 }
20674 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20675 let kind = node.kind(db);
20676 if kind == SyntaxKind::GenericParamType {
20677 Some(Self::from_syntax_node(db, node))
20678 } else {
20679 None
20680 }
20681 }
20682 fn as_syntax_node(&self) -> SyntaxNode {
20683 self.node
20684 }
20685 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20686 GenericParamTypePtr(self.node.stable_ptr(db))
20687 }
20688}
20689#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20690pub struct GenericParamConst {
20691 node: SyntaxNode,
20692}
20693impl GenericParamConst {
20694 pub const INDEX_CONST_KW: usize = 0;
20695 pub const INDEX_NAME: usize = 1;
20696 pub const INDEX_COLON: usize = 2;
20697 pub const INDEX_TY: usize = 3;
20698 pub fn new_green(
20699 db: &dyn SyntaxGroup,
20700 const_kw: TerminalConstGreen,
20701 name: TerminalIdentifierGreen,
20702 colon: TerminalColonGreen,
20703 ty: ExprGreen,
20704 ) -> GenericParamConstGreen {
20705 let children = [const_kw.0, name.0, colon.0, ty.0];
20706 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20707 GenericParamConstGreen(
20708 Arc::new(GreenNode {
20709 kind: SyntaxKind::GenericParamConst,
20710 details: GreenNodeDetails::Node { children: children.into(), width },
20711 })
20712 .intern(db),
20713 )
20714 }
20715}
20716impl GenericParamConst {
20717 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
20718 TerminalConst::from_syntax_node(db, self.node.get_children(db)[0])
20719 }
20720 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
20721 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
20722 }
20723 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
20724 TerminalColon::from_syntax_node(db, self.node.get_children(db)[2])
20725 }
20726 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
20727 Expr::from_syntax_node(db, self.node.get_children(db)[3])
20728 }
20729}
20730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20731pub struct GenericParamConstPtr(pub SyntaxStablePtrId);
20732impl GenericParamConstPtr {
20733 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
20734 let ptr = self.0.lookup_intern(db);
20735 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
20736 TerminalIdentifierGreen(key_fields[0])
20737 } else {
20738 panic!("Unexpected key field query on root.");
20739 }
20740 }
20741}
20742impl TypedStablePtr for GenericParamConstPtr {
20743 type SyntaxNode = GenericParamConst;
20744 fn untyped(&self) -> SyntaxStablePtrId {
20745 self.0
20746 }
20747 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamConst {
20748 GenericParamConst::from_syntax_node(db, self.0.lookup(db))
20749 }
20750}
20751impl From<GenericParamConstPtr> for SyntaxStablePtrId {
20752 fn from(ptr: GenericParamConstPtr) -> Self {
20753 ptr.untyped()
20754 }
20755}
20756#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20757pub struct GenericParamConstGreen(pub GreenId);
20758impl TypedSyntaxNode for GenericParamConst {
20759 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamConst);
20760 type StablePtr = GenericParamConstPtr;
20761 type Green = GenericParamConstGreen;
20762 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20763 GenericParamConstGreen(
20764 Arc::new(GreenNode {
20765 kind: SyntaxKind::GenericParamConst,
20766 details: GreenNodeDetails::Node {
20767 children: [
20768 TerminalConst::missing(db).0,
20769 TerminalIdentifier::missing(db).0,
20770 TerminalColon::missing(db).0,
20771 Expr::missing(db).0,
20772 ]
20773 .into(),
20774 width: TextWidth::default(),
20775 },
20776 })
20777 .intern(db),
20778 )
20779 }
20780 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20781 let kind = node.kind(db);
20782 assert_eq!(
20783 kind,
20784 SyntaxKind::GenericParamConst,
20785 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20786 kind,
20787 SyntaxKind::GenericParamConst
20788 );
20789 Self { node }
20790 }
20791 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20792 let kind = node.kind(db);
20793 if kind == SyntaxKind::GenericParamConst {
20794 Some(Self::from_syntax_node(db, node))
20795 } else {
20796 None
20797 }
20798 }
20799 fn as_syntax_node(&self) -> SyntaxNode {
20800 self.node
20801 }
20802 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20803 GenericParamConstPtr(self.node.stable_ptr(db))
20804 }
20805}
20806#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20807pub struct GenericParamImplNamed {
20808 node: SyntaxNode,
20809}
20810impl GenericParamImplNamed {
20811 pub const INDEX_IMPL_KW: usize = 0;
20812 pub const INDEX_NAME: usize = 1;
20813 pub const INDEX_COLON: usize = 2;
20814 pub const INDEX_TRAIT_PATH: usize = 3;
20815 pub const INDEX_TYPE_CONSTRAINS: usize = 4;
20816 pub fn new_green(
20817 db: &dyn SyntaxGroup,
20818 impl_kw: TerminalImplGreen,
20819 name: TerminalIdentifierGreen,
20820 colon: TerminalColonGreen,
20821 trait_path: ExprPathGreen,
20822 type_constrains: OptionAssociatedItemConstraintsGreen,
20823 ) -> GenericParamImplNamedGreen {
20824 let children = [impl_kw.0, name.0, colon.0, trait_path.0, type_constrains.0];
20825 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20826 GenericParamImplNamedGreen(
20827 Arc::new(GreenNode {
20828 kind: SyntaxKind::GenericParamImplNamed,
20829 details: GreenNodeDetails::Node { children: children.into(), width },
20830 })
20831 .intern(db),
20832 )
20833 }
20834}
20835impl GenericParamImplNamed {
20836 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
20837 TerminalImpl::from_syntax_node(db, self.node.get_children(db)[0])
20838 }
20839 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
20840 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
20841 }
20842 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
20843 TerminalColon::from_syntax_node(db, self.node.get_children(db)[2])
20844 }
20845 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
20846 ExprPath::from_syntax_node(db, self.node.get_children(db)[3])
20847 }
20848 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
20849 OptionAssociatedItemConstraints::from_syntax_node(db, self.node.get_children(db)[4])
20850 }
20851}
20852#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20853pub struct GenericParamImplNamedPtr(pub SyntaxStablePtrId);
20854impl GenericParamImplNamedPtr {
20855 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
20856 let ptr = self.0.lookup_intern(db);
20857 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
20858 TerminalIdentifierGreen(key_fields[0])
20859 } else {
20860 panic!("Unexpected key field query on root.");
20861 }
20862 }
20863}
20864impl TypedStablePtr for GenericParamImplNamedPtr {
20865 type SyntaxNode = GenericParamImplNamed;
20866 fn untyped(&self) -> SyntaxStablePtrId {
20867 self.0
20868 }
20869 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplNamed {
20870 GenericParamImplNamed::from_syntax_node(db, self.0.lookup(db))
20871 }
20872}
20873impl From<GenericParamImplNamedPtr> for SyntaxStablePtrId {
20874 fn from(ptr: GenericParamImplNamedPtr) -> Self {
20875 ptr.untyped()
20876 }
20877}
20878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20879pub struct GenericParamImplNamedGreen(pub GreenId);
20880impl TypedSyntaxNode for GenericParamImplNamed {
20881 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplNamed);
20882 type StablePtr = GenericParamImplNamedPtr;
20883 type Green = GenericParamImplNamedGreen;
20884 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20885 GenericParamImplNamedGreen(
20886 Arc::new(GreenNode {
20887 kind: SyntaxKind::GenericParamImplNamed,
20888 details: GreenNodeDetails::Node {
20889 children: [
20890 TerminalImpl::missing(db).0,
20891 TerminalIdentifier::missing(db).0,
20892 TerminalColon::missing(db).0,
20893 ExprPath::missing(db).0,
20894 OptionAssociatedItemConstraints::missing(db).0,
20895 ]
20896 .into(),
20897 width: TextWidth::default(),
20898 },
20899 })
20900 .intern(db),
20901 )
20902 }
20903 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20904 let kind = node.kind(db);
20905 assert_eq!(
20906 kind,
20907 SyntaxKind::GenericParamImplNamed,
20908 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20909 kind,
20910 SyntaxKind::GenericParamImplNamed
20911 );
20912 Self { node }
20913 }
20914 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20915 let kind = node.kind(db);
20916 if kind == SyntaxKind::GenericParamImplNamed {
20917 Some(Self::from_syntax_node(db, node))
20918 } else {
20919 None
20920 }
20921 }
20922 fn as_syntax_node(&self) -> SyntaxNode {
20923 self.node
20924 }
20925 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
20926 GenericParamImplNamedPtr(self.node.stable_ptr(db))
20927 }
20928}
20929#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20930pub struct GenericParamImplAnonymous {
20931 node: SyntaxNode,
20932}
20933impl GenericParamImplAnonymous {
20934 pub const INDEX_PLUS: usize = 0;
20935 pub const INDEX_TRAIT_PATH: usize = 1;
20936 pub const INDEX_TYPE_CONSTRAINS: usize = 2;
20937 pub fn new_green(
20938 db: &dyn SyntaxGroup,
20939 plus: TerminalPlusGreen,
20940 trait_path: ExprPathGreen,
20941 type_constrains: OptionAssociatedItemConstraintsGreen,
20942 ) -> GenericParamImplAnonymousGreen {
20943 let children = [plus.0, trait_path.0, type_constrains.0];
20944 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
20945 GenericParamImplAnonymousGreen(
20946 Arc::new(GreenNode {
20947 kind: SyntaxKind::GenericParamImplAnonymous,
20948 details: GreenNodeDetails::Node { children: children.into(), width },
20949 })
20950 .intern(db),
20951 )
20952 }
20953}
20954impl GenericParamImplAnonymous {
20955 pub fn plus(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
20956 TerminalPlus::from_syntax_node(db, self.node.get_children(db)[0])
20957 }
20958 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
20959 ExprPath::from_syntax_node(db, self.node.get_children(db)[1])
20960 }
20961 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
20962 OptionAssociatedItemConstraints::from_syntax_node(db, self.node.get_children(db)[2])
20963 }
20964}
20965#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20966pub struct GenericParamImplAnonymousPtr(pub SyntaxStablePtrId);
20967impl GenericParamImplAnonymousPtr {}
20968impl TypedStablePtr for GenericParamImplAnonymousPtr {
20969 type SyntaxNode = GenericParamImplAnonymous;
20970 fn untyped(&self) -> SyntaxStablePtrId {
20971 self.0
20972 }
20973 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplAnonymous {
20974 GenericParamImplAnonymous::from_syntax_node(db, self.0.lookup(db))
20975 }
20976}
20977impl From<GenericParamImplAnonymousPtr> for SyntaxStablePtrId {
20978 fn from(ptr: GenericParamImplAnonymousPtr) -> Self {
20979 ptr.untyped()
20980 }
20981}
20982#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20983pub struct GenericParamImplAnonymousGreen(pub GreenId);
20984impl TypedSyntaxNode for GenericParamImplAnonymous {
20985 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplAnonymous);
20986 type StablePtr = GenericParamImplAnonymousPtr;
20987 type Green = GenericParamImplAnonymousGreen;
20988 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20989 GenericParamImplAnonymousGreen(
20990 Arc::new(GreenNode {
20991 kind: SyntaxKind::GenericParamImplAnonymous,
20992 details: GreenNodeDetails::Node {
20993 children: [
20994 TerminalPlus::missing(db).0,
20995 ExprPath::missing(db).0,
20996 OptionAssociatedItemConstraints::missing(db).0,
20997 ]
20998 .into(),
20999 width: TextWidth::default(),
21000 },
21001 })
21002 .intern(db),
21003 )
21004 }
21005 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21006 let kind = node.kind(db);
21007 assert_eq!(
21008 kind,
21009 SyntaxKind::GenericParamImplAnonymous,
21010 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21011 kind,
21012 SyntaxKind::GenericParamImplAnonymous
21013 );
21014 Self { node }
21015 }
21016 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21017 let kind = node.kind(db);
21018 if kind == SyntaxKind::GenericParamImplAnonymous {
21019 Some(Self::from_syntax_node(db, node))
21020 } else {
21021 None
21022 }
21023 }
21024 fn as_syntax_node(&self) -> SyntaxNode {
21025 self.node
21026 }
21027 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21028 GenericParamImplAnonymousPtr(self.node.stable_ptr(db))
21029 }
21030}
21031#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21032pub struct GenericParamNegativeImpl {
21033 node: SyntaxNode,
21034}
21035impl GenericParamNegativeImpl {
21036 pub const INDEX_MINUS: usize = 0;
21037 pub const INDEX_TRAIT_PATH: usize = 1;
21038 pub fn new_green(
21039 db: &dyn SyntaxGroup,
21040 minus: TerminalMinusGreen,
21041 trait_path: ExprPathGreen,
21042 ) -> GenericParamNegativeImplGreen {
21043 let children = [minus.0, trait_path.0];
21044 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21045 GenericParamNegativeImplGreen(
21046 Arc::new(GreenNode {
21047 kind: SyntaxKind::GenericParamNegativeImpl,
21048 details: GreenNodeDetails::Node { children: children.into(), width },
21049 })
21050 .intern(db),
21051 )
21052 }
21053}
21054impl GenericParamNegativeImpl {
21055 pub fn minus(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
21056 TerminalMinus::from_syntax_node(db, self.node.get_children(db)[0])
21057 }
21058 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21059 ExprPath::from_syntax_node(db, self.node.get_children(db)[1])
21060 }
21061}
21062#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21063pub struct GenericParamNegativeImplPtr(pub SyntaxStablePtrId);
21064impl GenericParamNegativeImplPtr {}
21065impl TypedStablePtr for GenericParamNegativeImplPtr {
21066 type SyntaxNode = GenericParamNegativeImpl;
21067 fn untyped(&self) -> SyntaxStablePtrId {
21068 self.0
21069 }
21070 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamNegativeImpl {
21071 GenericParamNegativeImpl::from_syntax_node(db, self.0.lookup(db))
21072 }
21073}
21074impl From<GenericParamNegativeImplPtr> for SyntaxStablePtrId {
21075 fn from(ptr: GenericParamNegativeImplPtr) -> Self {
21076 ptr.untyped()
21077 }
21078}
21079#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21080pub struct GenericParamNegativeImplGreen(pub GreenId);
21081impl TypedSyntaxNode for GenericParamNegativeImpl {
21082 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamNegativeImpl);
21083 type StablePtr = GenericParamNegativeImplPtr;
21084 type Green = GenericParamNegativeImplGreen;
21085 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21086 GenericParamNegativeImplGreen(
21087 Arc::new(GreenNode {
21088 kind: SyntaxKind::GenericParamNegativeImpl,
21089 details: GreenNodeDetails::Node {
21090 children: [TerminalMinus::missing(db).0, ExprPath::missing(db).0].into(),
21091 width: TextWidth::default(),
21092 },
21093 })
21094 .intern(db),
21095 )
21096 }
21097 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21098 let kind = node.kind(db);
21099 assert_eq!(
21100 kind,
21101 SyntaxKind::GenericParamNegativeImpl,
21102 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21103 kind,
21104 SyntaxKind::GenericParamNegativeImpl
21105 );
21106 Self { node }
21107 }
21108 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21109 let kind = node.kind(db);
21110 if kind == SyntaxKind::GenericParamNegativeImpl {
21111 Some(Self::from_syntax_node(db, node))
21112 } else {
21113 None
21114 }
21115 }
21116 fn as_syntax_node(&self) -> SyntaxNode {
21117 self.node
21118 }
21119 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21120 GenericParamNegativeImplPtr(self.node.stable_ptr(db))
21121 }
21122}
21123#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21124pub struct TokenList(ElementList<TokenTree, 1>);
21125impl Deref for TokenList {
21126 type Target = ElementList<TokenTree, 1>;
21127 fn deref(&self) -> &Self::Target {
21128 &self.0
21129 }
21130}
21131impl TokenList {
21132 pub fn new_green(db: &dyn SyntaxGroup, children: &[TokenTreeGreen]) -> TokenListGreen {
21133 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
21134 TokenListGreen(
21135 Arc::new(GreenNode {
21136 kind: SyntaxKind::TokenList,
21137 details: GreenNodeDetails::Node {
21138 children: children.iter().map(|x| x.0).collect(),
21139 width,
21140 },
21141 })
21142 .intern(db),
21143 )
21144 }
21145}
21146#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21147pub struct TokenListPtr(pub SyntaxStablePtrId);
21148impl TypedStablePtr for TokenListPtr {
21149 type SyntaxNode = TokenList;
21150 fn untyped(&self) -> SyntaxStablePtrId {
21151 self.0
21152 }
21153 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenList {
21154 TokenList::from_syntax_node(db, self.0.lookup(db))
21155 }
21156}
21157impl From<TokenListPtr> for SyntaxStablePtrId {
21158 fn from(ptr: TokenListPtr) -> Self {
21159 ptr.untyped()
21160 }
21161}
21162#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21163pub struct TokenListGreen(pub GreenId);
21164impl TypedSyntaxNode for TokenList {
21165 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenList);
21166 type StablePtr = TokenListPtr;
21167 type Green = TokenListGreen;
21168 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21169 TokenListGreen(
21170 Arc::new(GreenNode {
21171 kind: SyntaxKind::TokenList,
21172 details: GreenNodeDetails::Node {
21173 children: [].into(),
21174 width: TextWidth::default(),
21175 },
21176 })
21177 .intern(db),
21178 )
21179 }
21180 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21181 Self(ElementList::new(node))
21182 }
21183 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21184 if node.kind(db) == SyntaxKind::TokenList {
21185 Some(Self(ElementList::new(node)))
21186 } else {
21187 None
21188 }
21189 }
21190 fn as_syntax_node(&self) -> SyntaxNode {
21191 self.node
21192 }
21193 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21194 TokenListPtr(self.node.stable_ptr(db))
21195 }
21196}
21197#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21198pub struct TokenTreeLeaf {
21199 node: SyntaxNode,
21200}
21201impl TokenTreeLeaf {
21202 pub const INDEX_LEAF: usize = 0;
21203 pub fn new_green(db: &dyn SyntaxGroup, leaf: TokenNodeGreen) -> TokenTreeLeafGreen {
21204 let children = [leaf.0];
21205 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21206 TokenTreeLeafGreen(
21207 Arc::new(GreenNode {
21208 kind: SyntaxKind::TokenTreeLeaf,
21209 details: GreenNodeDetails::Node { children: children.into(), width },
21210 })
21211 .intern(db),
21212 )
21213 }
21214}
21215impl TokenTreeLeaf {
21216 pub fn leaf(&self, db: &dyn SyntaxGroup) -> TokenNode {
21217 TokenNode::from_syntax_node(db, self.node.get_children(db)[0])
21218 }
21219}
21220#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21221pub struct TokenTreeLeafPtr(pub SyntaxStablePtrId);
21222impl TokenTreeLeafPtr {}
21223impl TypedStablePtr for TokenTreeLeafPtr {
21224 type SyntaxNode = TokenTreeLeaf;
21225 fn untyped(&self) -> SyntaxStablePtrId {
21226 self.0
21227 }
21228 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTreeLeaf {
21229 TokenTreeLeaf::from_syntax_node(db, self.0.lookup(db))
21230 }
21231}
21232impl From<TokenTreeLeafPtr> for SyntaxStablePtrId {
21233 fn from(ptr: TokenTreeLeafPtr) -> Self {
21234 ptr.untyped()
21235 }
21236}
21237#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21238pub struct TokenTreeLeafGreen(pub GreenId);
21239impl TypedSyntaxNode for TokenTreeLeaf {
21240 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTreeLeaf);
21241 type StablePtr = TokenTreeLeafPtr;
21242 type Green = TokenTreeLeafGreen;
21243 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21244 TokenTreeLeafGreen(
21245 Arc::new(GreenNode {
21246 kind: SyntaxKind::TokenTreeLeaf,
21247 details: GreenNodeDetails::Node {
21248 children: [TokenNode::missing(db).0].into(),
21249 width: TextWidth::default(),
21250 },
21251 })
21252 .intern(db),
21253 )
21254 }
21255 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21256 let kind = node.kind(db);
21257 assert_eq!(
21258 kind,
21259 SyntaxKind::TokenTreeLeaf,
21260 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21261 kind,
21262 SyntaxKind::TokenTreeLeaf
21263 );
21264 Self { node }
21265 }
21266 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21267 let kind = node.kind(db);
21268 if kind == SyntaxKind::TokenTreeLeaf {
21269 Some(Self::from_syntax_node(db, node))
21270 } else {
21271 None
21272 }
21273 }
21274 fn as_syntax_node(&self) -> SyntaxNode {
21275 self.node
21276 }
21277 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21278 TokenTreeLeafPtr(self.node.stable_ptr(db))
21279 }
21280}
21281#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21282pub struct TokenTreeNode {
21283 node: SyntaxNode,
21284}
21285impl TokenTreeNode {
21286 pub const INDEX_SUBTREE: usize = 0;
21287 pub fn new_green(db: &dyn SyntaxGroup, subtree: WrappedTokenTreeGreen) -> TokenTreeNodeGreen {
21288 let children = [subtree.0];
21289 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21290 TokenTreeNodeGreen(
21291 Arc::new(GreenNode {
21292 kind: SyntaxKind::TokenTreeNode,
21293 details: GreenNodeDetails::Node { children: children.into(), width },
21294 })
21295 .intern(db),
21296 )
21297 }
21298}
21299impl TokenTreeNode {
21300 pub fn subtree(&self, db: &dyn SyntaxGroup) -> WrappedTokenTree {
21301 WrappedTokenTree::from_syntax_node(db, self.node.get_children(db)[0])
21302 }
21303}
21304#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21305pub struct TokenTreeNodePtr(pub SyntaxStablePtrId);
21306impl TokenTreeNodePtr {}
21307impl TypedStablePtr for TokenTreeNodePtr {
21308 type SyntaxNode = TokenTreeNode;
21309 fn untyped(&self) -> SyntaxStablePtrId {
21310 self.0
21311 }
21312 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTreeNode {
21313 TokenTreeNode::from_syntax_node(db, self.0.lookup(db))
21314 }
21315}
21316impl From<TokenTreeNodePtr> for SyntaxStablePtrId {
21317 fn from(ptr: TokenTreeNodePtr) -> Self {
21318 ptr.untyped()
21319 }
21320}
21321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21322pub struct TokenTreeNodeGreen(pub GreenId);
21323impl TypedSyntaxNode for TokenTreeNode {
21324 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTreeNode);
21325 type StablePtr = TokenTreeNodePtr;
21326 type Green = TokenTreeNodeGreen;
21327 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21328 TokenTreeNodeGreen(
21329 Arc::new(GreenNode {
21330 kind: SyntaxKind::TokenTreeNode,
21331 details: GreenNodeDetails::Node {
21332 children: [WrappedTokenTree::missing(db).0].into(),
21333 width: TextWidth::default(),
21334 },
21335 })
21336 .intern(db),
21337 )
21338 }
21339 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21340 let kind = node.kind(db);
21341 assert_eq!(
21342 kind,
21343 SyntaxKind::TokenTreeNode,
21344 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21345 kind,
21346 SyntaxKind::TokenTreeNode
21347 );
21348 Self { node }
21349 }
21350 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21351 let kind = node.kind(db);
21352 if kind == SyntaxKind::TokenTreeNode {
21353 Some(Self::from_syntax_node(db, node))
21354 } else {
21355 None
21356 }
21357 }
21358 fn as_syntax_node(&self) -> SyntaxNode {
21359 self.node
21360 }
21361 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21362 TokenTreeNodePtr(self.node.stable_ptr(db))
21363 }
21364}
21365#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21366pub struct TokenTreeRepetition {
21367 node: SyntaxNode,
21368}
21369impl TokenTreeRepetition {
21370 pub const INDEX_DOLLAR: usize = 0;
21371 pub const INDEX_LPAREN: usize = 1;
21372 pub const INDEX_ELEMENTS: usize = 2;
21373 pub const INDEX_RPAREN: usize = 3;
21374 pub const INDEX_SEPARATOR: usize = 4;
21375 pub const INDEX_OPERATOR: usize = 5;
21376 pub fn new_green(
21377 db: &dyn SyntaxGroup,
21378 dollar: TerminalDollarGreen,
21379 lparen: TerminalLParenGreen,
21380 elements: TokenListGreen,
21381 rparen: TerminalRParenGreen,
21382 separator: OptionTerminalCommaGreen,
21383 operator: MacroRepetitionOperatorGreen,
21384 ) -> TokenTreeRepetitionGreen {
21385 let children = [dollar.0, lparen.0, elements.0, rparen.0, separator.0, operator.0];
21386 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21387 TokenTreeRepetitionGreen(
21388 Arc::new(GreenNode {
21389 kind: SyntaxKind::TokenTreeRepetition,
21390 details: GreenNodeDetails::Node { children: children.into(), width },
21391 })
21392 .intern(db),
21393 )
21394 }
21395}
21396impl TokenTreeRepetition {
21397 pub fn dollar(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
21398 TerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
21399 }
21400 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
21401 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[1])
21402 }
21403 pub fn elements(&self, db: &dyn SyntaxGroup) -> TokenList {
21404 TokenList::from_syntax_node(db, self.node.get_children(db)[2])
21405 }
21406 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
21407 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[3])
21408 }
21409 pub fn separator(&self, db: &dyn SyntaxGroup) -> OptionTerminalComma {
21410 OptionTerminalComma::from_syntax_node(db, self.node.get_children(db)[4])
21411 }
21412 pub fn operator(&self, db: &dyn SyntaxGroup) -> MacroRepetitionOperator {
21413 MacroRepetitionOperator::from_syntax_node(db, self.node.get_children(db)[5])
21414 }
21415}
21416#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21417pub struct TokenTreeRepetitionPtr(pub SyntaxStablePtrId);
21418impl TokenTreeRepetitionPtr {}
21419impl TypedStablePtr for TokenTreeRepetitionPtr {
21420 type SyntaxNode = TokenTreeRepetition;
21421 fn untyped(&self) -> SyntaxStablePtrId {
21422 self.0
21423 }
21424 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTreeRepetition {
21425 TokenTreeRepetition::from_syntax_node(db, self.0.lookup(db))
21426 }
21427}
21428impl From<TokenTreeRepetitionPtr> for SyntaxStablePtrId {
21429 fn from(ptr: TokenTreeRepetitionPtr) -> Self {
21430 ptr.untyped()
21431 }
21432}
21433#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21434pub struct TokenTreeRepetitionGreen(pub GreenId);
21435impl TypedSyntaxNode for TokenTreeRepetition {
21436 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTreeRepetition);
21437 type StablePtr = TokenTreeRepetitionPtr;
21438 type Green = TokenTreeRepetitionGreen;
21439 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21440 TokenTreeRepetitionGreen(
21441 Arc::new(GreenNode {
21442 kind: SyntaxKind::TokenTreeRepetition,
21443 details: GreenNodeDetails::Node {
21444 children: [
21445 TerminalDollar::missing(db).0,
21446 TerminalLParen::missing(db).0,
21447 TokenList::missing(db).0,
21448 TerminalRParen::missing(db).0,
21449 OptionTerminalComma::missing(db).0,
21450 MacroRepetitionOperator::missing(db).0,
21451 ]
21452 .into(),
21453 width: TextWidth::default(),
21454 },
21455 })
21456 .intern(db),
21457 )
21458 }
21459 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21460 let kind = node.kind(db);
21461 assert_eq!(
21462 kind,
21463 SyntaxKind::TokenTreeRepetition,
21464 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21465 kind,
21466 SyntaxKind::TokenTreeRepetition
21467 );
21468 Self { node }
21469 }
21470 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21471 let kind = node.kind(db);
21472 if kind == SyntaxKind::TokenTreeRepetition {
21473 Some(Self::from_syntax_node(db, node))
21474 } else {
21475 None
21476 }
21477 }
21478 fn as_syntax_node(&self) -> SyntaxNode {
21479 self.node
21480 }
21481 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21482 TokenTreeRepetitionPtr(self.node.stable_ptr(db))
21483 }
21484}
21485#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21486pub struct TokenTreeParam {
21487 node: SyntaxNode,
21488}
21489impl TokenTreeParam {
21490 pub const INDEX_DOLLAR: usize = 0;
21491 pub const INDEX_NAME: usize = 1;
21492 pub fn new_green(
21493 db: &dyn SyntaxGroup,
21494 dollar: TerminalDollarGreen,
21495 name: TerminalIdentifierGreen,
21496 ) -> TokenTreeParamGreen {
21497 let children = [dollar.0, name.0];
21498 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21499 TokenTreeParamGreen(
21500 Arc::new(GreenNode {
21501 kind: SyntaxKind::TokenTreeParam,
21502 details: GreenNodeDetails::Node { children: children.into(), width },
21503 })
21504 .intern(db),
21505 )
21506 }
21507}
21508impl TokenTreeParam {
21509 pub fn dollar(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
21510 TerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
21511 }
21512 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21513 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
21514 }
21515}
21516#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21517pub struct TokenTreeParamPtr(pub SyntaxStablePtrId);
21518impl TokenTreeParamPtr {}
21519impl TypedStablePtr for TokenTreeParamPtr {
21520 type SyntaxNode = TokenTreeParam;
21521 fn untyped(&self) -> SyntaxStablePtrId {
21522 self.0
21523 }
21524 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTreeParam {
21525 TokenTreeParam::from_syntax_node(db, self.0.lookup(db))
21526 }
21527}
21528impl From<TokenTreeParamPtr> for SyntaxStablePtrId {
21529 fn from(ptr: TokenTreeParamPtr) -> Self {
21530 ptr.untyped()
21531 }
21532}
21533#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21534pub struct TokenTreeParamGreen(pub GreenId);
21535impl TypedSyntaxNode for TokenTreeParam {
21536 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTreeParam);
21537 type StablePtr = TokenTreeParamPtr;
21538 type Green = TokenTreeParamGreen;
21539 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21540 TokenTreeParamGreen(
21541 Arc::new(GreenNode {
21542 kind: SyntaxKind::TokenTreeParam,
21543 details: GreenNodeDetails::Node {
21544 children: [TerminalDollar::missing(db).0, TerminalIdentifier::missing(db).0]
21545 .into(),
21546 width: TextWidth::default(),
21547 },
21548 })
21549 .intern(db),
21550 )
21551 }
21552 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21553 let kind = node.kind(db);
21554 assert_eq!(
21555 kind,
21556 SyntaxKind::TokenTreeParam,
21557 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21558 kind,
21559 SyntaxKind::TokenTreeParam
21560 );
21561 Self { node }
21562 }
21563 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21564 let kind = node.kind(db);
21565 if kind == SyntaxKind::TokenTreeParam {
21566 Some(Self::from_syntax_node(db, node))
21567 } else {
21568 None
21569 }
21570 }
21571 fn as_syntax_node(&self) -> SyntaxNode {
21572 self.node
21573 }
21574 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21575 TokenTreeParamPtr(self.node.stable_ptr(db))
21576 }
21577}
21578#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21579pub enum TokenTree {
21580 Token(TokenTreeLeaf),
21581 Subtree(TokenTreeNode),
21582 Repetition(TokenTreeRepetition),
21583 Param(TokenTreeParam),
21584 Missing(TokenTreeMissing),
21585}
21586#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21587pub struct TokenTreePtr(pub SyntaxStablePtrId);
21588impl TypedStablePtr for TokenTreePtr {
21589 type SyntaxNode = TokenTree;
21590 fn untyped(&self) -> SyntaxStablePtrId {
21591 self.0
21592 }
21593 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTree {
21594 TokenTree::from_syntax_node(db, self.0.lookup(db))
21595 }
21596}
21597impl From<TokenTreePtr> for SyntaxStablePtrId {
21598 fn from(ptr: TokenTreePtr) -> Self {
21599 ptr.untyped()
21600 }
21601}
21602impl From<TokenTreeLeafPtr> for TokenTreePtr {
21603 fn from(value: TokenTreeLeafPtr) -> Self {
21604 Self(value.0)
21605 }
21606}
21607impl From<TokenTreeNodePtr> for TokenTreePtr {
21608 fn from(value: TokenTreeNodePtr) -> Self {
21609 Self(value.0)
21610 }
21611}
21612impl From<TokenTreeRepetitionPtr> for TokenTreePtr {
21613 fn from(value: TokenTreeRepetitionPtr) -> Self {
21614 Self(value.0)
21615 }
21616}
21617impl From<TokenTreeParamPtr> for TokenTreePtr {
21618 fn from(value: TokenTreeParamPtr) -> Self {
21619 Self(value.0)
21620 }
21621}
21622impl From<TokenTreeMissingPtr> for TokenTreePtr {
21623 fn from(value: TokenTreeMissingPtr) -> Self {
21624 Self(value.0)
21625 }
21626}
21627impl From<TokenTreeLeafGreen> for TokenTreeGreen {
21628 fn from(value: TokenTreeLeafGreen) -> Self {
21629 Self(value.0)
21630 }
21631}
21632impl From<TokenTreeNodeGreen> for TokenTreeGreen {
21633 fn from(value: TokenTreeNodeGreen) -> Self {
21634 Self(value.0)
21635 }
21636}
21637impl From<TokenTreeRepetitionGreen> for TokenTreeGreen {
21638 fn from(value: TokenTreeRepetitionGreen) -> Self {
21639 Self(value.0)
21640 }
21641}
21642impl From<TokenTreeParamGreen> for TokenTreeGreen {
21643 fn from(value: TokenTreeParamGreen) -> Self {
21644 Self(value.0)
21645 }
21646}
21647impl From<TokenTreeMissingGreen> for TokenTreeGreen {
21648 fn from(value: TokenTreeMissingGreen) -> Self {
21649 Self(value.0)
21650 }
21651}
21652#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21653pub struct TokenTreeGreen(pub GreenId);
21654impl TypedSyntaxNode for TokenTree {
21655 const OPTIONAL_KIND: Option<SyntaxKind> = None;
21656 type StablePtr = TokenTreePtr;
21657 type Green = TokenTreeGreen;
21658 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21659 TokenTreeGreen(TokenTreeMissing::missing(db).0)
21660 }
21661 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21662 let kind = node.kind(db);
21663 match kind {
21664 SyntaxKind::TokenTreeLeaf => {
21665 TokenTree::Token(TokenTreeLeaf::from_syntax_node(db, node))
21666 }
21667 SyntaxKind::TokenTreeNode => {
21668 TokenTree::Subtree(TokenTreeNode::from_syntax_node(db, node))
21669 }
21670 SyntaxKind::TokenTreeRepetition => {
21671 TokenTree::Repetition(TokenTreeRepetition::from_syntax_node(db, node))
21672 }
21673 SyntaxKind::TokenTreeParam => {
21674 TokenTree::Param(TokenTreeParam::from_syntax_node(db, node))
21675 }
21676 SyntaxKind::TokenTreeMissing => {
21677 TokenTree::Missing(TokenTreeMissing::from_syntax_node(db, node))
21678 }
21679 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TokenTree"),
21680 }
21681 }
21682 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21683 let kind = node.kind(db);
21684 match kind {
21685 SyntaxKind::TokenTreeLeaf => {
21686 Some(TokenTree::Token(TokenTreeLeaf::from_syntax_node(db, node)))
21687 }
21688 SyntaxKind::TokenTreeNode => {
21689 Some(TokenTree::Subtree(TokenTreeNode::from_syntax_node(db, node)))
21690 }
21691 SyntaxKind::TokenTreeRepetition => {
21692 Some(TokenTree::Repetition(TokenTreeRepetition::from_syntax_node(db, node)))
21693 }
21694 SyntaxKind::TokenTreeParam => {
21695 Some(TokenTree::Param(TokenTreeParam::from_syntax_node(db, node)))
21696 }
21697 SyntaxKind::TokenTreeMissing => {
21698 Some(TokenTree::Missing(TokenTreeMissing::from_syntax_node(db, node)))
21699 }
21700 _ => None,
21701 }
21702 }
21703 fn as_syntax_node(&self) -> SyntaxNode {
21704 match self {
21705 TokenTree::Token(x) => x.as_syntax_node(),
21706 TokenTree::Subtree(x) => x.as_syntax_node(),
21707 TokenTree::Repetition(x) => x.as_syntax_node(),
21708 TokenTree::Param(x) => x.as_syntax_node(),
21709 TokenTree::Missing(x) => x.as_syntax_node(),
21710 }
21711 }
21712 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21713 TokenTreePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
21714 }
21715}
21716impl TokenTree {
21717 pub fn is_variant(kind: SyntaxKind) -> bool {
21719 matches!(
21720 kind,
21721 SyntaxKind::TokenTreeLeaf
21722 | SyntaxKind::TokenTreeNode
21723 | SyntaxKind::TokenTreeRepetition
21724 | SyntaxKind::TokenTreeParam
21725 | SyntaxKind::TokenTreeMissing
21726 )
21727 }
21728}
21729#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21730pub struct TokenTreeMissing {
21731 node: SyntaxNode,
21732}
21733impl TokenTreeMissing {
21734 pub fn new_green(db: &dyn SyntaxGroup) -> TokenTreeMissingGreen {
21735 let children = [];
21736 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21737 TokenTreeMissingGreen(
21738 Arc::new(GreenNode {
21739 kind: SyntaxKind::TokenTreeMissing,
21740 details: GreenNodeDetails::Node { children: children.into(), width },
21741 })
21742 .intern(db),
21743 )
21744 }
21745}
21746impl TokenTreeMissing {}
21747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21748pub struct TokenTreeMissingPtr(pub SyntaxStablePtrId);
21749impl TokenTreeMissingPtr {}
21750impl TypedStablePtr for TokenTreeMissingPtr {
21751 type SyntaxNode = TokenTreeMissing;
21752 fn untyped(&self) -> SyntaxStablePtrId {
21753 self.0
21754 }
21755 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTreeMissing {
21756 TokenTreeMissing::from_syntax_node(db, self.0.lookup(db))
21757 }
21758}
21759impl From<TokenTreeMissingPtr> for SyntaxStablePtrId {
21760 fn from(ptr: TokenTreeMissingPtr) -> Self {
21761 ptr.untyped()
21762 }
21763}
21764#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21765pub struct TokenTreeMissingGreen(pub GreenId);
21766impl TypedSyntaxNode for TokenTreeMissing {
21767 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTreeMissing);
21768 type StablePtr = TokenTreeMissingPtr;
21769 type Green = TokenTreeMissingGreen;
21770 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21771 TokenTreeMissingGreen(
21772 Arc::new(GreenNode {
21773 kind: SyntaxKind::TokenTreeMissing,
21774 details: GreenNodeDetails::Node {
21775 children: [].into(),
21776 width: TextWidth::default(),
21777 },
21778 })
21779 .intern(db),
21780 )
21781 }
21782 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21783 let kind = node.kind(db);
21784 assert_eq!(
21785 kind,
21786 SyntaxKind::TokenTreeMissing,
21787 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21788 kind,
21789 SyntaxKind::TokenTreeMissing
21790 );
21791 Self { node }
21792 }
21793 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21794 let kind = node.kind(db);
21795 if kind == SyntaxKind::TokenTreeMissing {
21796 Some(Self::from_syntax_node(db, node))
21797 } else {
21798 None
21799 }
21800 }
21801 fn as_syntax_node(&self) -> SyntaxNode {
21802 self.node
21803 }
21804 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21805 TokenTreeMissingPtr(self.node.stable_ptr(db))
21806 }
21807}
21808#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21809pub enum WrappedTokenTree {
21810 Parenthesized(ParenthesizedTokenTree),
21811 Braced(BracedTokenTree),
21812 Bracketed(BracketedTokenTree),
21813 Missing(WrappedTokenTreeMissing),
21814}
21815#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21816pub struct WrappedTokenTreePtr(pub SyntaxStablePtrId);
21817impl TypedStablePtr for WrappedTokenTreePtr {
21818 type SyntaxNode = WrappedTokenTree;
21819 fn untyped(&self) -> SyntaxStablePtrId {
21820 self.0
21821 }
21822 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedTokenTree {
21823 WrappedTokenTree::from_syntax_node(db, self.0.lookup(db))
21824 }
21825}
21826impl From<WrappedTokenTreePtr> for SyntaxStablePtrId {
21827 fn from(ptr: WrappedTokenTreePtr) -> Self {
21828 ptr.untyped()
21829 }
21830}
21831impl From<ParenthesizedTokenTreePtr> for WrappedTokenTreePtr {
21832 fn from(value: ParenthesizedTokenTreePtr) -> Self {
21833 Self(value.0)
21834 }
21835}
21836impl From<BracedTokenTreePtr> for WrappedTokenTreePtr {
21837 fn from(value: BracedTokenTreePtr) -> Self {
21838 Self(value.0)
21839 }
21840}
21841impl From<BracketedTokenTreePtr> for WrappedTokenTreePtr {
21842 fn from(value: BracketedTokenTreePtr) -> Self {
21843 Self(value.0)
21844 }
21845}
21846impl From<WrappedTokenTreeMissingPtr> for WrappedTokenTreePtr {
21847 fn from(value: WrappedTokenTreeMissingPtr) -> Self {
21848 Self(value.0)
21849 }
21850}
21851impl From<ParenthesizedTokenTreeGreen> for WrappedTokenTreeGreen {
21852 fn from(value: ParenthesizedTokenTreeGreen) -> Self {
21853 Self(value.0)
21854 }
21855}
21856impl From<BracedTokenTreeGreen> for WrappedTokenTreeGreen {
21857 fn from(value: BracedTokenTreeGreen) -> Self {
21858 Self(value.0)
21859 }
21860}
21861impl From<BracketedTokenTreeGreen> for WrappedTokenTreeGreen {
21862 fn from(value: BracketedTokenTreeGreen) -> Self {
21863 Self(value.0)
21864 }
21865}
21866impl From<WrappedTokenTreeMissingGreen> for WrappedTokenTreeGreen {
21867 fn from(value: WrappedTokenTreeMissingGreen) -> Self {
21868 Self(value.0)
21869 }
21870}
21871#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21872pub struct WrappedTokenTreeGreen(pub GreenId);
21873impl TypedSyntaxNode for WrappedTokenTree {
21874 const OPTIONAL_KIND: Option<SyntaxKind> = None;
21875 type StablePtr = WrappedTokenTreePtr;
21876 type Green = WrappedTokenTreeGreen;
21877 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21878 WrappedTokenTreeGreen(WrappedTokenTreeMissing::missing(db).0)
21879 }
21880 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21881 let kind = node.kind(db);
21882 match kind {
21883 SyntaxKind::ParenthesizedTokenTree => {
21884 WrappedTokenTree::Parenthesized(ParenthesizedTokenTree::from_syntax_node(db, node))
21885 }
21886 SyntaxKind::BracedTokenTree => {
21887 WrappedTokenTree::Braced(BracedTokenTree::from_syntax_node(db, node))
21888 }
21889 SyntaxKind::BracketedTokenTree => {
21890 WrappedTokenTree::Bracketed(BracketedTokenTree::from_syntax_node(db, node))
21891 }
21892 SyntaxKind::WrappedTokenTreeMissing => {
21893 WrappedTokenTree::Missing(WrappedTokenTreeMissing::from_syntax_node(db, node))
21894 }
21895 _ => panic!(
21896 "Unexpected syntax kind {:?} when constructing {}.",
21897 kind, "WrappedTokenTree"
21898 ),
21899 }
21900 }
21901 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21902 let kind = node.kind(db);
21903 match kind {
21904 SyntaxKind::ParenthesizedTokenTree => Some(WrappedTokenTree::Parenthesized(
21905 ParenthesizedTokenTree::from_syntax_node(db, node),
21906 )),
21907 SyntaxKind::BracedTokenTree => {
21908 Some(WrappedTokenTree::Braced(BracedTokenTree::from_syntax_node(db, node)))
21909 }
21910 SyntaxKind::BracketedTokenTree => {
21911 Some(WrappedTokenTree::Bracketed(BracketedTokenTree::from_syntax_node(db, node)))
21912 }
21913 SyntaxKind::WrappedTokenTreeMissing => {
21914 Some(WrappedTokenTree::Missing(WrappedTokenTreeMissing::from_syntax_node(db, node)))
21915 }
21916 _ => None,
21917 }
21918 }
21919 fn as_syntax_node(&self) -> SyntaxNode {
21920 match self {
21921 WrappedTokenTree::Parenthesized(x) => x.as_syntax_node(),
21922 WrappedTokenTree::Braced(x) => x.as_syntax_node(),
21923 WrappedTokenTree::Bracketed(x) => x.as_syntax_node(),
21924 WrappedTokenTree::Missing(x) => x.as_syntax_node(),
21925 }
21926 }
21927 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
21928 WrappedTokenTreePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
21929 }
21930}
21931impl WrappedTokenTree {
21932 pub fn is_variant(kind: SyntaxKind) -> bool {
21934 matches!(
21935 kind,
21936 SyntaxKind::ParenthesizedTokenTree
21937 | SyntaxKind::BracedTokenTree
21938 | SyntaxKind::BracketedTokenTree
21939 | SyntaxKind::WrappedTokenTreeMissing
21940 )
21941 }
21942}
21943#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21944pub struct WrappedTokenTreeMissing {
21945 node: SyntaxNode,
21946}
21947impl WrappedTokenTreeMissing {
21948 pub fn new_green(db: &dyn SyntaxGroup) -> WrappedTokenTreeMissingGreen {
21949 let children = [];
21950 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
21951 WrappedTokenTreeMissingGreen(
21952 Arc::new(GreenNode {
21953 kind: SyntaxKind::WrappedTokenTreeMissing,
21954 details: GreenNodeDetails::Node { children: children.into(), width },
21955 })
21956 .intern(db),
21957 )
21958 }
21959}
21960impl WrappedTokenTreeMissing {}
21961#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21962pub struct WrappedTokenTreeMissingPtr(pub SyntaxStablePtrId);
21963impl WrappedTokenTreeMissingPtr {}
21964impl TypedStablePtr for WrappedTokenTreeMissingPtr {
21965 type SyntaxNode = WrappedTokenTreeMissing;
21966 fn untyped(&self) -> SyntaxStablePtrId {
21967 self.0
21968 }
21969 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedTokenTreeMissing {
21970 WrappedTokenTreeMissing::from_syntax_node(db, self.0.lookup(db))
21971 }
21972}
21973impl From<WrappedTokenTreeMissingPtr> for SyntaxStablePtrId {
21974 fn from(ptr: WrappedTokenTreeMissingPtr) -> Self {
21975 ptr.untyped()
21976 }
21977}
21978#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21979pub struct WrappedTokenTreeMissingGreen(pub GreenId);
21980impl TypedSyntaxNode for WrappedTokenTreeMissing {
21981 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedTokenTreeMissing);
21982 type StablePtr = WrappedTokenTreeMissingPtr;
21983 type Green = WrappedTokenTreeMissingGreen;
21984 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21985 WrappedTokenTreeMissingGreen(
21986 Arc::new(GreenNode {
21987 kind: SyntaxKind::WrappedTokenTreeMissing,
21988 details: GreenNodeDetails::Node {
21989 children: [].into(),
21990 width: TextWidth::default(),
21991 },
21992 })
21993 .intern(db),
21994 )
21995 }
21996 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21997 let kind = node.kind(db);
21998 assert_eq!(
21999 kind,
22000 SyntaxKind::WrappedTokenTreeMissing,
22001 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22002 kind,
22003 SyntaxKind::WrappedTokenTreeMissing
22004 );
22005 Self { node }
22006 }
22007 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22008 let kind = node.kind(db);
22009 if kind == SyntaxKind::WrappedTokenTreeMissing {
22010 Some(Self::from_syntax_node(db, node))
22011 } else {
22012 None
22013 }
22014 }
22015 fn as_syntax_node(&self) -> SyntaxNode {
22016 self.node
22017 }
22018 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22019 WrappedTokenTreeMissingPtr(self.node.stable_ptr(db))
22020 }
22021}
22022#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22023pub struct ParenthesizedTokenTree {
22024 node: SyntaxNode,
22025}
22026impl ParenthesizedTokenTree {
22027 pub const INDEX_LPAREN: usize = 0;
22028 pub const INDEX_TOKENS: usize = 1;
22029 pub const INDEX_RPAREN: usize = 2;
22030 pub fn new_green(
22031 db: &dyn SyntaxGroup,
22032 lparen: TerminalLParenGreen,
22033 tokens: TokenListGreen,
22034 rparen: TerminalRParenGreen,
22035 ) -> ParenthesizedTokenTreeGreen {
22036 let children = [lparen.0, tokens.0, rparen.0];
22037 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22038 ParenthesizedTokenTreeGreen(
22039 Arc::new(GreenNode {
22040 kind: SyntaxKind::ParenthesizedTokenTree,
22041 details: GreenNodeDetails::Node { children: children.into(), width },
22042 })
22043 .intern(db),
22044 )
22045 }
22046}
22047impl ParenthesizedTokenTree {
22048 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
22049 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
22050 }
22051 pub fn tokens(&self, db: &dyn SyntaxGroup) -> TokenList {
22052 TokenList::from_syntax_node(db, self.node.get_children(db)[1])
22053 }
22054 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
22055 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
22056 }
22057}
22058#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22059pub struct ParenthesizedTokenTreePtr(pub SyntaxStablePtrId);
22060impl ParenthesizedTokenTreePtr {}
22061impl TypedStablePtr for ParenthesizedTokenTreePtr {
22062 type SyntaxNode = ParenthesizedTokenTree;
22063 fn untyped(&self) -> SyntaxStablePtrId {
22064 self.0
22065 }
22066 fn lookup(&self, db: &dyn SyntaxGroup) -> ParenthesizedTokenTree {
22067 ParenthesizedTokenTree::from_syntax_node(db, self.0.lookup(db))
22068 }
22069}
22070impl From<ParenthesizedTokenTreePtr> for SyntaxStablePtrId {
22071 fn from(ptr: ParenthesizedTokenTreePtr) -> Self {
22072 ptr.untyped()
22073 }
22074}
22075#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22076pub struct ParenthesizedTokenTreeGreen(pub GreenId);
22077impl TypedSyntaxNode for ParenthesizedTokenTree {
22078 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParenthesizedTokenTree);
22079 type StablePtr = ParenthesizedTokenTreePtr;
22080 type Green = ParenthesizedTokenTreeGreen;
22081 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22082 ParenthesizedTokenTreeGreen(
22083 Arc::new(GreenNode {
22084 kind: SyntaxKind::ParenthesizedTokenTree,
22085 details: GreenNodeDetails::Node {
22086 children: [
22087 TerminalLParen::missing(db).0,
22088 TokenList::missing(db).0,
22089 TerminalRParen::missing(db).0,
22090 ]
22091 .into(),
22092 width: TextWidth::default(),
22093 },
22094 })
22095 .intern(db),
22096 )
22097 }
22098 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22099 let kind = node.kind(db);
22100 assert_eq!(
22101 kind,
22102 SyntaxKind::ParenthesizedTokenTree,
22103 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22104 kind,
22105 SyntaxKind::ParenthesizedTokenTree
22106 );
22107 Self { node }
22108 }
22109 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22110 let kind = node.kind(db);
22111 if kind == SyntaxKind::ParenthesizedTokenTree {
22112 Some(Self::from_syntax_node(db, node))
22113 } else {
22114 None
22115 }
22116 }
22117 fn as_syntax_node(&self) -> SyntaxNode {
22118 self.node
22119 }
22120 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22121 ParenthesizedTokenTreePtr(self.node.stable_ptr(db))
22122 }
22123}
22124#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22125pub struct BracedTokenTree {
22126 node: SyntaxNode,
22127}
22128impl BracedTokenTree {
22129 pub const INDEX_LBRACE: usize = 0;
22130 pub const INDEX_TOKENS: usize = 1;
22131 pub const INDEX_RBRACE: usize = 2;
22132 pub fn new_green(
22133 db: &dyn SyntaxGroup,
22134 lbrace: TerminalLBraceGreen,
22135 tokens: TokenListGreen,
22136 rbrace: TerminalRBraceGreen,
22137 ) -> BracedTokenTreeGreen {
22138 let children = [lbrace.0, tokens.0, rbrace.0];
22139 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22140 BracedTokenTreeGreen(
22141 Arc::new(GreenNode {
22142 kind: SyntaxKind::BracedTokenTree,
22143 details: GreenNodeDetails::Node { children: children.into(), width },
22144 })
22145 .intern(db),
22146 )
22147 }
22148}
22149impl BracedTokenTree {
22150 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
22151 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
22152 }
22153 pub fn tokens(&self, db: &dyn SyntaxGroup) -> TokenList {
22154 TokenList::from_syntax_node(db, self.node.get_children(db)[1])
22155 }
22156 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
22157 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
22158 }
22159}
22160#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22161pub struct BracedTokenTreePtr(pub SyntaxStablePtrId);
22162impl BracedTokenTreePtr {}
22163impl TypedStablePtr for BracedTokenTreePtr {
22164 type SyntaxNode = BracedTokenTree;
22165 fn untyped(&self) -> SyntaxStablePtrId {
22166 self.0
22167 }
22168 fn lookup(&self, db: &dyn SyntaxGroup) -> BracedTokenTree {
22169 BracedTokenTree::from_syntax_node(db, self.0.lookup(db))
22170 }
22171}
22172impl From<BracedTokenTreePtr> for SyntaxStablePtrId {
22173 fn from(ptr: BracedTokenTreePtr) -> Self {
22174 ptr.untyped()
22175 }
22176}
22177#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22178pub struct BracedTokenTreeGreen(pub GreenId);
22179impl TypedSyntaxNode for BracedTokenTree {
22180 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::BracedTokenTree);
22181 type StablePtr = BracedTokenTreePtr;
22182 type Green = BracedTokenTreeGreen;
22183 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22184 BracedTokenTreeGreen(
22185 Arc::new(GreenNode {
22186 kind: SyntaxKind::BracedTokenTree,
22187 details: GreenNodeDetails::Node {
22188 children: [
22189 TerminalLBrace::missing(db).0,
22190 TokenList::missing(db).0,
22191 TerminalRBrace::missing(db).0,
22192 ]
22193 .into(),
22194 width: TextWidth::default(),
22195 },
22196 })
22197 .intern(db),
22198 )
22199 }
22200 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22201 let kind = node.kind(db);
22202 assert_eq!(
22203 kind,
22204 SyntaxKind::BracedTokenTree,
22205 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22206 kind,
22207 SyntaxKind::BracedTokenTree
22208 );
22209 Self { node }
22210 }
22211 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22212 let kind = node.kind(db);
22213 if kind == SyntaxKind::BracedTokenTree {
22214 Some(Self::from_syntax_node(db, node))
22215 } else {
22216 None
22217 }
22218 }
22219 fn as_syntax_node(&self) -> SyntaxNode {
22220 self.node
22221 }
22222 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22223 BracedTokenTreePtr(self.node.stable_ptr(db))
22224 }
22225}
22226#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22227pub struct BracketedTokenTree {
22228 node: SyntaxNode,
22229}
22230impl BracketedTokenTree {
22231 pub const INDEX_LBRACK: usize = 0;
22232 pub const INDEX_TOKENS: usize = 1;
22233 pub const INDEX_RBRACK: usize = 2;
22234 pub fn new_green(
22235 db: &dyn SyntaxGroup,
22236 lbrack: TerminalLBrackGreen,
22237 tokens: TokenListGreen,
22238 rbrack: TerminalRBrackGreen,
22239 ) -> BracketedTokenTreeGreen {
22240 let children = [lbrack.0, tokens.0, rbrack.0];
22241 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22242 BracketedTokenTreeGreen(
22243 Arc::new(GreenNode {
22244 kind: SyntaxKind::BracketedTokenTree,
22245 details: GreenNodeDetails::Node { children: children.into(), width },
22246 })
22247 .intern(db),
22248 )
22249 }
22250}
22251impl BracketedTokenTree {
22252 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
22253 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
22254 }
22255 pub fn tokens(&self, db: &dyn SyntaxGroup) -> TokenList {
22256 TokenList::from_syntax_node(db, self.node.get_children(db)[1])
22257 }
22258 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
22259 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[2])
22260 }
22261}
22262#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22263pub struct BracketedTokenTreePtr(pub SyntaxStablePtrId);
22264impl BracketedTokenTreePtr {}
22265impl TypedStablePtr for BracketedTokenTreePtr {
22266 type SyntaxNode = BracketedTokenTree;
22267 fn untyped(&self) -> SyntaxStablePtrId {
22268 self.0
22269 }
22270 fn lookup(&self, db: &dyn SyntaxGroup) -> BracketedTokenTree {
22271 BracketedTokenTree::from_syntax_node(db, self.0.lookup(db))
22272 }
22273}
22274impl From<BracketedTokenTreePtr> for SyntaxStablePtrId {
22275 fn from(ptr: BracketedTokenTreePtr) -> Self {
22276 ptr.untyped()
22277 }
22278}
22279#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22280pub struct BracketedTokenTreeGreen(pub GreenId);
22281impl TypedSyntaxNode for BracketedTokenTree {
22282 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::BracketedTokenTree);
22283 type StablePtr = BracketedTokenTreePtr;
22284 type Green = BracketedTokenTreeGreen;
22285 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22286 BracketedTokenTreeGreen(
22287 Arc::new(GreenNode {
22288 kind: SyntaxKind::BracketedTokenTree,
22289 details: GreenNodeDetails::Node {
22290 children: [
22291 TerminalLBrack::missing(db).0,
22292 TokenList::missing(db).0,
22293 TerminalRBrack::missing(db).0,
22294 ]
22295 .into(),
22296 width: TextWidth::default(),
22297 },
22298 })
22299 .intern(db),
22300 )
22301 }
22302 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22303 let kind = node.kind(db);
22304 assert_eq!(
22305 kind,
22306 SyntaxKind::BracketedTokenTree,
22307 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22308 kind,
22309 SyntaxKind::BracketedTokenTree
22310 );
22311 Self { node }
22312 }
22313 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22314 let kind = node.kind(db);
22315 if kind == SyntaxKind::BracketedTokenTree {
22316 Some(Self::from_syntax_node(db, node))
22317 } else {
22318 None
22319 }
22320 }
22321 fn as_syntax_node(&self) -> SyntaxNode {
22322 self.node
22323 }
22324 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22325 BracketedTokenTreePtr(self.node.stable_ptr(db))
22326 }
22327}
22328#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22329pub struct ExprInlineMacro {
22330 node: SyntaxNode,
22331}
22332impl ExprInlineMacro {
22333 pub const INDEX_PATH: usize = 0;
22334 pub const INDEX_BANG: usize = 1;
22335 pub const INDEX_ARGUMENTS: usize = 2;
22336 pub fn new_green(
22337 db: &dyn SyntaxGroup,
22338 path: ExprPathGreen,
22339 bang: TerminalNotGreen,
22340 arguments: TokenTreeNodeGreen,
22341 ) -> ExprInlineMacroGreen {
22342 let children = [path.0, bang.0, arguments.0];
22343 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22344 ExprInlineMacroGreen(
22345 Arc::new(GreenNode {
22346 kind: SyntaxKind::ExprInlineMacro,
22347 details: GreenNodeDetails::Node { children: children.into(), width },
22348 })
22349 .intern(db),
22350 )
22351 }
22352}
22353impl ExprInlineMacro {
22354 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
22355 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
22356 }
22357 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
22358 TerminalNot::from_syntax_node(db, self.node.get_children(db)[1])
22359 }
22360 pub fn arguments(&self, db: &dyn SyntaxGroup) -> TokenTreeNode {
22361 TokenTreeNode::from_syntax_node(db, self.node.get_children(db)[2])
22362 }
22363}
22364#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22365pub struct ExprInlineMacroPtr(pub SyntaxStablePtrId);
22366impl ExprInlineMacroPtr {}
22367impl TypedStablePtr for ExprInlineMacroPtr {
22368 type SyntaxNode = ExprInlineMacro;
22369 fn untyped(&self) -> SyntaxStablePtrId {
22370 self.0
22371 }
22372 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprInlineMacro {
22373 ExprInlineMacro::from_syntax_node(db, self.0.lookup(db))
22374 }
22375}
22376impl From<ExprInlineMacroPtr> for SyntaxStablePtrId {
22377 fn from(ptr: ExprInlineMacroPtr) -> Self {
22378 ptr.untyped()
22379 }
22380}
22381#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22382pub struct ExprInlineMacroGreen(pub GreenId);
22383impl TypedSyntaxNode for ExprInlineMacro {
22384 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprInlineMacro);
22385 type StablePtr = ExprInlineMacroPtr;
22386 type Green = ExprInlineMacroGreen;
22387 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22388 ExprInlineMacroGreen(
22389 Arc::new(GreenNode {
22390 kind: SyntaxKind::ExprInlineMacro,
22391 details: GreenNodeDetails::Node {
22392 children: [
22393 ExprPath::missing(db).0,
22394 TerminalNot::missing(db).0,
22395 TokenTreeNode::missing(db).0,
22396 ]
22397 .into(),
22398 width: TextWidth::default(),
22399 },
22400 })
22401 .intern(db),
22402 )
22403 }
22404 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22405 let kind = node.kind(db);
22406 assert_eq!(
22407 kind,
22408 SyntaxKind::ExprInlineMacro,
22409 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22410 kind,
22411 SyntaxKind::ExprInlineMacro
22412 );
22413 Self { node }
22414 }
22415 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22416 let kind = node.kind(db);
22417 if kind == SyntaxKind::ExprInlineMacro {
22418 Some(Self::from_syntax_node(db, node))
22419 } else {
22420 None
22421 }
22422 }
22423 fn as_syntax_node(&self) -> SyntaxNode {
22424 self.node
22425 }
22426 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22427 ExprInlineMacroPtr(self.node.stable_ptr(db))
22428 }
22429}
22430#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22431pub struct ItemInlineMacro {
22432 node: SyntaxNode,
22433}
22434impl ItemInlineMacro {
22435 pub const INDEX_ATTRIBUTES: usize = 0;
22436 pub const INDEX_PATH: usize = 1;
22437 pub const INDEX_BANG: usize = 2;
22438 pub const INDEX_ARGUMENTS: usize = 3;
22439 pub const INDEX_SEMICOLON: usize = 4;
22440 pub fn new_green(
22441 db: &dyn SyntaxGroup,
22442 attributes: AttributeListGreen,
22443 path: ExprPathGreen,
22444 bang: TerminalNotGreen,
22445 arguments: TokenTreeNodeGreen,
22446 semicolon: TerminalSemicolonGreen,
22447 ) -> ItemInlineMacroGreen {
22448 let children = [attributes.0, path.0, bang.0, arguments.0, semicolon.0];
22449 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22450 ItemInlineMacroGreen(
22451 Arc::new(GreenNode {
22452 kind: SyntaxKind::ItemInlineMacro,
22453 details: GreenNodeDetails::Node { children: children.into(), width },
22454 })
22455 .intern(db),
22456 )
22457 }
22458}
22459impl ItemInlineMacro {
22460 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
22461 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
22462 }
22463 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
22464 ExprPath::from_syntax_node(db, self.node.get_children(db)[1])
22465 }
22466 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
22467 TerminalNot::from_syntax_node(db, self.node.get_children(db)[2])
22468 }
22469 pub fn arguments(&self, db: &dyn SyntaxGroup) -> TokenTreeNode {
22470 TokenTreeNode::from_syntax_node(db, self.node.get_children(db)[3])
22471 }
22472 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
22473 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
22474 }
22475}
22476#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22477pub struct ItemInlineMacroPtr(pub SyntaxStablePtrId);
22478impl ItemInlineMacroPtr {}
22479impl TypedStablePtr for ItemInlineMacroPtr {
22480 type SyntaxNode = ItemInlineMacro;
22481 fn untyped(&self) -> SyntaxStablePtrId {
22482 self.0
22483 }
22484 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemInlineMacro {
22485 ItemInlineMacro::from_syntax_node(db, self.0.lookup(db))
22486 }
22487}
22488impl From<ItemInlineMacroPtr> for SyntaxStablePtrId {
22489 fn from(ptr: ItemInlineMacroPtr) -> Self {
22490 ptr.untyped()
22491 }
22492}
22493#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22494pub struct ItemInlineMacroGreen(pub GreenId);
22495impl TypedSyntaxNode for ItemInlineMacro {
22496 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemInlineMacro);
22497 type StablePtr = ItemInlineMacroPtr;
22498 type Green = ItemInlineMacroGreen;
22499 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22500 ItemInlineMacroGreen(
22501 Arc::new(GreenNode {
22502 kind: SyntaxKind::ItemInlineMacro,
22503 details: GreenNodeDetails::Node {
22504 children: [
22505 AttributeList::missing(db).0,
22506 ExprPath::missing(db).0,
22507 TerminalNot::missing(db).0,
22508 TokenTreeNode::missing(db).0,
22509 TerminalSemicolon::missing(db).0,
22510 ]
22511 .into(),
22512 width: TextWidth::default(),
22513 },
22514 })
22515 .intern(db),
22516 )
22517 }
22518 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22519 let kind = node.kind(db);
22520 assert_eq!(
22521 kind,
22522 SyntaxKind::ItemInlineMacro,
22523 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22524 kind,
22525 SyntaxKind::ItemInlineMacro
22526 );
22527 Self { node }
22528 }
22529 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22530 let kind = node.kind(db);
22531 if kind == SyntaxKind::ItemInlineMacro {
22532 Some(Self::from_syntax_node(db, node))
22533 } else {
22534 None
22535 }
22536 }
22537 fn as_syntax_node(&self) -> SyntaxNode {
22538 self.node
22539 }
22540 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22541 ItemInlineMacroPtr(self.node.stable_ptr(db))
22542 }
22543}
22544#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22545pub struct ItemMacroDeclaration {
22546 node: SyntaxNode,
22547}
22548impl ItemMacroDeclaration {
22549 pub const INDEX_ATTRIBUTES: usize = 0;
22550 pub const INDEX_VISIBILITY: usize = 1;
22551 pub const INDEX_MACRO_KW: usize = 2;
22552 pub const INDEX_NAME: usize = 3;
22553 pub const INDEX_LBRACE: usize = 4;
22554 pub const INDEX_RULES: usize = 5;
22555 pub const INDEX_RBRACE: usize = 6;
22556 pub fn new_green(
22557 db: &dyn SyntaxGroup,
22558 attributes: AttributeListGreen,
22559 visibility: VisibilityGreen,
22560 macro_kw: TerminalMacroGreen,
22561 name: TerminalIdentifierGreen,
22562 lbrace: TerminalLBraceGreen,
22563 rules: MacroRulesListGreen,
22564 rbrace: TerminalRBraceGreen,
22565 ) -> ItemMacroDeclarationGreen {
22566 let children =
22567 [attributes.0, visibility.0, macro_kw.0, name.0, lbrace.0, rules.0, rbrace.0];
22568 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22569 ItemMacroDeclarationGreen(
22570 Arc::new(GreenNode {
22571 kind: SyntaxKind::ItemMacroDeclaration,
22572 details: GreenNodeDetails::Node { children: children.into(), width },
22573 })
22574 .intern(db),
22575 )
22576 }
22577}
22578impl ItemMacroDeclaration {
22579 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
22580 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
22581 }
22582 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
22583 Visibility::from_syntax_node(db, self.node.get_children(db)[1])
22584 }
22585 pub fn macro_kw(&self, db: &dyn SyntaxGroup) -> TerminalMacro {
22586 TerminalMacro::from_syntax_node(db, self.node.get_children(db)[2])
22587 }
22588 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
22589 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[3])
22590 }
22591 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
22592 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[4])
22593 }
22594 pub fn rules(&self, db: &dyn SyntaxGroup) -> MacroRulesList {
22595 MacroRulesList::from_syntax_node(db, self.node.get_children(db)[5])
22596 }
22597 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
22598 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[6])
22599 }
22600}
22601#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22602pub struct ItemMacroDeclarationPtr(pub SyntaxStablePtrId);
22603impl ItemMacroDeclarationPtr {
22604 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
22605 let ptr = self.0.lookup_intern(db);
22606 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
22607 TerminalIdentifierGreen(key_fields[0])
22608 } else {
22609 panic!("Unexpected key field query on root.");
22610 }
22611 }
22612}
22613impl TypedStablePtr for ItemMacroDeclarationPtr {
22614 type SyntaxNode = ItemMacroDeclaration;
22615 fn untyped(&self) -> SyntaxStablePtrId {
22616 self.0
22617 }
22618 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemMacroDeclaration {
22619 ItemMacroDeclaration::from_syntax_node(db, self.0.lookup(db))
22620 }
22621}
22622impl From<ItemMacroDeclarationPtr> for SyntaxStablePtrId {
22623 fn from(ptr: ItemMacroDeclarationPtr) -> Self {
22624 ptr.untyped()
22625 }
22626}
22627#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22628pub struct ItemMacroDeclarationGreen(pub GreenId);
22629impl TypedSyntaxNode for ItemMacroDeclaration {
22630 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemMacroDeclaration);
22631 type StablePtr = ItemMacroDeclarationPtr;
22632 type Green = ItemMacroDeclarationGreen;
22633 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22634 ItemMacroDeclarationGreen(
22635 Arc::new(GreenNode {
22636 kind: SyntaxKind::ItemMacroDeclaration,
22637 details: GreenNodeDetails::Node {
22638 children: [
22639 AttributeList::missing(db).0,
22640 Visibility::missing(db).0,
22641 TerminalMacro::missing(db).0,
22642 TerminalIdentifier::missing(db).0,
22643 TerminalLBrace::missing(db).0,
22644 MacroRulesList::missing(db).0,
22645 TerminalRBrace::missing(db).0,
22646 ]
22647 .into(),
22648 width: TextWidth::default(),
22649 },
22650 })
22651 .intern(db),
22652 )
22653 }
22654 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22655 let kind = node.kind(db);
22656 assert_eq!(
22657 kind,
22658 SyntaxKind::ItemMacroDeclaration,
22659 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22660 kind,
22661 SyntaxKind::ItemMacroDeclaration
22662 );
22663 Self { node }
22664 }
22665 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22666 let kind = node.kind(db);
22667 if kind == SyntaxKind::ItemMacroDeclaration {
22668 Some(Self::from_syntax_node(db, node))
22669 } else {
22670 None
22671 }
22672 }
22673 fn as_syntax_node(&self) -> SyntaxNode {
22674 self.node
22675 }
22676 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22677 ItemMacroDeclarationPtr(self.node.stable_ptr(db))
22678 }
22679}
22680#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22681pub struct MacroRulesList(ElementList<MacroRule, 1>);
22682impl Deref for MacroRulesList {
22683 type Target = ElementList<MacroRule, 1>;
22684 fn deref(&self) -> &Self::Target {
22685 &self.0
22686 }
22687}
22688impl MacroRulesList {
22689 pub fn new_green(db: &dyn SyntaxGroup, children: &[MacroRuleGreen]) -> MacroRulesListGreen {
22690 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
22691 MacroRulesListGreen(
22692 Arc::new(GreenNode {
22693 kind: SyntaxKind::MacroRulesList,
22694 details: GreenNodeDetails::Node {
22695 children: children.iter().map(|x| x.0).collect(),
22696 width,
22697 },
22698 })
22699 .intern(db),
22700 )
22701 }
22702}
22703#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22704pub struct MacroRulesListPtr(pub SyntaxStablePtrId);
22705impl TypedStablePtr for MacroRulesListPtr {
22706 type SyntaxNode = MacroRulesList;
22707 fn untyped(&self) -> SyntaxStablePtrId {
22708 self.0
22709 }
22710 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroRulesList {
22711 MacroRulesList::from_syntax_node(db, self.0.lookup(db))
22712 }
22713}
22714impl From<MacroRulesListPtr> for SyntaxStablePtrId {
22715 fn from(ptr: MacroRulesListPtr) -> Self {
22716 ptr.untyped()
22717 }
22718}
22719#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22720pub struct MacroRulesListGreen(pub GreenId);
22721impl TypedSyntaxNode for MacroRulesList {
22722 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroRulesList);
22723 type StablePtr = MacroRulesListPtr;
22724 type Green = MacroRulesListGreen;
22725 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22726 MacroRulesListGreen(
22727 Arc::new(GreenNode {
22728 kind: SyntaxKind::MacroRulesList,
22729 details: GreenNodeDetails::Node {
22730 children: [].into(),
22731 width: TextWidth::default(),
22732 },
22733 })
22734 .intern(db),
22735 )
22736 }
22737 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22738 Self(ElementList::new(node))
22739 }
22740 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22741 if node.kind(db) == SyntaxKind::MacroRulesList {
22742 Some(Self(ElementList::new(node)))
22743 } else {
22744 None
22745 }
22746 }
22747 fn as_syntax_node(&self) -> SyntaxNode {
22748 self.node
22749 }
22750 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22751 MacroRulesListPtr(self.node.stable_ptr(db))
22752 }
22753}
22754#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22755pub struct MacroRule {
22756 node: SyntaxNode,
22757}
22758impl MacroRule {
22759 pub const INDEX_LHS: usize = 0;
22760 pub const INDEX_FAT_ARROW: usize = 1;
22761 pub const INDEX_RHS: usize = 2;
22762 pub const INDEX_SEMICOLON: usize = 3;
22763 pub fn new_green(
22764 db: &dyn SyntaxGroup,
22765 lhs: WrappedMacroGreen,
22766 fat_arrow: TerminalMatchArrowGreen,
22767 rhs: BracedMacroGreen,
22768 semicolon: TerminalSemicolonGreen,
22769 ) -> MacroRuleGreen {
22770 let children = [lhs.0, fat_arrow.0, rhs.0, semicolon.0];
22771 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22772 MacroRuleGreen(
22773 Arc::new(GreenNode {
22774 kind: SyntaxKind::MacroRule,
22775 details: GreenNodeDetails::Node { children: children.into(), width },
22776 })
22777 .intern(db),
22778 )
22779 }
22780}
22781impl MacroRule {
22782 pub fn lhs(&self, db: &dyn SyntaxGroup) -> WrappedMacro {
22783 WrappedMacro::from_syntax_node(db, self.node.get_children(db)[0])
22784 }
22785 pub fn fat_arrow(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
22786 TerminalMatchArrow::from_syntax_node(db, self.node.get_children(db)[1])
22787 }
22788 pub fn rhs(&self, db: &dyn SyntaxGroup) -> BracedMacro {
22789 BracedMacro::from_syntax_node(db, self.node.get_children(db)[2])
22790 }
22791 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
22792 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[3])
22793 }
22794}
22795#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22796pub struct MacroRulePtr(pub SyntaxStablePtrId);
22797impl MacroRulePtr {}
22798impl TypedStablePtr for MacroRulePtr {
22799 type SyntaxNode = MacroRule;
22800 fn untyped(&self) -> SyntaxStablePtrId {
22801 self.0
22802 }
22803 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroRule {
22804 MacroRule::from_syntax_node(db, self.0.lookup(db))
22805 }
22806}
22807impl From<MacroRulePtr> for SyntaxStablePtrId {
22808 fn from(ptr: MacroRulePtr) -> Self {
22809 ptr.untyped()
22810 }
22811}
22812#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22813pub struct MacroRuleGreen(pub GreenId);
22814impl TypedSyntaxNode for MacroRule {
22815 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroRule);
22816 type StablePtr = MacroRulePtr;
22817 type Green = MacroRuleGreen;
22818 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22819 MacroRuleGreen(
22820 Arc::new(GreenNode {
22821 kind: SyntaxKind::MacroRule,
22822 details: GreenNodeDetails::Node {
22823 children: [
22824 WrappedMacro::missing(db).0,
22825 TerminalMatchArrow::missing(db).0,
22826 BracedMacro::missing(db).0,
22827 TerminalSemicolon::missing(db).0,
22828 ]
22829 .into(),
22830 width: TextWidth::default(),
22831 },
22832 })
22833 .intern(db),
22834 )
22835 }
22836 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22837 let kind = node.kind(db);
22838 assert_eq!(
22839 kind,
22840 SyntaxKind::MacroRule,
22841 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22842 kind,
22843 SyntaxKind::MacroRule
22844 );
22845 Self { node }
22846 }
22847 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22848 let kind = node.kind(db);
22849 if kind == SyntaxKind::MacroRule { Some(Self::from_syntax_node(db, node)) } else { None }
22850 }
22851 fn as_syntax_node(&self) -> SyntaxNode {
22852 self.node
22853 }
22854 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22855 MacroRulePtr(self.node.stable_ptr(db))
22856 }
22857}
22858#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22859pub struct ParamKind {
22860 node: SyntaxNode,
22861}
22862impl ParamKind {
22863 pub const INDEX_COLON: usize = 0;
22864 pub const INDEX_KIND: usize = 1;
22865 pub fn new_green(
22866 db: &dyn SyntaxGroup,
22867 colon: TerminalColonGreen,
22868 kind: MacroParamKindGreen,
22869 ) -> ParamKindGreen {
22870 let children = [colon.0, kind.0];
22871 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
22872 ParamKindGreen(
22873 Arc::new(GreenNode {
22874 kind: SyntaxKind::ParamKind,
22875 details: GreenNodeDetails::Node { children: children.into(), width },
22876 })
22877 .intern(db),
22878 )
22879 }
22880}
22881impl ParamKind {
22882 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
22883 TerminalColon::from_syntax_node(db, self.node.get_children(db)[0])
22884 }
22885 pub fn kind(&self, db: &dyn SyntaxGroup) -> MacroParamKind {
22886 MacroParamKind::from_syntax_node(db, self.node.get_children(db)[1])
22887 }
22888}
22889#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22890pub struct ParamKindPtr(pub SyntaxStablePtrId);
22891impl ParamKindPtr {}
22892impl TypedStablePtr for ParamKindPtr {
22893 type SyntaxNode = ParamKind;
22894 fn untyped(&self) -> SyntaxStablePtrId {
22895 self.0
22896 }
22897 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamKind {
22898 ParamKind::from_syntax_node(db, self.0.lookup(db))
22899 }
22900}
22901impl From<ParamKindPtr> for SyntaxStablePtrId {
22902 fn from(ptr: ParamKindPtr) -> Self {
22903 ptr.untyped()
22904 }
22905}
22906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22907pub struct ParamKindGreen(pub GreenId);
22908impl TypedSyntaxNode for ParamKind {
22909 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamKind);
22910 type StablePtr = ParamKindPtr;
22911 type Green = ParamKindGreen;
22912 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22913 ParamKindGreen(
22914 Arc::new(GreenNode {
22915 kind: SyntaxKind::ParamKind,
22916 details: GreenNodeDetails::Node {
22917 children: [TerminalColon::missing(db).0, MacroParamKind::missing(db).0].into(),
22918 width: TextWidth::default(),
22919 },
22920 })
22921 .intern(db),
22922 )
22923 }
22924 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22925 let kind = node.kind(db);
22926 assert_eq!(
22927 kind,
22928 SyntaxKind::ParamKind,
22929 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22930 kind,
22931 SyntaxKind::ParamKind
22932 );
22933 Self { node }
22934 }
22935 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22936 let kind = node.kind(db);
22937 if kind == SyntaxKind::ParamKind { Some(Self::from_syntax_node(db, node)) } else { None }
22938 }
22939 fn as_syntax_node(&self) -> SyntaxNode {
22940 self.node
22941 }
22942 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
22943 ParamKindPtr(self.node.stable_ptr(db))
22944 }
22945}
22946#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22947pub enum OptionParamKind {
22948 Empty(OptionParamKindEmpty),
22949 ParamKind(ParamKind),
22950}
22951#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22952pub struct OptionParamKindPtr(pub SyntaxStablePtrId);
22953impl TypedStablePtr for OptionParamKindPtr {
22954 type SyntaxNode = OptionParamKind;
22955 fn untyped(&self) -> SyntaxStablePtrId {
22956 self.0
22957 }
22958 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionParamKind {
22959 OptionParamKind::from_syntax_node(db, self.0.lookup(db))
22960 }
22961}
22962impl From<OptionParamKindPtr> for SyntaxStablePtrId {
22963 fn from(ptr: OptionParamKindPtr) -> Self {
22964 ptr.untyped()
22965 }
22966}
22967impl From<OptionParamKindEmptyPtr> for OptionParamKindPtr {
22968 fn from(value: OptionParamKindEmptyPtr) -> Self {
22969 Self(value.0)
22970 }
22971}
22972impl From<ParamKindPtr> for OptionParamKindPtr {
22973 fn from(value: ParamKindPtr) -> Self {
22974 Self(value.0)
22975 }
22976}
22977impl From<OptionParamKindEmptyGreen> for OptionParamKindGreen {
22978 fn from(value: OptionParamKindEmptyGreen) -> Self {
22979 Self(value.0)
22980 }
22981}
22982impl From<ParamKindGreen> for OptionParamKindGreen {
22983 fn from(value: ParamKindGreen) -> Self {
22984 Self(value.0)
22985 }
22986}
22987#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22988pub struct OptionParamKindGreen(pub GreenId);
22989impl TypedSyntaxNode for OptionParamKind {
22990 const OPTIONAL_KIND: Option<SyntaxKind> = None;
22991 type StablePtr = OptionParamKindPtr;
22992 type Green = OptionParamKindGreen;
22993 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22994 panic!("No missing variant.");
22995 }
22996 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22997 let kind = node.kind(db);
22998 match kind {
22999 SyntaxKind::OptionParamKindEmpty => {
23000 OptionParamKind::Empty(OptionParamKindEmpty::from_syntax_node(db, node))
23001 }
23002 SyntaxKind::ParamKind => {
23003 OptionParamKind::ParamKind(ParamKind::from_syntax_node(db, node))
23004 }
23005 _ => {
23006 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "OptionParamKind")
23007 }
23008 }
23009 }
23010 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23011 let kind = node.kind(db);
23012 match kind {
23013 SyntaxKind::OptionParamKindEmpty => {
23014 Some(OptionParamKind::Empty(OptionParamKindEmpty::from_syntax_node(db, node)))
23015 }
23016 SyntaxKind::ParamKind => {
23017 Some(OptionParamKind::ParamKind(ParamKind::from_syntax_node(db, node)))
23018 }
23019 _ => None,
23020 }
23021 }
23022 fn as_syntax_node(&self) -> SyntaxNode {
23023 match self {
23024 OptionParamKind::Empty(x) => x.as_syntax_node(),
23025 OptionParamKind::ParamKind(x) => x.as_syntax_node(),
23026 }
23027 }
23028 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23029 OptionParamKindPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
23030 }
23031}
23032impl OptionParamKind {
23033 pub fn is_variant(kind: SyntaxKind) -> bool {
23035 matches!(kind, SyntaxKind::OptionParamKindEmpty | SyntaxKind::ParamKind)
23036 }
23037}
23038#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23039pub struct OptionParamKindEmpty {
23040 node: SyntaxNode,
23041}
23042impl OptionParamKindEmpty {
23043 pub fn new_green(db: &dyn SyntaxGroup) -> OptionParamKindEmptyGreen {
23044 let children = [];
23045 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23046 OptionParamKindEmptyGreen(
23047 Arc::new(GreenNode {
23048 kind: SyntaxKind::OptionParamKindEmpty,
23049 details: GreenNodeDetails::Node { children: children.into(), width },
23050 })
23051 .intern(db),
23052 )
23053 }
23054}
23055impl OptionParamKindEmpty {}
23056#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23057pub struct OptionParamKindEmptyPtr(pub SyntaxStablePtrId);
23058impl OptionParamKindEmptyPtr {}
23059impl TypedStablePtr for OptionParamKindEmptyPtr {
23060 type SyntaxNode = OptionParamKindEmpty;
23061 fn untyped(&self) -> SyntaxStablePtrId {
23062 self.0
23063 }
23064 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionParamKindEmpty {
23065 OptionParamKindEmpty::from_syntax_node(db, self.0.lookup(db))
23066 }
23067}
23068impl From<OptionParamKindEmptyPtr> for SyntaxStablePtrId {
23069 fn from(ptr: OptionParamKindEmptyPtr) -> Self {
23070 ptr.untyped()
23071 }
23072}
23073#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23074pub struct OptionParamKindEmptyGreen(pub GreenId);
23075impl TypedSyntaxNode for OptionParamKindEmpty {
23076 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionParamKindEmpty);
23077 type StablePtr = OptionParamKindEmptyPtr;
23078 type Green = OptionParamKindEmptyGreen;
23079 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23080 OptionParamKindEmptyGreen(
23081 Arc::new(GreenNode {
23082 kind: SyntaxKind::OptionParamKindEmpty,
23083 details: GreenNodeDetails::Node {
23084 children: [].into(),
23085 width: TextWidth::default(),
23086 },
23087 })
23088 .intern(db),
23089 )
23090 }
23091 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23092 let kind = node.kind(db);
23093 assert_eq!(
23094 kind,
23095 SyntaxKind::OptionParamKindEmpty,
23096 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23097 kind,
23098 SyntaxKind::OptionParamKindEmpty
23099 );
23100 Self { node }
23101 }
23102 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23103 let kind = node.kind(db);
23104 if kind == SyntaxKind::OptionParamKindEmpty {
23105 Some(Self::from_syntax_node(db, node))
23106 } else {
23107 None
23108 }
23109 }
23110 fn as_syntax_node(&self) -> SyntaxNode {
23111 self.node
23112 }
23113 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23114 OptionParamKindEmptyPtr(self.node.stable_ptr(db))
23115 }
23116}
23117#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23118pub struct MacroParam {
23119 node: SyntaxNode,
23120}
23121impl MacroParam {
23122 pub const INDEX_DOLLAR: usize = 0;
23123 pub const INDEX_NAME: usize = 1;
23124 pub const INDEX_KIND: usize = 2;
23125 pub fn new_green(
23126 db: &dyn SyntaxGroup,
23127 dollar: TerminalDollarGreen,
23128 name: TerminalIdentifierGreen,
23129 kind: OptionParamKindGreen,
23130 ) -> MacroParamGreen {
23131 let children = [dollar.0, name.0, kind.0];
23132 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23133 MacroParamGreen(
23134 Arc::new(GreenNode {
23135 kind: SyntaxKind::MacroParam,
23136 details: GreenNodeDetails::Node { children: children.into(), width },
23137 })
23138 .intern(db),
23139 )
23140 }
23141}
23142impl MacroParam {
23143 pub fn dollar(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
23144 TerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
23145 }
23146 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
23147 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
23148 }
23149 pub fn kind(&self, db: &dyn SyntaxGroup) -> OptionParamKind {
23150 OptionParamKind::from_syntax_node(db, self.node.get_children(db)[2])
23151 }
23152}
23153#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23154pub struct MacroParamPtr(pub SyntaxStablePtrId);
23155impl MacroParamPtr {}
23156impl TypedStablePtr for MacroParamPtr {
23157 type SyntaxNode = MacroParam;
23158 fn untyped(&self) -> SyntaxStablePtrId {
23159 self.0
23160 }
23161 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroParam {
23162 MacroParam::from_syntax_node(db, self.0.lookup(db))
23163 }
23164}
23165impl From<MacroParamPtr> for SyntaxStablePtrId {
23166 fn from(ptr: MacroParamPtr) -> Self {
23167 ptr.untyped()
23168 }
23169}
23170#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23171pub struct MacroParamGreen(pub GreenId);
23172impl TypedSyntaxNode for MacroParam {
23173 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroParam);
23174 type StablePtr = MacroParamPtr;
23175 type Green = MacroParamGreen;
23176 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23177 MacroParamGreen(
23178 Arc::new(GreenNode {
23179 kind: SyntaxKind::MacroParam,
23180 details: GreenNodeDetails::Node {
23181 children: [
23182 TerminalDollar::missing(db).0,
23183 TerminalIdentifier::missing(db).0,
23184 OptionParamKind::missing(db).0,
23185 ]
23186 .into(),
23187 width: TextWidth::default(),
23188 },
23189 })
23190 .intern(db),
23191 )
23192 }
23193 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23194 let kind = node.kind(db);
23195 assert_eq!(
23196 kind,
23197 SyntaxKind::MacroParam,
23198 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23199 kind,
23200 SyntaxKind::MacroParam
23201 );
23202 Self { node }
23203 }
23204 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23205 let kind = node.kind(db);
23206 if kind == SyntaxKind::MacroParam { Some(Self::from_syntax_node(db, node)) } else { None }
23207 }
23208 fn as_syntax_node(&self) -> SyntaxNode {
23209 self.node
23210 }
23211 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23212 MacroParamPtr(self.node.stable_ptr(db))
23213 }
23214}
23215#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23216pub struct MacroRepetition {
23217 node: SyntaxNode,
23218}
23219impl MacroRepetition {
23220 pub const INDEX_DOLLAR: usize = 0;
23221 pub const INDEX_LPAREN: usize = 1;
23222 pub const INDEX_ELEMENTS: usize = 2;
23223 pub const INDEX_RPAREN: usize = 3;
23224 pub const INDEX_SEPARATOR: usize = 4;
23225 pub const INDEX_OPERATOR: usize = 5;
23226 pub fn new_green(
23227 db: &dyn SyntaxGroup,
23228 dollar: TerminalDollarGreen,
23229 lparen: TerminalLParenGreen,
23230 elements: MacroElementsGreen,
23231 rparen: TerminalRParenGreen,
23232 separator: OptionTerminalCommaGreen,
23233 operator: MacroRepetitionOperatorGreen,
23234 ) -> MacroRepetitionGreen {
23235 let children = [dollar.0, lparen.0, elements.0, rparen.0, separator.0, operator.0];
23236 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23237 MacroRepetitionGreen(
23238 Arc::new(GreenNode {
23239 kind: SyntaxKind::MacroRepetition,
23240 details: GreenNodeDetails::Node { children: children.into(), width },
23241 })
23242 .intern(db),
23243 )
23244 }
23245}
23246impl MacroRepetition {
23247 pub fn dollar(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
23248 TerminalDollar::from_syntax_node(db, self.node.get_children(db)[0])
23249 }
23250 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
23251 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[1])
23252 }
23253 pub fn elements(&self, db: &dyn SyntaxGroup) -> MacroElements {
23254 MacroElements::from_syntax_node(db, self.node.get_children(db)[2])
23255 }
23256 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
23257 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[3])
23258 }
23259 pub fn separator(&self, db: &dyn SyntaxGroup) -> OptionTerminalComma {
23260 OptionTerminalComma::from_syntax_node(db, self.node.get_children(db)[4])
23261 }
23262 pub fn operator(&self, db: &dyn SyntaxGroup) -> MacroRepetitionOperator {
23263 MacroRepetitionOperator::from_syntax_node(db, self.node.get_children(db)[5])
23264 }
23265}
23266#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23267pub struct MacroRepetitionPtr(pub SyntaxStablePtrId);
23268impl MacroRepetitionPtr {}
23269impl TypedStablePtr for MacroRepetitionPtr {
23270 type SyntaxNode = MacroRepetition;
23271 fn untyped(&self) -> SyntaxStablePtrId {
23272 self.0
23273 }
23274 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroRepetition {
23275 MacroRepetition::from_syntax_node(db, self.0.lookup(db))
23276 }
23277}
23278impl From<MacroRepetitionPtr> for SyntaxStablePtrId {
23279 fn from(ptr: MacroRepetitionPtr) -> Self {
23280 ptr.untyped()
23281 }
23282}
23283#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23284pub struct MacroRepetitionGreen(pub GreenId);
23285impl TypedSyntaxNode for MacroRepetition {
23286 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroRepetition);
23287 type StablePtr = MacroRepetitionPtr;
23288 type Green = MacroRepetitionGreen;
23289 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23290 MacroRepetitionGreen(
23291 Arc::new(GreenNode {
23292 kind: SyntaxKind::MacroRepetition,
23293 details: GreenNodeDetails::Node {
23294 children: [
23295 TerminalDollar::missing(db).0,
23296 TerminalLParen::missing(db).0,
23297 MacroElements::missing(db).0,
23298 TerminalRParen::missing(db).0,
23299 OptionTerminalComma::missing(db).0,
23300 MacroRepetitionOperator::missing(db).0,
23301 ]
23302 .into(),
23303 width: TextWidth::default(),
23304 },
23305 })
23306 .intern(db),
23307 )
23308 }
23309 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23310 let kind = node.kind(db);
23311 assert_eq!(
23312 kind,
23313 SyntaxKind::MacroRepetition,
23314 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23315 kind,
23316 SyntaxKind::MacroRepetition
23317 );
23318 Self { node }
23319 }
23320 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23321 let kind = node.kind(db);
23322 if kind == SyntaxKind::MacroRepetition {
23323 Some(Self::from_syntax_node(db, node))
23324 } else {
23325 None
23326 }
23327 }
23328 fn as_syntax_node(&self) -> SyntaxNode {
23329 self.node
23330 }
23331 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23332 MacroRepetitionPtr(self.node.stable_ptr(db))
23333 }
23334}
23335#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23336pub enum OptionTerminalComma {
23337 Empty(OptionTerminalCommaEmpty),
23338 TerminalComma(TerminalComma),
23339}
23340#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23341pub struct OptionTerminalCommaPtr(pub SyntaxStablePtrId);
23342impl TypedStablePtr for OptionTerminalCommaPtr {
23343 type SyntaxNode = OptionTerminalComma;
23344 fn untyped(&self) -> SyntaxStablePtrId {
23345 self.0
23346 }
23347 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalComma {
23348 OptionTerminalComma::from_syntax_node(db, self.0.lookup(db))
23349 }
23350}
23351impl From<OptionTerminalCommaPtr> for SyntaxStablePtrId {
23352 fn from(ptr: OptionTerminalCommaPtr) -> Self {
23353 ptr.untyped()
23354 }
23355}
23356impl From<OptionTerminalCommaEmptyPtr> for OptionTerminalCommaPtr {
23357 fn from(value: OptionTerminalCommaEmptyPtr) -> Self {
23358 Self(value.0)
23359 }
23360}
23361impl From<TerminalCommaPtr> for OptionTerminalCommaPtr {
23362 fn from(value: TerminalCommaPtr) -> Self {
23363 Self(value.0)
23364 }
23365}
23366impl From<OptionTerminalCommaEmptyGreen> for OptionTerminalCommaGreen {
23367 fn from(value: OptionTerminalCommaEmptyGreen) -> Self {
23368 Self(value.0)
23369 }
23370}
23371impl From<TerminalCommaGreen> for OptionTerminalCommaGreen {
23372 fn from(value: TerminalCommaGreen) -> Self {
23373 Self(value.0)
23374 }
23375}
23376#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23377pub struct OptionTerminalCommaGreen(pub GreenId);
23378impl TypedSyntaxNode for OptionTerminalComma {
23379 const OPTIONAL_KIND: Option<SyntaxKind> = None;
23380 type StablePtr = OptionTerminalCommaPtr;
23381 type Green = OptionTerminalCommaGreen;
23382 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23383 panic!("No missing variant.");
23384 }
23385 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23386 let kind = node.kind(db);
23387 match kind {
23388 SyntaxKind::OptionTerminalCommaEmpty => {
23389 OptionTerminalComma::Empty(OptionTerminalCommaEmpty::from_syntax_node(db, node))
23390 }
23391 SyntaxKind::TerminalComma => {
23392 OptionTerminalComma::TerminalComma(TerminalComma::from_syntax_node(db, node))
23393 }
23394 _ => panic!(
23395 "Unexpected syntax kind {:?} when constructing {}.",
23396 kind, "OptionTerminalComma"
23397 ),
23398 }
23399 }
23400 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23401 let kind = node.kind(db);
23402 match kind {
23403 SyntaxKind::OptionTerminalCommaEmpty => Some(OptionTerminalComma::Empty(
23404 OptionTerminalCommaEmpty::from_syntax_node(db, node),
23405 )),
23406 SyntaxKind::TerminalComma => {
23407 Some(OptionTerminalComma::TerminalComma(TerminalComma::from_syntax_node(db, node)))
23408 }
23409 _ => None,
23410 }
23411 }
23412 fn as_syntax_node(&self) -> SyntaxNode {
23413 match self {
23414 OptionTerminalComma::Empty(x) => x.as_syntax_node(),
23415 OptionTerminalComma::TerminalComma(x) => x.as_syntax_node(),
23416 }
23417 }
23418 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23419 OptionTerminalCommaPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
23420 }
23421}
23422impl OptionTerminalComma {
23423 pub fn is_variant(kind: SyntaxKind) -> bool {
23425 matches!(kind, SyntaxKind::OptionTerminalCommaEmpty | SyntaxKind::TerminalComma)
23426 }
23427}
23428#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23429pub struct OptionTerminalCommaEmpty {
23430 node: SyntaxNode,
23431}
23432impl OptionTerminalCommaEmpty {
23433 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalCommaEmptyGreen {
23434 let children = [];
23435 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23436 OptionTerminalCommaEmptyGreen(
23437 Arc::new(GreenNode {
23438 kind: SyntaxKind::OptionTerminalCommaEmpty,
23439 details: GreenNodeDetails::Node { children: children.into(), width },
23440 })
23441 .intern(db),
23442 )
23443 }
23444}
23445impl OptionTerminalCommaEmpty {}
23446#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23447pub struct OptionTerminalCommaEmptyPtr(pub SyntaxStablePtrId);
23448impl OptionTerminalCommaEmptyPtr {}
23449impl TypedStablePtr for OptionTerminalCommaEmptyPtr {
23450 type SyntaxNode = OptionTerminalCommaEmpty;
23451 fn untyped(&self) -> SyntaxStablePtrId {
23452 self.0
23453 }
23454 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalCommaEmpty {
23455 OptionTerminalCommaEmpty::from_syntax_node(db, self.0.lookup(db))
23456 }
23457}
23458impl From<OptionTerminalCommaEmptyPtr> for SyntaxStablePtrId {
23459 fn from(ptr: OptionTerminalCommaEmptyPtr) -> Self {
23460 ptr.untyped()
23461 }
23462}
23463#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23464pub struct OptionTerminalCommaEmptyGreen(pub GreenId);
23465impl TypedSyntaxNode for OptionTerminalCommaEmpty {
23466 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalCommaEmpty);
23467 type StablePtr = OptionTerminalCommaEmptyPtr;
23468 type Green = OptionTerminalCommaEmptyGreen;
23469 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23470 OptionTerminalCommaEmptyGreen(
23471 Arc::new(GreenNode {
23472 kind: SyntaxKind::OptionTerminalCommaEmpty,
23473 details: GreenNodeDetails::Node {
23474 children: [].into(),
23475 width: TextWidth::default(),
23476 },
23477 })
23478 .intern(db),
23479 )
23480 }
23481 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23482 let kind = node.kind(db);
23483 assert_eq!(
23484 kind,
23485 SyntaxKind::OptionTerminalCommaEmpty,
23486 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23487 kind,
23488 SyntaxKind::OptionTerminalCommaEmpty
23489 );
23490 Self { node }
23491 }
23492 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23493 let kind = node.kind(db);
23494 if kind == SyntaxKind::OptionTerminalCommaEmpty {
23495 Some(Self::from_syntax_node(db, node))
23496 } else {
23497 None
23498 }
23499 }
23500 fn as_syntax_node(&self) -> SyntaxNode {
23501 self.node
23502 }
23503 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23504 OptionTerminalCommaEmptyPtr(self.node.stable_ptr(db))
23505 }
23506}
23507#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23508pub enum MacroRepetitionOperator {
23509 ZeroOrOne(TerminalQuestionMark),
23510 OneOrMore(TerminalPlus),
23511 ZeroOrMore(TerminalMul),
23512 Missing(MacroRepetitionOperatorMissing),
23513}
23514#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23515pub struct MacroRepetitionOperatorPtr(pub SyntaxStablePtrId);
23516impl TypedStablePtr for MacroRepetitionOperatorPtr {
23517 type SyntaxNode = MacroRepetitionOperator;
23518 fn untyped(&self) -> SyntaxStablePtrId {
23519 self.0
23520 }
23521 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroRepetitionOperator {
23522 MacroRepetitionOperator::from_syntax_node(db, self.0.lookup(db))
23523 }
23524}
23525impl From<MacroRepetitionOperatorPtr> for SyntaxStablePtrId {
23526 fn from(ptr: MacroRepetitionOperatorPtr) -> Self {
23527 ptr.untyped()
23528 }
23529}
23530impl From<TerminalQuestionMarkPtr> for MacroRepetitionOperatorPtr {
23531 fn from(value: TerminalQuestionMarkPtr) -> Self {
23532 Self(value.0)
23533 }
23534}
23535impl From<TerminalPlusPtr> for MacroRepetitionOperatorPtr {
23536 fn from(value: TerminalPlusPtr) -> Self {
23537 Self(value.0)
23538 }
23539}
23540impl From<TerminalMulPtr> for MacroRepetitionOperatorPtr {
23541 fn from(value: TerminalMulPtr) -> Self {
23542 Self(value.0)
23543 }
23544}
23545impl From<MacroRepetitionOperatorMissingPtr> for MacroRepetitionOperatorPtr {
23546 fn from(value: MacroRepetitionOperatorMissingPtr) -> Self {
23547 Self(value.0)
23548 }
23549}
23550impl From<TerminalQuestionMarkGreen> for MacroRepetitionOperatorGreen {
23551 fn from(value: TerminalQuestionMarkGreen) -> Self {
23552 Self(value.0)
23553 }
23554}
23555impl From<TerminalPlusGreen> for MacroRepetitionOperatorGreen {
23556 fn from(value: TerminalPlusGreen) -> Self {
23557 Self(value.0)
23558 }
23559}
23560impl From<TerminalMulGreen> for MacroRepetitionOperatorGreen {
23561 fn from(value: TerminalMulGreen) -> Self {
23562 Self(value.0)
23563 }
23564}
23565impl From<MacroRepetitionOperatorMissingGreen> for MacroRepetitionOperatorGreen {
23566 fn from(value: MacroRepetitionOperatorMissingGreen) -> Self {
23567 Self(value.0)
23568 }
23569}
23570#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23571pub struct MacroRepetitionOperatorGreen(pub GreenId);
23572impl TypedSyntaxNode for MacroRepetitionOperator {
23573 const OPTIONAL_KIND: Option<SyntaxKind> = None;
23574 type StablePtr = MacroRepetitionOperatorPtr;
23575 type Green = MacroRepetitionOperatorGreen;
23576 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23577 MacroRepetitionOperatorGreen(MacroRepetitionOperatorMissing::missing(db).0)
23578 }
23579 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23580 let kind = node.kind(db);
23581 match kind {
23582 SyntaxKind::TerminalQuestionMark => {
23583 MacroRepetitionOperator::ZeroOrOne(TerminalQuestionMark::from_syntax_node(db, node))
23584 }
23585 SyntaxKind::TerminalPlus => {
23586 MacroRepetitionOperator::OneOrMore(TerminalPlus::from_syntax_node(db, node))
23587 }
23588 SyntaxKind::TerminalMul => {
23589 MacroRepetitionOperator::ZeroOrMore(TerminalMul::from_syntax_node(db, node))
23590 }
23591 SyntaxKind::MacroRepetitionOperatorMissing => MacroRepetitionOperator::Missing(
23592 MacroRepetitionOperatorMissing::from_syntax_node(db, node),
23593 ),
23594 _ => panic!(
23595 "Unexpected syntax kind {:?} when constructing {}.",
23596 kind, "MacroRepetitionOperator"
23597 ),
23598 }
23599 }
23600 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23601 let kind = node.kind(db);
23602 match kind {
23603 SyntaxKind::TerminalQuestionMark => Some(MacroRepetitionOperator::ZeroOrOne(
23604 TerminalQuestionMark::from_syntax_node(db, node),
23605 )),
23606 SyntaxKind::TerminalPlus => {
23607 Some(MacroRepetitionOperator::OneOrMore(TerminalPlus::from_syntax_node(db, node)))
23608 }
23609 SyntaxKind::TerminalMul => {
23610 Some(MacroRepetitionOperator::ZeroOrMore(TerminalMul::from_syntax_node(db, node)))
23611 }
23612 SyntaxKind::MacroRepetitionOperatorMissing => Some(MacroRepetitionOperator::Missing(
23613 MacroRepetitionOperatorMissing::from_syntax_node(db, node),
23614 )),
23615 _ => None,
23616 }
23617 }
23618 fn as_syntax_node(&self) -> SyntaxNode {
23619 match self {
23620 MacroRepetitionOperator::ZeroOrOne(x) => x.as_syntax_node(),
23621 MacroRepetitionOperator::OneOrMore(x) => x.as_syntax_node(),
23622 MacroRepetitionOperator::ZeroOrMore(x) => x.as_syntax_node(),
23623 MacroRepetitionOperator::Missing(x) => x.as_syntax_node(),
23624 }
23625 }
23626 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23627 MacroRepetitionOperatorPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
23628 }
23629}
23630impl MacroRepetitionOperator {
23631 pub fn is_variant(kind: SyntaxKind) -> bool {
23633 matches!(
23634 kind,
23635 SyntaxKind::TerminalQuestionMark
23636 | SyntaxKind::TerminalPlus
23637 | SyntaxKind::TerminalMul
23638 | SyntaxKind::MacroRepetitionOperatorMissing
23639 )
23640 }
23641}
23642#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23643pub struct MacroRepetitionOperatorMissing {
23644 node: SyntaxNode,
23645}
23646impl MacroRepetitionOperatorMissing {
23647 pub fn new_green(db: &dyn SyntaxGroup) -> MacroRepetitionOperatorMissingGreen {
23648 let children = [];
23649 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23650 MacroRepetitionOperatorMissingGreen(
23651 Arc::new(GreenNode {
23652 kind: SyntaxKind::MacroRepetitionOperatorMissing,
23653 details: GreenNodeDetails::Node { children: children.into(), width },
23654 })
23655 .intern(db),
23656 )
23657 }
23658}
23659impl MacroRepetitionOperatorMissing {}
23660#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23661pub struct MacroRepetitionOperatorMissingPtr(pub SyntaxStablePtrId);
23662impl MacroRepetitionOperatorMissingPtr {}
23663impl TypedStablePtr for MacroRepetitionOperatorMissingPtr {
23664 type SyntaxNode = MacroRepetitionOperatorMissing;
23665 fn untyped(&self) -> SyntaxStablePtrId {
23666 self.0
23667 }
23668 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroRepetitionOperatorMissing {
23669 MacroRepetitionOperatorMissing::from_syntax_node(db, self.0.lookup(db))
23670 }
23671}
23672impl From<MacroRepetitionOperatorMissingPtr> for SyntaxStablePtrId {
23673 fn from(ptr: MacroRepetitionOperatorMissingPtr) -> Self {
23674 ptr.untyped()
23675 }
23676}
23677#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23678pub struct MacroRepetitionOperatorMissingGreen(pub GreenId);
23679impl TypedSyntaxNode for MacroRepetitionOperatorMissing {
23680 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroRepetitionOperatorMissing);
23681 type StablePtr = MacroRepetitionOperatorMissingPtr;
23682 type Green = MacroRepetitionOperatorMissingGreen;
23683 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23684 MacroRepetitionOperatorMissingGreen(
23685 Arc::new(GreenNode {
23686 kind: SyntaxKind::MacroRepetitionOperatorMissing,
23687 details: GreenNodeDetails::Node {
23688 children: [].into(),
23689 width: TextWidth::default(),
23690 },
23691 })
23692 .intern(db),
23693 )
23694 }
23695 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23696 let kind = node.kind(db);
23697 assert_eq!(
23698 kind,
23699 SyntaxKind::MacroRepetitionOperatorMissing,
23700 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23701 kind,
23702 SyntaxKind::MacroRepetitionOperatorMissing
23703 );
23704 Self { node }
23705 }
23706 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23707 let kind = node.kind(db);
23708 if kind == SyntaxKind::MacroRepetitionOperatorMissing {
23709 Some(Self::from_syntax_node(db, node))
23710 } else {
23711 None
23712 }
23713 }
23714 fn as_syntax_node(&self) -> SyntaxNode {
23715 self.node
23716 }
23717 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23718 MacroRepetitionOperatorMissingPtr(self.node.stable_ptr(db))
23719 }
23720}
23721#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23722pub struct ParamIdent {
23723 node: SyntaxNode,
23724}
23725impl ParamIdent {
23726 pub const INDEX_IDENT: usize = 0;
23727 pub fn new_green(db: &dyn SyntaxGroup, ident: TerminalIdentifierGreen) -> ParamIdentGreen {
23728 let children = [ident.0];
23729 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23730 ParamIdentGreen(
23731 Arc::new(GreenNode {
23732 kind: SyntaxKind::ParamIdent,
23733 details: GreenNodeDetails::Node { children: children.into(), width },
23734 })
23735 .intern(db),
23736 )
23737 }
23738}
23739impl ParamIdent {
23740 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
23741 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
23742 }
23743}
23744#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23745pub struct ParamIdentPtr(pub SyntaxStablePtrId);
23746impl ParamIdentPtr {}
23747impl TypedStablePtr for ParamIdentPtr {
23748 type SyntaxNode = ParamIdent;
23749 fn untyped(&self) -> SyntaxStablePtrId {
23750 self.0
23751 }
23752 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamIdent {
23753 ParamIdent::from_syntax_node(db, self.0.lookup(db))
23754 }
23755}
23756impl From<ParamIdentPtr> for SyntaxStablePtrId {
23757 fn from(ptr: ParamIdentPtr) -> Self {
23758 ptr.untyped()
23759 }
23760}
23761#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23762pub struct ParamIdentGreen(pub GreenId);
23763impl TypedSyntaxNode for ParamIdent {
23764 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamIdent);
23765 type StablePtr = ParamIdentPtr;
23766 type Green = ParamIdentGreen;
23767 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23768 ParamIdentGreen(
23769 Arc::new(GreenNode {
23770 kind: SyntaxKind::ParamIdent,
23771 details: GreenNodeDetails::Node {
23772 children: [TerminalIdentifier::missing(db).0].into(),
23773 width: TextWidth::default(),
23774 },
23775 })
23776 .intern(db),
23777 )
23778 }
23779 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23780 let kind = node.kind(db);
23781 assert_eq!(
23782 kind,
23783 SyntaxKind::ParamIdent,
23784 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23785 kind,
23786 SyntaxKind::ParamIdent
23787 );
23788 Self { node }
23789 }
23790 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23791 let kind = node.kind(db);
23792 if kind == SyntaxKind::ParamIdent { Some(Self::from_syntax_node(db, node)) } else { None }
23793 }
23794 fn as_syntax_node(&self) -> SyntaxNode {
23795 self.node
23796 }
23797 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23798 ParamIdentPtr(self.node.stable_ptr(db))
23799 }
23800}
23801#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23802pub struct ParamExpr {
23803 node: SyntaxNode,
23804}
23805impl ParamExpr {
23806 pub const INDEX_EXPR: usize = 0;
23807 pub fn new_green(db: &dyn SyntaxGroup, expr: TerminalIdentifierGreen) -> ParamExprGreen {
23808 let children = [expr.0];
23809 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
23810 ParamExprGreen(
23811 Arc::new(GreenNode {
23812 kind: SyntaxKind::ParamExpr,
23813 details: GreenNodeDetails::Node { children: children.into(), width },
23814 })
23815 .intern(db),
23816 )
23817 }
23818}
23819impl ParamExpr {
23820 pub fn expr(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
23821 TerminalIdentifier::from_syntax_node(db, self.node.get_children(db)[0])
23822 }
23823}
23824#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23825pub struct ParamExprPtr(pub SyntaxStablePtrId);
23826impl ParamExprPtr {}
23827impl TypedStablePtr for ParamExprPtr {
23828 type SyntaxNode = ParamExpr;
23829 fn untyped(&self) -> SyntaxStablePtrId {
23830 self.0
23831 }
23832 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamExpr {
23833 ParamExpr::from_syntax_node(db, self.0.lookup(db))
23834 }
23835}
23836impl From<ParamExprPtr> for SyntaxStablePtrId {
23837 fn from(ptr: ParamExprPtr) -> Self {
23838 ptr.untyped()
23839 }
23840}
23841#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23842pub struct ParamExprGreen(pub GreenId);
23843impl TypedSyntaxNode for ParamExpr {
23844 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamExpr);
23845 type StablePtr = ParamExprPtr;
23846 type Green = ParamExprGreen;
23847 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23848 ParamExprGreen(
23849 Arc::new(GreenNode {
23850 kind: SyntaxKind::ParamExpr,
23851 details: GreenNodeDetails::Node {
23852 children: [TerminalIdentifier::missing(db).0].into(),
23853 width: TextWidth::default(),
23854 },
23855 })
23856 .intern(db),
23857 )
23858 }
23859 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23860 let kind = node.kind(db);
23861 assert_eq!(
23862 kind,
23863 SyntaxKind::ParamExpr,
23864 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23865 kind,
23866 SyntaxKind::ParamExpr
23867 );
23868 Self { node }
23869 }
23870 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23871 let kind = node.kind(db);
23872 if kind == SyntaxKind::ParamExpr { Some(Self::from_syntax_node(db, node)) } else { None }
23873 }
23874 fn as_syntax_node(&self) -> SyntaxNode {
23875 self.node
23876 }
23877 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23878 ParamExprPtr(self.node.stable_ptr(db))
23879 }
23880}
23881#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23882pub enum MacroParamKind {
23883 Identifier(ParamIdent),
23884 Expr(ParamExpr),
23885 Missing(MacroParamKindMissing),
23886}
23887#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23888pub struct MacroParamKindPtr(pub SyntaxStablePtrId);
23889impl TypedStablePtr for MacroParamKindPtr {
23890 type SyntaxNode = MacroParamKind;
23891 fn untyped(&self) -> SyntaxStablePtrId {
23892 self.0
23893 }
23894 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroParamKind {
23895 MacroParamKind::from_syntax_node(db, self.0.lookup(db))
23896 }
23897}
23898impl From<MacroParamKindPtr> for SyntaxStablePtrId {
23899 fn from(ptr: MacroParamKindPtr) -> Self {
23900 ptr.untyped()
23901 }
23902}
23903impl From<ParamIdentPtr> for MacroParamKindPtr {
23904 fn from(value: ParamIdentPtr) -> Self {
23905 Self(value.0)
23906 }
23907}
23908impl From<ParamExprPtr> for MacroParamKindPtr {
23909 fn from(value: ParamExprPtr) -> Self {
23910 Self(value.0)
23911 }
23912}
23913impl From<MacroParamKindMissingPtr> for MacroParamKindPtr {
23914 fn from(value: MacroParamKindMissingPtr) -> Self {
23915 Self(value.0)
23916 }
23917}
23918impl From<ParamIdentGreen> for MacroParamKindGreen {
23919 fn from(value: ParamIdentGreen) -> Self {
23920 Self(value.0)
23921 }
23922}
23923impl From<ParamExprGreen> for MacroParamKindGreen {
23924 fn from(value: ParamExprGreen) -> Self {
23925 Self(value.0)
23926 }
23927}
23928impl From<MacroParamKindMissingGreen> for MacroParamKindGreen {
23929 fn from(value: MacroParamKindMissingGreen) -> Self {
23930 Self(value.0)
23931 }
23932}
23933#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23934pub struct MacroParamKindGreen(pub GreenId);
23935impl TypedSyntaxNode for MacroParamKind {
23936 const OPTIONAL_KIND: Option<SyntaxKind> = None;
23937 type StablePtr = MacroParamKindPtr;
23938 type Green = MacroParamKindGreen;
23939 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23940 MacroParamKindGreen(MacroParamKindMissing::missing(db).0)
23941 }
23942 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23943 let kind = node.kind(db);
23944 match kind {
23945 SyntaxKind::ParamIdent => {
23946 MacroParamKind::Identifier(ParamIdent::from_syntax_node(db, node))
23947 }
23948 SyntaxKind::ParamExpr => MacroParamKind::Expr(ParamExpr::from_syntax_node(db, node)),
23949 SyntaxKind::MacroParamKindMissing => {
23950 MacroParamKind::Missing(MacroParamKindMissing::from_syntax_node(db, node))
23951 }
23952 _ => {
23953 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MacroParamKind")
23954 }
23955 }
23956 }
23957 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23958 let kind = node.kind(db);
23959 match kind {
23960 SyntaxKind::ParamIdent => {
23961 Some(MacroParamKind::Identifier(ParamIdent::from_syntax_node(db, node)))
23962 }
23963 SyntaxKind::ParamExpr => {
23964 Some(MacroParamKind::Expr(ParamExpr::from_syntax_node(db, node)))
23965 }
23966 SyntaxKind::MacroParamKindMissing => {
23967 Some(MacroParamKind::Missing(MacroParamKindMissing::from_syntax_node(db, node)))
23968 }
23969 _ => None,
23970 }
23971 }
23972 fn as_syntax_node(&self) -> SyntaxNode {
23973 match self {
23974 MacroParamKind::Identifier(x) => x.as_syntax_node(),
23975 MacroParamKind::Expr(x) => x.as_syntax_node(),
23976 MacroParamKind::Missing(x) => x.as_syntax_node(),
23977 }
23978 }
23979 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
23980 MacroParamKindPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
23981 }
23982}
23983impl MacroParamKind {
23984 pub fn is_variant(kind: SyntaxKind) -> bool {
23986 matches!(
23987 kind,
23988 SyntaxKind::ParamIdent | SyntaxKind::ParamExpr | SyntaxKind::MacroParamKindMissing
23989 )
23990 }
23991}
23992#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23993pub struct MacroParamKindMissing {
23994 node: SyntaxNode,
23995}
23996impl MacroParamKindMissing {
23997 pub fn new_green(db: &dyn SyntaxGroup) -> MacroParamKindMissingGreen {
23998 let children = [];
23999 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24000 MacroParamKindMissingGreen(
24001 Arc::new(GreenNode {
24002 kind: SyntaxKind::MacroParamKindMissing,
24003 details: GreenNodeDetails::Node { children: children.into(), width },
24004 })
24005 .intern(db),
24006 )
24007 }
24008}
24009impl MacroParamKindMissing {}
24010#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24011pub struct MacroParamKindMissingPtr(pub SyntaxStablePtrId);
24012impl MacroParamKindMissingPtr {}
24013impl TypedStablePtr for MacroParamKindMissingPtr {
24014 type SyntaxNode = MacroParamKindMissing;
24015 fn untyped(&self) -> SyntaxStablePtrId {
24016 self.0
24017 }
24018 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroParamKindMissing {
24019 MacroParamKindMissing::from_syntax_node(db, self.0.lookup(db))
24020 }
24021}
24022impl From<MacroParamKindMissingPtr> for SyntaxStablePtrId {
24023 fn from(ptr: MacroParamKindMissingPtr) -> Self {
24024 ptr.untyped()
24025 }
24026}
24027#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24028pub struct MacroParamKindMissingGreen(pub GreenId);
24029impl TypedSyntaxNode for MacroParamKindMissing {
24030 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroParamKindMissing);
24031 type StablePtr = MacroParamKindMissingPtr;
24032 type Green = MacroParamKindMissingGreen;
24033 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24034 MacroParamKindMissingGreen(
24035 Arc::new(GreenNode {
24036 kind: SyntaxKind::MacroParamKindMissing,
24037 details: GreenNodeDetails::Node {
24038 children: [].into(),
24039 width: TextWidth::default(),
24040 },
24041 })
24042 .intern(db),
24043 )
24044 }
24045 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24046 let kind = node.kind(db);
24047 assert_eq!(
24048 kind,
24049 SyntaxKind::MacroParamKindMissing,
24050 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24051 kind,
24052 SyntaxKind::MacroParamKindMissing
24053 );
24054 Self { node }
24055 }
24056 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24057 let kind = node.kind(db);
24058 if kind == SyntaxKind::MacroParamKindMissing {
24059 Some(Self::from_syntax_node(db, node))
24060 } else {
24061 None
24062 }
24063 }
24064 fn as_syntax_node(&self) -> SyntaxNode {
24065 self.node
24066 }
24067 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24068 MacroParamKindMissingPtr(self.node.stable_ptr(db))
24069 }
24070}
24071#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24072pub enum MacroElement {
24073 Token(TokenTreeLeaf),
24074 Param(MacroParam),
24075 Subtree(MacroWrapper),
24076 Repetition(MacroRepetition),
24077}
24078#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24079pub struct MacroElementPtr(pub SyntaxStablePtrId);
24080impl TypedStablePtr for MacroElementPtr {
24081 type SyntaxNode = MacroElement;
24082 fn untyped(&self) -> SyntaxStablePtrId {
24083 self.0
24084 }
24085 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroElement {
24086 MacroElement::from_syntax_node(db, self.0.lookup(db))
24087 }
24088}
24089impl From<MacroElementPtr> for SyntaxStablePtrId {
24090 fn from(ptr: MacroElementPtr) -> Self {
24091 ptr.untyped()
24092 }
24093}
24094impl From<TokenTreeLeafPtr> for MacroElementPtr {
24095 fn from(value: TokenTreeLeafPtr) -> Self {
24096 Self(value.0)
24097 }
24098}
24099impl From<MacroParamPtr> for MacroElementPtr {
24100 fn from(value: MacroParamPtr) -> Self {
24101 Self(value.0)
24102 }
24103}
24104impl From<MacroWrapperPtr> for MacroElementPtr {
24105 fn from(value: MacroWrapperPtr) -> Self {
24106 Self(value.0)
24107 }
24108}
24109impl From<MacroRepetitionPtr> for MacroElementPtr {
24110 fn from(value: MacroRepetitionPtr) -> Self {
24111 Self(value.0)
24112 }
24113}
24114impl From<TokenTreeLeafGreen> for MacroElementGreen {
24115 fn from(value: TokenTreeLeafGreen) -> Self {
24116 Self(value.0)
24117 }
24118}
24119impl From<MacroParamGreen> for MacroElementGreen {
24120 fn from(value: MacroParamGreen) -> Self {
24121 Self(value.0)
24122 }
24123}
24124impl From<MacroWrapperGreen> for MacroElementGreen {
24125 fn from(value: MacroWrapperGreen) -> Self {
24126 Self(value.0)
24127 }
24128}
24129impl From<MacroRepetitionGreen> for MacroElementGreen {
24130 fn from(value: MacroRepetitionGreen) -> Self {
24131 Self(value.0)
24132 }
24133}
24134#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24135pub struct MacroElementGreen(pub GreenId);
24136impl TypedSyntaxNode for MacroElement {
24137 const OPTIONAL_KIND: Option<SyntaxKind> = None;
24138 type StablePtr = MacroElementPtr;
24139 type Green = MacroElementGreen;
24140 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24141 panic!("No missing variant.");
24142 }
24143 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24144 let kind = node.kind(db);
24145 match kind {
24146 SyntaxKind::TokenTreeLeaf => {
24147 MacroElement::Token(TokenTreeLeaf::from_syntax_node(db, node))
24148 }
24149 SyntaxKind::MacroParam => MacroElement::Param(MacroParam::from_syntax_node(db, node)),
24150 SyntaxKind::MacroWrapper => {
24151 MacroElement::Subtree(MacroWrapper::from_syntax_node(db, node))
24152 }
24153 SyntaxKind::MacroRepetition => {
24154 MacroElement::Repetition(MacroRepetition::from_syntax_node(db, node))
24155 }
24156 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MacroElement"),
24157 }
24158 }
24159 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24160 let kind = node.kind(db);
24161 match kind {
24162 SyntaxKind::TokenTreeLeaf => {
24163 Some(MacroElement::Token(TokenTreeLeaf::from_syntax_node(db, node)))
24164 }
24165 SyntaxKind::MacroParam => {
24166 Some(MacroElement::Param(MacroParam::from_syntax_node(db, node)))
24167 }
24168 SyntaxKind::MacroWrapper => {
24169 Some(MacroElement::Subtree(MacroWrapper::from_syntax_node(db, node)))
24170 }
24171 SyntaxKind::MacroRepetition => {
24172 Some(MacroElement::Repetition(MacroRepetition::from_syntax_node(db, node)))
24173 }
24174 _ => None,
24175 }
24176 }
24177 fn as_syntax_node(&self) -> SyntaxNode {
24178 match self {
24179 MacroElement::Token(x) => x.as_syntax_node(),
24180 MacroElement::Param(x) => x.as_syntax_node(),
24181 MacroElement::Subtree(x) => x.as_syntax_node(),
24182 MacroElement::Repetition(x) => x.as_syntax_node(),
24183 }
24184 }
24185 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24186 MacroElementPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
24187 }
24188}
24189impl MacroElement {
24190 pub fn is_variant(kind: SyntaxKind) -> bool {
24192 matches!(
24193 kind,
24194 SyntaxKind::TokenTreeLeaf
24195 | SyntaxKind::MacroParam
24196 | SyntaxKind::MacroWrapper
24197 | SyntaxKind::MacroRepetition
24198 )
24199 }
24200}
24201#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24202pub struct MacroElements(ElementList<MacroElement, 1>);
24203impl Deref for MacroElements {
24204 type Target = ElementList<MacroElement, 1>;
24205 fn deref(&self) -> &Self::Target {
24206 &self.0
24207 }
24208}
24209impl MacroElements {
24210 pub fn new_green(db: &dyn SyntaxGroup, children: &[MacroElementGreen]) -> MacroElementsGreen {
24211 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
24212 MacroElementsGreen(
24213 Arc::new(GreenNode {
24214 kind: SyntaxKind::MacroElements,
24215 details: GreenNodeDetails::Node {
24216 children: children.iter().map(|x| x.0).collect(),
24217 width,
24218 },
24219 })
24220 .intern(db),
24221 )
24222 }
24223}
24224#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24225pub struct MacroElementsPtr(pub SyntaxStablePtrId);
24226impl TypedStablePtr for MacroElementsPtr {
24227 type SyntaxNode = MacroElements;
24228 fn untyped(&self) -> SyntaxStablePtrId {
24229 self.0
24230 }
24231 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroElements {
24232 MacroElements::from_syntax_node(db, self.0.lookup(db))
24233 }
24234}
24235impl From<MacroElementsPtr> for SyntaxStablePtrId {
24236 fn from(ptr: MacroElementsPtr) -> Self {
24237 ptr.untyped()
24238 }
24239}
24240#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24241pub struct MacroElementsGreen(pub GreenId);
24242impl TypedSyntaxNode for MacroElements {
24243 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroElements);
24244 type StablePtr = MacroElementsPtr;
24245 type Green = MacroElementsGreen;
24246 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24247 MacroElementsGreen(
24248 Arc::new(GreenNode {
24249 kind: SyntaxKind::MacroElements,
24250 details: GreenNodeDetails::Node {
24251 children: [].into(),
24252 width: TextWidth::default(),
24253 },
24254 })
24255 .intern(db),
24256 )
24257 }
24258 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24259 Self(ElementList::new(node))
24260 }
24261 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24262 if node.kind(db) == SyntaxKind::MacroElements {
24263 Some(Self(ElementList::new(node)))
24264 } else {
24265 None
24266 }
24267 }
24268 fn as_syntax_node(&self) -> SyntaxNode {
24269 self.node
24270 }
24271 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24272 MacroElementsPtr(self.node.stable_ptr(db))
24273 }
24274}
24275#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24276pub struct MacroWrapper {
24277 node: SyntaxNode,
24278}
24279impl MacroWrapper {
24280 pub const INDEX_SUBTREE: usize = 0;
24281 pub fn new_green(db: &dyn SyntaxGroup, subtree: WrappedMacroGreen) -> MacroWrapperGreen {
24282 let children = [subtree.0];
24283 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24284 MacroWrapperGreen(
24285 Arc::new(GreenNode {
24286 kind: SyntaxKind::MacroWrapper,
24287 details: GreenNodeDetails::Node { children: children.into(), width },
24288 })
24289 .intern(db),
24290 )
24291 }
24292}
24293impl MacroWrapper {
24294 pub fn subtree(&self, db: &dyn SyntaxGroup) -> WrappedMacro {
24295 WrappedMacro::from_syntax_node(db, self.node.get_children(db)[0])
24296 }
24297}
24298#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24299pub struct MacroWrapperPtr(pub SyntaxStablePtrId);
24300impl MacroWrapperPtr {}
24301impl TypedStablePtr for MacroWrapperPtr {
24302 type SyntaxNode = MacroWrapper;
24303 fn untyped(&self) -> SyntaxStablePtrId {
24304 self.0
24305 }
24306 fn lookup(&self, db: &dyn SyntaxGroup) -> MacroWrapper {
24307 MacroWrapper::from_syntax_node(db, self.0.lookup(db))
24308 }
24309}
24310impl From<MacroWrapperPtr> for SyntaxStablePtrId {
24311 fn from(ptr: MacroWrapperPtr) -> Self {
24312 ptr.untyped()
24313 }
24314}
24315#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24316pub struct MacroWrapperGreen(pub GreenId);
24317impl TypedSyntaxNode for MacroWrapper {
24318 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MacroWrapper);
24319 type StablePtr = MacroWrapperPtr;
24320 type Green = MacroWrapperGreen;
24321 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24322 MacroWrapperGreen(
24323 Arc::new(GreenNode {
24324 kind: SyntaxKind::MacroWrapper,
24325 details: GreenNodeDetails::Node {
24326 children: [WrappedMacro::missing(db).0].into(),
24327 width: TextWidth::default(),
24328 },
24329 })
24330 .intern(db),
24331 )
24332 }
24333 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24334 let kind = node.kind(db);
24335 assert_eq!(
24336 kind,
24337 SyntaxKind::MacroWrapper,
24338 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24339 kind,
24340 SyntaxKind::MacroWrapper
24341 );
24342 Self { node }
24343 }
24344 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24345 let kind = node.kind(db);
24346 if kind == SyntaxKind::MacroWrapper { Some(Self::from_syntax_node(db, node)) } else { None }
24347 }
24348 fn as_syntax_node(&self) -> SyntaxNode {
24349 self.node
24350 }
24351 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24352 MacroWrapperPtr(self.node.stable_ptr(db))
24353 }
24354}
24355#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24356pub enum WrappedMacro {
24357 Parenthesized(ParenthesizedMacro),
24358 Braced(BracedMacro),
24359 Bracketed(BracketedMacro),
24360}
24361#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24362pub struct WrappedMacroPtr(pub SyntaxStablePtrId);
24363impl TypedStablePtr for WrappedMacroPtr {
24364 type SyntaxNode = WrappedMacro;
24365 fn untyped(&self) -> SyntaxStablePtrId {
24366 self.0
24367 }
24368 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedMacro {
24369 WrappedMacro::from_syntax_node(db, self.0.lookup(db))
24370 }
24371}
24372impl From<WrappedMacroPtr> for SyntaxStablePtrId {
24373 fn from(ptr: WrappedMacroPtr) -> Self {
24374 ptr.untyped()
24375 }
24376}
24377impl From<ParenthesizedMacroPtr> for WrappedMacroPtr {
24378 fn from(value: ParenthesizedMacroPtr) -> Self {
24379 Self(value.0)
24380 }
24381}
24382impl From<BracedMacroPtr> for WrappedMacroPtr {
24383 fn from(value: BracedMacroPtr) -> Self {
24384 Self(value.0)
24385 }
24386}
24387impl From<BracketedMacroPtr> for WrappedMacroPtr {
24388 fn from(value: BracketedMacroPtr) -> Self {
24389 Self(value.0)
24390 }
24391}
24392impl From<ParenthesizedMacroGreen> for WrappedMacroGreen {
24393 fn from(value: ParenthesizedMacroGreen) -> Self {
24394 Self(value.0)
24395 }
24396}
24397impl From<BracedMacroGreen> for WrappedMacroGreen {
24398 fn from(value: BracedMacroGreen) -> Self {
24399 Self(value.0)
24400 }
24401}
24402impl From<BracketedMacroGreen> for WrappedMacroGreen {
24403 fn from(value: BracketedMacroGreen) -> Self {
24404 Self(value.0)
24405 }
24406}
24407#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24408pub struct WrappedMacroGreen(pub GreenId);
24409impl TypedSyntaxNode for WrappedMacro {
24410 const OPTIONAL_KIND: Option<SyntaxKind> = None;
24411 type StablePtr = WrappedMacroPtr;
24412 type Green = WrappedMacroGreen;
24413 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24414 panic!("No missing variant.");
24415 }
24416 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24417 let kind = node.kind(db);
24418 match kind {
24419 SyntaxKind::ParenthesizedMacro => {
24420 WrappedMacro::Parenthesized(ParenthesizedMacro::from_syntax_node(db, node))
24421 }
24422 SyntaxKind::BracedMacro => {
24423 WrappedMacro::Braced(BracedMacro::from_syntax_node(db, node))
24424 }
24425 SyntaxKind::BracketedMacro => {
24426 WrappedMacro::Bracketed(BracketedMacro::from_syntax_node(db, node))
24427 }
24428 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "WrappedMacro"),
24429 }
24430 }
24431 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24432 let kind = node.kind(db);
24433 match kind {
24434 SyntaxKind::ParenthesizedMacro => {
24435 Some(WrappedMacro::Parenthesized(ParenthesizedMacro::from_syntax_node(db, node)))
24436 }
24437 SyntaxKind::BracedMacro => {
24438 Some(WrappedMacro::Braced(BracedMacro::from_syntax_node(db, node)))
24439 }
24440 SyntaxKind::BracketedMacro => {
24441 Some(WrappedMacro::Bracketed(BracketedMacro::from_syntax_node(db, node)))
24442 }
24443 _ => None,
24444 }
24445 }
24446 fn as_syntax_node(&self) -> SyntaxNode {
24447 match self {
24448 WrappedMacro::Parenthesized(x) => x.as_syntax_node(),
24449 WrappedMacro::Braced(x) => x.as_syntax_node(),
24450 WrappedMacro::Bracketed(x) => x.as_syntax_node(),
24451 }
24452 }
24453 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24454 WrappedMacroPtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
24455 }
24456}
24457impl WrappedMacro {
24458 pub fn is_variant(kind: SyntaxKind) -> bool {
24460 matches!(
24461 kind,
24462 SyntaxKind::ParenthesizedMacro | SyntaxKind::BracedMacro | SyntaxKind::BracketedMacro
24463 )
24464 }
24465}
24466#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24467pub struct ParenthesizedMacro {
24468 node: SyntaxNode,
24469}
24470impl ParenthesizedMacro {
24471 pub const INDEX_LPAREN: usize = 0;
24472 pub const INDEX_ELEMENTS: usize = 1;
24473 pub const INDEX_RPAREN: usize = 2;
24474 pub fn new_green(
24475 db: &dyn SyntaxGroup,
24476 lparen: TerminalLParenGreen,
24477 elements: MacroElementsGreen,
24478 rparen: TerminalRParenGreen,
24479 ) -> ParenthesizedMacroGreen {
24480 let children = [lparen.0, elements.0, rparen.0];
24481 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24482 ParenthesizedMacroGreen(
24483 Arc::new(GreenNode {
24484 kind: SyntaxKind::ParenthesizedMacro,
24485 details: GreenNodeDetails::Node { children: children.into(), width },
24486 })
24487 .intern(db),
24488 )
24489 }
24490}
24491impl ParenthesizedMacro {
24492 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
24493 TerminalLParen::from_syntax_node(db, self.node.get_children(db)[0])
24494 }
24495 pub fn elements(&self, db: &dyn SyntaxGroup) -> MacroElements {
24496 MacroElements::from_syntax_node(db, self.node.get_children(db)[1])
24497 }
24498 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
24499 TerminalRParen::from_syntax_node(db, self.node.get_children(db)[2])
24500 }
24501}
24502#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24503pub struct ParenthesizedMacroPtr(pub SyntaxStablePtrId);
24504impl ParenthesizedMacroPtr {}
24505impl TypedStablePtr for ParenthesizedMacroPtr {
24506 type SyntaxNode = ParenthesizedMacro;
24507 fn untyped(&self) -> SyntaxStablePtrId {
24508 self.0
24509 }
24510 fn lookup(&self, db: &dyn SyntaxGroup) -> ParenthesizedMacro {
24511 ParenthesizedMacro::from_syntax_node(db, self.0.lookup(db))
24512 }
24513}
24514impl From<ParenthesizedMacroPtr> for SyntaxStablePtrId {
24515 fn from(ptr: ParenthesizedMacroPtr) -> Self {
24516 ptr.untyped()
24517 }
24518}
24519#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24520pub struct ParenthesizedMacroGreen(pub GreenId);
24521impl TypedSyntaxNode for ParenthesizedMacro {
24522 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParenthesizedMacro);
24523 type StablePtr = ParenthesizedMacroPtr;
24524 type Green = ParenthesizedMacroGreen;
24525 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24526 ParenthesizedMacroGreen(
24527 Arc::new(GreenNode {
24528 kind: SyntaxKind::ParenthesizedMacro,
24529 details: GreenNodeDetails::Node {
24530 children: [
24531 TerminalLParen::missing(db).0,
24532 MacroElements::missing(db).0,
24533 TerminalRParen::missing(db).0,
24534 ]
24535 .into(),
24536 width: TextWidth::default(),
24537 },
24538 })
24539 .intern(db),
24540 )
24541 }
24542 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24543 let kind = node.kind(db);
24544 assert_eq!(
24545 kind,
24546 SyntaxKind::ParenthesizedMacro,
24547 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24548 kind,
24549 SyntaxKind::ParenthesizedMacro
24550 );
24551 Self { node }
24552 }
24553 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24554 let kind = node.kind(db);
24555 if kind == SyntaxKind::ParenthesizedMacro {
24556 Some(Self::from_syntax_node(db, node))
24557 } else {
24558 None
24559 }
24560 }
24561 fn as_syntax_node(&self) -> SyntaxNode {
24562 self.node
24563 }
24564 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24565 ParenthesizedMacroPtr(self.node.stable_ptr(db))
24566 }
24567}
24568#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24569pub struct BracedMacro {
24570 node: SyntaxNode,
24571}
24572impl BracedMacro {
24573 pub const INDEX_LBRACE: usize = 0;
24574 pub const INDEX_ELEMENTS: usize = 1;
24575 pub const INDEX_RBRACE: usize = 2;
24576 pub fn new_green(
24577 db: &dyn SyntaxGroup,
24578 lbrace: TerminalLBraceGreen,
24579 elements: MacroElementsGreen,
24580 rbrace: TerminalRBraceGreen,
24581 ) -> BracedMacroGreen {
24582 let children = [lbrace.0, elements.0, rbrace.0];
24583 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24584 BracedMacroGreen(
24585 Arc::new(GreenNode {
24586 kind: SyntaxKind::BracedMacro,
24587 details: GreenNodeDetails::Node { children: children.into(), width },
24588 })
24589 .intern(db),
24590 )
24591 }
24592}
24593impl BracedMacro {
24594 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
24595 TerminalLBrace::from_syntax_node(db, self.node.get_children(db)[0])
24596 }
24597 pub fn elements(&self, db: &dyn SyntaxGroup) -> MacroElements {
24598 MacroElements::from_syntax_node(db, self.node.get_children(db)[1])
24599 }
24600 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
24601 TerminalRBrace::from_syntax_node(db, self.node.get_children(db)[2])
24602 }
24603}
24604#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24605pub struct BracedMacroPtr(pub SyntaxStablePtrId);
24606impl BracedMacroPtr {}
24607impl TypedStablePtr for BracedMacroPtr {
24608 type SyntaxNode = BracedMacro;
24609 fn untyped(&self) -> SyntaxStablePtrId {
24610 self.0
24611 }
24612 fn lookup(&self, db: &dyn SyntaxGroup) -> BracedMacro {
24613 BracedMacro::from_syntax_node(db, self.0.lookup(db))
24614 }
24615}
24616impl From<BracedMacroPtr> for SyntaxStablePtrId {
24617 fn from(ptr: BracedMacroPtr) -> Self {
24618 ptr.untyped()
24619 }
24620}
24621#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24622pub struct BracedMacroGreen(pub GreenId);
24623impl TypedSyntaxNode for BracedMacro {
24624 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::BracedMacro);
24625 type StablePtr = BracedMacroPtr;
24626 type Green = BracedMacroGreen;
24627 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24628 BracedMacroGreen(
24629 Arc::new(GreenNode {
24630 kind: SyntaxKind::BracedMacro,
24631 details: GreenNodeDetails::Node {
24632 children: [
24633 TerminalLBrace::missing(db).0,
24634 MacroElements::missing(db).0,
24635 TerminalRBrace::missing(db).0,
24636 ]
24637 .into(),
24638 width: TextWidth::default(),
24639 },
24640 })
24641 .intern(db),
24642 )
24643 }
24644 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24645 let kind = node.kind(db);
24646 assert_eq!(
24647 kind,
24648 SyntaxKind::BracedMacro,
24649 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24650 kind,
24651 SyntaxKind::BracedMacro
24652 );
24653 Self { node }
24654 }
24655 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24656 let kind = node.kind(db);
24657 if kind == SyntaxKind::BracedMacro { Some(Self::from_syntax_node(db, node)) } else { None }
24658 }
24659 fn as_syntax_node(&self) -> SyntaxNode {
24660 self.node
24661 }
24662 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24663 BracedMacroPtr(self.node.stable_ptr(db))
24664 }
24665}
24666#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24667pub struct BracketedMacro {
24668 node: SyntaxNode,
24669}
24670impl BracketedMacro {
24671 pub const INDEX_LBRACK: usize = 0;
24672 pub const INDEX_ELEMENTS: usize = 1;
24673 pub const INDEX_RBRACK: usize = 2;
24674 pub fn new_green(
24675 db: &dyn SyntaxGroup,
24676 lbrack: TerminalLBrackGreen,
24677 elements: MacroElementsGreen,
24678 rbrack: TerminalRBrackGreen,
24679 ) -> BracketedMacroGreen {
24680 let children = [lbrack.0, elements.0, rbrack.0];
24681 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24682 BracketedMacroGreen(
24683 Arc::new(GreenNode {
24684 kind: SyntaxKind::BracketedMacro,
24685 details: GreenNodeDetails::Node { children: children.into(), width },
24686 })
24687 .intern(db),
24688 )
24689 }
24690}
24691impl BracketedMacro {
24692 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
24693 TerminalLBrack::from_syntax_node(db, self.node.get_children(db)[0])
24694 }
24695 pub fn elements(&self, db: &dyn SyntaxGroup) -> MacroElements {
24696 MacroElements::from_syntax_node(db, self.node.get_children(db)[1])
24697 }
24698 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
24699 TerminalRBrack::from_syntax_node(db, self.node.get_children(db)[2])
24700 }
24701}
24702#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24703pub struct BracketedMacroPtr(pub SyntaxStablePtrId);
24704impl BracketedMacroPtr {}
24705impl TypedStablePtr for BracketedMacroPtr {
24706 type SyntaxNode = BracketedMacro;
24707 fn untyped(&self) -> SyntaxStablePtrId {
24708 self.0
24709 }
24710 fn lookup(&self, db: &dyn SyntaxGroup) -> BracketedMacro {
24711 BracketedMacro::from_syntax_node(db, self.0.lookup(db))
24712 }
24713}
24714impl From<BracketedMacroPtr> for SyntaxStablePtrId {
24715 fn from(ptr: BracketedMacroPtr) -> Self {
24716 ptr.untyped()
24717 }
24718}
24719#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24720pub struct BracketedMacroGreen(pub GreenId);
24721impl TypedSyntaxNode for BracketedMacro {
24722 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::BracketedMacro);
24723 type StablePtr = BracketedMacroPtr;
24724 type Green = BracketedMacroGreen;
24725 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24726 BracketedMacroGreen(
24727 Arc::new(GreenNode {
24728 kind: SyntaxKind::BracketedMacro,
24729 details: GreenNodeDetails::Node {
24730 children: [
24731 TerminalLBrack::missing(db).0,
24732 MacroElements::missing(db).0,
24733 TerminalRBrack::missing(db).0,
24734 ]
24735 .into(),
24736 width: TextWidth::default(),
24737 },
24738 })
24739 .intern(db),
24740 )
24741 }
24742 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24743 let kind = node.kind(db);
24744 assert_eq!(
24745 kind,
24746 SyntaxKind::BracketedMacro,
24747 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24748 kind,
24749 SyntaxKind::BracketedMacro
24750 );
24751 Self { node }
24752 }
24753 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24754 let kind = node.kind(db);
24755 if kind == SyntaxKind::BracketedMacro {
24756 Some(Self::from_syntax_node(db, node))
24757 } else {
24758 None
24759 }
24760 }
24761 fn as_syntax_node(&self) -> SyntaxNode {
24762 self.node
24763 }
24764 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24765 BracketedMacroPtr(self.node.stable_ptr(db))
24766 }
24767}
24768#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24769pub struct LegacyExprInlineMacro {
24770 node: SyntaxNode,
24771}
24772impl LegacyExprInlineMacro {
24773 pub const INDEX_PATH: usize = 0;
24774 pub const INDEX_BANG: usize = 1;
24775 pub const INDEX_ARGUMENTS: usize = 2;
24776 pub fn new_green(
24777 db: &dyn SyntaxGroup,
24778 path: ExprPathGreen,
24779 bang: TerminalNotGreen,
24780 arguments: WrappedArgListGreen,
24781 ) -> LegacyExprInlineMacroGreen {
24782 let children = [path.0, bang.0, arguments.0];
24783 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24784 LegacyExprInlineMacroGreen(
24785 Arc::new(GreenNode {
24786 kind: SyntaxKind::LegacyExprInlineMacro,
24787 details: GreenNodeDetails::Node { children: children.into(), width },
24788 })
24789 .intern(db),
24790 )
24791 }
24792}
24793impl LegacyExprInlineMacro {
24794 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
24795 ExprPath::from_syntax_node(db, self.node.get_children(db)[0])
24796 }
24797 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
24798 TerminalNot::from_syntax_node(db, self.node.get_children(db)[1])
24799 }
24800 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
24801 WrappedArgList::from_syntax_node(db, self.node.get_children(db)[2])
24802 }
24803}
24804#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24805pub struct LegacyExprInlineMacroPtr(pub SyntaxStablePtrId);
24806impl LegacyExprInlineMacroPtr {}
24807impl TypedStablePtr for LegacyExprInlineMacroPtr {
24808 type SyntaxNode = LegacyExprInlineMacro;
24809 fn untyped(&self) -> SyntaxStablePtrId {
24810 self.0
24811 }
24812 fn lookup(&self, db: &dyn SyntaxGroup) -> LegacyExprInlineMacro {
24813 LegacyExprInlineMacro::from_syntax_node(db, self.0.lookup(db))
24814 }
24815}
24816impl From<LegacyExprInlineMacroPtr> for SyntaxStablePtrId {
24817 fn from(ptr: LegacyExprInlineMacroPtr) -> Self {
24818 ptr.untyped()
24819 }
24820}
24821#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24822pub struct LegacyExprInlineMacroGreen(pub GreenId);
24823impl TypedSyntaxNode for LegacyExprInlineMacro {
24824 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::LegacyExprInlineMacro);
24825 type StablePtr = LegacyExprInlineMacroPtr;
24826 type Green = LegacyExprInlineMacroGreen;
24827 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24828 LegacyExprInlineMacroGreen(
24829 Arc::new(GreenNode {
24830 kind: SyntaxKind::LegacyExprInlineMacro,
24831 details: GreenNodeDetails::Node {
24832 children: [
24833 ExprPath::missing(db).0,
24834 TerminalNot::missing(db).0,
24835 WrappedArgList::missing(db).0,
24836 ]
24837 .into(),
24838 width: TextWidth::default(),
24839 },
24840 })
24841 .intern(db),
24842 )
24843 }
24844 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24845 let kind = node.kind(db);
24846 assert_eq!(
24847 kind,
24848 SyntaxKind::LegacyExprInlineMacro,
24849 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24850 kind,
24851 SyntaxKind::LegacyExprInlineMacro
24852 );
24853 Self { node }
24854 }
24855 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24856 let kind = node.kind(db);
24857 if kind == SyntaxKind::LegacyExprInlineMacro {
24858 Some(Self::from_syntax_node(db, node))
24859 } else {
24860 None
24861 }
24862 }
24863 fn as_syntax_node(&self) -> SyntaxNode {
24864 self.node
24865 }
24866 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24867 LegacyExprInlineMacroPtr(self.node.stable_ptr(db))
24868 }
24869}
24870#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24871pub struct LegacyItemInlineMacro {
24872 node: SyntaxNode,
24873}
24874impl LegacyItemInlineMacro {
24875 pub const INDEX_ATTRIBUTES: usize = 0;
24876 pub const INDEX_PATH: usize = 1;
24877 pub const INDEX_BANG: usize = 2;
24878 pub const INDEX_ARGUMENTS: usize = 3;
24879 pub const INDEX_SEMICOLON: usize = 4;
24880 pub fn new_green(
24881 db: &dyn SyntaxGroup,
24882 attributes: AttributeListGreen,
24883 path: ExprPathGreen,
24884 bang: TerminalNotGreen,
24885 arguments: WrappedArgListGreen,
24886 semicolon: TerminalSemicolonGreen,
24887 ) -> LegacyItemInlineMacroGreen {
24888 let children = [attributes.0, path.0, bang.0, arguments.0, semicolon.0];
24889 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24890 LegacyItemInlineMacroGreen(
24891 Arc::new(GreenNode {
24892 kind: SyntaxKind::LegacyItemInlineMacro,
24893 details: GreenNodeDetails::Node { children: children.into(), width },
24894 })
24895 .intern(db),
24896 )
24897 }
24898}
24899impl LegacyItemInlineMacro {
24900 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
24901 AttributeList::from_syntax_node(db, self.node.get_children(db)[0])
24902 }
24903 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
24904 ExprPath::from_syntax_node(db, self.node.get_children(db)[1])
24905 }
24906 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
24907 TerminalNot::from_syntax_node(db, self.node.get_children(db)[2])
24908 }
24909 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
24910 WrappedArgList::from_syntax_node(db, self.node.get_children(db)[3])
24911 }
24912 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
24913 TerminalSemicolon::from_syntax_node(db, self.node.get_children(db)[4])
24914 }
24915}
24916#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24917pub struct LegacyItemInlineMacroPtr(pub SyntaxStablePtrId);
24918impl LegacyItemInlineMacroPtr {}
24919impl TypedStablePtr for LegacyItemInlineMacroPtr {
24920 type SyntaxNode = LegacyItemInlineMacro;
24921 fn untyped(&self) -> SyntaxStablePtrId {
24922 self.0
24923 }
24924 fn lookup(&self, db: &dyn SyntaxGroup) -> LegacyItemInlineMacro {
24925 LegacyItemInlineMacro::from_syntax_node(db, self.0.lookup(db))
24926 }
24927}
24928impl From<LegacyItemInlineMacroPtr> for SyntaxStablePtrId {
24929 fn from(ptr: LegacyItemInlineMacroPtr) -> Self {
24930 ptr.untyped()
24931 }
24932}
24933#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24934pub struct LegacyItemInlineMacroGreen(pub GreenId);
24935impl TypedSyntaxNode for LegacyItemInlineMacro {
24936 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::LegacyItemInlineMacro);
24937 type StablePtr = LegacyItemInlineMacroPtr;
24938 type Green = LegacyItemInlineMacroGreen;
24939 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24940 LegacyItemInlineMacroGreen(
24941 Arc::new(GreenNode {
24942 kind: SyntaxKind::LegacyItemInlineMacro,
24943 details: GreenNodeDetails::Node {
24944 children: [
24945 AttributeList::missing(db).0,
24946 ExprPath::missing(db).0,
24947 TerminalNot::missing(db).0,
24948 WrappedArgList::missing(db).0,
24949 TerminalSemicolon::missing(db).0,
24950 ]
24951 .into(),
24952 width: TextWidth::default(),
24953 },
24954 })
24955 .intern(db),
24956 )
24957 }
24958 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24959 let kind = node.kind(db);
24960 assert_eq!(
24961 kind,
24962 SyntaxKind::LegacyItemInlineMacro,
24963 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24964 kind,
24965 SyntaxKind::LegacyItemInlineMacro
24966 );
24967 Self { node }
24968 }
24969 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24970 let kind = node.kind(db);
24971 if kind == SyntaxKind::LegacyItemInlineMacro {
24972 Some(Self::from_syntax_node(db, node))
24973 } else {
24974 None
24975 }
24976 }
24977 fn as_syntax_node(&self) -> SyntaxNode {
24978 self.node
24979 }
24980 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
24981 LegacyItemInlineMacroPtr(self.node.stable_ptr(db))
24982 }
24983}
24984#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24985pub struct TriviumSkippedNode {
24986 node: SyntaxNode,
24987}
24988impl TriviumSkippedNode {
24989 pub const INDEX_NODE: usize = 0;
24990 pub fn new_green(db: &dyn SyntaxGroup, node: SkippedNodeGreen) -> TriviumSkippedNodeGreen {
24991 let children = [node.0];
24992 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
24993 TriviumSkippedNodeGreen(
24994 Arc::new(GreenNode {
24995 kind: SyntaxKind::TriviumSkippedNode,
24996 details: GreenNodeDetails::Node { children: children.into(), width },
24997 })
24998 .intern(db),
24999 )
25000 }
25001}
25002impl TriviumSkippedNode {
25003 pub fn node(&self, db: &dyn SyntaxGroup) -> SkippedNode {
25004 SkippedNode::from_syntax_node(db, self.node.get_children(db)[0])
25005 }
25006}
25007#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25008pub struct TriviumSkippedNodePtr(pub SyntaxStablePtrId);
25009impl TriviumSkippedNodePtr {}
25010impl TypedStablePtr for TriviumSkippedNodePtr {
25011 type SyntaxNode = TriviumSkippedNode;
25012 fn untyped(&self) -> SyntaxStablePtrId {
25013 self.0
25014 }
25015 fn lookup(&self, db: &dyn SyntaxGroup) -> TriviumSkippedNode {
25016 TriviumSkippedNode::from_syntax_node(db, self.0.lookup(db))
25017 }
25018}
25019impl From<TriviumSkippedNodePtr> for SyntaxStablePtrId {
25020 fn from(ptr: TriviumSkippedNodePtr) -> Self {
25021 ptr.untyped()
25022 }
25023}
25024#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25025pub struct TriviumSkippedNodeGreen(pub GreenId);
25026impl TypedSyntaxNode for TriviumSkippedNode {
25027 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TriviumSkippedNode);
25028 type StablePtr = TriviumSkippedNodePtr;
25029 type Green = TriviumSkippedNodeGreen;
25030 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25031 TriviumSkippedNodeGreen(
25032 Arc::new(GreenNode {
25033 kind: SyntaxKind::TriviumSkippedNode,
25034 details: GreenNodeDetails::Node {
25035 children: [SkippedNode::missing(db).0].into(),
25036 width: TextWidth::default(),
25037 },
25038 })
25039 .intern(db),
25040 )
25041 }
25042 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25043 let kind = node.kind(db);
25044 assert_eq!(
25045 kind,
25046 SyntaxKind::TriviumSkippedNode,
25047 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25048 kind,
25049 SyntaxKind::TriviumSkippedNode
25050 );
25051 Self { node }
25052 }
25053 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25054 let kind = node.kind(db);
25055 if kind == SyntaxKind::TriviumSkippedNode {
25056 Some(Self::from_syntax_node(db, node))
25057 } else {
25058 None
25059 }
25060 }
25061 fn as_syntax_node(&self) -> SyntaxNode {
25062 self.node
25063 }
25064 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25065 TriviumSkippedNodePtr(self.node.stable_ptr(db))
25066 }
25067}
25068#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25069pub enum SkippedNode {
25070 AttributeList(AttributeList),
25071 VisibilityPub(VisibilityPub),
25072 ExprPath(ExprPath),
25073}
25074#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25075pub struct SkippedNodePtr(pub SyntaxStablePtrId);
25076impl TypedStablePtr for SkippedNodePtr {
25077 type SyntaxNode = SkippedNode;
25078 fn untyped(&self) -> SyntaxStablePtrId {
25079 self.0
25080 }
25081 fn lookup(&self, db: &dyn SyntaxGroup) -> SkippedNode {
25082 SkippedNode::from_syntax_node(db, self.0.lookup(db))
25083 }
25084}
25085impl From<SkippedNodePtr> for SyntaxStablePtrId {
25086 fn from(ptr: SkippedNodePtr) -> Self {
25087 ptr.untyped()
25088 }
25089}
25090impl From<AttributeListPtr> for SkippedNodePtr {
25091 fn from(value: AttributeListPtr) -> Self {
25092 Self(value.0)
25093 }
25094}
25095impl From<VisibilityPubPtr> for SkippedNodePtr {
25096 fn from(value: VisibilityPubPtr) -> Self {
25097 Self(value.0)
25098 }
25099}
25100impl From<ExprPathPtr> for SkippedNodePtr {
25101 fn from(value: ExprPathPtr) -> Self {
25102 Self(value.0)
25103 }
25104}
25105impl From<AttributeListGreen> for SkippedNodeGreen {
25106 fn from(value: AttributeListGreen) -> Self {
25107 Self(value.0)
25108 }
25109}
25110impl From<VisibilityPubGreen> for SkippedNodeGreen {
25111 fn from(value: VisibilityPubGreen) -> Self {
25112 Self(value.0)
25113 }
25114}
25115impl From<ExprPathGreen> for SkippedNodeGreen {
25116 fn from(value: ExprPathGreen) -> Self {
25117 Self(value.0)
25118 }
25119}
25120#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25121pub struct SkippedNodeGreen(pub GreenId);
25122impl TypedSyntaxNode for SkippedNode {
25123 const OPTIONAL_KIND: Option<SyntaxKind> = None;
25124 type StablePtr = SkippedNodePtr;
25125 type Green = SkippedNodeGreen;
25126 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25127 panic!("No missing variant.");
25128 }
25129 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25130 let kind = node.kind(db);
25131 match kind {
25132 SyntaxKind::AttributeList => {
25133 SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node))
25134 }
25135 SyntaxKind::VisibilityPub => {
25136 SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node))
25137 }
25138 SyntaxKind::ExprPath => SkippedNode::ExprPath(ExprPath::from_syntax_node(db, node)),
25139 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "SkippedNode"),
25140 }
25141 }
25142 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25143 let kind = node.kind(db);
25144 match kind {
25145 SyntaxKind::AttributeList => {
25146 Some(SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node)))
25147 }
25148 SyntaxKind::VisibilityPub => {
25149 Some(SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node)))
25150 }
25151 SyntaxKind::ExprPath => {
25152 Some(SkippedNode::ExprPath(ExprPath::from_syntax_node(db, node)))
25153 }
25154 _ => None,
25155 }
25156 }
25157 fn as_syntax_node(&self) -> SyntaxNode {
25158 match self {
25159 SkippedNode::AttributeList(x) => x.as_syntax_node(),
25160 SkippedNode::VisibilityPub(x) => x.as_syntax_node(),
25161 SkippedNode::ExprPath(x) => x.as_syntax_node(),
25162 }
25163 }
25164 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25165 SkippedNodePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
25166 }
25167}
25168impl SkippedNode {
25169 pub fn is_variant(kind: SyntaxKind) -> bool {
25171 matches!(kind, SyntaxKind::AttributeList | SyntaxKind::VisibilityPub | SyntaxKind::ExprPath)
25172 }
25173}
25174#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25175pub struct TokenIdentifier {
25176 node: SyntaxNode,
25177}
25178impl Token for TokenIdentifier {
25179 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25180 TokenIdentifierGreen(
25181 Arc::new(GreenNode {
25182 kind: SyntaxKind::TokenIdentifier,
25183 details: GreenNodeDetails::Token(text),
25184 })
25185 .intern(db),
25186 )
25187 }
25188 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25189 extract_matches!(
25190 &self.node.lookup_intern(db).green.lookup_intern(db).details,
25191 GreenNodeDetails::Token
25192 )
25193 .clone()
25194 }
25195}
25196#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25197pub struct TokenIdentifierPtr(pub SyntaxStablePtrId);
25198impl TypedStablePtr for TokenIdentifierPtr {
25199 type SyntaxNode = TokenIdentifier;
25200 fn untyped(&self) -> SyntaxStablePtrId {
25201 self.0
25202 }
25203 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
25204 TokenIdentifier::from_syntax_node(db, self.0.lookup(db))
25205 }
25206}
25207impl From<TokenIdentifierPtr> for SyntaxStablePtrId {
25208 fn from(ptr: TokenIdentifierPtr) -> Self {
25209 ptr.untyped()
25210 }
25211}
25212#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25213pub struct TokenIdentifierGreen(pub GreenId);
25214impl TokenIdentifierGreen {
25215 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25216 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25217 }
25218}
25219impl TypedSyntaxNode for TokenIdentifier {
25220 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIdentifier);
25221 type StablePtr = TokenIdentifierPtr;
25222 type Green = TokenIdentifierGreen;
25223 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25224 TokenIdentifierGreen(
25225 Arc::new(GreenNode {
25226 kind: SyntaxKind::TokenMissing,
25227 details: GreenNodeDetails::Token("".into()),
25228 })
25229 .intern(db),
25230 )
25231 }
25232 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25233 match node.lookup_intern(db).green.lookup_intern(db).details {
25234 GreenNodeDetails::Token(_) => Self { node },
25235 GreenNodeDetails::Node { .. } => {
25236 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIdentifier)
25237 }
25238 }
25239 }
25240 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25241 match node.lookup_intern(db).green.lookup_intern(db).details {
25242 GreenNodeDetails::Token(_) => Some(Self { node }),
25243 GreenNodeDetails::Node { .. } => None,
25244 }
25245 }
25246 fn as_syntax_node(&self) -> SyntaxNode {
25247 self.node
25248 }
25249 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25250 TokenIdentifierPtr(self.node.stable_ptr(db))
25251 }
25252}
25253#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25254pub struct TerminalIdentifier {
25255 node: SyntaxNode,
25256}
25257impl Terminal for TerminalIdentifier {
25258 const KIND: SyntaxKind = SyntaxKind::TerminalIdentifier;
25259 type TokenType = TokenIdentifier;
25260 fn new_green(
25261 db: &dyn SyntaxGroup,
25262 leading_trivia: TriviaGreen,
25263 token: <<TerminalIdentifier as Terminal>::TokenType as TypedSyntaxNode>::Green,
25264 trailing_trivia: TriviaGreen,
25265 ) -> Self::Green {
25266 let children = [leading_trivia.0, token.0, trailing_trivia.0];
25267 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
25268 TerminalIdentifierGreen(
25269 Arc::new(GreenNode {
25270 kind: SyntaxKind::TerminalIdentifier,
25271 details: GreenNodeDetails::Node { children: children.into(), width },
25272 })
25273 .intern(db),
25274 )
25275 }
25276 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25277 let GreenNodeDetails::Node { children, .. } =
25278 &self.node.lookup_intern(db).green.lookup_intern(db).details
25279 else {
25280 unreachable!("Expected a node, not a token");
25281 };
25282 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
25283 }
25284}
25285impl TerminalIdentifier {
25286 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25287 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
25288 }
25289 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
25290 TokenIdentifier::from_syntax_node(db, self.node.get_children(db)[1])
25291 }
25292 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25293 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
25294 }
25295}
25296#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25297pub struct TerminalIdentifierPtr(pub SyntaxStablePtrId);
25298impl TerminalIdentifierPtr {}
25299impl TypedStablePtr for TerminalIdentifierPtr {
25300 type SyntaxNode = TerminalIdentifier;
25301 fn untyped(&self) -> SyntaxStablePtrId {
25302 self.0
25303 }
25304 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
25305 TerminalIdentifier::from_syntax_node(db, self.0.lookup(db))
25306 }
25307}
25308impl From<TerminalIdentifierPtr> for SyntaxStablePtrId {
25309 fn from(ptr: TerminalIdentifierPtr) -> Self {
25310 ptr.untyped()
25311 }
25312}
25313#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25314pub struct TerminalIdentifierGreen(pub GreenId);
25315impl TypedSyntaxNode for TerminalIdentifier {
25316 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIdentifier);
25317 type StablePtr = TerminalIdentifierPtr;
25318 type Green = TerminalIdentifierGreen;
25319 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25320 TerminalIdentifierGreen(
25321 Arc::new(GreenNode {
25322 kind: SyntaxKind::TerminalIdentifier,
25323 details: GreenNodeDetails::Node {
25324 children: [
25325 Trivia::missing(db).0,
25326 TokenIdentifier::missing(db).0,
25327 Trivia::missing(db).0,
25328 ]
25329 .into(),
25330 width: TextWidth::default(),
25331 },
25332 })
25333 .intern(db),
25334 )
25335 }
25336 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25337 let kind = node.kind(db);
25338 assert_eq!(
25339 kind,
25340 SyntaxKind::TerminalIdentifier,
25341 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25342 kind,
25343 SyntaxKind::TerminalIdentifier
25344 );
25345 Self { node }
25346 }
25347 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25348 let kind = node.kind(db);
25349 if kind == SyntaxKind::TerminalIdentifier {
25350 Some(Self::from_syntax_node(db, node))
25351 } else {
25352 None
25353 }
25354 }
25355 fn as_syntax_node(&self) -> SyntaxNode {
25356 self.node
25357 }
25358 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25359 TerminalIdentifierPtr(self.node.stable_ptr(db))
25360 }
25361}
25362#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25363pub struct TokenLiteralNumber {
25364 node: SyntaxNode,
25365}
25366impl Token for TokenLiteralNumber {
25367 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25368 TokenLiteralNumberGreen(
25369 Arc::new(GreenNode {
25370 kind: SyntaxKind::TokenLiteralNumber,
25371 details: GreenNodeDetails::Token(text),
25372 })
25373 .intern(db),
25374 )
25375 }
25376 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25377 extract_matches!(
25378 &self.node.lookup_intern(db).green.lookup_intern(db).details,
25379 GreenNodeDetails::Token
25380 )
25381 .clone()
25382 }
25383}
25384#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25385pub struct TokenLiteralNumberPtr(pub SyntaxStablePtrId);
25386impl TypedStablePtr for TokenLiteralNumberPtr {
25387 type SyntaxNode = TokenLiteralNumber;
25388 fn untyped(&self) -> SyntaxStablePtrId {
25389 self.0
25390 }
25391 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
25392 TokenLiteralNumber::from_syntax_node(db, self.0.lookup(db))
25393 }
25394}
25395impl From<TokenLiteralNumberPtr> for SyntaxStablePtrId {
25396 fn from(ptr: TokenLiteralNumberPtr) -> Self {
25397 ptr.untyped()
25398 }
25399}
25400#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25401pub struct TokenLiteralNumberGreen(pub GreenId);
25402impl TokenLiteralNumberGreen {
25403 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25404 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25405 }
25406}
25407impl TypedSyntaxNode for TokenLiteralNumber {
25408 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLiteralNumber);
25409 type StablePtr = TokenLiteralNumberPtr;
25410 type Green = TokenLiteralNumberGreen;
25411 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25412 TokenLiteralNumberGreen(
25413 Arc::new(GreenNode {
25414 kind: SyntaxKind::TokenMissing,
25415 details: GreenNodeDetails::Token("".into()),
25416 })
25417 .intern(db),
25418 )
25419 }
25420 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25421 match node.lookup_intern(db).green.lookup_intern(db).details {
25422 GreenNodeDetails::Token(_) => Self { node },
25423 GreenNodeDetails::Node { .. } => panic!(
25424 "Expected a token {:?}, not an internal node",
25425 SyntaxKind::TokenLiteralNumber
25426 ),
25427 }
25428 }
25429 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25430 match node.lookup_intern(db).green.lookup_intern(db).details {
25431 GreenNodeDetails::Token(_) => Some(Self { node }),
25432 GreenNodeDetails::Node { .. } => None,
25433 }
25434 }
25435 fn as_syntax_node(&self) -> SyntaxNode {
25436 self.node
25437 }
25438 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25439 TokenLiteralNumberPtr(self.node.stable_ptr(db))
25440 }
25441}
25442#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25443pub struct TerminalLiteralNumber {
25444 node: SyntaxNode,
25445}
25446impl Terminal for TerminalLiteralNumber {
25447 const KIND: SyntaxKind = SyntaxKind::TerminalLiteralNumber;
25448 type TokenType = TokenLiteralNumber;
25449 fn new_green(
25450 db: &dyn SyntaxGroup,
25451 leading_trivia: TriviaGreen,
25452 token: <<TerminalLiteralNumber as Terminal>::TokenType as TypedSyntaxNode>::Green,
25453 trailing_trivia: TriviaGreen,
25454 ) -> Self::Green {
25455 let children = [leading_trivia.0, token.0, trailing_trivia.0];
25456 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
25457 TerminalLiteralNumberGreen(
25458 Arc::new(GreenNode {
25459 kind: SyntaxKind::TerminalLiteralNumber,
25460 details: GreenNodeDetails::Node { children: children.into(), width },
25461 })
25462 .intern(db),
25463 )
25464 }
25465 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25466 let GreenNodeDetails::Node { children, .. } =
25467 &self.node.lookup_intern(db).green.lookup_intern(db).details
25468 else {
25469 unreachable!("Expected a node, not a token");
25470 };
25471 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
25472 }
25473}
25474impl TerminalLiteralNumber {
25475 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25476 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
25477 }
25478 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
25479 TokenLiteralNumber::from_syntax_node(db, self.node.get_children(db)[1])
25480 }
25481 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25482 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
25483 }
25484}
25485#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25486pub struct TerminalLiteralNumberPtr(pub SyntaxStablePtrId);
25487impl TerminalLiteralNumberPtr {}
25488impl TypedStablePtr for TerminalLiteralNumberPtr {
25489 type SyntaxNode = TerminalLiteralNumber;
25490 fn untyped(&self) -> SyntaxStablePtrId {
25491 self.0
25492 }
25493 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLiteralNumber {
25494 TerminalLiteralNumber::from_syntax_node(db, self.0.lookup(db))
25495 }
25496}
25497impl From<TerminalLiteralNumberPtr> for SyntaxStablePtrId {
25498 fn from(ptr: TerminalLiteralNumberPtr) -> Self {
25499 ptr.untyped()
25500 }
25501}
25502#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25503pub struct TerminalLiteralNumberGreen(pub GreenId);
25504impl TypedSyntaxNode for TerminalLiteralNumber {
25505 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLiteralNumber);
25506 type StablePtr = TerminalLiteralNumberPtr;
25507 type Green = TerminalLiteralNumberGreen;
25508 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25509 TerminalLiteralNumberGreen(
25510 Arc::new(GreenNode {
25511 kind: SyntaxKind::TerminalLiteralNumber,
25512 details: GreenNodeDetails::Node {
25513 children: [
25514 Trivia::missing(db).0,
25515 TokenLiteralNumber::missing(db).0,
25516 Trivia::missing(db).0,
25517 ]
25518 .into(),
25519 width: TextWidth::default(),
25520 },
25521 })
25522 .intern(db),
25523 )
25524 }
25525 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25526 let kind = node.kind(db);
25527 assert_eq!(
25528 kind,
25529 SyntaxKind::TerminalLiteralNumber,
25530 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25531 kind,
25532 SyntaxKind::TerminalLiteralNumber
25533 );
25534 Self { node }
25535 }
25536 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25537 let kind = node.kind(db);
25538 if kind == SyntaxKind::TerminalLiteralNumber {
25539 Some(Self::from_syntax_node(db, node))
25540 } else {
25541 None
25542 }
25543 }
25544 fn as_syntax_node(&self) -> SyntaxNode {
25545 self.node
25546 }
25547 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25548 TerminalLiteralNumberPtr(self.node.stable_ptr(db))
25549 }
25550}
25551#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25552pub struct TokenShortString {
25553 node: SyntaxNode,
25554}
25555impl Token for TokenShortString {
25556 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25557 TokenShortStringGreen(
25558 Arc::new(GreenNode {
25559 kind: SyntaxKind::TokenShortString,
25560 details: GreenNodeDetails::Token(text),
25561 })
25562 .intern(db),
25563 )
25564 }
25565 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25566 extract_matches!(
25567 &self.node.lookup_intern(db).green.lookup_intern(db).details,
25568 GreenNodeDetails::Token
25569 )
25570 .clone()
25571 }
25572}
25573#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25574pub struct TokenShortStringPtr(pub SyntaxStablePtrId);
25575impl TypedStablePtr for TokenShortStringPtr {
25576 type SyntaxNode = TokenShortString;
25577 fn untyped(&self) -> SyntaxStablePtrId {
25578 self.0
25579 }
25580 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenShortString {
25581 TokenShortString::from_syntax_node(db, self.0.lookup(db))
25582 }
25583}
25584impl From<TokenShortStringPtr> for SyntaxStablePtrId {
25585 fn from(ptr: TokenShortStringPtr) -> Self {
25586 ptr.untyped()
25587 }
25588}
25589#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25590pub struct TokenShortStringGreen(pub GreenId);
25591impl TokenShortStringGreen {
25592 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25593 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25594 }
25595}
25596impl TypedSyntaxNode for TokenShortString {
25597 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenShortString);
25598 type StablePtr = TokenShortStringPtr;
25599 type Green = TokenShortStringGreen;
25600 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25601 TokenShortStringGreen(
25602 Arc::new(GreenNode {
25603 kind: SyntaxKind::TokenMissing,
25604 details: GreenNodeDetails::Token("".into()),
25605 })
25606 .intern(db),
25607 )
25608 }
25609 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25610 match node.lookup_intern(db).green.lookup_intern(db).details {
25611 GreenNodeDetails::Token(_) => Self { node },
25612 GreenNodeDetails::Node { .. } => {
25613 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenShortString)
25614 }
25615 }
25616 }
25617 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25618 match node.lookup_intern(db).green.lookup_intern(db).details {
25619 GreenNodeDetails::Token(_) => Some(Self { node }),
25620 GreenNodeDetails::Node { .. } => None,
25621 }
25622 }
25623 fn as_syntax_node(&self) -> SyntaxNode {
25624 self.node
25625 }
25626 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25627 TokenShortStringPtr(self.node.stable_ptr(db))
25628 }
25629}
25630#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25631pub struct TerminalShortString {
25632 node: SyntaxNode,
25633}
25634impl Terminal for TerminalShortString {
25635 const KIND: SyntaxKind = SyntaxKind::TerminalShortString;
25636 type TokenType = TokenShortString;
25637 fn new_green(
25638 db: &dyn SyntaxGroup,
25639 leading_trivia: TriviaGreen,
25640 token: <<TerminalShortString as Terminal>::TokenType as TypedSyntaxNode>::Green,
25641 trailing_trivia: TriviaGreen,
25642 ) -> Self::Green {
25643 let children = [leading_trivia.0, token.0, trailing_trivia.0];
25644 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
25645 TerminalShortStringGreen(
25646 Arc::new(GreenNode {
25647 kind: SyntaxKind::TerminalShortString,
25648 details: GreenNodeDetails::Node { children: children.into(), width },
25649 })
25650 .intern(db),
25651 )
25652 }
25653 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25654 let GreenNodeDetails::Node { children, .. } =
25655 &self.node.lookup_intern(db).green.lookup_intern(db).details
25656 else {
25657 unreachable!("Expected a node, not a token");
25658 };
25659 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
25660 }
25661}
25662impl TerminalShortString {
25663 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25664 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
25665 }
25666 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenShortString {
25667 TokenShortString::from_syntax_node(db, self.node.get_children(db)[1])
25668 }
25669 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25670 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
25671 }
25672}
25673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25674pub struct TerminalShortStringPtr(pub SyntaxStablePtrId);
25675impl TerminalShortStringPtr {}
25676impl TypedStablePtr for TerminalShortStringPtr {
25677 type SyntaxNode = TerminalShortString;
25678 fn untyped(&self) -> SyntaxStablePtrId {
25679 self.0
25680 }
25681 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalShortString {
25682 TerminalShortString::from_syntax_node(db, self.0.lookup(db))
25683 }
25684}
25685impl From<TerminalShortStringPtr> for SyntaxStablePtrId {
25686 fn from(ptr: TerminalShortStringPtr) -> Self {
25687 ptr.untyped()
25688 }
25689}
25690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25691pub struct TerminalShortStringGreen(pub GreenId);
25692impl TypedSyntaxNode for TerminalShortString {
25693 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalShortString);
25694 type StablePtr = TerminalShortStringPtr;
25695 type Green = TerminalShortStringGreen;
25696 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25697 TerminalShortStringGreen(
25698 Arc::new(GreenNode {
25699 kind: SyntaxKind::TerminalShortString,
25700 details: GreenNodeDetails::Node {
25701 children: [
25702 Trivia::missing(db).0,
25703 TokenShortString::missing(db).0,
25704 Trivia::missing(db).0,
25705 ]
25706 .into(),
25707 width: TextWidth::default(),
25708 },
25709 })
25710 .intern(db),
25711 )
25712 }
25713 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25714 let kind = node.kind(db);
25715 assert_eq!(
25716 kind,
25717 SyntaxKind::TerminalShortString,
25718 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25719 kind,
25720 SyntaxKind::TerminalShortString
25721 );
25722 Self { node }
25723 }
25724 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25725 let kind = node.kind(db);
25726 if kind == SyntaxKind::TerminalShortString {
25727 Some(Self::from_syntax_node(db, node))
25728 } else {
25729 None
25730 }
25731 }
25732 fn as_syntax_node(&self) -> SyntaxNode {
25733 self.node
25734 }
25735 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25736 TerminalShortStringPtr(self.node.stable_ptr(db))
25737 }
25738}
25739#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25740pub struct TokenString {
25741 node: SyntaxNode,
25742}
25743impl Token for TokenString {
25744 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25745 TokenStringGreen(
25746 Arc::new(GreenNode {
25747 kind: SyntaxKind::TokenString,
25748 details: GreenNodeDetails::Token(text),
25749 })
25750 .intern(db),
25751 )
25752 }
25753 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25754 extract_matches!(
25755 &self.node.lookup_intern(db).green.lookup_intern(db).details,
25756 GreenNodeDetails::Token
25757 )
25758 .clone()
25759 }
25760}
25761#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25762pub struct TokenStringPtr(pub SyntaxStablePtrId);
25763impl TypedStablePtr for TokenStringPtr {
25764 type SyntaxNode = TokenString;
25765 fn untyped(&self) -> SyntaxStablePtrId {
25766 self.0
25767 }
25768 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenString {
25769 TokenString::from_syntax_node(db, self.0.lookup(db))
25770 }
25771}
25772impl From<TokenStringPtr> for SyntaxStablePtrId {
25773 fn from(ptr: TokenStringPtr) -> Self {
25774 ptr.untyped()
25775 }
25776}
25777#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25778pub struct TokenStringGreen(pub GreenId);
25779impl TokenStringGreen {
25780 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25781 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25782 }
25783}
25784impl TypedSyntaxNode for TokenString {
25785 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenString);
25786 type StablePtr = TokenStringPtr;
25787 type Green = TokenStringGreen;
25788 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25789 TokenStringGreen(
25790 Arc::new(GreenNode {
25791 kind: SyntaxKind::TokenMissing,
25792 details: GreenNodeDetails::Token("".into()),
25793 })
25794 .intern(db),
25795 )
25796 }
25797 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25798 match node.lookup_intern(db).green.lookup_intern(db).details {
25799 GreenNodeDetails::Token(_) => Self { node },
25800 GreenNodeDetails::Node { .. } => {
25801 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenString)
25802 }
25803 }
25804 }
25805 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25806 match node.lookup_intern(db).green.lookup_intern(db).details {
25807 GreenNodeDetails::Token(_) => Some(Self { node }),
25808 GreenNodeDetails::Node { .. } => None,
25809 }
25810 }
25811 fn as_syntax_node(&self) -> SyntaxNode {
25812 self.node
25813 }
25814 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25815 TokenStringPtr(self.node.stable_ptr(db))
25816 }
25817}
25818#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25819pub struct TerminalString {
25820 node: SyntaxNode,
25821}
25822impl Terminal for TerminalString {
25823 const KIND: SyntaxKind = SyntaxKind::TerminalString;
25824 type TokenType = TokenString;
25825 fn new_green(
25826 db: &dyn SyntaxGroup,
25827 leading_trivia: TriviaGreen,
25828 token: <<TerminalString as Terminal>::TokenType as TypedSyntaxNode>::Green,
25829 trailing_trivia: TriviaGreen,
25830 ) -> Self::Green {
25831 let children = [leading_trivia.0, token.0, trailing_trivia.0];
25832 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
25833 TerminalStringGreen(
25834 Arc::new(GreenNode {
25835 kind: SyntaxKind::TerminalString,
25836 details: GreenNodeDetails::Node { children: children.into(), width },
25837 })
25838 .intern(db),
25839 )
25840 }
25841 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25842 let GreenNodeDetails::Node { children, .. } =
25843 &self.node.lookup_intern(db).green.lookup_intern(db).details
25844 else {
25845 unreachable!("Expected a node, not a token");
25846 };
25847 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
25848 }
25849}
25850impl TerminalString {
25851 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25852 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
25853 }
25854 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenString {
25855 TokenString::from_syntax_node(db, self.node.get_children(db)[1])
25856 }
25857 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25858 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
25859 }
25860}
25861#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25862pub struct TerminalStringPtr(pub SyntaxStablePtrId);
25863impl TerminalStringPtr {}
25864impl TypedStablePtr for TerminalStringPtr {
25865 type SyntaxNode = TerminalString;
25866 fn untyped(&self) -> SyntaxStablePtrId {
25867 self.0
25868 }
25869 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalString {
25870 TerminalString::from_syntax_node(db, self.0.lookup(db))
25871 }
25872}
25873impl From<TerminalStringPtr> for SyntaxStablePtrId {
25874 fn from(ptr: TerminalStringPtr) -> Self {
25875 ptr.untyped()
25876 }
25877}
25878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25879pub struct TerminalStringGreen(pub GreenId);
25880impl TypedSyntaxNode for TerminalString {
25881 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalString);
25882 type StablePtr = TerminalStringPtr;
25883 type Green = TerminalStringGreen;
25884 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25885 TerminalStringGreen(
25886 Arc::new(GreenNode {
25887 kind: SyntaxKind::TerminalString,
25888 details: GreenNodeDetails::Node {
25889 children: [
25890 Trivia::missing(db).0,
25891 TokenString::missing(db).0,
25892 Trivia::missing(db).0,
25893 ]
25894 .into(),
25895 width: TextWidth::default(),
25896 },
25897 })
25898 .intern(db),
25899 )
25900 }
25901 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25902 let kind = node.kind(db);
25903 assert_eq!(
25904 kind,
25905 SyntaxKind::TerminalString,
25906 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25907 kind,
25908 SyntaxKind::TerminalString
25909 );
25910 Self { node }
25911 }
25912 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25913 let kind = node.kind(db);
25914 if kind == SyntaxKind::TerminalString {
25915 Some(Self::from_syntax_node(db, node))
25916 } else {
25917 None
25918 }
25919 }
25920 fn as_syntax_node(&self) -> SyntaxNode {
25921 self.node
25922 }
25923 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
25924 TerminalStringPtr(self.node.stable_ptr(db))
25925 }
25926}
25927#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25928pub struct TokenAs {
25929 node: SyntaxNode,
25930}
25931impl Token for TokenAs {
25932 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25933 TokenAsGreen(
25934 Arc::new(GreenNode {
25935 kind: SyntaxKind::TokenAs,
25936 details: GreenNodeDetails::Token(text),
25937 })
25938 .intern(db),
25939 )
25940 }
25941 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25942 extract_matches!(
25943 &self.node.lookup_intern(db).green.lookup_intern(db).details,
25944 GreenNodeDetails::Token
25945 )
25946 .clone()
25947 }
25948}
25949#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25950pub struct TokenAsPtr(pub SyntaxStablePtrId);
25951impl TypedStablePtr for TokenAsPtr {
25952 type SyntaxNode = TokenAs;
25953 fn untyped(&self) -> SyntaxStablePtrId {
25954 self.0
25955 }
25956 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAs {
25957 TokenAs::from_syntax_node(db, self.0.lookup(db))
25958 }
25959}
25960impl From<TokenAsPtr> for SyntaxStablePtrId {
25961 fn from(ptr: TokenAsPtr) -> Self {
25962 ptr.untyped()
25963 }
25964}
25965#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25966pub struct TokenAsGreen(pub GreenId);
25967impl TokenAsGreen {
25968 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25969 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25970 }
25971}
25972impl TypedSyntaxNode for TokenAs {
25973 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAs);
25974 type StablePtr = TokenAsPtr;
25975 type Green = TokenAsGreen;
25976 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25977 TokenAsGreen(
25978 Arc::new(GreenNode {
25979 kind: SyntaxKind::TokenMissing,
25980 details: GreenNodeDetails::Token("".into()),
25981 })
25982 .intern(db),
25983 )
25984 }
25985 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25986 match node.lookup_intern(db).green.lookup_intern(db).details {
25987 GreenNodeDetails::Token(_) => Self { node },
25988 GreenNodeDetails::Node { .. } => {
25989 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAs)
25990 }
25991 }
25992 }
25993 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25994 match node.lookup_intern(db).green.lookup_intern(db).details {
25995 GreenNodeDetails::Token(_) => Some(Self { node }),
25996 GreenNodeDetails::Node { .. } => None,
25997 }
25998 }
25999 fn as_syntax_node(&self) -> SyntaxNode {
26000 self.node
26001 }
26002 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26003 TokenAsPtr(self.node.stable_ptr(db))
26004 }
26005}
26006#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26007pub struct TerminalAs {
26008 node: SyntaxNode,
26009}
26010impl Terminal for TerminalAs {
26011 const KIND: SyntaxKind = SyntaxKind::TerminalAs;
26012 type TokenType = TokenAs;
26013 fn new_green(
26014 db: &dyn SyntaxGroup,
26015 leading_trivia: TriviaGreen,
26016 token: <<TerminalAs as Terminal>::TokenType as TypedSyntaxNode>::Green,
26017 trailing_trivia: TriviaGreen,
26018 ) -> Self::Green {
26019 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26020 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26021 TerminalAsGreen(
26022 Arc::new(GreenNode {
26023 kind: SyntaxKind::TerminalAs,
26024 details: GreenNodeDetails::Node { children: children.into(), width },
26025 })
26026 .intern(db),
26027 )
26028 }
26029 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26030 let GreenNodeDetails::Node { children, .. } =
26031 &self.node.lookup_intern(db).green.lookup_intern(db).details
26032 else {
26033 unreachable!("Expected a node, not a token");
26034 };
26035 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26036 }
26037}
26038impl TerminalAs {
26039 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26040 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26041 }
26042 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAs {
26043 TokenAs::from_syntax_node(db, self.node.get_children(db)[1])
26044 }
26045 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26046 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26047 }
26048}
26049#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26050pub struct TerminalAsPtr(pub SyntaxStablePtrId);
26051impl TerminalAsPtr {}
26052impl TypedStablePtr for TerminalAsPtr {
26053 type SyntaxNode = TerminalAs;
26054 fn untyped(&self) -> SyntaxStablePtrId {
26055 self.0
26056 }
26057 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAs {
26058 TerminalAs::from_syntax_node(db, self.0.lookup(db))
26059 }
26060}
26061impl From<TerminalAsPtr> for SyntaxStablePtrId {
26062 fn from(ptr: TerminalAsPtr) -> Self {
26063 ptr.untyped()
26064 }
26065}
26066#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26067pub struct TerminalAsGreen(pub GreenId);
26068impl TypedSyntaxNode for TerminalAs {
26069 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAs);
26070 type StablePtr = TerminalAsPtr;
26071 type Green = TerminalAsGreen;
26072 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26073 TerminalAsGreen(
26074 Arc::new(GreenNode {
26075 kind: SyntaxKind::TerminalAs,
26076 details: GreenNodeDetails::Node {
26077 children: [
26078 Trivia::missing(db).0,
26079 TokenAs::missing(db).0,
26080 Trivia::missing(db).0,
26081 ]
26082 .into(),
26083 width: TextWidth::default(),
26084 },
26085 })
26086 .intern(db),
26087 )
26088 }
26089 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26090 let kind = node.kind(db);
26091 assert_eq!(
26092 kind,
26093 SyntaxKind::TerminalAs,
26094 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26095 kind,
26096 SyntaxKind::TerminalAs
26097 );
26098 Self { node }
26099 }
26100 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26101 let kind = node.kind(db);
26102 if kind == SyntaxKind::TerminalAs { Some(Self::from_syntax_node(db, node)) } else { None }
26103 }
26104 fn as_syntax_node(&self) -> SyntaxNode {
26105 self.node
26106 }
26107 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26108 TerminalAsPtr(self.node.stable_ptr(db))
26109 }
26110}
26111#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26112pub struct TokenConst {
26113 node: SyntaxNode,
26114}
26115impl Token for TokenConst {
26116 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26117 TokenConstGreen(
26118 Arc::new(GreenNode {
26119 kind: SyntaxKind::TokenConst,
26120 details: GreenNodeDetails::Token(text),
26121 })
26122 .intern(db),
26123 )
26124 }
26125 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26126 extract_matches!(
26127 &self.node.lookup_intern(db).green.lookup_intern(db).details,
26128 GreenNodeDetails::Token
26129 )
26130 .clone()
26131 }
26132}
26133#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26134pub struct TokenConstPtr(pub SyntaxStablePtrId);
26135impl TypedStablePtr for TokenConstPtr {
26136 type SyntaxNode = TokenConst;
26137 fn untyped(&self) -> SyntaxStablePtrId {
26138 self.0
26139 }
26140 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenConst {
26141 TokenConst::from_syntax_node(db, self.0.lookup(db))
26142 }
26143}
26144impl From<TokenConstPtr> for SyntaxStablePtrId {
26145 fn from(ptr: TokenConstPtr) -> Self {
26146 ptr.untyped()
26147 }
26148}
26149#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26150pub struct TokenConstGreen(pub GreenId);
26151impl TokenConstGreen {
26152 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26153 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26154 }
26155}
26156impl TypedSyntaxNode for TokenConst {
26157 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenConst);
26158 type StablePtr = TokenConstPtr;
26159 type Green = TokenConstGreen;
26160 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26161 TokenConstGreen(
26162 Arc::new(GreenNode {
26163 kind: SyntaxKind::TokenMissing,
26164 details: GreenNodeDetails::Token("".into()),
26165 })
26166 .intern(db),
26167 )
26168 }
26169 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26170 match node.lookup_intern(db).green.lookup_intern(db).details {
26171 GreenNodeDetails::Token(_) => Self { node },
26172 GreenNodeDetails::Node { .. } => {
26173 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenConst)
26174 }
26175 }
26176 }
26177 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26178 match node.lookup_intern(db).green.lookup_intern(db).details {
26179 GreenNodeDetails::Token(_) => Some(Self { node }),
26180 GreenNodeDetails::Node { .. } => None,
26181 }
26182 }
26183 fn as_syntax_node(&self) -> SyntaxNode {
26184 self.node
26185 }
26186 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26187 TokenConstPtr(self.node.stable_ptr(db))
26188 }
26189}
26190#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26191pub struct TerminalConst {
26192 node: SyntaxNode,
26193}
26194impl Terminal for TerminalConst {
26195 const KIND: SyntaxKind = SyntaxKind::TerminalConst;
26196 type TokenType = TokenConst;
26197 fn new_green(
26198 db: &dyn SyntaxGroup,
26199 leading_trivia: TriviaGreen,
26200 token: <<TerminalConst as Terminal>::TokenType as TypedSyntaxNode>::Green,
26201 trailing_trivia: TriviaGreen,
26202 ) -> Self::Green {
26203 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26204 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26205 TerminalConstGreen(
26206 Arc::new(GreenNode {
26207 kind: SyntaxKind::TerminalConst,
26208 details: GreenNodeDetails::Node { children: children.into(), width },
26209 })
26210 .intern(db),
26211 )
26212 }
26213 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26214 let GreenNodeDetails::Node { children, .. } =
26215 &self.node.lookup_intern(db).green.lookup_intern(db).details
26216 else {
26217 unreachable!("Expected a node, not a token");
26218 };
26219 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26220 }
26221}
26222impl TerminalConst {
26223 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26224 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26225 }
26226 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenConst {
26227 TokenConst::from_syntax_node(db, self.node.get_children(db)[1])
26228 }
26229 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26230 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26231 }
26232}
26233#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26234pub struct TerminalConstPtr(pub SyntaxStablePtrId);
26235impl TerminalConstPtr {}
26236impl TypedStablePtr for TerminalConstPtr {
26237 type SyntaxNode = TerminalConst;
26238 fn untyped(&self) -> SyntaxStablePtrId {
26239 self.0
26240 }
26241 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalConst {
26242 TerminalConst::from_syntax_node(db, self.0.lookup(db))
26243 }
26244}
26245impl From<TerminalConstPtr> for SyntaxStablePtrId {
26246 fn from(ptr: TerminalConstPtr) -> Self {
26247 ptr.untyped()
26248 }
26249}
26250#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26251pub struct TerminalConstGreen(pub GreenId);
26252impl TypedSyntaxNode for TerminalConst {
26253 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalConst);
26254 type StablePtr = TerminalConstPtr;
26255 type Green = TerminalConstGreen;
26256 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26257 TerminalConstGreen(
26258 Arc::new(GreenNode {
26259 kind: SyntaxKind::TerminalConst,
26260 details: GreenNodeDetails::Node {
26261 children: [
26262 Trivia::missing(db).0,
26263 TokenConst::missing(db).0,
26264 Trivia::missing(db).0,
26265 ]
26266 .into(),
26267 width: TextWidth::default(),
26268 },
26269 })
26270 .intern(db),
26271 )
26272 }
26273 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26274 let kind = node.kind(db);
26275 assert_eq!(
26276 kind,
26277 SyntaxKind::TerminalConst,
26278 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26279 kind,
26280 SyntaxKind::TerminalConst
26281 );
26282 Self { node }
26283 }
26284 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26285 let kind = node.kind(db);
26286 if kind == SyntaxKind::TerminalConst {
26287 Some(Self::from_syntax_node(db, node))
26288 } else {
26289 None
26290 }
26291 }
26292 fn as_syntax_node(&self) -> SyntaxNode {
26293 self.node
26294 }
26295 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26296 TerminalConstPtr(self.node.stable_ptr(db))
26297 }
26298}
26299#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26300pub struct TokenElse {
26301 node: SyntaxNode,
26302}
26303impl Token for TokenElse {
26304 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26305 TokenElseGreen(
26306 Arc::new(GreenNode {
26307 kind: SyntaxKind::TokenElse,
26308 details: GreenNodeDetails::Token(text),
26309 })
26310 .intern(db),
26311 )
26312 }
26313 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26314 extract_matches!(
26315 &self.node.lookup_intern(db).green.lookup_intern(db).details,
26316 GreenNodeDetails::Token
26317 )
26318 .clone()
26319 }
26320}
26321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26322pub struct TokenElsePtr(pub SyntaxStablePtrId);
26323impl TypedStablePtr for TokenElsePtr {
26324 type SyntaxNode = TokenElse;
26325 fn untyped(&self) -> SyntaxStablePtrId {
26326 self.0
26327 }
26328 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenElse {
26329 TokenElse::from_syntax_node(db, self.0.lookup(db))
26330 }
26331}
26332impl From<TokenElsePtr> for SyntaxStablePtrId {
26333 fn from(ptr: TokenElsePtr) -> Self {
26334 ptr.untyped()
26335 }
26336}
26337#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26338pub struct TokenElseGreen(pub GreenId);
26339impl TokenElseGreen {
26340 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26341 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26342 }
26343}
26344impl TypedSyntaxNode for TokenElse {
26345 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenElse);
26346 type StablePtr = TokenElsePtr;
26347 type Green = TokenElseGreen;
26348 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26349 TokenElseGreen(
26350 Arc::new(GreenNode {
26351 kind: SyntaxKind::TokenMissing,
26352 details: GreenNodeDetails::Token("".into()),
26353 })
26354 .intern(db),
26355 )
26356 }
26357 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26358 match node.lookup_intern(db).green.lookup_intern(db).details {
26359 GreenNodeDetails::Token(_) => Self { node },
26360 GreenNodeDetails::Node { .. } => {
26361 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenElse)
26362 }
26363 }
26364 }
26365 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26366 match node.lookup_intern(db).green.lookup_intern(db).details {
26367 GreenNodeDetails::Token(_) => Some(Self { node }),
26368 GreenNodeDetails::Node { .. } => None,
26369 }
26370 }
26371 fn as_syntax_node(&self) -> SyntaxNode {
26372 self.node
26373 }
26374 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26375 TokenElsePtr(self.node.stable_ptr(db))
26376 }
26377}
26378#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26379pub struct TerminalElse {
26380 node: SyntaxNode,
26381}
26382impl Terminal for TerminalElse {
26383 const KIND: SyntaxKind = SyntaxKind::TerminalElse;
26384 type TokenType = TokenElse;
26385 fn new_green(
26386 db: &dyn SyntaxGroup,
26387 leading_trivia: TriviaGreen,
26388 token: <<TerminalElse as Terminal>::TokenType as TypedSyntaxNode>::Green,
26389 trailing_trivia: TriviaGreen,
26390 ) -> Self::Green {
26391 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26392 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26393 TerminalElseGreen(
26394 Arc::new(GreenNode {
26395 kind: SyntaxKind::TerminalElse,
26396 details: GreenNodeDetails::Node { children: children.into(), width },
26397 })
26398 .intern(db),
26399 )
26400 }
26401 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26402 let GreenNodeDetails::Node { children, .. } =
26403 &self.node.lookup_intern(db).green.lookup_intern(db).details
26404 else {
26405 unreachable!("Expected a node, not a token");
26406 };
26407 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26408 }
26409}
26410impl TerminalElse {
26411 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26412 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26413 }
26414 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenElse {
26415 TokenElse::from_syntax_node(db, self.node.get_children(db)[1])
26416 }
26417 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26418 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26419 }
26420}
26421#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26422pub struct TerminalElsePtr(pub SyntaxStablePtrId);
26423impl TerminalElsePtr {}
26424impl TypedStablePtr for TerminalElsePtr {
26425 type SyntaxNode = TerminalElse;
26426 fn untyped(&self) -> SyntaxStablePtrId {
26427 self.0
26428 }
26429 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalElse {
26430 TerminalElse::from_syntax_node(db, self.0.lookup(db))
26431 }
26432}
26433impl From<TerminalElsePtr> for SyntaxStablePtrId {
26434 fn from(ptr: TerminalElsePtr) -> Self {
26435 ptr.untyped()
26436 }
26437}
26438#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26439pub struct TerminalElseGreen(pub GreenId);
26440impl TypedSyntaxNode for TerminalElse {
26441 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalElse);
26442 type StablePtr = TerminalElsePtr;
26443 type Green = TerminalElseGreen;
26444 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26445 TerminalElseGreen(
26446 Arc::new(GreenNode {
26447 kind: SyntaxKind::TerminalElse,
26448 details: GreenNodeDetails::Node {
26449 children: [
26450 Trivia::missing(db).0,
26451 TokenElse::missing(db).0,
26452 Trivia::missing(db).0,
26453 ]
26454 .into(),
26455 width: TextWidth::default(),
26456 },
26457 })
26458 .intern(db),
26459 )
26460 }
26461 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26462 let kind = node.kind(db);
26463 assert_eq!(
26464 kind,
26465 SyntaxKind::TerminalElse,
26466 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26467 kind,
26468 SyntaxKind::TerminalElse
26469 );
26470 Self { node }
26471 }
26472 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26473 let kind = node.kind(db);
26474 if kind == SyntaxKind::TerminalElse { Some(Self::from_syntax_node(db, node)) } else { None }
26475 }
26476 fn as_syntax_node(&self) -> SyntaxNode {
26477 self.node
26478 }
26479 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26480 TerminalElsePtr(self.node.stable_ptr(db))
26481 }
26482}
26483#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26484pub struct TokenEnum {
26485 node: SyntaxNode,
26486}
26487impl Token for TokenEnum {
26488 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26489 TokenEnumGreen(
26490 Arc::new(GreenNode {
26491 kind: SyntaxKind::TokenEnum,
26492 details: GreenNodeDetails::Token(text),
26493 })
26494 .intern(db),
26495 )
26496 }
26497 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26498 extract_matches!(
26499 &self.node.lookup_intern(db).green.lookup_intern(db).details,
26500 GreenNodeDetails::Token
26501 )
26502 .clone()
26503 }
26504}
26505#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26506pub struct TokenEnumPtr(pub SyntaxStablePtrId);
26507impl TypedStablePtr for TokenEnumPtr {
26508 type SyntaxNode = TokenEnum;
26509 fn untyped(&self) -> SyntaxStablePtrId {
26510 self.0
26511 }
26512 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEnum {
26513 TokenEnum::from_syntax_node(db, self.0.lookup(db))
26514 }
26515}
26516impl From<TokenEnumPtr> for SyntaxStablePtrId {
26517 fn from(ptr: TokenEnumPtr) -> Self {
26518 ptr.untyped()
26519 }
26520}
26521#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26522pub struct TokenEnumGreen(pub GreenId);
26523impl TokenEnumGreen {
26524 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26525 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26526 }
26527}
26528impl TypedSyntaxNode for TokenEnum {
26529 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEnum);
26530 type StablePtr = TokenEnumPtr;
26531 type Green = TokenEnumGreen;
26532 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26533 TokenEnumGreen(
26534 Arc::new(GreenNode {
26535 kind: SyntaxKind::TokenMissing,
26536 details: GreenNodeDetails::Token("".into()),
26537 })
26538 .intern(db),
26539 )
26540 }
26541 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26542 match node.lookup_intern(db).green.lookup_intern(db).details {
26543 GreenNodeDetails::Token(_) => Self { node },
26544 GreenNodeDetails::Node { .. } => {
26545 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEnum)
26546 }
26547 }
26548 }
26549 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26550 match node.lookup_intern(db).green.lookup_intern(db).details {
26551 GreenNodeDetails::Token(_) => Some(Self { node }),
26552 GreenNodeDetails::Node { .. } => None,
26553 }
26554 }
26555 fn as_syntax_node(&self) -> SyntaxNode {
26556 self.node
26557 }
26558 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26559 TokenEnumPtr(self.node.stable_ptr(db))
26560 }
26561}
26562#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26563pub struct TerminalEnum {
26564 node: SyntaxNode,
26565}
26566impl Terminal for TerminalEnum {
26567 const KIND: SyntaxKind = SyntaxKind::TerminalEnum;
26568 type TokenType = TokenEnum;
26569 fn new_green(
26570 db: &dyn SyntaxGroup,
26571 leading_trivia: TriviaGreen,
26572 token: <<TerminalEnum as Terminal>::TokenType as TypedSyntaxNode>::Green,
26573 trailing_trivia: TriviaGreen,
26574 ) -> Self::Green {
26575 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26576 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26577 TerminalEnumGreen(
26578 Arc::new(GreenNode {
26579 kind: SyntaxKind::TerminalEnum,
26580 details: GreenNodeDetails::Node { children: children.into(), width },
26581 })
26582 .intern(db),
26583 )
26584 }
26585 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26586 let GreenNodeDetails::Node { children, .. } =
26587 &self.node.lookup_intern(db).green.lookup_intern(db).details
26588 else {
26589 unreachable!("Expected a node, not a token");
26590 };
26591 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26592 }
26593}
26594impl TerminalEnum {
26595 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26596 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26597 }
26598 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEnum {
26599 TokenEnum::from_syntax_node(db, self.node.get_children(db)[1])
26600 }
26601 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26602 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26603 }
26604}
26605#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26606pub struct TerminalEnumPtr(pub SyntaxStablePtrId);
26607impl TerminalEnumPtr {}
26608impl TypedStablePtr for TerminalEnumPtr {
26609 type SyntaxNode = TerminalEnum;
26610 fn untyped(&self) -> SyntaxStablePtrId {
26611 self.0
26612 }
26613 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
26614 TerminalEnum::from_syntax_node(db, self.0.lookup(db))
26615 }
26616}
26617impl From<TerminalEnumPtr> for SyntaxStablePtrId {
26618 fn from(ptr: TerminalEnumPtr) -> Self {
26619 ptr.untyped()
26620 }
26621}
26622#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26623pub struct TerminalEnumGreen(pub GreenId);
26624impl TypedSyntaxNode for TerminalEnum {
26625 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEnum);
26626 type StablePtr = TerminalEnumPtr;
26627 type Green = TerminalEnumGreen;
26628 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26629 TerminalEnumGreen(
26630 Arc::new(GreenNode {
26631 kind: SyntaxKind::TerminalEnum,
26632 details: GreenNodeDetails::Node {
26633 children: [
26634 Trivia::missing(db).0,
26635 TokenEnum::missing(db).0,
26636 Trivia::missing(db).0,
26637 ]
26638 .into(),
26639 width: TextWidth::default(),
26640 },
26641 })
26642 .intern(db),
26643 )
26644 }
26645 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26646 let kind = node.kind(db);
26647 assert_eq!(
26648 kind,
26649 SyntaxKind::TerminalEnum,
26650 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26651 kind,
26652 SyntaxKind::TerminalEnum
26653 );
26654 Self { node }
26655 }
26656 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26657 let kind = node.kind(db);
26658 if kind == SyntaxKind::TerminalEnum { Some(Self::from_syntax_node(db, node)) } else { None }
26659 }
26660 fn as_syntax_node(&self) -> SyntaxNode {
26661 self.node
26662 }
26663 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26664 TerminalEnumPtr(self.node.stable_ptr(db))
26665 }
26666}
26667#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26668pub struct TokenExtern {
26669 node: SyntaxNode,
26670}
26671impl Token for TokenExtern {
26672 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26673 TokenExternGreen(
26674 Arc::new(GreenNode {
26675 kind: SyntaxKind::TokenExtern,
26676 details: GreenNodeDetails::Token(text),
26677 })
26678 .intern(db),
26679 )
26680 }
26681 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26682 extract_matches!(
26683 &self.node.lookup_intern(db).green.lookup_intern(db).details,
26684 GreenNodeDetails::Token
26685 )
26686 .clone()
26687 }
26688}
26689#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26690pub struct TokenExternPtr(pub SyntaxStablePtrId);
26691impl TypedStablePtr for TokenExternPtr {
26692 type SyntaxNode = TokenExtern;
26693 fn untyped(&self) -> SyntaxStablePtrId {
26694 self.0
26695 }
26696 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenExtern {
26697 TokenExtern::from_syntax_node(db, self.0.lookup(db))
26698 }
26699}
26700impl From<TokenExternPtr> for SyntaxStablePtrId {
26701 fn from(ptr: TokenExternPtr) -> Self {
26702 ptr.untyped()
26703 }
26704}
26705#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26706pub struct TokenExternGreen(pub GreenId);
26707impl TokenExternGreen {
26708 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26709 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26710 }
26711}
26712impl TypedSyntaxNode for TokenExtern {
26713 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenExtern);
26714 type StablePtr = TokenExternPtr;
26715 type Green = TokenExternGreen;
26716 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26717 TokenExternGreen(
26718 Arc::new(GreenNode {
26719 kind: SyntaxKind::TokenMissing,
26720 details: GreenNodeDetails::Token("".into()),
26721 })
26722 .intern(db),
26723 )
26724 }
26725 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26726 match node.lookup_intern(db).green.lookup_intern(db).details {
26727 GreenNodeDetails::Token(_) => Self { node },
26728 GreenNodeDetails::Node { .. } => {
26729 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenExtern)
26730 }
26731 }
26732 }
26733 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26734 match node.lookup_intern(db).green.lookup_intern(db).details {
26735 GreenNodeDetails::Token(_) => Some(Self { node }),
26736 GreenNodeDetails::Node { .. } => None,
26737 }
26738 }
26739 fn as_syntax_node(&self) -> SyntaxNode {
26740 self.node
26741 }
26742 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26743 TokenExternPtr(self.node.stable_ptr(db))
26744 }
26745}
26746#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26747pub struct TerminalExtern {
26748 node: SyntaxNode,
26749}
26750impl Terminal for TerminalExtern {
26751 const KIND: SyntaxKind = SyntaxKind::TerminalExtern;
26752 type TokenType = TokenExtern;
26753 fn new_green(
26754 db: &dyn SyntaxGroup,
26755 leading_trivia: TriviaGreen,
26756 token: <<TerminalExtern as Terminal>::TokenType as TypedSyntaxNode>::Green,
26757 trailing_trivia: TriviaGreen,
26758 ) -> Self::Green {
26759 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26760 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26761 TerminalExternGreen(
26762 Arc::new(GreenNode {
26763 kind: SyntaxKind::TerminalExtern,
26764 details: GreenNodeDetails::Node { children: children.into(), width },
26765 })
26766 .intern(db),
26767 )
26768 }
26769 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26770 let GreenNodeDetails::Node { children, .. } =
26771 &self.node.lookup_intern(db).green.lookup_intern(db).details
26772 else {
26773 unreachable!("Expected a node, not a token");
26774 };
26775 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26776 }
26777}
26778impl TerminalExtern {
26779 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26780 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26781 }
26782 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenExtern {
26783 TokenExtern::from_syntax_node(db, self.node.get_children(db)[1])
26784 }
26785 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26786 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26787 }
26788}
26789#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26790pub struct TerminalExternPtr(pub SyntaxStablePtrId);
26791impl TerminalExternPtr {}
26792impl TypedStablePtr for TerminalExternPtr {
26793 type SyntaxNode = TerminalExtern;
26794 fn untyped(&self) -> SyntaxStablePtrId {
26795 self.0
26796 }
26797 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
26798 TerminalExtern::from_syntax_node(db, self.0.lookup(db))
26799 }
26800}
26801impl From<TerminalExternPtr> for SyntaxStablePtrId {
26802 fn from(ptr: TerminalExternPtr) -> Self {
26803 ptr.untyped()
26804 }
26805}
26806#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26807pub struct TerminalExternGreen(pub GreenId);
26808impl TypedSyntaxNode for TerminalExtern {
26809 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalExtern);
26810 type StablePtr = TerminalExternPtr;
26811 type Green = TerminalExternGreen;
26812 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26813 TerminalExternGreen(
26814 Arc::new(GreenNode {
26815 kind: SyntaxKind::TerminalExtern,
26816 details: GreenNodeDetails::Node {
26817 children: [
26818 Trivia::missing(db).0,
26819 TokenExtern::missing(db).0,
26820 Trivia::missing(db).0,
26821 ]
26822 .into(),
26823 width: TextWidth::default(),
26824 },
26825 })
26826 .intern(db),
26827 )
26828 }
26829 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26830 let kind = node.kind(db);
26831 assert_eq!(
26832 kind,
26833 SyntaxKind::TerminalExtern,
26834 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26835 kind,
26836 SyntaxKind::TerminalExtern
26837 );
26838 Self { node }
26839 }
26840 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26841 let kind = node.kind(db);
26842 if kind == SyntaxKind::TerminalExtern {
26843 Some(Self::from_syntax_node(db, node))
26844 } else {
26845 None
26846 }
26847 }
26848 fn as_syntax_node(&self) -> SyntaxNode {
26849 self.node
26850 }
26851 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26852 TerminalExternPtr(self.node.stable_ptr(db))
26853 }
26854}
26855#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26856pub struct TokenFalse {
26857 node: SyntaxNode,
26858}
26859impl Token for TokenFalse {
26860 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26861 TokenFalseGreen(
26862 Arc::new(GreenNode {
26863 kind: SyntaxKind::TokenFalse,
26864 details: GreenNodeDetails::Token(text),
26865 })
26866 .intern(db),
26867 )
26868 }
26869 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26870 extract_matches!(
26871 &self.node.lookup_intern(db).green.lookup_intern(db).details,
26872 GreenNodeDetails::Token
26873 )
26874 .clone()
26875 }
26876}
26877#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26878pub struct TokenFalsePtr(pub SyntaxStablePtrId);
26879impl TypedStablePtr for TokenFalsePtr {
26880 type SyntaxNode = TokenFalse;
26881 fn untyped(&self) -> SyntaxStablePtrId {
26882 self.0
26883 }
26884 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFalse {
26885 TokenFalse::from_syntax_node(db, self.0.lookup(db))
26886 }
26887}
26888impl From<TokenFalsePtr> for SyntaxStablePtrId {
26889 fn from(ptr: TokenFalsePtr) -> Self {
26890 ptr.untyped()
26891 }
26892}
26893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26894pub struct TokenFalseGreen(pub GreenId);
26895impl TokenFalseGreen {
26896 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26897 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26898 }
26899}
26900impl TypedSyntaxNode for TokenFalse {
26901 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFalse);
26902 type StablePtr = TokenFalsePtr;
26903 type Green = TokenFalseGreen;
26904 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26905 TokenFalseGreen(
26906 Arc::new(GreenNode {
26907 kind: SyntaxKind::TokenMissing,
26908 details: GreenNodeDetails::Token("".into()),
26909 })
26910 .intern(db),
26911 )
26912 }
26913 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26914 match node.lookup_intern(db).green.lookup_intern(db).details {
26915 GreenNodeDetails::Token(_) => Self { node },
26916 GreenNodeDetails::Node { .. } => {
26917 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFalse)
26918 }
26919 }
26920 }
26921 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26922 match node.lookup_intern(db).green.lookup_intern(db).details {
26923 GreenNodeDetails::Token(_) => Some(Self { node }),
26924 GreenNodeDetails::Node { .. } => None,
26925 }
26926 }
26927 fn as_syntax_node(&self) -> SyntaxNode {
26928 self.node
26929 }
26930 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
26931 TokenFalsePtr(self.node.stable_ptr(db))
26932 }
26933}
26934#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26935pub struct TerminalFalse {
26936 node: SyntaxNode,
26937}
26938impl Terminal for TerminalFalse {
26939 const KIND: SyntaxKind = SyntaxKind::TerminalFalse;
26940 type TokenType = TokenFalse;
26941 fn new_green(
26942 db: &dyn SyntaxGroup,
26943 leading_trivia: TriviaGreen,
26944 token: <<TerminalFalse as Terminal>::TokenType as TypedSyntaxNode>::Green,
26945 trailing_trivia: TriviaGreen,
26946 ) -> Self::Green {
26947 let children = [leading_trivia.0, token.0, trailing_trivia.0];
26948 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
26949 TerminalFalseGreen(
26950 Arc::new(GreenNode {
26951 kind: SyntaxKind::TerminalFalse,
26952 details: GreenNodeDetails::Node { children: children.into(), width },
26953 })
26954 .intern(db),
26955 )
26956 }
26957 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26958 let GreenNodeDetails::Node { children, .. } =
26959 &self.node.lookup_intern(db).green.lookup_intern(db).details
26960 else {
26961 unreachable!("Expected a node, not a token");
26962 };
26963 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
26964 }
26965}
26966impl TerminalFalse {
26967 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26968 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
26969 }
26970 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFalse {
26971 TokenFalse::from_syntax_node(db, self.node.get_children(db)[1])
26972 }
26973 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26974 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
26975 }
26976}
26977#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26978pub struct TerminalFalsePtr(pub SyntaxStablePtrId);
26979impl TerminalFalsePtr {}
26980impl TypedStablePtr for TerminalFalsePtr {
26981 type SyntaxNode = TerminalFalse;
26982 fn untyped(&self) -> SyntaxStablePtrId {
26983 self.0
26984 }
26985 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFalse {
26986 TerminalFalse::from_syntax_node(db, self.0.lookup(db))
26987 }
26988}
26989impl From<TerminalFalsePtr> for SyntaxStablePtrId {
26990 fn from(ptr: TerminalFalsePtr) -> Self {
26991 ptr.untyped()
26992 }
26993}
26994#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26995pub struct TerminalFalseGreen(pub GreenId);
26996impl TypedSyntaxNode for TerminalFalse {
26997 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFalse);
26998 type StablePtr = TerminalFalsePtr;
26999 type Green = TerminalFalseGreen;
27000 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27001 TerminalFalseGreen(
27002 Arc::new(GreenNode {
27003 kind: SyntaxKind::TerminalFalse,
27004 details: GreenNodeDetails::Node {
27005 children: [
27006 Trivia::missing(db).0,
27007 TokenFalse::missing(db).0,
27008 Trivia::missing(db).0,
27009 ]
27010 .into(),
27011 width: TextWidth::default(),
27012 },
27013 })
27014 .intern(db),
27015 )
27016 }
27017 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27018 let kind = node.kind(db);
27019 assert_eq!(
27020 kind,
27021 SyntaxKind::TerminalFalse,
27022 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27023 kind,
27024 SyntaxKind::TerminalFalse
27025 );
27026 Self { node }
27027 }
27028 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27029 let kind = node.kind(db);
27030 if kind == SyntaxKind::TerminalFalse {
27031 Some(Self::from_syntax_node(db, node))
27032 } else {
27033 None
27034 }
27035 }
27036 fn as_syntax_node(&self) -> SyntaxNode {
27037 self.node
27038 }
27039 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27040 TerminalFalsePtr(self.node.stable_ptr(db))
27041 }
27042}
27043#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27044pub struct TokenFunction {
27045 node: SyntaxNode,
27046}
27047impl Token for TokenFunction {
27048 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27049 TokenFunctionGreen(
27050 Arc::new(GreenNode {
27051 kind: SyntaxKind::TokenFunction,
27052 details: GreenNodeDetails::Token(text),
27053 })
27054 .intern(db),
27055 )
27056 }
27057 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27058 extract_matches!(
27059 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27060 GreenNodeDetails::Token
27061 )
27062 .clone()
27063 }
27064}
27065#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27066pub struct TokenFunctionPtr(pub SyntaxStablePtrId);
27067impl TypedStablePtr for TokenFunctionPtr {
27068 type SyntaxNode = TokenFunction;
27069 fn untyped(&self) -> SyntaxStablePtrId {
27070 self.0
27071 }
27072 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFunction {
27073 TokenFunction::from_syntax_node(db, self.0.lookup(db))
27074 }
27075}
27076impl From<TokenFunctionPtr> for SyntaxStablePtrId {
27077 fn from(ptr: TokenFunctionPtr) -> Self {
27078 ptr.untyped()
27079 }
27080}
27081#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27082pub struct TokenFunctionGreen(pub GreenId);
27083impl TokenFunctionGreen {
27084 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27085 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27086 }
27087}
27088impl TypedSyntaxNode for TokenFunction {
27089 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFunction);
27090 type StablePtr = TokenFunctionPtr;
27091 type Green = TokenFunctionGreen;
27092 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27093 TokenFunctionGreen(
27094 Arc::new(GreenNode {
27095 kind: SyntaxKind::TokenMissing,
27096 details: GreenNodeDetails::Token("".into()),
27097 })
27098 .intern(db),
27099 )
27100 }
27101 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27102 match node.lookup_intern(db).green.lookup_intern(db).details {
27103 GreenNodeDetails::Token(_) => Self { node },
27104 GreenNodeDetails::Node { .. } => {
27105 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFunction)
27106 }
27107 }
27108 }
27109 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27110 match node.lookup_intern(db).green.lookup_intern(db).details {
27111 GreenNodeDetails::Token(_) => Some(Self { node }),
27112 GreenNodeDetails::Node { .. } => None,
27113 }
27114 }
27115 fn as_syntax_node(&self) -> SyntaxNode {
27116 self.node
27117 }
27118 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27119 TokenFunctionPtr(self.node.stable_ptr(db))
27120 }
27121}
27122#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27123pub struct TerminalFunction {
27124 node: SyntaxNode,
27125}
27126impl Terminal for TerminalFunction {
27127 const KIND: SyntaxKind = SyntaxKind::TerminalFunction;
27128 type TokenType = TokenFunction;
27129 fn new_green(
27130 db: &dyn SyntaxGroup,
27131 leading_trivia: TriviaGreen,
27132 token: <<TerminalFunction as Terminal>::TokenType as TypedSyntaxNode>::Green,
27133 trailing_trivia: TriviaGreen,
27134 ) -> Self::Green {
27135 let children = [leading_trivia.0, token.0, trailing_trivia.0];
27136 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
27137 TerminalFunctionGreen(
27138 Arc::new(GreenNode {
27139 kind: SyntaxKind::TerminalFunction,
27140 details: GreenNodeDetails::Node { children: children.into(), width },
27141 })
27142 .intern(db),
27143 )
27144 }
27145 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27146 let GreenNodeDetails::Node { children, .. } =
27147 &self.node.lookup_intern(db).green.lookup_intern(db).details
27148 else {
27149 unreachable!("Expected a node, not a token");
27150 };
27151 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
27152 }
27153}
27154impl TerminalFunction {
27155 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27156 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
27157 }
27158 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFunction {
27159 TokenFunction::from_syntax_node(db, self.node.get_children(db)[1])
27160 }
27161 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27162 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
27163 }
27164}
27165#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27166pub struct TerminalFunctionPtr(pub SyntaxStablePtrId);
27167impl TerminalFunctionPtr {}
27168impl TypedStablePtr for TerminalFunctionPtr {
27169 type SyntaxNode = TerminalFunction;
27170 fn untyped(&self) -> SyntaxStablePtrId {
27171 self.0
27172 }
27173 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
27174 TerminalFunction::from_syntax_node(db, self.0.lookup(db))
27175 }
27176}
27177impl From<TerminalFunctionPtr> for SyntaxStablePtrId {
27178 fn from(ptr: TerminalFunctionPtr) -> Self {
27179 ptr.untyped()
27180 }
27181}
27182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27183pub struct TerminalFunctionGreen(pub GreenId);
27184impl TypedSyntaxNode for TerminalFunction {
27185 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFunction);
27186 type StablePtr = TerminalFunctionPtr;
27187 type Green = TerminalFunctionGreen;
27188 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27189 TerminalFunctionGreen(
27190 Arc::new(GreenNode {
27191 kind: SyntaxKind::TerminalFunction,
27192 details: GreenNodeDetails::Node {
27193 children: [
27194 Trivia::missing(db).0,
27195 TokenFunction::missing(db).0,
27196 Trivia::missing(db).0,
27197 ]
27198 .into(),
27199 width: TextWidth::default(),
27200 },
27201 })
27202 .intern(db),
27203 )
27204 }
27205 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27206 let kind = node.kind(db);
27207 assert_eq!(
27208 kind,
27209 SyntaxKind::TerminalFunction,
27210 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27211 kind,
27212 SyntaxKind::TerminalFunction
27213 );
27214 Self { node }
27215 }
27216 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27217 let kind = node.kind(db);
27218 if kind == SyntaxKind::TerminalFunction {
27219 Some(Self::from_syntax_node(db, node))
27220 } else {
27221 None
27222 }
27223 }
27224 fn as_syntax_node(&self) -> SyntaxNode {
27225 self.node
27226 }
27227 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27228 TerminalFunctionPtr(self.node.stable_ptr(db))
27229 }
27230}
27231#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27232pub struct TokenIf {
27233 node: SyntaxNode,
27234}
27235impl Token for TokenIf {
27236 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27237 TokenIfGreen(
27238 Arc::new(GreenNode {
27239 kind: SyntaxKind::TokenIf,
27240 details: GreenNodeDetails::Token(text),
27241 })
27242 .intern(db),
27243 )
27244 }
27245 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27246 extract_matches!(
27247 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27248 GreenNodeDetails::Token
27249 )
27250 .clone()
27251 }
27252}
27253#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27254pub struct TokenIfPtr(pub SyntaxStablePtrId);
27255impl TypedStablePtr for TokenIfPtr {
27256 type SyntaxNode = TokenIf;
27257 fn untyped(&self) -> SyntaxStablePtrId {
27258 self.0
27259 }
27260 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIf {
27261 TokenIf::from_syntax_node(db, self.0.lookup(db))
27262 }
27263}
27264impl From<TokenIfPtr> for SyntaxStablePtrId {
27265 fn from(ptr: TokenIfPtr) -> Self {
27266 ptr.untyped()
27267 }
27268}
27269#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27270pub struct TokenIfGreen(pub GreenId);
27271impl TokenIfGreen {
27272 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27273 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27274 }
27275}
27276impl TypedSyntaxNode for TokenIf {
27277 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIf);
27278 type StablePtr = TokenIfPtr;
27279 type Green = TokenIfGreen;
27280 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27281 TokenIfGreen(
27282 Arc::new(GreenNode {
27283 kind: SyntaxKind::TokenMissing,
27284 details: GreenNodeDetails::Token("".into()),
27285 })
27286 .intern(db),
27287 )
27288 }
27289 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27290 match node.lookup_intern(db).green.lookup_intern(db).details {
27291 GreenNodeDetails::Token(_) => Self { node },
27292 GreenNodeDetails::Node { .. } => {
27293 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIf)
27294 }
27295 }
27296 }
27297 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27298 match node.lookup_intern(db).green.lookup_intern(db).details {
27299 GreenNodeDetails::Token(_) => Some(Self { node }),
27300 GreenNodeDetails::Node { .. } => None,
27301 }
27302 }
27303 fn as_syntax_node(&self) -> SyntaxNode {
27304 self.node
27305 }
27306 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27307 TokenIfPtr(self.node.stable_ptr(db))
27308 }
27309}
27310#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27311pub struct TerminalIf {
27312 node: SyntaxNode,
27313}
27314impl Terminal for TerminalIf {
27315 const KIND: SyntaxKind = SyntaxKind::TerminalIf;
27316 type TokenType = TokenIf;
27317 fn new_green(
27318 db: &dyn SyntaxGroup,
27319 leading_trivia: TriviaGreen,
27320 token: <<TerminalIf as Terminal>::TokenType as TypedSyntaxNode>::Green,
27321 trailing_trivia: TriviaGreen,
27322 ) -> Self::Green {
27323 let children = [leading_trivia.0, token.0, trailing_trivia.0];
27324 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
27325 TerminalIfGreen(
27326 Arc::new(GreenNode {
27327 kind: SyntaxKind::TerminalIf,
27328 details: GreenNodeDetails::Node { children: children.into(), width },
27329 })
27330 .intern(db),
27331 )
27332 }
27333 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27334 let GreenNodeDetails::Node { children, .. } =
27335 &self.node.lookup_intern(db).green.lookup_intern(db).details
27336 else {
27337 unreachable!("Expected a node, not a token");
27338 };
27339 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
27340 }
27341}
27342impl TerminalIf {
27343 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27344 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
27345 }
27346 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIf {
27347 TokenIf::from_syntax_node(db, self.node.get_children(db)[1])
27348 }
27349 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27350 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
27351 }
27352}
27353#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27354pub struct TerminalIfPtr(pub SyntaxStablePtrId);
27355impl TerminalIfPtr {}
27356impl TypedStablePtr for TerminalIfPtr {
27357 type SyntaxNode = TerminalIf;
27358 fn untyped(&self) -> SyntaxStablePtrId {
27359 self.0
27360 }
27361 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIf {
27362 TerminalIf::from_syntax_node(db, self.0.lookup(db))
27363 }
27364}
27365impl From<TerminalIfPtr> for SyntaxStablePtrId {
27366 fn from(ptr: TerminalIfPtr) -> Self {
27367 ptr.untyped()
27368 }
27369}
27370#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27371pub struct TerminalIfGreen(pub GreenId);
27372impl TypedSyntaxNode for TerminalIf {
27373 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIf);
27374 type StablePtr = TerminalIfPtr;
27375 type Green = TerminalIfGreen;
27376 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27377 TerminalIfGreen(
27378 Arc::new(GreenNode {
27379 kind: SyntaxKind::TerminalIf,
27380 details: GreenNodeDetails::Node {
27381 children: [
27382 Trivia::missing(db).0,
27383 TokenIf::missing(db).0,
27384 Trivia::missing(db).0,
27385 ]
27386 .into(),
27387 width: TextWidth::default(),
27388 },
27389 })
27390 .intern(db),
27391 )
27392 }
27393 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27394 let kind = node.kind(db);
27395 assert_eq!(
27396 kind,
27397 SyntaxKind::TerminalIf,
27398 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27399 kind,
27400 SyntaxKind::TerminalIf
27401 );
27402 Self { node }
27403 }
27404 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27405 let kind = node.kind(db);
27406 if kind == SyntaxKind::TerminalIf { Some(Self::from_syntax_node(db, node)) } else { None }
27407 }
27408 fn as_syntax_node(&self) -> SyntaxNode {
27409 self.node
27410 }
27411 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27412 TerminalIfPtr(self.node.stable_ptr(db))
27413 }
27414}
27415#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27416pub struct TokenWhile {
27417 node: SyntaxNode,
27418}
27419impl Token for TokenWhile {
27420 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27421 TokenWhileGreen(
27422 Arc::new(GreenNode {
27423 kind: SyntaxKind::TokenWhile,
27424 details: GreenNodeDetails::Token(text),
27425 })
27426 .intern(db),
27427 )
27428 }
27429 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27430 extract_matches!(
27431 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27432 GreenNodeDetails::Token
27433 )
27434 .clone()
27435 }
27436}
27437#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27438pub struct TokenWhilePtr(pub SyntaxStablePtrId);
27439impl TypedStablePtr for TokenWhilePtr {
27440 type SyntaxNode = TokenWhile;
27441 fn untyped(&self) -> SyntaxStablePtrId {
27442 self.0
27443 }
27444 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhile {
27445 TokenWhile::from_syntax_node(db, self.0.lookup(db))
27446 }
27447}
27448impl From<TokenWhilePtr> for SyntaxStablePtrId {
27449 fn from(ptr: TokenWhilePtr) -> Self {
27450 ptr.untyped()
27451 }
27452}
27453#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27454pub struct TokenWhileGreen(pub GreenId);
27455impl TokenWhileGreen {
27456 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27457 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27458 }
27459}
27460impl TypedSyntaxNode for TokenWhile {
27461 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhile);
27462 type StablePtr = TokenWhilePtr;
27463 type Green = TokenWhileGreen;
27464 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27465 TokenWhileGreen(
27466 Arc::new(GreenNode {
27467 kind: SyntaxKind::TokenMissing,
27468 details: GreenNodeDetails::Token("".into()),
27469 })
27470 .intern(db),
27471 )
27472 }
27473 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27474 match node.lookup_intern(db).green.lookup_intern(db).details {
27475 GreenNodeDetails::Token(_) => Self { node },
27476 GreenNodeDetails::Node { .. } => {
27477 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhile)
27478 }
27479 }
27480 }
27481 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27482 match node.lookup_intern(db).green.lookup_intern(db).details {
27483 GreenNodeDetails::Token(_) => Some(Self { node }),
27484 GreenNodeDetails::Node { .. } => None,
27485 }
27486 }
27487 fn as_syntax_node(&self) -> SyntaxNode {
27488 self.node
27489 }
27490 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27491 TokenWhilePtr(self.node.stable_ptr(db))
27492 }
27493}
27494#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27495pub struct TerminalWhile {
27496 node: SyntaxNode,
27497}
27498impl Terminal for TerminalWhile {
27499 const KIND: SyntaxKind = SyntaxKind::TerminalWhile;
27500 type TokenType = TokenWhile;
27501 fn new_green(
27502 db: &dyn SyntaxGroup,
27503 leading_trivia: TriviaGreen,
27504 token: <<TerminalWhile as Terminal>::TokenType as TypedSyntaxNode>::Green,
27505 trailing_trivia: TriviaGreen,
27506 ) -> Self::Green {
27507 let children = [leading_trivia.0, token.0, trailing_trivia.0];
27508 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
27509 TerminalWhileGreen(
27510 Arc::new(GreenNode {
27511 kind: SyntaxKind::TerminalWhile,
27512 details: GreenNodeDetails::Node { children: children.into(), width },
27513 })
27514 .intern(db),
27515 )
27516 }
27517 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27518 let GreenNodeDetails::Node { children, .. } =
27519 &self.node.lookup_intern(db).green.lookup_intern(db).details
27520 else {
27521 unreachable!("Expected a node, not a token");
27522 };
27523 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
27524 }
27525}
27526impl TerminalWhile {
27527 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27528 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
27529 }
27530 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenWhile {
27531 TokenWhile::from_syntax_node(db, self.node.get_children(db)[1])
27532 }
27533 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27534 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
27535 }
27536}
27537#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27538pub struct TerminalWhilePtr(pub SyntaxStablePtrId);
27539impl TerminalWhilePtr {}
27540impl TypedStablePtr for TerminalWhilePtr {
27541 type SyntaxNode = TerminalWhile;
27542 fn untyped(&self) -> SyntaxStablePtrId {
27543 self.0
27544 }
27545 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
27546 TerminalWhile::from_syntax_node(db, self.0.lookup(db))
27547 }
27548}
27549impl From<TerminalWhilePtr> for SyntaxStablePtrId {
27550 fn from(ptr: TerminalWhilePtr) -> Self {
27551 ptr.untyped()
27552 }
27553}
27554#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27555pub struct TerminalWhileGreen(pub GreenId);
27556impl TypedSyntaxNode for TerminalWhile {
27557 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalWhile);
27558 type StablePtr = TerminalWhilePtr;
27559 type Green = TerminalWhileGreen;
27560 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27561 TerminalWhileGreen(
27562 Arc::new(GreenNode {
27563 kind: SyntaxKind::TerminalWhile,
27564 details: GreenNodeDetails::Node {
27565 children: [
27566 Trivia::missing(db).0,
27567 TokenWhile::missing(db).0,
27568 Trivia::missing(db).0,
27569 ]
27570 .into(),
27571 width: TextWidth::default(),
27572 },
27573 })
27574 .intern(db),
27575 )
27576 }
27577 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27578 let kind = node.kind(db);
27579 assert_eq!(
27580 kind,
27581 SyntaxKind::TerminalWhile,
27582 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27583 kind,
27584 SyntaxKind::TerminalWhile
27585 );
27586 Self { node }
27587 }
27588 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27589 let kind = node.kind(db);
27590 if kind == SyntaxKind::TerminalWhile {
27591 Some(Self::from_syntax_node(db, node))
27592 } else {
27593 None
27594 }
27595 }
27596 fn as_syntax_node(&self) -> SyntaxNode {
27597 self.node
27598 }
27599 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27600 TerminalWhilePtr(self.node.stable_ptr(db))
27601 }
27602}
27603#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27604pub struct TokenFor {
27605 node: SyntaxNode,
27606}
27607impl Token for TokenFor {
27608 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27609 TokenForGreen(
27610 Arc::new(GreenNode {
27611 kind: SyntaxKind::TokenFor,
27612 details: GreenNodeDetails::Token(text),
27613 })
27614 .intern(db),
27615 )
27616 }
27617 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27618 extract_matches!(
27619 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27620 GreenNodeDetails::Token
27621 )
27622 .clone()
27623 }
27624}
27625#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27626pub struct TokenForPtr(pub SyntaxStablePtrId);
27627impl TypedStablePtr for TokenForPtr {
27628 type SyntaxNode = TokenFor;
27629 fn untyped(&self) -> SyntaxStablePtrId {
27630 self.0
27631 }
27632 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFor {
27633 TokenFor::from_syntax_node(db, self.0.lookup(db))
27634 }
27635}
27636impl From<TokenForPtr> for SyntaxStablePtrId {
27637 fn from(ptr: TokenForPtr) -> Self {
27638 ptr.untyped()
27639 }
27640}
27641#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27642pub struct TokenForGreen(pub GreenId);
27643impl TokenForGreen {
27644 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27645 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27646 }
27647}
27648impl TypedSyntaxNode for TokenFor {
27649 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFor);
27650 type StablePtr = TokenForPtr;
27651 type Green = TokenForGreen;
27652 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27653 TokenForGreen(
27654 Arc::new(GreenNode {
27655 kind: SyntaxKind::TokenMissing,
27656 details: GreenNodeDetails::Token("".into()),
27657 })
27658 .intern(db),
27659 )
27660 }
27661 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27662 match node.lookup_intern(db).green.lookup_intern(db).details {
27663 GreenNodeDetails::Token(_) => Self { node },
27664 GreenNodeDetails::Node { .. } => {
27665 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFor)
27666 }
27667 }
27668 }
27669 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27670 match node.lookup_intern(db).green.lookup_intern(db).details {
27671 GreenNodeDetails::Token(_) => Some(Self { node }),
27672 GreenNodeDetails::Node { .. } => None,
27673 }
27674 }
27675 fn as_syntax_node(&self) -> SyntaxNode {
27676 self.node
27677 }
27678 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27679 TokenForPtr(self.node.stable_ptr(db))
27680 }
27681}
27682#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27683pub struct TerminalFor {
27684 node: SyntaxNode,
27685}
27686impl Terminal for TerminalFor {
27687 const KIND: SyntaxKind = SyntaxKind::TerminalFor;
27688 type TokenType = TokenFor;
27689 fn new_green(
27690 db: &dyn SyntaxGroup,
27691 leading_trivia: TriviaGreen,
27692 token: <<TerminalFor as Terminal>::TokenType as TypedSyntaxNode>::Green,
27693 trailing_trivia: TriviaGreen,
27694 ) -> Self::Green {
27695 let children = [leading_trivia.0, token.0, trailing_trivia.0];
27696 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
27697 TerminalForGreen(
27698 Arc::new(GreenNode {
27699 kind: SyntaxKind::TerminalFor,
27700 details: GreenNodeDetails::Node { children: children.into(), width },
27701 })
27702 .intern(db),
27703 )
27704 }
27705 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27706 let GreenNodeDetails::Node { children, .. } =
27707 &self.node.lookup_intern(db).green.lookup_intern(db).details
27708 else {
27709 unreachable!("Expected a node, not a token");
27710 };
27711 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
27712 }
27713}
27714impl TerminalFor {
27715 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27716 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
27717 }
27718 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFor {
27719 TokenFor::from_syntax_node(db, self.node.get_children(db)[1])
27720 }
27721 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27722 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
27723 }
27724}
27725#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27726pub struct TerminalForPtr(pub SyntaxStablePtrId);
27727impl TerminalForPtr {}
27728impl TypedStablePtr for TerminalForPtr {
27729 type SyntaxNode = TerminalFor;
27730 fn untyped(&self) -> SyntaxStablePtrId {
27731 self.0
27732 }
27733 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFor {
27734 TerminalFor::from_syntax_node(db, self.0.lookup(db))
27735 }
27736}
27737impl From<TerminalForPtr> for SyntaxStablePtrId {
27738 fn from(ptr: TerminalForPtr) -> Self {
27739 ptr.untyped()
27740 }
27741}
27742#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27743pub struct TerminalForGreen(pub GreenId);
27744impl TypedSyntaxNode for TerminalFor {
27745 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFor);
27746 type StablePtr = TerminalForPtr;
27747 type Green = TerminalForGreen;
27748 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27749 TerminalForGreen(
27750 Arc::new(GreenNode {
27751 kind: SyntaxKind::TerminalFor,
27752 details: GreenNodeDetails::Node {
27753 children: [
27754 Trivia::missing(db).0,
27755 TokenFor::missing(db).0,
27756 Trivia::missing(db).0,
27757 ]
27758 .into(),
27759 width: TextWidth::default(),
27760 },
27761 })
27762 .intern(db),
27763 )
27764 }
27765 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27766 let kind = node.kind(db);
27767 assert_eq!(
27768 kind,
27769 SyntaxKind::TerminalFor,
27770 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27771 kind,
27772 SyntaxKind::TerminalFor
27773 );
27774 Self { node }
27775 }
27776 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27777 let kind = node.kind(db);
27778 if kind == SyntaxKind::TerminalFor { Some(Self::from_syntax_node(db, node)) } else { None }
27779 }
27780 fn as_syntax_node(&self) -> SyntaxNode {
27781 self.node
27782 }
27783 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27784 TerminalForPtr(self.node.stable_ptr(db))
27785 }
27786}
27787#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27788pub struct TokenLoop {
27789 node: SyntaxNode,
27790}
27791impl Token for TokenLoop {
27792 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27793 TokenLoopGreen(
27794 Arc::new(GreenNode {
27795 kind: SyntaxKind::TokenLoop,
27796 details: GreenNodeDetails::Token(text),
27797 })
27798 .intern(db),
27799 )
27800 }
27801 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27802 extract_matches!(
27803 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27804 GreenNodeDetails::Token
27805 )
27806 .clone()
27807 }
27808}
27809#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27810pub struct TokenLoopPtr(pub SyntaxStablePtrId);
27811impl TypedStablePtr for TokenLoopPtr {
27812 type SyntaxNode = TokenLoop;
27813 fn untyped(&self) -> SyntaxStablePtrId {
27814 self.0
27815 }
27816 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLoop {
27817 TokenLoop::from_syntax_node(db, self.0.lookup(db))
27818 }
27819}
27820impl From<TokenLoopPtr> for SyntaxStablePtrId {
27821 fn from(ptr: TokenLoopPtr) -> Self {
27822 ptr.untyped()
27823 }
27824}
27825#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27826pub struct TokenLoopGreen(pub GreenId);
27827impl TokenLoopGreen {
27828 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27829 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27830 }
27831}
27832impl TypedSyntaxNode for TokenLoop {
27833 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLoop);
27834 type StablePtr = TokenLoopPtr;
27835 type Green = TokenLoopGreen;
27836 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27837 TokenLoopGreen(
27838 Arc::new(GreenNode {
27839 kind: SyntaxKind::TokenMissing,
27840 details: GreenNodeDetails::Token("".into()),
27841 })
27842 .intern(db),
27843 )
27844 }
27845 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27846 match node.lookup_intern(db).green.lookup_intern(db).details {
27847 GreenNodeDetails::Token(_) => Self { node },
27848 GreenNodeDetails::Node { .. } => {
27849 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLoop)
27850 }
27851 }
27852 }
27853 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27854 match node.lookup_intern(db).green.lookup_intern(db).details {
27855 GreenNodeDetails::Token(_) => Some(Self { node }),
27856 GreenNodeDetails::Node { .. } => None,
27857 }
27858 }
27859 fn as_syntax_node(&self) -> SyntaxNode {
27860 self.node
27861 }
27862 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27863 TokenLoopPtr(self.node.stable_ptr(db))
27864 }
27865}
27866#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27867pub struct TerminalLoop {
27868 node: SyntaxNode,
27869}
27870impl Terminal for TerminalLoop {
27871 const KIND: SyntaxKind = SyntaxKind::TerminalLoop;
27872 type TokenType = TokenLoop;
27873 fn new_green(
27874 db: &dyn SyntaxGroup,
27875 leading_trivia: TriviaGreen,
27876 token: <<TerminalLoop as Terminal>::TokenType as TypedSyntaxNode>::Green,
27877 trailing_trivia: TriviaGreen,
27878 ) -> Self::Green {
27879 let children = [leading_trivia.0, token.0, trailing_trivia.0];
27880 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
27881 TerminalLoopGreen(
27882 Arc::new(GreenNode {
27883 kind: SyntaxKind::TerminalLoop,
27884 details: GreenNodeDetails::Node { children: children.into(), width },
27885 })
27886 .intern(db),
27887 )
27888 }
27889 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27890 let GreenNodeDetails::Node { children, .. } =
27891 &self.node.lookup_intern(db).green.lookup_intern(db).details
27892 else {
27893 unreachable!("Expected a node, not a token");
27894 };
27895 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
27896 }
27897}
27898impl TerminalLoop {
27899 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27900 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
27901 }
27902 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLoop {
27903 TokenLoop::from_syntax_node(db, self.node.get_children(db)[1])
27904 }
27905 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27906 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
27907 }
27908}
27909#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27910pub struct TerminalLoopPtr(pub SyntaxStablePtrId);
27911impl TerminalLoopPtr {}
27912impl TypedStablePtr for TerminalLoopPtr {
27913 type SyntaxNode = TerminalLoop;
27914 fn untyped(&self) -> SyntaxStablePtrId {
27915 self.0
27916 }
27917 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
27918 TerminalLoop::from_syntax_node(db, self.0.lookup(db))
27919 }
27920}
27921impl From<TerminalLoopPtr> for SyntaxStablePtrId {
27922 fn from(ptr: TerminalLoopPtr) -> Self {
27923 ptr.untyped()
27924 }
27925}
27926#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27927pub struct TerminalLoopGreen(pub GreenId);
27928impl TypedSyntaxNode for TerminalLoop {
27929 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLoop);
27930 type StablePtr = TerminalLoopPtr;
27931 type Green = TerminalLoopGreen;
27932 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27933 TerminalLoopGreen(
27934 Arc::new(GreenNode {
27935 kind: SyntaxKind::TerminalLoop,
27936 details: GreenNodeDetails::Node {
27937 children: [
27938 Trivia::missing(db).0,
27939 TokenLoop::missing(db).0,
27940 Trivia::missing(db).0,
27941 ]
27942 .into(),
27943 width: TextWidth::default(),
27944 },
27945 })
27946 .intern(db),
27947 )
27948 }
27949 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27950 let kind = node.kind(db);
27951 assert_eq!(
27952 kind,
27953 SyntaxKind::TerminalLoop,
27954 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27955 kind,
27956 SyntaxKind::TerminalLoop
27957 );
27958 Self { node }
27959 }
27960 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27961 let kind = node.kind(db);
27962 if kind == SyntaxKind::TerminalLoop { Some(Self::from_syntax_node(db, node)) } else { None }
27963 }
27964 fn as_syntax_node(&self) -> SyntaxNode {
27965 self.node
27966 }
27967 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
27968 TerminalLoopPtr(self.node.stable_ptr(db))
27969 }
27970}
27971#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27972pub struct TokenImpl {
27973 node: SyntaxNode,
27974}
27975impl Token for TokenImpl {
27976 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27977 TokenImplGreen(
27978 Arc::new(GreenNode {
27979 kind: SyntaxKind::TokenImpl,
27980 details: GreenNodeDetails::Token(text),
27981 })
27982 .intern(db),
27983 )
27984 }
27985 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27986 extract_matches!(
27987 &self.node.lookup_intern(db).green.lookup_intern(db).details,
27988 GreenNodeDetails::Token
27989 )
27990 .clone()
27991 }
27992}
27993#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27994pub struct TokenImplPtr(pub SyntaxStablePtrId);
27995impl TypedStablePtr for TokenImplPtr {
27996 type SyntaxNode = TokenImpl;
27997 fn untyped(&self) -> SyntaxStablePtrId {
27998 self.0
27999 }
28000 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImpl {
28001 TokenImpl::from_syntax_node(db, self.0.lookup(db))
28002 }
28003}
28004impl From<TokenImplPtr> for SyntaxStablePtrId {
28005 fn from(ptr: TokenImplPtr) -> Self {
28006 ptr.untyped()
28007 }
28008}
28009#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28010pub struct TokenImplGreen(pub GreenId);
28011impl TokenImplGreen {
28012 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28013 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28014 }
28015}
28016impl TypedSyntaxNode for TokenImpl {
28017 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImpl);
28018 type StablePtr = TokenImplPtr;
28019 type Green = TokenImplGreen;
28020 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28021 TokenImplGreen(
28022 Arc::new(GreenNode {
28023 kind: SyntaxKind::TokenMissing,
28024 details: GreenNodeDetails::Token("".into()),
28025 })
28026 .intern(db),
28027 )
28028 }
28029 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28030 match node.lookup_intern(db).green.lookup_intern(db).details {
28031 GreenNodeDetails::Token(_) => Self { node },
28032 GreenNodeDetails::Node { .. } => {
28033 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImpl)
28034 }
28035 }
28036 }
28037 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28038 match node.lookup_intern(db).green.lookup_intern(db).details {
28039 GreenNodeDetails::Token(_) => Some(Self { node }),
28040 GreenNodeDetails::Node { .. } => None,
28041 }
28042 }
28043 fn as_syntax_node(&self) -> SyntaxNode {
28044 self.node
28045 }
28046 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28047 TokenImplPtr(self.node.stable_ptr(db))
28048 }
28049}
28050#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28051pub struct TerminalImpl {
28052 node: SyntaxNode,
28053}
28054impl Terminal for TerminalImpl {
28055 const KIND: SyntaxKind = SyntaxKind::TerminalImpl;
28056 type TokenType = TokenImpl;
28057 fn new_green(
28058 db: &dyn SyntaxGroup,
28059 leading_trivia: TriviaGreen,
28060 token: <<TerminalImpl as Terminal>::TokenType as TypedSyntaxNode>::Green,
28061 trailing_trivia: TriviaGreen,
28062 ) -> Self::Green {
28063 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28064 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28065 TerminalImplGreen(
28066 Arc::new(GreenNode {
28067 kind: SyntaxKind::TerminalImpl,
28068 details: GreenNodeDetails::Node { children: children.into(), width },
28069 })
28070 .intern(db),
28071 )
28072 }
28073 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28074 let GreenNodeDetails::Node { children, .. } =
28075 &self.node.lookup_intern(db).green.lookup_intern(db).details
28076 else {
28077 unreachable!("Expected a node, not a token");
28078 };
28079 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
28080 }
28081}
28082impl TerminalImpl {
28083 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28084 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
28085 }
28086 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImpl {
28087 TokenImpl::from_syntax_node(db, self.node.get_children(db)[1])
28088 }
28089 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28090 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
28091 }
28092}
28093#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28094pub struct TerminalImplPtr(pub SyntaxStablePtrId);
28095impl TerminalImplPtr {}
28096impl TypedStablePtr for TerminalImplPtr {
28097 type SyntaxNode = TerminalImpl;
28098 fn untyped(&self) -> SyntaxStablePtrId {
28099 self.0
28100 }
28101 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
28102 TerminalImpl::from_syntax_node(db, self.0.lookup(db))
28103 }
28104}
28105impl From<TerminalImplPtr> for SyntaxStablePtrId {
28106 fn from(ptr: TerminalImplPtr) -> Self {
28107 ptr.untyped()
28108 }
28109}
28110#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28111pub struct TerminalImplGreen(pub GreenId);
28112impl TypedSyntaxNode for TerminalImpl {
28113 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImpl);
28114 type StablePtr = TerminalImplPtr;
28115 type Green = TerminalImplGreen;
28116 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28117 TerminalImplGreen(
28118 Arc::new(GreenNode {
28119 kind: SyntaxKind::TerminalImpl,
28120 details: GreenNodeDetails::Node {
28121 children: [
28122 Trivia::missing(db).0,
28123 TokenImpl::missing(db).0,
28124 Trivia::missing(db).0,
28125 ]
28126 .into(),
28127 width: TextWidth::default(),
28128 },
28129 })
28130 .intern(db),
28131 )
28132 }
28133 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28134 let kind = node.kind(db);
28135 assert_eq!(
28136 kind,
28137 SyntaxKind::TerminalImpl,
28138 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28139 kind,
28140 SyntaxKind::TerminalImpl
28141 );
28142 Self { node }
28143 }
28144 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28145 let kind = node.kind(db);
28146 if kind == SyntaxKind::TerminalImpl { Some(Self::from_syntax_node(db, node)) } else { None }
28147 }
28148 fn as_syntax_node(&self) -> SyntaxNode {
28149 self.node
28150 }
28151 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28152 TerminalImplPtr(self.node.stable_ptr(db))
28153 }
28154}
28155#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28156pub struct TokenImplicits {
28157 node: SyntaxNode,
28158}
28159impl Token for TokenImplicits {
28160 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28161 TokenImplicitsGreen(
28162 Arc::new(GreenNode {
28163 kind: SyntaxKind::TokenImplicits,
28164 details: GreenNodeDetails::Token(text),
28165 })
28166 .intern(db),
28167 )
28168 }
28169 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28170 extract_matches!(
28171 &self.node.lookup_intern(db).green.lookup_intern(db).details,
28172 GreenNodeDetails::Token
28173 )
28174 .clone()
28175 }
28176}
28177#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28178pub struct TokenImplicitsPtr(pub SyntaxStablePtrId);
28179impl TypedStablePtr for TokenImplicitsPtr {
28180 type SyntaxNode = TokenImplicits;
28181 fn untyped(&self) -> SyntaxStablePtrId {
28182 self.0
28183 }
28184 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
28185 TokenImplicits::from_syntax_node(db, self.0.lookup(db))
28186 }
28187}
28188impl From<TokenImplicitsPtr> for SyntaxStablePtrId {
28189 fn from(ptr: TokenImplicitsPtr) -> Self {
28190 ptr.untyped()
28191 }
28192}
28193#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28194pub struct TokenImplicitsGreen(pub GreenId);
28195impl TokenImplicitsGreen {
28196 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28197 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28198 }
28199}
28200impl TypedSyntaxNode for TokenImplicits {
28201 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImplicits);
28202 type StablePtr = TokenImplicitsPtr;
28203 type Green = TokenImplicitsGreen;
28204 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28205 TokenImplicitsGreen(
28206 Arc::new(GreenNode {
28207 kind: SyntaxKind::TokenMissing,
28208 details: GreenNodeDetails::Token("".into()),
28209 })
28210 .intern(db),
28211 )
28212 }
28213 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28214 match node.lookup_intern(db).green.lookup_intern(db).details {
28215 GreenNodeDetails::Token(_) => Self { node },
28216 GreenNodeDetails::Node { .. } => {
28217 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImplicits)
28218 }
28219 }
28220 }
28221 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28222 match node.lookup_intern(db).green.lookup_intern(db).details {
28223 GreenNodeDetails::Token(_) => Some(Self { node }),
28224 GreenNodeDetails::Node { .. } => None,
28225 }
28226 }
28227 fn as_syntax_node(&self) -> SyntaxNode {
28228 self.node
28229 }
28230 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28231 TokenImplicitsPtr(self.node.stable_ptr(db))
28232 }
28233}
28234#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28235pub struct TerminalImplicits {
28236 node: SyntaxNode,
28237}
28238impl Terminal for TerminalImplicits {
28239 const KIND: SyntaxKind = SyntaxKind::TerminalImplicits;
28240 type TokenType = TokenImplicits;
28241 fn new_green(
28242 db: &dyn SyntaxGroup,
28243 leading_trivia: TriviaGreen,
28244 token: <<TerminalImplicits as Terminal>::TokenType as TypedSyntaxNode>::Green,
28245 trailing_trivia: TriviaGreen,
28246 ) -> Self::Green {
28247 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28248 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28249 TerminalImplicitsGreen(
28250 Arc::new(GreenNode {
28251 kind: SyntaxKind::TerminalImplicits,
28252 details: GreenNodeDetails::Node { children: children.into(), width },
28253 })
28254 .intern(db),
28255 )
28256 }
28257 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28258 let GreenNodeDetails::Node { children, .. } =
28259 &self.node.lookup_intern(db).green.lookup_intern(db).details
28260 else {
28261 unreachable!("Expected a node, not a token");
28262 };
28263 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
28264 }
28265}
28266impl TerminalImplicits {
28267 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28268 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
28269 }
28270 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
28271 TokenImplicits::from_syntax_node(db, self.node.get_children(db)[1])
28272 }
28273 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28274 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
28275 }
28276}
28277#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28278pub struct TerminalImplicitsPtr(pub SyntaxStablePtrId);
28279impl TerminalImplicitsPtr {}
28280impl TypedStablePtr for TerminalImplicitsPtr {
28281 type SyntaxNode = TerminalImplicits;
28282 fn untyped(&self) -> SyntaxStablePtrId {
28283 self.0
28284 }
28285 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
28286 TerminalImplicits::from_syntax_node(db, self.0.lookup(db))
28287 }
28288}
28289impl From<TerminalImplicitsPtr> for SyntaxStablePtrId {
28290 fn from(ptr: TerminalImplicitsPtr) -> Self {
28291 ptr.untyped()
28292 }
28293}
28294#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28295pub struct TerminalImplicitsGreen(pub GreenId);
28296impl TypedSyntaxNode for TerminalImplicits {
28297 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImplicits);
28298 type StablePtr = TerminalImplicitsPtr;
28299 type Green = TerminalImplicitsGreen;
28300 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28301 TerminalImplicitsGreen(
28302 Arc::new(GreenNode {
28303 kind: SyntaxKind::TerminalImplicits,
28304 details: GreenNodeDetails::Node {
28305 children: [
28306 Trivia::missing(db).0,
28307 TokenImplicits::missing(db).0,
28308 Trivia::missing(db).0,
28309 ]
28310 .into(),
28311 width: TextWidth::default(),
28312 },
28313 })
28314 .intern(db),
28315 )
28316 }
28317 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28318 let kind = node.kind(db);
28319 assert_eq!(
28320 kind,
28321 SyntaxKind::TerminalImplicits,
28322 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28323 kind,
28324 SyntaxKind::TerminalImplicits
28325 );
28326 Self { node }
28327 }
28328 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28329 let kind = node.kind(db);
28330 if kind == SyntaxKind::TerminalImplicits {
28331 Some(Self::from_syntax_node(db, node))
28332 } else {
28333 None
28334 }
28335 }
28336 fn as_syntax_node(&self) -> SyntaxNode {
28337 self.node
28338 }
28339 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28340 TerminalImplicitsPtr(self.node.stable_ptr(db))
28341 }
28342}
28343#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28344pub struct TokenLet {
28345 node: SyntaxNode,
28346}
28347impl Token for TokenLet {
28348 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28349 TokenLetGreen(
28350 Arc::new(GreenNode {
28351 kind: SyntaxKind::TokenLet,
28352 details: GreenNodeDetails::Token(text),
28353 })
28354 .intern(db),
28355 )
28356 }
28357 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28358 extract_matches!(
28359 &self.node.lookup_intern(db).green.lookup_intern(db).details,
28360 GreenNodeDetails::Token
28361 )
28362 .clone()
28363 }
28364}
28365#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28366pub struct TokenLetPtr(pub SyntaxStablePtrId);
28367impl TypedStablePtr for TokenLetPtr {
28368 type SyntaxNode = TokenLet;
28369 fn untyped(&self) -> SyntaxStablePtrId {
28370 self.0
28371 }
28372 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLet {
28373 TokenLet::from_syntax_node(db, self.0.lookup(db))
28374 }
28375}
28376impl From<TokenLetPtr> for SyntaxStablePtrId {
28377 fn from(ptr: TokenLetPtr) -> Self {
28378 ptr.untyped()
28379 }
28380}
28381#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28382pub struct TokenLetGreen(pub GreenId);
28383impl TokenLetGreen {
28384 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28385 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28386 }
28387}
28388impl TypedSyntaxNode for TokenLet {
28389 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLet);
28390 type StablePtr = TokenLetPtr;
28391 type Green = TokenLetGreen;
28392 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28393 TokenLetGreen(
28394 Arc::new(GreenNode {
28395 kind: SyntaxKind::TokenMissing,
28396 details: GreenNodeDetails::Token("".into()),
28397 })
28398 .intern(db),
28399 )
28400 }
28401 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28402 match node.lookup_intern(db).green.lookup_intern(db).details {
28403 GreenNodeDetails::Token(_) => Self { node },
28404 GreenNodeDetails::Node { .. } => {
28405 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLet)
28406 }
28407 }
28408 }
28409 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28410 match node.lookup_intern(db).green.lookup_intern(db).details {
28411 GreenNodeDetails::Token(_) => Some(Self { node }),
28412 GreenNodeDetails::Node { .. } => None,
28413 }
28414 }
28415 fn as_syntax_node(&self) -> SyntaxNode {
28416 self.node
28417 }
28418 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28419 TokenLetPtr(self.node.stable_ptr(db))
28420 }
28421}
28422#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28423pub struct TerminalLet {
28424 node: SyntaxNode,
28425}
28426impl Terminal for TerminalLet {
28427 const KIND: SyntaxKind = SyntaxKind::TerminalLet;
28428 type TokenType = TokenLet;
28429 fn new_green(
28430 db: &dyn SyntaxGroup,
28431 leading_trivia: TriviaGreen,
28432 token: <<TerminalLet as Terminal>::TokenType as TypedSyntaxNode>::Green,
28433 trailing_trivia: TriviaGreen,
28434 ) -> Self::Green {
28435 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28436 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28437 TerminalLetGreen(
28438 Arc::new(GreenNode {
28439 kind: SyntaxKind::TerminalLet,
28440 details: GreenNodeDetails::Node { children: children.into(), width },
28441 })
28442 .intern(db),
28443 )
28444 }
28445 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28446 let GreenNodeDetails::Node { children, .. } =
28447 &self.node.lookup_intern(db).green.lookup_intern(db).details
28448 else {
28449 unreachable!("Expected a node, not a token");
28450 };
28451 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
28452 }
28453}
28454impl TerminalLet {
28455 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28456 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
28457 }
28458 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLet {
28459 TokenLet::from_syntax_node(db, self.node.get_children(db)[1])
28460 }
28461 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28462 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
28463 }
28464}
28465#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28466pub struct TerminalLetPtr(pub SyntaxStablePtrId);
28467impl TerminalLetPtr {}
28468impl TypedStablePtr for TerminalLetPtr {
28469 type SyntaxNode = TerminalLet;
28470 fn untyped(&self) -> SyntaxStablePtrId {
28471 self.0
28472 }
28473 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLet {
28474 TerminalLet::from_syntax_node(db, self.0.lookup(db))
28475 }
28476}
28477impl From<TerminalLetPtr> for SyntaxStablePtrId {
28478 fn from(ptr: TerminalLetPtr) -> Self {
28479 ptr.untyped()
28480 }
28481}
28482#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28483pub struct TerminalLetGreen(pub GreenId);
28484impl TypedSyntaxNode for TerminalLet {
28485 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLet);
28486 type StablePtr = TerminalLetPtr;
28487 type Green = TerminalLetGreen;
28488 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28489 TerminalLetGreen(
28490 Arc::new(GreenNode {
28491 kind: SyntaxKind::TerminalLet,
28492 details: GreenNodeDetails::Node {
28493 children: [
28494 Trivia::missing(db).0,
28495 TokenLet::missing(db).0,
28496 Trivia::missing(db).0,
28497 ]
28498 .into(),
28499 width: TextWidth::default(),
28500 },
28501 })
28502 .intern(db),
28503 )
28504 }
28505 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28506 let kind = node.kind(db);
28507 assert_eq!(
28508 kind,
28509 SyntaxKind::TerminalLet,
28510 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28511 kind,
28512 SyntaxKind::TerminalLet
28513 );
28514 Self { node }
28515 }
28516 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28517 let kind = node.kind(db);
28518 if kind == SyntaxKind::TerminalLet { Some(Self::from_syntax_node(db, node)) } else { None }
28519 }
28520 fn as_syntax_node(&self) -> SyntaxNode {
28521 self.node
28522 }
28523 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28524 TerminalLetPtr(self.node.stable_ptr(db))
28525 }
28526}
28527#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28528pub struct TokenMacro {
28529 node: SyntaxNode,
28530}
28531impl Token for TokenMacro {
28532 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28533 TokenMacroGreen(
28534 Arc::new(GreenNode {
28535 kind: SyntaxKind::TokenMacro,
28536 details: GreenNodeDetails::Token(text),
28537 })
28538 .intern(db),
28539 )
28540 }
28541 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28542 extract_matches!(
28543 &self.node.lookup_intern(db).green.lookup_intern(db).details,
28544 GreenNodeDetails::Token
28545 )
28546 .clone()
28547 }
28548}
28549#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28550pub struct TokenMacroPtr(pub SyntaxStablePtrId);
28551impl TypedStablePtr for TokenMacroPtr {
28552 type SyntaxNode = TokenMacro;
28553 fn untyped(&self) -> SyntaxStablePtrId {
28554 self.0
28555 }
28556 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMacro {
28557 TokenMacro::from_syntax_node(db, self.0.lookup(db))
28558 }
28559}
28560impl From<TokenMacroPtr> for SyntaxStablePtrId {
28561 fn from(ptr: TokenMacroPtr) -> Self {
28562 ptr.untyped()
28563 }
28564}
28565#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28566pub struct TokenMacroGreen(pub GreenId);
28567impl TokenMacroGreen {
28568 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28569 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28570 }
28571}
28572impl TypedSyntaxNode for TokenMacro {
28573 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMacro);
28574 type StablePtr = TokenMacroPtr;
28575 type Green = TokenMacroGreen;
28576 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28577 TokenMacroGreen(
28578 Arc::new(GreenNode {
28579 kind: SyntaxKind::TokenMissing,
28580 details: GreenNodeDetails::Token("".into()),
28581 })
28582 .intern(db),
28583 )
28584 }
28585 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28586 match node.lookup_intern(db).green.lookup_intern(db).details {
28587 GreenNodeDetails::Token(_) => Self { node },
28588 GreenNodeDetails::Node { .. } => {
28589 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMacro)
28590 }
28591 }
28592 }
28593 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28594 match node.lookup_intern(db).green.lookup_intern(db).details {
28595 GreenNodeDetails::Token(_) => Some(Self { node }),
28596 GreenNodeDetails::Node { .. } => None,
28597 }
28598 }
28599 fn as_syntax_node(&self) -> SyntaxNode {
28600 self.node
28601 }
28602 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28603 TokenMacroPtr(self.node.stable_ptr(db))
28604 }
28605}
28606#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28607pub struct TerminalMacro {
28608 node: SyntaxNode,
28609}
28610impl Terminal for TerminalMacro {
28611 const KIND: SyntaxKind = SyntaxKind::TerminalMacro;
28612 type TokenType = TokenMacro;
28613 fn new_green(
28614 db: &dyn SyntaxGroup,
28615 leading_trivia: TriviaGreen,
28616 token: <<TerminalMacro as Terminal>::TokenType as TypedSyntaxNode>::Green,
28617 trailing_trivia: TriviaGreen,
28618 ) -> Self::Green {
28619 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28620 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28621 TerminalMacroGreen(
28622 Arc::new(GreenNode {
28623 kind: SyntaxKind::TerminalMacro,
28624 details: GreenNodeDetails::Node { children: children.into(), width },
28625 })
28626 .intern(db),
28627 )
28628 }
28629 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28630 let GreenNodeDetails::Node { children, .. } =
28631 &self.node.lookup_intern(db).green.lookup_intern(db).details
28632 else {
28633 unreachable!("Expected a node, not a token");
28634 };
28635 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
28636 }
28637}
28638impl TerminalMacro {
28639 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28640 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
28641 }
28642 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMacro {
28643 TokenMacro::from_syntax_node(db, self.node.get_children(db)[1])
28644 }
28645 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28646 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
28647 }
28648}
28649#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28650pub struct TerminalMacroPtr(pub SyntaxStablePtrId);
28651impl TerminalMacroPtr {}
28652impl TypedStablePtr for TerminalMacroPtr {
28653 type SyntaxNode = TerminalMacro;
28654 fn untyped(&self) -> SyntaxStablePtrId {
28655 self.0
28656 }
28657 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMacro {
28658 TerminalMacro::from_syntax_node(db, self.0.lookup(db))
28659 }
28660}
28661impl From<TerminalMacroPtr> for SyntaxStablePtrId {
28662 fn from(ptr: TerminalMacroPtr) -> Self {
28663 ptr.untyped()
28664 }
28665}
28666#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28667pub struct TerminalMacroGreen(pub GreenId);
28668impl TypedSyntaxNode for TerminalMacro {
28669 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMacro);
28670 type StablePtr = TerminalMacroPtr;
28671 type Green = TerminalMacroGreen;
28672 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28673 TerminalMacroGreen(
28674 Arc::new(GreenNode {
28675 kind: SyntaxKind::TerminalMacro,
28676 details: GreenNodeDetails::Node {
28677 children: [
28678 Trivia::missing(db).0,
28679 TokenMacro::missing(db).0,
28680 Trivia::missing(db).0,
28681 ]
28682 .into(),
28683 width: TextWidth::default(),
28684 },
28685 })
28686 .intern(db),
28687 )
28688 }
28689 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28690 let kind = node.kind(db);
28691 assert_eq!(
28692 kind,
28693 SyntaxKind::TerminalMacro,
28694 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28695 kind,
28696 SyntaxKind::TerminalMacro
28697 );
28698 Self { node }
28699 }
28700 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28701 let kind = node.kind(db);
28702 if kind == SyntaxKind::TerminalMacro {
28703 Some(Self::from_syntax_node(db, node))
28704 } else {
28705 None
28706 }
28707 }
28708 fn as_syntax_node(&self) -> SyntaxNode {
28709 self.node
28710 }
28711 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28712 TerminalMacroPtr(self.node.stable_ptr(db))
28713 }
28714}
28715#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28716pub struct TokenMatch {
28717 node: SyntaxNode,
28718}
28719impl Token for TokenMatch {
28720 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28721 TokenMatchGreen(
28722 Arc::new(GreenNode {
28723 kind: SyntaxKind::TokenMatch,
28724 details: GreenNodeDetails::Token(text),
28725 })
28726 .intern(db),
28727 )
28728 }
28729 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28730 extract_matches!(
28731 &self.node.lookup_intern(db).green.lookup_intern(db).details,
28732 GreenNodeDetails::Token
28733 )
28734 .clone()
28735 }
28736}
28737#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28738pub struct TokenMatchPtr(pub SyntaxStablePtrId);
28739impl TypedStablePtr for TokenMatchPtr {
28740 type SyntaxNode = TokenMatch;
28741 fn untyped(&self) -> SyntaxStablePtrId {
28742 self.0
28743 }
28744 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatch {
28745 TokenMatch::from_syntax_node(db, self.0.lookup(db))
28746 }
28747}
28748impl From<TokenMatchPtr> for SyntaxStablePtrId {
28749 fn from(ptr: TokenMatchPtr) -> Self {
28750 ptr.untyped()
28751 }
28752}
28753#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28754pub struct TokenMatchGreen(pub GreenId);
28755impl TokenMatchGreen {
28756 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28757 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28758 }
28759}
28760impl TypedSyntaxNode for TokenMatch {
28761 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatch);
28762 type StablePtr = TokenMatchPtr;
28763 type Green = TokenMatchGreen;
28764 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28765 TokenMatchGreen(
28766 Arc::new(GreenNode {
28767 kind: SyntaxKind::TokenMissing,
28768 details: GreenNodeDetails::Token("".into()),
28769 })
28770 .intern(db),
28771 )
28772 }
28773 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28774 match node.lookup_intern(db).green.lookup_intern(db).details {
28775 GreenNodeDetails::Token(_) => Self { node },
28776 GreenNodeDetails::Node { .. } => {
28777 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatch)
28778 }
28779 }
28780 }
28781 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28782 match node.lookup_intern(db).green.lookup_intern(db).details {
28783 GreenNodeDetails::Token(_) => Some(Self { node }),
28784 GreenNodeDetails::Node { .. } => None,
28785 }
28786 }
28787 fn as_syntax_node(&self) -> SyntaxNode {
28788 self.node
28789 }
28790 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28791 TokenMatchPtr(self.node.stable_ptr(db))
28792 }
28793}
28794#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28795pub struct TerminalMatch {
28796 node: SyntaxNode,
28797}
28798impl Terminal for TerminalMatch {
28799 const KIND: SyntaxKind = SyntaxKind::TerminalMatch;
28800 type TokenType = TokenMatch;
28801 fn new_green(
28802 db: &dyn SyntaxGroup,
28803 leading_trivia: TriviaGreen,
28804 token: <<TerminalMatch as Terminal>::TokenType as TypedSyntaxNode>::Green,
28805 trailing_trivia: TriviaGreen,
28806 ) -> Self::Green {
28807 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28808 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28809 TerminalMatchGreen(
28810 Arc::new(GreenNode {
28811 kind: SyntaxKind::TerminalMatch,
28812 details: GreenNodeDetails::Node { children: children.into(), width },
28813 })
28814 .intern(db),
28815 )
28816 }
28817 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28818 let GreenNodeDetails::Node { children, .. } =
28819 &self.node.lookup_intern(db).green.lookup_intern(db).details
28820 else {
28821 unreachable!("Expected a node, not a token");
28822 };
28823 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
28824 }
28825}
28826impl TerminalMatch {
28827 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28828 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
28829 }
28830 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatch {
28831 TokenMatch::from_syntax_node(db, self.node.get_children(db)[1])
28832 }
28833 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28834 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
28835 }
28836}
28837#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28838pub struct TerminalMatchPtr(pub SyntaxStablePtrId);
28839impl TerminalMatchPtr {}
28840impl TypedStablePtr for TerminalMatchPtr {
28841 type SyntaxNode = TerminalMatch;
28842 fn untyped(&self) -> SyntaxStablePtrId {
28843 self.0
28844 }
28845 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
28846 TerminalMatch::from_syntax_node(db, self.0.lookup(db))
28847 }
28848}
28849impl From<TerminalMatchPtr> for SyntaxStablePtrId {
28850 fn from(ptr: TerminalMatchPtr) -> Self {
28851 ptr.untyped()
28852 }
28853}
28854#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28855pub struct TerminalMatchGreen(pub GreenId);
28856impl TypedSyntaxNode for TerminalMatch {
28857 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatch);
28858 type StablePtr = TerminalMatchPtr;
28859 type Green = TerminalMatchGreen;
28860 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28861 TerminalMatchGreen(
28862 Arc::new(GreenNode {
28863 kind: SyntaxKind::TerminalMatch,
28864 details: GreenNodeDetails::Node {
28865 children: [
28866 Trivia::missing(db).0,
28867 TokenMatch::missing(db).0,
28868 Trivia::missing(db).0,
28869 ]
28870 .into(),
28871 width: TextWidth::default(),
28872 },
28873 })
28874 .intern(db),
28875 )
28876 }
28877 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28878 let kind = node.kind(db);
28879 assert_eq!(
28880 kind,
28881 SyntaxKind::TerminalMatch,
28882 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28883 kind,
28884 SyntaxKind::TerminalMatch
28885 );
28886 Self { node }
28887 }
28888 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28889 let kind = node.kind(db);
28890 if kind == SyntaxKind::TerminalMatch {
28891 Some(Self::from_syntax_node(db, node))
28892 } else {
28893 None
28894 }
28895 }
28896 fn as_syntax_node(&self) -> SyntaxNode {
28897 self.node
28898 }
28899 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28900 TerminalMatchPtr(self.node.stable_ptr(db))
28901 }
28902}
28903#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28904pub struct TokenModule {
28905 node: SyntaxNode,
28906}
28907impl Token for TokenModule {
28908 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28909 TokenModuleGreen(
28910 Arc::new(GreenNode {
28911 kind: SyntaxKind::TokenModule,
28912 details: GreenNodeDetails::Token(text),
28913 })
28914 .intern(db),
28915 )
28916 }
28917 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28918 extract_matches!(
28919 &self.node.lookup_intern(db).green.lookup_intern(db).details,
28920 GreenNodeDetails::Token
28921 )
28922 .clone()
28923 }
28924}
28925#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28926pub struct TokenModulePtr(pub SyntaxStablePtrId);
28927impl TypedStablePtr for TokenModulePtr {
28928 type SyntaxNode = TokenModule;
28929 fn untyped(&self) -> SyntaxStablePtrId {
28930 self.0
28931 }
28932 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModule {
28933 TokenModule::from_syntax_node(db, self.0.lookup(db))
28934 }
28935}
28936impl From<TokenModulePtr> for SyntaxStablePtrId {
28937 fn from(ptr: TokenModulePtr) -> Self {
28938 ptr.untyped()
28939 }
28940}
28941#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28942pub struct TokenModuleGreen(pub GreenId);
28943impl TokenModuleGreen {
28944 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28945 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28946 }
28947}
28948impl TypedSyntaxNode for TokenModule {
28949 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModule);
28950 type StablePtr = TokenModulePtr;
28951 type Green = TokenModuleGreen;
28952 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28953 TokenModuleGreen(
28954 Arc::new(GreenNode {
28955 kind: SyntaxKind::TokenMissing,
28956 details: GreenNodeDetails::Token("".into()),
28957 })
28958 .intern(db),
28959 )
28960 }
28961 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28962 match node.lookup_intern(db).green.lookup_intern(db).details {
28963 GreenNodeDetails::Token(_) => Self { node },
28964 GreenNodeDetails::Node { .. } => {
28965 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModule)
28966 }
28967 }
28968 }
28969 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28970 match node.lookup_intern(db).green.lookup_intern(db).details {
28971 GreenNodeDetails::Token(_) => Some(Self { node }),
28972 GreenNodeDetails::Node { .. } => None,
28973 }
28974 }
28975 fn as_syntax_node(&self) -> SyntaxNode {
28976 self.node
28977 }
28978 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
28979 TokenModulePtr(self.node.stable_ptr(db))
28980 }
28981}
28982#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28983pub struct TerminalModule {
28984 node: SyntaxNode,
28985}
28986impl Terminal for TerminalModule {
28987 const KIND: SyntaxKind = SyntaxKind::TerminalModule;
28988 type TokenType = TokenModule;
28989 fn new_green(
28990 db: &dyn SyntaxGroup,
28991 leading_trivia: TriviaGreen,
28992 token: <<TerminalModule as Terminal>::TokenType as TypedSyntaxNode>::Green,
28993 trailing_trivia: TriviaGreen,
28994 ) -> Self::Green {
28995 let children = [leading_trivia.0, token.0, trailing_trivia.0];
28996 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
28997 TerminalModuleGreen(
28998 Arc::new(GreenNode {
28999 kind: SyntaxKind::TerminalModule,
29000 details: GreenNodeDetails::Node { children: children.into(), width },
29001 })
29002 .intern(db),
29003 )
29004 }
29005 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29006 let GreenNodeDetails::Node { children, .. } =
29007 &self.node.lookup_intern(db).green.lookup_intern(db).details
29008 else {
29009 unreachable!("Expected a node, not a token");
29010 };
29011 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29012 }
29013}
29014impl TerminalModule {
29015 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29016 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29017 }
29018 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModule {
29019 TokenModule::from_syntax_node(db, self.node.get_children(db)[1])
29020 }
29021 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29022 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29023 }
29024}
29025#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29026pub struct TerminalModulePtr(pub SyntaxStablePtrId);
29027impl TerminalModulePtr {}
29028impl TypedStablePtr for TerminalModulePtr {
29029 type SyntaxNode = TerminalModule;
29030 fn untyped(&self) -> SyntaxStablePtrId {
29031 self.0
29032 }
29033 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModule {
29034 TerminalModule::from_syntax_node(db, self.0.lookup(db))
29035 }
29036}
29037impl From<TerminalModulePtr> for SyntaxStablePtrId {
29038 fn from(ptr: TerminalModulePtr) -> Self {
29039 ptr.untyped()
29040 }
29041}
29042#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29043pub struct TerminalModuleGreen(pub GreenId);
29044impl TypedSyntaxNode for TerminalModule {
29045 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModule);
29046 type StablePtr = TerminalModulePtr;
29047 type Green = TerminalModuleGreen;
29048 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29049 TerminalModuleGreen(
29050 Arc::new(GreenNode {
29051 kind: SyntaxKind::TerminalModule,
29052 details: GreenNodeDetails::Node {
29053 children: [
29054 Trivia::missing(db).0,
29055 TokenModule::missing(db).0,
29056 Trivia::missing(db).0,
29057 ]
29058 .into(),
29059 width: TextWidth::default(),
29060 },
29061 })
29062 .intern(db),
29063 )
29064 }
29065 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29066 let kind = node.kind(db);
29067 assert_eq!(
29068 kind,
29069 SyntaxKind::TerminalModule,
29070 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29071 kind,
29072 SyntaxKind::TerminalModule
29073 );
29074 Self { node }
29075 }
29076 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29077 let kind = node.kind(db);
29078 if kind == SyntaxKind::TerminalModule {
29079 Some(Self::from_syntax_node(db, node))
29080 } else {
29081 None
29082 }
29083 }
29084 fn as_syntax_node(&self) -> SyntaxNode {
29085 self.node
29086 }
29087 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29088 TerminalModulePtr(self.node.stable_ptr(db))
29089 }
29090}
29091#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29092pub struct TokenMut {
29093 node: SyntaxNode,
29094}
29095impl Token for TokenMut {
29096 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29097 TokenMutGreen(
29098 Arc::new(GreenNode {
29099 kind: SyntaxKind::TokenMut,
29100 details: GreenNodeDetails::Token(text),
29101 })
29102 .intern(db),
29103 )
29104 }
29105 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29106 extract_matches!(
29107 &self.node.lookup_intern(db).green.lookup_intern(db).details,
29108 GreenNodeDetails::Token
29109 )
29110 .clone()
29111 }
29112}
29113#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29114pub struct TokenMutPtr(pub SyntaxStablePtrId);
29115impl TypedStablePtr for TokenMutPtr {
29116 type SyntaxNode = TokenMut;
29117 fn untyped(&self) -> SyntaxStablePtrId {
29118 self.0
29119 }
29120 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMut {
29121 TokenMut::from_syntax_node(db, self.0.lookup(db))
29122 }
29123}
29124impl From<TokenMutPtr> for SyntaxStablePtrId {
29125 fn from(ptr: TokenMutPtr) -> Self {
29126 ptr.untyped()
29127 }
29128}
29129#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29130pub struct TokenMutGreen(pub GreenId);
29131impl TokenMutGreen {
29132 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29133 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29134 }
29135}
29136impl TypedSyntaxNode for TokenMut {
29137 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMut);
29138 type StablePtr = TokenMutPtr;
29139 type Green = TokenMutGreen;
29140 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29141 TokenMutGreen(
29142 Arc::new(GreenNode {
29143 kind: SyntaxKind::TokenMissing,
29144 details: GreenNodeDetails::Token("".into()),
29145 })
29146 .intern(db),
29147 )
29148 }
29149 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29150 match node.lookup_intern(db).green.lookup_intern(db).details {
29151 GreenNodeDetails::Token(_) => Self { node },
29152 GreenNodeDetails::Node { .. } => {
29153 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMut)
29154 }
29155 }
29156 }
29157 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29158 match node.lookup_intern(db).green.lookup_intern(db).details {
29159 GreenNodeDetails::Token(_) => Some(Self { node }),
29160 GreenNodeDetails::Node { .. } => None,
29161 }
29162 }
29163 fn as_syntax_node(&self) -> SyntaxNode {
29164 self.node
29165 }
29166 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29167 TokenMutPtr(self.node.stable_ptr(db))
29168 }
29169}
29170#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29171pub struct TerminalMut {
29172 node: SyntaxNode,
29173}
29174impl Terminal for TerminalMut {
29175 const KIND: SyntaxKind = SyntaxKind::TerminalMut;
29176 type TokenType = TokenMut;
29177 fn new_green(
29178 db: &dyn SyntaxGroup,
29179 leading_trivia: TriviaGreen,
29180 token: <<TerminalMut as Terminal>::TokenType as TypedSyntaxNode>::Green,
29181 trailing_trivia: TriviaGreen,
29182 ) -> Self::Green {
29183 let children = [leading_trivia.0, token.0, trailing_trivia.0];
29184 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
29185 TerminalMutGreen(
29186 Arc::new(GreenNode {
29187 kind: SyntaxKind::TerminalMut,
29188 details: GreenNodeDetails::Node { children: children.into(), width },
29189 })
29190 .intern(db),
29191 )
29192 }
29193 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29194 let GreenNodeDetails::Node { children, .. } =
29195 &self.node.lookup_intern(db).green.lookup_intern(db).details
29196 else {
29197 unreachable!("Expected a node, not a token");
29198 };
29199 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29200 }
29201}
29202impl TerminalMut {
29203 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29204 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29205 }
29206 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMut {
29207 TokenMut::from_syntax_node(db, self.node.get_children(db)[1])
29208 }
29209 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29210 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29211 }
29212}
29213#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29214pub struct TerminalMutPtr(pub SyntaxStablePtrId);
29215impl TerminalMutPtr {}
29216impl TypedStablePtr for TerminalMutPtr {
29217 type SyntaxNode = TerminalMut;
29218 fn untyped(&self) -> SyntaxStablePtrId {
29219 self.0
29220 }
29221 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMut {
29222 TerminalMut::from_syntax_node(db, self.0.lookup(db))
29223 }
29224}
29225impl From<TerminalMutPtr> for SyntaxStablePtrId {
29226 fn from(ptr: TerminalMutPtr) -> Self {
29227 ptr.untyped()
29228 }
29229}
29230#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29231pub struct TerminalMutGreen(pub GreenId);
29232impl TypedSyntaxNode for TerminalMut {
29233 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMut);
29234 type StablePtr = TerminalMutPtr;
29235 type Green = TerminalMutGreen;
29236 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29237 TerminalMutGreen(
29238 Arc::new(GreenNode {
29239 kind: SyntaxKind::TerminalMut,
29240 details: GreenNodeDetails::Node {
29241 children: [
29242 Trivia::missing(db).0,
29243 TokenMut::missing(db).0,
29244 Trivia::missing(db).0,
29245 ]
29246 .into(),
29247 width: TextWidth::default(),
29248 },
29249 })
29250 .intern(db),
29251 )
29252 }
29253 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29254 let kind = node.kind(db);
29255 assert_eq!(
29256 kind,
29257 SyntaxKind::TerminalMut,
29258 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29259 kind,
29260 SyntaxKind::TerminalMut
29261 );
29262 Self { node }
29263 }
29264 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29265 let kind = node.kind(db);
29266 if kind == SyntaxKind::TerminalMut { Some(Self::from_syntax_node(db, node)) } else { None }
29267 }
29268 fn as_syntax_node(&self) -> SyntaxNode {
29269 self.node
29270 }
29271 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29272 TerminalMutPtr(self.node.stable_ptr(db))
29273 }
29274}
29275#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29276pub struct TokenNoPanic {
29277 node: SyntaxNode,
29278}
29279impl Token for TokenNoPanic {
29280 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29281 TokenNoPanicGreen(
29282 Arc::new(GreenNode {
29283 kind: SyntaxKind::TokenNoPanic,
29284 details: GreenNodeDetails::Token(text),
29285 })
29286 .intern(db),
29287 )
29288 }
29289 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29290 extract_matches!(
29291 &self.node.lookup_intern(db).green.lookup_intern(db).details,
29292 GreenNodeDetails::Token
29293 )
29294 .clone()
29295 }
29296}
29297#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29298pub struct TokenNoPanicPtr(pub SyntaxStablePtrId);
29299impl TypedStablePtr for TokenNoPanicPtr {
29300 type SyntaxNode = TokenNoPanic;
29301 fn untyped(&self) -> SyntaxStablePtrId {
29302 self.0
29303 }
29304 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
29305 TokenNoPanic::from_syntax_node(db, self.0.lookup(db))
29306 }
29307}
29308impl From<TokenNoPanicPtr> for SyntaxStablePtrId {
29309 fn from(ptr: TokenNoPanicPtr) -> Self {
29310 ptr.untyped()
29311 }
29312}
29313#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29314pub struct TokenNoPanicGreen(pub GreenId);
29315impl TokenNoPanicGreen {
29316 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29317 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29318 }
29319}
29320impl TypedSyntaxNode for TokenNoPanic {
29321 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNoPanic);
29322 type StablePtr = TokenNoPanicPtr;
29323 type Green = TokenNoPanicGreen;
29324 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29325 TokenNoPanicGreen(
29326 Arc::new(GreenNode {
29327 kind: SyntaxKind::TokenMissing,
29328 details: GreenNodeDetails::Token("".into()),
29329 })
29330 .intern(db),
29331 )
29332 }
29333 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29334 match node.lookup_intern(db).green.lookup_intern(db).details {
29335 GreenNodeDetails::Token(_) => Self { node },
29336 GreenNodeDetails::Node { .. } => {
29337 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNoPanic)
29338 }
29339 }
29340 }
29341 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29342 match node.lookup_intern(db).green.lookup_intern(db).details {
29343 GreenNodeDetails::Token(_) => Some(Self { node }),
29344 GreenNodeDetails::Node { .. } => None,
29345 }
29346 }
29347 fn as_syntax_node(&self) -> SyntaxNode {
29348 self.node
29349 }
29350 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29351 TokenNoPanicPtr(self.node.stable_ptr(db))
29352 }
29353}
29354#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29355pub struct TerminalNoPanic {
29356 node: SyntaxNode,
29357}
29358impl Terminal for TerminalNoPanic {
29359 const KIND: SyntaxKind = SyntaxKind::TerminalNoPanic;
29360 type TokenType = TokenNoPanic;
29361 fn new_green(
29362 db: &dyn SyntaxGroup,
29363 leading_trivia: TriviaGreen,
29364 token: <<TerminalNoPanic as Terminal>::TokenType as TypedSyntaxNode>::Green,
29365 trailing_trivia: TriviaGreen,
29366 ) -> Self::Green {
29367 let children = [leading_trivia.0, token.0, trailing_trivia.0];
29368 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
29369 TerminalNoPanicGreen(
29370 Arc::new(GreenNode {
29371 kind: SyntaxKind::TerminalNoPanic,
29372 details: GreenNodeDetails::Node { children: children.into(), width },
29373 })
29374 .intern(db),
29375 )
29376 }
29377 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29378 let GreenNodeDetails::Node { children, .. } =
29379 &self.node.lookup_intern(db).green.lookup_intern(db).details
29380 else {
29381 unreachable!("Expected a node, not a token");
29382 };
29383 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29384 }
29385}
29386impl TerminalNoPanic {
29387 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29388 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29389 }
29390 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
29391 TokenNoPanic::from_syntax_node(db, self.node.get_children(db)[1])
29392 }
29393 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29394 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29395 }
29396}
29397#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29398pub struct TerminalNoPanicPtr(pub SyntaxStablePtrId);
29399impl TerminalNoPanicPtr {}
29400impl TypedStablePtr for TerminalNoPanicPtr {
29401 type SyntaxNode = TerminalNoPanic;
29402 fn untyped(&self) -> SyntaxStablePtrId {
29403 self.0
29404 }
29405 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNoPanic {
29406 TerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
29407 }
29408}
29409impl From<TerminalNoPanicPtr> for SyntaxStablePtrId {
29410 fn from(ptr: TerminalNoPanicPtr) -> Self {
29411 ptr.untyped()
29412 }
29413}
29414#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29415pub struct TerminalNoPanicGreen(pub GreenId);
29416impl TypedSyntaxNode for TerminalNoPanic {
29417 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNoPanic);
29418 type StablePtr = TerminalNoPanicPtr;
29419 type Green = TerminalNoPanicGreen;
29420 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29421 TerminalNoPanicGreen(
29422 Arc::new(GreenNode {
29423 kind: SyntaxKind::TerminalNoPanic,
29424 details: GreenNodeDetails::Node {
29425 children: [
29426 Trivia::missing(db).0,
29427 TokenNoPanic::missing(db).0,
29428 Trivia::missing(db).0,
29429 ]
29430 .into(),
29431 width: TextWidth::default(),
29432 },
29433 })
29434 .intern(db),
29435 )
29436 }
29437 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29438 let kind = node.kind(db);
29439 assert_eq!(
29440 kind,
29441 SyntaxKind::TerminalNoPanic,
29442 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29443 kind,
29444 SyntaxKind::TerminalNoPanic
29445 );
29446 Self { node }
29447 }
29448 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29449 let kind = node.kind(db);
29450 if kind == SyntaxKind::TerminalNoPanic {
29451 Some(Self::from_syntax_node(db, node))
29452 } else {
29453 None
29454 }
29455 }
29456 fn as_syntax_node(&self) -> SyntaxNode {
29457 self.node
29458 }
29459 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29460 TerminalNoPanicPtr(self.node.stable_ptr(db))
29461 }
29462}
29463#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29464pub struct TokenOf {
29465 node: SyntaxNode,
29466}
29467impl Token for TokenOf {
29468 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29469 TokenOfGreen(
29470 Arc::new(GreenNode {
29471 kind: SyntaxKind::TokenOf,
29472 details: GreenNodeDetails::Token(text),
29473 })
29474 .intern(db),
29475 )
29476 }
29477 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29478 extract_matches!(
29479 &self.node.lookup_intern(db).green.lookup_intern(db).details,
29480 GreenNodeDetails::Token
29481 )
29482 .clone()
29483 }
29484}
29485#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29486pub struct TokenOfPtr(pub SyntaxStablePtrId);
29487impl TypedStablePtr for TokenOfPtr {
29488 type SyntaxNode = TokenOf;
29489 fn untyped(&self) -> SyntaxStablePtrId {
29490 self.0
29491 }
29492 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOf {
29493 TokenOf::from_syntax_node(db, self.0.lookup(db))
29494 }
29495}
29496impl From<TokenOfPtr> for SyntaxStablePtrId {
29497 fn from(ptr: TokenOfPtr) -> Self {
29498 ptr.untyped()
29499 }
29500}
29501#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29502pub struct TokenOfGreen(pub GreenId);
29503impl TokenOfGreen {
29504 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29505 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29506 }
29507}
29508impl TypedSyntaxNode for TokenOf {
29509 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOf);
29510 type StablePtr = TokenOfPtr;
29511 type Green = TokenOfGreen;
29512 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29513 TokenOfGreen(
29514 Arc::new(GreenNode {
29515 kind: SyntaxKind::TokenMissing,
29516 details: GreenNodeDetails::Token("".into()),
29517 })
29518 .intern(db),
29519 )
29520 }
29521 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29522 match node.lookup_intern(db).green.lookup_intern(db).details {
29523 GreenNodeDetails::Token(_) => Self { node },
29524 GreenNodeDetails::Node { .. } => {
29525 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOf)
29526 }
29527 }
29528 }
29529 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29530 match node.lookup_intern(db).green.lookup_intern(db).details {
29531 GreenNodeDetails::Token(_) => Some(Self { node }),
29532 GreenNodeDetails::Node { .. } => None,
29533 }
29534 }
29535 fn as_syntax_node(&self) -> SyntaxNode {
29536 self.node
29537 }
29538 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29539 TokenOfPtr(self.node.stable_ptr(db))
29540 }
29541}
29542#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29543pub struct TerminalOf {
29544 node: SyntaxNode,
29545}
29546impl Terminal for TerminalOf {
29547 const KIND: SyntaxKind = SyntaxKind::TerminalOf;
29548 type TokenType = TokenOf;
29549 fn new_green(
29550 db: &dyn SyntaxGroup,
29551 leading_trivia: TriviaGreen,
29552 token: <<TerminalOf as Terminal>::TokenType as TypedSyntaxNode>::Green,
29553 trailing_trivia: TriviaGreen,
29554 ) -> Self::Green {
29555 let children = [leading_trivia.0, token.0, trailing_trivia.0];
29556 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
29557 TerminalOfGreen(
29558 Arc::new(GreenNode {
29559 kind: SyntaxKind::TerminalOf,
29560 details: GreenNodeDetails::Node { children: children.into(), width },
29561 })
29562 .intern(db),
29563 )
29564 }
29565 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29566 let GreenNodeDetails::Node { children, .. } =
29567 &self.node.lookup_intern(db).green.lookup_intern(db).details
29568 else {
29569 unreachable!("Expected a node, not a token");
29570 };
29571 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29572 }
29573}
29574impl TerminalOf {
29575 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29576 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29577 }
29578 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOf {
29579 TokenOf::from_syntax_node(db, self.node.get_children(db)[1])
29580 }
29581 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29582 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29583 }
29584}
29585#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29586pub struct TerminalOfPtr(pub SyntaxStablePtrId);
29587impl TerminalOfPtr {}
29588impl TypedStablePtr for TerminalOfPtr {
29589 type SyntaxNode = TerminalOf;
29590 fn untyped(&self) -> SyntaxStablePtrId {
29591 self.0
29592 }
29593 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOf {
29594 TerminalOf::from_syntax_node(db, self.0.lookup(db))
29595 }
29596}
29597impl From<TerminalOfPtr> for SyntaxStablePtrId {
29598 fn from(ptr: TerminalOfPtr) -> Self {
29599 ptr.untyped()
29600 }
29601}
29602#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29603pub struct TerminalOfGreen(pub GreenId);
29604impl TypedSyntaxNode for TerminalOf {
29605 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOf);
29606 type StablePtr = TerminalOfPtr;
29607 type Green = TerminalOfGreen;
29608 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29609 TerminalOfGreen(
29610 Arc::new(GreenNode {
29611 kind: SyntaxKind::TerminalOf,
29612 details: GreenNodeDetails::Node {
29613 children: [
29614 Trivia::missing(db).0,
29615 TokenOf::missing(db).0,
29616 Trivia::missing(db).0,
29617 ]
29618 .into(),
29619 width: TextWidth::default(),
29620 },
29621 })
29622 .intern(db),
29623 )
29624 }
29625 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29626 let kind = node.kind(db);
29627 assert_eq!(
29628 kind,
29629 SyntaxKind::TerminalOf,
29630 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29631 kind,
29632 SyntaxKind::TerminalOf
29633 );
29634 Self { node }
29635 }
29636 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29637 let kind = node.kind(db);
29638 if kind == SyntaxKind::TerminalOf { Some(Self::from_syntax_node(db, node)) } else { None }
29639 }
29640 fn as_syntax_node(&self) -> SyntaxNode {
29641 self.node
29642 }
29643 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29644 TerminalOfPtr(self.node.stable_ptr(db))
29645 }
29646}
29647#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29648pub struct TokenRef {
29649 node: SyntaxNode,
29650}
29651impl Token for TokenRef {
29652 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29653 TokenRefGreen(
29654 Arc::new(GreenNode {
29655 kind: SyntaxKind::TokenRef,
29656 details: GreenNodeDetails::Token(text),
29657 })
29658 .intern(db),
29659 )
29660 }
29661 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29662 extract_matches!(
29663 &self.node.lookup_intern(db).green.lookup_intern(db).details,
29664 GreenNodeDetails::Token
29665 )
29666 .clone()
29667 }
29668}
29669#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29670pub struct TokenRefPtr(pub SyntaxStablePtrId);
29671impl TypedStablePtr for TokenRefPtr {
29672 type SyntaxNode = TokenRef;
29673 fn untyped(&self) -> SyntaxStablePtrId {
29674 self.0
29675 }
29676 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRef {
29677 TokenRef::from_syntax_node(db, self.0.lookup(db))
29678 }
29679}
29680impl From<TokenRefPtr> for SyntaxStablePtrId {
29681 fn from(ptr: TokenRefPtr) -> Self {
29682 ptr.untyped()
29683 }
29684}
29685#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29686pub struct TokenRefGreen(pub GreenId);
29687impl TokenRefGreen {
29688 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29689 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29690 }
29691}
29692impl TypedSyntaxNode for TokenRef {
29693 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRef);
29694 type StablePtr = TokenRefPtr;
29695 type Green = TokenRefGreen;
29696 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29697 TokenRefGreen(
29698 Arc::new(GreenNode {
29699 kind: SyntaxKind::TokenMissing,
29700 details: GreenNodeDetails::Token("".into()),
29701 })
29702 .intern(db),
29703 )
29704 }
29705 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29706 match node.lookup_intern(db).green.lookup_intern(db).details {
29707 GreenNodeDetails::Token(_) => Self { node },
29708 GreenNodeDetails::Node { .. } => {
29709 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRef)
29710 }
29711 }
29712 }
29713 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29714 match node.lookup_intern(db).green.lookup_intern(db).details {
29715 GreenNodeDetails::Token(_) => Some(Self { node }),
29716 GreenNodeDetails::Node { .. } => None,
29717 }
29718 }
29719 fn as_syntax_node(&self) -> SyntaxNode {
29720 self.node
29721 }
29722 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29723 TokenRefPtr(self.node.stable_ptr(db))
29724 }
29725}
29726#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29727pub struct TerminalRef {
29728 node: SyntaxNode,
29729}
29730impl Terminal for TerminalRef {
29731 const KIND: SyntaxKind = SyntaxKind::TerminalRef;
29732 type TokenType = TokenRef;
29733 fn new_green(
29734 db: &dyn SyntaxGroup,
29735 leading_trivia: TriviaGreen,
29736 token: <<TerminalRef as Terminal>::TokenType as TypedSyntaxNode>::Green,
29737 trailing_trivia: TriviaGreen,
29738 ) -> Self::Green {
29739 let children = [leading_trivia.0, token.0, trailing_trivia.0];
29740 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
29741 TerminalRefGreen(
29742 Arc::new(GreenNode {
29743 kind: SyntaxKind::TerminalRef,
29744 details: GreenNodeDetails::Node { children: children.into(), width },
29745 })
29746 .intern(db),
29747 )
29748 }
29749 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29750 let GreenNodeDetails::Node { children, .. } =
29751 &self.node.lookup_intern(db).green.lookup_intern(db).details
29752 else {
29753 unreachable!("Expected a node, not a token");
29754 };
29755 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29756 }
29757}
29758impl TerminalRef {
29759 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29760 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29761 }
29762 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRef {
29763 TokenRef::from_syntax_node(db, self.node.get_children(db)[1])
29764 }
29765 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29766 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29767 }
29768}
29769#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29770pub struct TerminalRefPtr(pub SyntaxStablePtrId);
29771impl TerminalRefPtr {}
29772impl TypedStablePtr for TerminalRefPtr {
29773 type SyntaxNode = TerminalRef;
29774 fn untyped(&self) -> SyntaxStablePtrId {
29775 self.0
29776 }
29777 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRef {
29778 TerminalRef::from_syntax_node(db, self.0.lookup(db))
29779 }
29780}
29781impl From<TerminalRefPtr> for SyntaxStablePtrId {
29782 fn from(ptr: TerminalRefPtr) -> Self {
29783 ptr.untyped()
29784 }
29785}
29786#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29787pub struct TerminalRefGreen(pub GreenId);
29788impl TypedSyntaxNode for TerminalRef {
29789 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRef);
29790 type StablePtr = TerminalRefPtr;
29791 type Green = TerminalRefGreen;
29792 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29793 TerminalRefGreen(
29794 Arc::new(GreenNode {
29795 kind: SyntaxKind::TerminalRef,
29796 details: GreenNodeDetails::Node {
29797 children: [
29798 Trivia::missing(db).0,
29799 TokenRef::missing(db).0,
29800 Trivia::missing(db).0,
29801 ]
29802 .into(),
29803 width: TextWidth::default(),
29804 },
29805 })
29806 .intern(db),
29807 )
29808 }
29809 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29810 let kind = node.kind(db);
29811 assert_eq!(
29812 kind,
29813 SyntaxKind::TerminalRef,
29814 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29815 kind,
29816 SyntaxKind::TerminalRef
29817 );
29818 Self { node }
29819 }
29820 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29821 let kind = node.kind(db);
29822 if kind == SyntaxKind::TerminalRef { Some(Self::from_syntax_node(db, node)) } else { None }
29823 }
29824 fn as_syntax_node(&self) -> SyntaxNode {
29825 self.node
29826 }
29827 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29828 TerminalRefPtr(self.node.stable_ptr(db))
29829 }
29830}
29831#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29832pub struct TokenContinue {
29833 node: SyntaxNode,
29834}
29835impl Token for TokenContinue {
29836 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29837 TokenContinueGreen(
29838 Arc::new(GreenNode {
29839 kind: SyntaxKind::TokenContinue,
29840 details: GreenNodeDetails::Token(text),
29841 })
29842 .intern(db),
29843 )
29844 }
29845 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29846 extract_matches!(
29847 &self.node.lookup_intern(db).green.lookup_intern(db).details,
29848 GreenNodeDetails::Token
29849 )
29850 .clone()
29851 }
29852}
29853#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29854pub struct TokenContinuePtr(pub SyntaxStablePtrId);
29855impl TypedStablePtr for TokenContinuePtr {
29856 type SyntaxNode = TokenContinue;
29857 fn untyped(&self) -> SyntaxStablePtrId {
29858 self.0
29859 }
29860 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenContinue {
29861 TokenContinue::from_syntax_node(db, self.0.lookup(db))
29862 }
29863}
29864impl From<TokenContinuePtr> for SyntaxStablePtrId {
29865 fn from(ptr: TokenContinuePtr) -> Self {
29866 ptr.untyped()
29867 }
29868}
29869#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29870pub struct TokenContinueGreen(pub GreenId);
29871impl TokenContinueGreen {
29872 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29873 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29874 }
29875}
29876impl TypedSyntaxNode for TokenContinue {
29877 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenContinue);
29878 type StablePtr = TokenContinuePtr;
29879 type Green = TokenContinueGreen;
29880 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29881 TokenContinueGreen(
29882 Arc::new(GreenNode {
29883 kind: SyntaxKind::TokenMissing,
29884 details: GreenNodeDetails::Token("".into()),
29885 })
29886 .intern(db),
29887 )
29888 }
29889 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29890 match node.lookup_intern(db).green.lookup_intern(db).details {
29891 GreenNodeDetails::Token(_) => Self { node },
29892 GreenNodeDetails::Node { .. } => {
29893 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenContinue)
29894 }
29895 }
29896 }
29897 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29898 match node.lookup_intern(db).green.lookup_intern(db).details {
29899 GreenNodeDetails::Token(_) => Some(Self { node }),
29900 GreenNodeDetails::Node { .. } => None,
29901 }
29902 }
29903 fn as_syntax_node(&self) -> SyntaxNode {
29904 self.node
29905 }
29906 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
29907 TokenContinuePtr(self.node.stable_ptr(db))
29908 }
29909}
29910#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29911pub struct TerminalContinue {
29912 node: SyntaxNode,
29913}
29914impl Terminal for TerminalContinue {
29915 const KIND: SyntaxKind = SyntaxKind::TerminalContinue;
29916 type TokenType = TokenContinue;
29917 fn new_green(
29918 db: &dyn SyntaxGroup,
29919 leading_trivia: TriviaGreen,
29920 token: <<TerminalContinue as Terminal>::TokenType as TypedSyntaxNode>::Green,
29921 trailing_trivia: TriviaGreen,
29922 ) -> Self::Green {
29923 let children = [leading_trivia.0, token.0, trailing_trivia.0];
29924 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
29925 TerminalContinueGreen(
29926 Arc::new(GreenNode {
29927 kind: SyntaxKind::TerminalContinue,
29928 details: GreenNodeDetails::Node { children: children.into(), width },
29929 })
29930 .intern(db),
29931 )
29932 }
29933 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29934 let GreenNodeDetails::Node { children, .. } =
29935 &self.node.lookup_intern(db).green.lookup_intern(db).details
29936 else {
29937 unreachable!("Expected a node, not a token");
29938 };
29939 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
29940 }
29941}
29942impl TerminalContinue {
29943 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29944 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
29945 }
29946 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenContinue {
29947 TokenContinue::from_syntax_node(db, self.node.get_children(db)[1])
29948 }
29949 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29950 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
29951 }
29952}
29953#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29954pub struct TerminalContinuePtr(pub SyntaxStablePtrId);
29955impl TerminalContinuePtr {}
29956impl TypedStablePtr for TerminalContinuePtr {
29957 type SyntaxNode = TerminalContinue;
29958 fn untyped(&self) -> SyntaxStablePtrId {
29959 self.0
29960 }
29961 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
29962 TerminalContinue::from_syntax_node(db, self.0.lookup(db))
29963 }
29964}
29965impl From<TerminalContinuePtr> for SyntaxStablePtrId {
29966 fn from(ptr: TerminalContinuePtr) -> Self {
29967 ptr.untyped()
29968 }
29969}
29970#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29971pub struct TerminalContinueGreen(pub GreenId);
29972impl TypedSyntaxNode for TerminalContinue {
29973 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalContinue);
29974 type StablePtr = TerminalContinuePtr;
29975 type Green = TerminalContinueGreen;
29976 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29977 TerminalContinueGreen(
29978 Arc::new(GreenNode {
29979 kind: SyntaxKind::TerminalContinue,
29980 details: GreenNodeDetails::Node {
29981 children: [
29982 Trivia::missing(db).0,
29983 TokenContinue::missing(db).0,
29984 Trivia::missing(db).0,
29985 ]
29986 .into(),
29987 width: TextWidth::default(),
29988 },
29989 })
29990 .intern(db),
29991 )
29992 }
29993 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29994 let kind = node.kind(db);
29995 assert_eq!(
29996 kind,
29997 SyntaxKind::TerminalContinue,
29998 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29999 kind,
30000 SyntaxKind::TerminalContinue
30001 );
30002 Self { node }
30003 }
30004 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30005 let kind = node.kind(db);
30006 if kind == SyntaxKind::TerminalContinue {
30007 Some(Self::from_syntax_node(db, node))
30008 } else {
30009 None
30010 }
30011 }
30012 fn as_syntax_node(&self) -> SyntaxNode {
30013 self.node
30014 }
30015 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30016 TerminalContinuePtr(self.node.stable_ptr(db))
30017 }
30018}
30019#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30020pub struct TokenReturn {
30021 node: SyntaxNode,
30022}
30023impl Token for TokenReturn {
30024 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30025 TokenReturnGreen(
30026 Arc::new(GreenNode {
30027 kind: SyntaxKind::TokenReturn,
30028 details: GreenNodeDetails::Token(text),
30029 })
30030 .intern(db),
30031 )
30032 }
30033 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30034 extract_matches!(
30035 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30036 GreenNodeDetails::Token
30037 )
30038 .clone()
30039 }
30040}
30041#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30042pub struct TokenReturnPtr(pub SyntaxStablePtrId);
30043impl TypedStablePtr for TokenReturnPtr {
30044 type SyntaxNode = TokenReturn;
30045 fn untyped(&self) -> SyntaxStablePtrId {
30046 self.0
30047 }
30048 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenReturn {
30049 TokenReturn::from_syntax_node(db, self.0.lookup(db))
30050 }
30051}
30052impl From<TokenReturnPtr> for SyntaxStablePtrId {
30053 fn from(ptr: TokenReturnPtr) -> Self {
30054 ptr.untyped()
30055 }
30056}
30057#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30058pub struct TokenReturnGreen(pub GreenId);
30059impl TokenReturnGreen {
30060 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30061 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30062 }
30063}
30064impl TypedSyntaxNode for TokenReturn {
30065 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenReturn);
30066 type StablePtr = TokenReturnPtr;
30067 type Green = TokenReturnGreen;
30068 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30069 TokenReturnGreen(
30070 Arc::new(GreenNode {
30071 kind: SyntaxKind::TokenMissing,
30072 details: GreenNodeDetails::Token("".into()),
30073 })
30074 .intern(db),
30075 )
30076 }
30077 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30078 match node.lookup_intern(db).green.lookup_intern(db).details {
30079 GreenNodeDetails::Token(_) => Self { node },
30080 GreenNodeDetails::Node { .. } => {
30081 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenReturn)
30082 }
30083 }
30084 }
30085 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30086 match node.lookup_intern(db).green.lookup_intern(db).details {
30087 GreenNodeDetails::Token(_) => Some(Self { node }),
30088 GreenNodeDetails::Node { .. } => None,
30089 }
30090 }
30091 fn as_syntax_node(&self) -> SyntaxNode {
30092 self.node
30093 }
30094 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30095 TokenReturnPtr(self.node.stable_ptr(db))
30096 }
30097}
30098#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30099pub struct TerminalReturn {
30100 node: SyntaxNode,
30101}
30102impl Terminal for TerminalReturn {
30103 const KIND: SyntaxKind = SyntaxKind::TerminalReturn;
30104 type TokenType = TokenReturn;
30105 fn new_green(
30106 db: &dyn SyntaxGroup,
30107 leading_trivia: TriviaGreen,
30108 token: <<TerminalReturn as Terminal>::TokenType as TypedSyntaxNode>::Green,
30109 trailing_trivia: TriviaGreen,
30110 ) -> Self::Green {
30111 let children = [leading_trivia.0, token.0, trailing_trivia.0];
30112 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
30113 TerminalReturnGreen(
30114 Arc::new(GreenNode {
30115 kind: SyntaxKind::TerminalReturn,
30116 details: GreenNodeDetails::Node { children: children.into(), width },
30117 })
30118 .intern(db),
30119 )
30120 }
30121 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30122 let GreenNodeDetails::Node { children, .. } =
30123 &self.node.lookup_intern(db).green.lookup_intern(db).details
30124 else {
30125 unreachable!("Expected a node, not a token");
30126 };
30127 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
30128 }
30129}
30130impl TerminalReturn {
30131 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30132 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
30133 }
30134 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenReturn {
30135 TokenReturn::from_syntax_node(db, self.node.get_children(db)[1])
30136 }
30137 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30138 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
30139 }
30140}
30141#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30142pub struct TerminalReturnPtr(pub SyntaxStablePtrId);
30143impl TerminalReturnPtr {}
30144impl TypedStablePtr for TerminalReturnPtr {
30145 type SyntaxNode = TerminalReturn;
30146 fn untyped(&self) -> SyntaxStablePtrId {
30147 self.0
30148 }
30149 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
30150 TerminalReturn::from_syntax_node(db, self.0.lookup(db))
30151 }
30152}
30153impl From<TerminalReturnPtr> for SyntaxStablePtrId {
30154 fn from(ptr: TerminalReturnPtr) -> Self {
30155 ptr.untyped()
30156 }
30157}
30158#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30159pub struct TerminalReturnGreen(pub GreenId);
30160impl TypedSyntaxNode for TerminalReturn {
30161 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalReturn);
30162 type StablePtr = TerminalReturnPtr;
30163 type Green = TerminalReturnGreen;
30164 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30165 TerminalReturnGreen(
30166 Arc::new(GreenNode {
30167 kind: SyntaxKind::TerminalReturn,
30168 details: GreenNodeDetails::Node {
30169 children: [
30170 Trivia::missing(db).0,
30171 TokenReturn::missing(db).0,
30172 Trivia::missing(db).0,
30173 ]
30174 .into(),
30175 width: TextWidth::default(),
30176 },
30177 })
30178 .intern(db),
30179 )
30180 }
30181 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30182 let kind = node.kind(db);
30183 assert_eq!(
30184 kind,
30185 SyntaxKind::TerminalReturn,
30186 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30187 kind,
30188 SyntaxKind::TerminalReturn
30189 );
30190 Self { node }
30191 }
30192 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30193 let kind = node.kind(db);
30194 if kind == SyntaxKind::TerminalReturn {
30195 Some(Self::from_syntax_node(db, node))
30196 } else {
30197 None
30198 }
30199 }
30200 fn as_syntax_node(&self) -> SyntaxNode {
30201 self.node
30202 }
30203 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30204 TerminalReturnPtr(self.node.stable_ptr(db))
30205 }
30206}
30207#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30208pub struct TokenBreak {
30209 node: SyntaxNode,
30210}
30211impl Token for TokenBreak {
30212 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30213 TokenBreakGreen(
30214 Arc::new(GreenNode {
30215 kind: SyntaxKind::TokenBreak,
30216 details: GreenNodeDetails::Token(text),
30217 })
30218 .intern(db),
30219 )
30220 }
30221 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30222 extract_matches!(
30223 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30224 GreenNodeDetails::Token
30225 )
30226 .clone()
30227 }
30228}
30229#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30230pub struct TokenBreakPtr(pub SyntaxStablePtrId);
30231impl TypedStablePtr for TokenBreakPtr {
30232 type SyntaxNode = TokenBreak;
30233 fn untyped(&self) -> SyntaxStablePtrId {
30234 self.0
30235 }
30236 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBreak {
30237 TokenBreak::from_syntax_node(db, self.0.lookup(db))
30238 }
30239}
30240impl From<TokenBreakPtr> for SyntaxStablePtrId {
30241 fn from(ptr: TokenBreakPtr) -> Self {
30242 ptr.untyped()
30243 }
30244}
30245#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30246pub struct TokenBreakGreen(pub GreenId);
30247impl TokenBreakGreen {
30248 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30249 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30250 }
30251}
30252impl TypedSyntaxNode for TokenBreak {
30253 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBreak);
30254 type StablePtr = TokenBreakPtr;
30255 type Green = TokenBreakGreen;
30256 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30257 TokenBreakGreen(
30258 Arc::new(GreenNode {
30259 kind: SyntaxKind::TokenMissing,
30260 details: GreenNodeDetails::Token("".into()),
30261 })
30262 .intern(db),
30263 )
30264 }
30265 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30266 match node.lookup_intern(db).green.lookup_intern(db).details {
30267 GreenNodeDetails::Token(_) => Self { node },
30268 GreenNodeDetails::Node { .. } => {
30269 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBreak)
30270 }
30271 }
30272 }
30273 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30274 match node.lookup_intern(db).green.lookup_intern(db).details {
30275 GreenNodeDetails::Token(_) => Some(Self { node }),
30276 GreenNodeDetails::Node { .. } => None,
30277 }
30278 }
30279 fn as_syntax_node(&self) -> SyntaxNode {
30280 self.node
30281 }
30282 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30283 TokenBreakPtr(self.node.stable_ptr(db))
30284 }
30285}
30286#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30287pub struct TerminalBreak {
30288 node: SyntaxNode,
30289}
30290impl Terminal for TerminalBreak {
30291 const KIND: SyntaxKind = SyntaxKind::TerminalBreak;
30292 type TokenType = TokenBreak;
30293 fn new_green(
30294 db: &dyn SyntaxGroup,
30295 leading_trivia: TriviaGreen,
30296 token: <<TerminalBreak as Terminal>::TokenType as TypedSyntaxNode>::Green,
30297 trailing_trivia: TriviaGreen,
30298 ) -> Self::Green {
30299 let children = [leading_trivia.0, token.0, trailing_trivia.0];
30300 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
30301 TerminalBreakGreen(
30302 Arc::new(GreenNode {
30303 kind: SyntaxKind::TerminalBreak,
30304 details: GreenNodeDetails::Node { children: children.into(), width },
30305 })
30306 .intern(db),
30307 )
30308 }
30309 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30310 let GreenNodeDetails::Node { children, .. } =
30311 &self.node.lookup_intern(db).green.lookup_intern(db).details
30312 else {
30313 unreachable!("Expected a node, not a token");
30314 };
30315 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
30316 }
30317}
30318impl TerminalBreak {
30319 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30320 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
30321 }
30322 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBreak {
30323 TokenBreak::from_syntax_node(db, self.node.get_children(db)[1])
30324 }
30325 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30326 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
30327 }
30328}
30329#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30330pub struct TerminalBreakPtr(pub SyntaxStablePtrId);
30331impl TerminalBreakPtr {}
30332impl TypedStablePtr for TerminalBreakPtr {
30333 type SyntaxNode = TerminalBreak;
30334 fn untyped(&self) -> SyntaxStablePtrId {
30335 self.0
30336 }
30337 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
30338 TerminalBreak::from_syntax_node(db, self.0.lookup(db))
30339 }
30340}
30341impl From<TerminalBreakPtr> for SyntaxStablePtrId {
30342 fn from(ptr: TerminalBreakPtr) -> Self {
30343 ptr.untyped()
30344 }
30345}
30346#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30347pub struct TerminalBreakGreen(pub GreenId);
30348impl TypedSyntaxNode for TerminalBreak {
30349 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBreak);
30350 type StablePtr = TerminalBreakPtr;
30351 type Green = TerminalBreakGreen;
30352 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30353 TerminalBreakGreen(
30354 Arc::new(GreenNode {
30355 kind: SyntaxKind::TerminalBreak,
30356 details: GreenNodeDetails::Node {
30357 children: [
30358 Trivia::missing(db).0,
30359 TokenBreak::missing(db).0,
30360 Trivia::missing(db).0,
30361 ]
30362 .into(),
30363 width: TextWidth::default(),
30364 },
30365 })
30366 .intern(db),
30367 )
30368 }
30369 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30370 let kind = node.kind(db);
30371 assert_eq!(
30372 kind,
30373 SyntaxKind::TerminalBreak,
30374 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30375 kind,
30376 SyntaxKind::TerminalBreak
30377 );
30378 Self { node }
30379 }
30380 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30381 let kind = node.kind(db);
30382 if kind == SyntaxKind::TerminalBreak {
30383 Some(Self::from_syntax_node(db, node))
30384 } else {
30385 None
30386 }
30387 }
30388 fn as_syntax_node(&self) -> SyntaxNode {
30389 self.node
30390 }
30391 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30392 TerminalBreakPtr(self.node.stable_ptr(db))
30393 }
30394}
30395#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30396pub struct TokenStruct {
30397 node: SyntaxNode,
30398}
30399impl Token for TokenStruct {
30400 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30401 TokenStructGreen(
30402 Arc::new(GreenNode {
30403 kind: SyntaxKind::TokenStruct,
30404 details: GreenNodeDetails::Token(text),
30405 })
30406 .intern(db),
30407 )
30408 }
30409 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30410 extract_matches!(
30411 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30412 GreenNodeDetails::Token
30413 )
30414 .clone()
30415 }
30416}
30417#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30418pub struct TokenStructPtr(pub SyntaxStablePtrId);
30419impl TypedStablePtr for TokenStructPtr {
30420 type SyntaxNode = TokenStruct;
30421 fn untyped(&self) -> SyntaxStablePtrId {
30422 self.0
30423 }
30424 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenStruct {
30425 TokenStruct::from_syntax_node(db, self.0.lookup(db))
30426 }
30427}
30428impl From<TokenStructPtr> for SyntaxStablePtrId {
30429 fn from(ptr: TokenStructPtr) -> Self {
30430 ptr.untyped()
30431 }
30432}
30433#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30434pub struct TokenStructGreen(pub GreenId);
30435impl TokenStructGreen {
30436 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30437 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30438 }
30439}
30440impl TypedSyntaxNode for TokenStruct {
30441 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenStruct);
30442 type StablePtr = TokenStructPtr;
30443 type Green = TokenStructGreen;
30444 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30445 TokenStructGreen(
30446 Arc::new(GreenNode {
30447 kind: SyntaxKind::TokenMissing,
30448 details: GreenNodeDetails::Token("".into()),
30449 })
30450 .intern(db),
30451 )
30452 }
30453 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30454 match node.lookup_intern(db).green.lookup_intern(db).details {
30455 GreenNodeDetails::Token(_) => Self { node },
30456 GreenNodeDetails::Node { .. } => {
30457 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenStruct)
30458 }
30459 }
30460 }
30461 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30462 match node.lookup_intern(db).green.lookup_intern(db).details {
30463 GreenNodeDetails::Token(_) => Some(Self { node }),
30464 GreenNodeDetails::Node { .. } => None,
30465 }
30466 }
30467 fn as_syntax_node(&self) -> SyntaxNode {
30468 self.node
30469 }
30470 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30471 TokenStructPtr(self.node.stable_ptr(db))
30472 }
30473}
30474#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30475pub struct TerminalStruct {
30476 node: SyntaxNode,
30477}
30478impl Terminal for TerminalStruct {
30479 const KIND: SyntaxKind = SyntaxKind::TerminalStruct;
30480 type TokenType = TokenStruct;
30481 fn new_green(
30482 db: &dyn SyntaxGroup,
30483 leading_trivia: TriviaGreen,
30484 token: <<TerminalStruct as Terminal>::TokenType as TypedSyntaxNode>::Green,
30485 trailing_trivia: TriviaGreen,
30486 ) -> Self::Green {
30487 let children = [leading_trivia.0, token.0, trailing_trivia.0];
30488 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
30489 TerminalStructGreen(
30490 Arc::new(GreenNode {
30491 kind: SyntaxKind::TerminalStruct,
30492 details: GreenNodeDetails::Node { children: children.into(), width },
30493 })
30494 .intern(db),
30495 )
30496 }
30497 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30498 let GreenNodeDetails::Node { children, .. } =
30499 &self.node.lookup_intern(db).green.lookup_intern(db).details
30500 else {
30501 unreachable!("Expected a node, not a token");
30502 };
30503 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
30504 }
30505}
30506impl TerminalStruct {
30507 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30508 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
30509 }
30510 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenStruct {
30511 TokenStruct::from_syntax_node(db, self.node.get_children(db)[1])
30512 }
30513 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30514 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
30515 }
30516}
30517#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30518pub struct TerminalStructPtr(pub SyntaxStablePtrId);
30519impl TerminalStructPtr {}
30520impl TypedStablePtr for TerminalStructPtr {
30521 type SyntaxNode = TerminalStruct;
30522 fn untyped(&self) -> SyntaxStablePtrId {
30523 self.0
30524 }
30525 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
30526 TerminalStruct::from_syntax_node(db, self.0.lookup(db))
30527 }
30528}
30529impl From<TerminalStructPtr> for SyntaxStablePtrId {
30530 fn from(ptr: TerminalStructPtr) -> Self {
30531 ptr.untyped()
30532 }
30533}
30534#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30535pub struct TerminalStructGreen(pub GreenId);
30536impl TypedSyntaxNode for TerminalStruct {
30537 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalStruct);
30538 type StablePtr = TerminalStructPtr;
30539 type Green = TerminalStructGreen;
30540 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30541 TerminalStructGreen(
30542 Arc::new(GreenNode {
30543 kind: SyntaxKind::TerminalStruct,
30544 details: GreenNodeDetails::Node {
30545 children: [
30546 Trivia::missing(db).0,
30547 TokenStruct::missing(db).0,
30548 Trivia::missing(db).0,
30549 ]
30550 .into(),
30551 width: TextWidth::default(),
30552 },
30553 })
30554 .intern(db),
30555 )
30556 }
30557 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30558 let kind = node.kind(db);
30559 assert_eq!(
30560 kind,
30561 SyntaxKind::TerminalStruct,
30562 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30563 kind,
30564 SyntaxKind::TerminalStruct
30565 );
30566 Self { node }
30567 }
30568 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30569 let kind = node.kind(db);
30570 if kind == SyntaxKind::TerminalStruct {
30571 Some(Self::from_syntax_node(db, node))
30572 } else {
30573 None
30574 }
30575 }
30576 fn as_syntax_node(&self) -> SyntaxNode {
30577 self.node
30578 }
30579 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30580 TerminalStructPtr(self.node.stable_ptr(db))
30581 }
30582}
30583#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30584pub struct TokenTrait {
30585 node: SyntaxNode,
30586}
30587impl Token for TokenTrait {
30588 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30589 TokenTraitGreen(
30590 Arc::new(GreenNode {
30591 kind: SyntaxKind::TokenTrait,
30592 details: GreenNodeDetails::Token(text),
30593 })
30594 .intern(db),
30595 )
30596 }
30597 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30598 extract_matches!(
30599 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30600 GreenNodeDetails::Token
30601 )
30602 .clone()
30603 }
30604}
30605#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30606pub struct TokenTraitPtr(pub SyntaxStablePtrId);
30607impl TypedStablePtr for TokenTraitPtr {
30608 type SyntaxNode = TokenTrait;
30609 fn untyped(&self) -> SyntaxStablePtrId {
30610 self.0
30611 }
30612 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrait {
30613 TokenTrait::from_syntax_node(db, self.0.lookup(db))
30614 }
30615}
30616impl From<TokenTraitPtr> for SyntaxStablePtrId {
30617 fn from(ptr: TokenTraitPtr) -> Self {
30618 ptr.untyped()
30619 }
30620}
30621#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30622pub struct TokenTraitGreen(pub GreenId);
30623impl TokenTraitGreen {
30624 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30625 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30626 }
30627}
30628impl TypedSyntaxNode for TokenTrait {
30629 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrait);
30630 type StablePtr = TokenTraitPtr;
30631 type Green = TokenTraitGreen;
30632 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30633 TokenTraitGreen(
30634 Arc::new(GreenNode {
30635 kind: SyntaxKind::TokenMissing,
30636 details: GreenNodeDetails::Token("".into()),
30637 })
30638 .intern(db),
30639 )
30640 }
30641 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30642 match node.lookup_intern(db).green.lookup_intern(db).details {
30643 GreenNodeDetails::Token(_) => Self { node },
30644 GreenNodeDetails::Node { .. } => {
30645 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrait)
30646 }
30647 }
30648 }
30649 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30650 match node.lookup_intern(db).green.lookup_intern(db).details {
30651 GreenNodeDetails::Token(_) => Some(Self { node }),
30652 GreenNodeDetails::Node { .. } => None,
30653 }
30654 }
30655 fn as_syntax_node(&self) -> SyntaxNode {
30656 self.node
30657 }
30658 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30659 TokenTraitPtr(self.node.stable_ptr(db))
30660 }
30661}
30662#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30663pub struct TerminalTrait {
30664 node: SyntaxNode,
30665}
30666impl Terminal for TerminalTrait {
30667 const KIND: SyntaxKind = SyntaxKind::TerminalTrait;
30668 type TokenType = TokenTrait;
30669 fn new_green(
30670 db: &dyn SyntaxGroup,
30671 leading_trivia: TriviaGreen,
30672 token: <<TerminalTrait as Terminal>::TokenType as TypedSyntaxNode>::Green,
30673 trailing_trivia: TriviaGreen,
30674 ) -> Self::Green {
30675 let children = [leading_trivia.0, token.0, trailing_trivia.0];
30676 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
30677 TerminalTraitGreen(
30678 Arc::new(GreenNode {
30679 kind: SyntaxKind::TerminalTrait,
30680 details: GreenNodeDetails::Node { children: children.into(), width },
30681 })
30682 .intern(db),
30683 )
30684 }
30685 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30686 let GreenNodeDetails::Node { children, .. } =
30687 &self.node.lookup_intern(db).green.lookup_intern(db).details
30688 else {
30689 unreachable!("Expected a node, not a token");
30690 };
30691 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
30692 }
30693}
30694impl TerminalTrait {
30695 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30696 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
30697 }
30698 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrait {
30699 TokenTrait::from_syntax_node(db, self.node.get_children(db)[1])
30700 }
30701 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30702 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
30703 }
30704}
30705#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30706pub struct TerminalTraitPtr(pub SyntaxStablePtrId);
30707impl TerminalTraitPtr {}
30708impl TypedStablePtr for TerminalTraitPtr {
30709 type SyntaxNode = TerminalTrait;
30710 fn untyped(&self) -> SyntaxStablePtrId {
30711 self.0
30712 }
30713 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
30714 TerminalTrait::from_syntax_node(db, self.0.lookup(db))
30715 }
30716}
30717impl From<TerminalTraitPtr> for SyntaxStablePtrId {
30718 fn from(ptr: TerminalTraitPtr) -> Self {
30719 ptr.untyped()
30720 }
30721}
30722#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30723pub struct TerminalTraitGreen(pub GreenId);
30724impl TypedSyntaxNode for TerminalTrait {
30725 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrait);
30726 type StablePtr = TerminalTraitPtr;
30727 type Green = TerminalTraitGreen;
30728 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30729 TerminalTraitGreen(
30730 Arc::new(GreenNode {
30731 kind: SyntaxKind::TerminalTrait,
30732 details: GreenNodeDetails::Node {
30733 children: [
30734 Trivia::missing(db).0,
30735 TokenTrait::missing(db).0,
30736 Trivia::missing(db).0,
30737 ]
30738 .into(),
30739 width: TextWidth::default(),
30740 },
30741 })
30742 .intern(db),
30743 )
30744 }
30745 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30746 let kind = node.kind(db);
30747 assert_eq!(
30748 kind,
30749 SyntaxKind::TerminalTrait,
30750 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30751 kind,
30752 SyntaxKind::TerminalTrait
30753 );
30754 Self { node }
30755 }
30756 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30757 let kind = node.kind(db);
30758 if kind == SyntaxKind::TerminalTrait {
30759 Some(Self::from_syntax_node(db, node))
30760 } else {
30761 None
30762 }
30763 }
30764 fn as_syntax_node(&self) -> SyntaxNode {
30765 self.node
30766 }
30767 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30768 TerminalTraitPtr(self.node.stable_ptr(db))
30769 }
30770}
30771#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30772pub struct TokenTrue {
30773 node: SyntaxNode,
30774}
30775impl Token for TokenTrue {
30776 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30777 TokenTrueGreen(
30778 Arc::new(GreenNode {
30779 kind: SyntaxKind::TokenTrue,
30780 details: GreenNodeDetails::Token(text),
30781 })
30782 .intern(db),
30783 )
30784 }
30785 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30786 extract_matches!(
30787 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30788 GreenNodeDetails::Token
30789 )
30790 .clone()
30791 }
30792}
30793#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30794pub struct TokenTruePtr(pub SyntaxStablePtrId);
30795impl TypedStablePtr for TokenTruePtr {
30796 type SyntaxNode = TokenTrue;
30797 fn untyped(&self) -> SyntaxStablePtrId {
30798 self.0
30799 }
30800 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrue {
30801 TokenTrue::from_syntax_node(db, self.0.lookup(db))
30802 }
30803}
30804impl From<TokenTruePtr> for SyntaxStablePtrId {
30805 fn from(ptr: TokenTruePtr) -> Self {
30806 ptr.untyped()
30807 }
30808}
30809#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30810pub struct TokenTrueGreen(pub GreenId);
30811impl TokenTrueGreen {
30812 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30813 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30814 }
30815}
30816impl TypedSyntaxNode for TokenTrue {
30817 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrue);
30818 type StablePtr = TokenTruePtr;
30819 type Green = TokenTrueGreen;
30820 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30821 TokenTrueGreen(
30822 Arc::new(GreenNode {
30823 kind: SyntaxKind::TokenMissing,
30824 details: GreenNodeDetails::Token("".into()),
30825 })
30826 .intern(db),
30827 )
30828 }
30829 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30830 match node.lookup_intern(db).green.lookup_intern(db).details {
30831 GreenNodeDetails::Token(_) => Self { node },
30832 GreenNodeDetails::Node { .. } => {
30833 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrue)
30834 }
30835 }
30836 }
30837 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30838 match node.lookup_intern(db).green.lookup_intern(db).details {
30839 GreenNodeDetails::Token(_) => Some(Self { node }),
30840 GreenNodeDetails::Node { .. } => None,
30841 }
30842 }
30843 fn as_syntax_node(&self) -> SyntaxNode {
30844 self.node
30845 }
30846 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30847 TokenTruePtr(self.node.stable_ptr(db))
30848 }
30849}
30850#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30851pub struct TerminalTrue {
30852 node: SyntaxNode,
30853}
30854impl Terminal for TerminalTrue {
30855 const KIND: SyntaxKind = SyntaxKind::TerminalTrue;
30856 type TokenType = TokenTrue;
30857 fn new_green(
30858 db: &dyn SyntaxGroup,
30859 leading_trivia: TriviaGreen,
30860 token: <<TerminalTrue as Terminal>::TokenType as TypedSyntaxNode>::Green,
30861 trailing_trivia: TriviaGreen,
30862 ) -> Self::Green {
30863 let children = [leading_trivia.0, token.0, trailing_trivia.0];
30864 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
30865 TerminalTrueGreen(
30866 Arc::new(GreenNode {
30867 kind: SyntaxKind::TerminalTrue,
30868 details: GreenNodeDetails::Node { children: children.into(), width },
30869 })
30870 .intern(db),
30871 )
30872 }
30873 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30874 let GreenNodeDetails::Node { children, .. } =
30875 &self.node.lookup_intern(db).green.lookup_intern(db).details
30876 else {
30877 unreachable!("Expected a node, not a token");
30878 };
30879 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
30880 }
30881}
30882impl TerminalTrue {
30883 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30884 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
30885 }
30886 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrue {
30887 TokenTrue::from_syntax_node(db, self.node.get_children(db)[1])
30888 }
30889 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30890 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
30891 }
30892}
30893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30894pub struct TerminalTruePtr(pub SyntaxStablePtrId);
30895impl TerminalTruePtr {}
30896impl TypedStablePtr for TerminalTruePtr {
30897 type SyntaxNode = TerminalTrue;
30898 fn untyped(&self) -> SyntaxStablePtrId {
30899 self.0
30900 }
30901 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrue {
30902 TerminalTrue::from_syntax_node(db, self.0.lookup(db))
30903 }
30904}
30905impl From<TerminalTruePtr> for SyntaxStablePtrId {
30906 fn from(ptr: TerminalTruePtr) -> Self {
30907 ptr.untyped()
30908 }
30909}
30910#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30911pub struct TerminalTrueGreen(pub GreenId);
30912impl TypedSyntaxNode for TerminalTrue {
30913 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrue);
30914 type StablePtr = TerminalTruePtr;
30915 type Green = TerminalTrueGreen;
30916 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30917 TerminalTrueGreen(
30918 Arc::new(GreenNode {
30919 kind: SyntaxKind::TerminalTrue,
30920 details: GreenNodeDetails::Node {
30921 children: [
30922 Trivia::missing(db).0,
30923 TokenTrue::missing(db).0,
30924 Trivia::missing(db).0,
30925 ]
30926 .into(),
30927 width: TextWidth::default(),
30928 },
30929 })
30930 .intern(db),
30931 )
30932 }
30933 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30934 let kind = node.kind(db);
30935 assert_eq!(
30936 kind,
30937 SyntaxKind::TerminalTrue,
30938 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30939 kind,
30940 SyntaxKind::TerminalTrue
30941 );
30942 Self { node }
30943 }
30944 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30945 let kind = node.kind(db);
30946 if kind == SyntaxKind::TerminalTrue { Some(Self::from_syntax_node(db, node)) } else { None }
30947 }
30948 fn as_syntax_node(&self) -> SyntaxNode {
30949 self.node
30950 }
30951 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
30952 TerminalTruePtr(self.node.stable_ptr(db))
30953 }
30954}
30955#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30956pub struct TokenType {
30957 node: SyntaxNode,
30958}
30959impl Token for TokenType {
30960 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30961 TokenTypeGreen(
30962 Arc::new(GreenNode {
30963 kind: SyntaxKind::TokenType,
30964 details: GreenNodeDetails::Token(text),
30965 })
30966 .intern(db),
30967 )
30968 }
30969 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30970 extract_matches!(
30971 &self.node.lookup_intern(db).green.lookup_intern(db).details,
30972 GreenNodeDetails::Token
30973 )
30974 .clone()
30975 }
30976}
30977#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30978pub struct TokenTypePtr(pub SyntaxStablePtrId);
30979impl TypedStablePtr for TokenTypePtr {
30980 type SyntaxNode = TokenType;
30981 fn untyped(&self) -> SyntaxStablePtrId {
30982 self.0
30983 }
30984 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenType {
30985 TokenType::from_syntax_node(db, self.0.lookup(db))
30986 }
30987}
30988impl From<TokenTypePtr> for SyntaxStablePtrId {
30989 fn from(ptr: TokenTypePtr) -> Self {
30990 ptr.untyped()
30991 }
30992}
30993#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30994pub struct TokenTypeGreen(pub GreenId);
30995impl TokenTypeGreen {
30996 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30997 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30998 }
30999}
31000impl TypedSyntaxNode for TokenType {
31001 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenType);
31002 type StablePtr = TokenTypePtr;
31003 type Green = TokenTypeGreen;
31004 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31005 TokenTypeGreen(
31006 Arc::new(GreenNode {
31007 kind: SyntaxKind::TokenMissing,
31008 details: GreenNodeDetails::Token("".into()),
31009 })
31010 .intern(db),
31011 )
31012 }
31013 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31014 match node.lookup_intern(db).green.lookup_intern(db).details {
31015 GreenNodeDetails::Token(_) => Self { node },
31016 GreenNodeDetails::Node { .. } => {
31017 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenType)
31018 }
31019 }
31020 }
31021 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31022 match node.lookup_intern(db).green.lookup_intern(db).details {
31023 GreenNodeDetails::Token(_) => Some(Self { node }),
31024 GreenNodeDetails::Node { .. } => None,
31025 }
31026 }
31027 fn as_syntax_node(&self) -> SyntaxNode {
31028 self.node
31029 }
31030 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31031 TokenTypePtr(self.node.stable_ptr(db))
31032 }
31033}
31034#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31035pub struct TerminalType {
31036 node: SyntaxNode,
31037}
31038impl Terminal for TerminalType {
31039 const KIND: SyntaxKind = SyntaxKind::TerminalType;
31040 type TokenType = TokenType;
31041 fn new_green(
31042 db: &dyn SyntaxGroup,
31043 leading_trivia: TriviaGreen,
31044 token: <<TerminalType as Terminal>::TokenType as TypedSyntaxNode>::Green,
31045 trailing_trivia: TriviaGreen,
31046 ) -> Self::Green {
31047 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31048 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31049 TerminalTypeGreen(
31050 Arc::new(GreenNode {
31051 kind: SyntaxKind::TerminalType,
31052 details: GreenNodeDetails::Node { children: children.into(), width },
31053 })
31054 .intern(db),
31055 )
31056 }
31057 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31058 let GreenNodeDetails::Node { children, .. } =
31059 &self.node.lookup_intern(db).green.lookup_intern(db).details
31060 else {
31061 unreachable!("Expected a node, not a token");
31062 };
31063 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31064 }
31065}
31066impl TerminalType {
31067 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31068 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31069 }
31070 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenType {
31071 TokenType::from_syntax_node(db, self.node.get_children(db)[1])
31072 }
31073 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31074 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31075 }
31076}
31077#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31078pub struct TerminalTypePtr(pub SyntaxStablePtrId);
31079impl TerminalTypePtr {}
31080impl TypedStablePtr for TerminalTypePtr {
31081 type SyntaxNode = TerminalType;
31082 fn untyped(&self) -> SyntaxStablePtrId {
31083 self.0
31084 }
31085 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalType {
31086 TerminalType::from_syntax_node(db, self.0.lookup(db))
31087 }
31088}
31089impl From<TerminalTypePtr> for SyntaxStablePtrId {
31090 fn from(ptr: TerminalTypePtr) -> Self {
31091 ptr.untyped()
31092 }
31093}
31094#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31095pub struct TerminalTypeGreen(pub GreenId);
31096impl TypedSyntaxNode for TerminalType {
31097 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalType);
31098 type StablePtr = TerminalTypePtr;
31099 type Green = TerminalTypeGreen;
31100 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31101 TerminalTypeGreen(
31102 Arc::new(GreenNode {
31103 kind: SyntaxKind::TerminalType,
31104 details: GreenNodeDetails::Node {
31105 children: [
31106 Trivia::missing(db).0,
31107 TokenType::missing(db).0,
31108 Trivia::missing(db).0,
31109 ]
31110 .into(),
31111 width: TextWidth::default(),
31112 },
31113 })
31114 .intern(db),
31115 )
31116 }
31117 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31118 let kind = node.kind(db);
31119 assert_eq!(
31120 kind,
31121 SyntaxKind::TerminalType,
31122 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31123 kind,
31124 SyntaxKind::TerminalType
31125 );
31126 Self { node }
31127 }
31128 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31129 let kind = node.kind(db);
31130 if kind == SyntaxKind::TerminalType { Some(Self::from_syntax_node(db, node)) } else { None }
31131 }
31132 fn as_syntax_node(&self) -> SyntaxNode {
31133 self.node
31134 }
31135 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31136 TerminalTypePtr(self.node.stable_ptr(db))
31137 }
31138}
31139#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31140pub struct TokenUse {
31141 node: SyntaxNode,
31142}
31143impl Token for TokenUse {
31144 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31145 TokenUseGreen(
31146 Arc::new(GreenNode {
31147 kind: SyntaxKind::TokenUse,
31148 details: GreenNodeDetails::Token(text),
31149 })
31150 .intern(db),
31151 )
31152 }
31153 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31154 extract_matches!(
31155 &self.node.lookup_intern(db).green.lookup_intern(db).details,
31156 GreenNodeDetails::Token
31157 )
31158 .clone()
31159 }
31160}
31161#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31162pub struct TokenUsePtr(pub SyntaxStablePtrId);
31163impl TypedStablePtr for TokenUsePtr {
31164 type SyntaxNode = TokenUse;
31165 fn untyped(&self) -> SyntaxStablePtrId {
31166 self.0
31167 }
31168 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUse {
31169 TokenUse::from_syntax_node(db, self.0.lookup(db))
31170 }
31171}
31172impl From<TokenUsePtr> for SyntaxStablePtrId {
31173 fn from(ptr: TokenUsePtr) -> Self {
31174 ptr.untyped()
31175 }
31176}
31177#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31178pub struct TokenUseGreen(pub GreenId);
31179impl TokenUseGreen {
31180 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31181 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31182 }
31183}
31184impl TypedSyntaxNode for TokenUse {
31185 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUse);
31186 type StablePtr = TokenUsePtr;
31187 type Green = TokenUseGreen;
31188 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31189 TokenUseGreen(
31190 Arc::new(GreenNode {
31191 kind: SyntaxKind::TokenMissing,
31192 details: GreenNodeDetails::Token("".into()),
31193 })
31194 .intern(db),
31195 )
31196 }
31197 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31198 match node.lookup_intern(db).green.lookup_intern(db).details {
31199 GreenNodeDetails::Token(_) => Self { node },
31200 GreenNodeDetails::Node { .. } => {
31201 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUse)
31202 }
31203 }
31204 }
31205 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31206 match node.lookup_intern(db).green.lookup_intern(db).details {
31207 GreenNodeDetails::Token(_) => Some(Self { node }),
31208 GreenNodeDetails::Node { .. } => None,
31209 }
31210 }
31211 fn as_syntax_node(&self) -> SyntaxNode {
31212 self.node
31213 }
31214 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31215 TokenUsePtr(self.node.stable_ptr(db))
31216 }
31217}
31218#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31219pub struct TerminalUse {
31220 node: SyntaxNode,
31221}
31222impl Terminal for TerminalUse {
31223 const KIND: SyntaxKind = SyntaxKind::TerminalUse;
31224 type TokenType = TokenUse;
31225 fn new_green(
31226 db: &dyn SyntaxGroup,
31227 leading_trivia: TriviaGreen,
31228 token: <<TerminalUse as Terminal>::TokenType as TypedSyntaxNode>::Green,
31229 trailing_trivia: TriviaGreen,
31230 ) -> Self::Green {
31231 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31232 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31233 TerminalUseGreen(
31234 Arc::new(GreenNode {
31235 kind: SyntaxKind::TerminalUse,
31236 details: GreenNodeDetails::Node { children: children.into(), width },
31237 })
31238 .intern(db),
31239 )
31240 }
31241 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31242 let GreenNodeDetails::Node { children, .. } =
31243 &self.node.lookup_intern(db).green.lookup_intern(db).details
31244 else {
31245 unreachable!("Expected a node, not a token");
31246 };
31247 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31248 }
31249}
31250impl TerminalUse {
31251 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31252 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31253 }
31254 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUse {
31255 TokenUse::from_syntax_node(db, self.node.get_children(db)[1])
31256 }
31257 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31258 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31259 }
31260}
31261#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31262pub struct TerminalUsePtr(pub SyntaxStablePtrId);
31263impl TerminalUsePtr {}
31264impl TypedStablePtr for TerminalUsePtr {
31265 type SyntaxNode = TerminalUse;
31266 fn untyped(&self) -> SyntaxStablePtrId {
31267 self.0
31268 }
31269 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUse {
31270 TerminalUse::from_syntax_node(db, self.0.lookup(db))
31271 }
31272}
31273impl From<TerminalUsePtr> for SyntaxStablePtrId {
31274 fn from(ptr: TerminalUsePtr) -> Self {
31275 ptr.untyped()
31276 }
31277}
31278#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31279pub struct TerminalUseGreen(pub GreenId);
31280impl TypedSyntaxNode for TerminalUse {
31281 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUse);
31282 type StablePtr = TerminalUsePtr;
31283 type Green = TerminalUseGreen;
31284 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31285 TerminalUseGreen(
31286 Arc::new(GreenNode {
31287 kind: SyntaxKind::TerminalUse,
31288 details: GreenNodeDetails::Node {
31289 children: [
31290 Trivia::missing(db).0,
31291 TokenUse::missing(db).0,
31292 Trivia::missing(db).0,
31293 ]
31294 .into(),
31295 width: TextWidth::default(),
31296 },
31297 })
31298 .intern(db),
31299 )
31300 }
31301 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31302 let kind = node.kind(db);
31303 assert_eq!(
31304 kind,
31305 SyntaxKind::TerminalUse,
31306 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31307 kind,
31308 SyntaxKind::TerminalUse
31309 );
31310 Self { node }
31311 }
31312 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31313 let kind = node.kind(db);
31314 if kind == SyntaxKind::TerminalUse { Some(Self::from_syntax_node(db, node)) } else { None }
31315 }
31316 fn as_syntax_node(&self) -> SyntaxNode {
31317 self.node
31318 }
31319 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31320 TerminalUsePtr(self.node.stable_ptr(db))
31321 }
31322}
31323#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31324pub struct TokenPub {
31325 node: SyntaxNode,
31326}
31327impl Token for TokenPub {
31328 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31329 TokenPubGreen(
31330 Arc::new(GreenNode {
31331 kind: SyntaxKind::TokenPub,
31332 details: GreenNodeDetails::Token(text),
31333 })
31334 .intern(db),
31335 )
31336 }
31337 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31338 extract_matches!(
31339 &self.node.lookup_intern(db).green.lookup_intern(db).details,
31340 GreenNodeDetails::Token
31341 )
31342 .clone()
31343 }
31344}
31345#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31346pub struct TokenPubPtr(pub SyntaxStablePtrId);
31347impl TypedStablePtr for TokenPubPtr {
31348 type SyntaxNode = TokenPub;
31349 fn untyped(&self) -> SyntaxStablePtrId {
31350 self.0
31351 }
31352 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPub {
31353 TokenPub::from_syntax_node(db, self.0.lookup(db))
31354 }
31355}
31356impl From<TokenPubPtr> for SyntaxStablePtrId {
31357 fn from(ptr: TokenPubPtr) -> Self {
31358 ptr.untyped()
31359 }
31360}
31361#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31362pub struct TokenPubGreen(pub GreenId);
31363impl TokenPubGreen {
31364 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31365 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31366 }
31367}
31368impl TypedSyntaxNode for TokenPub {
31369 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPub);
31370 type StablePtr = TokenPubPtr;
31371 type Green = TokenPubGreen;
31372 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31373 TokenPubGreen(
31374 Arc::new(GreenNode {
31375 kind: SyntaxKind::TokenMissing,
31376 details: GreenNodeDetails::Token("".into()),
31377 })
31378 .intern(db),
31379 )
31380 }
31381 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31382 match node.lookup_intern(db).green.lookup_intern(db).details {
31383 GreenNodeDetails::Token(_) => Self { node },
31384 GreenNodeDetails::Node { .. } => {
31385 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPub)
31386 }
31387 }
31388 }
31389 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31390 match node.lookup_intern(db).green.lookup_intern(db).details {
31391 GreenNodeDetails::Token(_) => Some(Self { node }),
31392 GreenNodeDetails::Node { .. } => None,
31393 }
31394 }
31395 fn as_syntax_node(&self) -> SyntaxNode {
31396 self.node
31397 }
31398 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31399 TokenPubPtr(self.node.stable_ptr(db))
31400 }
31401}
31402#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31403pub struct TerminalPub {
31404 node: SyntaxNode,
31405}
31406impl Terminal for TerminalPub {
31407 const KIND: SyntaxKind = SyntaxKind::TerminalPub;
31408 type TokenType = TokenPub;
31409 fn new_green(
31410 db: &dyn SyntaxGroup,
31411 leading_trivia: TriviaGreen,
31412 token: <<TerminalPub as Terminal>::TokenType as TypedSyntaxNode>::Green,
31413 trailing_trivia: TriviaGreen,
31414 ) -> Self::Green {
31415 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31416 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31417 TerminalPubGreen(
31418 Arc::new(GreenNode {
31419 kind: SyntaxKind::TerminalPub,
31420 details: GreenNodeDetails::Node { children: children.into(), width },
31421 })
31422 .intern(db),
31423 )
31424 }
31425 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31426 let GreenNodeDetails::Node { children, .. } =
31427 &self.node.lookup_intern(db).green.lookup_intern(db).details
31428 else {
31429 unreachable!("Expected a node, not a token");
31430 };
31431 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31432 }
31433}
31434impl TerminalPub {
31435 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31436 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31437 }
31438 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPub {
31439 TokenPub::from_syntax_node(db, self.node.get_children(db)[1])
31440 }
31441 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31442 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31443 }
31444}
31445#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31446pub struct TerminalPubPtr(pub SyntaxStablePtrId);
31447impl TerminalPubPtr {}
31448impl TypedStablePtr for TerminalPubPtr {
31449 type SyntaxNode = TerminalPub;
31450 fn untyped(&self) -> SyntaxStablePtrId {
31451 self.0
31452 }
31453 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPub {
31454 TerminalPub::from_syntax_node(db, self.0.lookup(db))
31455 }
31456}
31457impl From<TerminalPubPtr> for SyntaxStablePtrId {
31458 fn from(ptr: TerminalPubPtr) -> Self {
31459 ptr.untyped()
31460 }
31461}
31462#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31463pub struct TerminalPubGreen(pub GreenId);
31464impl TypedSyntaxNode for TerminalPub {
31465 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPub);
31466 type StablePtr = TerminalPubPtr;
31467 type Green = TerminalPubGreen;
31468 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31469 TerminalPubGreen(
31470 Arc::new(GreenNode {
31471 kind: SyntaxKind::TerminalPub,
31472 details: GreenNodeDetails::Node {
31473 children: [
31474 Trivia::missing(db).0,
31475 TokenPub::missing(db).0,
31476 Trivia::missing(db).0,
31477 ]
31478 .into(),
31479 width: TextWidth::default(),
31480 },
31481 })
31482 .intern(db),
31483 )
31484 }
31485 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31486 let kind = node.kind(db);
31487 assert_eq!(
31488 kind,
31489 SyntaxKind::TerminalPub,
31490 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31491 kind,
31492 SyntaxKind::TerminalPub
31493 );
31494 Self { node }
31495 }
31496 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31497 let kind = node.kind(db);
31498 if kind == SyntaxKind::TerminalPub { Some(Self::from_syntax_node(db, node)) } else { None }
31499 }
31500 fn as_syntax_node(&self) -> SyntaxNode {
31501 self.node
31502 }
31503 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31504 TerminalPubPtr(self.node.stable_ptr(db))
31505 }
31506}
31507#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31508pub struct TokenAnd {
31509 node: SyntaxNode,
31510}
31511impl Token for TokenAnd {
31512 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31513 TokenAndGreen(
31514 Arc::new(GreenNode {
31515 kind: SyntaxKind::TokenAnd,
31516 details: GreenNodeDetails::Token(text),
31517 })
31518 .intern(db),
31519 )
31520 }
31521 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31522 extract_matches!(
31523 &self.node.lookup_intern(db).green.lookup_intern(db).details,
31524 GreenNodeDetails::Token
31525 )
31526 .clone()
31527 }
31528}
31529#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31530pub struct TokenAndPtr(pub SyntaxStablePtrId);
31531impl TypedStablePtr for TokenAndPtr {
31532 type SyntaxNode = TokenAnd;
31533 fn untyped(&self) -> SyntaxStablePtrId {
31534 self.0
31535 }
31536 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAnd {
31537 TokenAnd::from_syntax_node(db, self.0.lookup(db))
31538 }
31539}
31540impl From<TokenAndPtr> for SyntaxStablePtrId {
31541 fn from(ptr: TokenAndPtr) -> Self {
31542 ptr.untyped()
31543 }
31544}
31545#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31546pub struct TokenAndGreen(pub GreenId);
31547impl TokenAndGreen {
31548 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31549 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31550 }
31551}
31552impl TypedSyntaxNode for TokenAnd {
31553 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAnd);
31554 type StablePtr = TokenAndPtr;
31555 type Green = TokenAndGreen;
31556 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31557 TokenAndGreen(
31558 Arc::new(GreenNode {
31559 kind: SyntaxKind::TokenMissing,
31560 details: GreenNodeDetails::Token("".into()),
31561 })
31562 .intern(db),
31563 )
31564 }
31565 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31566 match node.lookup_intern(db).green.lookup_intern(db).details {
31567 GreenNodeDetails::Token(_) => Self { node },
31568 GreenNodeDetails::Node { .. } => {
31569 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAnd)
31570 }
31571 }
31572 }
31573 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31574 match node.lookup_intern(db).green.lookup_intern(db).details {
31575 GreenNodeDetails::Token(_) => Some(Self { node }),
31576 GreenNodeDetails::Node { .. } => None,
31577 }
31578 }
31579 fn as_syntax_node(&self) -> SyntaxNode {
31580 self.node
31581 }
31582 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31583 TokenAndPtr(self.node.stable_ptr(db))
31584 }
31585}
31586#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31587pub struct TerminalAnd {
31588 node: SyntaxNode,
31589}
31590impl Terminal for TerminalAnd {
31591 const KIND: SyntaxKind = SyntaxKind::TerminalAnd;
31592 type TokenType = TokenAnd;
31593 fn new_green(
31594 db: &dyn SyntaxGroup,
31595 leading_trivia: TriviaGreen,
31596 token: <<TerminalAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
31597 trailing_trivia: TriviaGreen,
31598 ) -> Self::Green {
31599 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31600 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31601 TerminalAndGreen(
31602 Arc::new(GreenNode {
31603 kind: SyntaxKind::TerminalAnd,
31604 details: GreenNodeDetails::Node { children: children.into(), width },
31605 })
31606 .intern(db),
31607 )
31608 }
31609 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31610 let GreenNodeDetails::Node { children, .. } =
31611 &self.node.lookup_intern(db).green.lookup_intern(db).details
31612 else {
31613 unreachable!("Expected a node, not a token");
31614 };
31615 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31616 }
31617}
31618impl TerminalAnd {
31619 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31620 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31621 }
31622 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAnd {
31623 TokenAnd::from_syntax_node(db, self.node.get_children(db)[1])
31624 }
31625 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31626 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31627 }
31628}
31629#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31630pub struct TerminalAndPtr(pub SyntaxStablePtrId);
31631impl TerminalAndPtr {}
31632impl TypedStablePtr for TerminalAndPtr {
31633 type SyntaxNode = TerminalAnd;
31634 fn untyped(&self) -> SyntaxStablePtrId {
31635 self.0
31636 }
31637 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAnd {
31638 TerminalAnd::from_syntax_node(db, self.0.lookup(db))
31639 }
31640}
31641impl From<TerminalAndPtr> for SyntaxStablePtrId {
31642 fn from(ptr: TerminalAndPtr) -> Self {
31643 ptr.untyped()
31644 }
31645}
31646#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31647pub struct TerminalAndGreen(pub GreenId);
31648impl TypedSyntaxNode for TerminalAnd {
31649 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAnd);
31650 type StablePtr = TerminalAndPtr;
31651 type Green = TerminalAndGreen;
31652 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31653 TerminalAndGreen(
31654 Arc::new(GreenNode {
31655 kind: SyntaxKind::TerminalAnd,
31656 details: GreenNodeDetails::Node {
31657 children: [
31658 Trivia::missing(db).0,
31659 TokenAnd::missing(db).0,
31660 Trivia::missing(db).0,
31661 ]
31662 .into(),
31663 width: TextWidth::default(),
31664 },
31665 })
31666 .intern(db),
31667 )
31668 }
31669 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31670 let kind = node.kind(db);
31671 assert_eq!(
31672 kind,
31673 SyntaxKind::TerminalAnd,
31674 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31675 kind,
31676 SyntaxKind::TerminalAnd
31677 );
31678 Self { node }
31679 }
31680 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31681 let kind = node.kind(db);
31682 if kind == SyntaxKind::TerminalAnd { Some(Self::from_syntax_node(db, node)) } else { None }
31683 }
31684 fn as_syntax_node(&self) -> SyntaxNode {
31685 self.node
31686 }
31687 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31688 TerminalAndPtr(self.node.stable_ptr(db))
31689 }
31690}
31691#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31692pub struct TokenAndAnd {
31693 node: SyntaxNode,
31694}
31695impl Token for TokenAndAnd {
31696 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31697 TokenAndAndGreen(
31698 Arc::new(GreenNode {
31699 kind: SyntaxKind::TokenAndAnd,
31700 details: GreenNodeDetails::Token(text),
31701 })
31702 .intern(db),
31703 )
31704 }
31705 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31706 extract_matches!(
31707 &self.node.lookup_intern(db).green.lookup_intern(db).details,
31708 GreenNodeDetails::Token
31709 )
31710 .clone()
31711 }
31712}
31713#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31714pub struct TokenAndAndPtr(pub SyntaxStablePtrId);
31715impl TypedStablePtr for TokenAndAndPtr {
31716 type SyntaxNode = TokenAndAnd;
31717 fn untyped(&self) -> SyntaxStablePtrId {
31718 self.0
31719 }
31720 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
31721 TokenAndAnd::from_syntax_node(db, self.0.lookup(db))
31722 }
31723}
31724impl From<TokenAndAndPtr> for SyntaxStablePtrId {
31725 fn from(ptr: TokenAndAndPtr) -> Self {
31726 ptr.untyped()
31727 }
31728}
31729#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31730pub struct TokenAndAndGreen(pub GreenId);
31731impl TokenAndAndGreen {
31732 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31733 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31734 }
31735}
31736impl TypedSyntaxNode for TokenAndAnd {
31737 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAndAnd);
31738 type StablePtr = TokenAndAndPtr;
31739 type Green = TokenAndAndGreen;
31740 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31741 TokenAndAndGreen(
31742 Arc::new(GreenNode {
31743 kind: SyntaxKind::TokenMissing,
31744 details: GreenNodeDetails::Token("".into()),
31745 })
31746 .intern(db),
31747 )
31748 }
31749 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31750 match node.lookup_intern(db).green.lookup_intern(db).details {
31751 GreenNodeDetails::Token(_) => Self { node },
31752 GreenNodeDetails::Node { .. } => {
31753 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAndAnd)
31754 }
31755 }
31756 }
31757 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31758 match node.lookup_intern(db).green.lookup_intern(db).details {
31759 GreenNodeDetails::Token(_) => Some(Self { node }),
31760 GreenNodeDetails::Node { .. } => None,
31761 }
31762 }
31763 fn as_syntax_node(&self) -> SyntaxNode {
31764 self.node
31765 }
31766 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31767 TokenAndAndPtr(self.node.stable_ptr(db))
31768 }
31769}
31770#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31771pub struct TerminalAndAnd {
31772 node: SyntaxNode,
31773}
31774impl Terminal for TerminalAndAnd {
31775 const KIND: SyntaxKind = SyntaxKind::TerminalAndAnd;
31776 type TokenType = TokenAndAnd;
31777 fn new_green(
31778 db: &dyn SyntaxGroup,
31779 leading_trivia: TriviaGreen,
31780 token: <<TerminalAndAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
31781 trailing_trivia: TriviaGreen,
31782 ) -> Self::Green {
31783 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31784 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31785 TerminalAndAndGreen(
31786 Arc::new(GreenNode {
31787 kind: SyntaxKind::TerminalAndAnd,
31788 details: GreenNodeDetails::Node { children: children.into(), width },
31789 })
31790 .intern(db),
31791 )
31792 }
31793 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31794 let GreenNodeDetails::Node { children, .. } =
31795 &self.node.lookup_intern(db).green.lookup_intern(db).details
31796 else {
31797 unreachable!("Expected a node, not a token");
31798 };
31799 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31800 }
31801}
31802impl TerminalAndAnd {
31803 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31804 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31805 }
31806 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
31807 TokenAndAnd::from_syntax_node(db, self.node.get_children(db)[1])
31808 }
31809 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31810 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31811 }
31812}
31813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31814pub struct TerminalAndAndPtr(pub SyntaxStablePtrId);
31815impl TerminalAndAndPtr {}
31816impl TypedStablePtr for TerminalAndAndPtr {
31817 type SyntaxNode = TerminalAndAnd;
31818 fn untyped(&self) -> SyntaxStablePtrId {
31819 self.0
31820 }
31821 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAndAnd {
31822 TerminalAndAnd::from_syntax_node(db, self.0.lookup(db))
31823 }
31824}
31825impl From<TerminalAndAndPtr> for SyntaxStablePtrId {
31826 fn from(ptr: TerminalAndAndPtr) -> Self {
31827 ptr.untyped()
31828 }
31829}
31830#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31831pub struct TerminalAndAndGreen(pub GreenId);
31832impl TypedSyntaxNode for TerminalAndAnd {
31833 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAndAnd);
31834 type StablePtr = TerminalAndAndPtr;
31835 type Green = TerminalAndAndGreen;
31836 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31837 TerminalAndAndGreen(
31838 Arc::new(GreenNode {
31839 kind: SyntaxKind::TerminalAndAnd,
31840 details: GreenNodeDetails::Node {
31841 children: [
31842 Trivia::missing(db).0,
31843 TokenAndAnd::missing(db).0,
31844 Trivia::missing(db).0,
31845 ]
31846 .into(),
31847 width: TextWidth::default(),
31848 },
31849 })
31850 .intern(db),
31851 )
31852 }
31853 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31854 let kind = node.kind(db);
31855 assert_eq!(
31856 kind,
31857 SyntaxKind::TerminalAndAnd,
31858 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31859 kind,
31860 SyntaxKind::TerminalAndAnd
31861 );
31862 Self { node }
31863 }
31864 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31865 let kind = node.kind(db);
31866 if kind == SyntaxKind::TerminalAndAnd {
31867 Some(Self::from_syntax_node(db, node))
31868 } else {
31869 None
31870 }
31871 }
31872 fn as_syntax_node(&self) -> SyntaxNode {
31873 self.node
31874 }
31875 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31876 TerminalAndAndPtr(self.node.stable_ptr(db))
31877 }
31878}
31879#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31880pub struct TokenArrow {
31881 node: SyntaxNode,
31882}
31883impl Token for TokenArrow {
31884 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31885 TokenArrowGreen(
31886 Arc::new(GreenNode {
31887 kind: SyntaxKind::TokenArrow,
31888 details: GreenNodeDetails::Token(text),
31889 })
31890 .intern(db),
31891 )
31892 }
31893 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31894 extract_matches!(
31895 &self.node.lookup_intern(db).green.lookup_intern(db).details,
31896 GreenNodeDetails::Token
31897 )
31898 .clone()
31899 }
31900}
31901#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31902pub struct TokenArrowPtr(pub SyntaxStablePtrId);
31903impl TypedStablePtr for TokenArrowPtr {
31904 type SyntaxNode = TokenArrow;
31905 fn untyped(&self) -> SyntaxStablePtrId {
31906 self.0
31907 }
31908 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenArrow {
31909 TokenArrow::from_syntax_node(db, self.0.lookup(db))
31910 }
31911}
31912impl From<TokenArrowPtr> for SyntaxStablePtrId {
31913 fn from(ptr: TokenArrowPtr) -> Self {
31914 ptr.untyped()
31915 }
31916}
31917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31918pub struct TokenArrowGreen(pub GreenId);
31919impl TokenArrowGreen {
31920 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31921 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31922 }
31923}
31924impl TypedSyntaxNode for TokenArrow {
31925 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenArrow);
31926 type StablePtr = TokenArrowPtr;
31927 type Green = TokenArrowGreen;
31928 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31929 TokenArrowGreen(
31930 Arc::new(GreenNode {
31931 kind: SyntaxKind::TokenMissing,
31932 details: GreenNodeDetails::Token("".into()),
31933 })
31934 .intern(db),
31935 )
31936 }
31937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31938 match node.lookup_intern(db).green.lookup_intern(db).details {
31939 GreenNodeDetails::Token(_) => Self { node },
31940 GreenNodeDetails::Node { .. } => {
31941 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenArrow)
31942 }
31943 }
31944 }
31945 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31946 match node.lookup_intern(db).green.lookup_intern(db).details {
31947 GreenNodeDetails::Token(_) => Some(Self { node }),
31948 GreenNodeDetails::Node { .. } => None,
31949 }
31950 }
31951 fn as_syntax_node(&self) -> SyntaxNode {
31952 self.node
31953 }
31954 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
31955 TokenArrowPtr(self.node.stable_ptr(db))
31956 }
31957}
31958#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31959pub struct TerminalArrow {
31960 node: SyntaxNode,
31961}
31962impl Terminal for TerminalArrow {
31963 const KIND: SyntaxKind = SyntaxKind::TerminalArrow;
31964 type TokenType = TokenArrow;
31965 fn new_green(
31966 db: &dyn SyntaxGroup,
31967 leading_trivia: TriviaGreen,
31968 token: <<TerminalArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
31969 trailing_trivia: TriviaGreen,
31970 ) -> Self::Green {
31971 let children = [leading_trivia.0, token.0, trailing_trivia.0];
31972 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
31973 TerminalArrowGreen(
31974 Arc::new(GreenNode {
31975 kind: SyntaxKind::TerminalArrow,
31976 details: GreenNodeDetails::Node { children: children.into(), width },
31977 })
31978 .intern(db),
31979 )
31980 }
31981 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31982 let GreenNodeDetails::Node { children, .. } =
31983 &self.node.lookup_intern(db).green.lookup_intern(db).details
31984 else {
31985 unreachable!("Expected a node, not a token");
31986 };
31987 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
31988 }
31989}
31990impl TerminalArrow {
31991 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31992 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
31993 }
31994 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenArrow {
31995 TokenArrow::from_syntax_node(db, self.node.get_children(db)[1])
31996 }
31997 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31998 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
31999 }
32000}
32001#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32002pub struct TerminalArrowPtr(pub SyntaxStablePtrId);
32003impl TerminalArrowPtr {}
32004impl TypedStablePtr for TerminalArrowPtr {
32005 type SyntaxNode = TerminalArrow;
32006 fn untyped(&self) -> SyntaxStablePtrId {
32007 self.0
32008 }
32009 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
32010 TerminalArrow::from_syntax_node(db, self.0.lookup(db))
32011 }
32012}
32013impl From<TerminalArrowPtr> for SyntaxStablePtrId {
32014 fn from(ptr: TerminalArrowPtr) -> Self {
32015 ptr.untyped()
32016 }
32017}
32018#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32019pub struct TerminalArrowGreen(pub GreenId);
32020impl TypedSyntaxNode for TerminalArrow {
32021 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalArrow);
32022 type StablePtr = TerminalArrowPtr;
32023 type Green = TerminalArrowGreen;
32024 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32025 TerminalArrowGreen(
32026 Arc::new(GreenNode {
32027 kind: SyntaxKind::TerminalArrow,
32028 details: GreenNodeDetails::Node {
32029 children: [
32030 Trivia::missing(db).0,
32031 TokenArrow::missing(db).0,
32032 Trivia::missing(db).0,
32033 ]
32034 .into(),
32035 width: TextWidth::default(),
32036 },
32037 })
32038 .intern(db),
32039 )
32040 }
32041 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32042 let kind = node.kind(db);
32043 assert_eq!(
32044 kind,
32045 SyntaxKind::TerminalArrow,
32046 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32047 kind,
32048 SyntaxKind::TerminalArrow
32049 );
32050 Self { node }
32051 }
32052 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32053 let kind = node.kind(db);
32054 if kind == SyntaxKind::TerminalArrow {
32055 Some(Self::from_syntax_node(db, node))
32056 } else {
32057 None
32058 }
32059 }
32060 fn as_syntax_node(&self) -> SyntaxNode {
32061 self.node
32062 }
32063 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32064 TerminalArrowPtr(self.node.stable_ptr(db))
32065 }
32066}
32067#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32068pub struct TokenAt {
32069 node: SyntaxNode,
32070}
32071impl Token for TokenAt {
32072 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32073 TokenAtGreen(
32074 Arc::new(GreenNode {
32075 kind: SyntaxKind::TokenAt,
32076 details: GreenNodeDetails::Token(text),
32077 })
32078 .intern(db),
32079 )
32080 }
32081 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32082 extract_matches!(
32083 &self.node.lookup_intern(db).green.lookup_intern(db).details,
32084 GreenNodeDetails::Token
32085 )
32086 .clone()
32087 }
32088}
32089#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32090pub struct TokenAtPtr(pub SyntaxStablePtrId);
32091impl TypedStablePtr for TokenAtPtr {
32092 type SyntaxNode = TokenAt;
32093 fn untyped(&self) -> SyntaxStablePtrId {
32094 self.0
32095 }
32096 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAt {
32097 TokenAt::from_syntax_node(db, self.0.lookup(db))
32098 }
32099}
32100impl From<TokenAtPtr> for SyntaxStablePtrId {
32101 fn from(ptr: TokenAtPtr) -> Self {
32102 ptr.untyped()
32103 }
32104}
32105#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32106pub struct TokenAtGreen(pub GreenId);
32107impl TokenAtGreen {
32108 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32109 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32110 }
32111}
32112impl TypedSyntaxNode for TokenAt {
32113 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAt);
32114 type StablePtr = TokenAtPtr;
32115 type Green = TokenAtGreen;
32116 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32117 TokenAtGreen(
32118 Arc::new(GreenNode {
32119 kind: SyntaxKind::TokenMissing,
32120 details: GreenNodeDetails::Token("".into()),
32121 })
32122 .intern(db),
32123 )
32124 }
32125 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32126 match node.lookup_intern(db).green.lookup_intern(db).details {
32127 GreenNodeDetails::Token(_) => Self { node },
32128 GreenNodeDetails::Node { .. } => {
32129 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAt)
32130 }
32131 }
32132 }
32133 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32134 match node.lookup_intern(db).green.lookup_intern(db).details {
32135 GreenNodeDetails::Token(_) => Some(Self { node }),
32136 GreenNodeDetails::Node { .. } => None,
32137 }
32138 }
32139 fn as_syntax_node(&self) -> SyntaxNode {
32140 self.node
32141 }
32142 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32143 TokenAtPtr(self.node.stable_ptr(db))
32144 }
32145}
32146#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32147pub struct TerminalAt {
32148 node: SyntaxNode,
32149}
32150impl Terminal for TerminalAt {
32151 const KIND: SyntaxKind = SyntaxKind::TerminalAt;
32152 type TokenType = TokenAt;
32153 fn new_green(
32154 db: &dyn SyntaxGroup,
32155 leading_trivia: TriviaGreen,
32156 token: <<TerminalAt as Terminal>::TokenType as TypedSyntaxNode>::Green,
32157 trailing_trivia: TriviaGreen,
32158 ) -> Self::Green {
32159 let children = [leading_trivia.0, token.0, trailing_trivia.0];
32160 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
32161 TerminalAtGreen(
32162 Arc::new(GreenNode {
32163 kind: SyntaxKind::TerminalAt,
32164 details: GreenNodeDetails::Node { children: children.into(), width },
32165 })
32166 .intern(db),
32167 )
32168 }
32169 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32170 let GreenNodeDetails::Node { children, .. } =
32171 &self.node.lookup_intern(db).green.lookup_intern(db).details
32172 else {
32173 unreachable!("Expected a node, not a token");
32174 };
32175 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
32176 }
32177}
32178impl TerminalAt {
32179 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32180 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
32181 }
32182 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAt {
32183 TokenAt::from_syntax_node(db, self.node.get_children(db)[1])
32184 }
32185 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32186 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
32187 }
32188}
32189#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32190pub struct TerminalAtPtr(pub SyntaxStablePtrId);
32191impl TerminalAtPtr {}
32192impl TypedStablePtr for TerminalAtPtr {
32193 type SyntaxNode = TerminalAt;
32194 fn untyped(&self) -> SyntaxStablePtrId {
32195 self.0
32196 }
32197 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAt {
32198 TerminalAt::from_syntax_node(db, self.0.lookup(db))
32199 }
32200}
32201impl From<TerminalAtPtr> for SyntaxStablePtrId {
32202 fn from(ptr: TerminalAtPtr) -> Self {
32203 ptr.untyped()
32204 }
32205}
32206#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32207pub struct TerminalAtGreen(pub GreenId);
32208impl TypedSyntaxNode for TerminalAt {
32209 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAt);
32210 type StablePtr = TerminalAtPtr;
32211 type Green = TerminalAtGreen;
32212 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32213 TerminalAtGreen(
32214 Arc::new(GreenNode {
32215 kind: SyntaxKind::TerminalAt,
32216 details: GreenNodeDetails::Node {
32217 children: [
32218 Trivia::missing(db).0,
32219 TokenAt::missing(db).0,
32220 Trivia::missing(db).0,
32221 ]
32222 .into(),
32223 width: TextWidth::default(),
32224 },
32225 })
32226 .intern(db),
32227 )
32228 }
32229 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32230 let kind = node.kind(db);
32231 assert_eq!(
32232 kind,
32233 SyntaxKind::TerminalAt,
32234 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32235 kind,
32236 SyntaxKind::TerminalAt
32237 );
32238 Self { node }
32239 }
32240 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32241 let kind = node.kind(db);
32242 if kind == SyntaxKind::TerminalAt { Some(Self::from_syntax_node(db, node)) } else { None }
32243 }
32244 fn as_syntax_node(&self) -> SyntaxNode {
32245 self.node
32246 }
32247 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32248 TerminalAtPtr(self.node.stable_ptr(db))
32249 }
32250}
32251#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32252pub struct TokenBadCharacters {
32253 node: SyntaxNode,
32254}
32255impl Token for TokenBadCharacters {
32256 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32257 TokenBadCharactersGreen(
32258 Arc::new(GreenNode {
32259 kind: SyntaxKind::TokenBadCharacters,
32260 details: GreenNodeDetails::Token(text),
32261 })
32262 .intern(db),
32263 )
32264 }
32265 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32266 extract_matches!(
32267 &self.node.lookup_intern(db).green.lookup_intern(db).details,
32268 GreenNodeDetails::Token
32269 )
32270 .clone()
32271 }
32272}
32273#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32274pub struct TokenBadCharactersPtr(pub SyntaxStablePtrId);
32275impl TypedStablePtr for TokenBadCharactersPtr {
32276 type SyntaxNode = TokenBadCharacters;
32277 fn untyped(&self) -> SyntaxStablePtrId {
32278 self.0
32279 }
32280 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
32281 TokenBadCharacters::from_syntax_node(db, self.0.lookup(db))
32282 }
32283}
32284impl From<TokenBadCharactersPtr> for SyntaxStablePtrId {
32285 fn from(ptr: TokenBadCharactersPtr) -> Self {
32286 ptr.untyped()
32287 }
32288}
32289#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32290pub struct TokenBadCharactersGreen(pub GreenId);
32291impl TokenBadCharactersGreen {
32292 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32293 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32294 }
32295}
32296impl TypedSyntaxNode for TokenBadCharacters {
32297 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBadCharacters);
32298 type StablePtr = TokenBadCharactersPtr;
32299 type Green = TokenBadCharactersGreen;
32300 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32301 TokenBadCharactersGreen(
32302 Arc::new(GreenNode {
32303 kind: SyntaxKind::TokenMissing,
32304 details: GreenNodeDetails::Token("".into()),
32305 })
32306 .intern(db),
32307 )
32308 }
32309 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32310 match node.lookup_intern(db).green.lookup_intern(db).details {
32311 GreenNodeDetails::Token(_) => Self { node },
32312 GreenNodeDetails::Node { .. } => panic!(
32313 "Expected a token {:?}, not an internal node",
32314 SyntaxKind::TokenBadCharacters
32315 ),
32316 }
32317 }
32318 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32319 match node.lookup_intern(db).green.lookup_intern(db).details {
32320 GreenNodeDetails::Token(_) => Some(Self { node }),
32321 GreenNodeDetails::Node { .. } => None,
32322 }
32323 }
32324 fn as_syntax_node(&self) -> SyntaxNode {
32325 self.node
32326 }
32327 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32328 TokenBadCharactersPtr(self.node.stable_ptr(db))
32329 }
32330}
32331#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32332pub struct TerminalBadCharacters {
32333 node: SyntaxNode,
32334}
32335impl Terminal for TerminalBadCharacters {
32336 const KIND: SyntaxKind = SyntaxKind::TerminalBadCharacters;
32337 type TokenType = TokenBadCharacters;
32338 fn new_green(
32339 db: &dyn SyntaxGroup,
32340 leading_trivia: TriviaGreen,
32341 token: <<TerminalBadCharacters as Terminal>::TokenType as TypedSyntaxNode>::Green,
32342 trailing_trivia: TriviaGreen,
32343 ) -> Self::Green {
32344 let children = [leading_trivia.0, token.0, trailing_trivia.0];
32345 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
32346 TerminalBadCharactersGreen(
32347 Arc::new(GreenNode {
32348 kind: SyntaxKind::TerminalBadCharacters,
32349 details: GreenNodeDetails::Node { children: children.into(), width },
32350 })
32351 .intern(db),
32352 )
32353 }
32354 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32355 let GreenNodeDetails::Node { children, .. } =
32356 &self.node.lookup_intern(db).green.lookup_intern(db).details
32357 else {
32358 unreachable!("Expected a node, not a token");
32359 };
32360 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
32361 }
32362}
32363impl TerminalBadCharacters {
32364 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32365 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
32366 }
32367 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
32368 TokenBadCharacters::from_syntax_node(db, self.node.get_children(db)[1])
32369 }
32370 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32371 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
32372 }
32373}
32374#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32375pub struct TerminalBadCharactersPtr(pub SyntaxStablePtrId);
32376impl TerminalBadCharactersPtr {}
32377impl TypedStablePtr for TerminalBadCharactersPtr {
32378 type SyntaxNode = TerminalBadCharacters;
32379 fn untyped(&self) -> SyntaxStablePtrId {
32380 self.0
32381 }
32382 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBadCharacters {
32383 TerminalBadCharacters::from_syntax_node(db, self.0.lookup(db))
32384 }
32385}
32386impl From<TerminalBadCharactersPtr> for SyntaxStablePtrId {
32387 fn from(ptr: TerminalBadCharactersPtr) -> Self {
32388 ptr.untyped()
32389 }
32390}
32391#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32392pub struct TerminalBadCharactersGreen(pub GreenId);
32393impl TypedSyntaxNode for TerminalBadCharacters {
32394 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBadCharacters);
32395 type StablePtr = TerminalBadCharactersPtr;
32396 type Green = TerminalBadCharactersGreen;
32397 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32398 TerminalBadCharactersGreen(
32399 Arc::new(GreenNode {
32400 kind: SyntaxKind::TerminalBadCharacters,
32401 details: GreenNodeDetails::Node {
32402 children: [
32403 Trivia::missing(db).0,
32404 TokenBadCharacters::missing(db).0,
32405 Trivia::missing(db).0,
32406 ]
32407 .into(),
32408 width: TextWidth::default(),
32409 },
32410 })
32411 .intern(db),
32412 )
32413 }
32414 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32415 let kind = node.kind(db);
32416 assert_eq!(
32417 kind,
32418 SyntaxKind::TerminalBadCharacters,
32419 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32420 kind,
32421 SyntaxKind::TerminalBadCharacters
32422 );
32423 Self { node }
32424 }
32425 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32426 let kind = node.kind(db);
32427 if kind == SyntaxKind::TerminalBadCharacters {
32428 Some(Self::from_syntax_node(db, node))
32429 } else {
32430 None
32431 }
32432 }
32433 fn as_syntax_node(&self) -> SyntaxNode {
32434 self.node
32435 }
32436 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32437 TerminalBadCharactersPtr(self.node.stable_ptr(db))
32438 }
32439}
32440#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32441pub struct TokenColon {
32442 node: SyntaxNode,
32443}
32444impl Token for TokenColon {
32445 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32446 TokenColonGreen(
32447 Arc::new(GreenNode {
32448 kind: SyntaxKind::TokenColon,
32449 details: GreenNodeDetails::Token(text),
32450 })
32451 .intern(db),
32452 )
32453 }
32454 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32455 extract_matches!(
32456 &self.node.lookup_intern(db).green.lookup_intern(db).details,
32457 GreenNodeDetails::Token
32458 )
32459 .clone()
32460 }
32461}
32462#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32463pub struct TokenColonPtr(pub SyntaxStablePtrId);
32464impl TypedStablePtr for TokenColonPtr {
32465 type SyntaxNode = TokenColon;
32466 fn untyped(&self) -> SyntaxStablePtrId {
32467 self.0
32468 }
32469 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColon {
32470 TokenColon::from_syntax_node(db, self.0.lookup(db))
32471 }
32472}
32473impl From<TokenColonPtr> for SyntaxStablePtrId {
32474 fn from(ptr: TokenColonPtr) -> Self {
32475 ptr.untyped()
32476 }
32477}
32478#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32479pub struct TokenColonGreen(pub GreenId);
32480impl TokenColonGreen {
32481 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32482 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32483 }
32484}
32485impl TypedSyntaxNode for TokenColon {
32486 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColon);
32487 type StablePtr = TokenColonPtr;
32488 type Green = TokenColonGreen;
32489 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32490 TokenColonGreen(
32491 Arc::new(GreenNode {
32492 kind: SyntaxKind::TokenMissing,
32493 details: GreenNodeDetails::Token("".into()),
32494 })
32495 .intern(db),
32496 )
32497 }
32498 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32499 match node.lookup_intern(db).green.lookup_intern(db).details {
32500 GreenNodeDetails::Token(_) => Self { node },
32501 GreenNodeDetails::Node { .. } => {
32502 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColon)
32503 }
32504 }
32505 }
32506 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32507 match node.lookup_intern(db).green.lookup_intern(db).details {
32508 GreenNodeDetails::Token(_) => Some(Self { node }),
32509 GreenNodeDetails::Node { .. } => None,
32510 }
32511 }
32512 fn as_syntax_node(&self) -> SyntaxNode {
32513 self.node
32514 }
32515 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32516 TokenColonPtr(self.node.stable_ptr(db))
32517 }
32518}
32519#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32520pub struct TerminalColon {
32521 node: SyntaxNode,
32522}
32523impl Terminal for TerminalColon {
32524 const KIND: SyntaxKind = SyntaxKind::TerminalColon;
32525 type TokenType = TokenColon;
32526 fn new_green(
32527 db: &dyn SyntaxGroup,
32528 leading_trivia: TriviaGreen,
32529 token: <<TerminalColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
32530 trailing_trivia: TriviaGreen,
32531 ) -> Self::Green {
32532 let children = [leading_trivia.0, token.0, trailing_trivia.0];
32533 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
32534 TerminalColonGreen(
32535 Arc::new(GreenNode {
32536 kind: SyntaxKind::TerminalColon,
32537 details: GreenNodeDetails::Node { children: children.into(), width },
32538 })
32539 .intern(db),
32540 )
32541 }
32542 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32543 let GreenNodeDetails::Node { children, .. } =
32544 &self.node.lookup_intern(db).green.lookup_intern(db).details
32545 else {
32546 unreachable!("Expected a node, not a token");
32547 };
32548 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
32549 }
32550}
32551impl TerminalColon {
32552 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32553 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
32554 }
32555 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColon {
32556 TokenColon::from_syntax_node(db, self.node.get_children(db)[1])
32557 }
32558 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32559 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
32560 }
32561}
32562#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32563pub struct TerminalColonPtr(pub SyntaxStablePtrId);
32564impl TerminalColonPtr {}
32565impl TypedStablePtr for TerminalColonPtr {
32566 type SyntaxNode = TerminalColon;
32567 fn untyped(&self) -> SyntaxStablePtrId {
32568 self.0
32569 }
32570 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColon {
32571 TerminalColon::from_syntax_node(db, self.0.lookup(db))
32572 }
32573}
32574impl From<TerminalColonPtr> for SyntaxStablePtrId {
32575 fn from(ptr: TerminalColonPtr) -> Self {
32576 ptr.untyped()
32577 }
32578}
32579#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32580pub struct TerminalColonGreen(pub GreenId);
32581impl TypedSyntaxNode for TerminalColon {
32582 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColon);
32583 type StablePtr = TerminalColonPtr;
32584 type Green = TerminalColonGreen;
32585 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32586 TerminalColonGreen(
32587 Arc::new(GreenNode {
32588 kind: SyntaxKind::TerminalColon,
32589 details: GreenNodeDetails::Node {
32590 children: [
32591 Trivia::missing(db).0,
32592 TokenColon::missing(db).0,
32593 Trivia::missing(db).0,
32594 ]
32595 .into(),
32596 width: TextWidth::default(),
32597 },
32598 })
32599 .intern(db),
32600 )
32601 }
32602 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32603 let kind = node.kind(db);
32604 assert_eq!(
32605 kind,
32606 SyntaxKind::TerminalColon,
32607 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32608 kind,
32609 SyntaxKind::TerminalColon
32610 );
32611 Self { node }
32612 }
32613 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32614 let kind = node.kind(db);
32615 if kind == SyntaxKind::TerminalColon {
32616 Some(Self::from_syntax_node(db, node))
32617 } else {
32618 None
32619 }
32620 }
32621 fn as_syntax_node(&self) -> SyntaxNode {
32622 self.node
32623 }
32624 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32625 TerminalColonPtr(self.node.stable_ptr(db))
32626 }
32627}
32628#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32629pub struct TokenColonColon {
32630 node: SyntaxNode,
32631}
32632impl Token for TokenColonColon {
32633 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32634 TokenColonColonGreen(
32635 Arc::new(GreenNode {
32636 kind: SyntaxKind::TokenColonColon,
32637 details: GreenNodeDetails::Token(text),
32638 })
32639 .intern(db),
32640 )
32641 }
32642 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32643 extract_matches!(
32644 &self.node.lookup_intern(db).green.lookup_intern(db).details,
32645 GreenNodeDetails::Token
32646 )
32647 .clone()
32648 }
32649}
32650#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32651pub struct TokenColonColonPtr(pub SyntaxStablePtrId);
32652impl TypedStablePtr for TokenColonColonPtr {
32653 type SyntaxNode = TokenColonColon;
32654 fn untyped(&self) -> SyntaxStablePtrId {
32655 self.0
32656 }
32657 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
32658 TokenColonColon::from_syntax_node(db, self.0.lookup(db))
32659 }
32660}
32661impl From<TokenColonColonPtr> for SyntaxStablePtrId {
32662 fn from(ptr: TokenColonColonPtr) -> Self {
32663 ptr.untyped()
32664 }
32665}
32666#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32667pub struct TokenColonColonGreen(pub GreenId);
32668impl TokenColonColonGreen {
32669 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32670 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32671 }
32672}
32673impl TypedSyntaxNode for TokenColonColon {
32674 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColonColon);
32675 type StablePtr = TokenColonColonPtr;
32676 type Green = TokenColonColonGreen;
32677 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32678 TokenColonColonGreen(
32679 Arc::new(GreenNode {
32680 kind: SyntaxKind::TokenMissing,
32681 details: GreenNodeDetails::Token("".into()),
32682 })
32683 .intern(db),
32684 )
32685 }
32686 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32687 match node.lookup_intern(db).green.lookup_intern(db).details {
32688 GreenNodeDetails::Token(_) => Self { node },
32689 GreenNodeDetails::Node { .. } => {
32690 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColonColon)
32691 }
32692 }
32693 }
32694 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32695 match node.lookup_intern(db).green.lookup_intern(db).details {
32696 GreenNodeDetails::Token(_) => Some(Self { node }),
32697 GreenNodeDetails::Node { .. } => None,
32698 }
32699 }
32700 fn as_syntax_node(&self) -> SyntaxNode {
32701 self.node
32702 }
32703 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32704 TokenColonColonPtr(self.node.stable_ptr(db))
32705 }
32706}
32707#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32708pub struct TerminalColonColon {
32709 node: SyntaxNode,
32710}
32711impl Terminal for TerminalColonColon {
32712 const KIND: SyntaxKind = SyntaxKind::TerminalColonColon;
32713 type TokenType = TokenColonColon;
32714 fn new_green(
32715 db: &dyn SyntaxGroup,
32716 leading_trivia: TriviaGreen,
32717 token: <<TerminalColonColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
32718 trailing_trivia: TriviaGreen,
32719 ) -> Self::Green {
32720 let children = [leading_trivia.0, token.0, trailing_trivia.0];
32721 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
32722 TerminalColonColonGreen(
32723 Arc::new(GreenNode {
32724 kind: SyntaxKind::TerminalColonColon,
32725 details: GreenNodeDetails::Node { children: children.into(), width },
32726 })
32727 .intern(db),
32728 )
32729 }
32730 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32731 let GreenNodeDetails::Node { children, .. } =
32732 &self.node.lookup_intern(db).green.lookup_intern(db).details
32733 else {
32734 unreachable!("Expected a node, not a token");
32735 };
32736 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
32737 }
32738}
32739impl TerminalColonColon {
32740 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32741 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
32742 }
32743 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
32744 TokenColonColon::from_syntax_node(db, self.node.get_children(db)[1])
32745 }
32746 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32747 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
32748 }
32749}
32750#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32751pub struct TerminalColonColonPtr(pub SyntaxStablePtrId);
32752impl TerminalColonColonPtr {}
32753impl TypedStablePtr for TerminalColonColonPtr {
32754 type SyntaxNode = TerminalColonColon;
32755 fn untyped(&self) -> SyntaxStablePtrId {
32756 self.0
32757 }
32758 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
32759 TerminalColonColon::from_syntax_node(db, self.0.lookup(db))
32760 }
32761}
32762impl From<TerminalColonColonPtr> for SyntaxStablePtrId {
32763 fn from(ptr: TerminalColonColonPtr) -> Self {
32764 ptr.untyped()
32765 }
32766}
32767#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32768pub struct TerminalColonColonGreen(pub GreenId);
32769impl TypedSyntaxNode for TerminalColonColon {
32770 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColonColon);
32771 type StablePtr = TerminalColonColonPtr;
32772 type Green = TerminalColonColonGreen;
32773 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32774 TerminalColonColonGreen(
32775 Arc::new(GreenNode {
32776 kind: SyntaxKind::TerminalColonColon,
32777 details: GreenNodeDetails::Node {
32778 children: [
32779 Trivia::missing(db).0,
32780 TokenColonColon::missing(db).0,
32781 Trivia::missing(db).0,
32782 ]
32783 .into(),
32784 width: TextWidth::default(),
32785 },
32786 })
32787 .intern(db),
32788 )
32789 }
32790 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32791 let kind = node.kind(db);
32792 assert_eq!(
32793 kind,
32794 SyntaxKind::TerminalColonColon,
32795 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32796 kind,
32797 SyntaxKind::TerminalColonColon
32798 );
32799 Self { node }
32800 }
32801 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32802 let kind = node.kind(db);
32803 if kind == SyntaxKind::TerminalColonColon {
32804 Some(Self::from_syntax_node(db, node))
32805 } else {
32806 None
32807 }
32808 }
32809 fn as_syntax_node(&self) -> SyntaxNode {
32810 self.node
32811 }
32812 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32813 TerminalColonColonPtr(self.node.stable_ptr(db))
32814 }
32815}
32816#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32817pub struct TokenComma {
32818 node: SyntaxNode,
32819}
32820impl Token for TokenComma {
32821 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32822 TokenCommaGreen(
32823 Arc::new(GreenNode {
32824 kind: SyntaxKind::TokenComma,
32825 details: GreenNodeDetails::Token(text),
32826 })
32827 .intern(db),
32828 )
32829 }
32830 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32831 extract_matches!(
32832 &self.node.lookup_intern(db).green.lookup_intern(db).details,
32833 GreenNodeDetails::Token
32834 )
32835 .clone()
32836 }
32837}
32838#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32839pub struct TokenCommaPtr(pub SyntaxStablePtrId);
32840impl TypedStablePtr for TokenCommaPtr {
32841 type SyntaxNode = TokenComma;
32842 fn untyped(&self) -> SyntaxStablePtrId {
32843 self.0
32844 }
32845 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenComma {
32846 TokenComma::from_syntax_node(db, self.0.lookup(db))
32847 }
32848}
32849impl From<TokenCommaPtr> for SyntaxStablePtrId {
32850 fn from(ptr: TokenCommaPtr) -> Self {
32851 ptr.untyped()
32852 }
32853}
32854#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32855pub struct TokenCommaGreen(pub GreenId);
32856impl TokenCommaGreen {
32857 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32858 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32859 }
32860}
32861impl TypedSyntaxNode for TokenComma {
32862 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenComma);
32863 type StablePtr = TokenCommaPtr;
32864 type Green = TokenCommaGreen;
32865 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32866 TokenCommaGreen(
32867 Arc::new(GreenNode {
32868 kind: SyntaxKind::TokenMissing,
32869 details: GreenNodeDetails::Token("".into()),
32870 })
32871 .intern(db),
32872 )
32873 }
32874 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32875 match node.lookup_intern(db).green.lookup_intern(db).details {
32876 GreenNodeDetails::Token(_) => Self { node },
32877 GreenNodeDetails::Node { .. } => {
32878 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenComma)
32879 }
32880 }
32881 }
32882 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32883 match node.lookup_intern(db).green.lookup_intern(db).details {
32884 GreenNodeDetails::Token(_) => Some(Self { node }),
32885 GreenNodeDetails::Node { .. } => None,
32886 }
32887 }
32888 fn as_syntax_node(&self) -> SyntaxNode {
32889 self.node
32890 }
32891 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
32892 TokenCommaPtr(self.node.stable_ptr(db))
32893 }
32894}
32895#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32896pub struct TerminalComma {
32897 node: SyntaxNode,
32898}
32899impl Terminal for TerminalComma {
32900 const KIND: SyntaxKind = SyntaxKind::TerminalComma;
32901 type TokenType = TokenComma;
32902 fn new_green(
32903 db: &dyn SyntaxGroup,
32904 leading_trivia: TriviaGreen,
32905 token: <<TerminalComma as Terminal>::TokenType as TypedSyntaxNode>::Green,
32906 trailing_trivia: TriviaGreen,
32907 ) -> Self::Green {
32908 let children = [leading_trivia.0, token.0, trailing_trivia.0];
32909 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
32910 TerminalCommaGreen(
32911 Arc::new(GreenNode {
32912 kind: SyntaxKind::TerminalComma,
32913 details: GreenNodeDetails::Node { children: children.into(), width },
32914 })
32915 .intern(db),
32916 )
32917 }
32918 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32919 let GreenNodeDetails::Node { children, .. } =
32920 &self.node.lookup_intern(db).green.lookup_intern(db).details
32921 else {
32922 unreachable!("Expected a node, not a token");
32923 };
32924 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
32925 }
32926}
32927impl TerminalComma {
32928 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32929 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
32930 }
32931 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenComma {
32932 TokenComma::from_syntax_node(db, self.node.get_children(db)[1])
32933 }
32934 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32935 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
32936 }
32937}
32938#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32939pub struct TerminalCommaPtr(pub SyntaxStablePtrId);
32940impl TerminalCommaPtr {}
32941impl TypedStablePtr for TerminalCommaPtr {
32942 type SyntaxNode = TerminalComma;
32943 fn untyped(&self) -> SyntaxStablePtrId {
32944 self.0
32945 }
32946 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalComma {
32947 TerminalComma::from_syntax_node(db, self.0.lookup(db))
32948 }
32949}
32950impl From<TerminalCommaPtr> for SyntaxStablePtrId {
32951 fn from(ptr: TerminalCommaPtr) -> Self {
32952 ptr.untyped()
32953 }
32954}
32955#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32956pub struct TerminalCommaGreen(pub GreenId);
32957impl TypedSyntaxNode for TerminalComma {
32958 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalComma);
32959 type StablePtr = TerminalCommaPtr;
32960 type Green = TerminalCommaGreen;
32961 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32962 TerminalCommaGreen(
32963 Arc::new(GreenNode {
32964 kind: SyntaxKind::TerminalComma,
32965 details: GreenNodeDetails::Node {
32966 children: [
32967 Trivia::missing(db).0,
32968 TokenComma::missing(db).0,
32969 Trivia::missing(db).0,
32970 ]
32971 .into(),
32972 width: TextWidth::default(),
32973 },
32974 })
32975 .intern(db),
32976 )
32977 }
32978 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32979 let kind = node.kind(db);
32980 assert_eq!(
32981 kind,
32982 SyntaxKind::TerminalComma,
32983 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32984 kind,
32985 SyntaxKind::TerminalComma
32986 );
32987 Self { node }
32988 }
32989 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32990 let kind = node.kind(db);
32991 if kind == SyntaxKind::TerminalComma {
32992 Some(Self::from_syntax_node(db, node))
32993 } else {
32994 None
32995 }
32996 }
32997 fn as_syntax_node(&self) -> SyntaxNode {
32998 self.node
32999 }
33000 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33001 TerminalCommaPtr(self.node.stable_ptr(db))
33002 }
33003}
33004#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33005pub struct TokenDiv {
33006 node: SyntaxNode,
33007}
33008impl Token for TokenDiv {
33009 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33010 TokenDivGreen(
33011 Arc::new(GreenNode {
33012 kind: SyntaxKind::TokenDiv,
33013 details: GreenNodeDetails::Token(text),
33014 })
33015 .intern(db),
33016 )
33017 }
33018 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33019 extract_matches!(
33020 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33021 GreenNodeDetails::Token
33022 )
33023 .clone()
33024 }
33025}
33026#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33027pub struct TokenDivPtr(pub SyntaxStablePtrId);
33028impl TypedStablePtr for TokenDivPtr {
33029 type SyntaxNode = TokenDiv;
33030 fn untyped(&self) -> SyntaxStablePtrId {
33031 self.0
33032 }
33033 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDiv {
33034 TokenDiv::from_syntax_node(db, self.0.lookup(db))
33035 }
33036}
33037impl From<TokenDivPtr> for SyntaxStablePtrId {
33038 fn from(ptr: TokenDivPtr) -> Self {
33039 ptr.untyped()
33040 }
33041}
33042#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33043pub struct TokenDivGreen(pub GreenId);
33044impl TokenDivGreen {
33045 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33046 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33047 }
33048}
33049impl TypedSyntaxNode for TokenDiv {
33050 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDiv);
33051 type StablePtr = TokenDivPtr;
33052 type Green = TokenDivGreen;
33053 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33054 TokenDivGreen(
33055 Arc::new(GreenNode {
33056 kind: SyntaxKind::TokenMissing,
33057 details: GreenNodeDetails::Token("".into()),
33058 })
33059 .intern(db),
33060 )
33061 }
33062 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33063 match node.lookup_intern(db).green.lookup_intern(db).details {
33064 GreenNodeDetails::Token(_) => Self { node },
33065 GreenNodeDetails::Node { .. } => {
33066 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDiv)
33067 }
33068 }
33069 }
33070 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33071 match node.lookup_intern(db).green.lookup_intern(db).details {
33072 GreenNodeDetails::Token(_) => Some(Self { node }),
33073 GreenNodeDetails::Node { .. } => None,
33074 }
33075 }
33076 fn as_syntax_node(&self) -> SyntaxNode {
33077 self.node
33078 }
33079 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33080 TokenDivPtr(self.node.stable_ptr(db))
33081 }
33082}
33083#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33084pub struct TerminalDiv {
33085 node: SyntaxNode,
33086}
33087impl Terminal for TerminalDiv {
33088 const KIND: SyntaxKind = SyntaxKind::TerminalDiv;
33089 type TokenType = TokenDiv;
33090 fn new_green(
33091 db: &dyn SyntaxGroup,
33092 leading_trivia: TriviaGreen,
33093 token: <<TerminalDiv as Terminal>::TokenType as TypedSyntaxNode>::Green,
33094 trailing_trivia: TriviaGreen,
33095 ) -> Self::Green {
33096 let children = [leading_trivia.0, token.0, trailing_trivia.0];
33097 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
33098 TerminalDivGreen(
33099 Arc::new(GreenNode {
33100 kind: SyntaxKind::TerminalDiv,
33101 details: GreenNodeDetails::Node { children: children.into(), width },
33102 })
33103 .intern(db),
33104 )
33105 }
33106 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33107 let GreenNodeDetails::Node { children, .. } =
33108 &self.node.lookup_intern(db).green.lookup_intern(db).details
33109 else {
33110 unreachable!("Expected a node, not a token");
33111 };
33112 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
33113 }
33114}
33115impl TerminalDiv {
33116 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33117 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
33118 }
33119 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDiv {
33120 TokenDiv::from_syntax_node(db, self.node.get_children(db)[1])
33121 }
33122 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33123 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
33124 }
33125}
33126#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33127pub struct TerminalDivPtr(pub SyntaxStablePtrId);
33128impl TerminalDivPtr {}
33129impl TypedStablePtr for TerminalDivPtr {
33130 type SyntaxNode = TerminalDiv;
33131 fn untyped(&self) -> SyntaxStablePtrId {
33132 self.0
33133 }
33134 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDiv {
33135 TerminalDiv::from_syntax_node(db, self.0.lookup(db))
33136 }
33137}
33138impl From<TerminalDivPtr> for SyntaxStablePtrId {
33139 fn from(ptr: TerminalDivPtr) -> Self {
33140 ptr.untyped()
33141 }
33142}
33143#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33144pub struct TerminalDivGreen(pub GreenId);
33145impl TypedSyntaxNode for TerminalDiv {
33146 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDiv);
33147 type StablePtr = TerminalDivPtr;
33148 type Green = TerminalDivGreen;
33149 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33150 TerminalDivGreen(
33151 Arc::new(GreenNode {
33152 kind: SyntaxKind::TerminalDiv,
33153 details: GreenNodeDetails::Node {
33154 children: [
33155 Trivia::missing(db).0,
33156 TokenDiv::missing(db).0,
33157 Trivia::missing(db).0,
33158 ]
33159 .into(),
33160 width: TextWidth::default(),
33161 },
33162 })
33163 .intern(db),
33164 )
33165 }
33166 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33167 let kind = node.kind(db);
33168 assert_eq!(
33169 kind,
33170 SyntaxKind::TerminalDiv,
33171 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33172 kind,
33173 SyntaxKind::TerminalDiv
33174 );
33175 Self { node }
33176 }
33177 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33178 let kind = node.kind(db);
33179 if kind == SyntaxKind::TerminalDiv { Some(Self::from_syntax_node(db, node)) } else { None }
33180 }
33181 fn as_syntax_node(&self) -> SyntaxNode {
33182 self.node
33183 }
33184 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33185 TerminalDivPtr(self.node.stable_ptr(db))
33186 }
33187}
33188#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33189pub struct TokenDivEq {
33190 node: SyntaxNode,
33191}
33192impl Token for TokenDivEq {
33193 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33194 TokenDivEqGreen(
33195 Arc::new(GreenNode {
33196 kind: SyntaxKind::TokenDivEq,
33197 details: GreenNodeDetails::Token(text),
33198 })
33199 .intern(db),
33200 )
33201 }
33202 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33203 extract_matches!(
33204 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33205 GreenNodeDetails::Token
33206 )
33207 .clone()
33208 }
33209}
33210#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33211pub struct TokenDivEqPtr(pub SyntaxStablePtrId);
33212impl TypedStablePtr for TokenDivEqPtr {
33213 type SyntaxNode = TokenDivEq;
33214 fn untyped(&self) -> SyntaxStablePtrId {
33215 self.0
33216 }
33217 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
33218 TokenDivEq::from_syntax_node(db, self.0.lookup(db))
33219 }
33220}
33221impl From<TokenDivEqPtr> for SyntaxStablePtrId {
33222 fn from(ptr: TokenDivEqPtr) -> Self {
33223 ptr.untyped()
33224 }
33225}
33226#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33227pub struct TokenDivEqGreen(pub GreenId);
33228impl TokenDivEqGreen {
33229 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33230 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33231 }
33232}
33233impl TypedSyntaxNode for TokenDivEq {
33234 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDivEq);
33235 type StablePtr = TokenDivEqPtr;
33236 type Green = TokenDivEqGreen;
33237 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33238 TokenDivEqGreen(
33239 Arc::new(GreenNode {
33240 kind: SyntaxKind::TokenMissing,
33241 details: GreenNodeDetails::Token("".into()),
33242 })
33243 .intern(db),
33244 )
33245 }
33246 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33247 match node.lookup_intern(db).green.lookup_intern(db).details {
33248 GreenNodeDetails::Token(_) => Self { node },
33249 GreenNodeDetails::Node { .. } => {
33250 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDivEq)
33251 }
33252 }
33253 }
33254 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33255 match node.lookup_intern(db).green.lookup_intern(db).details {
33256 GreenNodeDetails::Token(_) => Some(Self { node }),
33257 GreenNodeDetails::Node { .. } => None,
33258 }
33259 }
33260 fn as_syntax_node(&self) -> SyntaxNode {
33261 self.node
33262 }
33263 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33264 TokenDivEqPtr(self.node.stable_ptr(db))
33265 }
33266}
33267#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33268pub struct TerminalDivEq {
33269 node: SyntaxNode,
33270}
33271impl Terminal for TerminalDivEq {
33272 const KIND: SyntaxKind = SyntaxKind::TerminalDivEq;
33273 type TokenType = TokenDivEq;
33274 fn new_green(
33275 db: &dyn SyntaxGroup,
33276 leading_trivia: TriviaGreen,
33277 token: <<TerminalDivEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33278 trailing_trivia: TriviaGreen,
33279 ) -> Self::Green {
33280 let children = [leading_trivia.0, token.0, trailing_trivia.0];
33281 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
33282 TerminalDivEqGreen(
33283 Arc::new(GreenNode {
33284 kind: SyntaxKind::TerminalDivEq,
33285 details: GreenNodeDetails::Node { children: children.into(), width },
33286 })
33287 .intern(db),
33288 )
33289 }
33290 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33291 let GreenNodeDetails::Node { children, .. } =
33292 &self.node.lookup_intern(db).green.lookup_intern(db).details
33293 else {
33294 unreachable!("Expected a node, not a token");
33295 };
33296 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
33297 }
33298}
33299impl TerminalDivEq {
33300 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33301 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
33302 }
33303 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
33304 TokenDivEq::from_syntax_node(db, self.node.get_children(db)[1])
33305 }
33306 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33307 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
33308 }
33309}
33310#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33311pub struct TerminalDivEqPtr(pub SyntaxStablePtrId);
33312impl TerminalDivEqPtr {}
33313impl TypedStablePtr for TerminalDivEqPtr {
33314 type SyntaxNode = TerminalDivEq;
33315 fn untyped(&self) -> SyntaxStablePtrId {
33316 self.0
33317 }
33318 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDivEq {
33319 TerminalDivEq::from_syntax_node(db, self.0.lookup(db))
33320 }
33321}
33322impl From<TerminalDivEqPtr> for SyntaxStablePtrId {
33323 fn from(ptr: TerminalDivEqPtr) -> Self {
33324 ptr.untyped()
33325 }
33326}
33327#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33328pub struct TerminalDivEqGreen(pub GreenId);
33329impl TypedSyntaxNode for TerminalDivEq {
33330 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDivEq);
33331 type StablePtr = TerminalDivEqPtr;
33332 type Green = TerminalDivEqGreen;
33333 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33334 TerminalDivEqGreen(
33335 Arc::new(GreenNode {
33336 kind: SyntaxKind::TerminalDivEq,
33337 details: GreenNodeDetails::Node {
33338 children: [
33339 Trivia::missing(db).0,
33340 TokenDivEq::missing(db).0,
33341 Trivia::missing(db).0,
33342 ]
33343 .into(),
33344 width: TextWidth::default(),
33345 },
33346 })
33347 .intern(db),
33348 )
33349 }
33350 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33351 let kind = node.kind(db);
33352 assert_eq!(
33353 kind,
33354 SyntaxKind::TerminalDivEq,
33355 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33356 kind,
33357 SyntaxKind::TerminalDivEq
33358 );
33359 Self { node }
33360 }
33361 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33362 let kind = node.kind(db);
33363 if kind == SyntaxKind::TerminalDivEq {
33364 Some(Self::from_syntax_node(db, node))
33365 } else {
33366 None
33367 }
33368 }
33369 fn as_syntax_node(&self) -> SyntaxNode {
33370 self.node
33371 }
33372 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33373 TerminalDivEqPtr(self.node.stable_ptr(db))
33374 }
33375}
33376#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33377pub struct TokenDollar {
33378 node: SyntaxNode,
33379}
33380impl Token for TokenDollar {
33381 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33382 TokenDollarGreen(
33383 Arc::new(GreenNode {
33384 kind: SyntaxKind::TokenDollar,
33385 details: GreenNodeDetails::Token(text),
33386 })
33387 .intern(db),
33388 )
33389 }
33390 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33391 extract_matches!(
33392 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33393 GreenNodeDetails::Token
33394 )
33395 .clone()
33396 }
33397}
33398#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33399pub struct TokenDollarPtr(pub SyntaxStablePtrId);
33400impl TypedStablePtr for TokenDollarPtr {
33401 type SyntaxNode = TokenDollar;
33402 fn untyped(&self) -> SyntaxStablePtrId {
33403 self.0
33404 }
33405 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDollar {
33406 TokenDollar::from_syntax_node(db, self.0.lookup(db))
33407 }
33408}
33409impl From<TokenDollarPtr> for SyntaxStablePtrId {
33410 fn from(ptr: TokenDollarPtr) -> Self {
33411 ptr.untyped()
33412 }
33413}
33414#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33415pub struct TokenDollarGreen(pub GreenId);
33416impl TokenDollarGreen {
33417 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33418 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33419 }
33420}
33421impl TypedSyntaxNode for TokenDollar {
33422 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDollar);
33423 type StablePtr = TokenDollarPtr;
33424 type Green = TokenDollarGreen;
33425 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33426 TokenDollarGreen(
33427 Arc::new(GreenNode {
33428 kind: SyntaxKind::TokenMissing,
33429 details: GreenNodeDetails::Token("".into()),
33430 })
33431 .intern(db),
33432 )
33433 }
33434 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33435 match node.lookup_intern(db).green.lookup_intern(db).details {
33436 GreenNodeDetails::Token(_) => Self { node },
33437 GreenNodeDetails::Node { .. } => {
33438 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDollar)
33439 }
33440 }
33441 }
33442 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33443 match node.lookup_intern(db).green.lookup_intern(db).details {
33444 GreenNodeDetails::Token(_) => Some(Self { node }),
33445 GreenNodeDetails::Node { .. } => None,
33446 }
33447 }
33448 fn as_syntax_node(&self) -> SyntaxNode {
33449 self.node
33450 }
33451 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33452 TokenDollarPtr(self.node.stable_ptr(db))
33453 }
33454}
33455#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33456pub struct TerminalDollar {
33457 node: SyntaxNode,
33458}
33459impl Terminal for TerminalDollar {
33460 const KIND: SyntaxKind = SyntaxKind::TerminalDollar;
33461 type TokenType = TokenDollar;
33462 fn new_green(
33463 db: &dyn SyntaxGroup,
33464 leading_trivia: TriviaGreen,
33465 token: <<TerminalDollar as Terminal>::TokenType as TypedSyntaxNode>::Green,
33466 trailing_trivia: TriviaGreen,
33467 ) -> Self::Green {
33468 let children = [leading_trivia.0, token.0, trailing_trivia.0];
33469 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
33470 TerminalDollarGreen(
33471 Arc::new(GreenNode {
33472 kind: SyntaxKind::TerminalDollar,
33473 details: GreenNodeDetails::Node { children: children.into(), width },
33474 })
33475 .intern(db),
33476 )
33477 }
33478 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33479 let GreenNodeDetails::Node { children, .. } =
33480 &self.node.lookup_intern(db).green.lookup_intern(db).details
33481 else {
33482 unreachable!("Expected a node, not a token");
33483 };
33484 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
33485 }
33486}
33487impl TerminalDollar {
33488 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33489 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
33490 }
33491 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDollar {
33492 TokenDollar::from_syntax_node(db, self.node.get_children(db)[1])
33493 }
33494 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33495 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
33496 }
33497}
33498#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33499pub struct TerminalDollarPtr(pub SyntaxStablePtrId);
33500impl TerminalDollarPtr {}
33501impl TypedStablePtr for TerminalDollarPtr {
33502 type SyntaxNode = TerminalDollar;
33503 fn untyped(&self) -> SyntaxStablePtrId {
33504 self.0
33505 }
33506 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDollar {
33507 TerminalDollar::from_syntax_node(db, self.0.lookup(db))
33508 }
33509}
33510impl From<TerminalDollarPtr> for SyntaxStablePtrId {
33511 fn from(ptr: TerminalDollarPtr) -> Self {
33512 ptr.untyped()
33513 }
33514}
33515#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33516pub struct TerminalDollarGreen(pub GreenId);
33517impl TypedSyntaxNode for TerminalDollar {
33518 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDollar);
33519 type StablePtr = TerminalDollarPtr;
33520 type Green = TerminalDollarGreen;
33521 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33522 TerminalDollarGreen(
33523 Arc::new(GreenNode {
33524 kind: SyntaxKind::TerminalDollar,
33525 details: GreenNodeDetails::Node {
33526 children: [
33527 Trivia::missing(db).0,
33528 TokenDollar::missing(db).0,
33529 Trivia::missing(db).0,
33530 ]
33531 .into(),
33532 width: TextWidth::default(),
33533 },
33534 })
33535 .intern(db),
33536 )
33537 }
33538 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33539 let kind = node.kind(db);
33540 assert_eq!(
33541 kind,
33542 SyntaxKind::TerminalDollar,
33543 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33544 kind,
33545 SyntaxKind::TerminalDollar
33546 );
33547 Self { node }
33548 }
33549 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33550 let kind = node.kind(db);
33551 if kind == SyntaxKind::TerminalDollar {
33552 Some(Self::from_syntax_node(db, node))
33553 } else {
33554 None
33555 }
33556 }
33557 fn as_syntax_node(&self) -> SyntaxNode {
33558 self.node
33559 }
33560 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33561 TerminalDollarPtr(self.node.stable_ptr(db))
33562 }
33563}
33564#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33565pub struct TokenDot {
33566 node: SyntaxNode,
33567}
33568impl Token for TokenDot {
33569 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33570 TokenDotGreen(
33571 Arc::new(GreenNode {
33572 kind: SyntaxKind::TokenDot,
33573 details: GreenNodeDetails::Token(text),
33574 })
33575 .intern(db),
33576 )
33577 }
33578 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33579 extract_matches!(
33580 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33581 GreenNodeDetails::Token
33582 )
33583 .clone()
33584 }
33585}
33586#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33587pub struct TokenDotPtr(pub SyntaxStablePtrId);
33588impl TypedStablePtr for TokenDotPtr {
33589 type SyntaxNode = TokenDot;
33590 fn untyped(&self) -> SyntaxStablePtrId {
33591 self.0
33592 }
33593 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDot {
33594 TokenDot::from_syntax_node(db, self.0.lookup(db))
33595 }
33596}
33597impl From<TokenDotPtr> for SyntaxStablePtrId {
33598 fn from(ptr: TokenDotPtr) -> Self {
33599 ptr.untyped()
33600 }
33601}
33602#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33603pub struct TokenDotGreen(pub GreenId);
33604impl TokenDotGreen {
33605 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33606 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33607 }
33608}
33609impl TypedSyntaxNode for TokenDot {
33610 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDot);
33611 type StablePtr = TokenDotPtr;
33612 type Green = TokenDotGreen;
33613 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33614 TokenDotGreen(
33615 Arc::new(GreenNode {
33616 kind: SyntaxKind::TokenMissing,
33617 details: GreenNodeDetails::Token("".into()),
33618 })
33619 .intern(db),
33620 )
33621 }
33622 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33623 match node.lookup_intern(db).green.lookup_intern(db).details {
33624 GreenNodeDetails::Token(_) => Self { node },
33625 GreenNodeDetails::Node { .. } => {
33626 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDot)
33627 }
33628 }
33629 }
33630 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33631 match node.lookup_intern(db).green.lookup_intern(db).details {
33632 GreenNodeDetails::Token(_) => Some(Self { node }),
33633 GreenNodeDetails::Node { .. } => None,
33634 }
33635 }
33636 fn as_syntax_node(&self) -> SyntaxNode {
33637 self.node
33638 }
33639 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33640 TokenDotPtr(self.node.stable_ptr(db))
33641 }
33642}
33643#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33644pub struct TerminalDot {
33645 node: SyntaxNode,
33646}
33647impl Terminal for TerminalDot {
33648 const KIND: SyntaxKind = SyntaxKind::TerminalDot;
33649 type TokenType = TokenDot;
33650 fn new_green(
33651 db: &dyn SyntaxGroup,
33652 leading_trivia: TriviaGreen,
33653 token: <<TerminalDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
33654 trailing_trivia: TriviaGreen,
33655 ) -> Self::Green {
33656 let children = [leading_trivia.0, token.0, trailing_trivia.0];
33657 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
33658 TerminalDotGreen(
33659 Arc::new(GreenNode {
33660 kind: SyntaxKind::TerminalDot,
33661 details: GreenNodeDetails::Node { children: children.into(), width },
33662 })
33663 .intern(db),
33664 )
33665 }
33666 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33667 let GreenNodeDetails::Node { children, .. } =
33668 &self.node.lookup_intern(db).green.lookup_intern(db).details
33669 else {
33670 unreachable!("Expected a node, not a token");
33671 };
33672 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
33673 }
33674}
33675impl TerminalDot {
33676 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33677 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
33678 }
33679 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDot {
33680 TokenDot::from_syntax_node(db, self.node.get_children(db)[1])
33681 }
33682 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33683 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
33684 }
33685}
33686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33687pub struct TerminalDotPtr(pub SyntaxStablePtrId);
33688impl TerminalDotPtr {}
33689impl TypedStablePtr for TerminalDotPtr {
33690 type SyntaxNode = TerminalDot;
33691 fn untyped(&self) -> SyntaxStablePtrId {
33692 self.0
33693 }
33694 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDot {
33695 TerminalDot::from_syntax_node(db, self.0.lookup(db))
33696 }
33697}
33698impl From<TerminalDotPtr> for SyntaxStablePtrId {
33699 fn from(ptr: TerminalDotPtr) -> Self {
33700 ptr.untyped()
33701 }
33702}
33703#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33704pub struct TerminalDotGreen(pub GreenId);
33705impl TypedSyntaxNode for TerminalDot {
33706 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDot);
33707 type StablePtr = TerminalDotPtr;
33708 type Green = TerminalDotGreen;
33709 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33710 TerminalDotGreen(
33711 Arc::new(GreenNode {
33712 kind: SyntaxKind::TerminalDot,
33713 details: GreenNodeDetails::Node {
33714 children: [
33715 Trivia::missing(db).0,
33716 TokenDot::missing(db).0,
33717 Trivia::missing(db).0,
33718 ]
33719 .into(),
33720 width: TextWidth::default(),
33721 },
33722 })
33723 .intern(db),
33724 )
33725 }
33726 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33727 let kind = node.kind(db);
33728 assert_eq!(
33729 kind,
33730 SyntaxKind::TerminalDot,
33731 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33732 kind,
33733 SyntaxKind::TerminalDot
33734 );
33735 Self { node }
33736 }
33737 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33738 let kind = node.kind(db);
33739 if kind == SyntaxKind::TerminalDot { Some(Self::from_syntax_node(db, node)) } else { None }
33740 }
33741 fn as_syntax_node(&self) -> SyntaxNode {
33742 self.node
33743 }
33744 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33745 TerminalDotPtr(self.node.stable_ptr(db))
33746 }
33747}
33748#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33749pub struct TokenDotDot {
33750 node: SyntaxNode,
33751}
33752impl Token for TokenDotDot {
33753 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33754 TokenDotDotGreen(
33755 Arc::new(GreenNode {
33756 kind: SyntaxKind::TokenDotDot,
33757 details: GreenNodeDetails::Token(text),
33758 })
33759 .intern(db),
33760 )
33761 }
33762 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33763 extract_matches!(
33764 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33765 GreenNodeDetails::Token
33766 )
33767 .clone()
33768 }
33769}
33770#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33771pub struct TokenDotDotPtr(pub SyntaxStablePtrId);
33772impl TypedStablePtr for TokenDotDotPtr {
33773 type SyntaxNode = TokenDotDot;
33774 fn untyped(&self) -> SyntaxStablePtrId {
33775 self.0
33776 }
33777 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
33778 TokenDotDot::from_syntax_node(db, self.0.lookup(db))
33779 }
33780}
33781impl From<TokenDotDotPtr> for SyntaxStablePtrId {
33782 fn from(ptr: TokenDotDotPtr) -> Self {
33783 ptr.untyped()
33784 }
33785}
33786#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33787pub struct TokenDotDotGreen(pub GreenId);
33788impl TokenDotDotGreen {
33789 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33790 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33791 }
33792}
33793impl TypedSyntaxNode for TokenDotDot {
33794 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDot);
33795 type StablePtr = TokenDotDotPtr;
33796 type Green = TokenDotDotGreen;
33797 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33798 TokenDotDotGreen(
33799 Arc::new(GreenNode {
33800 kind: SyntaxKind::TokenMissing,
33801 details: GreenNodeDetails::Token("".into()),
33802 })
33803 .intern(db),
33804 )
33805 }
33806 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33807 match node.lookup_intern(db).green.lookup_intern(db).details {
33808 GreenNodeDetails::Token(_) => Self { node },
33809 GreenNodeDetails::Node { .. } => {
33810 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDot)
33811 }
33812 }
33813 }
33814 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33815 match node.lookup_intern(db).green.lookup_intern(db).details {
33816 GreenNodeDetails::Token(_) => Some(Self { node }),
33817 GreenNodeDetails::Node { .. } => None,
33818 }
33819 }
33820 fn as_syntax_node(&self) -> SyntaxNode {
33821 self.node
33822 }
33823 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33824 TokenDotDotPtr(self.node.stable_ptr(db))
33825 }
33826}
33827#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33828pub struct TerminalDotDot {
33829 node: SyntaxNode,
33830}
33831impl Terminal for TerminalDotDot {
33832 const KIND: SyntaxKind = SyntaxKind::TerminalDotDot;
33833 type TokenType = TokenDotDot;
33834 fn new_green(
33835 db: &dyn SyntaxGroup,
33836 leading_trivia: TriviaGreen,
33837 token: <<TerminalDotDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
33838 trailing_trivia: TriviaGreen,
33839 ) -> Self::Green {
33840 let children = [leading_trivia.0, token.0, trailing_trivia.0];
33841 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
33842 TerminalDotDotGreen(
33843 Arc::new(GreenNode {
33844 kind: SyntaxKind::TerminalDotDot,
33845 details: GreenNodeDetails::Node { children: children.into(), width },
33846 })
33847 .intern(db),
33848 )
33849 }
33850 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33851 let GreenNodeDetails::Node { children, .. } =
33852 &self.node.lookup_intern(db).green.lookup_intern(db).details
33853 else {
33854 unreachable!("Expected a node, not a token");
33855 };
33856 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
33857 }
33858}
33859impl TerminalDotDot {
33860 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33861 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
33862 }
33863 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
33864 TokenDotDot::from_syntax_node(db, self.node.get_children(db)[1])
33865 }
33866 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33867 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
33868 }
33869}
33870#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33871pub struct TerminalDotDotPtr(pub SyntaxStablePtrId);
33872impl TerminalDotDotPtr {}
33873impl TypedStablePtr for TerminalDotDotPtr {
33874 type SyntaxNode = TerminalDotDot;
33875 fn untyped(&self) -> SyntaxStablePtrId {
33876 self.0
33877 }
33878 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
33879 TerminalDotDot::from_syntax_node(db, self.0.lookup(db))
33880 }
33881}
33882impl From<TerminalDotDotPtr> for SyntaxStablePtrId {
33883 fn from(ptr: TerminalDotDotPtr) -> Self {
33884 ptr.untyped()
33885 }
33886}
33887#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33888pub struct TerminalDotDotGreen(pub GreenId);
33889impl TypedSyntaxNode for TerminalDotDot {
33890 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDot);
33891 type StablePtr = TerminalDotDotPtr;
33892 type Green = TerminalDotDotGreen;
33893 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33894 TerminalDotDotGreen(
33895 Arc::new(GreenNode {
33896 kind: SyntaxKind::TerminalDotDot,
33897 details: GreenNodeDetails::Node {
33898 children: [
33899 Trivia::missing(db).0,
33900 TokenDotDot::missing(db).0,
33901 Trivia::missing(db).0,
33902 ]
33903 .into(),
33904 width: TextWidth::default(),
33905 },
33906 })
33907 .intern(db),
33908 )
33909 }
33910 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33911 let kind = node.kind(db);
33912 assert_eq!(
33913 kind,
33914 SyntaxKind::TerminalDotDot,
33915 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33916 kind,
33917 SyntaxKind::TerminalDotDot
33918 );
33919 Self { node }
33920 }
33921 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33922 let kind = node.kind(db);
33923 if kind == SyntaxKind::TerminalDotDot {
33924 Some(Self::from_syntax_node(db, node))
33925 } else {
33926 None
33927 }
33928 }
33929 fn as_syntax_node(&self) -> SyntaxNode {
33930 self.node
33931 }
33932 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
33933 TerminalDotDotPtr(self.node.stable_ptr(db))
33934 }
33935}
33936#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33937pub struct TokenDotDotEq {
33938 node: SyntaxNode,
33939}
33940impl Token for TokenDotDotEq {
33941 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33942 TokenDotDotEqGreen(
33943 Arc::new(GreenNode {
33944 kind: SyntaxKind::TokenDotDotEq,
33945 details: GreenNodeDetails::Token(text),
33946 })
33947 .intern(db),
33948 )
33949 }
33950 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33951 extract_matches!(
33952 &self.node.lookup_intern(db).green.lookup_intern(db).details,
33953 GreenNodeDetails::Token
33954 )
33955 .clone()
33956 }
33957}
33958#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33959pub struct TokenDotDotEqPtr(pub SyntaxStablePtrId);
33960impl TypedStablePtr for TokenDotDotEqPtr {
33961 type SyntaxNode = TokenDotDotEq;
33962 fn untyped(&self) -> SyntaxStablePtrId {
33963 self.0
33964 }
33965 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
33966 TokenDotDotEq::from_syntax_node(db, self.0.lookup(db))
33967 }
33968}
33969impl From<TokenDotDotEqPtr> for SyntaxStablePtrId {
33970 fn from(ptr: TokenDotDotEqPtr) -> Self {
33971 ptr.untyped()
33972 }
33973}
33974#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33975pub struct TokenDotDotEqGreen(pub GreenId);
33976impl TokenDotDotEqGreen {
33977 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33978 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33979 }
33980}
33981impl TypedSyntaxNode for TokenDotDotEq {
33982 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDotEq);
33983 type StablePtr = TokenDotDotEqPtr;
33984 type Green = TokenDotDotEqGreen;
33985 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33986 TokenDotDotEqGreen(
33987 Arc::new(GreenNode {
33988 kind: SyntaxKind::TokenMissing,
33989 details: GreenNodeDetails::Token("".into()),
33990 })
33991 .intern(db),
33992 )
33993 }
33994 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33995 match node.lookup_intern(db).green.lookup_intern(db).details {
33996 GreenNodeDetails::Token(_) => Self { node },
33997 GreenNodeDetails::Node { .. } => {
33998 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDotEq)
33999 }
34000 }
34001 }
34002 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34003 match node.lookup_intern(db).green.lookup_intern(db).details {
34004 GreenNodeDetails::Token(_) => Some(Self { node }),
34005 GreenNodeDetails::Node { .. } => None,
34006 }
34007 }
34008 fn as_syntax_node(&self) -> SyntaxNode {
34009 self.node
34010 }
34011 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34012 TokenDotDotEqPtr(self.node.stable_ptr(db))
34013 }
34014}
34015#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34016pub struct TerminalDotDotEq {
34017 node: SyntaxNode,
34018}
34019impl Terminal for TerminalDotDotEq {
34020 const KIND: SyntaxKind = SyntaxKind::TerminalDotDotEq;
34021 type TokenType = TokenDotDotEq;
34022 fn new_green(
34023 db: &dyn SyntaxGroup,
34024 leading_trivia: TriviaGreen,
34025 token: <<TerminalDotDotEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
34026 trailing_trivia: TriviaGreen,
34027 ) -> Self::Green {
34028 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34029 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34030 TerminalDotDotEqGreen(
34031 Arc::new(GreenNode {
34032 kind: SyntaxKind::TerminalDotDotEq,
34033 details: GreenNodeDetails::Node { children: children.into(), width },
34034 })
34035 .intern(db),
34036 )
34037 }
34038 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34039 let GreenNodeDetails::Node { children, .. } =
34040 &self.node.lookup_intern(db).green.lookup_intern(db).details
34041 else {
34042 unreachable!("Expected a node, not a token");
34043 };
34044 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34045 }
34046}
34047impl TerminalDotDotEq {
34048 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34049 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34050 }
34051 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
34052 TokenDotDotEq::from_syntax_node(db, self.node.get_children(db)[1])
34053 }
34054 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34055 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34056 }
34057}
34058#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34059pub struct TerminalDotDotEqPtr(pub SyntaxStablePtrId);
34060impl TerminalDotDotEqPtr {}
34061impl TypedStablePtr for TerminalDotDotEqPtr {
34062 type SyntaxNode = TerminalDotDotEq;
34063 fn untyped(&self) -> SyntaxStablePtrId {
34064 self.0
34065 }
34066 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDotEq {
34067 TerminalDotDotEq::from_syntax_node(db, self.0.lookup(db))
34068 }
34069}
34070impl From<TerminalDotDotEqPtr> for SyntaxStablePtrId {
34071 fn from(ptr: TerminalDotDotEqPtr) -> Self {
34072 ptr.untyped()
34073 }
34074}
34075#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34076pub struct TerminalDotDotEqGreen(pub GreenId);
34077impl TypedSyntaxNode for TerminalDotDotEq {
34078 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDotEq);
34079 type StablePtr = TerminalDotDotEqPtr;
34080 type Green = TerminalDotDotEqGreen;
34081 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34082 TerminalDotDotEqGreen(
34083 Arc::new(GreenNode {
34084 kind: SyntaxKind::TerminalDotDotEq,
34085 details: GreenNodeDetails::Node {
34086 children: [
34087 Trivia::missing(db).0,
34088 TokenDotDotEq::missing(db).0,
34089 Trivia::missing(db).0,
34090 ]
34091 .into(),
34092 width: TextWidth::default(),
34093 },
34094 })
34095 .intern(db),
34096 )
34097 }
34098 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34099 let kind = node.kind(db);
34100 assert_eq!(
34101 kind,
34102 SyntaxKind::TerminalDotDotEq,
34103 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34104 kind,
34105 SyntaxKind::TerminalDotDotEq
34106 );
34107 Self { node }
34108 }
34109 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34110 let kind = node.kind(db);
34111 if kind == SyntaxKind::TerminalDotDotEq {
34112 Some(Self::from_syntax_node(db, node))
34113 } else {
34114 None
34115 }
34116 }
34117 fn as_syntax_node(&self) -> SyntaxNode {
34118 self.node
34119 }
34120 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34121 TerminalDotDotEqPtr(self.node.stable_ptr(db))
34122 }
34123}
34124#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34125pub struct TokenEndOfFile {
34126 node: SyntaxNode,
34127}
34128impl Token for TokenEndOfFile {
34129 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34130 TokenEndOfFileGreen(
34131 Arc::new(GreenNode {
34132 kind: SyntaxKind::TokenEndOfFile,
34133 details: GreenNodeDetails::Token(text),
34134 })
34135 .intern(db),
34136 )
34137 }
34138 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34139 extract_matches!(
34140 &self.node.lookup_intern(db).green.lookup_intern(db).details,
34141 GreenNodeDetails::Token
34142 )
34143 .clone()
34144 }
34145}
34146#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34147pub struct TokenEndOfFilePtr(pub SyntaxStablePtrId);
34148impl TypedStablePtr for TokenEndOfFilePtr {
34149 type SyntaxNode = TokenEndOfFile;
34150 fn untyped(&self) -> SyntaxStablePtrId {
34151 self.0
34152 }
34153 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
34154 TokenEndOfFile::from_syntax_node(db, self.0.lookup(db))
34155 }
34156}
34157impl From<TokenEndOfFilePtr> for SyntaxStablePtrId {
34158 fn from(ptr: TokenEndOfFilePtr) -> Self {
34159 ptr.untyped()
34160 }
34161}
34162#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34163pub struct TokenEndOfFileGreen(pub GreenId);
34164impl TokenEndOfFileGreen {
34165 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34166 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34167 }
34168}
34169impl TypedSyntaxNode for TokenEndOfFile {
34170 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEndOfFile);
34171 type StablePtr = TokenEndOfFilePtr;
34172 type Green = TokenEndOfFileGreen;
34173 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34174 TokenEndOfFileGreen(
34175 Arc::new(GreenNode {
34176 kind: SyntaxKind::TokenMissing,
34177 details: GreenNodeDetails::Token("".into()),
34178 })
34179 .intern(db),
34180 )
34181 }
34182 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34183 match node.lookup_intern(db).green.lookup_intern(db).details {
34184 GreenNodeDetails::Token(_) => Self { node },
34185 GreenNodeDetails::Node { .. } => {
34186 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEndOfFile)
34187 }
34188 }
34189 }
34190 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34191 match node.lookup_intern(db).green.lookup_intern(db).details {
34192 GreenNodeDetails::Token(_) => Some(Self { node }),
34193 GreenNodeDetails::Node { .. } => None,
34194 }
34195 }
34196 fn as_syntax_node(&self) -> SyntaxNode {
34197 self.node
34198 }
34199 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34200 TokenEndOfFilePtr(self.node.stable_ptr(db))
34201 }
34202}
34203#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34204pub struct TerminalEndOfFile {
34205 node: SyntaxNode,
34206}
34207impl Terminal for TerminalEndOfFile {
34208 const KIND: SyntaxKind = SyntaxKind::TerminalEndOfFile;
34209 type TokenType = TokenEndOfFile;
34210 fn new_green(
34211 db: &dyn SyntaxGroup,
34212 leading_trivia: TriviaGreen,
34213 token: <<TerminalEndOfFile as Terminal>::TokenType as TypedSyntaxNode>::Green,
34214 trailing_trivia: TriviaGreen,
34215 ) -> Self::Green {
34216 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34217 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34218 TerminalEndOfFileGreen(
34219 Arc::new(GreenNode {
34220 kind: SyntaxKind::TerminalEndOfFile,
34221 details: GreenNodeDetails::Node { children: children.into(), width },
34222 })
34223 .intern(db),
34224 )
34225 }
34226 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34227 let GreenNodeDetails::Node { children, .. } =
34228 &self.node.lookup_intern(db).green.lookup_intern(db).details
34229 else {
34230 unreachable!("Expected a node, not a token");
34231 };
34232 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34233 }
34234}
34235impl TerminalEndOfFile {
34236 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34237 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34238 }
34239 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
34240 TokenEndOfFile::from_syntax_node(db, self.node.get_children(db)[1])
34241 }
34242 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34243 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34244 }
34245}
34246#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34247pub struct TerminalEndOfFilePtr(pub SyntaxStablePtrId);
34248impl TerminalEndOfFilePtr {}
34249impl TypedStablePtr for TerminalEndOfFilePtr {
34250 type SyntaxNode = TerminalEndOfFile;
34251 fn untyped(&self) -> SyntaxStablePtrId {
34252 self.0
34253 }
34254 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
34255 TerminalEndOfFile::from_syntax_node(db, self.0.lookup(db))
34256 }
34257}
34258impl From<TerminalEndOfFilePtr> for SyntaxStablePtrId {
34259 fn from(ptr: TerminalEndOfFilePtr) -> Self {
34260 ptr.untyped()
34261 }
34262}
34263#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34264pub struct TerminalEndOfFileGreen(pub GreenId);
34265impl TypedSyntaxNode for TerminalEndOfFile {
34266 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEndOfFile);
34267 type StablePtr = TerminalEndOfFilePtr;
34268 type Green = TerminalEndOfFileGreen;
34269 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34270 TerminalEndOfFileGreen(
34271 Arc::new(GreenNode {
34272 kind: SyntaxKind::TerminalEndOfFile,
34273 details: GreenNodeDetails::Node {
34274 children: [
34275 Trivia::missing(db).0,
34276 TokenEndOfFile::missing(db).0,
34277 Trivia::missing(db).0,
34278 ]
34279 .into(),
34280 width: TextWidth::default(),
34281 },
34282 })
34283 .intern(db),
34284 )
34285 }
34286 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34287 let kind = node.kind(db);
34288 assert_eq!(
34289 kind,
34290 SyntaxKind::TerminalEndOfFile,
34291 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34292 kind,
34293 SyntaxKind::TerminalEndOfFile
34294 );
34295 Self { node }
34296 }
34297 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34298 let kind = node.kind(db);
34299 if kind == SyntaxKind::TerminalEndOfFile {
34300 Some(Self::from_syntax_node(db, node))
34301 } else {
34302 None
34303 }
34304 }
34305 fn as_syntax_node(&self) -> SyntaxNode {
34306 self.node
34307 }
34308 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34309 TerminalEndOfFilePtr(self.node.stable_ptr(db))
34310 }
34311}
34312#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34313pub struct TokenEq {
34314 node: SyntaxNode,
34315}
34316impl Token for TokenEq {
34317 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34318 TokenEqGreen(
34319 Arc::new(GreenNode {
34320 kind: SyntaxKind::TokenEq,
34321 details: GreenNodeDetails::Token(text),
34322 })
34323 .intern(db),
34324 )
34325 }
34326 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34327 extract_matches!(
34328 &self.node.lookup_intern(db).green.lookup_intern(db).details,
34329 GreenNodeDetails::Token
34330 )
34331 .clone()
34332 }
34333}
34334#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34335pub struct TokenEqPtr(pub SyntaxStablePtrId);
34336impl TypedStablePtr for TokenEqPtr {
34337 type SyntaxNode = TokenEq;
34338 fn untyped(&self) -> SyntaxStablePtrId {
34339 self.0
34340 }
34341 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEq {
34342 TokenEq::from_syntax_node(db, self.0.lookup(db))
34343 }
34344}
34345impl From<TokenEqPtr> for SyntaxStablePtrId {
34346 fn from(ptr: TokenEqPtr) -> Self {
34347 ptr.untyped()
34348 }
34349}
34350#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34351pub struct TokenEqGreen(pub GreenId);
34352impl TokenEqGreen {
34353 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34354 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34355 }
34356}
34357impl TypedSyntaxNode for TokenEq {
34358 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEq);
34359 type StablePtr = TokenEqPtr;
34360 type Green = TokenEqGreen;
34361 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34362 TokenEqGreen(
34363 Arc::new(GreenNode {
34364 kind: SyntaxKind::TokenMissing,
34365 details: GreenNodeDetails::Token("".into()),
34366 })
34367 .intern(db),
34368 )
34369 }
34370 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34371 match node.lookup_intern(db).green.lookup_intern(db).details {
34372 GreenNodeDetails::Token(_) => Self { node },
34373 GreenNodeDetails::Node { .. } => {
34374 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEq)
34375 }
34376 }
34377 }
34378 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34379 match node.lookup_intern(db).green.lookup_intern(db).details {
34380 GreenNodeDetails::Token(_) => Some(Self { node }),
34381 GreenNodeDetails::Node { .. } => None,
34382 }
34383 }
34384 fn as_syntax_node(&self) -> SyntaxNode {
34385 self.node
34386 }
34387 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34388 TokenEqPtr(self.node.stable_ptr(db))
34389 }
34390}
34391#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34392pub struct TerminalEq {
34393 node: SyntaxNode,
34394}
34395impl Terminal for TerminalEq {
34396 const KIND: SyntaxKind = SyntaxKind::TerminalEq;
34397 type TokenType = TokenEq;
34398 fn new_green(
34399 db: &dyn SyntaxGroup,
34400 leading_trivia: TriviaGreen,
34401 token: <<TerminalEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
34402 trailing_trivia: TriviaGreen,
34403 ) -> Self::Green {
34404 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34405 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34406 TerminalEqGreen(
34407 Arc::new(GreenNode {
34408 kind: SyntaxKind::TerminalEq,
34409 details: GreenNodeDetails::Node { children: children.into(), width },
34410 })
34411 .intern(db),
34412 )
34413 }
34414 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34415 let GreenNodeDetails::Node { children, .. } =
34416 &self.node.lookup_intern(db).green.lookup_intern(db).details
34417 else {
34418 unreachable!("Expected a node, not a token");
34419 };
34420 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34421 }
34422}
34423impl TerminalEq {
34424 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34425 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34426 }
34427 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEq {
34428 TokenEq::from_syntax_node(db, self.node.get_children(db)[1])
34429 }
34430 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34431 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34432 }
34433}
34434#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34435pub struct TerminalEqPtr(pub SyntaxStablePtrId);
34436impl TerminalEqPtr {}
34437impl TypedStablePtr for TerminalEqPtr {
34438 type SyntaxNode = TerminalEq;
34439 fn untyped(&self) -> SyntaxStablePtrId {
34440 self.0
34441 }
34442 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEq {
34443 TerminalEq::from_syntax_node(db, self.0.lookup(db))
34444 }
34445}
34446impl From<TerminalEqPtr> for SyntaxStablePtrId {
34447 fn from(ptr: TerminalEqPtr) -> Self {
34448 ptr.untyped()
34449 }
34450}
34451#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34452pub struct TerminalEqGreen(pub GreenId);
34453impl TypedSyntaxNode for TerminalEq {
34454 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEq);
34455 type StablePtr = TerminalEqPtr;
34456 type Green = TerminalEqGreen;
34457 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34458 TerminalEqGreen(
34459 Arc::new(GreenNode {
34460 kind: SyntaxKind::TerminalEq,
34461 details: GreenNodeDetails::Node {
34462 children: [
34463 Trivia::missing(db).0,
34464 TokenEq::missing(db).0,
34465 Trivia::missing(db).0,
34466 ]
34467 .into(),
34468 width: TextWidth::default(),
34469 },
34470 })
34471 .intern(db),
34472 )
34473 }
34474 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34475 let kind = node.kind(db);
34476 assert_eq!(
34477 kind,
34478 SyntaxKind::TerminalEq,
34479 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34480 kind,
34481 SyntaxKind::TerminalEq
34482 );
34483 Self { node }
34484 }
34485 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34486 let kind = node.kind(db);
34487 if kind == SyntaxKind::TerminalEq { Some(Self::from_syntax_node(db, node)) } else { None }
34488 }
34489 fn as_syntax_node(&self) -> SyntaxNode {
34490 self.node
34491 }
34492 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34493 TerminalEqPtr(self.node.stable_ptr(db))
34494 }
34495}
34496#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34497pub struct TokenEqEq {
34498 node: SyntaxNode,
34499}
34500impl Token for TokenEqEq {
34501 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34502 TokenEqEqGreen(
34503 Arc::new(GreenNode {
34504 kind: SyntaxKind::TokenEqEq,
34505 details: GreenNodeDetails::Token(text),
34506 })
34507 .intern(db),
34508 )
34509 }
34510 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34511 extract_matches!(
34512 &self.node.lookup_intern(db).green.lookup_intern(db).details,
34513 GreenNodeDetails::Token
34514 )
34515 .clone()
34516 }
34517}
34518#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34519pub struct TokenEqEqPtr(pub SyntaxStablePtrId);
34520impl TypedStablePtr for TokenEqEqPtr {
34521 type SyntaxNode = TokenEqEq;
34522 fn untyped(&self) -> SyntaxStablePtrId {
34523 self.0
34524 }
34525 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
34526 TokenEqEq::from_syntax_node(db, self.0.lookup(db))
34527 }
34528}
34529impl From<TokenEqEqPtr> for SyntaxStablePtrId {
34530 fn from(ptr: TokenEqEqPtr) -> Self {
34531 ptr.untyped()
34532 }
34533}
34534#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34535pub struct TokenEqEqGreen(pub GreenId);
34536impl TokenEqEqGreen {
34537 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34538 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34539 }
34540}
34541impl TypedSyntaxNode for TokenEqEq {
34542 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEqEq);
34543 type StablePtr = TokenEqEqPtr;
34544 type Green = TokenEqEqGreen;
34545 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34546 TokenEqEqGreen(
34547 Arc::new(GreenNode {
34548 kind: SyntaxKind::TokenMissing,
34549 details: GreenNodeDetails::Token("".into()),
34550 })
34551 .intern(db),
34552 )
34553 }
34554 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34555 match node.lookup_intern(db).green.lookup_intern(db).details {
34556 GreenNodeDetails::Token(_) => Self { node },
34557 GreenNodeDetails::Node { .. } => {
34558 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEqEq)
34559 }
34560 }
34561 }
34562 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34563 match node.lookup_intern(db).green.lookup_intern(db).details {
34564 GreenNodeDetails::Token(_) => Some(Self { node }),
34565 GreenNodeDetails::Node { .. } => None,
34566 }
34567 }
34568 fn as_syntax_node(&self) -> SyntaxNode {
34569 self.node
34570 }
34571 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34572 TokenEqEqPtr(self.node.stable_ptr(db))
34573 }
34574}
34575#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34576pub struct TerminalEqEq {
34577 node: SyntaxNode,
34578}
34579impl Terminal for TerminalEqEq {
34580 const KIND: SyntaxKind = SyntaxKind::TerminalEqEq;
34581 type TokenType = TokenEqEq;
34582 fn new_green(
34583 db: &dyn SyntaxGroup,
34584 leading_trivia: TriviaGreen,
34585 token: <<TerminalEqEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
34586 trailing_trivia: TriviaGreen,
34587 ) -> Self::Green {
34588 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34589 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34590 TerminalEqEqGreen(
34591 Arc::new(GreenNode {
34592 kind: SyntaxKind::TerminalEqEq,
34593 details: GreenNodeDetails::Node { children: children.into(), width },
34594 })
34595 .intern(db),
34596 )
34597 }
34598 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34599 let GreenNodeDetails::Node { children, .. } =
34600 &self.node.lookup_intern(db).green.lookup_intern(db).details
34601 else {
34602 unreachable!("Expected a node, not a token");
34603 };
34604 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34605 }
34606}
34607impl TerminalEqEq {
34608 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34609 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34610 }
34611 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
34612 TokenEqEq::from_syntax_node(db, self.node.get_children(db)[1])
34613 }
34614 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34615 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34616 }
34617}
34618#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34619pub struct TerminalEqEqPtr(pub SyntaxStablePtrId);
34620impl TerminalEqEqPtr {}
34621impl TypedStablePtr for TerminalEqEqPtr {
34622 type SyntaxNode = TerminalEqEq;
34623 fn untyped(&self) -> SyntaxStablePtrId {
34624 self.0
34625 }
34626 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEqEq {
34627 TerminalEqEq::from_syntax_node(db, self.0.lookup(db))
34628 }
34629}
34630impl From<TerminalEqEqPtr> for SyntaxStablePtrId {
34631 fn from(ptr: TerminalEqEqPtr) -> Self {
34632 ptr.untyped()
34633 }
34634}
34635#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34636pub struct TerminalEqEqGreen(pub GreenId);
34637impl TypedSyntaxNode for TerminalEqEq {
34638 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEqEq);
34639 type StablePtr = TerminalEqEqPtr;
34640 type Green = TerminalEqEqGreen;
34641 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34642 TerminalEqEqGreen(
34643 Arc::new(GreenNode {
34644 kind: SyntaxKind::TerminalEqEq,
34645 details: GreenNodeDetails::Node {
34646 children: [
34647 Trivia::missing(db).0,
34648 TokenEqEq::missing(db).0,
34649 Trivia::missing(db).0,
34650 ]
34651 .into(),
34652 width: TextWidth::default(),
34653 },
34654 })
34655 .intern(db),
34656 )
34657 }
34658 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34659 let kind = node.kind(db);
34660 assert_eq!(
34661 kind,
34662 SyntaxKind::TerminalEqEq,
34663 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34664 kind,
34665 SyntaxKind::TerminalEqEq
34666 );
34667 Self { node }
34668 }
34669 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34670 let kind = node.kind(db);
34671 if kind == SyntaxKind::TerminalEqEq { Some(Self::from_syntax_node(db, node)) } else { None }
34672 }
34673 fn as_syntax_node(&self) -> SyntaxNode {
34674 self.node
34675 }
34676 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34677 TerminalEqEqPtr(self.node.stable_ptr(db))
34678 }
34679}
34680#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34681pub struct TokenGE {
34682 node: SyntaxNode,
34683}
34684impl Token for TokenGE {
34685 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34686 TokenGEGreen(
34687 Arc::new(GreenNode {
34688 kind: SyntaxKind::TokenGE,
34689 details: GreenNodeDetails::Token(text),
34690 })
34691 .intern(db),
34692 )
34693 }
34694 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34695 extract_matches!(
34696 &self.node.lookup_intern(db).green.lookup_intern(db).details,
34697 GreenNodeDetails::Token
34698 )
34699 .clone()
34700 }
34701}
34702#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34703pub struct TokenGEPtr(pub SyntaxStablePtrId);
34704impl TypedStablePtr for TokenGEPtr {
34705 type SyntaxNode = TokenGE;
34706 fn untyped(&self) -> SyntaxStablePtrId {
34707 self.0
34708 }
34709 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGE {
34710 TokenGE::from_syntax_node(db, self.0.lookup(db))
34711 }
34712}
34713impl From<TokenGEPtr> for SyntaxStablePtrId {
34714 fn from(ptr: TokenGEPtr) -> Self {
34715 ptr.untyped()
34716 }
34717}
34718#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34719pub struct TokenGEGreen(pub GreenId);
34720impl TokenGEGreen {
34721 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34722 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34723 }
34724}
34725impl TypedSyntaxNode for TokenGE {
34726 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGE);
34727 type StablePtr = TokenGEPtr;
34728 type Green = TokenGEGreen;
34729 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34730 TokenGEGreen(
34731 Arc::new(GreenNode {
34732 kind: SyntaxKind::TokenMissing,
34733 details: GreenNodeDetails::Token("".into()),
34734 })
34735 .intern(db),
34736 )
34737 }
34738 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34739 match node.lookup_intern(db).green.lookup_intern(db).details {
34740 GreenNodeDetails::Token(_) => Self { node },
34741 GreenNodeDetails::Node { .. } => {
34742 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGE)
34743 }
34744 }
34745 }
34746 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34747 match node.lookup_intern(db).green.lookup_intern(db).details {
34748 GreenNodeDetails::Token(_) => Some(Self { node }),
34749 GreenNodeDetails::Node { .. } => None,
34750 }
34751 }
34752 fn as_syntax_node(&self) -> SyntaxNode {
34753 self.node
34754 }
34755 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34756 TokenGEPtr(self.node.stable_ptr(db))
34757 }
34758}
34759#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34760pub struct TerminalGE {
34761 node: SyntaxNode,
34762}
34763impl Terminal for TerminalGE {
34764 const KIND: SyntaxKind = SyntaxKind::TerminalGE;
34765 type TokenType = TokenGE;
34766 fn new_green(
34767 db: &dyn SyntaxGroup,
34768 leading_trivia: TriviaGreen,
34769 token: <<TerminalGE as Terminal>::TokenType as TypedSyntaxNode>::Green,
34770 trailing_trivia: TriviaGreen,
34771 ) -> Self::Green {
34772 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34773 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34774 TerminalGEGreen(
34775 Arc::new(GreenNode {
34776 kind: SyntaxKind::TerminalGE,
34777 details: GreenNodeDetails::Node { children: children.into(), width },
34778 })
34779 .intern(db),
34780 )
34781 }
34782 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34783 let GreenNodeDetails::Node { children, .. } =
34784 &self.node.lookup_intern(db).green.lookup_intern(db).details
34785 else {
34786 unreachable!("Expected a node, not a token");
34787 };
34788 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34789 }
34790}
34791impl TerminalGE {
34792 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34793 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34794 }
34795 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGE {
34796 TokenGE::from_syntax_node(db, self.node.get_children(db)[1])
34797 }
34798 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34799 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34800 }
34801}
34802#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34803pub struct TerminalGEPtr(pub SyntaxStablePtrId);
34804impl TerminalGEPtr {}
34805impl TypedStablePtr for TerminalGEPtr {
34806 type SyntaxNode = TerminalGE;
34807 fn untyped(&self) -> SyntaxStablePtrId {
34808 self.0
34809 }
34810 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGE {
34811 TerminalGE::from_syntax_node(db, self.0.lookup(db))
34812 }
34813}
34814impl From<TerminalGEPtr> for SyntaxStablePtrId {
34815 fn from(ptr: TerminalGEPtr) -> Self {
34816 ptr.untyped()
34817 }
34818}
34819#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34820pub struct TerminalGEGreen(pub GreenId);
34821impl TypedSyntaxNode for TerminalGE {
34822 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGE);
34823 type StablePtr = TerminalGEPtr;
34824 type Green = TerminalGEGreen;
34825 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34826 TerminalGEGreen(
34827 Arc::new(GreenNode {
34828 kind: SyntaxKind::TerminalGE,
34829 details: GreenNodeDetails::Node {
34830 children: [
34831 Trivia::missing(db).0,
34832 TokenGE::missing(db).0,
34833 Trivia::missing(db).0,
34834 ]
34835 .into(),
34836 width: TextWidth::default(),
34837 },
34838 })
34839 .intern(db),
34840 )
34841 }
34842 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34843 let kind = node.kind(db);
34844 assert_eq!(
34845 kind,
34846 SyntaxKind::TerminalGE,
34847 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34848 kind,
34849 SyntaxKind::TerminalGE
34850 );
34851 Self { node }
34852 }
34853 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34854 let kind = node.kind(db);
34855 if kind == SyntaxKind::TerminalGE { Some(Self::from_syntax_node(db, node)) } else { None }
34856 }
34857 fn as_syntax_node(&self) -> SyntaxNode {
34858 self.node
34859 }
34860 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34861 TerminalGEPtr(self.node.stable_ptr(db))
34862 }
34863}
34864#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34865pub struct TokenGT {
34866 node: SyntaxNode,
34867}
34868impl Token for TokenGT {
34869 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34870 TokenGTGreen(
34871 Arc::new(GreenNode {
34872 kind: SyntaxKind::TokenGT,
34873 details: GreenNodeDetails::Token(text),
34874 })
34875 .intern(db),
34876 )
34877 }
34878 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34879 extract_matches!(
34880 &self.node.lookup_intern(db).green.lookup_intern(db).details,
34881 GreenNodeDetails::Token
34882 )
34883 .clone()
34884 }
34885}
34886#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34887pub struct TokenGTPtr(pub SyntaxStablePtrId);
34888impl TypedStablePtr for TokenGTPtr {
34889 type SyntaxNode = TokenGT;
34890 fn untyped(&self) -> SyntaxStablePtrId {
34891 self.0
34892 }
34893 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGT {
34894 TokenGT::from_syntax_node(db, self.0.lookup(db))
34895 }
34896}
34897impl From<TokenGTPtr> for SyntaxStablePtrId {
34898 fn from(ptr: TokenGTPtr) -> Self {
34899 ptr.untyped()
34900 }
34901}
34902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34903pub struct TokenGTGreen(pub GreenId);
34904impl TokenGTGreen {
34905 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34906 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34907 }
34908}
34909impl TypedSyntaxNode for TokenGT {
34910 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGT);
34911 type StablePtr = TokenGTPtr;
34912 type Green = TokenGTGreen;
34913 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34914 TokenGTGreen(
34915 Arc::new(GreenNode {
34916 kind: SyntaxKind::TokenMissing,
34917 details: GreenNodeDetails::Token("".into()),
34918 })
34919 .intern(db),
34920 )
34921 }
34922 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34923 match node.lookup_intern(db).green.lookup_intern(db).details {
34924 GreenNodeDetails::Token(_) => Self { node },
34925 GreenNodeDetails::Node { .. } => {
34926 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGT)
34927 }
34928 }
34929 }
34930 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34931 match node.lookup_intern(db).green.lookup_intern(db).details {
34932 GreenNodeDetails::Token(_) => Some(Self { node }),
34933 GreenNodeDetails::Node { .. } => None,
34934 }
34935 }
34936 fn as_syntax_node(&self) -> SyntaxNode {
34937 self.node
34938 }
34939 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
34940 TokenGTPtr(self.node.stable_ptr(db))
34941 }
34942}
34943#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34944pub struct TerminalGT {
34945 node: SyntaxNode,
34946}
34947impl Terminal for TerminalGT {
34948 const KIND: SyntaxKind = SyntaxKind::TerminalGT;
34949 type TokenType = TokenGT;
34950 fn new_green(
34951 db: &dyn SyntaxGroup,
34952 leading_trivia: TriviaGreen,
34953 token: <<TerminalGT as Terminal>::TokenType as TypedSyntaxNode>::Green,
34954 trailing_trivia: TriviaGreen,
34955 ) -> Self::Green {
34956 let children = [leading_trivia.0, token.0, trailing_trivia.0];
34957 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
34958 TerminalGTGreen(
34959 Arc::new(GreenNode {
34960 kind: SyntaxKind::TerminalGT,
34961 details: GreenNodeDetails::Node { children: children.into(), width },
34962 })
34963 .intern(db),
34964 )
34965 }
34966 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34967 let GreenNodeDetails::Node { children, .. } =
34968 &self.node.lookup_intern(db).green.lookup_intern(db).details
34969 else {
34970 unreachable!("Expected a node, not a token");
34971 };
34972 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
34973 }
34974}
34975impl TerminalGT {
34976 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34977 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
34978 }
34979 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGT {
34980 TokenGT::from_syntax_node(db, self.node.get_children(db)[1])
34981 }
34982 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34983 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
34984 }
34985}
34986#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34987pub struct TerminalGTPtr(pub SyntaxStablePtrId);
34988impl TerminalGTPtr {}
34989impl TypedStablePtr for TerminalGTPtr {
34990 type SyntaxNode = TerminalGT;
34991 fn untyped(&self) -> SyntaxStablePtrId {
34992 self.0
34993 }
34994 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGT {
34995 TerminalGT::from_syntax_node(db, self.0.lookup(db))
34996 }
34997}
34998impl From<TerminalGTPtr> for SyntaxStablePtrId {
34999 fn from(ptr: TerminalGTPtr) -> Self {
35000 ptr.untyped()
35001 }
35002}
35003#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35004pub struct TerminalGTGreen(pub GreenId);
35005impl TypedSyntaxNode for TerminalGT {
35006 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGT);
35007 type StablePtr = TerminalGTPtr;
35008 type Green = TerminalGTGreen;
35009 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35010 TerminalGTGreen(
35011 Arc::new(GreenNode {
35012 kind: SyntaxKind::TerminalGT,
35013 details: GreenNodeDetails::Node {
35014 children: [
35015 Trivia::missing(db).0,
35016 TokenGT::missing(db).0,
35017 Trivia::missing(db).0,
35018 ]
35019 .into(),
35020 width: TextWidth::default(),
35021 },
35022 })
35023 .intern(db),
35024 )
35025 }
35026 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35027 let kind = node.kind(db);
35028 assert_eq!(
35029 kind,
35030 SyntaxKind::TerminalGT,
35031 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35032 kind,
35033 SyntaxKind::TerminalGT
35034 );
35035 Self { node }
35036 }
35037 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35038 let kind = node.kind(db);
35039 if kind == SyntaxKind::TerminalGT { Some(Self::from_syntax_node(db, node)) } else { None }
35040 }
35041 fn as_syntax_node(&self) -> SyntaxNode {
35042 self.node
35043 }
35044 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35045 TerminalGTPtr(self.node.stable_ptr(db))
35046 }
35047}
35048#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35049pub struct TokenHash {
35050 node: SyntaxNode,
35051}
35052impl Token for TokenHash {
35053 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35054 TokenHashGreen(
35055 Arc::new(GreenNode {
35056 kind: SyntaxKind::TokenHash,
35057 details: GreenNodeDetails::Token(text),
35058 })
35059 .intern(db),
35060 )
35061 }
35062 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35063 extract_matches!(
35064 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35065 GreenNodeDetails::Token
35066 )
35067 .clone()
35068 }
35069}
35070#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35071pub struct TokenHashPtr(pub SyntaxStablePtrId);
35072impl TypedStablePtr for TokenHashPtr {
35073 type SyntaxNode = TokenHash;
35074 fn untyped(&self) -> SyntaxStablePtrId {
35075 self.0
35076 }
35077 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenHash {
35078 TokenHash::from_syntax_node(db, self.0.lookup(db))
35079 }
35080}
35081impl From<TokenHashPtr> for SyntaxStablePtrId {
35082 fn from(ptr: TokenHashPtr) -> Self {
35083 ptr.untyped()
35084 }
35085}
35086#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35087pub struct TokenHashGreen(pub GreenId);
35088impl TokenHashGreen {
35089 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35090 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35091 }
35092}
35093impl TypedSyntaxNode for TokenHash {
35094 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenHash);
35095 type StablePtr = TokenHashPtr;
35096 type Green = TokenHashGreen;
35097 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35098 TokenHashGreen(
35099 Arc::new(GreenNode {
35100 kind: SyntaxKind::TokenMissing,
35101 details: GreenNodeDetails::Token("".into()),
35102 })
35103 .intern(db),
35104 )
35105 }
35106 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35107 match node.lookup_intern(db).green.lookup_intern(db).details {
35108 GreenNodeDetails::Token(_) => Self { node },
35109 GreenNodeDetails::Node { .. } => {
35110 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenHash)
35111 }
35112 }
35113 }
35114 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35115 match node.lookup_intern(db).green.lookup_intern(db).details {
35116 GreenNodeDetails::Token(_) => Some(Self { node }),
35117 GreenNodeDetails::Node { .. } => None,
35118 }
35119 }
35120 fn as_syntax_node(&self) -> SyntaxNode {
35121 self.node
35122 }
35123 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35124 TokenHashPtr(self.node.stable_ptr(db))
35125 }
35126}
35127#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35128pub struct TerminalHash {
35129 node: SyntaxNode,
35130}
35131impl Terminal for TerminalHash {
35132 const KIND: SyntaxKind = SyntaxKind::TerminalHash;
35133 type TokenType = TokenHash;
35134 fn new_green(
35135 db: &dyn SyntaxGroup,
35136 leading_trivia: TriviaGreen,
35137 token: <<TerminalHash as Terminal>::TokenType as TypedSyntaxNode>::Green,
35138 trailing_trivia: TriviaGreen,
35139 ) -> Self::Green {
35140 let children = [leading_trivia.0, token.0, trailing_trivia.0];
35141 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
35142 TerminalHashGreen(
35143 Arc::new(GreenNode {
35144 kind: SyntaxKind::TerminalHash,
35145 details: GreenNodeDetails::Node { children: children.into(), width },
35146 })
35147 .intern(db),
35148 )
35149 }
35150 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35151 let GreenNodeDetails::Node { children, .. } =
35152 &self.node.lookup_intern(db).green.lookup_intern(db).details
35153 else {
35154 unreachable!("Expected a node, not a token");
35155 };
35156 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
35157 }
35158}
35159impl TerminalHash {
35160 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35161 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
35162 }
35163 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenHash {
35164 TokenHash::from_syntax_node(db, self.node.get_children(db)[1])
35165 }
35166 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35167 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
35168 }
35169}
35170#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35171pub struct TerminalHashPtr(pub SyntaxStablePtrId);
35172impl TerminalHashPtr {}
35173impl TypedStablePtr for TerminalHashPtr {
35174 type SyntaxNode = TerminalHash;
35175 fn untyped(&self) -> SyntaxStablePtrId {
35176 self.0
35177 }
35178 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalHash {
35179 TerminalHash::from_syntax_node(db, self.0.lookup(db))
35180 }
35181}
35182impl From<TerminalHashPtr> for SyntaxStablePtrId {
35183 fn from(ptr: TerminalHashPtr) -> Self {
35184 ptr.untyped()
35185 }
35186}
35187#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35188pub struct TerminalHashGreen(pub GreenId);
35189impl TypedSyntaxNode for TerminalHash {
35190 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalHash);
35191 type StablePtr = TerminalHashPtr;
35192 type Green = TerminalHashGreen;
35193 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35194 TerminalHashGreen(
35195 Arc::new(GreenNode {
35196 kind: SyntaxKind::TerminalHash,
35197 details: GreenNodeDetails::Node {
35198 children: [
35199 Trivia::missing(db).0,
35200 TokenHash::missing(db).0,
35201 Trivia::missing(db).0,
35202 ]
35203 .into(),
35204 width: TextWidth::default(),
35205 },
35206 })
35207 .intern(db),
35208 )
35209 }
35210 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35211 let kind = node.kind(db);
35212 assert_eq!(
35213 kind,
35214 SyntaxKind::TerminalHash,
35215 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35216 kind,
35217 SyntaxKind::TerminalHash
35218 );
35219 Self { node }
35220 }
35221 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35222 let kind = node.kind(db);
35223 if kind == SyntaxKind::TerminalHash { Some(Self::from_syntax_node(db, node)) } else { None }
35224 }
35225 fn as_syntax_node(&self) -> SyntaxNode {
35226 self.node
35227 }
35228 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35229 TerminalHashPtr(self.node.stable_ptr(db))
35230 }
35231}
35232#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35233pub struct TokenLBrace {
35234 node: SyntaxNode,
35235}
35236impl Token for TokenLBrace {
35237 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35238 TokenLBraceGreen(
35239 Arc::new(GreenNode {
35240 kind: SyntaxKind::TokenLBrace,
35241 details: GreenNodeDetails::Token(text),
35242 })
35243 .intern(db),
35244 )
35245 }
35246 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35247 extract_matches!(
35248 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35249 GreenNodeDetails::Token
35250 )
35251 .clone()
35252 }
35253}
35254#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35255pub struct TokenLBracePtr(pub SyntaxStablePtrId);
35256impl TypedStablePtr for TokenLBracePtr {
35257 type SyntaxNode = TokenLBrace;
35258 fn untyped(&self) -> SyntaxStablePtrId {
35259 self.0
35260 }
35261 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
35262 TokenLBrace::from_syntax_node(db, self.0.lookup(db))
35263 }
35264}
35265impl From<TokenLBracePtr> for SyntaxStablePtrId {
35266 fn from(ptr: TokenLBracePtr) -> Self {
35267 ptr.untyped()
35268 }
35269}
35270#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35271pub struct TokenLBraceGreen(pub GreenId);
35272impl TokenLBraceGreen {
35273 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35274 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35275 }
35276}
35277impl TypedSyntaxNode for TokenLBrace {
35278 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrace);
35279 type StablePtr = TokenLBracePtr;
35280 type Green = TokenLBraceGreen;
35281 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35282 TokenLBraceGreen(
35283 Arc::new(GreenNode {
35284 kind: SyntaxKind::TokenMissing,
35285 details: GreenNodeDetails::Token("".into()),
35286 })
35287 .intern(db),
35288 )
35289 }
35290 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35291 match node.lookup_intern(db).green.lookup_intern(db).details {
35292 GreenNodeDetails::Token(_) => Self { node },
35293 GreenNodeDetails::Node { .. } => {
35294 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrace)
35295 }
35296 }
35297 }
35298 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35299 match node.lookup_intern(db).green.lookup_intern(db).details {
35300 GreenNodeDetails::Token(_) => Some(Self { node }),
35301 GreenNodeDetails::Node { .. } => None,
35302 }
35303 }
35304 fn as_syntax_node(&self) -> SyntaxNode {
35305 self.node
35306 }
35307 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35308 TokenLBracePtr(self.node.stable_ptr(db))
35309 }
35310}
35311#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35312pub struct TerminalLBrace {
35313 node: SyntaxNode,
35314}
35315impl Terminal for TerminalLBrace {
35316 const KIND: SyntaxKind = SyntaxKind::TerminalLBrace;
35317 type TokenType = TokenLBrace;
35318 fn new_green(
35319 db: &dyn SyntaxGroup,
35320 leading_trivia: TriviaGreen,
35321 token: <<TerminalLBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
35322 trailing_trivia: TriviaGreen,
35323 ) -> Self::Green {
35324 let children = [leading_trivia.0, token.0, trailing_trivia.0];
35325 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
35326 TerminalLBraceGreen(
35327 Arc::new(GreenNode {
35328 kind: SyntaxKind::TerminalLBrace,
35329 details: GreenNodeDetails::Node { children: children.into(), width },
35330 })
35331 .intern(db),
35332 )
35333 }
35334 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35335 let GreenNodeDetails::Node { children, .. } =
35336 &self.node.lookup_intern(db).green.lookup_intern(db).details
35337 else {
35338 unreachable!("Expected a node, not a token");
35339 };
35340 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
35341 }
35342}
35343impl TerminalLBrace {
35344 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35345 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
35346 }
35347 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
35348 TokenLBrace::from_syntax_node(db, self.node.get_children(db)[1])
35349 }
35350 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35351 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
35352 }
35353}
35354#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35355pub struct TerminalLBracePtr(pub SyntaxStablePtrId);
35356impl TerminalLBracePtr {}
35357impl TypedStablePtr for TerminalLBracePtr {
35358 type SyntaxNode = TerminalLBrace;
35359 fn untyped(&self) -> SyntaxStablePtrId {
35360 self.0
35361 }
35362 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
35363 TerminalLBrace::from_syntax_node(db, self.0.lookup(db))
35364 }
35365}
35366impl From<TerminalLBracePtr> for SyntaxStablePtrId {
35367 fn from(ptr: TerminalLBracePtr) -> Self {
35368 ptr.untyped()
35369 }
35370}
35371#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35372pub struct TerminalLBraceGreen(pub GreenId);
35373impl TypedSyntaxNode for TerminalLBrace {
35374 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrace);
35375 type StablePtr = TerminalLBracePtr;
35376 type Green = TerminalLBraceGreen;
35377 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35378 TerminalLBraceGreen(
35379 Arc::new(GreenNode {
35380 kind: SyntaxKind::TerminalLBrace,
35381 details: GreenNodeDetails::Node {
35382 children: [
35383 Trivia::missing(db).0,
35384 TokenLBrace::missing(db).0,
35385 Trivia::missing(db).0,
35386 ]
35387 .into(),
35388 width: TextWidth::default(),
35389 },
35390 })
35391 .intern(db),
35392 )
35393 }
35394 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35395 let kind = node.kind(db);
35396 assert_eq!(
35397 kind,
35398 SyntaxKind::TerminalLBrace,
35399 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35400 kind,
35401 SyntaxKind::TerminalLBrace
35402 );
35403 Self { node }
35404 }
35405 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35406 let kind = node.kind(db);
35407 if kind == SyntaxKind::TerminalLBrace {
35408 Some(Self::from_syntax_node(db, node))
35409 } else {
35410 None
35411 }
35412 }
35413 fn as_syntax_node(&self) -> SyntaxNode {
35414 self.node
35415 }
35416 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35417 TerminalLBracePtr(self.node.stable_ptr(db))
35418 }
35419}
35420#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35421pub struct TokenLBrack {
35422 node: SyntaxNode,
35423}
35424impl Token for TokenLBrack {
35425 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35426 TokenLBrackGreen(
35427 Arc::new(GreenNode {
35428 kind: SyntaxKind::TokenLBrack,
35429 details: GreenNodeDetails::Token(text),
35430 })
35431 .intern(db),
35432 )
35433 }
35434 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35435 extract_matches!(
35436 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35437 GreenNodeDetails::Token
35438 )
35439 .clone()
35440 }
35441}
35442#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35443pub struct TokenLBrackPtr(pub SyntaxStablePtrId);
35444impl TypedStablePtr for TokenLBrackPtr {
35445 type SyntaxNode = TokenLBrack;
35446 fn untyped(&self) -> SyntaxStablePtrId {
35447 self.0
35448 }
35449 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
35450 TokenLBrack::from_syntax_node(db, self.0.lookup(db))
35451 }
35452}
35453impl From<TokenLBrackPtr> for SyntaxStablePtrId {
35454 fn from(ptr: TokenLBrackPtr) -> Self {
35455 ptr.untyped()
35456 }
35457}
35458#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35459pub struct TokenLBrackGreen(pub GreenId);
35460impl TokenLBrackGreen {
35461 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35462 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35463 }
35464}
35465impl TypedSyntaxNode for TokenLBrack {
35466 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrack);
35467 type StablePtr = TokenLBrackPtr;
35468 type Green = TokenLBrackGreen;
35469 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35470 TokenLBrackGreen(
35471 Arc::new(GreenNode {
35472 kind: SyntaxKind::TokenMissing,
35473 details: GreenNodeDetails::Token("".into()),
35474 })
35475 .intern(db),
35476 )
35477 }
35478 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35479 match node.lookup_intern(db).green.lookup_intern(db).details {
35480 GreenNodeDetails::Token(_) => Self { node },
35481 GreenNodeDetails::Node { .. } => {
35482 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrack)
35483 }
35484 }
35485 }
35486 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35487 match node.lookup_intern(db).green.lookup_intern(db).details {
35488 GreenNodeDetails::Token(_) => Some(Self { node }),
35489 GreenNodeDetails::Node { .. } => None,
35490 }
35491 }
35492 fn as_syntax_node(&self) -> SyntaxNode {
35493 self.node
35494 }
35495 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35496 TokenLBrackPtr(self.node.stable_ptr(db))
35497 }
35498}
35499#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35500pub struct TerminalLBrack {
35501 node: SyntaxNode,
35502}
35503impl Terminal for TerminalLBrack {
35504 const KIND: SyntaxKind = SyntaxKind::TerminalLBrack;
35505 type TokenType = TokenLBrack;
35506 fn new_green(
35507 db: &dyn SyntaxGroup,
35508 leading_trivia: TriviaGreen,
35509 token: <<TerminalLBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
35510 trailing_trivia: TriviaGreen,
35511 ) -> Self::Green {
35512 let children = [leading_trivia.0, token.0, trailing_trivia.0];
35513 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
35514 TerminalLBrackGreen(
35515 Arc::new(GreenNode {
35516 kind: SyntaxKind::TerminalLBrack,
35517 details: GreenNodeDetails::Node { children: children.into(), width },
35518 })
35519 .intern(db),
35520 )
35521 }
35522 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35523 let GreenNodeDetails::Node { children, .. } =
35524 &self.node.lookup_intern(db).green.lookup_intern(db).details
35525 else {
35526 unreachable!("Expected a node, not a token");
35527 };
35528 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
35529 }
35530}
35531impl TerminalLBrack {
35532 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35533 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
35534 }
35535 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
35536 TokenLBrack::from_syntax_node(db, self.node.get_children(db)[1])
35537 }
35538 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35539 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
35540 }
35541}
35542#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35543pub struct TerminalLBrackPtr(pub SyntaxStablePtrId);
35544impl TerminalLBrackPtr {}
35545impl TypedStablePtr for TerminalLBrackPtr {
35546 type SyntaxNode = TerminalLBrack;
35547 fn untyped(&self) -> SyntaxStablePtrId {
35548 self.0
35549 }
35550 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
35551 TerminalLBrack::from_syntax_node(db, self.0.lookup(db))
35552 }
35553}
35554impl From<TerminalLBrackPtr> for SyntaxStablePtrId {
35555 fn from(ptr: TerminalLBrackPtr) -> Self {
35556 ptr.untyped()
35557 }
35558}
35559#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35560pub struct TerminalLBrackGreen(pub GreenId);
35561impl TypedSyntaxNode for TerminalLBrack {
35562 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrack);
35563 type StablePtr = TerminalLBrackPtr;
35564 type Green = TerminalLBrackGreen;
35565 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35566 TerminalLBrackGreen(
35567 Arc::new(GreenNode {
35568 kind: SyntaxKind::TerminalLBrack,
35569 details: GreenNodeDetails::Node {
35570 children: [
35571 Trivia::missing(db).0,
35572 TokenLBrack::missing(db).0,
35573 Trivia::missing(db).0,
35574 ]
35575 .into(),
35576 width: TextWidth::default(),
35577 },
35578 })
35579 .intern(db),
35580 )
35581 }
35582 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35583 let kind = node.kind(db);
35584 assert_eq!(
35585 kind,
35586 SyntaxKind::TerminalLBrack,
35587 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35588 kind,
35589 SyntaxKind::TerminalLBrack
35590 );
35591 Self { node }
35592 }
35593 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35594 let kind = node.kind(db);
35595 if kind == SyntaxKind::TerminalLBrack {
35596 Some(Self::from_syntax_node(db, node))
35597 } else {
35598 None
35599 }
35600 }
35601 fn as_syntax_node(&self) -> SyntaxNode {
35602 self.node
35603 }
35604 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35605 TerminalLBrackPtr(self.node.stable_ptr(db))
35606 }
35607}
35608#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35609pub struct TokenLE {
35610 node: SyntaxNode,
35611}
35612impl Token for TokenLE {
35613 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35614 TokenLEGreen(
35615 Arc::new(GreenNode {
35616 kind: SyntaxKind::TokenLE,
35617 details: GreenNodeDetails::Token(text),
35618 })
35619 .intern(db),
35620 )
35621 }
35622 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35623 extract_matches!(
35624 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35625 GreenNodeDetails::Token
35626 )
35627 .clone()
35628 }
35629}
35630#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35631pub struct TokenLEPtr(pub SyntaxStablePtrId);
35632impl TypedStablePtr for TokenLEPtr {
35633 type SyntaxNode = TokenLE;
35634 fn untyped(&self) -> SyntaxStablePtrId {
35635 self.0
35636 }
35637 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLE {
35638 TokenLE::from_syntax_node(db, self.0.lookup(db))
35639 }
35640}
35641impl From<TokenLEPtr> for SyntaxStablePtrId {
35642 fn from(ptr: TokenLEPtr) -> Self {
35643 ptr.untyped()
35644 }
35645}
35646#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35647pub struct TokenLEGreen(pub GreenId);
35648impl TokenLEGreen {
35649 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35650 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35651 }
35652}
35653impl TypedSyntaxNode for TokenLE {
35654 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLE);
35655 type StablePtr = TokenLEPtr;
35656 type Green = TokenLEGreen;
35657 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35658 TokenLEGreen(
35659 Arc::new(GreenNode {
35660 kind: SyntaxKind::TokenMissing,
35661 details: GreenNodeDetails::Token("".into()),
35662 })
35663 .intern(db),
35664 )
35665 }
35666 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35667 match node.lookup_intern(db).green.lookup_intern(db).details {
35668 GreenNodeDetails::Token(_) => Self { node },
35669 GreenNodeDetails::Node { .. } => {
35670 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLE)
35671 }
35672 }
35673 }
35674 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35675 match node.lookup_intern(db).green.lookup_intern(db).details {
35676 GreenNodeDetails::Token(_) => Some(Self { node }),
35677 GreenNodeDetails::Node { .. } => None,
35678 }
35679 }
35680 fn as_syntax_node(&self) -> SyntaxNode {
35681 self.node
35682 }
35683 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35684 TokenLEPtr(self.node.stable_ptr(db))
35685 }
35686}
35687#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35688pub struct TerminalLE {
35689 node: SyntaxNode,
35690}
35691impl Terminal for TerminalLE {
35692 const KIND: SyntaxKind = SyntaxKind::TerminalLE;
35693 type TokenType = TokenLE;
35694 fn new_green(
35695 db: &dyn SyntaxGroup,
35696 leading_trivia: TriviaGreen,
35697 token: <<TerminalLE as Terminal>::TokenType as TypedSyntaxNode>::Green,
35698 trailing_trivia: TriviaGreen,
35699 ) -> Self::Green {
35700 let children = [leading_trivia.0, token.0, trailing_trivia.0];
35701 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
35702 TerminalLEGreen(
35703 Arc::new(GreenNode {
35704 kind: SyntaxKind::TerminalLE,
35705 details: GreenNodeDetails::Node { children: children.into(), width },
35706 })
35707 .intern(db),
35708 )
35709 }
35710 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35711 let GreenNodeDetails::Node { children, .. } =
35712 &self.node.lookup_intern(db).green.lookup_intern(db).details
35713 else {
35714 unreachable!("Expected a node, not a token");
35715 };
35716 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
35717 }
35718}
35719impl TerminalLE {
35720 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35721 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
35722 }
35723 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLE {
35724 TokenLE::from_syntax_node(db, self.node.get_children(db)[1])
35725 }
35726 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35727 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
35728 }
35729}
35730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35731pub struct TerminalLEPtr(pub SyntaxStablePtrId);
35732impl TerminalLEPtr {}
35733impl TypedStablePtr for TerminalLEPtr {
35734 type SyntaxNode = TerminalLE;
35735 fn untyped(&self) -> SyntaxStablePtrId {
35736 self.0
35737 }
35738 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLE {
35739 TerminalLE::from_syntax_node(db, self.0.lookup(db))
35740 }
35741}
35742impl From<TerminalLEPtr> for SyntaxStablePtrId {
35743 fn from(ptr: TerminalLEPtr) -> Self {
35744 ptr.untyped()
35745 }
35746}
35747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35748pub struct TerminalLEGreen(pub GreenId);
35749impl TypedSyntaxNode for TerminalLE {
35750 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLE);
35751 type StablePtr = TerminalLEPtr;
35752 type Green = TerminalLEGreen;
35753 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35754 TerminalLEGreen(
35755 Arc::new(GreenNode {
35756 kind: SyntaxKind::TerminalLE,
35757 details: GreenNodeDetails::Node {
35758 children: [
35759 Trivia::missing(db).0,
35760 TokenLE::missing(db).0,
35761 Trivia::missing(db).0,
35762 ]
35763 .into(),
35764 width: TextWidth::default(),
35765 },
35766 })
35767 .intern(db),
35768 )
35769 }
35770 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35771 let kind = node.kind(db);
35772 assert_eq!(
35773 kind,
35774 SyntaxKind::TerminalLE,
35775 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35776 kind,
35777 SyntaxKind::TerminalLE
35778 );
35779 Self { node }
35780 }
35781 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35782 let kind = node.kind(db);
35783 if kind == SyntaxKind::TerminalLE { Some(Self::from_syntax_node(db, node)) } else { None }
35784 }
35785 fn as_syntax_node(&self) -> SyntaxNode {
35786 self.node
35787 }
35788 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35789 TerminalLEPtr(self.node.stable_ptr(db))
35790 }
35791}
35792#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35793pub struct TokenLParen {
35794 node: SyntaxNode,
35795}
35796impl Token for TokenLParen {
35797 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35798 TokenLParenGreen(
35799 Arc::new(GreenNode {
35800 kind: SyntaxKind::TokenLParen,
35801 details: GreenNodeDetails::Token(text),
35802 })
35803 .intern(db),
35804 )
35805 }
35806 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35807 extract_matches!(
35808 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35809 GreenNodeDetails::Token
35810 )
35811 .clone()
35812 }
35813}
35814#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35815pub struct TokenLParenPtr(pub SyntaxStablePtrId);
35816impl TypedStablePtr for TokenLParenPtr {
35817 type SyntaxNode = TokenLParen;
35818 fn untyped(&self) -> SyntaxStablePtrId {
35819 self.0
35820 }
35821 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLParen {
35822 TokenLParen::from_syntax_node(db, self.0.lookup(db))
35823 }
35824}
35825impl From<TokenLParenPtr> for SyntaxStablePtrId {
35826 fn from(ptr: TokenLParenPtr) -> Self {
35827 ptr.untyped()
35828 }
35829}
35830#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35831pub struct TokenLParenGreen(pub GreenId);
35832impl TokenLParenGreen {
35833 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35834 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35835 }
35836}
35837impl TypedSyntaxNode for TokenLParen {
35838 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLParen);
35839 type StablePtr = TokenLParenPtr;
35840 type Green = TokenLParenGreen;
35841 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35842 TokenLParenGreen(
35843 Arc::new(GreenNode {
35844 kind: SyntaxKind::TokenMissing,
35845 details: GreenNodeDetails::Token("".into()),
35846 })
35847 .intern(db),
35848 )
35849 }
35850 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35851 match node.lookup_intern(db).green.lookup_intern(db).details {
35852 GreenNodeDetails::Token(_) => Self { node },
35853 GreenNodeDetails::Node { .. } => {
35854 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLParen)
35855 }
35856 }
35857 }
35858 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35859 match node.lookup_intern(db).green.lookup_intern(db).details {
35860 GreenNodeDetails::Token(_) => Some(Self { node }),
35861 GreenNodeDetails::Node { .. } => None,
35862 }
35863 }
35864 fn as_syntax_node(&self) -> SyntaxNode {
35865 self.node
35866 }
35867 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35868 TokenLParenPtr(self.node.stable_ptr(db))
35869 }
35870}
35871#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35872pub struct TerminalLParen {
35873 node: SyntaxNode,
35874}
35875impl Terminal for TerminalLParen {
35876 const KIND: SyntaxKind = SyntaxKind::TerminalLParen;
35877 type TokenType = TokenLParen;
35878 fn new_green(
35879 db: &dyn SyntaxGroup,
35880 leading_trivia: TriviaGreen,
35881 token: <<TerminalLParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
35882 trailing_trivia: TriviaGreen,
35883 ) -> Self::Green {
35884 let children = [leading_trivia.0, token.0, trailing_trivia.0];
35885 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
35886 TerminalLParenGreen(
35887 Arc::new(GreenNode {
35888 kind: SyntaxKind::TerminalLParen,
35889 details: GreenNodeDetails::Node { children: children.into(), width },
35890 })
35891 .intern(db),
35892 )
35893 }
35894 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35895 let GreenNodeDetails::Node { children, .. } =
35896 &self.node.lookup_intern(db).green.lookup_intern(db).details
35897 else {
35898 unreachable!("Expected a node, not a token");
35899 };
35900 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
35901 }
35902}
35903impl TerminalLParen {
35904 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35905 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
35906 }
35907 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLParen {
35908 TokenLParen::from_syntax_node(db, self.node.get_children(db)[1])
35909 }
35910 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35911 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
35912 }
35913}
35914#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35915pub struct TerminalLParenPtr(pub SyntaxStablePtrId);
35916impl TerminalLParenPtr {}
35917impl TypedStablePtr for TerminalLParenPtr {
35918 type SyntaxNode = TerminalLParen;
35919 fn untyped(&self) -> SyntaxStablePtrId {
35920 self.0
35921 }
35922 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
35923 TerminalLParen::from_syntax_node(db, self.0.lookup(db))
35924 }
35925}
35926impl From<TerminalLParenPtr> for SyntaxStablePtrId {
35927 fn from(ptr: TerminalLParenPtr) -> Self {
35928 ptr.untyped()
35929 }
35930}
35931#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35932pub struct TerminalLParenGreen(pub GreenId);
35933impl TypedSyntaxNode for TerminalLParen {
35934 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLParen);
35935 type StablePtr = TerminalLParenPtr;
35936 type Green = TerminalLParenGreen;
35937 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35938 TerminalLParenGreen(
35939 Arc::new(GreenNode {
35940 kind: SyntaxKind::TerminalLParen,
35941 details: GreenNodeDetails::Node {
35942 children: [
35943 Trivia::missing(db).0,
35944 TokenLParen::missing(db).0,
35945 Trivia::missing(db).0,
35946 ]
35947 .into(),
35948 width: TextWidth::default(),
35949 },
35950 })
35951 .intern(db),
35952 )
35953 }
35954 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35955 let kind = node.kind(db);
35956 assert_eq!(
35957 kind,
35958 SyntaxKind::TerminalLParen,
35959 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35960 kind,
35961 SyntaxKind::TerminalLParen
35962 );
35963 Self { node }
35964 }
35965 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35966 let kind = node.kind(db);
35967 if kind == SyntaxKind::TerminalLParen {
35968 Some(Self::from_syntax_node(db, node))
35969 } else {
35970 None
35971 }
35972 }
35973 fn as_syntax_node(&self) -> SyntaxNode {
35974 self.node
35975 }
35976 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
35977 TerminalLParenPtr(self.node.stable_ptr(db))
35978 }
35979}
35980#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35981pub struct TokenLT {
35982 node: SyntaxNode,
35983}
35984impl Token for TokenLT {
35985 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35986 TokenLTGreen(
35987 Arc::new(GreenNode {
35988 kind: SyntaxKind::TokenLT,
35989 details: GreenNodeDetails::Token(text),
35990 })
35991 .intern(db),
35992 )
35993 }
35994 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35995 extract_matches!(
35996 &self.node.lookup_intern(db).green.lookup_intern(db).details,
35997 GreenNodeDetails::Token
35998 )
35999 .clone()
36000 }
36001}
36002#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36003pub struct TokenLTPtr(pub SyntaxStablePtrId);
36004impl TypedStablePtr for TokenLTPtr {
36005 type SyntaxNode = TokenLT;
36006 fn untyped(&self) -> SyntaxStablePtrId {
36007 self.0
36008 }
36009 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLT {
36010 TokenLT::from_syntax_node(db, self.0.lookup(db))
36011 }
36012}
36013impl From<TokenLTPtr> for SyntaxStablePtrId {
36014 fn from(ptr: TokenLTPtr) -> Self {
36015 ptr.untyped()
36016 }
36017}
36018#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36019pub struct TokenLTGreen(pub GreenId);
36020impl TokenLTGreen {
36021 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36022 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36023 }
36024}
36025impl TypedSyntaxNode for TokenLT {
36026 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLT);
36027 type StablePtr = TokenLTPtr;
36028 type Green = TokenLTGreen;
36029 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36030 TokenLTGreen(
36031 Arc::new(GreenNode {
36032 kind: SyntaxKind::TokenMissing,
36033 details: GreenNodeDetails::Token("".into()),
36034 })
36035 .intern(db),
36036 )
36037 }
36038 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36039 match node.lookup_intern(db).green.lookup_intern(db).details {
36040 GreenNodeDetails::Token(_) => Self { node },
36041 GreenNodeDetails::Node { .. } => {
36042 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLT)
36043 }
36044 }
36045 }
36046 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36047 match node.lookup_intern(db).green.lookup_intern(db).details {
36048 GreenNodeDetails::Token(_) => Some(Self { node }),
36049 GreenNodeDetails::Node { .. } => None,
36050 }
36051 }
36052 fn as_syntax_node(&self) -> SyntaxNode {
36053 self.node
36054 }
36055 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36056 TokenLTPtr(self.node.stable_ptr(db))
36057 }
36058}
36059#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36060pub struct TerminalLT {
36061 node: SyntaxNode,
36062}
36063impl Terminal for TerminalLT {
36064 const KIND: SyntaxKind = SyntaxKind::TerminalLT;
36065 type TokenType = TokenLT;
36066 fn new_green(
36067 db: &dyn SyntaxGroup,
36068 leading_trivia: TriviaGreen,
36069 token: <<TerminalLT as Terminal>::TokenType as TypedSyntaxNode>::Green,
36070 trailing_trivia: TriviaGreen,
36071 ) -> Self::Green {
36072 let children = [leading_trivia.0, token.0, trailing_trivia.0];
36073 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
36074 TerminalLTGreen(
36075 Arc::new(GreenNode {
36076 kind: SyntaxKind::TerminalLT,
36077 details: GreenNodeDetails::Node { children: children.into(), width },
36078 })
36079 .intern(db),
36080 )
36081 }
36082 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36083 let GreenNodeDetails::Node { children, .. } =
36084 &self.node.lookup_intern(db).green.lookup_intern(db).details
36085 else {
36086 unreachable!("Expected a node, not a token");
36087 };
36088 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
36089 }
36090}
36091impl TerminalLT {
36092 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36093 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
36094 }
36095 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLT {
36096 TokenLT::from_syntax_node(db, self.node.get_children(db)[1])
36097 }
36098 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36099 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
36100 }
36101}
36102#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36103pub struct TerminalLTPtr(pub SyntaxStablePtrId);
36104impl TerminalLTPtr {}
36105impl TypedStablePtr for TerminalLTPtr {
36106 type SyntaxNode = TerminalLT;
36107 fn untyped(&self) -> SyntaxStablePtrId {
36108 self.0
36109 }
36110 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLT {
36111 TerminalLT::from_syntax_node(db, self.0.lookup(db))
36112 }
36113}
36114impl From<TerminalLTPtr> for SyntaxStablePtrId {
36115 fn from(ptr: TerminalLTPtr) -> Self {
36116 ptr.untyped()
36117 }
36118}
36119#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36120pub struct TerminalLTGreen(pub GreenId);
36121impl TypedSyntaxNode for TerminalLT {
36122 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLT);
36123 type StablePtr = TerminalLTPtr;
36124 type Green = TerminalLTGreen;
36125 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36126 TerminalLTGreen(
36127 Arc::new(GreenNode {
36128 kind: SyntaxKind::TerminalLT,
36129 details: GreenNodeDetails::Node {
36130 children: [
36131 Trivia::missing(db).0,
36132 TokenLT::missing(db).0,
36133 Trivia::missing(db).0,
36134 ]
36135 .into(),
36136 width: TextWidth::default(),
36137 },
36138 })
36139 .intern(db),
36140 )
36141 }
36142 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36143 let kind = node.kind(db);
36144 assert_eq!(
36145 kind,
36146 SyntaxKind::TerminalLT,
36147 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36148 kind,
36149 SyntaxKind::TerminalLT
36150 );
36151 Self { node }
36152 }
36153 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36154 let kind = node.kind(db);
36155 if kind == SyntaxKind::TerminalLT { Some(Self::from_syntax_node(db, node)) } else { None }
36156 }
36157 fn as_syntax_node(&self) -> SyntaxNode {
36158 self.node
36159 }
36160 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36161 TerminalLTPtr(self.node.stable_ptr(db))
36162 }
36163}
36164#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36165pub struct TokenMatchArrow {
36166 node: SyntaxNode,
36167}
36168impl Token for TokenMatchArrow {
36169 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36170 TokenMatchArrowGreen(
36171 Arc::new(GreenNode {
36172 kind: SyntaxKind::TokenMatchArrow,
36173 details: GreenNodeDetails::Token(text),
36174 })
36175 .intern(db),
36176 )
36177 }
36178 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36179 extract_matches!(
36180 &self.node.lookup_intern(db).green.lookup_intern(db).details,
36181 GreenNodeDetails::Token
36182 )
36183 .clone()
36184 }
36185}
36186#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36187pub struct TokenMatchArrowPtr(pub SyntaxStablePtrId);
36188impl TypedStablePtr for TokenMatchArrowPtr {
36189 type SyntaxNode = TokenMatchArrow;
36190 fn untyped(&self) -> SyntaxStablePtrId {
36191 self.0
36192 }
36193 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
36194 TokenMatchArrow::from_syntax_node(db, self.0.lookup(db))
36195 }
36196}
36197impl From<TokenMatchArrowPtr> for SyntaxStablePtrId {
36198 fn from(ptr: TokenMatchArrowPtr) -> Self {
36199 ptr.untyped()
36200 }
36201}
36202#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36203pub struct TokenMatchArrowGreen(pub GreenId);
36204impl TokenMatchArrowGreen {
36205 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36206 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36207 }
36208}
36209impl TypedSyntaxNode for TokenMatchArrow {
36210 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatchArrow);
36211 type StablePtr = TokenMatchArrowPtr;
36212 type Green = TokenMatchArrowGreen;
36213 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36214 TokenMatchArrowGreen(
36215 Arc::new(GreenNode {
36216 kind: SyntaxKind::TokenMissing,
36217 details: GreenNodeDetails::Token("".into()),
36218 })
36219 .intern(db),
36220 )
36221 }
36222 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36223 match node.lookup_intern(db).green.lookup_intern(db).details {
36224 GreenNodeDetails::Token(_) => Self { node },
36225 GreenNodeDetails::Node { .. } => {
36226 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatchArrow)
36227 }
36228 }
36229 }
36230 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36231 match node.lookup_intern(db).green.lookup_intern(db).details {
36232 GreenNodeDetails::Token(_) => Some(Self { node }),
36233 GreenNodeDetails::Node { .. } => None,
36234 }
36235 }
36236 fn as_syntax_node(&self) -> SyntaxNode {
36237 self.node
36238 }
36239 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36240 TokenMatchArrowPtr(self.node.stable_ptr(db))
36241 }
36242}
36243#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36244pub struct TerminalMatchArrow {
36245 node: SyntaxNode,
36246}
36247impl Terminal for TerminalMatchArrow {
36248 const KIND: SyntaxKind = SyntaxKind::TerminalMatchArrow;
36249 type TokenType = TokenMatchArrow;
36250 fn new_green(
36251 db: &dyn SyntaxGroup,
36252 leading_trivia: TriviaGreen,
36253 token: <<TerminalMatchArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
36254 trailing_trivia: TriviaGreen,
36255 ) -> Self::Green {
36256 let children = [leading_trivia.0, token.0, trailing_trivia.0];
36257 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
36258 TerminalMatchArrowGreen(
36259 Arc::new(GreenNode {
36260 kind: SyntaxKind::TerminalMatchArrow,
36261 details: GreenNodeDetails::Node { children: children.into(), width },
36262 })
36263 .intern(db),
36264 )
36265 }
36266 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36267 let GreenNodeDetails::Node { children, .. } =
36268 &self.node.lookup_intern(db).green.lookup_intern(db).details
36269 else {
36270 unreachable!("Expected a node, not a token");
36271 };
36272 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
36273 }
36274}
36275impl TerminalMatchArrow {
36276 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36277 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
36278 }
36279 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
36280 TokenMatchArrow::from_syntax_node(db, self.node.get_children(db)[1])
36281 }
36282 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36283 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
36284 }
36285}
36286#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36287pub struct TerminalMatchArrowPtr(pub SyntaxStablePtrId);
36288impl TerminalMatchArrowPtr {}
36289impl TypedStablePtr for TerminalMatchArrowPtr {
36290 type SyntaxNode = TerminalMatchArrow;
36291 fn untyped(&self) -> SyntaxStablePtrId {
36292 self.0
36293 }
36294 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
36295 TerminalMatchArrow::from_syntax_node(db, self.0.lookup(db))
36296 }
36297}
36298impl From<TerminalMatchArrowPtr> for SyntaxStablePtrId {
36299 fn from(ptr: TerminalMatchArrowPtr) -> Self {
36300 ptr.untyped()
36301 }
36302}
36303#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36304pub struct TerminalMatchArrowGreen(pub GreenId);
36305impl TypedSyntaxNode for TerminalMatchArrow {
36306 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatchArrow);
36307 type StablePtr = TerminalMatchArrowPtr;
36308 type Green = TerminalMatchArrowGreen;
36309 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36310 TerminalMatchArrowGreen(
36311 Arc::new(GreenNode {
36312 kind: SyntaxKind::TerminalMatchArrow,
36313 details: GreenNodeDetails::Node {
36314 children: [
36315 Trivia::missing(db).0,
36316 TokenMatchArrow::missing(db).0,
36317 Trivia::missing(db).0,
36318 ]
36319 .into(),
36320 width: TextWidth::default(),
36321 },
36322 })
36323 .intern(db),
36324 )
36325 }
36326 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36327 let kind = node.kind(db);
36328 assert_eq!(
36329 kind,
36330 SyntaxKind::TerminalMatchArrow,
36331 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36332 kind,
36333 SyntaxKind::TerminalMatchArrow
36334 );
36335 Self { node }
36336 }
36337 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36338 let kind = node.kind(db);
36339 if kind == SyntaxKind::TerminalMatchArrow {
36340 Some(Self::from_syntax_node(db, node))
36341 } else {
36342 None
36343 }
36344 }
36345 fn as_syntax_node(&self) -> SyntaxNode {
36346 self.node
36347 }
36348 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36349 TerminalMatchArrowPtr(self.node.stable_ptr(db))
36350 }
36351}
36352#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36353pub struct TokenMinus {
36354 node: SyntaxNode,
36355}
36356impl Token for TokenMinus {
36357 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36358 TokenMinusGreen(
36359 Arc::new(GreenNode {
36360 kind: SyntaxKind::TokenMinus,
36361 details: GreenNodeDetails::Token(text),
36362 })
36363 .intern(db),
36364 )
36365 }
36366 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36367 extract_matches!(
36368 &self.node.lookup_intern(db).green.lookup_intern(db).details,
36369 GreenNodeDetails::Token
36370 )
36371 .clone()
36372 }
36373}
36374#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36375pub struct TokenMinusPtr(pub SyntaxStablePtrId);
36376impl TypedStablePtr for TokenMinusPtr {
36377 type SyntaxNode = TokenMinus;
36378 fn untyped(&self) -> SyntaxStablePtrId {
36379 self.0
36380 }
36381 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinus {
36382 TokenMinus::from_syntax_node(db, self.0.lookup(db))
36383 }
36384}
36385impl From<TokenMinusPtr> for SyntaxStablePtrId {
36386 fn from(ptr: TokenMinusPtr) -> Self {
36387 ptr.untyped()
36388 }
36389}
36390#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36391pub struct TokenMinusGreen(pub GreenId);
36392impl TokenMinusGreen {
36393 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36394 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36395 }
36396}
36397impl TypedSyntaxNode for TokenMinus {
36398 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinus);
36399 type StablePtr = TokenMinusPtr;
36400 type Green = TokenMinusGreen;
36401 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36402 TokenMinusGreen(
36403 Arc::new(GreenNode {
36404 kind: SyntaxKind::TokenMissing,
36405 details: GreenNodeDetails::Token("".into()),
36406 })
36407 .intern(db),
36408 )
36409 }
36410 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36411 match node.lookup_intern(db).green.lookup_intern(db).details {
36412 GreenNodeDetails::Token(_) => Self { node },
36413 GreenNodeDetails::Node { .. } => {
36414 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinus)
36415 }
36416 }
36417 }
36418 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36419 match node.lookup_intern(db).green.lookup_intern(db).details {
36420 GreenNodeDetails::Token(_) => Some(Self { node }),
36421 GreenNodeDetails::Node { .. } => None,
36422 }
36423 }
36424 fn as_syntax_node(&self) -> SyntaxNode {
36425 self.node
36426 }
36427 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36428 TokenMinusPtr(self.node.stable_ptr(db))
36429 }
36430}
36431#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36432pub struct TerminalMinus {
36433 node: SyntaxNode,
36434}
36435impl Terminal for TerminalMinus {
36436 const KIND: SyntaxKind = SyntaxKind::TerminalMinus;
36437 type TokenType = TokenMinus;
36438 fn new_green(
36439 db: &dyn SyntaxGroup,
36440 leading_trivia: TriviaGreen,
36441 token: <<TerminalMinus as Terminal>::TokenType as TypedSyntaxNode>::Green,
36442 trailing_trivia: TriviaGreen,
36443 ) -> Self::Green {
36444 let children = [leading_trivia.0, token.0, trailing_trivia.0];
36445 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
36446 TerminalMinusGreen(
36447 Arc::new(GreenNode {
36448 kind: SyntaxKind::TerminalMinus,
36449 details: GreenNodeDetails::Node { children: children.into(), width },
36450 })
36451 .intern(db),
36452 )
36453 }
36454 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36455 let GreenNodeDetails::Node { children, .. } =
36456 &self.node.lookup_intern(db).green.lookup_intern(db).details
36457 else {
36458 unreachable!("Expected a node, not a token");
36459 };
36460 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
36461 }
36462}
36463impl TerminalMinus {
36464 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36465 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
36466 }
36467 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinus {
36468 TokenMinus::from_syntax_node(db, self.node.get_children(db)[1])
36469 }
36470 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36471 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
36472 }
36473}
36474#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36475pub struct TerminalMinusPtr(pub SyntaxStablePtrId);
36476impl TerminalMinusPtr {}
36477impl TypedStablePtr for TerminalMinusPtr {
36478 type SyntaxNode = TerminalMinus;
36479 fn untyped(&self) -> SyntaxStablePtrId {
36480 self.0
36481 }
36482 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
36483 TerminalMinus::from_syntax_node(db, self.0.lookup(db))
36484 }
36485}
36486impl From<TerminalMinusPtr> for SyntaxStablePtrId {
36487 fn from(ptr: TerminalMinusPtr) -> Self {
36488 ptr.untyped()
36489 }
36490}
36491#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36492pub struct TerminalMinusGreen(pub GreenId);
36493impl TypedSyntaxNode for TerminalMinus {
36494 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinus);
36495 type StablePtr = TerminalMinusPtr;
36496 type Green = TerminalMinusGreen;
36497 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36498 TerminalMinusGreen(
36499 Arc::new(GreenNode {
36500 kind: SyntaxKind::TerminalMinus,
36501 details: GreenNodeDetails::Node {
36502 children: [
36503 Trivia::missing(db).0,
36504 TokenMinus::missing(db).0,
36505 Trivia::missing(db).0,
36506 ]
36507 .into(),
36508 width: TextWidth::default(),
36509 },
36510 })
36511 .intern(db),
36512 )
36513 }
36514 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36515 let kind = node.kind(db);
36516 assert_eq!(
36517 kind,
36518 SyntaxKind::TerminalMinus,
36519 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36520 kind,
36521 SyntaxKind::TerminalMinus
36522 );
36523 Self { node }
36524 }
36525 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36526 let kind = node.kind(db);
36527 if kind == SyntaxKind::TerminalMinus {
36528 Some(Self::from_syntax_node(db, node))
36529 } else {
36530 None
36531 }
36532 }
36533 fn as_syntax_node(&self) -> SyntaxNode {
36534 self.node
36535 }
36536 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36537 TerminalMinusPtr(self.node.stable_ptr(db))
36538 }
36539}
36540#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36541pub struct TokenMinusEq {
36542 node: SyntaxNode,
36543}
36544impl Token for TokenMinusEq {
36545 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36546 TokenMinusEqGreen(
36547 Arc::new(GreenNode {
36548 kind: SyntaxKind::TokenMinusEq,
36549 details: GreenNodeDetails::Token(text),
36550 })
36551 .intern(db),
36552 )
36553 }
36554 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36555 extract_matches!(
36556 &self.node.lookup_intern(db).green.lookup_intern(db).details,
36557 GreenNodeDetails::Token
36558 )
36559 .clone()
36560 }
36561}
36562#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36563pub struct TokenMinusEqPtr(pub SyntaxStablePtrId);
36564impl TypedStablePtr for TokenMinusEqPtr {
36565 type SyntaxNode = TokenMinusEq;
36566 fn untyped(&self) -> SyntaxStablePtrId {
36567 self.0
36568 }
36569 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
36570 TokenMinusEq::from_syntax_node(db, self.0.lookup(db))
36571 }
36572}
36573impl From<TokenMinusEqPtr> for SyntaxStablePtrId {
36574 fn from(ptr: TokenMinusEqPtr) -> Self {
36575 ptr.untyped()
36576 }
36577}
36578#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36579pub struct TokenMinusEqGreen(pub GreenId);
36580impl TokenMinusEqGreen {
36581 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36582 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36583 }
36584}
36585impl TypedSyntaxNode for TokenMinusEq {
36586 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinusEq);
36587 type StablePtr = TokenMinusEqPtr;
36588 type Green = TokenMinusEqGreen;
36589 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36590 TokenMinusEqGreen(
36591 Arc::new(GreenNode {
36592 kind: SyntaxKind::TokenMissing,
36593 details: GreenNodeDetails::Token("".into()),
36594 })
36595 .intern(db),
36596 )
36597 }
36598 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36599 match node.lookup_intern(db).green.lookup_intern(db).details {
36600 GreenNodeDetails::Token(_) => Self { node },
36601 GreenNodeDetails::Node { .. } => {
36602 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinusEq)
36603 }
36604 }
36605 }
36606 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36607 match node.lookup_intern(db).green.lookup_intern(db).details {
36608 GreenNodeDetails::Token(_) => Some(Self { node }),
36609 GreenNodeDetails::Node { .. } => None,
36610 }
36611 }
36612 fn as_syntax_node(&self) -> SyntaxNode {
36613 self.node
36614 }
36615 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36616 TokenMinusEqPtr(self.node.stable_ptr(db))
36617 }
36618}
36619#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36620pub struct TerminalMinusEq {
36621 node: SyntaxNode,
36622}
36623impl Terminal for TerminalMinusEq {
36624 const KIND: SyntaxKind = SyntaxKind::TerminalMinusEq;
36625 type TokenType = TokenMinusEq;
36626 fn new_green(
36627 db: &dyn SyntaxGroup,
36628 leading_trivia: TriviaGreen,
36629 token: <<TerminalMinusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
36630 trailing_trivia: TriviaGreen,
36631 ) -> Self::Green {
36632 let children = [leading_trivia.0, token.0, trailing_trivia.0];
36633 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
36634 TerminalMinusEqGreen(
36635 Arc::new(GreenNode {
36636 kind: SyntaxKind::TerminalMinusEq,
36637 details: GreenNodeDetails::Node { children: children.into(), width },
36638 })
36639 .intern(db),
36640 )
36641 }
36642 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36643 let GreenNodeDetails::Node { children, .. } =
36644 &self.node.lookup_intern(db).green.lookup_intern(db).details
36645 else {
36646 unreachable!("Expected a node, not a token");
36647 };
36648 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
36649 }
36650}
36651impl TerminalMinusEq {
36652 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36653 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
36654 }
36655 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
36656 TokenMinusEq::from_syntax_node(db, self.node.get_children(db)[1])
36657 }
36658 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36659 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
36660 }
36661}
36662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36663pub struct TerminalMinusEqPtr(pub SyntaxStablePtrId);
36664impl TerminalMinusEqPtr {}
36665impl TypedStablePtr for TerminalMinusEqPtr {
36666 type SyntaxNode = TerminalMinusEq;
36667 fn untyped(&self) -> SyntaxStablePtrId {
36668 self.0
36669 }
36670 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinusEq {
36671 TerminalMinusEq::from_syntax_node(db, self.0.lookup(db))
36672 }
36673}
36674impl From<TerminalMinusEqPtr> for SyntaxStablePtrId {
36675 fn from(ptr: TerminalMinusEqPtr) -> Self {
36676 ptr.untyped()
36677 }
36678}
36679#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36680pub struct TerminalMinusEqGreen(pub GreenId);
36681impl TypedSyntaxNode for TerminalMinusEq {
36682 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinusEq);
36683 type StablePtr = TerminalMinusEqPtr;
36684 type Green = TerminalMinusEqGreen;
36685 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36686 TerminalMinusEqGreen(
36687 Arc::new(GreenNode {
36688 kind: SyntaxKind::TerminalMinusEq,
36689 details: GreenNodeDetails::Node {
36690 children: [
36691 Trivia::missing(db).0,
36692 TokenMinusEq::missing(db).0,
36693 Trivia::missing(db).0,
36694 ]
36695 .into(),
36696 width: TextWidth::default(),
36697 },
36698 })
36699 .intern(db),
36700 )
36701 }
36702 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36703 let kind = node.kind(db);
36704 assert_eq!(
36705 kind,
36706 SyntaxKind::TerminalMinusEq,
36707 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36708 kind,
36709 SyntaxKind::TerminalMinusEq
36710 );
36711 Self { node }
36712 }
36713 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36714 let kind = node.kind(db);
36715 if kind == SyntaxKind::TerminalMinusEq {
36716 Some(Self::from_syntax_node(db, node))
36717 } else {
36718 None
36719 }
36720 }
36721 fn as_syntax_node(&self) -> SyntaxNode {
36722 self.node
36723 }
36724 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36725 TerminalMinusEqPtr(self.node.stable_ptr(db))
36726 }
36727}
36728#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36729pub struct TokenMod {
36730 node: SyntaxNode,
36731}
36732impl Token for TokenMod {
36733 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36734 TokenModGreen(
36735 Arc::new(GreenNode {
36736 kind: SyntaxKind::TokenMod,
36737 details: GreenNodeDetails::Token(text),
36738 })
36739 .intern(db),
36740 )
36741 }
36742 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36743 extract_matches!(
36744 &self.node.lookup_intern(db).green.lookup_intern(db).details,
36745 GreenNodeDetails::Token
36746 )
36747 .clone()
36748 }
36749}
36750#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36751pub struct TokenModPtr(pub SyntaxStablePtrId);
36752impl TypedStablePtr for TokenModPtr {
36753 type SyntaxNode = TokenMod;
36754 fn untyped(&self) -> SyntaxStablePtrId {
36755 self.0
36756 }
36757 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMod {
36758 TokenMod::from_syntax_node(db, self.0.lookup(db))
36759 }
36760}
36761impl From<TokenModPtr> for SyntaxStablePtrId {
36762 fn from(ptr: TokenModPtr) -> Self {
36763 ptr.untyped()
36764 }
36765}
36766#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36767pub struct TokenModGreen(pub GreenId);
36768impl TokenModGreen {
36769 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36770 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36771 }
36772}
36773impl TypedSyntaxNode for TokenMod {
36774 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMod);
36775 type StablePtr = TokenModPtr;
36776 type Green = TokenModGreen;
36777 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36778 TokenModGreen(
36779 Arc::new(GreenNode {
36780 kind: SyntaxKind::TokenMissing,
36781 details: GreenNodeDetails::Token("".into()),
36782 })
36783 .intern(db),
36784 )
36785 }
36786 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36787 match node.lookup_intern(db).green.lookup_intern(db).details {
36788 GreenNodeDetails::Token(_) => Self { node },
36789 GreenNodeDetails::Node { .. } => {
36790 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMod)
36791 }
36792 }
36793 }
36794 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36795 match node.lookup_intern(db).green.lookup_intern(db).details {
36796 GreenNodeDetails::Token(_) => Some(Self { node }),
36797 GreenNodeDetails::Node { .. } => None,
36798 }
36799 }
36800 fn as_syntax_node(&self) -> SyntaxNode {
36801 self.node
36802 }
36803 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36804 TokenModPtr(self.node.stable_ptr(db))
36805 }
36806}
36807#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36808pub struct TerminalMod {
36809 node: SyntaxNode,
36810}
36811impl Terminal for TerminalMod {
36812 const KIND: SyntaxKind = SyntaxKind::TerminalMod;
36813 type TokenType = TokenMod;
36814 fn new_green(
36815 db: &dyn SyntaxGroup,
36816 leading_trivia: TriviaGreen,
36817 token: <<TerminalMod as Terminal>::TokenType as TypedSyntaxNode>::Green,
36818 trailing_trivia: TriviaGreen,
36819 ) -> Self::Green {
36820 let children = [leading_trivia.0, token.0, trailing_trivia.0];
36821 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
36822 TerminalModGreen(
36823 Arc::new(GreenNode {
36824 kind: SyntaxKind::TerminalMod,
36825 details: GreenNodeDetails::Node { children: children.into(), width },
36826 })
36827 .intern(db),
36828 )
36829 }
36830 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36831 let GreenNodeDetails::Node { children, .. } =
36832 &self.node.lookup_intern(db).green.lookup_intern(db).details
36833 else {
36834 unreachable!("Expected a node, not a token");
36835 };
36836 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
36837 }
36838}
36839impl TerminalMod {
36840 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36841 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
36842 }
36843 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMod {
36844 TokenMod::from_syntax_node(db, self.node.get_children(db)[1])
36845 }
36846 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36847 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
36848 }
36849}
36850#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36851pub struct TerminalModPtr(pub SyntaxStablePtrId);
36852impl TerminalModPtr {}
36853impl TypedStablePtr for TerminalModPtr {
36854 type SyntaxNode = TerminalMod;
36855 fn untyped(&self) -> SyntaxStablePtrId {
36856 self.0
36857 }
36858 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMod {
36859 TerminalMod::from_syntax_node(db, self.0.lookup(db))
36860 }
36861}
36862impl From<TerminalModPtr> for SyntaxStablePtrId {
36863 fn from(ptr: TerminalModPtr) -> Self {
36864 ptr.untyped()
36865 }
36866}
36867#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36868pub struct TerminalModGreen(pub GreenId);
36869impl TypedSyntaxNode for TerminalMod {
36870 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMod);
36871 type StablePtr = TerminalModPtr;
36872 type Green = TerminalModGreen;
36873 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36874 TerminalModGreen(
36875 Arc::new(GreenNode {
36876 kind: SyntaxKind::TerminalMod,
36877 details: GreenNodeDetails::Node {
36878 children: [
36879 Trivia::missing(db).0,
36880 TokenMod::missing(db).0,
36881 Trivia::missing(db).0,
36882 ]
36883 .into(),
36884 width: TextWidth::default(),
36885 },
36886 })
36887 .intern(db),
36888 )
36889 }
36890 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36891 let kind = node.kind(db);
36892 assert_eq!(
36893 kind,
36894 SyntaxKind::TerminalMod,
36895 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36896 kind,
36897 SyntaxKind::TerminalMod
36898 );
36899 Self { node }
36900 }
36901 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36902 let kind = node.kind(db);
36903 if kind == SyntaxKind::TerminalMod { Some(Self::from_syntax_node(db, node)) } else { None }
36904 }
36905 fn as_syntax_node(&self) -> SyntaxNode {
36906 self.node
36907 }
36908 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36909 TerminalModPtr(self.node.stable_ptr(db))
36910 }
36911}
36912#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36913pub struct TokenModEq {
36914 node: SyntaxNode,
36915}
36916impl Token for TokenModEq {
36917 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36918 TokenModEqGreen(
36919 Arc::new(GreenNode {
36920 kind: SyntaxKind::TokenModEq,
36921 details: GreenNodeDetails::Token(text),
36922 })
36923 .intern(db),
36924 )
36925 }
36926 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36927 extract_matches!(
36928 &self.node.lookup_intern(db).green.lookup_intern(db).details,
36929 GreenNodeDetails::Token
36930 )
36931 .clone()
36932 }
36933}
36934#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36935pub struct TokenModEqPtr(pub SyntaxStablePtrId);
36936impl TypedStablePtr for TokenModEqPtr {
36937 type SyntaxNode = TokenModEq;
36938 fn untyped(&self) -> SyntaxStablePtrId {
36939 self.0
36940 }
36941 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModEq {
36942 TokenModEq::from_syntax_node(db, self.0.lookup(db))
36943 }
36944}
36945impl From<TokenModEqPtr> for SyntaxStablePtrId {
36946 fn from(ptr: TokenModEqPtr) -> Self {
36947 ptr.untyped()
36948 }
36949}
36950#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36951pub struct TokenModEqGreen(pub GreenId);
36952impl TokenModEqGreen {
36953 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36954 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36955 }
36956}
36957impl TypedSyntaxNode for TokenModEq {
36958 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModEq);
36959 type StablePtr = TokenModEqPtr;
36960 type Green = TokenModEqGreen;
36961 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36962 TokenModEqGreen(
36963 Arc::new(GreenNode {
36964 kind: SyntaxKind::TokenMissing,
36965 details: GreenNodeDetails::Token("".into()),
36966 })
36967 .intern(db),
36968 )
36969 }
36970 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36971 match node.lookup_intern(db).green.lookup_intern(db).details {
36972 GreenNodeDetails::Token(_) => Self { node },
36973 GreenNodeDetails::Node { .. } => {
36974 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModEq)
36975 }
36976 }
36977 }
36978 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36979 match node.lookup_intern(db).green.lookup_intern(db).details {
36980 GreenNodeDetails::Token(_) => Some(Self { node }),
36981 GreenNodeDetails::Node { .. } => None,
36982 }
36983 }
36984 fn as_syntax_node(&self) -> SyntaxNode {
36985 self.node
36986 }
36987 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
36988 TokenModEqPtr(self.node.stable_ptr(db))
36989 }
36990}
36991#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36992pub struct TerminalModEq {
36993 node: SyntaxNode,
36994}
36995impl Terminal for TerminalModEq {
36996 const KIND: SyntaxKind = SyntaxKind::TerminalModEq;
36997 type TokenType = TokenModEq;
36998 fn new_green(
36999 db: &dyn SyntaxGroup,
37000 leading_trivia: TriviaGreen,
37001 token: <<TerminalModEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
37002 trailing_trivia: TriviaGreen,
37003 ) -> Self::Green {
37004 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37005 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37006 TerminalModEqGreen(
37007 Arc::new(GreenNode {
37008 kind: SyntaxKind::TerminalModEq,
37009 details: GreenNodeDetails::Node { children: children.into(), width },
37010 })
37011 .intern(db),
37012 )
37013 }
37014 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37015 let GreenNodeDetails::Node { children, .. } =
37016 &self.node.lookup_intern(db).green.lookup_intern(db).details
37017 else {
37018 unreachable!("Expected a node, not a token");
37019 };
37020 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37021 }
37022}
37023impl TerminalModEq {
37024 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37025 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37026 }
37027 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModEq {
37028 TokenModEq::from_syntax_node(db, self.node.get_children(db)[1])
37029 }
37030 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37031 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37032 }
37033}
37034#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37035pub struct TerminalModEqPtr(pub SyntaxStablePtrId);
37036impl TerminalModEqPtr {}
37037impl TypedStablePtr for TerminalModEqPtr {
37038 type SyntaxNode = TerminalModEq;
37039 fn untyped(&self) -> SyntaxStablePtrId {
37040 self.0
37041 }
37042 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModEq {
37043 TerminalModEq::from_syntax_node(db, self.0.lookup(db))
37044 }
37045}
37046impl From<TerminalModEqPtr> for SyntaxStablePtrId {
37047 fn from(ptr: TerminalModEqPtr) -> Self {
37048 ptr.untyped()
37049 }
37050}
37051#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37052pub struct TerminalModEqGreen(pub GreenId);
37053impl TypedSyntaxNode for TerminalModEq {
37054 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModEq);
37055 type StablePtr = TerminalModEqPtr;
37056 type Green = TerminalModEqGreen;
37057 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37058 TerminalModEqGreen(
37059 Arc::new(GreenNode {
37060 kind: SyntaxKind::TerminalModEq,
37061 details: GreenNodeDetails::Node {
37062 children: [
37063 Trivia::missing(db).0,
37064 TokenModEq::missing(db).0,
37065 Trivia::missing(db).0,
37066 ]
37067 .into(),
37068 width: TextWidth::default(),
37069 },
37070 })
37071 .intern(db),
37072 )
37073 }
37074 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37075 let kind = node.kind(db);
37076 assert_eq!(
37077 kind,
37078 SyntaxKind::TerminalModEq,
37079 "Unexpected SyntaxKind {:?}. Expected {:?}.",
37080 kind,
37081 SyntaxKind::TerminalModEq
37082 );
37083 Self { node }
37084 }
37085 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37086 let kind = node.kind(db);
37087 if kind == SyntaxKind::TerminalModEq {
37088 Some(Self::from_syntax_node(db, node))
37089 } else {
37090 None
37091 }
37092 }
37093 fn as_syntax_node(&self) -> SyntaxNode {
37094 self.node
37095 }
37096 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37097 TerminalModEqPtr(self.node.stable_ptr(db))
37098 }
37099}
37100#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37101pub struct TokenMul {
37102 node: SyntaxNode,
37103}
37104impl Token for TokenMul {
37105 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37106 TokenMulGreen(
37107 Arc::new(GreenNode {
37108 kind: SyntaxKind::TokenMul,
37109 details: GreenNodeDetails::Token(text),
37110 })
37111 .intern(db),
37112 )
37113 }
37114 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37115 extract_matches!(
37116 &self.node.lookup_intern(db).green.lookup_intern(db).details,
37117 GreenNodeDetails::Token
37118 )
37119 .clone()
37120 }
37121}
37122#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37123pub struct TokenMulPtr(pub SyntaxStablePtrId);
37124impl TypedStablePtr for TokenMulPtr {
37125 type SyntaxNode = TokenMul;
37126 fn untyped(&self) -> SyntaxStablePtrId {
37127 self.0
37128 }
37129 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMul {
37130 TokenMul::from_syntax_node(db, self.0.lookup(db))
37131 }
37132}
37133impl From<TokenMulPtr> for SyntaxStablePtrId {
37134 fn from(ptr: TokenMulPtr) -> Self {
37135 ptr.untyped()
37136 }
37137}
37138#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37139pub struct TokenMulGreen(pub GreenId);
37140impl TokenMulGreen {
37141 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37142 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37143 }
37144}
37145impl TypedSyntaxNode for TokenMul {
37146 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMul);
37147 type StablePtr = TokenMulPtr;
37148 type Green = TokenMulGreen;
37149 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37150 TokenMulGreen(
37151 Arc::new(GreenNode {
37152 kind: SyntaxKind::TokenMissing,
37153 details: GreenNodeDetails::Token("".into()),
37154 })
37155 .intern(db),
37156 )
37157 }
37158 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37159 match node.lookup_intern(db).green.lookup_intern(db).details {
37160 GreenNodeDetails::Token(_) => Self { node },
37161 GreenNodeDetails::Node { .. } => {
37162 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMul)
37163 }
37164 }
37165 }
37166 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37167 match node.lookup_intern(db).green.lookup_intern(db).details {
37168 GreenNodeDetails::Token(_) => Some(Self { node }),
37169 GreenNodeDetails::Node { .. } => None,
37170 }
37171 }
37172 fn as_syntax_node(&self) -> SyntaxNode {
37173 self.node
37174 }
37175 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37176 TokenMulPtr(self.node.stable_ptr(db))
37177 }
37178}
37179#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37180pub struct TerminalMul {
37181 node: SyntaxNode,
37182}
37183impl Terminal for TerminalMul {
37184 const KIND: SyntaxKind = SyntaxKind::TerminalMul;
37185 type TokenType = TokenMul;
37186 fn new_green(
37187 db: &dyn SyntaxGroup,
37188 leading_trivia: TriviaGreen,
37189 token: <<TerminalMul as Terminal>::TokenType as TypedSyntaxNode>::Green,
37190 trailing_trivia: TriviaGreen,
37191 ) -> Self::Green {
37192 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37193 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37194 TerminalMulGreen(
37195 Arc::new(GreenNode {
37196 kind: SyntaxKind::TerminalMul,
37197 details: GreenNodeDetails::Node { children: children.into(), width },
37198 })
37199 .intern(db),
37200 )
37201 }
37202 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37203 let GreenNodeDetails::Node { children, .. } =
37204 &self.node.lookup_intern(db).green.lookup_intern(db).details
37205 else {
37206 unreachable!("Expected a node, not a token");
37207 };
37208 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37209 }
37210}
37211impl TerminalMul {
37212 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37213 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37214 }
37215 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMul {
37216 TokenMul::from_syntax_node(db, self.node.get_children(db)[1])
37217 }
37218 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37219 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37220 }
37221}
37222#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37223pub struct TerminalMulPtr(pub SyntaxStablePtrId);
37224impl TerminalMulPtr {}
37225impl TypedStablePtr for TerminalMulPtr {
37226 type SyntaxNode = TerminalMul;
37227 fn untyped(&self) -> SyntaxStablePtrId {
37228 self.0
37229 }
37230 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMul {
37231 TerminalMul::from_syntax_node(db, self.0.lookup(db))
37232 }
37233}
37234impl From<TerminalMulPtr> for SyntaxStablePtrId {
37235 fn from(ptr: TerminalMulPtr) -> Self {
37236 ptr.untyped()
37237 }
37238}
37239#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37240pub struct TerminalMulGreen(pub GreenId);
37241impl TypedSyntaxNode for TerminalMul {
37242 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMul);
37243 type StablePtr = TerminalMulPtr;
37244 type Green = TerminalMulGreen;
37245 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37246 TerminalMulGreen(
37247 Arc::new(GreenNode {
37248 kind: SyntaxKind::TerminalMul,
37249 details: GreenNodeDetails::Node {
37250 children: [
37251 Trivia::missing(db).0,
37252 TokenMul::missing(db).0,
37253 Trivia::missing(db).0,
37254 ]
37255 .into(),
37256 width: TextWidth::default(),
37257 },
37258 })
37259 .intern(db),
37260 )
37261 }
37262 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37263 let kind = node.kind(db);
37264 assert_eq!(
37265 kind,
37266 SyntaxKind::TerminalMul,
37267 "Unexpected SyntaxKind {:?}. Expected {:?}.",
37268 kind,
37269 SyntaxKind::TerminalMul
37270 );
37271 Self { node }
37272 }
37273 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37274 let kind = node.kind(db);
37275 if kind == SyntaxKind::TerminalMul { Some(Self::from_syntax_node(db, node)) } else { None }
37276 }
37277 fn as_syntax_node(&self) -> SyntaxNode {
37278 self.node
37279 }
37280 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37281 TerminalMulPtr(self.node.stable_ptr(db))
37282 }
37283}
37284#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37285pub struct TokenMulEq {
37286 node: SyntaxNode,
37287}
37288impl Token for TokenMulEq {
37289 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37290 TokenMulEqGreen(
37291 Arc::new(GreenNode {
37292 kind: SyntaxKind::TokenMulEq,
37293 details: GreenNodeDetails::Token(text),
37294 })
37295 .intern(db),
37296 )
37297 }
37298 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37299 extract_matches!(
37300 &self.node.lookup_intern(db).green.lookup_intern(db).details,
37301 GreenNodeDetails::Token
37302 )
37303 .clone()
37304 }
37305}
37306#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37307pub struct TokenMulEqPtr(pub SyntaxStablePtrId);
37308impl TypedStablePtr for TokenMulEqPtr {
37309 type SyntaxNode = TokenMulEq;
37310 fn untyped(&self) -> SyntaxStablePtrId {
37311 self.0
37312 }
37313 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
37314 TokenMulEq::from_syntax_node(db, self.0.lookup(db))
37315 }
37316}
37317impl From<TokenMulEqPtr> for SyntaxStablePtrId {
37318 fn from(ptr: TokenMulEqPtr) -> Self {
37319 ptr.untyped()
37320 }
37321}
37322#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37323pub struct TokenMulEqGreen(pub GreenId);
37324impl TokenMulEqGreen {
37325 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37326 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37327 }
37328}
37329impl TypedSyntaxNode for TokenMulEq {
37330 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMulEq);
37331 type StablePtr = TokenMulEqPtr;
37332 type Green = TokenMulEqGreen;
37333 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37334 TokenMulEqGreen(
37335 Arc::new(GreenNode {
37336 kind: SyntaxKind::TokenMissing,
37337 details: GreenNodeDetails::Token("".into()),
37338 })
37339 .intern(db),
37340 )
37341 }
37342 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37343 match node.lookup_intern(db).green.lookup_intern(db).details {
37344 GreenNodeDetails::Token(_) => Self { node },
37345 GreenNodeDetails::Node { .. } => {
37346 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMulEq)
37347 }
37348 }
37349 }
37350 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37351 match node.lookup_intern(db).green.lookup_intern(db).details {
37352 GreenNodeDetails::Token(_) => Some(Self { node }),
37353 GreenNodeDetails::Node { .. } => None,
37354 }
37355 }
37356 fn as_syntax_node(&self) -> SyntaxNode {
37357 self.node
37358 }
37359 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37360 TokenMulEqPtr(self.node.stable_ptr(db))
37361 }
37362}
37363#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37364pub struct TerminalMulEq {
37365 node: SyntaxNode,
37366}
37367impl Terminal for TerminalMulEq {
37368 const KIND: SyntaxKind = SyntaxKind::TerminalMulEq;
37369 type TokenType = TokenMulEq;
37370 fn new_green(
37371 db: &dyn SyntaxGroup,
37372 leading_trivia: TriviaGreen,
37373 token: <<TerminalMulEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
37374 trailing_trivia: TriviaGreen,
37375 ) -> Self::Green {
37376 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37377 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37378 TerminalMulEqGreen(
37379 Arc::new(GreenNode {
37380 kind: SyntaxKind::TerminalMulEq,
37381 details: GreenNodeDetails::Node { children: children.into(), width },
37382 })
37383 .intern(db),
37384 )
37385 }
37386 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37387 let GreenNodeDetails::Node { children, .. } =
37388 &self.node.lookup_intern(db).green.lookup_intern(db).details
37389 else {
37390 unreachable!("Expected a node, not a token");
37391 };
37392 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37393 }
37394}
37395impl TerminalMulEq {
37396 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37397 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37398 }
37399 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
37400 TokenMulEq::from_syntax_node(db, self.node.get_children(db)[1])
37401 }
37402 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37403 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37404 }
37405}
37406#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37407pub struct TerminalMulEqPtr(pub SyntaxStablePtrId);
37408impl TerminalMulEqPtr {}
37409impl TypedStablePtr for TerminalMulEqPtr {
37410 type SyntaxNode = TerminalMulEq;
37411 fn untyped(&self) -> SyntaxStablePtrId {
37412 self.0
37413 }
37414 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMulEq {
37415 TerminalMulEq::from_syntax_node(db, self.0.lookup(db))
37416 }
37417}
37418impl From<TerminalMulEqPtr> for SyntaxStablePtrId {
37419 fn from(ptr: TerminalMulEqPtr) -> Self {
37420 ptr.untyped()
37421 }
37422}
37423#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37424pub struct TerminalMulEqGreen(pub GreenId);
37425impl TypedSyntaxNode for TerminalMulEq {
37426 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMulEq);
37427 type StablePtr = TerminalMulEqPtr;
37428 type Green = TerminalMulEqGreen;
37429 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37430 TerminalMulEqGreen(
37431 Arc::new(GreenNode {
37432 kind: SyntaxKind::TerminalMulEq,
37433 details: GreenNodeDetails::Node {
37434 children: [
37435 Trivia::missing(db).0,
37436 TokenMulEq::missing(db).0,
37437 Trivia::missing(db).0,
37438 ]
37439 .into(),
37440 width: TextWidth::default(),
37441 },
37442 })
37443 .intern(db),
37444 )
37445 }
37446 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37447 let kind = node.kind(db);
37448 assert_eq!(
37449 kind,
37450 SyntaxKind::TerminalMulEq,
37451 "Unexpected SyntaxKind {:?}. Expected {:?}.",
37452 kind,
37453 SyntaxKind::TerminalMulEq
37454 );
37455 Self { node }
37456 }
37457 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37458 let kind = node.kind(db);
37459 if kind == SyntaxKind::TerminalMulEq {
37460 Some(Self::from_syntax_node(db, node))
37461 } else {
37462 None
37463 }
37464 }
37465 fn as_syntax_node(&self) -> SyntaxNode {
37466 self.node
37467 }
37468 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37469 TerminalMulEqPtr(self.node.stable_ptr(db))
37470 }
37471}
37472#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37473pub struct TokenNeq {
37474 node: SyntaxNode,
37475}
37476impl Token for TokenNeq {
37477 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37478 TokenNeqGreen(
37479 Arc::new(GreenNode {
37480 kind: SyntaxKind::TokenNeq,
37481 details: GreenNodeDetails::Token(text),
37482 })
37483 .intern(db),
37484 )
37485 }
37486 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37487 extract_matches!(
37488 &self.node.lookup_intern(db).green.lookup_intern(db).details,
37489 GreenNodeDetails::Token
37490 )
37491 .clone()
37492 }
37493}
37494#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37495pub struct TokenNeqPtr(pub SyntaxStablePtrId);
37496impl TypedStablePtr for TokenNeqPtr {
37497 type SyntaxNode = TokenNeq;
37498 fn untyped(&self) -> SyntaxStablePtrId {
37499 self.0
37500 }
37501 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNeq {
37502 TokenNeq::from_syntax_node(db, self.0.lookup(db))
37503 }
37504}
37505impl From<TokenNeqPtr> for SyntaxStablePtrId {
37506 fn from(ptr: TokenNeqPtr) -> Self {
37507 ptr.untyped()
37508 }
37509}
37510#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37511pub struct TokenNeqGreen(pub GreenId);
37512impl TokenNeqGreen {
37513 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37514 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37515 }
37516}
37517impl TypedSyntaxNode for TokenNeq {
37518 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNeq);
37519 type StablePtr = TokenNeqPtr;
37520 type Green = TokenNeqGreen;
37521 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37522 TokenNeqGreen(
37523 Arc::new(GreenNode {
37524 kind: SyntaxKind::TokenMissing,
37525 details: GreenNodeDetails::Token("".into()),
37526 })
37527 .intern(db),
37528 )
37529 }
37530 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37531 match node.lookup_intern(db).green.lookup_intern(db).details {
37532 GreenNodeDetails::Token(_) => Self { node },
37533 GreenNodeDetails::Node { .. } => {
37534 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNeq)
37535 }
37536 }
37537 }
37538 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37539 match node.lookup_intern(db).green.lookup_intern(db).details {
37540 GreenNodeDetails::Token(_) => Some(Self { node }),
37541 GreenNodeDetails::Node { .. } => None,
37542 }
37543 }
37544 fn as_syntax_node(&self) -> SyntaxNode {
37545 self.node
37546 }
37547 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37548 TokenNeqPtr(self.node.stable_ptr(db))
37549 }
37550}
37551#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37552pub struct TerminalNeq {
37553 node: SyntaxNode,
37554}
37555impl Terminal for TerminalNeq {
37556 const KIND: SyntaxKind = SyntaxKind::TerminalNeq;
37557 type TokenType = TokenNeq;
37558 fn new_green(
37559 db: &dyn SyntaxGroup,
37560 leading_trivia: TriviaGreen,
37561 token: <<TerminalNeq as Terminal>::TokenType as TypedSyntaxNode>::Green,
37562 trailing_trivia: TriviaGreen,
37563 ) -> Self::Green {
37564 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37565 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37566 TerminalNeqGreen(
37567 Arc::new(GreenNode {
37568 kind: SyntaxKind::TerminalNeq,
37569 details: GreenNodeDetails::Node { children: children.into(), width },
37570 })
37571 .intern(db),
37572 )
37573 }
37574 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37575 let GreenNodeDetails::Node { children, .. } =
37576 &self.node.lookup_intern(db).green.lookup_intern(db).details
37577 else {
37578 unreachable!("Expected a node, not a token");
37579 };
37580 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37581 }
37582}
37583impl TerminalNeq {
37584 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37585 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37586 }
37587 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNeq {
37588 TokenNeq::from_syntax_node(db, self.node.get_children(db)[1])
37589 }
37590 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37591 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37592 }
37593}
37594#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37595pub struct TerminalNeqPtr(pub SyntaxStablePtrId);
37596impl TerminalNeqPtr {}
37597impl TypedStablePtr for TerminalNeqPtr {
37598 type SyntaxNode = TerminalNeq;
37599 fn untyped(&self) -> SyntaxStablePtrId {
37600 self.0
37601 }
37602 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNeq {
37603 TerminalNeq::from_syntax_node(db, self.0.lookup(db))
37604 }
37605}
37606impl From<TerminalNeqPtr> for SyntaxStablePtrId {
37607 fn from(ptr: TerminalNeqPtr) -> Self {
37608 ptr.untyped()
37609 }
37610}
37611#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37612pub struct TerminalNeqGreen(pub GreenId);
37613impl TypedSyntaxNode for TerminalNeq {
37614 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNeq);
37615 type StablePtr = TerminalNeqPtr;
37616 type Green = TerminalNeqGreen;
37617 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37618 TerminalNeqGreen(
37619 Arc::new(GreenNode {
37620 kind: SyntaxKind::TerminalNeq,
37621 details: GreenNodeDetails::Node {
37622 children: [
37623 Trivia::missing(db).0,
37624 TokenNeq::missing(db).0,
37625 Trivia::missing(db).0,
37626 ]
37627 .into(),
37628 width: TextWidth::default(),
37629 },
37630 })
37631 .intern(db),
37632 )
37633 }
37634 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37635 let kind = node.kind(db);
37636 assert_eq!(
37637 kind,
37638 SyntaxKind::TerminalNeq,
37639 "Unexpected SyntaxKind {:?}. Expected {:?}.",
37640 kind,
37641 SyntaxKind::TerminalNeq
37642 );
37643 Self { node }
37644 }
37645 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37646 let kind = node.kind(db);
37647 if kind == SyntaxKind::TerminalNeq { Some(Self::from_syntax_node(db, node)) } else { None }
37648 }
37649 fn as_syntax_node(&self) -> SyntaxNode {
37650 self.node
37651 }
37652 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37653 TerminalNeqPtr(self.node.stable_ptr(db))
37654 }
37655}
37656#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37657pub struct TokenNot {
37658 node: SyntaxNode,
37659}
37660impl Token for TokenNot {
37661 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37662 TokenNotGreen(
37663 Arc::new(GreenNode {
37664 kind: SyntaxKind::TokenNot,
37665 details: GreenNodeDetails::Token(text),
37666 })
37667 .intern(db),
37668 )
37669 }
37670 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37671 extract_matches!(
37672 &self.node.lookup_intern(db).green.lookup_intern(db).details,
37673 GreenNodeDetails::Token
37674 )
37675 .clone()
37676 }
37677}
37678#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37679pub struct TokenNotPtr(pub SyntaxStablePtrId);
37680impl TypedStablePtr for TokenNotPtr {
37681 type SyntaxNode = TokenNot;
37682 fn untyped(&self) -> SyntaxStablePtrId {
37683 self.0
37684 }
37685 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNot {
37686 TokenNot::from_syntax_node(db, self.0.lookup(db))
37687 }
37688}
37689impl From<TokenNotPtr> for SyntaxStablePtrId {
37690 fn from(ptr: TokenNotPtr) -> Self {
37691 ptr.untyped()
37692 }
37693}
37694#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37695pub struct TokenNotGreen(pub GreenId);
37696impl TokenNotGreen {
37697 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37698 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37699 }
37700}
37701impl TypedSyntaxNode for TokenNot {
37702 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNot);
37703 type StablePtr = TokenNotPtr;
37704 type Green = TokenNotGreen;
37705 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37706 TokenNotGreen(
37707 Arc::new(GreenNode {
37708 kind: SyntaxKind::TokenMissing,
37709 details: GreenNodeDetails::Token("".into()),
37710 })
37711 .intern(db),
37712 )
37713 }
37714 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37715 match node.lookup_intern(db).green.lookup_intern(db).details {
37716 GreenNodeDetails::Token(_) => Self { node },
37717 GreenNodeDetails::Node { .. } => {
37718 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNot)
37719 }
37720 }
37721 }
37722 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37723 match node.lookup_intern(db).green.lookup_intern(db).details {
37724 GreenNodeDetails::Token(_) => Some(Self { node }),
37725 GreenNodeDetails::Node { .. } => None,
37726 }
37727 }
37728 fn as_syntax_node(&self) -> SyntaxNode {
37729 self.node
37730 }
37731 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37732 TokenNotPtr(self.node.stable_ptr(db))
37733 }
37734}
37735#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37736pub struct TerminalNot {
37737 node: SyntaxNode,
37738}
37739impl Terminal for TerminalNot {
37740 const KIND: SyntaxKind = SyntaxKind::TerminalNot;
37741 type TokenType = TokenNot;
37742 fn new_green(
37743 db: &dyn SyntaxGroup,
37744 leading_trivia: TriviaGreen,
37745 token: <<TerminalNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
37746 trailing_trivia: TriviaGreen,
37747 ) -> Self::Green {
37748 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37749 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37750 TerminalNotGreen(
37751 Arc::new(GreenNode {
37752 kind: SyntaxKind::TerminalNot,
37753 details: GreenNodeDetails::Node { children: children.into(), width },
37754 })
37755 .intern(db),
37756 )
37757 }
37758 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37759 let GreenNodeDetails::Node { children, .. } =
37760 &self.node.lookup_intern(db).green.lookup_intern(db).details
37761 else {
37762 unreachable!("Expected a node, not a token");
37763 };
37764 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37765 }
37766}
37767impl TerminalNot {
37768 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37769 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37770 }
37771 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNot {
37772 TokenNot::from_syntax_node(db, self.node.get_children(db)[1])
37773 }
37774 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37775 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37776 }
37777}
37778#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37779pub struct TerminalNotPtr(pub SyntaxStablePtrId);
37780impl TerminalNotPtr {}
37781impl TypedStablePtr for TerminalNotPtr {
37782 type SyntaxNode = TerminalNot;
37783 fn untyped(&self) -> SyntaxStablePtrId {
37784 self.0
37785 }
37786 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNot {
37787 TerminalNot::from_syntax_node(db, self.0.lookup(db))
37788 }
37789}
37790impl From<TerminalNotPtr> for SyntaxStablePtrId {
37791 fn from(ptr: TerminalNotPtr) -> Self {
37792 ptr.untyped()
37793 }
37794}
37795#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37796pub struct TerminalNotGreen(pub GreenId);
37797impl TypedSyntaxNode for TerminalNot {
37798 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNot);
37799 type StablePtr = TerminalNotPtr;
37800 type Green = TerminalNotGreen;
37801 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37802 TerminalNotGreen(
37803 Arc::new(GreenNode {
37804 kind: SyntaxKind::TerminalNot,
37805 details: GreenNodeDetails::Node {
37806 children: [
37807 Trivia::missing(db).0,
37808 TokenNot::missing(db).0,
37809 Trivia::missing(db).0,
37810 ]
37811 .into(),
37812 width: TextWidth::default(),
37813 },
37814 })
37815 .intern(db),
37816 )
37817 }
37818 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37819 let kind = node.kind(db);
37820 assert_eq!(
37821 kind,
37822 SyntaxKind::TerminalNot,
37823 "Unexpected SyntaxKind {:?}. Expected {:?}.",
37824 kind,
37825 SyntaxKind::TerminalNot
37826 );
37827 Self { node }
37828 }
37829 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37830 let kind = node.kind(db);
37831 if kind == SyntaxKind::TerminalNot { Some(Self::from_syntax_node(db, node)) } else { None }
37832 }
37833 fn as_syntax_node(&self) -> SyntaxNode {
37834 self.node
37835 }
37836 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37837 TerminalNotPtr(self.node.stable_ptr(db))
37838 }
37839}
37840#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37841pub struct TokenBitNot {
37842 node: SyntaxNode,
37843}
37844impl Token for TokenBitNot {
37845 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37846 TokenBitNotGreen(
37847 Arc::new(GreenNode {
37848 kind: SyntaxKind::TokenBitNot,
37849 details: GreenNodeDetails::Token(text),
37850 })
37851 .intern(db),
37852 )
37853 }
37854 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37855 extract_matches!(
37856 &self.node.lookup_intern(db).green.lookup_intern(db).details,
37857 GreenNodeDetails::Token
37858 )
37859 .clone()
37860 }
37861}
37862#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37863pub struct TokenBitNotPtr(pub SyntaxStablePtrId);
37864impl TypedStablePtr for TokenBitNotPtr {
37865 type SyntaxNode = TokenBitNot;
37866 fn untyped(&self) -> SyntaxStablePtrId {
37867 self.0
37868 }
37869 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
37870 TokenBitNot::from_syntax_node(db, self.0.lookup(db))
37871 }
37872}
37873impl From<TokenBitNotPtr> for SyntaxStablePtrId {
37874 fn from(ptr: TokenBitNotPtr) -> Self {
37875 ptr.untyped()
37876 }
37877}
37878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37879pub struct TokenBitNotGreen(pub GreenId);
37880impl TokenBitNotGreen {
37881 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37882 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37883 }
37884}
37885impl TypedSyntaxNode for TokenBitNot {
37886 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBitNot);
37887 type StablePtr = TokenBitNotPtr;
37888 type Green = TokenBitNotGreen;
37889 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37890 TokenBitNotGreen(
37891 Arc::new(GreenNode {
37892 kind: SyntaxKind::TokenMissing,
37893 details: GreenNodeDetails::Token("".into()),
37894 })
37895 .intern(db),
37896 )
37897 }
37898 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37899 match node.lookup_intern(db).green.lookup_intern(db).details {
37900 GreenNodeDetails::Token(_) => Self { node },
37901 GreenNodeDetails::Node { .. } => {
37902 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBitNot)
37903 }
37904 }
37905 }
37906 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37907 match node.lookup_intern(db).green.lookup_intern(db).details {
37908 GreenNodeDetails::Token(_) => Some(Self { node }),
37909 GreenNodeDetails::Node { .. } => None,
37910 }
37911 }
37912 fn as_syntax_node(&self) -> SyntaxNode {
37913 self.node
37914 }
37915 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
37916 TokenBitNotPtr(self.node.stable_ptr(db))
37917 }
37918}
37919#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37920pub struct TerminalBitNot {
37921 node: SyntaxNode,
37922}
37923impl Terminal for TerminalBitNot {
37924 const KIND: SyntaxKind = SyntaxKind::TerminalBitNot;
37925 type TokenType = TokenBitNot;
37926 fn new_green(
37927 db: &dyn SyntaxGroup,
37928 leading_trivia: TriviaGreen,
37929 token: <<TerminalBitNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
37930 trailing_trivia: TriviaGreen,
37931 ) -> Self::Green {
37932 let children = [leading_trivia.0, token.0, trailing_trivia.0];
37933 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
37934 TerminalBitNotGreen(
37935 Arc::new(GreenNode {
37936 kind: SyntaxKind::TerminalBitNot,
37937 details: GreenNodeDetails::Node { children: children.into(), width },
37938 })
37939 .intern(db),
37940 )
37941 }
37942 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37943 let GreenNodeDetails::Node { children, .. } =
37944 &self.node.lookup_intern(db).green.lookup_intern(db).details
37945 else {
37946 unreachable!("Expected a node, not a token");
37947 };
37948 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
37949 }
37950}
37951impl TerminalBitNot {
37952 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37953 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
37954 }
37955 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
37956 TokenBitNot::from_syntax_node(db, self.node.get_children(db)[1])
37957 }
37958 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
37959 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
37960 }
37961}
37962#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37963pub struct TerminalBitNotPtr(pub SyntaxStablePtrId);
37964impl TerminalBitNotPtr {}
37965impl TypedStablePtr for TerminalBitNotPtr {
37966 type SyntaxNode = TerminalBitNot;
37967 fn untyped(&self) -> SyntaxStablePtrId {
37968 self.0
37969 }
37970 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBitNot {
37971 TerminalBitNot::from_syntax_node(db, self.0.lookup(db))
37972 }
37973}
37974impl From<TerminalBitNotPtr> for SyntaxStablePtrId {
37975 fn from(ptr: TerminalBitNotPtr) -> Self {
37976 ptr.untyped()
37977 }
37978}
37979#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37980pub struct TerminalBitNotGreen(pub GreenId);
37981impl TypedSyntaxNode for TerminalBitNot {
37982 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBitNot);
37983 type StablePtr = TerminalBitNotPtr;
37984 type Green = TerminalBitNotGreen;
37985 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37986 TerminalBitNotGreen(
37987 Arc::new(GreenNode {
37988 kind: SyntaxKind::TerminalBitNot,
37989 details: GreenNodeDetails::Node {
37990 children: [
37991 Trivia::missing(db).0,
37992 TokenBitNot::missing(db).0,
37993 Trivia::missing(db).0,
37994 ]
37995 .into(),
37996 width: TextWidth::default(),
37997 },
37998 })
37999 .intern(db),
38000 )
38001 }
38002 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38003 let kind = node.kind(db);
38004 assert_eq!(
38005 kind,
38006 SyntaxKind::TerminalBitNot,
38007 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38008 kind,
38009 SyntaxKind::TerminalBitNot
38010 );
38011 Self { node }
38012 }
38013 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38014 let kind = node.kind(db);
38015 if kind == SyntaxKind::TerminalBitNot {
38016 Some(Self::from_syntax_node(db, node))
38017 } else {
38018 None
38019 }
38020 }
38021 fn as_syntax_node(&self) -> SyntaxNode {
38022 self.node
38023 }
38024 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38025 TerminalBitNotPtr(self.node.stable_ptr(db))
38026 }
38027}
38028#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38029pub struct TokenOr {
38030 node: SyntaxNode,
38031}
38032impl Token for TokenOr {
38033 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38034 TokenOrGreen(
38035 Arc::new(GreenNode {
38036 kind: SyntaxKind::TokenOr,
38037 details: GreenNodeDetails::Token(text),
38038 })
38039 .intern(db),
38040 )
38041 }
38042 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38043 extract_matches!(
38044 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38045 GreenNodeDetails::Token
38046 )
38047 .clone()
38048 }
38049}
38050#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38051pub struct TokenOrPtr(pub SyntaxStablePtrId);
38052impl TypedStablePtr for TokenOrPtr {
38053 type SyntaxNode = TokenOr;
38054 fn untyped(&self) -> SyntaxStablePtrId {
38055 self.0
38056 }
38057 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOr {
38058 TokenOr::from_syntax_node(db, self.0.lookup(db))
38059 }
38060}
38061impl From<TokenOrPtr> for SyntaxStablePtrId {
38062 fn from(ptr: TokenOrPtr) -> Self {
38063 ptr.untyped()
38064 }
38065}
38066#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38067pub struct TokenOrGreen(pub GreenId);
38068impl TokenOrGreen {
38069 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38070 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38071 }
38072}
38073impl TypedSyntaxNode for TokenOr {
38074 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOr);
38075 type StablePtr = TokenOrPtr;
38076 type Green = TokenOrGreen;
38077 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38078 TokenOrGreen(
38079 Arc::new(GreenNode {
38080 kind: SyntaxKind::TokenMissing,
38081 details: GreenNodeDetails::Token("".into()),
38082 })
38083 .intern(db),
38084 )
38085 }
38086 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38087 match node.lookup_intern(db).green.lookup_intern(db).details {
38088 GreenNodeDetails::Token(_) => Self { node },
38089 GreenNodeDetails::Node { .. } => {
38090 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOr)
38091 }
38092 }
38093 }
38094 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38095 match node.lookup_intern(db).green.lookup_intern(db).details {
38096 GreenNodeDetails::Token(_) => Some(Self { node }),
38097 GreenNodeDetails::Node { .. } => None,
38098 }
38099 }
38100 fn as_syntax_node(&self) -> SyntaxNode {
38101 self.node
38102 }
38103 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38104 TokenOrPtr(self.node.stable_ptr(db))
38105 }
38106}
38107#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38108pub struct TerminalOr {
38109 node: SyntaxNode,
38110}
38111impl Terminal for TerminalOr {
38112 const KIND: SyntaxKind = SyntaxKind::TerminalOr;
38113 type TokenType = TokenOr;
38114 fn new_green(
38115 db: &dyn SyntaxGroup,
38116 leading_trivia: TriviaGreen,
38117 token: <<TerminalOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
38118 trailing_trivia: TriviaGreen,
38119 ) -> Self::Green {
38120 let children = [leading_trivia.0, token.0, trailing_trivia.0];
38121 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
38122 TerminalOrGreen(
38123 Arc::new(GreenNode {
38124 kind: SyntaxKind::TerminalOr,
38125 details: GreenNodeDetails::Node { children: children.into(), width },
38126 })
38127 .intern(db),
38128 )
38129 }
38130 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38131 let GreenNodeDetails::Node { children, .. } =
38132 &self.node.lookup_intern(db).green.lookup_intern(db).details
38133 else {
38134 unreachable!("Expected a node, not a token");
38135 };
38136 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
38137 }
38138}
38139impl TerminalOr {
38140 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38141 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
38142 }
38143 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOr {
38144 TokenOr::from_syntax_node(db, self.node.get_children(db)[1])
38145 }
38146 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38147 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
38148 }
38149}
38150#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38151pub struct TerminalOrPtr(pub SyntaxStablePtrId);
38152impl TerminalOrPtr {}
38153impl TypedStablePtr for TerminalOrPtr {
38154 type SyntaxNode = TerminalOr;
38155 fn untyped(&self) -> SyntaxStablePtrId {
38156 self.0
38157 }
38158 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOr {
38159 TerminalOr::from_syntax_node(db, self.0.lookup(db))
38160 }
38161}
38162impl From<TerminalOrPtr> for SyntaxStablePtrId {
38163 fn from(ptr: TerminalOrPtr) -> Self {
38164 ptr.untyped()
38165 }
38166}
38167#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38168pub struct TerminalOrGreen(pub GreenId);
38169impl TypedSyntaxNode for TerminalOr {
38170 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOr);
38171 type StablePtr = TerminalOrPtr;
38172 type Green = TerminalOrGreen;
38173 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38174 TerminalOrGreen(
38175 Arc::new(GreenNode {
38176 kind: SyntaxKind::TerminalOr,
38177 details: GreenNodeDetails::Node {
38178 children: [
38179 Trivia::missing(db).0,
38180 TokenOr::missing(db).0,
38181 Trivia::missing(db).0,
38182 ]
38183 .into(),
38184 width: TextWidth::default(),
38185 },
38186 })
38187 .intern(db),
38188 )
38189 }
38190 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38191 let kind = node.kind(db);
38192 assert_eq!(
38193 kind,
38194 SyntaxKind::TerminalOr,
38195 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38196 kind,
38197 SyntaxKind::TerminalOr
38198 );
38199 Self { node }
38200 }
38201 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38202 let kind = node.kind(db);
38203 if kind == SyntaxKind::TerminalOr { Some(Self::from_syntax_node(db, node)) } else { None }
38204 }
38205 fn as_syntax_node(&self) -> SyntaxNode {
38206 self.node
38207 }
38208 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38209 TerminalOrPtr(self.node.stable_ptr(db))
38210 }
38211}
38212#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38213pub struct TokenOrOr {
38214 node: SyntaxNode,
38215}
38216impl Token for TokenOrOr {
38217 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38218 TokenOrOrGreen(
38219 Arc::new(GreenNode {
38220 kind: SyntaxKind::TokenOrOr,
38221 details: GreenNodeDetails::Token(text),
38222 })
38223 .intern(db),
38224 )
38225 }
38226 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38227 extract_matches!(
38228 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38229 GreenNodeDetails::Token
38230 )
38231 .clone()
38232 }
38233}
38234#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38235pub struct TokenOrOrPtr(pub SyntaxStablePtrId);
38236impl TypedStablePtr for TokenOrOrPtr {
38237 type SyntaxNode = TokenOrOr;
38238 fn untyped(&self) -> SyntaxStablePtrId {
38239 self.0
38240 }
38241 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
38242 TokenOrOr::from_syntax_node(db, self.0.lookup(db))
38243 }
38244}
38245impl From<TokenOrOrPtr> for SyntaxStablePtrId {
38246 fn from(ptr: TokenOrOrPtr) -> Self {
38247 ptr.untyped()
38248 }
38249}
38250#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38251pub struct TokenOrOrGreen(pub GreenId);
38252impl TokenOrOrGreen {
38253 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38254 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38255 }
38256}
38257impl TypedSyntaxNode for TokenOrOr {
38258 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOrOr);
38259 type StablePtr = TokenOrOrPtr;
38260 type Green = TokenOrOrGreen;
38261 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38262 TokenOrOrGreen(
38263 Arc::new(GreenNode {
38264 kind: SyntaxKind::TokenMissing,
38265 details: GreenNodeDetails::Token("".into()),
38266 })
38267 .intern(db),
38268 )
38269 }
38270 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38271 match node.lookup_intern(db).green.lookup_intern(db).details {
38272 GreenNodeDetails::Token(_) => Self { node },
38273 GreenNodeDetails::Node { .. } => {
38274 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOrOr)
38275 }
38276 }
38277 }
38278 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38279 match node.lookup_intern(db).green.lookup_intern(db).details {
38280 GreenNodeDetails::Token(_) => Some(Self { node }),
38281 GreenNodeDetails::Node { .. } => None,
38282 }
38283 }
38284 fn as_syntax_node(&self) -> SyntaxNode {
38285 self.node
38286 }
38287 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38288 TokenOrOrPtr(self.node.stable_ptr(db))
38289 }
38290}
38291#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38292pub struct TerminalOrOr {
38293 node: SyntaxNode,
38294}
38295impl Terminal for TerminalOrOr {
38296 const KIND: SyntaxKind = SyntaxKind::TerminalOrOr;
38297 type TokenType = TokenOrOr;
38298 fn new_green(
38299 db: &dyn SyntaxGroup,
38300 leading_trivia: TriviaGreen,
38301 token: <<TerminalOrOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
38302 trailing_trivia: TriviaGreen,
38303 ) -> Self::Green {
38304 let children = [leading_trivia.0, token.0, trailing_trivia.0];
38305 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
38306 TerminalOrOrGreen(
38307 Arc::new(GreenNode {
38308 kind: SyntaxKind::TerminalOrOr,
38309 details: GreenNodeDetails::Node { children: children.into(), width },
38310 })
38311 .intern(db),
38312 )
38313 }
38314 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38315 let GreenNodeDetails::Node { children, .. } =
38316 &self.node.lookup_intern(db).green.lookup_intern(db).details
38317 else {
38318 unreachable!("Expected a node, not a token");
38319 };
38320 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
38321 }
38322}
38323impl TerminalOrOr {
38324 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38325 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
38326 }
38327 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
38328 TokenOrOr::from_syntax_node(db, self.node.get_children(db)[1])
38329 }
38330 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38331 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
38332 }
38333}
38334#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38335pub struct TerminalOrOrPtr(pub SyntaxStablePtrId);
38336impl TerminalOrOrPtr {}
38337impl TypedStablePtr for TerminalOrOrPtr {
38338 type SyntaxNode = TerminalOrOr;
38339 fn untyped(&self) -> SyntaxStablePtrId {
38340 self.0
38341 }
38342 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOrOr {
38343 TerminalOrOr::from_syntax_node(db, self.0.lookup(db))
38344 }
38345}
38346impl From<TerminalOrOrPtr> for SyntaxStablePtrId {
38347 fn from(ptr: TerminalOrOrPtr) -> Self {
38348 ptr.untyped()
38349 }
38350}
38351#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38352pub struct TerminalOrOrGreen(pub GreenId);
38353impl TypedSyntaxNode for TerminalOrOr {
38354 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOrOr);
38355 type StablePtr = TerminalOrOrPtr;
38356 type Green = TerminalOrOrGreen;
38357 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38358 TerminalOrOrGreen(
38359 Arc::new(GreenNode {
38360 kind: SyntaxKind::TerminalOrOr,
38361 details: GreenNodeDetails::Node {
38362 children: [
38363 Trivia::missing(db).0,
38364 TokenOrOr::missing(db).0,
38365 Trivia::missing(db).0,
38366 ]
38367 .into(),
38368 width: TextWidth::default(),
38369 },
38370 })
38371 .intern(db),
38372 )
38373 }
38374 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38375 let kind = node.kind(db);
38376 assert_eq!(
38377 kind,
38378 SyntaxKind::TerminalOrOr,
38379 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38380 kind,
38381 SyntaxKind::TerminalOrOr
38382 );
38383 Self { node }
38384 }
38385 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38386 let kind = node.kind(db);
38387 if kind == SyntaxKind::TerminalOrOr { Some(Self::from_syntax_node(db, node)) } else { None }
38388 }
38389 fn as_syntax_node(&self) -> SyntaxNode {
38390 self.node
38391 }
38392 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38393 TerminalOrOrPtr(self.node.stable_ptr(db))
38394 }
38395}
38396#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38397pub struct TokenPlus {
38398 node: SyntaxNode,
38399}
38400impl Token for TokenPlus {
38401 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38402 TokenPlusGreen(
38403 Arc::new(GreenNode {
38404 kind: SyntaxKind::TokenPlus,
38405 details: GreenNodeDetails::Token(text),
38406 })
38407 .intern(db),
38408 )
38409 }
38410 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38411 extract_matches!(
38412 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38413 GreenNodeDetails::Token
38414 )
38415 .clone()
38416 }
38417}
38418#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38419pub struct TokenPlusPtr(pub SyntaxStablePtrId);
38420impl TypedStablePtr for TokenPlusPtr {
38421 type SyntaxNode = TokenPlus;
38422 fn untyped(&self) -> SyntaxStablePtrId {
38423 self.0
38424 }
38425 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlus {
38426 TokenPlus::from_syntax_node(db, self.0.lookup(db))
38427 }
38428}
38429impl From<TokenPlusPtr> for SyntaxStablePtrId {
38430 fn from(ptr: TokenPlusPtr) -> Self {
38431 ptr.untyped()
38432 }
38433}
38434#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38435pub struct TokenPlusGreen(pub GreenId);
38436impl TokenPlusGreen {
38437 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38438 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38439 }
38440}
38441impl TypedSyntaxNode for TokenPlus {
38442 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlus);
38443 type StablePtr = TokenPlusPtr;
38444 type Green = TokenPlusGreen;
38445 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38446 TokenPlusGreen(
38447 Arc::new(GreenNode {
38448 kind: SyntaxKind::TokenMissing,
38449 details: GreenNodeDetails::Token("".into()),
38450 })
38451 .intern(db),
38452 )
38453 }
38454 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38455 match node.lookup_intern(db).green.lookup_intern(db).details {
38456 GreenNodeDetails::Token(_) => Self { node },
38457 GreenNodeDetails::Node { .. } => {
38458 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlus)
38459 }
38460 }
38461 }
38462 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38463 match node.lookup_intern(db).green.lookup_intern(db).details {
38464 GreenNodeDetails::Token(_) => Some(Self { node }),
38465 GreenNodeDetails::Node { .. } => None,
38466 }
38467 }
38468 fn as_syntax_node(&self) -> SyntaxNode {
38469 self.node
38470 }
38471 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38472 TokenPlusPtr(self.node.stable_ptr(db))
38473 }
38474}
38475#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38476pub struct TerminalPlus {
38477 node: SyntaxNode,
38478}
38479impl Terminal for TerminalPlus {
38480 const KIND: SyntaxKind = SyntaxKind::TerminalPlus;
38481 type TokenType = TokenPlus;
38482 fn new_green(
38483 db: &dyn SyntaxGroup,
38484 leading_trivia: TriviaGreen,
38485 token: <<TerminalPlus as Terminal>::TokenType as TypedSyntaxNode>::Green,
38486 trailing_trivia: TriviaGreen,
38487 ) -> Self::Green {
38488 let children = [leading_trivia.0, token.0, trailing_trivia.0];
38489 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
38490 TerminalPlusGreen(
38491 Arc::new(GreenNode {
38492 kind: SyntaxKind::TerminalPlus,
38493 details: GreenNodeDetails::Node { children: children.into(), width },
38494 })
38495 .intern(db),
38496 )
38497 }
38498 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38499 let GreenNodeDetails::Node { children, .. } =
38500 &self.node.lookup_intern(db).green.lookup_intern(db).details
38501 else {
38502 unreachable!("Expected a node, not a token");
38503 };
38504 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
38505 }
38506}
38507impl TerminalPlus {
38508 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38509 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
38510 }
38511 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlus {
38512 TokenPlus::from_syntax_node(db, self.node.get_children(db)[1])
38513 }
38514 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38515 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
38516 }
38517}
38518#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38519pub struct TerminalPlusPtr(pub SyntaxStablePtrId);
38520impl TerminalPlusPtr {}
38521impl TypedStablePtr for TerminalPlusPtr {
38522 type SyntaxNode = TerminalPlus;
38523 fn untyped(&self) -> SyntaxStablePtrId {
38524 self.0
38525 }
38526 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
38527 TerminalPlus::from_syntax_node(db, self.0.lookup(db))
38528 }
38529}
38530impl From<TerminalPlusPtr> for SyntaxStablePtrId {
38531 fn from(ptr: TerminalPlusPtr) -> Self {
38532 ptr.untyped()
38533 }
38534}
38535#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38536pub struct TerminalPlusGreen(pub GreenId);
38537impl TypedSyntaxNode for TerminalPlus {
38538 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlus);
38539 type StablePtr = TerminalPlusPtr;
38540 type Green = TerminalPlusGreen;
38541 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38542 TerminalPlusGreen(
38543 Arc::new(GreenNode {
38544 kind: SyntaxKind::TerminalPlus,
38545 details: GreenNodeDetails::Node {
38546 children: [
38547 Trivia::missing(db).0,
38548 TokenPlus::missing(db).0,
38549 Trivia::missing(db).0,
38550 ]
38551 .into(),
38552 width: TextWidth::default(),
38553 },
38554 })
38555 .intern(db),
38556 )
38557 }
38558 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38559 let kind = node.kind(db);
38560 assert_eq!(
38561 kind,
38562 SyntaxKind::TerminalPlus,
38563 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38564 kind,
38565 SyntaxKind::TerminalPlus
38566 );
38567 Self { node }
38568 }
38569 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38570 let kind = node.kind(db);
38571 if kind == SyntaxKind::TerminalPlus { Some(Self::from_syntax_node(db, node)) } else { None }
38572 }
38573 fn as_syntax_node(&self) -> SyntaxNode {
38574 self.node
38575 }
38576 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38577 TerminalPlusPtr(self.node.stable_ptr(db))
38578 }
38579}
38580#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38581pub struct TokenPlusEq {
38582 node: SyntaxNode,
38583}
38584impl Token for TokenPlusEq {
38585 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38586 TokenPlusEqGreen(
38587 Arc::new(GreenNode {
38588 kind: SyntaxKind::TokenPlusEq,
38589 details: GreenNodeDetails::Token(text),
38590 })
38591 .intern(db),
38592 )
38593 }
38594 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38595 extract_matches!(
38596 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38597 GreenNodeDetails::Token
38598 )
38599 .clone()
38600 }
38601}
38602#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38603pub struct TokenPlusEqPtr(pub SyntaxStablePtrId);
38604impl TypedStablePtr for TokenPlusEqPtr {
38605 type SyntaxNode = TokenPlusEq;
38606 fn untyped(&self) -> SyntaxStablePtrId {
38607 self.0
38608 }
38609 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
38610 TokenPlusEq::from_syntax_node(db, self.0.lookup(db))
38611 }
38612}
38613impl From<TokenPlusEqPtr> for SyntaxStablePtrId {
38614 fn from(ptr: TokenPlusEqPtr) -> Self {
38615 ptr.untyped()
38616 }
38617}
38618#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38619pub struct TokenPlusEqGreen(pub GreenId);
38620impl TokenPlusEqGreen {
38621 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38622 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38623 }
38624}
38625impl TypedSyntaxNode for TokenPlusEq {
38626 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlusEq);
38627 type StablePtr = TokenPlusEqPtr;
38628 type Green = TokenPlusEqGreen;
38629 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38630 TokenPlusEqGreen(
38631 Arc::new(GreenNode {
38632 kind: SyntaxKind::TokenMissing,
38633 details: GreenNodeDetails::Token("".into()),
38634 })
38635 .intern(db),
38636 )
38637 }
38638 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38639 match node.lookup_intern(db).green.lookup_intern(db).details {
38640 GreenNodeDetails::Token(_) => Self { node },
38641 GreenNodeDetails::Node { .. } => {
38642 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlusEq)
38643 }
38644 }
38645 }
38646 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38647 match node.lookup_intern(db).green.lookup_intern(db).details {
38648 GreenNodeDetails::Token(_) => Some(Self { node }),
38649 GreenNodeDetails::Node { .. } => None,
38650 }
38651 }
38652 fn as_syntax_node(&self) -> SyntaxNode {
38653 self.node
38654 }
38655 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38656 TokenPlusEqPtr(self.node.stable_ptr(db))
38657 }
38658}
38659#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38660pub struct TerminalPlusEq {
38661 node: SyntaxNode,
38662}
38663impl Terminal for TerminalPlusEq {
38664 const KIND: SyntaxKind = SyntaxKind::TerminalPlusEq;
38665 type TokenType = TokenPlusEq;
38666 fn new_green(
38667 db: &dyn SyntaxGroup,
38668 leading_trivia: TriviaGreen,
38669 token: <<TerminalPlusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
38670 trailing_trivia: TriviaGreen,
38671 ) -> Self::Green {
38672 let children = [leading_trivia.0, token.0, trailing_trivia.0];
38673 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
38674 TerminalPlusEqGreen(
38675 Arc::new(GreenNode {
38676 kind: SyntaxKind::TerminalPlusEq,
38677 details: GreenNodeDetails::Node { children: children.into(), width },
38678 })
38679 .intern(db),
38680 )
38681 }
38682 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38683 let GreenNodeDetails::Node { children, .. } =
38684 &self.node.lookup_intern(db).green.lookup_intern(db).details
38685 else {
38686 unreachable!("Expected a node, not a token");
38687 };
38688 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
38689 }
38690}
38691impl TerminalPlusEq {
38692 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38693 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
38694 }
38695 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
38696 TokenPlusEq::from_syntax_node(db, self.node.get_children(db)[1])
38697 }
38698 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38699 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
38700 }
38701}
38702#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38703pub struct TerminalPlusEqPtr(pub SyntaxStablePtrId);
38704impl TerminalPlusEqPtr {}
38705impl TypedStablePtr for TerminalPlusEqPtr {
38706 type SyntaxNode = TerminalPlusEq;
38707 fn untyped(&self) -> SyntaxStablePtrId {
38708 self.0
38709 }
38710 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlusEq {
38711 TerminalPlusEq::from_syntax_node(db, self.0.lookup(db))
38712 }
38713}
38714impl From<TerminalPlusEqPtr> for SyntaxStablePtrId {
38715 fn from(ptr: TerminalPlusEqPtr) -> Self {
38716 ptr.untyped()
38717 }
38718}
38719#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38720pub struct TerminalPlusEqGreen(pub GreenId);
38721impl TypedSyntaxNode for TerminalPlusEq {
38722 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlusEq);
38723 type StablePtr = TerminalPlusEqPtr;
38724 type Green = TerminalPlusEqGreen;
38725 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38726 TerminalPlusEqGreen(
38727 Arc::new(GreenNode {
38728 kind: SyntaxKind::TerminalPlusEq,
38729 details: GreenNodeDetails::Node {
38730 children: [
38731 Trivia::missing(db).0,
38732 TokenPlusEq::missing(db).0,
38733 Trivia::missing(db).0,
38734 ]
38735 .into(),
38736 width: TextWidth::default(),
38737 },
38738 })
38739 .intern(db),
38740 )
38741 }
38742 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38743 let kind = node.kind(db);
38744 assert_eq!(
38745 kind,
38746 SyntaxKind::TerminalPlusEq,
38747 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38748 kind,
38749 SyntaxKind::TerminalPlusEq
38750 );
38751 Self { node }
38752 }
38753 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38754 let kind = node.kind(db);
38755 if kind == SyntaxKind::TerminalPlusEq {
38756 Some(Self::from_syntax_node(db, node))
38757 } else {
38758 None
38759 }
38760 }
38761 fn as_syntax_node(&self) -> SyntaxNode {
38762 self.node
38763 }
38764 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38765 TerminalPlusEqPtr(self.node.stable_ptr(db))
38766 }
38767}
38768#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38769pub struct TokenQuestionMark {
38770 node: SyntaxNode,
38771}
38772impl Token for TokenQuestionMark {
38773 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38774 TokenQuestionMarkGreen(
38775 Arc::new(GreenNode {
38776 kind: SyntaxKind::TokenQuestionMark,
38777 details: GreenNodeDetails::Token(text),
38778 })
38779 .intern(db),
38780 )
38781 }
38782 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38783 extract_matches!(
38784 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38785 GreenNodeDetails::Token
38786 )
38787 .clone()
38788 }
38789}
38790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38791pub struct TokenQuestionMarkPtr(pub SyntaxStablePtrId);
38792impl TypedStablePtr for TokenQuestionMarkPtr {
38793 type SyntaxNode = TokenQuestionMark;
38794 fn untyped(&self) -> SyntaxStablePtrId {
38795 self.0
38796 }
38797 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
38798 TokenQuestionMark::from_syntax_node(db, self.0.lookup(db))
38799 }
38800}
38801impl From<TokenQuestionMarkPtr> for SyntaxStablePtrId {
38802 fn from(ptr: TokenQuestionMarkPtr) -> Self {
38803 ptr.untyped()
38804 }
38805}
38806#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38807pub struct TokenQuestionMarkGreen(pub GreenId);
38808impl TokenQuestionMarkGreen {
38809 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38810 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38811 }
38812}
38813impl TypedSyntaxNode for TokenQuestionMark {
38814 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenQuestionMark);
38815 type StablePtr = TokenQuestionMarkPtr;
38816 type Green = TokenQuestionMarkGreen;
38817 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38818 TokenQuestionMarkGreen(
38819 Arc::new(GreenNode {
38820 kind: SyntaxKind::TokenMissing,
38821 details: GreenNodeDetails::Token("".into()),
38822 })
38823 .intern(db),
38824 )
38825 }
38826 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38827 match node.lookup_intern(db).green.lookup_intern(db).details {
38828 GreenNodeDetails::Token(_) => Self { node },
38829 GreenNodeDetails::Node { .. } => {
38830 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenQuestionMark)
38831 }
38832 }
38833 }
38834 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38835 match node.lookup_intern(db).green.lookup_intern(db).details {
38836 GreenNodeDetails::Token(_) => Some(Self { node }),
38837 GreenNodeDetails::Node { .. } => None,
38838 }
38839 }
38840 fn as_syntax_node(&self) -> SyntaxNode {
38841 self.node
38842 }
38843 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38844 TokenQuestionMarkPtr(self.node.stable_ptr(db))
38845 }
38846}
38847#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38848pub struct TerminalQuestionMark {
38849 node: SyntaxNode,
38850}
38851impl Terminal for TerminalQuestionMark {
38852 const KIND: SyntaxKind = SyntaxKind::TerminalQuestionMark;
38853 type TokenType = TokenQuestionMark;
38854 fn new_green(
38855 db: &dyn SyntaxGroup,
38856 leading_trivia: TriviaGreen,
38857 token: <<TerminalQuestionMark as Terminal>::TokenType as TypedSyntaxNode>::Green,
38858 trailing_trivia: TriviaGreen,
38859 ) -> Self::Green {
38860 let children = [leading_trivia.0, token.0, trailing_trivia.0];
38861 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
38862 TerminalQuestionMarkGreen(
38863 Arc::new(GreenNode {
38864 kind: SyntaxKind::TerminalQuestionMark,
38865 details: GreenNodeDetails::Node { children: children.into(), width },
38866 })
38867 .intern(db),
38868 )
38869 }
38870 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38871 let GreenNodeDetails::Node { children, .. } =
38872 &self.node.lookup_intern(db).green.lookup_intern(db).details
38873 else {
38874 unreachable!("Expected a node, not a token");
38875 };
38876 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
38877 }
38878}
38879impl TerminalQuestionMark {
38880 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38881 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
38882 }
38883 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
38884 TokenQuestionMark::from_syntax_node(db, self.node.get_children(db)[1])
38885 }
38886 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
38887 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
38888 }
38889}
38890#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38891pub struct TerminalQuestionMarkPtr(pub SyntaxStablePtrId);
38892impl TerminalQuestionMarkPtr {}
38893impl TypedStablePtr for TerminalQuestionMarkPtr {
38894 type SyntaxNode = TerminalQuestionMark;
38895 fn untyped(&self) -> SyntaxStablePtrId {
38896 self.0
38897 }
38898 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
38899 TerminalQuestionMark::from_syntax_node(db, self.0.lookup(db))
38900 }
38901}
38902impl From<TerminalQuestionMarkPtr> for SyntaxStablePtrId {
38903 fn from(ptr: TerminalQuestionMarkPtr) -> Self {
38904 ptr.untyped()
38905 }
38906}
38907#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38908pub struct TerminalQuestionMarkGreen(pub GreenId);
38909impl TypedSyntaxNode for TerminalQuestionMark {
38910 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalQuestionMark);
38911 type StablePtr = TerminalQuestionMarkPtr;
38912 type Green = TerminalQuestionMarkGreen;
38913 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38914 TerminalQuestionMarkGreen(
38915 Arc::new(GreenNode {
38916 kind: SyntaxKind::TerminalQuestionMark,
38917 details: GreenNodeDetails::Node {
38918 children: [
38919 Trivia::missing(db).0,
38920 TokenQuestionMark::missing(db).0,
38921 Trivia::missing(db).0,
38922 ]
38923 .into(),
38924 width: TextWidth::default(),
38925 },
38926 })
38927 .intern(db),
38928 )
38929 }
38930 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38931 let kind = node.kind(db);
38932 assert_eq!(
38933 kind,
38934 SyntaxKind::TerminalQuestionMark,
38935 "Unexpected SyntaxKind {:?}. Expected {:?}.",
38936 kind,
38937 SyntaxKind::TerminalQuestionMark
38938 );
38939 Self { node }
38940 }
38941 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38942 let kind = node.kind(db);
38943 if kind == SyntaxKind::TerminalQuestionMark {
38944 Some(Self::from_syntax_node(db, node))
38945 } else {
38946 None
38947 }
38948 }
38949 fn as_syntax_node(&self) -> SyntaxNode {
38950 self.node
38951 }
38952 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
38953 TerminalQuestionMarkPtr(self.node.stable_ptr(db))
38954 }
38955}
38956#[derive(Clone, Debug, Eq, Hash, PartialEq)]
38957pub struct TokenRBrace {
38958 node: SyntaxNode,
38959}
38960impl Token for TokenRBrace {
38961 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
38962 TokenRBraceGreen(
38963 Arc::new(GreenNode {
38964 kind: SyntaxKind::TokenRBrace,
38965 details: GreenNodeDetails::Token(text),
38966 })
38967 .intern(db),
38968 )
38969 }
38970 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38971 extract_matches!(
38972 &self.node.lookup_intern(db).green.lookup_intern(db).details,
38973 GreenNodeDetails::Token
38974 )
38975 .clone()
38976 }
38977}
38978#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38979pub struct TokenRBracePtr(pub SyntaxStablePtrId);
38980impl TypedStablePtr for TokenRBracePtr {
38981 type SyntaxNode = TokenRBrace;
38982 fn untyped(&self) -> SyntaxStablePtrId {
38983 self.0
38984 }
38985 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
38986 TokenRBrace::from_syntax_node(db, self.0.lookup(db))
38987 }
38988}
38989impl From<TokenRBracePtr> for SyntaxStablePtrId {
38990 fn from(ptr: TokenRBracePtr) -> Self {
38991 ptr.untyped()
38992 }
38993}
38994#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38995pub struct TokenRBraceGreen(pub GreenId);
38996impl TokenRBraceGreen {
38997 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
38998 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
38999 }
39000}
39001impl TypedSyntaxNode for TokenRBrace {
39002 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrace);
39003 type StablePtr = TokenRBracePtr;
39004 type Green = TokenRBraceGreen;
39005 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39006 TokenRBraceGreen(
39007 Arc::new(GreenNode {
39008 kind: SyntaxKind::TokenMissing,
39009 details: GreenNodeDetails::Token("".into()),
39010 })
39011 .intern(db),
39012 )
39013 }
39014 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39015 match node.lookup_intern(db).green.lookup_intern(db).details {
39016 GreenNodeDetails::Token(_) => Self { node },
39017 GreenNodeDetails::Node { .. } => {
39018 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrace)
39019 }
39020 }
39021 }
39022 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39023 match node.lookup_intern(db).green.lookup_intern(db).details {
39024 GreenNodeDetails::Token(_) => Some(Self { node }),
39025 GreenNodeDetails::Node { .. } => None,
39026 }
39027 }
39028 fn as_syntax_node(&self) -> SyntaxNode {
39029 self.node
39030 }
39031 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39032 TokenRBracePtr(self.node.stable_ptr(db))
39033 }
39034}
39035#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39036pub struct TerminalRBrace {
39037 node: SyntaxNode,
39038}
39039impl Terminal for TerminalRBrace {
39040 const KIND: SyntaxKind = SyntaxKind::TerminalRBrace;
39041 type TokenType = TokenRBrace;
39042 fn new_green(
39043 db: &dyn SyntaxGroup,
39044 leading_trivia: TriviaGreen,
39045 token: <<TerminalRBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
39046 trailing_trivia: TriviaGreen,
39047 ) -> Self::Green {
39048 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39049 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39050 TerminalRBraceGreen(
39051 Arc::new(GreenNode {
39052 kind: SyntaxKind::TerminalRBrace,
39053 details: GreenNodeDetails::Node { children: children.into(), width },
39054 })
39055 .intern(db),
39056 )
39057 }
39058 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39059 let GreenNodeDetails::Node { children, .. } =
39060 &self.node.lookup_intern(db).green.lookup_intern(db).details
39061 else {
39062 unreachable!("Expected a node, not a token");
39063 };
39064 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
39065 }
39066}
39067impl TerminalRBrace {
39068 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39069 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
39070 }
39071 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
39072 TokenRBrace::from_syntax_node(db, self.node.get_children(db)[1])
39073 }
39074 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39075 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
39076 }
39077}
39078#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39079pub struct TerminalRBracePtr(pub SyntaxStablePtrId);
39080impl TerminalRBracePtr {}
39081impl TypedStablePtr for TerminalRBracePtr {
39082 type SyntaxNode = TerminalRBrace;
39083 fn untyped(&self) -> SyntaxStablePtrId {
39084 self.0
39085 }
39086 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
39087 TerminalRBrace::from_syntax_node(db, self.0.lookup(db))
39088 }
39089}
39090impl From<TerminalRBracePtr> for SyntaxStablePtrId {
39091 fn from(ptr: TerminalRBracePtr) -> Self {
39092 ptr.untyped()
39093 }
39094}
39095#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39096pub struct TerminalRBraceGreen(pub GreenId);
39097impl TypedSyntaxNode for TerminalRBrace {
39098 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrace);
39099 type StablePtr = TerminalRBracePtr;
39100 type Green = TerminalRBraceGreen;
39101 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39102 TerminalRBraceGreen(
39103 Arc::new(GreenNode {
39104 kind: SyntaxKind::TerminalRBrace,
39105 details: GreenNodeDetails::Node {
39106 children: [
39107 Trivia::missing(db).0,
39108 TokenRBrace::missing(db).0,
39109 Trivia::missing(db).0,
39110 ]
39111 .into(),
39112 width: TextWidth::default(),
39113 },
39114 })
39115 .intern(db),
39116 )
39117 }
39118 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39119 let kind = node.kind(db);
39120 assert_eq!(
39121 kind,
39122 SyntaxKind::TerminalRBrace,
39123 "Unexpected SyntaxKind {:?}. Expected {:?}.",
39124 kind,
39125 SyntaxKind::TerminalRBrace
39126 );
39127 Self { node }
39128 }
39129 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39130 let kind = node.kind(db);
39131 if kind == SyntaxKind::TerminalRBrace {
39132 Some(Self::from_syntax_node(db, node))
39133 } else {
39134 None
39135 }
39136 }
39137 fn as_syntax_node(&self) -> SyntaxNode {
39138 self.node
39139 }
39140 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39141 TerminalRBracePtr(self.node.stable_ptr(db))
39142 }
39143}
39144#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39145pub struct TokenRBrack {
39146 node: SyntaxNode,
39147}
39148impl Token for TokenRBrack {
39149 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
39150 TokenRBrackGreen(
39151 Arc::new(GreenNode {
39152 kind: SyntaxKind::TokenRBrack,
39153 details: GreenNodeDetails::Token(text),
39154 })
39155 .intern(db),
39156 )
39157 }
39158 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39159 extract_matches!(
39160 &self.node.lookup_intern(db).green.lookup_intern(db).details,
39161 GreenNodeDetails::Token
39162 )
39163 .clone()
39164 }
39165}
39166#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39167pub struct TokenRBrackPtr(pub SyntaxStablePtrId);
39168impl TypedStablePtr for TokenRBrackPtr {
39169 type SyntaxNode = TokenRBrack;
39170 fn untyped(&self) -> SyntaxStablePtrId {
39171 self.0
39172 }
39173 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
39174 TokenRBrack::from_syntax_node(db, self.0.lookup(db))
39175 }
39176}
39177impl From<TokenRBrackPtr> for SyntaxStablePtrId {
39178 fn from(ptr: TokenRBrackPtr) -> Self {
39179 ptr.untyped()
39180 }
39181}
39182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39183pub struct TokenRBrackGreen(pub GreenId);
39184impl TokenRBrackGreen {
39185 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39186 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
39187 }
39188}
39189impl TypedSyntaxNode for TokenRBrack {
39190 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrack);
39191 type StablePtr = TokenRBrackPtr;
39192 type Green = TokenRBrackGreen;
39193 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39194 TokenRBrackGreen(
39195 Arc::new(GreenNode {
39196 kind: SyntaxKind::TokenMissing,
39197 details: GreenNodeDetails::Token("".into()),
39198 })
39199 .intern(db),
39200 )
39201 }
39202 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39203 match node.lookup_intern(db).green.lookup_intern(db).details {
39204 GreenNodeDetails::Token(_) => Self { node },
39205 GreenNodeDetails::Node { .. } => {
39206 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrack)
39207 }
39208 }
39209 }
39210 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39211 match node.lookup_intern(db).green.lookup_intern(db).details {
39212 GreenNodeDetails::Token(_) => Some(Self { node }),
39213 GreenNodeDetails::Node { .. } => None,
39214 }
39215 }
39216 fn as_syntax_node(&self) -> SyntaxNode {
39217 self.node
39218 }
39219 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39220 TokenRBrackPtr(self.node.stable_ptr(db))
39221 }
39222}
39223#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39224pub struct TerminalRBrack {
39225 node: SyntaxNode,
39226}
39227impl Terminal for TerminalRBrack {
39228 const KIND: SyntaxKind = SyntaxKind::TerminalRBrack;
39229 type TokenType = TokenRBrack;
39230 fn new_green(
39231 db: &dyn SyntaxGroup,
39232 leading_trivia: TriviaGreen,
39233 token: <<TerminalRBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
39234 trailing_trivia: TriviaGreen,
39235 ) -> Self::Green {
39236 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39237 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39238 TerminalRBrackGreen(
39239 Arc::new(GreenNode {
39240 kind: SyntaxKind::TerminalRBrack,
39241 details: GreenNodeDetails::Node { children: children.into(), width },
39242 })
39243 .intern(db),
39244 )
39245 }
39246 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39247 let GreenNodeDetails::Node { children, .. } =
39248 &self.node.lookup_intern(db).green.lookup_intern(db).details
39249 else {
39250 unreachable!("Expected a node, not a token");
39251 };
39252 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
39253 }
39254}
39255impl TerminalRBrack {
39256 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39257 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
39258 }
39259 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
39260 TokenRBrack::from_syntax_node(db, self.node.get_children(db)[1])
39261 }
39262 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39263 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
39264 }
39265}
39266#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39267pub struct TerminalRBrackPtr(pub SyntaxStablePtrId);
39268impl TerminalRBrackPtr {}
39269impl TypedStablePtr for TerminalRBrackPtr {
39270 type SyntaxNode = TerminalRBrack;
39271 fn untyped(&self) -> SyntaxStablePtrId {
39272 self.0
39273 }
39274 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
39275 TerminalRBrack::from_syntax_node(db, self.0.lookup(db))
39276 }
39277}
39278impl From<TerminalRBrackPtr> for SyntaxStablePtrId {
39279 fn from(ptr: TerminalRBrackPtr) -> Self {
39280 ptr.untyped()
39281 }
39282}
39283#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39284pub struct TerminalRBrackGreen(pub GreenId);
39285impl TypedSyntaxNode for TerminalRBrack {
39286 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrack);
39287 type StablePtr = TerminalRBrackPtr;
39288 type Green = TerminalRBrackGreen;
39289 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39290 TerminalRBrackGreen(
39291 Arc::new(GreenNode {
39292 kind: SyntaxKind::TerminalRBrack,
39293 details: GreenNodeDetails::Node {
39294 children: [
39295 Trivia::missing(db).0,
39296 TokenRBrack::missing(db).0,
39297 Trivia::missing(db).0,
39298 ]
39299 .into(),
39300 width: TextWidth::default(),
39301 },
39302 })
39303 .intern(db),
39304 )
39305 }
39306 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39307 let kind = node.kind(db);
39308 assert_eq!(
39309 kind,
39310 SyntaxKind::TerminalRBrack,
39311 "Unexpected SyntaxKind {:?}. Expected {:?}.",
39312 kind,
39313 SyntaxKind::TerminalRBrack
39314 );
39315 Self { node }
39316 }
39317 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39318 let kind = node.kind(db);
39319 if kind == SyntaxKind::TerminalRBrack {
39320 Some(Self::from_syntax_node(db, node))
39321 } else {
39322 None
39323 }
39324 }
39325 fn as_syntax_node(&self) -> SyntaxNode {
39326 self.node
39327 }
39328 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39329 TerminalRBrackPtr(self.node.stable_ptr(db))
39330 }
39331}
39332#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39333pub struct TokenRParen {
39334 node: SyntaxNode,
39335}
39336impl Token for TokenRParen {
39337 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
39338 TokenRParenGreen(
39339 Arc::new(GreenNode {
39340 kind: SyntaxKind::TokenRParen,
39341 details: GreenNodeDetails::Token(text),
39342 })
39343 .intern(db),
39344 )
39345 }
39346 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39347 extract_matches!(
39348 &self.node.lookup_intern(db).green.lookup_intern(db).details,
39349 GreenNodeDetails::Token
39350 )
39351 .clone()
39352 }
39353}
39354#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39355pub struct TokenRParenPtr(pub SyntaxStablePtrId);
39356impl TypedStablePtr for TokenRParenPtr {
39357 type SyntaxNode = TokenRParen;
39358 fn untyped(&self) -> SyntaxStablePtrId {
39359 self.0
39360 }
39361 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRParen {
39362 TokenRParen::from_syntax_node(db, self.0.lookup(db))
39363 }
39364}
39365impl From<TokenRParenPtr> for SyntaxStablePtrId {
39366 fn from(ptr: TokenRParenPtr) -> Self {
39367 ptr.untyped()
39368 }
39369}
39370#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39371pub struct TokenRParenGreen(pub GreenId);
39372impl TokenRParenGreen {
39373 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39374 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
39375 }
39376}
39377impl TypedSyntaxNode for TokenRParen {
39378 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRParen);
39379 type StablePtr = TokenRParenPtr;
39380 type Green = TokenRParenGreen;
39381 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39382 TokenRParenGreen(
39383 Arc::new(GreenNode {
39384 kind: SyntaxKind::TokenMissing,
39385 details: GreenNodeDetails::Token("".into()),
39386 })
39387 .intern(db),
39388 )
39389 }
39390 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39391 match node.lookup_intern(db).green.lookup_intern(db).details {
39392 GreenNodeDetails::Token(_) => Self { node },
39393 GreenNodeDetails::Node { .. } => {
39394 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRParen)
39395 }
39396 }
39397 }
39398 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39399 match node.lookup_intern(db).green.lookup_intern(db).details {
39400 GreenNodeDetails::Token(_) => Some(Self { node }),
39401 GreenNodeDetails::Node { .. } => None,
39402 }
39403 }
39404 fn as_syntax_node(&self) -> SyntaxNode {
39405 self.node
39406 }
39407 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39408 TokenRParenPtr(self.node.stable_ptr(db))
39409 }
39410}
39411#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39412pub struct TerminalRParen {
39413 node: SyntaxNode,
39414}
39415impl Terminal for TerminalRParen {
39416 const KIND: SyntaxKind = SyntaxKind::TerminalRParen;
39417 type TokenType = TokenRParen;
39418 fn new_green(
39419 db: &dyn SyntaxGroup,
39420 leading_trivia: TriviaGreen,
39421 token: <<TerminalRParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
39422 trailing_trivia: TriviaGreen,
39423 ) -> Self::Green {
39424 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39425 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39426 TerminalRParenGreen(
39427 Arc::new(GreenNode {
39428 kind: SyntaxKind::TerminalRParen,
39429 details: GreenNodeDetails::Node { children: children.into(), width },
39430 })
39431 .intern(db),
39432 )
39433 }
39434 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39435 let GreenNodeDetails::Node { children, .. } =
39436 &self.node.lookup_intern(db).green.lookup_intern(db).details
39437 else {
39438 unreachable!("Expected a node, not a token");
39439 };
39440 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
39441 }
39442}
39443impl TerminalRParen {
39444 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39445 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
39446 }
39447 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRParen {
39448 TokenRParen::from_syntax_node(db, self.node.get_children(db)[1])
39449 }
39450 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39451 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
39452 }
39453}
39454#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39455pub struct TerminalRParenPtr(pub SyntaxStablePtrId);
39456impl TerminalRParenPtr {}
39457impl TypedStablePtr for TerminalRParenPtr {
39458 type SyntaxNode = TerminalRParen;
39459 fn untyped(&self) -> SyntaxStablePtrId {
39460 self.0
39461 }
39462 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
39463 TerminalRParen::from_syntax_node(db, self.0.lookup(db))
39464 }
39465}
39466impl From<TerminalRParenPtr> for SyntaxStablePtrId {
39467 fn from(ptr: TerminalRParenPtr) -> Self {
39468 ptr.untyped()
39469 }
39470}
39471#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39472pub struct TerminalRParenGreen(pub GreenId);
39473impl TypedSyntaxNode for TerminalRParen {
39474 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRParen);
39475 type StablePtr = TerminalRParenPtr;
39476 type Green = TerminalRParenGreen;
39477 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39478 TerminalRParenGreen(
39479 Arc::new(GreenNode {
39480 kind: SyntaxKind::TerminalRParen,
39481 details: GreenNodeDetails::Node {
39482 children: [
39483 Trivia::missing(db).0,
39484 TokenRParen::missing(db).0,
39485 Trivia::missing(db).0,
39486 ]
39487 .into(),
39488 width: TextWidth::default(),
39489 },
39490 })
39491 .intern(db),
39492 )
39493 }
39494 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39495 let kind = node.kind(db);
39496 assert_eq!(
39497 kind,
39498 SyntaxKind::TerminalRParen,
39499 "Unexpected SyntaxKind {:?}. Expected {:?}.",
39500 kind,
39501 SyntaxKind::TerminalRParen
39502 );
39503 Self { node }
39504 }
39505 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39506 let kind = node.kind(db);
39507 if kind == SyntaxKind::TerminalRParen {
39508 Some(Self::from_syntax_node(db, node))
39509 } else {
39510 None
39511 }
39512 }
39513 fn as_syntax_node(&self) -> SyntaxNode {
39514 self.node
39515 }
39516 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39517 TerminalRParenPtr(self.node.stable_ptr(db))
39518 }
39519}
39520#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39521pub struct TokenSemicolon {
39522 node: SyntaxNode,
39523}
39524impl Token for TokenSemicolon {
39525 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
39526 TokenSemicolonGreen(
39527 Arc::new(GreenNode {
39528 kind: SyntaxKind::TokenSemicolon,
39529 details: GreenNodeDetails::Token(text),
39530 })
39531 .intern(db),
39532 )
39533 }
39534 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39535 extract_matches!(
39536 &self.node.lookup_intern(db).green.lookup_intern(db).details,
39537 GreenNodeDetails::Token
39538 )
39539 .clone()
39540 }
39541}
39542#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39543pub struct TokenSemicolonPtr(pub SyntaxStablePtrId);
39544impl TypedStablePtr for TokenSemicolonPtr {
39545 type SyntaxNode = TokenSemicolon;
39546 fn untyped(&self) -> SyntaxStablePtrId {
39547 self.0
39548 }
39549 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
39550 TokenSemicolon::from_syntax_node(db, self.0.lookup(db))
39551 }
39552}
39553impl From<TokenSemicolonPtr> for SyntaxStablePtrId {
39554 fn from(ptr: TokenSemicolonPtr) -> Self {
39555 ptr.untyped()
39556 }
39557}
39558#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39559pub struct TokenSemicolonGreen(pub GreenId);
39560impl TokenSemicolonGreen {
39561 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39562 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
39563 }
39564}
39565impl TypedSyntaxNode for TokenSemicolon {
39566 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSemicolon);
39567 type StablePtr = TokenSemicolonPtr;
39568 type Green = TokenSemicolonGreen;
39569 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39570 TokenSemicolonGreen(
39571 Arc::new(GreenNode {
39572 kind: SyntaxKind::TokenMissing,
39573 details: GreenNodeDetails::Token("".into()),
39574 })
39575 .intern(db),
39576 )
39577 }
39578 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39579 match node.lookup_intern(db).green.lookup_intern(db).details {
39580 GreenNodeDetails::Token(_) => Self { node },
39581 GreenNodeDetails::Node { .. } => {
39582 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSemicolon)
39583 }
39584 }
39585 }
39586 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39587 match node.lookup_intern(db).green.lookup_intern(db).details {
39588 GreenNodeDetails::Token(_) => Some(Self { node }),
39589 GreenNodeDetails::Node { .. } => None,
39590 }
39591 }
39592 fn as_syntax_node(&self) -> SyntaxNode {
39593 self.node
39594 }
39595 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39596 TokenSemicolonPtr(self.node.stable_ptr(db))
39597 }
39598}
39599#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39600pub struct TerminalSemicolon {
39601 node: SyntaxNode,
39602}
39603impl Terminal for TerminalSemicolon {
39604 const KIND: SyntaxKind = SyntaxKind::TerminalSemicolon;
39605 type TokenType = TokenSemicolon;
39606 fn new_green(
39607 db: &dyn SyntaxGroup,
39608 leading_trivia: TriviaGreen,
39609 token: <<TerminalSemicolon as Terminal>::TokenType as TypedSyntaxNode>::Green,
39610 trailing_trivia: TriviaGreen,
39611 ) -> Self::Green {
39612 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39613 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39614 TerminalSemicolonGreen(
39615 Arc::new(GreenNode {
39616 kind: SyntaxKind::TerminalSemicolon,
39617 details: GreenNodeDetails::Node { children: children.into(), width },
39618 })
39619 .intern(db),
39620 )
39621 }
39622 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39623 let GreenNodeDetails::Node { children, .. } =
39624 &self.node.lookup_intern(db).green.lookup_intern(db).details
39625 else {
39626 unreachable!("Expected a node, not a token");
39627 };
39628 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
39629 }
39630}
39631impl TerminalSemicolon {
39632 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39633 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
39634 }
39635 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
39636 TokenSemicolon::from_syntax_node(db, self.node.get_children(db)[1])
39637 }
39638 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39639 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
39640 }
39641}
39642#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39643pub struct TerminalSemicolonPtr(pub SyntaxStablePtrId);
39644impl TerminalSemicolonPtr {}
39645impl TypedStablePtr for TerminalSemicolonPtr {
39646 type SyntaxNode = TerminalSemicolon;
39647 fn untyped(&self) -> SyntaxStablePtrId {
39648 self.0
39649 }
39650 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
39651 TerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
39652 }
39653}
39654impl From<TerminalSemicolonPtr> for SyntaxStablePtrId {
39655 fn from(ptr: TerminalSemicolonPtr) -> Self {
39656 ptr.untyped()
39657 }
39658}
39659#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39660pub struct TerminalSemicolonGreen(pub GreenId);
39661impl TypedSyntaxNode for TerminalSemicolon {
39662 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalSemicolon);
39663 type StablePtr = TerminalSemicolonPtr;
39664 type Green = TerminalSemicolonGreen;
39665 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39666 TerminalSemicolonGreen(
39667 Arc::new(GreenNode {
39668 kind: SyntaxKind::TerminalSemicolon,
39669 details: GreenNodeDetails::Node {
39670 children: [
39671 Trivia::missing(db).0,
39672 TokenSemicolon::missing(db).0,
39673 Trivia::missing(db).0,
39674 ]
39675 .into(),
39676 width: TextWidth::default(),
39677 },
39678 })
39679 .intern(db),
39680 )
39681 }
39682 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39683 let kind = node.kind(db);
39684 assert_eq!(
39685 kind,
39686 SyntaxKind::TerminalSemicolon,
39687 "Unexpected SyntaxKind {:?}. Expected {:?}.",
39688 kind,
39689 SyntaxKind::TerminalSemicolon
39690 );
39691 Self { node }
39692 }
39693 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39694 let kind = node.kind(db);
39695 if kind == SyntaxKind::TerminalSemicolon {
39696 Some(Self::from_syntax_node(db, node))
39697 } else {
39698 None
39699 }
39700 }
39701 fn as_syntax_node(&self) -> SyntaxNode {
39702 self.node
39703 }
39704 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39705 TerminalSemicolonPtr(self.node.stable_ptr(db))
39706 }
39707}
39708#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39709pub struct TokenUnderscore {
39710 node: SyntaxNode,
39711}
39712impl Token for TokenUnderscore {
39713 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
39714 TokenUnderscoreGreen(
39715 Arc::new(GreenNode {
39716 kind: SyntaxKind::TokenUnderscore,
39717 details: GreenNodeDetails::Token(text),
39718 })
39719 .intern(db),
39720 )
39721 }
39722 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39723 extract_matches!(
39724 &self.node.lookup_intern(db).green.lookup_intern(db).details,
39725 GreenNodeDetails::Token
39726 )
39727 .clone()
39728 }
39729}
39730#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39731pub struct TokenUnderscorePtr(pub SyntaxStablePtrId);
39732impl TypedStablePtr for TokenUnderscorePtr {
39733 type SyntaxNode = TokenUnderscore;
39734 fn untyped(&self) -> SyntaxStablePtrId {
39735 self.0
39736 }
39737 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
39738 TokenUnderscore::from_syntax_node(db, self.0.lookup(db))
39739 }
39740}
39741impl From<TokenUnderscorePtr> for SyntaxStablePtrId {
39742 fn from(ptr: TokenUnderscorePtr) -> Self {
39743 ptr.untyped()
39744 }
39745}
39746#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39747pub struct TokenUnderscoreGreen(pub GreenId);
39748impl TokenUnderscoreGreen {
39749 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39750 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
39751 }
39752}
39753impl TypedSyntaxNode for TokenUnderscore {
39754 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUnderscore);
39755 type StablePtr = TokenUnderscorePtr;
39756 type Green = TokenUnderscoreGreen;
39757 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39758 TokenUnderscoreGreen(
39759 Arc::new(GreenNode {
39760 kind: SyntaxKind::TokenMissing,
39761 details: GreenNodeDetails::Token("".into()),
39762 })
39763 .intern(db),
39764 )
39765 }
39766 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39767 match node.lookup_intern(db).green.lookup_intern(db).details {
39768 GreenNodeDetails::Token(_) => Self { node },
39769 GreenNodeDetails::Node { .. } => {
39770 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUnderscore)
39771 }
39772 }
39773 }
39774 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39775 match node.lookup_intern(db).green.lookup_intern(db).details {
39776 GreenNodeDetails::Token(_) => Some(Self { node }),
39777 GreenNodeDetails::Node { .. } => None,
39778 }
39779 }
39780 fn as_syntax_node(&self) -> SyntaxNode {
39781 self.node
39782 }
39783 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39784 TokenUnderscorePtr(self.node.stable_ptr(db))
39785 }
39786}
39787#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39788pub struct TerminalUnderscore {
39789 node: SyntaxNode,
39790}
39791impl Terminal for TerminalUnderscore {
39792 const KIND: SyntaxKind = SyntaxKind::TerminalUnderscore;
39793 type TokenType = TokenUnderscore;
39794 fn new_green(
39795 db: &dyn SyntaxGroup,
39796 leading_trivia: TriviaGreen,
39797 token: <<TerminalUnderscore as Terminal>::TokenType as TypedSyntaxNode>::Green,
39798 trailing_trivia: TriviaGreen,
39799 ) -> Self::Green {
39800 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39801 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39802 TerminalUnderscoreGreen(
39803 Arc::new(GreenNode {
39804 kind: SyntaxKind::TerminalUnderscore,
39805 details: GreenNodeDetails::Node { children: children.into(), width },
39806 })
39807 .intern(db),
39808 )
39809 }
39810 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39811 let GreenNodeDetails::Node { children, .. } =
39812 &self.node.lookup_intern(db).green.lookup_intern(db).details
39813 else {
39814 unreachable!("Expected a node, not a token");
39815 };
39816 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
39817 }
39818}
39819impl TerminalUnderscore {
39820 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39821 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
39822 }
39823 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
39824 TokenUnderscore::from_syntax_node(db, self.node.get_children(db)[1])
39825 }
39826 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
39827 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
39828 }
39829}
39830#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39831pub struct TerminalUnderscorePtr(pub SyntaxStablePtrId);
39832impl TerminalUnderscorePtr {}
39833impl TypedStablePtr for TerminalUnderscorePtr {
39834 type SyntaxNode = TerminalUnderscore;
39835 fn untyped(&self) -> SyntaxStablePtrId {
39836 self.0
39837 }
39838 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUnderscore {
39839 TerminalUnderscore::from_syntax_node(db, self.0.lookup(db))
39840 }
39841}
39842impl From<TerminalUnderscorePtr> for SyntaxStablePtrId {
39843 fn from(ptr: TerminalUnderscorePtr) -> Self {
39844 ptr.untyped()
39845 }
39846}
39847#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39848pub struct TerminalUnderscoreGreen(pub GreenId);
39849impl TypedSyntaxNode for TerminalUnderscore {
39850 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUnderscore);
39851 type StablePtr = TerminalUnderscorePtr;
39852 type Green = TerminalUnderscoreGreen;
39853 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39854 TerminalUnderscoreGreen(
39855 Arc::new(GreenNode {
39856 kind: SyntaxKind::TerminalUnderscore,
39857 details: GreenNodeDetails::Node {
39858 children: [
39859 Trivia::missing(db).0,
39860 TokenUnderscore::missing(db).0,
39861 Trivia::missing(db).0,
39862 ]
39863 .into(),
39864 width: TextWidth::default(),
39865 },
39866 })
39867 .intern(db),
39868 )
39869 }
39870 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39871 let kind = node.kind(db);
39872 assert_eq!(
39873 kind,
39874 SyntaxKind::TerminalUnderscore,
39875 "Unexpected SyntaxKind {:?}. Expected {:?}.",
39876 kind,
39877 SyntaxKind::TerminalUnderscore
39878 );
39879 Self { node }
39880 }
39881 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39882 let kind = node.kind(db);
39883 if kind == SyntaxKind::TerminalUnderscore {
39884 Some(Self::from_syntax_node(db, node))
39885 } else {
39886 None
39887 }
39888 }
39889 fn as_syntax_node(&self) -> SyntaxNode {
39890 self.node
39891 }
39892 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39893 TerminalUnderscorePtr(self.node.stable_ptr(db))
39894 }
39895}
39896#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39897pub struct TokenXor {
39898 node: SyntaxNode,
39899}
39900impl Token for TokenXor {
39901 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
39902 TokenXorGreen(
39903 Arc::new(GreenNode {
39904 kind: SyntaxKind::TokenXor,
39905 details: GreenNodeDetails::Token(text),
39906 })
39907 .intern(db),
39908 )
39909 }
39910 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39911 extract_matches!(
39912 &self.node.lookup_intern(db).green.lookup_intern(db).details,
39913 GreenNodeDetails::Token
39914 )
39915 .clone()
39916 }
39917}
39918#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39919pub struct TokenXorPtr(pub SyntaxStablePtrId);
39920impl TypedStablePtr for TokenXorPtr {
39921 type SyntaxNode = TokenXor;
39922 fn untyped(&self) -> SyntaxStablePtrId {
39923 self.0
39924 }
39925 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenXor {
39926 TokenXor::from_syntax_node(db, self.0.lookup(db))
39927 }
39928}
39929impl From<TokenXorPtr> for SyntaxStablePtrId {
39930 fn from(ptr: TokenXorPtr) -> Self {
39931 ptr.untyped()
39932 }
39933}
39934#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
39935pub struct TokenXorGreen(pub GreenId);
39936impl TokenXorGreen {
39937 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39938 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
39939 }
39940}
39941impl TypedSyntaxNode for TokenXor {
39942 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenXor);
39943 type StablePtr = TokenXorPtr;
39944 type Green = TokenXorGreen;
39945 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
39946 TokenXorGreen(
39947 Arc::new(GreenNode {
39948 kind: SyntaxKind::TokenMissing,
39949 details: GreenNodeDetails::Token("".into()),
39950 })
39951 .intern(db),
39952 )
39953 }
39954 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
39955 match node.lookup_intern(db).green.lookup_intern(db).details {
39956 GreenNodeDetails::Token(_) => Self { node },
39957 GreenNodeDetails::Node { .. } => {
39958 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenXor)
39959 }
39960 }
39961 }
39962 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
39963 match node.lookup_intern(db).green.lookup_intern(db).details {
39964 GreenNodeDetails::Token(_) => Some(Self { node }),
39965 GreenNodeDetails::Node { .. } => None,
39966 }
39967 }
39968 fn as_syntax_node(&self) -> SyntaxNode {
39969 self.node
39970 }
39971 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
39972 TokenXorPtr(self.node.stable_ptr(db))
39973 }
39974}
39975#[derive(Clone, Debug, Eq, Hash, PartialEq)]
39976pub struct TerminalXor {
39977 node: SyntaxNode,
39978}
39979impl Terminal for TerminalXor {
39980 const KIND: SyntaxKind = SyntaxKind::TerminalXor;
39981 type TokenType = TokenXor;
39982 fn new_green(
39983 db: &dyn SyntaxGroup,
39984 leading_trivia: TriviaGreen,
39985 token: <<TerminalXor as Terminal>::TokenType as TypedSyntaxNode>::Green,
39986 trailing_trivia: TriviaGreen,
39987 ) -> Self::Green {
39988 let children = [leading_trivia.0, token.0, trailing_trivia.0];
39989 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
39990 TerminalXorGreen(
39991 Arc::new(GreenNode {
39992 kind: SyntaxKind::TerminalXor,
39993 details: GreenNodeDetails::Node { children: children.into(), width },
39994 })
39995 .intern(db),
39996 )
39997 }
39998 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
39999 let GreenNodeDetails::Node { children, .. } =
40000 &self.node.lookup_intern(db).green.lookup_intern(db).details
40001 else {
40002 unreachable!("Expected a node, not a token");
40003 };
40004 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
40005 }
40006}
40007impl TerminalXor {
40008 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
40009 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
40010 }
40011 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenXor {
40012 TokenXor::from_syntax_node(db, self.node.get_children(db)[1])
40013 }
40014 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
40015 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
40016 }
40017}
40018#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40019pub struct TerminalXorPtr(pub SyntaxStablePtrId);
40020impl TerminalXorPtr {}
40021impl TypedStablePtr for TerminalXorPtr {
40022 type SyntaxNode = TerminalXor;
40023 fn untyped(&self) -> SyntaxStablePtrId {
40024 self.0
40025 }
40026 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalXor {
40027 TerminalXor::from_syntax_node(db, self.0.lookup(db))
40028 }
40029}
40030impl From<TerminalXorPtr> for SyntaxStablePtrId {
40031 fn from(ptr: TerminalXorPtr) -> Self {
40032 ptr.untyped()
40033 }
40034}
40035#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40036pub struct TerminalXorGreen(pub GreenId);
40037impl TypedSyntaxNode for TerminalXor {
40038 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalXor);
40039 type StablePtr = TerminalXorPtr;
40040 type Green = TerminalXorGreen;
40041 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40042 TerminalXorGreen(
40043 Arc::new(GreenNode {
40044 kind: SyntaxKind::TerminalXor,
40045 details: GreenNodeDetails::Node {
40046 children: [
40047 Trivia::missing(db).0,
40048 TokenXor::missing(db).0,
40049 Trivia::missing(db).0,
40050 ]
40051 .into(),
40052 width: TextWidth::default(),
40053 },
40054 })
40055 .intern(db),
40056 )
40057 }
40058 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40059 let kind = node.kind(db);
40060 assert_eq!(
40061 kind,
40062 SyntaxKind::TerminalXor,
40063 "Unexpected SyntaxKind {:?}. Expected {:?}.",
40064 kind,
40065 SyntaxKind::TerminalXor
40066 );
40067 Self { node }
40068 }
40069 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40070 let kind = node.kind(db);
40071 if kind == SyntaxKind::TerminalXor { Some(Self::from_syntax_node(db, node)) } else { None }
40072 }
40073 fn as_syntax_node(&self) -> SyntaxNode {
40074 self.node
40075 }
40076 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40077 TerminalXorPtr(self.node.stable_ptr(db))
40078 }
40079}
40080#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40081pub struct SyntaxFile {
40082 node: SyntaxNode,
40083}
40084impl SyntaxFile {
40085 pub const INDEX_ITEMS: usize = 0;
40086 pub const INDEX_EOF: usize = 1;
40087 pub fn new_green(
40088 db: &dyn SyntaxGroup,
40089 items: ModuleItemListGreen,
40090 eof: TerminalEndOfFileGreen,
40091 ) -> SyntaxFileGreen {
40092 let children = [items.0, eof.0];
40093 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
40094 SyntaxFileGreen(
40095 Arc::new(GreenNode {
40096 kind: SyntaxKind::SyntaxFile,
40097 details: GreenNodeDetails::Node { children: children.into(), width },
40098 })
40099 .intern(db),
40100 )
40101 }
40102}
40103impl SyntaxFile {
40104 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
40105 ModuleItemList::from_syntax_node(db, self.node.get_children(db)[0])
40106 }
40107 pub fn eof(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
40108 TerminalEndOfFile::from_syntax_node(db, self.node.get_children(db)[1])
40109 }
40110}
40111#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40112pub struct SyntaxFilePtr(pub SyntaxStablePtrId);
40113impl SyntaxFilePtr {}
40114impl TypedStablePtr for SyntaxFilePtr {
40115 type SyntaxNode = SyntaxFile;
40116 fn untyped(&self) -> SyntaxStablePtrId {
40117 self.0
40118 }
40119 fn lookup(&self, db: &dyn SyntaxGroup) -> SyntaxFile {
40120 SyntaxFile::from_syntax_node(db, self.0.lookup(db))
40121 }
40122}
40123impl From<SyntaxFilePtr> for SyntaxStablePtrId {
40124 fn from(ptr: SyntaxFilePtr) -> Self {
40125 ptr.untyped()
40126 }
40127}
40128#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40129pub struct SyntaxFileGreen(pub GreenId);
40130impl TypedSyntaxNode for SyntaxFile {
40131 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::SyntaxFile);
40132 type StablePtr = SyntaxFilePtr;
40133 type Green = SyntaxFileGreen;
40134 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40135 SyntaxFileGreen(
40136 Arc::new(GreenNode {
40137 kind: SyntaxKind::SyntaxFile,
40138 details: GreenNodeDetails::Node {
40139 children: [ModuleItemList::missing(db).0, TerminalEndOfFile::missing(db).0]
40140 .into(),
40141 width: TextWidth::default(),
40142 },
40143 })
40144 .intern(db),
40145 )
40146 }
40147 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40148 let kind = node.kind(db);
40149 assert_eq!(
40150 kind,
40151 SyntaxKind::SyntaxFile,
40152 "Unexpected SyntaxKind {:?}. Expected {:?}.",
40153 kind,
40154 SyntaxKind::SyntaxFile
40155 );
40156 Self { node }
40157 }
40158 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40159 let kind = node.kind(db);
40160 if kind == SyntaxKind::SyntaxFile { Some(Self::from_syntax_node(db, node)) } else { None }
40161 }
40162 fn as_syntax_node(&self) -> SyntaxNode {
40163 self.node
40164 }
40165 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40166 SyntaxFilePtr(self.node.stable_ptr(db))
40167 }
40168}
40169#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40170pub struct TokenEmpty {
40171 node: SyntaxNode,
40172}
40173impl Token for TokenEmpty {
40174 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40175 TokenEmptyGreen(
40176 Arc::new(GreenNode {
40177 kind: SyntaxKind::TokenEmpty,
40178 details: GreenNodeDetails::Token(text),
40179 })
40180 .intern(db),
40181 )
40182 }
40183 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40184 extract_matches!(
40185 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40186 GreenNodeDetails::Token
40187 )
40188 .clone()
40189 }
40190}
40191#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40192pub struct TokenEmptyPtr(pub SyntaxStablePtrId);
40193impl TypedStablePtr for TokenEmptyPtr {
40194 type SyntaxNode = TokenEmpty;
40195 fn untyped(&self) -> SyntaxStablePtrId {
40196 self.0
40197 }
40198 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
40199 TokenEmpty::from_syntax_node(db, self.0.lookup(db))
40200 }
40201}
40202impl From<TokenEmptyPtr> for SyntaxStablePtrId {
40203 fn from(ptr: TokenEmptyPtr) -> Self {
40204 ptr.untyped()
40205 }
40206}
40207#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40208pub struct TokenEmptyGreen(pub GreenId);
40209impl TokenEmptyGreen {
40210 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40211 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40212 }
40213}
40214impl TypedSyntaxNode for TokenEmpty {
40215 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEmpty);
40216 type StablePtr = TokenEmptyPtr;
40217 type Green = TokenEmptyGreen;
40218 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40219 TokenEmptyGreen(
40220 Arc::new(GreenNode {
40221 kind: SyntaxKind::TokenMissing,
40222 details: GreenNodeDetails::Token("".into()),
40223 })
40224 .intern(db),
40225 )
40226 }
40227 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40228 match node.lookup_intern(db).green.lookup_intern(db).details {
40229 GreenNodeDetails::Token(_) => Self { node },
40230 GreenNodeDetails::Node { .. } => {
40231 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEmpty)
40232 }
40233 }
40234 }
40235 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40236 match node.lookup_intern(db).green.lookup_intern(db).details {
40237 GreenNodeDetails::Token(_) => Some(Self { node }),
40238 GreenNodeDetails::Node { .. } => None,
40239 }
40240 }
40241 fn as_syntax_node(&self) -> SyntaxNode {
40242 self.node
40243 }
40244 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40245 TokenEmptyPtr(self.node.stable_ptr(db))
40246 }
40247}
40248#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40249pub struct TerminalEmpty {
40250 node: SyntaxNode,
40251}
40252impl Terminal for TerminalEmpty {
40253 const KIND: SyntaxKind = SyntaxKind::TerminalEmpty;
40254 type TokenType = TokenEmpty;
40255 fn new_green(
40256 db: &dyn SyntaxGroup,
40257 leading_trivia: TriviaGreen,
40258 token: <<TerminalEmpty as Terminal>::TokenType as TypedSyntaxNode>::Green,
40259 trailing_trivia: TriviaGreen,
40260 ) -> Self::Green {
40261 let children = [leading_trivia.0, token.0, trailing_trivia.0];
40262 let width = children.into_iter().map(|id: GreenId| id.lookup_intern(db).width()).sum();
40263 TerminalEmptyGreen(
40264 Arc::new(GreenNode {
40265 kind: SyntaxKind::TerminalEmpty,
40266 details: GreenNodeDetails::Node { children: children.into(), width },
40267 })
40268 .intern(db),
40269 )
40270 }
40271 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40272 let GreenNodeDetails::Node { children, .. } =
40273 &self.node.lookup_intern(db).green.lookup_intern(db).details
40274 else {
40275 unreachable!("Expected a node, not a token");
40276 };
40277 extract_matches!(&children[1].lookup_intern(db).details, GreenNodeDetails::Token).clone()
40278 }
40279}
40280impl TerminalEmpty {
40281 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
40282 Trivia::from_syntax_node(db, self.node.get_children(db)[0])
40283 }
40284 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
40285 TokenEmpty::from_syntax_node(db, self.node.get_children(db)[1])
40286 }
40287 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
40288 Trivia::from_syntax_node(db, self.node.get_children(db)[2])
40289 }
40290}
40291#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40292pub struct TerminalEmptyPtr(pub SyntaxStablePtrId);
40293impl TerminalEmptyPtr {}
40294impl TypedStablePtr for TerminalEmptyPtr {
40295 type SyntaxNode = TerminalEmpty;
40296 fn untyped(&self) -> SyntaxStablePtrId {
40297 self.0
40298 }
40299 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
40300 TerminalEmpty::from_syntax_node(db, self.0.lookup(db))
40301 }
40302}
40303impl From<TerminalEmptyPtr> for SyntaxStablePtrId {
40304 fn from(ptr: TerminalEmptyPtr) -> Self {
40305 ptr.untyped()
40306 }
40307}
40308#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40309pub struct TerminalEmptyGreen(pub GreenId);
40310impl TypedSyntaxNode for TerminalEmpty {
40311 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEmpty);
40312 type StablePtr = TerminalEmptyPtr;
40313 type Green = TerminalEmptyGreen;
40314 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40315 TerminalEmptyGreen(
40316 Arc::new(GreenNode {
40317 kind: SyntaxKind::TerminalEmpty,
40318 details: GreenNodeDetails::Node {
40319 children: [
40320 Trivia::missing(db).0,
40321 TokenEmpty::missing(db).0,
40322 Trivia::missing(db).0,
40323 ]
40324 .into(),
40325 width: TextWidth::default(),
40326 },
40327 })
40328 .intern(db),
40329 )
40330 }
40331 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40332 let kind = node.kind(db);
40333 assert_eq!(
40334 kind,
40335 SyntaxKind::TerminalEmpty,
40336 "Unexpected SyntaxKind {:?}. Expected {:?}.",
40337 kind,
40338 SyntaxKind::TerminalEmpty
40339 );
40340 Self { node }
40341 }
40342 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40343 let kind = node.kind(db);
40344 if kind == SyntaxKind::TerminalEmpty {
40345 Some(Self::from_syntax_node(db, node))
40346 } else {
40347 None
40348 }
40349 }
40350 fn as_syntax_node(&self) -> SyntaxNode {
40351 self.node
40352 }
40353 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40354 TerminalEmptyPtr(self.node.stable_ptr(db))
40355 }
40356}
40357#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40358pub struct TokenSingleLineComment {
40359 node: SyntaxNode,
40360}
40361impl Token for TokenSingleLineComment {
40362 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40363 TokenSingleLineCommentGreen(
40364 Arc::new(GreenNode {
40365 kind: SyntaxKind::TokenSingleLineComment,
40366 details: GreenNodeDetails::Token(text),
40367 })
40368 .intern(db),
40369 )
40370 }
40371 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40372 extract_matches!(
40373 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40374 GreenNodeDetails::Token
40375 )
40376 .clone()
40377 }
40378}
40379#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40380pub struct TokenSingleLineCommentPtr(pub SyntaxStablePtrId);
40381impl TypedStablePtr for TokenSingleLineCommentPtr {
40382 type SyntaxNode = TokenSingleLineComment;
40383 fn untyped(&self) -> SyntaxStablePtrId {
40384 self.0
40385 }
40386 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineComment {
40387 TokenSingleLineComment::from_syntax_node(db, self.0.lookup(db))
40388 }
40389}
40390impl From<TokenSingleLineCommentPtr> for SyntaxStablePtrId {
40391 fn from(ptr: TokenSingleLineCommentPtr) -> Self {
40392 ptr.untyped()
40393 }
40394}
40395#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40396pub struct TokenSingleLineCommentGreen(pub GreenId);
40397impl TokenSingleLineCommentGreen {
40398 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40399 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40400 }
40401}
40402impl TypedSyntaxNode for TokenSingleLineComment {
40403 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineComment);
40404 type StablePtr = TokenSingleLineCommentPtr;
40405 type Green = TokenSingleLineCommentGreen;
40406 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40407 TokenSingleLineCommentGreen(
40408 Arc::new(GreenNode {
40409 kind: SyntaxKind::TokenMissing,
40410 details: GreenNodeDetails::Token("".into()),
40411 })
40412 .intern(db),
40413 )
40414 }
40415 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40416 match node.lookup_intern(db).green.lookup_intern(db).details {
40417 GreenNodeDetails::Token(_) => Self { node },
40418 GreenNodeDetails::Node { .. } => panic!(
40419 "Expected a token {:?}, not an internal node",
40420 SyntaxKind::TokenSingleLineComment
40421 ),
40422 }
40423 }
40424 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40425 match node.lookup_intern(db).green.lookup_intern(db).details {
40426 GreenNodeDetails::Token(_) => Some(Self { node }),
40427 GreenNodeDetails::Node { .. } => None,
40428 }
40429 }
40430 fn as_syntax_node(&self) -> SyntaxNode {
40431 self.node
40432 }
40433 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40434 TokenSingleLineCommentPtr(self.node.stable_ptr(db))
40435 }
40436}
40437#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40438pub struct TokenSingleLineInnerComment {
40439 node: SyntaxNode,
40440}
40441impl Token for TokenSingleLineInnerComment {
40442 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40443 TokenSingleLineInnerCommentGreen(
40444 Arc::new(GreenNode {
40445 kind: SyntaxKind::TokenSingleLineInnerComment,
40446 details: GreenNodeDetails::Token(text),
40447 })
40448 .intern(db),
40449 )
40450 }
40451 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40452 extract_matches!(
40453 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40454 GreenNodeDetails::Token
40455 )
40456 .clone()
40457 }
40458}
40459#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40460pub struct TokenSingleLineInnerCommentPtr(pub SyntaxStablePtrId);
40461impl TypedStablePtr for TokenSingleLineInnerCommentPtr {
40462 type SyntaxNode = TokenSingleLineInnerComment;
40463 fn untyped(&self) -> SyntaxStablePtrId {
40464 self.0
40465 }
40466 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineInnerComment {
40467 TokenSingleLineInnerComment::from_syntax_node(db, self.0.lookup(db))
40468 }
40469}
40470impl From<TokenSingleLineInnerCommentPtr> for SyntaxStablePtrId {
40471 fn from(ptr: TokenSingleLineInnerCommentPtr) -> Self {
40472 ptr.untyped()
40473 }
40474}
40475#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40476pub struct TokenSingleLineInnerCommentGreen(pub GreenId);
40477impl TokenSingleLineInnerCommentGreen {
40478 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40479 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40480 }
40481}
40482impl TypedSyntaxNode for TokenSingleLineInnerComment {
40483 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineInnerComment);
40484 type StablePtr = TokenSingleLineInnerCommentPtr;
40485 type Green = TokenSingleLineInnerCommentGreen;
40486 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40487 TokenSingleLineInnerCommentGreen(
40488 Arc::new(GreenNode {
40489 kind: SyntaxKind::TokenMissing,
40490 details: GreenNodeDetails::Token("".into()),
40491 })
40492 .intern(db),
40493 )
40494 }
40495 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40496 match node.lookup_intern(db).green.lookup_intern(db).details {
40497 GreenNodeDetails::Token(_) => Self { node },
40498 GreenNodeDetails::Node { .. } => panic!(
40499 "Expected a token {:?}, not an internal node",
40500 SyntaxKind::TokenSingleLineInnerComment
40501 ),
40502 }
40503 }
40504 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40505 match node.lookup_intern(db).green.lookup_intern(db).details {
40506 GreenNodeDetails::Token(_) => Some(Self { node }),
40507 GreenNodeDetails::Node { .. } => None,
40508 }
40509 }
40510 fn as_syntax_node(&self) -> SyntaxNode {
40511 self.node
40512 }
40513 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40514 TokenSingleLineInnerCommentPtr(self.node.stable_ptr(db))
40515 }
40516}
40517#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40518pub struct TokenSingleLineDocComment {
40519 node: SyntaxNode,
40520}
40521impl Token for TokenSingleLineDocComment {
40522 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40523 TokenSingleLineDocCommentGreen(
40524 Arc::new(GreenNode {
40525 kind: SyntaxKind::TokenSingleLineDocComment,
40526 details: GreenNodeDetails::Token(text),
40527 })
40528 .intern(db),
40529 )
40530 }
40531 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40532 extract_matches!(
40533 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40534 GreenNodeDetails::Token
40535 )
40536 .clone()
40537 }
40538}
40539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40540pub struct TokenSingleLineDocCommentPtr(pub SyntaxStablePtrId);
40541impl TypedStablePtr for TokenSingleLineDocCommentPtr {
40542 type SyntaxNode = TokenSingleLineDocComment;
40543 fn untyped(&self) -> SyntaxStablePtrId {
40544 self.0
40545 }
40546 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineDocComment {
40547 TokenSingleLineDocComment::from_syntax_node(db, self.0.lookup(db))
40548 }
40549}
40550impl From<TokenSingleLineDocCommentPtr> for SyntaxStablePtrId {
40551 fn from(ptr: TokenSingleLineDocCommentPtr) -> Self {
40552 ptr.untyped()
40553 }
40554}
40555#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40556pub struct TokenSingleLineDocCommentGreen(pub GreenId);
40557impl TokenSingleLineDocCommentGreen {
40558 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40559 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40560 }
40561}
40562impl TypedSyntaxNode for TokenSingleLineDocComment {
40563 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineDocComment);
40564 type StablePtr = TokenSingleLineDocCommentPtr;
40565 type Green = TokenSingleLineDocCommentGreen;
40566 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40567 TokenSingleLineDocCommentGreen(
40568 Arc::new(GreenNode {
40569 kind: SyntaxKind::TokenMissing,
40570 details: GreenNodeDetails::Token("".into()),
40571 })
40572 .intern(db),
40573 )
40574 }
40575 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40576 match node.lookup_intern(db).green.lookup_intern(db).details {
40577 GreenNodeDetails::Token(_) => Self { node },
40578 GreenNodeDetails::Node { .. } => panic!(
40579 "Expected a token {:?}, not an internal node",
40580 SyntaxKind::TokenSingleLineDocComment
40581 ),
40582 }
40583 }
40584 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40585 match node.lookup_intern(db).green.lookup_intern(db).details {
40586 GreenNodeDetails::Token(_) => Some(Self { node }),
40587 GreenNodeDetails::Node { .. } => None,
40588 }
40589 }
40590 fn as_syntax_node(&self) -> SyntaxNode {
40591 self.node
40592 }
40593 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40594 TokenSingleLineDocCommentPtr(self.node.stable_ptr(db))
40595 }
40596}
40597#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40598pub struct TokenWhitespace {
40599 node: SyntaxNode,
40600}
40601impl Token for TokenWhitespace {
40602 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40603 TokenWhitespaceGreen(
40604 Arc::new(GreenNode {
40605 kind: SyntaxKind::TokenWhitespace,
40606 details: GreenNodeDetails::Token(text),
40607 })
40608 .intern(db),
40609 )
40610 }
40611 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40612 extract_matches!(
40613 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40614 GreenNodeDetails::Token
40615 )
40616 .clone()
40617 }
40618}
40619#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40620pub struct TokenWhitespacePtr(pub SyntaxStablePtrId);
40621impl TypedStablePtr for TokenWhitespacePtr {
40622 type SyntaxNode = TokenWhitespace;
40623 fn untyped(&self) -> SyntaxStablePtrId {
40624 self.0
40625 }
40626 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhitespace {
40627 TokenWhitespace::from_syntax_node(db, self.0.lookup(db))
40628 }
40629}
40630impl From<TokenWhitespacePtr> for SyntaxStablePtrId {
40631 fn from(ptr: TokenWhitespacePtr) -> Self {
40632 ptr.untyped()
40633 }
40634}
40635#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40636pub struct TokenWhitespaceGreen(pub GreenId);
40637impl TokenWhitespaceGreen {
40638 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40639 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40640 }
40641}
40642impl TypedSyntaxNode for TokenWhitespace {
40643 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhitespace);
40644 type StablePtr = TokenWhitespacePtr;
40645 type Green = TokenWhitespaceGreen;
40646 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40647 TokenWhitespaceGreen(
40648 Arc::new(GreenNode {
40649 kind: SyntaxKind::TokenMissing,
40650 details: GreenNodeDetails::Token("".into()),
40651 })
40652 .intern(db),
40653 )
40654 }
40655 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40656 match node.lookup_intern(db).green.lookup_intern(db).details {
40657 GreenNodeDetails::Token(_) => Self { node },
40658 GreenNodeDetails::Node { .. } => {
40659 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhitespace)
40660 }
40661 }
40662 }
40663 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40664 match node.lookup_intern(db).green.lookup_intern(db).details {
40665 GreenNodeDetails::Token(_) => Some(Self { node }),
40666 GreenNodeDetails::Node { .. } => None,
40667 }
40668 }
40669 fn as_syntax_node(&self) -> SyntaxNode {
40670 self.node
40671 }
40672 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40673 TokenWhitespacePtr(self.node.stable_ptr(db))
40674 }
40675}
40676#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40677pub struct TokenNewline {
40678 node: SyntaxNode,
40679}
40680impl Token for TokenNewline {
40681 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40682 TokenNewlineGreen(
40683 Arc::new(GreenNode {
40684 kind: SyntaxKind::TokenNewline,
40685 details: GreenNodeDetails::Token(text),
40686 })
40687 .intern(db),
40688 )
40689 }
40690 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40691 extract_matches!(
40692 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40693 GreenNodeDetails::Token
40694 )
40695 .clone()
40696 }
40697}
40698#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40699pub struct TokenNewlinePtr(pub SyntaxStablePtrId);
40700impl TypedStablePtr for TokenNewlinePtr {
40701 type SyntaxNode = TokenNewline;
40702 fn untyped(&self) -> SyntaxStablePtrId {
40703 self.0
40704 }
40705 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNewline {
40706 TokenNewline::from_syntax_node(db, self.0.lookup(db))
40707 }
40708}
40709impl From<TokenNewlinePtr> for SyntaxStablePtrId {
40710 fn from(ptr: TokenNewlinePtr) -> Self {
40711 ptr.untyped()
40712 }
40713}
40714#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40715pub struct TokenNewlineGreen(pub GreenId);
40716impl TokenNewlineGreen {
40717 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40718 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40719 }
40720}
40721impl TypedSyntaxNode for TokenNewline {
40722 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNewline);
40723 type StablePtr = TokenNewlinePtr;
40724 type Green = TokenNewlineGreen;
40725 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40726 TokenNewlineGreen(
40727 Arc::new(GreenNode {
40728 kind: SyntaxKind::TokenMissing,
40729 details: GreenNodeDetails::Token("".into()),
40730 })
40731 .intern(db),
40732 )
40733 }
40734 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40735 match node.lookup_intern(db).green.lookup_intern(db).details {
40736 GreenNodeDetails::Token(_) => Self { node },
40737 GreenNodeDetails::Node { .. } => {
40738 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNewline)
40739 }
40740 }
40741 }
40742 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40743 match node.lookup_intern(db).green.lookup_intern(db).details {
40744 GreenNodeDetails::Token(_) => Some(Self { node }),
40745 GreenNodeDetails::Node { .. } => None,
40746 }
40747 }
40748 fn as_syntax_node(&self) -> SyntaxNode {
40749 self.node
40750 }
40751 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40752 TokenNewlinePtr(self.node.stable_ptr(db))
40753 }
40754}
40755#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40756pub struct TokenMissing {
40757 node: SyntaxNode,
40758}
40759impl Token for TokenMissing {
40760 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40761 TokenMissingGreen(
40762 Arc::new(GreenNode {
40763 kind: SyntaxKind::TokenMissing,
40764 details: GreenNodeDetails::Token(text),
40765 })
40766 .intern(db),
40767 )
40768 }
40769 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40770 extract_matches!(
40771 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40772 GreenNodeDetails::Token
40773 )
40774 .clone()
40775 }
40776}
40777#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40778pub struct TokenMissingPtr(pub SyntaxStablePtrId);
40779impl TypedStablePtr for TokenMissingPtr {
40780 type SyntaxNode = TokenMissing;
40781 fn untyped(&self) -> SyntaxStablePtrId {
40782 self.0
40783 }
40784 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMissing {
40785 TokenMissing::from_syntax_node(db, self.0.lookup(db))
40786 }
40787}
40788impl From<TokenMissingPtr> for SyntaxStablePtrId {
40789 fn from(ptr: TokenMissingPtr) -> Self {
40790 ptr.untyped()
40791 }
40792}
40793#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40794pub struct TokenMissingGreen(pub GreenId);
40795impl TokenMissingGreen {
40796 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40797 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40798 }
40799}
40800impl TypedSyntaxNode for TokenMissing {
40801 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMissing);
40802 type StablePtr = TokenMissingPtr;
40803 type Green = TokenMissingGreen;
40804 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40805 TokenMissingGreen(
40806 Arc::new(GreenNode {
40807 kind: SyntaxKind::TokenMissing,
40808 details: GreenNodeDetails::Token("".into()),
40809 })
40810 .intern(db),
40811 )
40812 }
40813 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40814 match node.lookup_intern(db).green.lookup_intern(db).details {
40815 GreenNodeDetails::Token(_) => Self { node },
40816 GreenNodeDetails::Node { .. } => {
40817 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMissing)
40818 }
40819 }
40820 }
40821 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40822 match node.lookup_intern(db).green.lookup_intern(db).details {
40823 GreenNodeDetails::Token(_) => Some(Self { node }),
40824 GreenNodeDetails::Node { .. } => None,
40825 }
40826 }
40827 fn as_syntax_node(&self) -> SyntaxNode {
40828 self.node
40829 }
40830 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40831 TokenMissingPtr(self.node.stable_ptr(db))
40832 }
40833}
40834#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40835pub struct TokenSkipped {
40836 node: SyntaxNode,
40837}
40838impl Token for TokenSkipped {
40839 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
40840 TokenSkippedGreen(
40841 Arc::new(GreenNode {
40842 kind: SyntaxKind::TokenSkipped,
40843 details: GreenNodeDetails::Token(text),
40844 })
40845 .intern(db),
40846 )
40847 }
40848 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40849 extract_matches!(
40850 &self.node.lookup_intern(db).green.lookup_intern(db).details,
40851 GreenNodeDetails::Token
40852 )
40853 .clone()
40854 }
40855}
40856#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40857pub struct TokenSkippedPtr(pub SyntaxStablePtrId);
40858impl TypedStablePtr for TokenSkippedPtr {
40859 type SyntaxNode = TokenSkipped;
40860 fn untyped(&self) -> SyntaxStablePtrId {
40861 self.0
40862 }
40863 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSkipped {
40864 TokenSkipped::from_syntax_node(db, self.0.lookup(db))
40865 }
40866}
40867impl From<TokenSkippedPtr> for SyntaxStablePtrId {
40868 fn from(ptr: TokenSkippedPtr) -> Self {
40869 ptr.untyped()
40870 }
40871}
40872#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40873pub struct TokenSkippedGreen(pub GreenId);
40874impl TokenSkippedGreen {
40875 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
40876 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
40877 }
40878}
40879impl TypedSyntaxNode for TokenSkipped {
40880 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSkipped);
40881 type StablePtr = TokenSkippedPtr;
40882 type Green = TokenSkippedGreen;
40883 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
40884 TokenSkippedGreen(
40885 Arc::new(GreenNode {
40886 kind: SyntaxKind::TokenMissing,
40887 details: GreenNodeDetails::Token("".into()),
40888 })
40889 .intern(db),
40890 )
40891 }
40892 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
40893 match node.lookup_intern(db).green.lookup_intern(db).details {
40894 GreenNodeDetails::Token(_) => Self { node },
40895 GreenNodeDetails::Node { .. } => {
40896 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSkipped)
40897 }
40898 }
40899 }
40900 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
40901 match node.lookup_intern(db).green.lookup_intern(db).details {
40902 GreenNodeDetails::Token(_) => Some(Self { node }),
40903 GreenNodeDetails::Node { .. } => None,
40904 }
40905 }
40906 fn as_syntax_node(&self) -> SyntaxNode {
40907 self.node
40908 }
40909 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
40910 TokenSkippedPtr(self.node.stable_ptr(db))
40911 }
40912}
40913#[derive(Clone, Debug, Eq, Hash, PartialEq)]
40914pub enum TokenNode {
40915 TerminalIdentifier(TerminalIdentifier),
40916 TerminalLiteralNumber(TerminalLiteralNumber),
40917 TerminalShortString(TerminalShortString),
40918 TerminalString(TerminalString),
40919 TerminalAs(TerminalAs),
40920 TerminalConst(TerminalConst),
40921 TerminalElse(TerminalElse),
40922 TerminalEnum(TerminalEnum),
40923 TerminalExtern(TerminalExtern),
40924 TerminalFalse(TerminalFalse),
40925 TerminalFunction(TerminalFunction),
40926 TerminalIf(TerminalIf),
40927 TerminalWhile(TerminalWhile),
40928 TerminalFor(TerminalFor),
40929 TerminalLoop(TerminalLoop),
40930 TerminalImpl(TerminalImpl),
40931 TerminalImplicits(TerminalImplicits),
40932 TerminalLet(TerminalLet),
40933 TerminalMacro(TerminalMacro),
40934 TerminalMatch(TerminalMatch),
40935 TerminalModule(TerminalModule),
40936 TerminalMut(TerminalMut),
40937 TerminalNoPanic(TerminalNoPanic),
40938 TerminalOf(TerminalOf),
40939 TerminalRef(TerminalRef),
40940 TerminalContinue(TerminalContinue),
40941 TerminalReturn(TerminalReturn),
40942 TerminalBreak(TerminalBreak),
40943 TerminalStruct(TerminalStruct),
40944 TerminalTrait(TerminalTrait),
40945 TerminalTrue(TerminalTrue),
40946 TerminalType(TerminalType),
40947 TerminalUse(TerminalUse),
40948 TerminalPub(TerminalPub),
40949 TerminalAnd(TerminalAnd),
40950 TerminalAndAnd(TerminalAndAnd),
40951 TerminalArrow(TerminalArrow),
40952 TerminalAt(TerminalAt),
40953 TerminalBadCharacters(TerminalBadCharacters),
40954 TerminalColon(TerminalColon),
40955 TerminalColonColon(TerminalColonColon),
40956 TerminalComma(TerminalComma),
40957 TerminalDiv(TerminalDiv),
40958 TerminalDivEq(TerminalDivEq),
40959 TerminalDollar(TerminalDollar),
40960 TerminalDot(TerminalDot),
40961 TerminalDotDot(TerminalDotDot),
40962 TerminalDotDotEq(TerminalDotDotEq),
40963 TerminalEndOfFile(TerminalEndOfFile),
40964 TerminalEq(TerminalEq),
40965 TerminalEqEq(TerminalEqEq),
40966 TerminalGE(TerminalGE),
40967 TerminalGT(TerminalGT),
40968 TerminalHash(TerminalHash),
40969 TerminalLBrace(TerminalLBrace),
40970 TerminalLBrack(TerminalLBrack),
40971 TerminalLE(TerminalLE),
40972 TerminalLParen(TerminalLParen),
40973 TerminalLT(TerminalLT),
40974 TerminalMatchArrow(TerminalMatchArrow),
40975 TerminalMinus(TerminalMinus),
40976 TerminalMinusEq(TerminalMinusEq),
40977 TerminalMod(TerminalMod),
40978 TerminalModEq(TerminalModEq),
40979 TerminalMul(TerminalMul),
40980 TerminalMulEq(TerminalMulEq),
40981 TerminalNeq(TerminalNeq),
40982 TerminalNot(TerminalNot),
40983 TerminalBitNot(TerminalBitNot),
40984 TerminalOr(TerminalOr),
40985 TerminalOrOr(TerminalOrOr),
40986 TerminalPlus(TerminalPlus),
40987 TerminalPlusEq(TerminalPlusEq),
40988 TerminalQuestionMark(TerminalQuestionMark),
40989 TerminalRBrace(TerminalRBrace),
40990 TerminalRBrack(TerminalRBrack),
40991 TerminalRParen(TerminalRParen),
40992 TerminalSemicolon(TerminalSemicolon),
40993 TerminalUnderscore(TerminalUnderscore),
40994 TerminalXor(TerminalXor),
40995 TerminalEmpty(TerminalEmpty),
40996}
40997#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
40998pub struct TokenNodePtr(pub SyntaxStablePtrId);
40999impl TypedStablePtr for TokenNodePtr {
41000 type SyntaxNode = TokenNode;
41001 fn untyped(&self) -> SyntaxStablePtrId {
41002 self.0
41003 }
41004 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNode {
41005 TokenNode::from_syntax_node(db, self.0.lookup(db))
41006 }
41007}
41008impl From<TokenNodePtr> for SyntaxStablePtrId {
41009 fn from(ptr: TokenNodePtr) -> Self {
41010 ptr.untyped()
41011 }
41012}
41013impl From<TerminalIdentifierPtr> for TokenNodePtr {
41014 fn from(value: TerminalIdentifierPtr) -> Self {
41015 Self(value.0)
41016 }
41017}
41018impl From<TerminalLiteralNumberPtr> for TokenNodePtr {
41019 fn from(value: TerminalLiteralNumberPtr) -> Self {
41020 Self(value.0)
41021 }
41022}
41023impl From<TerminalShortStringPtr> for TokenNodePtr {
41024 fn from(value: TerminalShortStringPtr) -> Self {
41025 Self(value.0)
41026 }
41027}
41028impl From<TerminalStringPtr> for TokenNodePtr {
41029 fn from(value: TerminalStringPtr) -> Self {
41030 Self(value.0)
41031 }
41032}
41033impl From<TerminalAsPtr> for TokenNodePtr {
41034 fn from(value: TerminalAsPtr) -> Self {
41035 Self(value.0)
41036 }
41037}
41038impl From<TerminalConstPtr> for TokenNodePtr {
41039 fn from(value: TerminalConstPtr) -> Self {
41040 Self(value.0)
41041 }
41042}
41043impl From<TerminalElsePtr> for TokenNodePtr {
41044 fn from(value: TerminalElsePtr) -> Self {
41045 Self(value.0)
41046 }
41047}
41048impl From<TerminalEnumPtr> for TokenNodePtr {
41049 fn from(value: TerminalEnumPtr) -> Self {
41050 Self(value.0)
41051 }
41052}
41053impl From<TerminalExternPtr> for TokenNodePtr {
41054 fn from(value: TerminalExternPtr) -> Self {
41055 Self(value.0)
41056 }
41057}
41058impl From<TerminalFalsePtr> for TokenNodePtr {
41059 fn from(value: TerminalFalsePtr) -> Self {
41060 Self(value.0)
41061 }
41062}
41063impl From<TerminalFunctionPtr> for TokenNodePtr {
41064 fn from(value: TerminalFunctionPtr) -> Self {
41065 Self(value.0)
41066 }
41067}
41068impl From<TerminalIfPtr> for TokenNodePtr {
41069 fn from(value: TerminalIfPtr) -> Self {
41070 Self(value.0)
41071 }
41072}
41073impl From<TerminalWhilePtr> for TokenNodePtr {
41074 fn from(value: TerminalWhilePtr) -> Self {
41075 Self(value.0)
41076 }
41077}
41078impl From<TerminalForPtr> for TokenNodePtr {
41079 fn from(value: TerminalForPtr) -> Self {
41080 Self(value.0)
41081 }
41082}
41083impl From<TerminalLoopPtr> for TokenNodePtr {
41084 fn from(value: TerminalLoopPtr) -> Self {
41085 Self(value.0)
41086 }
41087}
41088impl From<TerminalImplPtr> for TokenNodePtr {
41089 fn from(value: TerminalImplPtr) -> Self {
41090 Self(value.0)
41091 }
41092}
41093impl From<TerminalImplicitsPtr> for TokenNodePtr {
41094 fn from(value: TerminalImplicitsPtr) -> Self {
41095 Self(value.0)
41096 }
41097}
41098impl From<TerminalLetPtr> for TokenNodePtr {
41099 fn from(value: TerminalLetPtr) -> Self {
41100 Self(value.0)
41101 }
41102}
41103impl From<TerminalMacroPtr> for TokenNodePtr {
41104 fn from(value: TerminalMacroPtr) -> Self {
41105 Self(value.0)
41106 }
41107}
41108impl From<TerminalMatchPtr> for TokenNodePtr {
41109 fn from(value: TerminalMatchPtr) -> Self {
41110 Self(value.0)
41111 }
41112}
41113impl From<TerminalModulePtr> for TokenNodePtr {
41114 fn from(value: TerminalModulePtr) -> Self {
41115 Self(value.0)
41116 }
41117}
41118impl From<TerminalMutPtr> for TokenNodePtr {
41119 fn from(value: TerminalMutPtr) -> Self {
41120 Self(value.0)
41121 }
41122}
41123impl From<TerminalNoPanicPtr> for TokenNodePtr {
41124 fn from(value: TerminalNoPanicPtr) -> Self {
41125 Self(value.0)
41126 }
41127}
41128impl From<TerminalOfPtr> for TokenNodePtr {
41129 fn from(value: TerminalOfPtr) -> Self {
41130 Self(value.0)
41131 }
41132}
41133impl From<TerminalRefPtr> for TokenNodePtr {
41134 fn from(value: TerminalRefPtr) -> Self {
41135 Self(value.0)
41136 }
41137}
41138impl From<TerminalContinuePtr> for TokenNodePtr {
41139 fn from(value: TerminalContinuePtr) -> Self {
41140 Self(value.0)
41141 }
41142}
41143impl From<TerminalReturnPtr> for TokenNodePtr {
41144 fn from(value: TerminalReturnPtr) -> Self {
41145 Self(value.0)
41146 }
41147}
41148impl From<TerminalBreakPtr> for TokenNodePtr {
41149 fn from(value: TerminalBreakPtr) -> Self {
41150 Self(value.0)
41151 }
41152}
41153impl From<TerminalStructPtr> for TokenNodePtr {
41154 fn from(value: TerminalStructPtr) -> Self {
41155 Self(value.0)
41156 }
41157}
41158impl From<TerminalTraitPtr> for TokenNodePtr {
41159 fn from(value: TerminalTraitPtr) -> Self {
41160 Self(value.0)
41161 }
41162}
41163impl From<TerminalTruePtr> for TokenNodePtr {
41164 fn from(value: TerminalTruePtr) -> Self {
41165 Self(value.0)
41166 }
41167}
41168impl From<TerminalTypePtr> for TokenNodePtr {
41169 fn from(value: TerminalTypePtr) -> Self {
41170 Self(value.0)
41171 }
41172}
41173impl From<TerminalUsePtr> for TokenNodePtr {
41174 fn from(value: TerminalUsePtr) -> Self {
41175 Self(value.0)
41176 }
41177}
41178impl From<TerminalPubPtr> for TokenNodePtr {
41179 fn from(value: TerminalPubPtr) -> Self {
41180 Self(value.0)
41181 }
41182}
41183impl From<TerminalAndPtr> for TokenNodePtr {
41184 fn from(value: TerminalAndPtr) -> Self {
41185 Self(value.0)
41186 }
41187}
41188impl From<TerminalAndAndPtr> for TokenNodePtr {
41189 fn from(value: TerminalAndAndPtr) -> Self {
41190 Self(value.0)
41191 }
41192}
41193impl From<TerminalArrowPtr> for TokenNodePtr {
41194 fn from(value: TerminalArrowPtr) -> Self {
41195 Self(value.0)
41196 }
41197}
41198impl From<TerminalAtPtr> for TokenNodePtr {
41199 fn from(value: TerminalAtPtr) -> Self {
41200 Self(value.0)
41201 }
41202}
41203impl From<TerminalBadCharactersPtr> for TokenNodePtr {
41204 fn from(value: TerminalBadCharactersPtr) -> Self {
41205 Self(value.0)
41206 }
41207}
41208impl From<TerminalColonPtr> for TokenNodePtr {
41209 fn from(value: TerminalColonPtr) -> Self {
41210 Self(value.0)
41211 }
41212}
41213impl From<TerminalColonColonPtr> for TokenNodePtr {
41214 fn from(value: TerminalColonColonPtr) -> Self {
41215 Self(value.0)
41216 }
41217}
41218impl From<TerminalCommaPtr> for TokenNodePtr {
41219 fn from(value: TerminalCommaPtr) -> Self {
41220 Self(value.0)
41221 }
41222}
41223impl From<TerminalDivPtr> for TokenNodePtr {
41224 fn from(value: TerminalDivPtr) -> Self {
41225 Self(value.0)
41226 }
41227}
41228impl From<TerminalDivEqPtr> for TokenNodePtr {
41229 fn from(value: TerminalDivEqPtr) -> Self {
41230 Self(value.0)
41231 }
41232}
41233impl From<TerminalDollarPtr> for TokenNodePtr {
41234 fn from(value: TerminalDollarPtr) -> Self {
41235 Self(value.0)
41236 }
41237}
41238impl From<TerminalDotPtr> for TokenNodePtr {
41239 fn from(value: TerminalDotPtr) -> Self {
41240 Self(value.0)
41241 }
41242}
41243impl From<TerminalDotDotPtr> for TokenNodePtr {
41244 fn from(value: TerminalDotDotPtr) -> Self {
41245 Self(value.0)
41246 }
41247}
41248impl From<TerminalDotDotEqPtr> for TokenNodePtr {
41249 fn from(value: TerminalDotDotEqPtr) -> Self {
41250 Self(value.0)
41251 }
41252}
41253impl From<TerminalEndOfFilePtr> for TokenNodePtr {
41254 fn from(value: TerminalEndOfFilePtr) -> Self {
41255 Self(value.0)
41256 }
41257}
41258impl From<TerminalEqPtr> for TokenNodePtr {
41259 fn from(value: TerminalEqPtr) -> Self {
41260 Self(value.0)
41261 }
41262}
41263impl From<TerminalEqEqPtr> for TokenNodePtr {
41264 fn from(value: TerminalEqEqPtr) -> Self {
41265 Self(value.0)
41266 }
41267}
41268impl From<TerminalGEPtr> for TokenNodePtr {
41269 fn from(value: TerminalGEPtr) -> Self {
41270 Self(value.0)
41271 }
41272}
41273impl From<TerminalGTPtr> for TokenNodePtr {
41274 fn from(value: TerminalGTPtr) -> Self {
41275 Self(value.0)
41276 }
41277}
41278impl From<TerminalHashPtr> for TokenNodePtr {
41279 fn from(value: TerminalHashPtr) -> Self {
41280 Self(value.0)
41281 }
41282}
41283impl From<TerminalLBracePtr> for TokenNodePtr {
41284 fn from(value: TerminalLBracePtr) -> Self {
41285 Self(value.0)
41286 }
41287}
41288impl From<TerminalLBrackPtr> for TokenNodePtr {
41289 fn from(value: TerminalLBrackPtr) -> Self {
41290 Self(value.0)
41291 }
41292}
41293impl From<TerminalLEPtr> for TokenNodePtr {
41294 fn from(value: TerminalLEPtr) -> Self {
41295 Self(value.0)
41296 }
41297}
41298impl From<TerminalLParenPtr> for TokenNodePtr {
41299 fn from(value: TerminalLParenPtr) -> Self {
41300 Self(value.0)
41301 }
41302}
41303impl From<TerminalLTPtr> for TokenNodePtr {
41304 fn from(value: TerminalLTPtr) -> Self {
41305 Self(value.0)
41306 }
41307}
41308impl From<TerminalMatchArrowPtr> for TokenNodePtr {
41309 fn from(value: TerminalMatchArrowPtr) -> Self {
41310 Self(value.0)
41311 }
41312}
41313impl From<TerminalMinusPtr> for TokenNodePtr {
41314 fn from(value: TerminalMinusPtr) -> Self {
41315 Self(value.0)
41316 }
41317}
41318impl From<TerminalMinusEqPtr> for TokenNodePtr {
41319 fn from(value: TerminalMinusEqPtr) -> Self {
41320 Self(value.0)
41321 }
41322}
41323impl From<TerminalModPtr> for TokenNodePtr {
41324 fn from(value: TerminalModPtr) -> Self {
41325 Self(value.0)
41326 }
41327}
41328impl From<TerminalModEqPtr> for TokenNodePtr {
41329 fn from(value: TerminalModEqPtr) -> Self {
41330 Self(value.0)
41331 }
41332}
41333impl From<TerminalMulPtr> for TokenNodePtr {
41334 fn from(value: TerminalMulPtr) -> Self {
41335 Self(value.0)
41336 }
41337}
41338impl From<TerminalMulEqPtr> for TokenNodePtr {
41339 fn from(value: TerminalMulEqPtr) -> Self {
41340 Self(value.0)
41341 }
41342}
41343impl From<TerminalNeqPtr> for TokenNodePtr {
41344 fn from(value: TerminalNeqPtr) -> Self {
41345 Self(value.0)
41346 }
41347}
41348impl From<TerminalNotPtr> for TokenNodePtr {
41349 fn from(value: TerminalNotPtr) -> Self {
41350 Self(value.0)
41351 }
41352}
41353impl From<TerminalBitNotPtr> for TokenNodePtr {
41354 fn from(value: TerminalBitNotPtr) -> Self {
41355 Self(value.0)
41356 }
41357}
41358impl From<TerminalOrPtr> for TokenNodePtr {
41359 fn from(value: TerminalOrPtr) -> Self {
41360 Self(value.0)
41361 }
41362}
41363impl From<TerminalOrOrPtr> for TokenNodePtr {
41364 fn from(value: TerminalOrOrPtr) -> Self {
41365 Self(value.0)
41366 }
41367}
41368impl From<TerminalPlusPtr> for TokenNodePtr {
41369 fn from(value: TerminalPlusPtr) -> Self {
41370 Self(value.0)
41371 }
41372}
41373impl From<TerminalPlusEqPtr> for TokenNodePtr {
41374 fn from(value: TerminalPlusEqPtr) -> Self {
41375 Self(value.0)
41376 }
41377}
41378impl From<TerminalQuestionMarkPtr> for TokenNodePtr {
41379 fn from(value: TerminalQuestionMarkPtr) -> Self {
41380 Self(value.0)
41381 }
41382}
41383impl From<TerminalRBracePtr> for TokenNodePtr {
41384 fn from(value: TerminalRBracePtr) -> Self {
41385 Self(value.0)
41386 }
41387}
41388impl From<TerminalRBrackPtr> for TokenNodePtr {
41389 fn from(value: TerminalRBrackPtr) -> Self {
41390 Self(value.0)
41391 }
41392}
41393impl From<TerminalRParenPtr> for TokenNodePtr {
41394 fn from(value: TerminalRParenPtr) -> Self {
41395 Self(value.0)
41396 }
41397}
41398impl From<TerminalSemicolonPtr> for TokenNodePtr {
41399 fn from(value: TerminalSemicolonPtr) -> Self {
41400 Self(value.0)
41401 }
41402}
41403impl From<TerminalUnderscorePtr> for TokenNodePtr {
41404 fn from(value: TerminalUnderscorePtr) -> Self {
41405 Self(value.0)
41406 }
41407}
41408impl From<TerminalXorPtr> for TokenNodePtr {
41409 fn from(value: TerminalXorPtr) -> Self {
41410 Self(value.0)
41411 }
41412}
41413impl From<TerminalEmptyPtr> for TokenNodePtr {
41414 fn from(value: TerminalEmptyPtr) -> Self {
41415 Self(value.0)
41416 }
41417}
41418impl From<TerminalIdentifierGreen> for TokenNodeGreen {
41419 fn from(value: TerminalIdentifierGreen) -> Self {
41420 Self(value.0)
41421 }
41422}
41423impl From<TerminalLiteralNumberGreen> for TokenNodeGreen {
41424 fn from(value: TerminalLiteralNumberGreen) -> Self {
41425 Self(value.0)
41426 }
41427}
41428impl From<TerminalShortStringGreen> for TokenNodeGreen {
41429 fn from(value: TerminalShortStringGreen) -> Self {
41430 Self(value.0)
41431 }
41432}
41433impl From<TerminalStringGreen> for TokenNodeGreen {
41434 fn from(value: TerminalStringGreen) -> Self {
41435 Self(value.0)
41436 }
41437}
41438impl From<TerminalAsGreen> for TokenNodeGreen {
41439 fn from(value: TerminalAsGreen) -> Self {
41440 Self(value.0)
41441 }
41442}
41443impl From<TerminalConstGreen> for TokenNodeGreen {
41444 fn from(value: TerminalConstGreen) -> Self {
41445 Self(value.0)
41446 }
41447}
41448impl From<TerminalElseGreen> for TokenNodeGreen {
41449 fn from(value: TerminalElseGreen) -> Self {
41450 Self(value.0)
41451 }
41452}
41453impl From<TerminalEnumGreen> for TokenNodeGreen {
41454 fn from(value: TerminalEnumGreen) -> Self {
41455 Self(value.0)
41456 }
41457}
41458impl From<TerminalExternGreen> for TokenNodeGreen {
41459 fn from(value: TerminalExternGreen) -> Self {
41460 Self(value.0)
41461 }
41462}
41463impl From<TerminalFalseGreen> for TokenNodeGreen {
41464 fn from(value: TerminalFalseGreen) -> Self {
41465 Self(value.0)
41466 }
41467}
41468impl From<TerminalFunctionGreen> for TokenNodeGreen {
41469 fn from(value: TerminalFunctionGreen) -> Self {
41470 Self(value.0)
41471 }
41472}
41473impl From<TerminalIfGreen> for TokenNodeGreen {
41474 fn from(value: TerminalIfGreen) -> Self {
41475 Self(value.0)
41476 }
41477}
41478impl From<TerminalWhileGreen> for TokenNodeGreen {
41479 fn from(value: TerminalWhileGreen) -> Self {
41480 Self(value.0)
41481 }
41482}
41483impl From<TerminalForGreen> for TokenNodeGreen {
41484 fn from(value: TerminalForGreen) -> Self {
41485 Self(value.0)
41486 }
41487}
41488impl From<TerminalLoopGreen> for TokenNodeGreen {
41489 fn from(value: TerminalLoopGreen) -> Self {
41490 Self(value.0)
41491 }
41492}
41493impl From<TerminalImplGreen> for TokenNodeGreen {
41494 fn from(value: TerminalImplGreen) -> Self {
41495 Self(value.0)
41496 }
41497}
41498impl From<TerminalImplicitsGreen> for TokenNodeGreen {
41499 fn from(value: TerminalImplicitsGreen) -> Self {
41500 Self(value.0)
41501 }
41502}
41503impl From<TerminalLetGreen> for TokenNodeGreen {
41504 fn from(value: TerminalLetGreen) -> Self {
41505 Self(value.0)
41506 }
41507}
41508impl From<TerminalMacroGreen> for TokenNodeGreen {
41509 fn from(value: TerminalMacroGreen) -> Self {
41510 Self(value.0)
41511 }
41512}
41513impl From<TerminalMatchGreen> for TokenNodeGreen {
41514 fn from(value: TerminalMatchGreen) -> Self {
41515 Self(value.0)
41516 }
41517}
41518impl From<TerminalModuleGreen> for TokenNodeGreen {
41519 fn from(value: TerminalModuleGreen) -> Self {
41520 Self(value.0)
41521 }
41522}
41523impl From<TerminalMutGreen> for TokenNodeGreen {
41524 fn from(value: TerminalMutGreen) -> Self {
41525 Self(value.0)
41526 }
41527}
41528impl From<TerminalNoPanicGreen> for TokenNodeGreen {
41529 fn from(value: TerminalNoPanicGreen) -> Self {
41530 Self(value.0)
41531 }
41532}
41533impl From<TerminalOfGreen> for TokenNodeGreen {
41534 fn from(value: TerminalOfGreen) -> Self {
41535 Self(value.0)
41536 }
41537}
41538impl From<TerminalRefGreen> for TokenNodeGreen {
41539 fn from(value: TerminalRefGreen) -> Self {
41540 Self(value.0)
41541 }
41542}
41543impl From<TerminalContinueGreen> for TokenNodeGreen {
41544 fn from(value: TerminalContinueGreen) -> Self {
41545 Self(value.0)
41546 }
41547}
41548impl From<TerminalReturnGreen> for TokenNodeGreen {
41549 fn from(value: TerminalReturnGreen) -> Self {
41550 Self(value.0)
41551 }
41552}
41553impl From<TerminalBreakGreen> for TokenNodeGreen {
41554 fn from(value: TerminalBreakGreen) -> Self {
41555 Self(value.0)
41556 }
41557}
41558impl From<TerminalStructGreen> for TokenNodeGreen {
41559 fn from(value: TerminalStructGreen) -> Self {
41560 Self(value.0)
41561 }
41562}
41563impl From<TerminalTraitGreen> for TokenNodeGreen {
41564 fn from(value: TerminalTraitGreen) -> Self {
41565 Self(value.0)
41566 }
41567}
41568impl From<TerminalTrueGreen> for TokenNodeGreen {
41569 fn from(value: TerminalTrueGreen) -> Self {
41570 Self(value.0)
41571 }
41572}
41573impl From<TerminalTypeGreen> for TokenNodeGreen {
41574 fn from(value: TerminalTypeGreen) -> Self {
41575 Self(value.0)
41576 }
41577}
41578impl From<TerminalUseGreen> for TokenNodeGreen {
41579 fn from(value: TerminalUseGreen) -> Self {
41580 Self(value.0)
41581 }
41582}
41583impl From<TerminalPubGreen> for TokenNodeGreen {
41584 fn from(value: TerminalPubGreen) -> Self {
41585 Self(value.0)
41586 }
41587}
41588impl From<TerminalAndGreen> for TokenNodeGreen {
41589 fn from(value: TerminalAndGreen) -> Self {
41590 Self(value.0)
41591 }
41592}
41593impl From<TerminalAndAndGreen> for TokenNodeGreen {
41594 fn from(value: TerminalAndAndGreen) -> Self {
41595 Self(value.0)
41596 }
41597}
41598impl From<TerminalArrowGreen> for TokenNodeGreen {
41599 fn from(value: TerminalArrowGreen) -> Self {
41600 Self(value.0)
41601 }
41602}
41603impl From<TerminalAtGreen> for TokenNodeGreen {
41604 fn from(value: TerminalAtGreen) -> Self {
41605 Self(value.0)
41606 }
41607}
41608impl From<TerminalBadCharactersGreen> for TokenNodeGreen {
41609 fn from(value: TerminalBadCharactersGreen) -> Self {
41610 Self(value.0)
41611 }
41612}
41613impl From<TerminalColonGreen> for TokenNodeGreen {
41614 fn from(value: TerminalColonGreen) -> Self {
41615 Self(value.0)
41616 }
41617}
41618impl From<TerminalColonColonGreen> for TokenNodeGreen {
41619 fn from(value: TerminalColonColonGreen) -> Self {
41620 Self(value.0)
41621 }
41622}
41623impl From<TerminalCommaGreen> for TokenNodeGreen {
41624 fn from(value: TerminalCommaGreen) -> Self {
41625 Self(value.0)
41626 }
41627}
41628impl From<TerminalDivGreen> for TokenNodeGreen {
41629 fn from(value: TerminalDivGreen) -> Self {
41630 Self(value.0)
41631 }
41632}
41633impl From<TerminalDivEqGreen> for TokenNodeGreen {
41634 fn from(value: TerminalDivEqGreen) -> Self {
41635 Self(value.0)
41636 }
41637}
41638impl From<TerminalDollarGreen> for TokenNodeGreen {
41639 fn from(value: TerminalDollarGreen) -> Self {
41640 Self(value.0)
41641 }
41642}
41643impl From<TerminalDotGreen> for TokenNodeGreen {
41644 fn from(value: TerminalDotGreen) -> Self {
41645 Self(value.0)
41646 }
41647}
41648impl From<TerminalDotDotGreen> for TokenNodeGreen {
41649 fn from(value: TerminalDotDotGreen) -> Self {
41650 Self(value.0)
41651 }
41652}
41653impl From<TerminalDotDotEqGreen> for TokenNodeGreen {
41654 fn from(value: TerminalDotDotEqGreen) -> Self {
41655 Self(value.0)
41656 }
41657}
41658impl From<TerminalEndOfFileGreen> for TokenNodeGreen {
41659 fn from(value: TerminalEndOfFileGreen) -> Self {
41660 Self(value.0)
41661 }
41662}
41663impl From<TerminalEqGreen> for TokenNodeGreen {
41664 fn from(value: TerminalEqGreen) -> Self {
41665 Self(value.0)
41666 }
41667}
41668impl From<TerminalEqEqGreen> for TokenNodeGreen {
41669 fn from(value: TerminalEqEqGreen) -> Self {
41670 Self(value.0)
41671 }
41672}
41673impl From<TerminalGEGreen> for TokenNodeGreen {
41674 fn from(value: TerminalGEGreen) -> Self {
41675 Self(value.0)
41676 }
41677}
41678impl From<TerminalGTGreen> for TokenNodeGreen {
41679 fn from(value: TerminalGTGreen) -> Self {
41680 Self(value.0)
41681 }
41682}
41683impl From<TerminalHashGreen> for TokenNodeGreen {
41684 fn from(value: TerminalHashGreen) -> Self {
41685 Self(value.0)
41686 }
41687}
41688impl From<TerminalLBraceGreen> for TokenNodeGreen {
41689 fn from(value: TerminalLBraceGreen) -> Self {
41690 Self(value.0)
41691 }
41692}
41693impl From<TerminalLBrackGreen> for TokenNodeGreen {
41694 fn from(value: TerminalLBrackGreen) -> Self {
41695 Self(value.0)
41696 }
41697}
41698impl From<TerminalLEGreen> for TokenNodeGreen {
41699 fn from(value: TerminalLEGreen) -> Self {
41700 Self(value.0)
41701 }
41702}
41703impl From<TerminalLParenGreen> for TokenNodeGreen {
41704 fn from(value: TerminalLParenGreen) -> Self {
41705 Self(value.0)
41706 }
41707}
41708impl From<TerminalLTGreen> for TokenNodeGreen {
41709 fn from(value: TerminalLTGreen) -> Self {
41710 Self(value.0)
41711 }
41712}
41713impl From<TerminalMatchArrowGreen> for TokenNodeGreen {
41714 fn from(value: TerminalMatchArrowGreen) -> Self {
41715 Self(value.0)
41716 }
41717}
41718impl From<TerminalMinusGreen> for TokenNodeGreen {
41719 fn from(value: TerminalMinusGreen) -> Self {
41720 Self(value.0)
41721 }
41722}
41723impl From<TerminalMinusEqGreen> for TokenNodeGreen {
41724 fn from(value: TerminalMinusEqGreen) -> Self {
41725 Self(value.0)
41726 }
41727}
41728impl From<TerminalModGreen> for TokenNodeGreen {
41729 fn from(value: TerminalModGreen) -> Self {
41730 Self(value.0)
41731 }
41732}
41733impl From<TerminalModEqGreen> for TokenNodeGreen {
41734 fn from(value: TerminalModEqGreen) -> Self {
41735 Self(value.0)
41736 }
41737}
41738impl From<TerminalMulGreen> for TokenNodeGreen {
41739 fn from(value: TerminalMulGreen) -> Self {
41740 Self(value.0)
41741 }
41742}
41743impl From<TerminalMulEqGreen> for TokenNodeGreen {
41744 fn from(value: TerminalMulEqGreen) -> Self {
41745 Self(value.0)
41746 }
41747}
41748impl From<TerminalNeqGreen> for TokenNodeGreen {
41749 fn from(value: TerminalNeqGreen) -> Self {
41750 Self(value.0)
41751 }
41752}
41753impl From<TerminalNotGreen> for TokenNodeGreen {
41754 fn from(value: TerminalNotGreen) -> Self {
41755 Self(value.0)
41756 }
41757}
41758impl From<TerminalBitNotGreen> for TokenNodeGreen {
41759 fn from(value: TerminalBitNotGreen) -> Self {
41760 Self(value.0)
41761 }
41762}
41763impl From<TerminalOrGreen> for TokenNodeGreen {
41764 fn from(value: TerminalOrGreen) -> Self {
41765 Self(value.0)
41766 }
41767}
41768impl From<TerminalOrOrGreen> for TokenNodeGreen {
41769 fn from(value: TerminalOrOrGreen) -> Self {
41770 Self(value.0)
41771 }
41772}
41773impl From<TerminalPlusGreen> for TokenNodeGreen {
41774 fn from(value: TerminalPlusGreen) -> Self {
41775 Self(value.0)
41776 }
41777}
41778impl From<TerminalPlusEqGreen> for TokenNodeGreen {
41779 fn from(value: TerminalPlusEqGreen) -> Self {
41780 Self(value.0)
41781 }
41782}
41783impl From<TerminalQuestionMarkGreen> for TokenNodeGreen {
41784 fn from(value: TerminalQuestionMarkGreen) -> Self {
41785 Self(value.0)
41786 }
41787}
41788impl From<TerminalRBraceGreen> for TokenNodeGreen {
41789 fn from(value: TerminalRBraceGreen) -> Self {
41790 Self(value.0)
41791 }
41792}
41793impl From<TerminalRBrackGreen> for TokenNodeGreen {
41794 fn from(value: TerminalRBrackGreen) -> Self {
41795 Self(value.0)
41796 }
41797}
41798impl From<TerminalRParenGreen> for TokenNodeGreen {
41799 fn from(value: TerminalRParenGreen) -> Self {
41800 Self(value.0)
41801 }
41802}
41803impl From<TerminalSemicolonGreen> for TokenNodeGreen {
41804 fn from(value: TerminalSemicolonGreen) -> Self {
41805 Self(value.0)
41806 }
41807}
41808impl From<TerminalUnderscoreGreen> for TokenNodeGreen {
41809 fn from(value: TerminalUnderscoreGreen) -> Self {
41810 Self(value.0)
41811 }
41812}
41813impl From<TerminalXorGreen> for TokenNodeGreen {
41814 fn from(value: TerminalXorGreen) -> Self {
41815 Self(value.0)
41816 }
41817}
41818impl From<TerminalEmptyGreen> for TokenNodeGreen {
41819 fn from(value: TerminalEmptyGreen) -> Self {
41820 Self(value.0)
41821 }
41822}
41823#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
41824pub struct TokenNodeGreen(pub GreenId);
41825impl TypedSyntaxNode for TokenNode {
41826 const OPTIONAL_KIND: Option<SyntaxKind> = None;
41827 type StablePtr = TokenNodePtr;
41828 type Green = TokenNodeGreen;
41829 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
41830 panic!("No missing variant.");
41831 }
41832 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
41833 let kind = node.kind(db);
41834 match kind {
41835 SyntaxKind::TerminalIdentifier => {
41836 TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node))
41837 }
41838 SyntaxKind::TerminalLiteralNumber => {
41839 TokenNode::TerminalLiteralNumber(TerminalLiteralNumber::from_syntax_node(db, node))
41840 }
41841 SyntaxKind::TerminalShortString => {
41842 TokenNode::TerminalShortString(TerminalShortString::from_syntax_node(db, node))
41843 }
41844 SyntaxKind::TerminalString => {
41845 TokenNode::TerminalString(TerminalString::from_syntax_node(db, node))
41846 }
41847 SyntaxKind::TerminalAs => TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)),
41848 SyntaxKind::TerminalConst => {
41849 TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node))
41850 }
41851 SyntaxKind::TerminalElse => {
41852 TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node))
41853 }
41854 SyntaxKind::TerminalEnum => {
41855 TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node))
41856 }
41857 SyntaxKind::TerminalExtern => {
41858 TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node))
41859 }
41860 SyntaxKind::TerminalFalse => {
41861 TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node))
41862 }
41863 SyntaxKind::TerminalFunction => {
41864 TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node))
41865 }
41866 SyntaxKind::TerminalIf => TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)),
41867 SyntaxKind::TerminalWhile => {
41868 TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node))
41869 }
41870 SyntaxKind::TerminalFor => {
41871 TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node))
41872 }
41873 SyntaxKind::TerminalLoop => {
41874 TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node))
41875 }
41876 SyntaxKind::TerminalImpl => {
41877 TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node))
41878 }
41879 SyntaxKind::TerminalImplicits => {
41880 TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node))
41881 }
41882 SyntaxKind::TerminalLet => {
41883 TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node))
41884 }
41885 SyntaxKind::TerminalMacro => {
41886 TokenNode::TerminalMacro(TerminalMacro::from_syntax_node(db, node))
41887 }
41888 SyntaxKind::TerminalMatch => {
41889 TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node))
41890 }
41891 SyntaxKind::TerminalModule => {
41892 TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node))
41893 }
41894 SyntaxKind::TerminalMut => {
41895 TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node))
41896 }
41897 SyntaxKind::TerminalNoPanic => {
41898 TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
41899 }
41900 SyntaxKind::TerminalOf => TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)),
41901 SyntaxKind::TerminalRef => {
41902 TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node))
41903 }
41904 SyntaxKind::TerminalContinue => {
41905 TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node))
41906 }
41907 SyntaxKind::TerminalReturn => {
41908 TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node))
41909 }
41910 SyntaxKind::TerminalBreak => {
41911 TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node))
41912 }
41913 SyntaxKind::TerminalStruct => {
41914 TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node))
41915 }
41916 SyntaxKind::TerminalTrait => {
41917 TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node))
41918 }
41919 SyntaxKind::TerminalTrue => {
41920 TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node))
41921 }
41922 SyntaxKind::TerminalType => {
41923 TokenNode::TerminalType(TerminalType::from_syntax_node(db, node))
41924 }
41925 SyntaxKind::TerminalUse => {
41926 TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node))
41927 }
41928 SyntaxKind::TerminalPub => {
41929 TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node))
41930 }
41931 SyntaxKind::TerminalAnd => {
41932 TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node))
41933 }
41934 SyntaxKind::TerminalAndAnd => {
41935 TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node))
41936 }
41937 SyntaxKind::TerminalArrow => {
41938 TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node))
41939 }
41940 SyntaxKind::TerminalAt => TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)),
41941 SyntaxKind::TerminalBadCharacters => {
41942 TokenNode::TerminalBadCharacters(TerminalBadCharacters::from_syntax_node(db, node))
41943 }
41944 SyntaxKind::TerminalColon => {
41945 TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node))
41946 }
41947 SyntaxKind::TerminalColonColon => {
41948 TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node))
41949 }
41950 SyntaxKind::TerminalComma => {
41951 TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node))
41952 }
41953 SyntaxKind::TerminalDiv => {
41954 TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node))
41955 }
41956 SyntaxKind::TerminalDivEq => {
41957 TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node))
41958 }
41959 SyntaxKind::TerminalDollar => {
41960 TokenNode::TerminalDollar(TerminalDollar::from_syntax_node(db, node))
41961 }
41962 SyntaxKind::TerminalDot => {
41963 TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node))
41964 }
41965 SyntaxKind::TerminalDotDot => {
41966 TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node))
41967 }
41968 SyntaxKind::TerminalDotDotEq => {
41969 TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
41970 }
41971 SyntaxKind::TerminalEndOfFile => {
41972 TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node))
41973 }
41974 SyntaxKind::TerminalEq => TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)),
41975 SyntaxKind::TerminalEqEq => {
41976 TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node))
41977 }
41978 SyntaxKind::TerminalGE => TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)),
41979 SyntaxKind::TerminalGT => TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)),
41980 SyntaxKind::TerminalHash => {
41981 TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node))
41982 }
41983 SyntaxKind::TerminalLBrace => {
41984 TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node))
41985 }
41986 SyntaxKind::TerminalLBrack => {
41987 TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node))
41988 }
41989 SyntaxKind::TerminalLE => TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)),
41990 SyntaxKind::TerminalLParen => {
41991 TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node))
41992 }
41993 SyntaxKind::TerminalLT => TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)),
41994 SyntaxKind::TerminalMatchArrow => {
41995 TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node))
41996 }
41997 SyntaxKind::TerminalMinus => {
41998 TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node))
41999 }
42000 SyntaxKind::TerminalMinusEq => {
42001 TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node))
42002 }
42003 SyntaxKind::TerminalMod => {
42004 TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node))
42005 }
42006 SyntaxKind::TerminalModEq => {
42007 TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node))
42008 }
42009 SyntaxKind::TerminalMul => {
42010 TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node))
42011 }
42012 SyntaxKind::TerminalMulEq => {
42013 TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node))
42014 }
42015 SyntaxKind::TerminalNeq => {
42016 TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node))
42017 }
42018 SyntaxKind::TerminalNot => {
42019 TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node))
42020 }
42021 SyntaxKind::TerminalBitNot => {
42022 TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node))
42023 }
42024 SyntaxKind::TerminalOr => TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)),
42025 SyntaxKind::TerminalOrOr => {
42026 TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node))
42027 }
42028 SyntaxKind::TerminalPlus => {
42029 TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node))
42030 }
42031 SyntaxKind::TerminalPlusEq => {
42032 TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node))
42033 }
42034 SyntaxKind::TerminalQuestionMark => {
42035 TokenNode::TerminalQuestionMark(TerminalQuestionMark::from_syntax_node(db, node))
42036 }
42037 SyntaxKind::TerminalRBrace => {
42038 TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node))
42039 }
42040 SyntaxKind::TerminalRBrack => {
42041 TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node))
42042 }
42043 SyntaxKind::TerminalRParen => {
42044 TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node))
42045 }
42046 SyntaxKind::TerminalSemicolon => {
42047 TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node))
42048 }
42049 SyntaxKind::TerminalUnderscore => {
42050 TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node))
42051 }
42052 SyntaxKind::TerminalXor => {
42053 TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node))
42054 }
42055 SyntaxKind::TerminalEmpty => {
42056 TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node))
42057 }
42058 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TokenNode"),
42059 }
42060 }
42061 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
42062 let kind = node.kind(db);
42063 match kind {
42064 SyntaxKind::TerminalIdentifier => {
42065 Some(TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node)))
42066 }
42067 SyntaxKind::TerminalLiteralNumber => Some(TokenNode::TerminalLiteralNumber(
42068 TerminalLiteralNumber::from_syntax_node(db, node),
42069 )),
42070 SyntaxKind::TerminalShortString => Some(TokenNode::TerminalShortString(
42071 TerminalShortString::from_syntax_node(db, node),
42072 )),
42073 SyntaxKind::TerminalString => {
42074 Some(TokenNode::TerminalString(TerminalString::from_syntax_node(db, node)))
42075 }
42076 SyntaxKind::TerminalAs => {
42077 Some(TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)))
42078 }
42079 SyntaxKind::TerminalConst => {
42080 Some(TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node)))
42081 }
42082 SyntaxKind::TerminalElse => {
42083 Some(TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node)))
42084 }
42085 SyntaxKind::TerminalEnum => {
42086 Some(TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node)))
42087 }
42088 SyntaxKind::TerminalExtern => {
42089 Some(TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node)))
42090 }
42091 SyntaxKind::TerminalFalse => {
42092 Some(TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node)))
42093 }
42094 SyntaxKind::TerminalFunction => {
42095 Some(TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node)))
42096 }
42097 SyntaxKind::TerminalIf => {
42098 Some(TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)))
42099 }
42100 SyntaxKind::TerminalWhile => {
42101 Some(TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node)))
42102 }
42103 SyntaxKind::TerminalFor => {
42104 Some(TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node)))
42105 }
42106 SyntaxKind::TerminalLoop => {
42107 Some(TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node)))
42108 }
42109 SyntaxKind::TerminalImpl => {
42110 Some(TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node)))
42111 }
42112 SyntaxKind::TerminalImplicits => {
42113 Some(TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node)))
42114 }
42115 SyntaxKind::TerminalLet => {
42116 Some(TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node)))
42117 }
42118 SyntaxKind::TerminalMacro => {
42119 Some(TokenNode::TerminalMacro(TerminalMacro::from_syntax_node(db, node)))
42120 }
42121 SyntaxKind::TerminalMatch => {
42122 Some(TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node)))
42123 }
42124 SyntaxKind::TerminalModule => {
42125 Some(TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node)))
42126 }
42127 SyntaxKind::TerminalMut => {
42128 Some(TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node)))
42129 }
42130 SyntaxKind::TerminalNoPanic => {
42131 Some(TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node)))
42132 }
42133 SyntaxKind::TerminalOf => {
42134 Some(TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)))
42135 }
42136 SyntaxKind::TerminalRef => {
42137 Some(TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node)))
42138 }
42139 SyntaxKind::TerminalContinue => {
42140 Some(TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node)))
42141 }
42142 SyntaxKind::TerminalReturn => {
42143 Some(TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node)))
42144 }
42145 SyntaxKind::TerminalBreak => {
42146 Some(TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node)))
42147 }
42148 SyntaxKind::TerminalStruct => {
42149 Some(TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node)))
42150 }
42151 SyntaxKind::TerminalTrait => {
42152 Some(TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node)))
42153 }
42154 SyntaxKind::TerminalTrue => {
42155 Some(TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node)))
42156 }
42157 SyntaxKind::TerminalType => {
42158 Some(TokenNode::TerminalType(TerminalType::from_syntax_node(db, node)))
42159 }
42160 SyntaxKind::TerminalUse => {
42161 Some(TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node)))
42162 }
42163 SyntaxKind::TerminalPub => {
42164 Some(TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node)))
42165 }
42166 SyntaxKind::TerminalAnd => {
42167 Some(TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node)))
42168 }
42169 SyntaxKind::TerminalAndAnd => {
42170 Some(TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node)))
42171 }
42172 SyntaxKind::TerminalArrow => {
42173 Some(TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node)))
42174 }
42175 SyntaxKind::TerminalAt => {
42176 Some(TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)))
42177 }
42178 SyntaxKind::TerminalBadCharacters => Some(TokenNode::TerminalBadCharacters(
42179 TerminalBadCharacters::from_syntax_node(db, node),
42180 )),
42181 SyntaxKind::TerminalColon => {
42182 Some(TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node)))
42183 }
42184 SyntaxKind::TerminalColonColon => {
42185 Some(TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node)))
42186 }
42187 SyntaxKind::TerminalComma => {
42188 Some(TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node)))
42189 }
42190 SyntaxKind::TerminalDiv => {
42191 Some(TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node)))
42192 }
42193 SyntaxKind::TerminalDivEq => {
42194 Some(TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node)))
42195 }
42196 SyntaxKind::TerminalDollar => {
42197 Some(TokenNode::TerminalDollar(TerminalDollar::from_syntax_node(db, node)))
42198 }
42199 SyntaxKind::TerminalDot => {
42200 Some(TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node)))
42201 }
42202 SyntaxKind::TerminalDotDot => {
42203 Some(TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node)))
42204 }
42205 SyntaxKind::TerminalDotDotEq => {
42206 Some(TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
42207 }
42208 SyntaxKind::TerminalEndOfFile => {
42209 Some(TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node)))
42210 }
42211 SyntaxKind::TerminalEq => {
42212 Some(TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)))
42213 }
42214 SyntaxKind::TerminalEqEq => {
42215 Some(TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node)))
42216 }
42217 SyntaxKind::TerminalGE => {
42218 Some(TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)))
42219 }
42220 SyntaxKind::TerminalGT => {
42221 Some(TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)))
42222 }
42223 SyntaxKind::TerminalHash => {
42224 Some(TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node)))
42225 }
42226 SyntaxKind::TerminalLBrace => {
42227 Some(TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node)))
42228 }
42229 SyntaxKind::TerminalLBrack => {
42230 Some(TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node)))
42231 }
42232 SyntaxKind::TerminalLE => {
42233 Some(TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)))
42234 }
42235 SyntaxKind::TerminalLParen => {
42236 Some(TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node)))
42237 }
42238 SyntaxKind::TerminalLT => {
42239 Some(TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)))
42240 }
42241 SyntaxKind::TerminalMatchArrow => {
42242 Some(TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node)))
42243 }
42244 SyntaxKind::TerminalMinus => {
42245 Some(TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node)))
42246 }
42247 SyntaxKind::TerminalMinusEq => {
42248 Some(TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node)))
42249 }
42250 SyntaxKind::TerminalMod => {
42251 Some(TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node)))
42252 }
42253 SyntaxKind::TerminalModEq => {
42254 Some(TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node)))
42255 }
42256 SyntaxKind::TerminalMul => {
42257 Some(TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node)))
42258 }
42259 SyntaxKind::TerminalMulEq => {
42260 Some(TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node)))
42261 }
42262 SyntaxKind::TerminalNeq => {
42263 Some(TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node)))
42264 }
42265 SyntaxKind::TerminalNot => {
42266 Some(TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node)))
42267 }
42268 SyntaxKind::TerminalBitNot => {
42269 Some(TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node)))
42270 }
42271 SyntaxKind::TerminalOr => {
42272 Some(TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)))
42273 }
42274 SyntaxKind::TerminalOrOr => {
42275 Some(TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node)))
42276 }
42277 SyntaxKind::TerminalPlus => {
42278 Some(TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node)))
42279 }
42280 SyntaxKind::TerminalPlusEq => {
42281 Some(TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node)))
42282 }
42283 SyntaxKind::TerminalQuestionMark => Some(TokenNode::TerminalQuestionMark(
42284 TerminalQuestionMark::from_syntax_node(db, node),
42285 )),
42286 SyntaxKind::TerminalRBrace => {
42287 Some(TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node)))
42288 }
42289 SyntaxKind::TerminalRBrack => {
42290 Some(TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node)))
42291 }
42292 SyntaxKind::TerminalRParen => {
42293 Some(TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node)))
42294 }
42295 SyntaxKind::TerminalSemicolon => {
42296 Some(TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node)))
42297 }
42298 SyntaxKind::TerminalUnderscore => {
42299 Some(TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node)))
42300 }
42301 SyntaxKind::TerminalXor => {
42302 Some(TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node)))
42303 }
42304 SyntaxKind::TerminalEmpty => {
42305 Some(TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node)))
42306 }
42307 _ => None,
42308 }
42309 }
42310 fn as_syntax_node(&self) -> SyntaxNode {
42311 match self {
42312 TokenNode::TerminalIdentifier(x) => x.as_syntax_node(),
42313 TokenNode::TerminalLiteralNumber(x) => x.as_syntax_node(),
42314 TokenNode::TerminalShortString(x) => x.as_syntax_node(),
42315 TokenNode::TerminalString(x) => x.as_syntax_node(),
42316 TokenNode::TerminalAs(x) => x.as_syntax_node(),
42317 TokenNode::TerminalConst(x) => x.as_syntax_node(),
42318 TokenNode::TerminalElse(x) => x.as_syntax_node(),
42319 TokenNode::TerminalEnum(x) => x.as_syntax_node(),
42320 TokenNode::TerminalExtern(x) => x.as_syntax_node(),
42321 TokenNode::TerminalFalse(x) => x.as_syntax_node(),
42322 TokenNode::TerminalFunction(x) => x.as_syntax_node(),
42323 TokenNode::TerminalIf(x) => x.as_syntax_node(),
42324 TokenNode::TerminalWhile(x) => x.as_syntax_node(),
42325 TokenNode::TerminalFor(x) => x.as_syntax_node(),
42326 TokenNode::TerminalLoop(x) => x.as_syntax_node(),
42327 TokenNode::TerminalImpl(x) => x.as_syntax_node(),
42328 TokenNode::TerminalImplicits(x) => x.as_syntax_node(),
42329 TokenNode::TerminalLet(x) => x.as_syntax_node(),
42330 TokenNode::TerminalMacro(x) => x.as_syntax_node(),
42331 TokenNode::TerminalMatch(x) => x.as_syntax_node(),
42332 TokenNode::TerminalModule(x) => x.as_syntax_node(),
42333 TokenNode::TerminalMut(x) => x.as_syntax_node(),
42334 TokenNode::TerminalNoPanic(x) => x.as_syntax_node(),
42335 TokenNode::TerminalOf(x) => x.as_syntax_node(),
42336 TokenNode::TerminalRef(x) => x.as_syntax_node(),
42337 TokenNode::TerminalContinue(x) => x.as_syntax_node(),
42338 TokenNode::TerminalReturn(x) => x.as_syntax_node(),
42339 TokenNode::TerminalBreak(x) => x.as_syntax_node(),
42340 TokenNode::TerminalStruct(x) => x.as_syntax_node(),
42341 TokenNode::TerminalTrait(x) => x.as_syntax_node(),
42342 TokenNode::TerminalTrue(x) => x.as_syntax_node(),
42343 TokenNode::TerminalType(x) => x.as_syntax_node(),
42344 TokenNode::TerminalUse(x) => x.as_syntax_node(),
42345 TokenNode::TerminalPub(x) => x.as_syntax_node(),
42346 TokenNode::TerminalAnd(x) => x.as_syntax_node(),
42347 TokenNode::TerminalAndAnd(x) => x.as_syntax_node(),
42348 TokenNode::TerminalArrow(x) => x.as_syntax_node(),
42349 TokenNode::TerminalAt(x) => x.as_syntax_node(),
42350 TokenNode::TerminalBadCharacters(x) => x.as_syntax_node(),
42351 TokenNode::TerminalColon(x) => x.as_syntax_node(),
42352 TokenNode::TerminalColonColon(x) => x.as_syntax_node(),
42353 TokenNode::TerminalComma(x) => x.as_syntax_node(),
42354 TokenNode::TerminalDiv(x) => x.as_syntax_node(),
42355 TokenNode::TerminalDivEq(x) => x.as_syntax_node(),
42356 TokenNode::TerminalDollar(x) => x.as_syntax_node(),
42357 TokenNode::TerminalDot(x) => x.as_syntax_node(),
42358 TokenNode::TerminalDotDot(x) => x.as_syntax_node(),
42359 TokenNode::TerminalDotDotEq(x) => x.as_syntax_node(),
42360 TokenNode::TerminalEndOfFile(x) => x.as_syntax_node(),
42361 TokenNode::TerminalEq(x) => x.as_syntax_node(),
42362 TokenNode::TerminalEqEq(x) => x.as_syntax_node(),
42363 TokenNode::TerminalGE(x) => x.as_syntax_node(),
42364 TokenNode::TerminalGT(x) => x.as_syntax_node(),
42365 TokenNode::TerminalHash(x) => x.as_syntax_node(),
42366 TokenNode::TerminalLBrace(x) => x.as_syntax_node(),
42367 TokenNode::TerminalLBrack(x) => x.as_syntax_node(),
42368 TokenNode::TerminalLE(x) => x.as_syntax_node(),
42369 TokenNode::TerminalLParen(x) => x.as_syntax_node(),
42370 TokenNode::TerminalLT(x) => x.as_syntax_node(),
42371 TokenNode::TerminalMatchArrow(x) => x.as_syntax_node(),
42372 TokenNode::TerminalMinus(x) => x.as_syntax_node(),
42373 TokenNode::TerminalMinusEq(x) => x.as_syntax_node(),
42374 TokenNode::TerminalMod(x) => x.as_syntax_node(),
42375 TokenNode::TerminalModEq(x) => x.as_syntax_node(),
42376 TokenNode::TerminalMul(x) => x.as_syntax_node(),
42377 TokenNode::TerminalMulEq(x) => x.as_syntax_node(),
42378 TokenNode::TerminalNeq(x) => x.as_syntax_node(),
42379 TokenNode::TerminalNot(x) => x.as_syntax_node(),
42380 TokenNode::TerminalBitNot(x) => x.as_syntax_node(),
42381 TokenNode::TerminalOr(x) => x.as_syntax_node(),
42382 TokenNode::TerminalOrOr(x) => x.as_syntax_node(),
42383 TokenNode::TerminalPlus(x) => x.as_syntax_node(),
42384 TokenNode::TerminalPlusEq(x) => x.as_syntax_node(),
42385 TokenNode::TerminalQuestionMark(x) => x.as_syntax_node(),
42386 TokenNode::TerminalRBrace(x) => x.as_syntax_node(),
42387 TokenNode::TerminalRBrack(x) => x.as_syntax_node(),
42388 TokenNode::TerminalRParen(x) => x.as_syntax_node(),
42389 TokenNode::TerminalSemicolon(x) => x.as_syntax_node(),
42390 TokenNode::TerminalUnderscore(x) => x.as_syntax_node(),
42391 TokenNode::TerminalXor(x) => x.as_syntax_node(),
42392 TokenNode::TerminalEmpty(x) => x.as_syntax_node(),
42393 }
42394 }
42395 fn stable_ptr(&self, db: &dyn SyntaxGroup) -> Self::StablePtr {
42396 TokenNodePtr(self.as_syntax_node().lookup_intern(db).stable_ptr)
42397 }
42398}
42399impl TokenNode {
42400 pub fn is_variant(kind: SyntaxKind) -> bool {
42402 matches!(
42403 kind,
42404 SyntaxKind::TerminalIdentifier
42405 | SyntaxKind::TerminalLiteralNumber
42406 | SyntaxKind::TerminalShortString
42407 | SyntaxKind::TerminalString
42408 | SyntaxKind::TerminalAs
42409 | SyntaxKind::TerminalConst
42410 | SyntaxKind::TerminalElse
42411 | SyntaxKind::TerminalEnum
42412 | SyntaxKind::TerminalExtern
42413 | SyntaxKind::TerminalFalse
42414 | SyntaxKind::TerminalFunction
42415 | SyntaxKind::TerminalIf
42416 | SyntaxKind::TerminalWhile
42417 | SyntaxKind::TerminalFor
42418 | SyntaxKind::TerminalLoop
42419 | SyntaxKind::TerminalImpl
42420 | SyntaxKind::TerminalImplicits
42421 | SyntaxKind::TerminalLet
42422 | SyntaxKind::TerminalMacro
42423 | SyntaxKind::TerminalMatch
42424 | SyntaxKind::TerminalModule
42425 | SyntaxKind::TerminalMut
42426 | SyntaxKind::TerminalNoPanic
42427 | SyntaxKind::TerminalOf
42428 | SyntaxKind::TerminalRef
42429 | SyntaxKind::TerminalContinue
42430 | SyntaxKind::TerminalReturn
42431 | SyntaxKind::TerminalBreak
42432 | SyntaxKind::TerminalStruct
42433 | SyntaxKind::TerminalTrait
42434 | SyntaxKind::TerminalTrue
42435 | SyntaxKind::TerminalType
42436 | SyntaxKind::TerminalUse
42437 | SyntaxKind::TerminalPub
42438 | SyntaxKind::TerminalAnd
42439 | SyntaxKind::TerminalAndAnd
42440 | SyntaxKind::TerminalArrow
42441 | SyntaxKind::TerminalAt
42442 | SyntaxKind::TerminalBadCharacters
42443 | SyntaxKind::TerminalColon
42444 | SyntaxKind::TerminalColonColon
42445 | SyntaxKind::TerminalComma
42446 | SyntaxKind::TerminalDiv
42447 | SyntaxKind::TerminalDivEq
42448 | SyntaxKind::TerminalDollar
42449 | SyntaxKind::TerminalDot
42450 | SyntaxKind::TerminalDotDot
42451 | SyntaxKind::TerminalDotDotEq
42452 | SyntaxKind::TerminalEndOfFile
42453 | SyntaxKind::TerminalEq
42454 | SyntaxKind::TerminalEqEq
42455 | SyntaxKind::TerminalGE
42456 | SyntaxKind::TerminalGT
42457 | SyntaxKind::TerminalHash
42458 | SyntaxKind::TerminalLBrace
42459 | SyntaxKind::TerminalLBrack
42460 | SyntaxKind::TerminalLE
42461 | SyntaxKind::TerminalLParen
42462 | SyntaxKind::TerminalLT
42463 | SyntaxKind::TerminalMatchArrow
42464 | SyntaxKind::TerminalMinus
42465 | SyntaxKind::TerminalMinusEq
42466 | SyntaxKind::TerminalMod
42467 | SyntaxKind::TerminalModEq
42468 | SyntaxKind::TerminalMul
42469 | SyntaxKind::TerminalMulEq
42470 | SyntaxKind::TerminalNeq
42471 | SyntaxKind::TerminalNot
42472 | SyntaxKind::TerminalBitNot
42473 | SyntaxKind::TerminalOr
42474 | SyntaxKind::TerminalOrOr
42475 | SyntaxKind::TerminalPlus
42476 | SyntaxKind::TerminalPlusEq
42477 | SyntaxKind::TerminalQuestionMark
42478 | SyntaxKind::TerminalRBrace
42479 | SyntaxKind::TerminalRBrack
42480 | SyntaxKind::TerminalRParen
42481 | SyntaxKind::TerminalSemicolon
42482 | SyntaxKind::TerminalUnderscore
42483 | SyntaxKind::TerminalXor
42484 | SyntaxKind::TerminalEmpty
42485 )
42486 }
42487}