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: Vec<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 { children: vec![], width: TextWidth::default() },
72 })
73 .intern(db),
74 )
75 }
76 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
77 Self(ElementList::new(node))
78 }
79 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
80 if node.kind(db) == SyntaxKind::Trivia { Some(Self(ElementList::new(node))) } else { None }
81 }
82 fn as_syntax_node(&self) -> SyntaxNode {
83 self.node.clone()
84 }
85 fn stable_ptr(&self) -> Self::StablePtr {
86 TriviaPtr(self.node.0.stable_ptr)
87 }
88}
89impl From<&Trivia> for SyntaxStablePtrId {
90 fn from(node: &Trivia) -> Self {
91 node.stable_ptr().untyped()
92 }
93}
94#[derive(Clone, Debug, Eq, Hash, PartialEq)]
95pub enum Trivium {
96 SingleLineComment(TokenSingleLineComment),
97 SingleLineDocComment(TokenSingleLineDocComment),
98 SingleLineInnerComment(TokenSingleLineInnerComment),
99 Whitespace(TokenWhitespace),
100 Newline(TokenNewline),
101 Skipped(TokenSkipped),
102 SkippedNode(TriviumSkippedNode),
103}
104#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
105pub struct TriviumPtr(pub SyntaxStablePtrId);
106impl TypedStablePtr for TriviumPtr {
107 type SyntaxNode = Trivium;
108 fn untyped(&self) -> SyntaxStablePtrId {
109 self.0
110 }
111 fn lookup(&self, db: &dyn SyntaxGroup) -> Trivium {
112 Trivium::from_syntax_node(db, self.0.lookup(db))
113 }
114}
115impl From<TriviumPtr> for SyntaxStablePtrId {
116 fn from(ptr: TriviumPtr) -> Self {
117 ptr.untyped()
118 }
119}
120impl From<TokenSingleLineCommentPtr> for TriviumPtr {
121 fn from(value: TokenSingleLineCommentPtr) -> Self {
122 Self(value.0)
123 }
124}
125impl From<TokenSingleLineDocCommentPtr> for TriviumPtr {
126 fn from(value: TokenSingleLineDocCommentPtr) -> Self {
127 Self(value.0)
128 }
129}
130impl From<TokenSingleLineInnerCommentPtr> for TriviumPtr {
131 fn from(value: TokenSingleLineInnerCommentPtr) -> Self {
132 Self(value.0)
133 }
134}
135impl From<TokenWhitespacePtr> for TriviumPtr {
136 fn from(value: TokenWhitespacePtr) -> Self {
137 Self(value.0)
138 }
139}
140impl From<TokenNewlinePtr> for TriviumPtr {
141 fn from(value: TokenNewlinePtr) -> Self {
142 Self(value.0)
143 }
144}
145impl From<TokenSkippedPtr> for TriviumPtr {
146 fn from(value: TokenSkippedPtr) -> Self {
147 Self(value.0)
148 }
149}
150impl From<TriviumSkippedNodePtr> for TriviumPtr {
151 fn from(value: TriviumSkippedNodePtr) -> Self {
152 Self(value.0)
153 }
154}
155impl From<TokenSingleLineCommentGreen> for TriviumGreen {
156 fn from(value: TokenSingleLineCommentGreen) -> Self {
157 Self(value.0)
158 }
159}
160impl From<TokenSingleLineDocCommentGreen> for TriviumGreen {
161 fn from(value: TokenSingleLineDocCommentGreen) -> Self {
162 Self(value.0)
163 }
164}
165impl From<TokenSingleLineInnerCommentGreen> for TriviumGreen {
166 fn from(value: TokenSingleLineInnerCommentGreen) -> Self {
167 Self(value.0)
168 }
169}
170impl From<TokenWhitespaceGreen> for TriviumGreen {
171 fn from(value: TokenWhitespaceGreen) -> Self {
172 Self(value.0)
173 }
174}
175impl From<TokenNewlineGreen> for TriviumGreen {
176 fn from(value: TokenNewlineGreen) -> Self {
177 Self(value.0)
178 }
179}
180impl From<TokenSkippedGreen> for TriviumGreen {
181 fn from(value: TokenSkippedGreen) -> Self {
182 Self(value.0)
183 }
184}
185impl From<TriviumSkippedNodeGreen> for TriviumGreen {
186 fn from(value: TriviumSkippedNodeGreen) -> Self {
187 Self(value.0)
188 }
189}
190#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
191pub struct TriviumGreen(pub GreenId);
192impl TypedSyntaxNode for Trivium {
193 const OPTIONAL_KIND: Option<SyntaxKind> = None;
194 type StablePtr = TriviumPtr;
195 type Green = TriviumGreen;
196 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
197 panic!("No missing variant.");
198 }
199 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
200 let kind = node.kind(db);
201 match kind {
202 SyntaxKind::TokenSingleLineComment => {
203 Trivium::SingleLineComment(TokenSingleLineComment::from_syntax_node(db, node))
204 }
205 SyntaxKind::TokenSingleLineDocComment => {
206 Trivium::SingleLineDocComment(TokenSingleLineDocComment::from_syntax_node(db, node))
207 }
208 SyntaxKind::TokenSingleLineInnerComment => Trivium::SingleLineInnerComment(
209 TokenSingleLineInnerComment::from_syntax_node(db, node),
210 ),
211 SyntaxKind::TokenWhitespace => {
212 Trivium::Whitespace(TokenWhitespace::from_syntax_node(db, node))
213 }
214 SyntaxKind::TokenNewline => Trivium::Newline(TokenNewline::from_syntax_node(db, node)),
215 SyntaxKind::TokenSkipped => Trivium::Skipped(TokenSkipped::from_syntax_node(db, node)),
216 SyntaxKind::TriviumSkippedNode => {
217 Trivium::SkippedNode(TriviumSkippedNode::from_syntax_node(db, node))
218 }
219 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Trivium"),
220 }
221 }
222 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
223 let kind = node.kind(db);
224 match kind {
225 SyntaxKind::TokenSingleLineComment => {
226 Some(Trivium::SingleLineComment(TokenSingleLineComment::from_syntax_node(db, node)))
227 }
228 SyntaxKind::TokenSingleLineDocComment => Some(Trivium::SingleLineDocComment(
229 TokenSingleLineDocComment::from_syntax_node(db, node),
230 )),
231 SyntaxKind::TokenSingleLineInnerComment => Some(Trivium::SingleLineInnerComment(
232 TokenSingleLineInnerComment::from_syntax_node(db, node),
233 )),
234 SyntaxKind::TokenWhitespace => {
235 Some(Trivium::Whitespace(TokenWhitespace::from_syntax_node(db, node)))
236 }
237 SyntaxKind::TokenNewline => {
238 Some(Trivium::Newline(TokenNewline::from_syntax_node(db, node)))
239 }
240 SyntaxKind::TokenSkipped => {
241 Some(Trivium::Skipped(TokenSkipped::from_syntax_node(db, node)))
242 }
243 SyntaxKind::TriviumSkippedNode => {
244 Some(Trivium::SkippedNode(TriviumSkippedNode::from_syntax_node(db, node)))
245 }
246 _ => None,
247 }
248 }
249 fn as_syntax_node(&self) -> SyntaxNode {
250 match self {
251 Trivium::SingleLineComment(x) => x.as_syntax_node(),
252 Trivium::SingleLineDocComment(x) => x.as_syntax_node(),
253 Trivium::SingleLineInnerComment(x) => x.as_syntax_node(),
254 Trivium::Whitespace(x) => x.as_syntax_node(),
255 Trivium::Newline(x) => x.as_syntax_node(),
256 Trivium::Skipped(x) => x.as_syntax_node(),
257 Trivium::SkippedNode(x) => x.as_syntax_node(),
258 }
259 }
260 fn stable_ptr(&self) -> Self::StablePtr {
261 TriviumPtr(self.as_syntax_node().0.stable_ptr)
262 }
263}
264impl From<&Trivium> for SyntaxStablePtrId {
265 fn from(node: &Trivium) -> Self {
266 node.stable_ptr().untyped()
267 }
268}
269impl Trivium {
270 pub fn is_variant(kind: SyntaxKind) -> bool {
272 matches!(
273 kind,
274 SyntaxKind::TokenSingleLineComment
275 | SyntaxKind::TokenSingleLineDocComment
276 | SyntaxKind::TokenSingleLineInnerComment
277 | SyntaxKind::TokenWhitespace
278 | SyntaxKind::TokenNewline
279 | SyntaxKind::TokenSkipped
280 | SyntaxKind::TriviumSkippedNode
281 )
282 }
283}
284#[derive(Clone, Debug, Eq, Hash, PartialEq)]
285pub enum Expr {
286 Path(ExprPath),
287 Literal(TerminalLiteralNumber),
288 ShortString(TerminalShortString),
289 String(TerminalString),
290 False(TerminalFalse),
291 True(TerminalTrue),
292 Parenthesized(ExprParenthesized),
293 Unary(ExprUnary),
294 Binary(ExprBinary),
295 Tuple(ExprListParenthesized),
296 FunctionCall(ExprFunctionCall),
297 StructCtorCall(ExprStructCtorCall),
298 Block(ExprBlock),
299 Match(ExprMatch),
300 If(ExprIf),
301 Loop(ExprLoop),
302 While(ExprWhile),
303 For(ExprFor),
304 Closure(ExprClosure),
305 ErrorPropagate(ExprErrorPropagate),
306 FieldInitShorthand(ExprFieldInitShorthand),
307 Indexed(ExprIndexed),
308 InlineMacro(ExprInlineMacro),
309 FixedSizeArray(ExprFixedSizeArray),
310 Missing(ExprMissing),
311}
312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
313pub struct ExprPtr(pub SyntaxStablePtrId);
314impl TypedStablePtr for ExprPtr {
315 type SyntaxNode = Expr;
316 fn untyped(&self) -> SyntaxStablePtrId {
317 self.0
318 }
319 fn lookup(&self, db: &dyn SyntaxGroup) -> Expr {
320 Expr::from_syntax_node(db, self.0.lookup(db))
321 }
322}
323impl From<ExprPtr> for SyntaxStablePtrId {
324 fn from(ptr: ExprPtr) -> Self {
325 ptr.untyped()
326 }
327}
328impl From<ExprPathPtr> for ExprPtr {
329 fn from(value: ExprPathPtr) -> Self {
330 Self(value.0)
331 }
332}
333impl From<TerminalLiteralNumberPtr> for ExprPtr {
334 fn from(value: TerminalLiteralNumberPtr) -> Self {
335 Self(value.0)
336 }
337}
338impl From<TerminalShortStringPtr> for ExprPtr {
339 fn from(value: TerminalShortStringPtr) -> Self {
340 Self(value.0)
341 }
342}
343impl From<TerminalStringPtr> for ExprPtr {
344 fn from(value: TerminalStringPtr) -> Self {
345 Self(value.0)
346 }
347}
348impl From<TerminalFalsePtr> for ExprPtr {
349 fn from(value: TerminalFalsePtr) -> Self {
350 Self(value.0)
351 }
352}
353impl From<TerminalTruePtr> for ExprPtr {
354 fn from(value: TerminalTruePtr) -> Self {
355 Self(value.0)
356 }
357}
358impl From<ExprParenthesizedPtr> for ExprPtr {
359 fn from(value: ExprParenthesizedPtr) -> Self {
360 Self(value.0)
361 }
362}
363impl From<ExprUnaryPtr> for ExprPtr {
364 fn from(value: ExprUnaryPtr) -> Self {
365 Self(value.0)
366 }
367}
368impl From<ExprBinaryPtr> for ExprPtr {
369 fn from(value: ExprBinaryPtr) -> Self {
370 Self(value.0)
371 }
372}
373impl From<ExprListParenthesizedPtr> for ExprPtr {
374 fn from(value: ExprListParenthesizedPtr) -> Self {
375 Self(value.0)
376 }
377}
378impl From<ExprFunctionCallPtr> for ExprPtr {
379 fn from(value: ExprFunctionCallPtr) -> Self {
380 Self(value.0)
381 }
382}
383impl From<ExprStructCtorCallPtr> for ExprPtr {
384 fn from(value: ExprStructCtorCallPtr) -> Self {
385 Self(value.0)
386 }
387}
388impl From<ExprBlockPtr> for ExprPtr {
389 fn from(value: ExprBlockPtr) -> Self {
390 Self(value.0)
391 }
392}
393impl From<ExprMatchPtr> for ExprPtr {
394 fn from(value: ExprMatchPtr) -> Self {
395 Self(value.0)
396 }
397}
398impl From<ExprIfPtr> for ExprPtr {
399 fn from(value: ExprIfPtr) -> Self {
400 Self(value.0)
401 }
402}
403impl From<ExprLoopPtr> for ExprPtr {
404 fn from(value: ExprLoopPtr) -> Self {
405 Self(value.0)
406 }
407}
408impl From<ExprWhilePtr> for ExprPtr {
409 fn from(value: ExprWhilePtr) -> Self {
410 Self(value.0)
411 }
412}
413impl From<ExprForPtr> for ExprPtr {
414 fn from(value: ExprForPtr) -> Self {
415 Self(value.0)
416 }
417}
418impl From<ExprClosurePtr> for ExprPtr {
419 fn from(value: ExprClosurePtr) -> Self {
420 Self(value.0)
421 }
422}
423impl From<ExprErrorPropagatePtr> for ExprPtr {
424 fn from(value: ExprErrorPropagatePtr) -> Self {
425 Self(value.0)
426 }
427}
428impl From<ExprFieldInitShorthandPtr> for ExprPtr {
429 fn from(value: ExprFieldInitShorthandPtr) -> Self {
430 Self(value.0)
431 }
432}
433impl From<ExprIndexedPtr> for ExprPtr {
434 fn from(value: ExprIndexedPtr) -> Self {
435 Self(value.0)
436 }
437}
438impl From<ExprInlineMacroPtr> for ExprPtr {
439 fn from(value: ExprInlineMacroPtr) -> Self {
440 Self(value.0)
441 }
442}
443impl From<ExprFixedSizeArrayPtr> for ExprPtr {
444 fn from(value: ExprFixedSizeArrayPtr) -> Self {
445 Self(value.0)
446 }
447}
448impl From<ExprMissingPtr> for ExprPtr {
449 fn from(value: ExprMissingPtr) -> Self {
450 Self(value.0)
451 }
452}
453impl From<ExprPathGreen> for ExprGreen {
454 fn from(value: ExprPathGreen) -> Self {
455 Self(value.0)
456 }
457}
458impl From<TerminalLiteralNumberGreen> for ExprGreen {
459 fn from(value: TerminalLiteralNumberGreen) -> Self {
460 Self(value.0)
461 }
462}
463impl From<TerminalShortStringGreen> for ExprGreen {
464 fn from(value: TerminalShortStringGreen) -> Self {
465 Self(value.0)
466 }
467}
468impl From<TerminalStringGreen> for ExprGreen {
469 fn from(value: TerminalStringGreen) -> Self {
470 Self(value.0)
471 }
472}
473impl From<TerminalFalseGreen> for ExprGreen {
474 fn from(value: TerminalFalseGreen) -> Self {
475 Self(value.0)
476 }
477}
478impl From<TerminalTrueGreen> for ExprGreen {
479 fn from(value: TerminalTrueGreen) -> Self {
480 Self(value.0)
481 }
482}
483impl From<ExprParenthesizedGreen> for ExprGreen {
484 fn from(value: ExprParenthesizedGreen) -> Self {
485 Self(value.0)
486 }
487}
488impl From<ExprUnaryGreen> for ExprGreen {
489 fn from(value: ExprUnaryGreen) -> Self {
490 Self(value.0)
491 }
492}
493impl From<ExprBinaryGreen> for ExprGreen {
494 fn from(value: ExprBinaryGreen) -> Self {
495 Self(value.0)
496 }
497}
498impl From<ExprListParenthesizedGreen> for ExprGreen {
499 fn from(value: ExprListParenthesizedGreen) -> Self {
500 Self(value.0)
501 }
502}
503impl From<ExprFunctionCallGreen> for ExprGreen {
504 fn from(value: ExprFunctionCallGreen) -> Self {
505 Self(value.0)
506 }
507}
508impl From<ExprStructCtorCallGreen> for ExprGreen {
509 fn from(value: ExprStructCtorCallGreen) -> Self {
510 Self(value.0)
511 }
512}
513impl From<ExprBlockGreen> for ExprGreen {
514 fn from(value: ExprBlockGreen) -> Self {
515 Self(value.0)
516 }
517}
518impl From<ExprMatchGreen> for ExprGreen {
519 fn from(value: ExprMatchGreen) -> Self {
520 Self(value.0)
521 }
522}
523impl From<ExprIfGreen> for ExprGreen {
524 fn from(value: ExprIfGreen) -> Self {
525 Self(value.0)
526 }
527}
528impl From<ExprLoopGreen> for ExprGreen {
529 fn from(value: ExprLoopGreen) -> Self {
530 Self(value.0)
531 }
532}
533impl From<ExprWhileGreen> for ExprGreen {
534 fn from(value: ExprWhileGreen) -> Self {
535 Self(value.0)
536 }
537}
538impl From<ExprForGreen> for ExprGreen {
539 fn from(value: ExprForGreen) -> Self {
540 Self(value.0)
541 }
542}
543impl From<ExprClosureGreen> for ExprGreen {
544 fn from(value: ExprClosureGreen) -> Self {
545 Self(value.0)
546 }
547}
548impl From<ExprErrorPropagateGreen> for ExprGreen {
549 fn from(value: ExprErrorPropagateGreen) -> Self {
550 Self(value.0)
551 }
552}
553impl From<ExprFieldInitShorthandGreen> for ExprGreen {
554 fn from(value: ExprFieldInitShorthandGreen) -> Self {
555 Self(value.0)
556 }
557}
558impl From<ExprIndexedGreen> for ExprGreen {
559 fn from(value: ExprIndexedGreen) -> Self {
560 Self(value.0)
561 }
562}
563impl From<ExprInlineMacroGreen> for ExprGreen {
564 fn from(value: ExprInlineMacroGreen) -> Self {
565 Self(value.0)
566 }
567}
568impl From<ExprFixedSizeArrayGreen> for ExprGreen {
569 fn from(value: ExprFixedSizeArrayGreen) -> Self {
570 Self(value.0)
571 }
572}
573impl From<ExprMissingGreen> for ExprGreen {
574 fn from(value: ExprMissingGreen) -> Self {
575 Self(value.0)
576 }
577}
578#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
579pub struct ExprGreen(pub GreenId);
580impl TypedSyntaxNode for Expr {
581 const OPTIONAL_KIND: Option<SyntaxKind> = None;
582 type StablePtr = ExprPtr;
583 type Green = ExprGreen;
584 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
585 ExprGreen(ExprMissing::missing(db).0)
586 }
587 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
588 let kind = node.kind(db);
589 match kind {
590 SyntaxKind::ExprPath => Expr::Path(ExprPath::from_syntax_node(db, node)),
591 SyntaxKind::TerminalLiteralNumber => {
592 Expr::Literal(TerminalLiteralNumber::from_syntax_node(db, node))
593 }
594 SyntaxKind::TerminalShortString => {
595 Expr::ShortString(TerminalShortString::from_syntax_node(db, node))
596 }
597 SyntaxKind::TerminalString => Expr::String(TerminalString::from_syntax_node(db, node)),
598 SyntaxKind::TerminalFalse => Expr::False(TerminalFalse::from_syntax_node(db, node)),
599 SyntaxKind::TerminalTrue => Expr::True(TerminalTrue::from_syntax_node(db, node)),
600 SyntaxKind::ExprParenthesized => {
601 Expr::Parenthesized(ExprParenthesized::from_syntax_node(db, node))
602 }
603 SyntaxKind::ExprUnary => Expr::Unary(ExprUnary::from_syntax_node(db, node)),
604 SyntaxKind::ExprBinary => Expr::Binary(ExprBinary::from_syntax_node(db, node)),
605 SyntaxKind::ExprListParenthesized => {
606 Expr::Tuple(ExprListParenthesized::from_syntax_node(db, node))
607 }
608 SyntaxKind::ExprFunctionCall => {
609 Expr::FunctionCall(ExprFunctionCall::from_syntax_node(db, node))
610 }
611 SyntaxKind::ExprStructCtorCall => {
612 Expr::StructCtorCall(ExprStructCtorCall::from_syntax_node(db, node))
613 }
614 SyntaxKind::ExprBlock => Expr::Block(ExprBlock::from_syntax_node(db, node)),
615 SyntaxKind::ExprMatch => Expr::Match(ExprMatch::from_syntax_node(db, node)),
616 SyntaxKind::ExprIf => Expr::If(ExprIf::from_syntax_node(db, node)),
617 SyntaxKind::ExprLoop => Expr::Loop(ExprLoop::from_syntax_node(db, node)),
618 SyntaxKind::ExprWhile => Expr::While(ExprWhile::from_syntax_node(db, node)),
619 SyntaxKind::ExprFor => Expr::For(ExprFor::from_syntax_node(db, node)),
620 SyntaxKind::ExprClosure => Expr::Closure(ExprClosure::from_syntax_node(db, node)),
621 SyntaxKind::ExprErrorPropagate => {
622 Expr::ErrorPropagate(ExprErrorPropagate::from_syntax_node(db, node))
623 }
624 SyntaxKind::ExprFieldInitShorthand => {
625 Expr::FieldInitShorthand(ExprFieldInitShorthand::from_syntax_node(db, node))
626 }
627 SyntaxKind::ExprIndexed => Expr::Indexed(ExprIndexed::from_syntax_node(db, node)),
628 SyntaxKind::ExprInlineMacro => {
629 Expr::InlineMacro(ExprInlineMacro::from_syntax_node(db, node))
630 }
631 SyntaxKind::ExprFixedSizeArray => {
632 Expr::FixedSizeArray(ExprFixedSizeArray::from_syntax_node(db, node))
633 }
634 SyntaxKind::ExprMissing => Expr::Missing(ExprMissing::from_syntax_node(db, node)),
635 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Expr"),
636 }
637 }
638 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
639 let kind = node.kind(db);
640 match kind {
641 SyntaxKind::ExprPath => Some(Expr::Path(ExprPath::from_syntax_node(db, node))),
642 SyntaxKind::TerminalLiteralNumber => {
643 Some(Expr::Literal(TerminalLiteralNumber::from_syntax_node(db, node)))
644 }
645 SyntaxKind::TerminalShortString => {
646 Some(Expr::ShortString(TerminalShortString::from_syntax_node(db, node)))
647 }
648 SyntaxKind::TerminalString => {
649 Some(Expr::String(TerminalString::from_syntax_node(db, node)))
650 }
651 SyntaxKind::TerminalFalse => {
652 Some(Expr::False(TerminalFalse::from_syntax_node(db, node)))
653 }
654 SyntaxKind::TerminalTrue => Some(Expr::True(TerminalTrue::from_syntax_node(db, node))),
655 SyntaxKind::ExprParenthesized => {
656 Some(Expr::Parenthesized(ExprParenthesized::from_syntax_node(db, node)))
657 }
658 SyntaxKind::ExprUnary => Some(Expr::Unary(ExprUnary::from_syntax_node(db, node))),
659 SyntaxKind::ExprBinary => Some(Expr::Binary(ExprBinary::from_syntax_node(db, node))),
660 SyntaxKind::ExprListParenthesized => {
661 Some(Expr::Tuple(ExprListParenthesized::from_syntax_node(db, node)))
662 }
663 SyntaxKind::ExprFunctionCall => {
664 Some(Expr::FunctionCall(ExprFunctionCall::from_syntax_node(db, node)))
665 }
666 SyntaxKind::ExprStructCtorCall => {
667 Some(Expr::StructCtorCall(ExprStructCtorCall::from_syntax_node(db, node)))
668 }
669 SyntaxKind::ExprBlock => Some(Expr::Block(ExprBlock::from_syntax_node(db, node))),
670 SyntaxKind::ExprMatch => Some(Expr::Match(ExprMatch::from_syntax_node(db, node))),
671 SyntaxKind::ExprIf => Some(Expr::If(ExprIf::from_syntax_node(db, node))),
672 SyntaxKind::ExprLoop => Some(Expr::Loop(ExprLoop::from_syntax_node(db, node))),
673 SyntaxKind::ExprWhile => Some(Expr::While(ExprWhile::from_syntax_node(db, node))),
674 SyntaxKind::ExprFor => Some(Expr::For(ExprFor::from_syntax_node(db, node))),
675 SyntaxKind::ExprClosure => Some(Expr::Closure(ExprClosure::from_syntax_node(db, node))),
676 SyntaxKind::ExprErrorPropagate => {
677 Some(Expr::ErrorPropagate(ExprErrorPropagate::from_syntax_node(db, node)))
678 }
679 SyntaxKind::ExprFieldInitShorthand => {
680 Some(Expr::FieldInitShorthand(ExprFieldInitShorthand::from_syntax_node(db, node)))
681 }
682 SyntaxKind::ExprIndexed => Some(Expr::Indexed(ExprIndexed::from_syntax_node(db, node))),
683 SyntaxKind::ExprInlineMacro => {
684 Some(Expr::InlineMacro(ExprInlineMacro::from_syntax_node(db, node)))
685 }
686 SyntaxKind::ExprFixedSizeArray => {
687 Some(Expr::FixedSizeArray(ExprFixedSizeArray::from_syntax_node(db, node)))
688 }
689 SyntaxKind::ExprMissing => Some(Expr::Missing(ExprMissing::from_syntax_node(db, node))),
690 _ => None,
691 }
692 }
693 fn as_syntax_node(&self) -> SyntaxNode {
694 match self {
695 Expr::Path(x) => x.as_syntax_node(),
696 Expr::Literal(x) => x.as_syntax_node(),
697 Expr::ShortString(x) => x.as_syntax_node(),
698 Expr::String(x) => x.as_syntax_node(),
699 Expr::False(x) => x.as_syntax_node(),
700 Expr::True(x) => x.as_syntax_node(),
701 Expr::Parenthesized(x) => x.as_syntax_node(),
702 Expr::Unary(x) => x.as_syntax_node(),
703 Expr::Binary(x) => x.as_syntax_node(),
704 Expr::Tuple(x) => x.as_syntax_node(),
705 Expr::FunctionCall(x) => x.as_syntax_node(),
706 Expr::StructCtorCall(x) => x.as_syntax_node(),
707 Expr::Block(x) => x.as_syntax_node(),
708 Expr::Match(x) => x.as_syntax_node(),
709 Expr::If(x) => x.as_syntax_node(),
710 Expr::Loop(x) => x.as_syntax_node(),
711 Expr::While(x) => x.as_syntax_node(),
712 Expr::For(x) => x.as_syntax_node(),
713 Expr::Closure(x) => x.as_syntax_node(),
714 Expr::ErrorPropagate(x) => x.as_syntax_node(),
715 Expr::FieldInitShorthand(x) => x.as_syntax_node(),
716 Expr::Indexed(x) => x.as_syntax_node(),
717 Expr::InlineMacro(x) => x.as_syntax_node(),
718 Expr::FixedSizeArray(x) => x.as_syntax_node(),
719 Expr::Missing(x) => x.as_syntax_node(),
720 }
721 }
722 fn stable_ptr(&self) -> Self::StablePtr {
723 ExprPtr(self.as_syntax_node().0.stable_ptr)
724 }
725}
726impl From<&Expr> for SyntaxStablePtrId {
727 fn from(node: &Expr) -> Self {
728 node.stable_ptr().untyped()
729 }
730}
731impl Expr {
732 pub fn is_variant(kind: SyntaxKind) -> bool {
734 matches!(
735 kind,
736 SyntaxKind::ExprPath
737 | SyntaxKind::TerminalLiteralNumber
738 | SyntaxKind::TerminalShortString
739 | SyntaxKind::TerminalString
740 | SyntaxKind::TerminalFalse
741 | SyntaxKind::TerminalTrue
742 | SyntaxKind::ExprParenthesized
743 | SyntaxKind::ExprUnary
744 | SyntaxKind::ExprBinary
745 | SyntaxKind::ExprListParenthesized
746 | SyntaxKind::ExprFunctionCall
747 | SyntaxKind::ExprStructCtorCall
748 | SyntaxKind::ExprBlock
749 | SyntaxKind::ExprMatch
750 | SyntaxKind::ExprIf
751 | SyntaxKind::ExprLoop
752 | SyntaxKind::ExprWhile
753 | SyntaxKind::ExprFor
754 | SyntaxKind::ExprClosure
755 | SyntaxKind::ExprErrorPropagate
756 | SyntaxKind::ExprFieldInitShorthand
757 | SyntaxKind::ExprIndexed
758 | SyntaxKind::ExprInlineMacro
759 | SyntaxKind::ExprFixedSizeArray
760 | SyntaxKind::ExprMissing
761 )
762 }
763}
764#[derive(Clone, Debug, Eq, Hash, PartialEq)]
765pub struct ExprList(ElementList<Expr, 2>);
766impl Deref for ExprList {
767 type Target = ElementList<Expr, 2>;
768 fn deref(&self) -> &Self::Target {
769 &self.0
770 }
771}
772impl ExprList {
773 pub fn new_green(
774 db: &dyn SyntaxGroup,
775 children: Vec<ExprListElementOrSeparatorGreen>,
776 ) -> ExprListGreen {
777 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
778 ExprListGreen(
779 Arc::new(GreenNode {
780 kind: SyntaxKind::ExprList,
781 details: GreenNodeDetails::Node {
782 children: children.iter().map(|x| x.id()).collect(),
783 width,
784 },
785 })
786 .intern(db),
787 )
788 }
789}
790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
791pub struct ExprListPtr(pub SyntaxStablePtrId);
792impl TypedStablePtr for ExprListPtr {
793 type SyntaxNode = ExprList;
794 fn untyped(&self) -> SyntaxStablePtrId {
795 self.0
796 }
797 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprList {
798 ExprList::from_syntax_node(db, self.0.lookup(db))
799 }
800}
801impl From<ExprListPtr> for SyntaxStablePtrId {
802 fn from(ptr: ExprListPtr) -> Self {
803 ptr.untyped()
804 }
805}
806#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
807pub enum ExprListElementOrSeparatorGreen {
808 Separator(TerminalCommaGreen),
809 Element(ExprGreen),
810}
811impl From<TerminalCommaGreen> for ExprListElementOrSeparatorGreen {
812 fn from(value: TerminalCommaGreen) -> Self {
813 ExprListElementOrSeparatorGreen::Separator(value)
814 }
815}
816impl From<ExprGreen> for ExprListElementOrSeparatorGreen {
817 fn from(value: ExprGreen) -> Self {
818 ExprListElementOrSeparatorGreen::Element(value)
819 }
820}
821impl ExprListElementOrSeparatorGreen {
822 fn id(&self) -> GreenId {
823 match self {
824 ExprListElementOrSeparatorGreen::Separator(green) => green.0,
825 ExprListElementOrSeparatorGreen::Element(green) => green.0,
826 }
827 }
828}
829#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
830pub struct ExprListGreen(pub GreenId);
831impl TypedSyntaxNode for ExprList {
832 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprList);
833 type StablePtr = ExprListPtr;
834 type Green = ExprListGreen;
835 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
836 ExprListGreen(
837 Arc::new(GreenNode {
838 kind: SyntaxKind::ExprList,
839 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
840 })
841 .intern(db),
842 )
843 }
844 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
845 Self(ElementList::new(node))
846 }
847 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
848 if node.kind(db) == SyntaxKind::ExprList {
849 Some(Self(ElementList::new(node)))
850 } else {
851 None
852 }
853 }
854 fn as_syntax_node(&self) -> SyntaxNode {
855 self.node.clone()
856 }
857 fn stable_ptr(&self) -> Self::StablePtr {
858 ExprListPtr(self.node.0.stable_ptr)
859 }
860}
861impl From<&ExprList> for SyntaxStablePtrId {
862 fn from(node: &ExprList) -> Self {
863 node.stable_ptr().untyped()
864 }
865}
866#[derive(Clone, Debug, Eq, Hash, PartialEq)]
867pub struct Arg {
868 node: SyntaxNode,
869 children: Arc<[SyntaxNode]>,
870}
871impl Arg {
872 pub const INDEX_MODIFIERS: usize = 0;
873 pub const INDEX_ARG_CLAUSE: usize = 1;
874 pub fn new_green(
875 db: &dyn SyntaxGroup,
876 modifiers: ModifierListGreen,
877 arg_clause: ArgClauseGreen,
878 ) -> ArgGreen {
879 let children: Vec<GreenId> = vec![modifiers.0, arg_clause.0];
880 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
881 ArgGreen(
882 Arc::new(GreenNode {
883 kind: SyntaxKind::Arg,
884 details: GreenNodeDetails::Node { children, width },
885 })
886 .intern(db),
887 )
888 }
889}
890impl Arg {
891 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
892 ModifierList::from_syntax_node(db, self.children[0].clone())
893 }
894 pub fn arg_clause(&self, db: &dyn SyntaxGroup) -> ArgClause {
895 ArgClause::from_syntax_node(db, self.children[1].clone())
896 }
897}
898#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
899pub struct ArgPtr(pub SyntaxStablePtrId);
900impl ArgPtr {}
901impl TypedStablePtr for ArgPtr {
902 type SyntaxNode = Arg;
903 fn untyped(&self) -> SyntaxStablePtrId {
904 self.0
905 }
906 fn lookup(&self, db: &dyn SyntaxGroup) -> Arg {
907 Arg::from_syntax_node(db, self.0.lookup(db))
908 }
909}
910impl From<ArgPtr> for SyntaxStablePtrId {
911 fn from(ptr: ArgPtr) -> Self {
912 ptr.untyped()
913 }
914}
915#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
916pub struct ArgGreen(pub GreenId);
917impl TypedSyntaxNode for Arg {
918 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Arg);
919 type StablePtr = ArgPtr;
920 type Green = ArgGreen;
921 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
922 ArgGreen(
923 Arc::new(GreenNode {
924 kind: SyntaxKind::Arg,
925 details: GreenNodeDetails::Node {
926 children: vec![ModifierList::missing(db).0, ArgClause::missing(db).0],
927 width: TextWidth::default(),
928 },
929 })
930 .intern(db),
931 )
932 }
933 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
934 let kind = node.kind(db);
935 assert_eq!(
936 kind,
937 SyntaxKind::Arg,
938 "Unexpected SyntaxKind {:?}. Expected {:?}.",
939 kind,
940 SyntaxKind::Arg
941 );
942 let children = db.get_children(node.clone());
943 Self { node, children }
944 }
945 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
946 let kind = node.kind(db);
947 if kind == SyntaxKind::Arg { Some(Self::from_syntax_node(db, node)) } else { None }
948 }
949 fn as_syntax_node(&self) -> SyntaxNode {
950 self.node.clone()
951 }
952 fn stable_ptr(&self) -> Self::StablePtr {
953 ArgPtr(self.node.0.stable_ptr)
954 }
955}
956impl From<&Arg> for SyntaxStablePtrId {
957 fn from(node: &Arg) -> Self {
958 node.stable_ptr().untyped()
959 }
960}
961#[derive(Clone, Debug, Eq, Hash, PartialEq)]
962pub enum ArgClause {
963 Unnamed(ArgClauseUnnamed),
964 Named(ArgClauseNamed),
965 FieldInitShorthand(ArgClauseFieldInitShorthand),
966}
967#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
968pub struct ArgClausePtr(pub SyntaxStablePtrId);
969impl TypedStablePtr for ArgClausePtr {
970 type SyntaxNode = ArgClause;
971 fn untyped(&self) -> SyntaxStablePtrId {
972 self.0
973 }
974 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClause {
975 ArgClause::from_syntax_node(db, self.0.lookup(db))
976 }
977}
978impl From<ArgClausePtr> for SyntaxStablePtrId {
979 fn from(ptr: ArgClausePtr) -> Self {
980 ptr.untyped()
981 }
982}
983impl From<ArgClauseUnnamedPtr> for ArgClausePtr {
984 fn from(value: ArgClauseUnnamedPtr) -> Self {
985 Self(value.0)
986 }
987}
988impl From<ArgClauseNamedPtr> for ArgClausePtr {
989 fn from(value: ArgClauseNamedPtr) -> Self {
990 Self(value.0)
991 }
992}
993impl From<ArgClauseFieldInitShorthandPtr> for ArgClausePtr {
994 fn from(value: ArgClauseFieldInitShorthandPtr) -> Self {
995 Self(value.0)
996 }
997}
998impl From<ArgClauseUnnamedGreen> for ArgClauseGreen {
999 fn from(value: ArgClauseUnnamedGreen) -> Self {
1000 Self(value.0)
1001 }
1002}
1003impl From<ArgClauseNamedGreen> for ArgClauseGreen {
1004 fn from(value: ArgClauseNamedGreen) -> Self {
1005 Self(value.0)
1006 }
1007}
1008impl From<ArgClauseFieldInitShorthandGreen> for ArgClauseGreen {
1009 fn from(value: ArgClauseFieldInitShorthandGreen) -> Self {
1010 Self(value.0)
1011 }
1012}
1013#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1014pub struct ArgClauseGreen(pub GreenId);
1015impl TypedSyntaxNode for ArgClause {
1016 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1017 type StablePtr = ArgClausePtr;
1018 type Green = ArgClauseGreen;
1019 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1020 panic!("No missing variant.");
1021 }
1022 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1023 let kind = node.kind(db);
1024 match kind {
1025 SyntaxKind::ArgClauseUnnamed => {
1026 ArgClause::Unnamed(ArgClauseUnnamed::from_syntax_node(db, node))
1027 }
1028 SyntaxKind::ArgClauseNamed => {
1029 ArgClause::Named(ArgClauseNamed::from_syntax_node(db, node))
1030 }
1031 SyntaxKind::ArgClauseFieldInitShorthand => ArgClause::FieldInitShorthand(
1032 ArgClauseFieldInitShorthand::from_syntax_node(db, node),
1033 ),
1034 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ArgClause"),
1035 }
1036 }
1037 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1038 let kind = node.kind(db);
1039 match kind {
1040 SyntaxKind::ArgClauseUnnamed => {
1041 Some(ArgClause::Unnamed(ArgClauseUnnamed::from_syntax_node(db, node)))
1042 }
1043 SyntaxKind::ArgClauseNamed => {
1044 Some(ArgClause::Named(ArgClauseNamed::from_syntax_node(db, node)))
1045 }
1046 SyntaxKind::ArgClauseFieldInitShorthand => Some(ArgClause::FieldInitShorthand(
1047 ArgClauseFieldInitShorthand::from_syntax_node(db, node),
1048 )),
1049 _ => None,
1050 }
1051 }
1052 fn as_syntax_node(&self) -> SyntaxNode {
1053 match self {
1054 ArgClause::Unnamed(x) => x.as_syntax_node(),
1055 ArgClause::Named(x) => x.as_syntax_node(),
1056 ArgClause::FieldInitShorthand(x) => x.as_syntax_node(),
1057 }
1058 }
1059 fn stable_ptr(&self) -> Self::StablePtr {
1060 ArgClausePtr(self.as_syntax_node().0.stable_ptr)
1061 }
1062}
1063impl From<&ArgClause> for SyntaxStablePtrId {
1064 fn from(node: &ArgClause) -> Self {
1065 node.stable_ptr().untyped()
1066 }
1067}
1068impl ArgClause {
1069 pub fn is_variant(kind: SyntaxKind) -> bool {
1071 matches!(
1072 kind,
1073 SyntaxKind::ArgClauseUnnamed
1074 | SyntaxKind::ArgClauseNamed
1075 | SyntaxKind::ArgClauseFieldInitShorthand
1076 )
1077 }
1078}
1079#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1080pub struct ArgClauseNamed {
1081 node: SyntaxNode,
1082 children: Arc<[SyntaxNode]>,
1083}
1084impl ArgClauseNamed {
1085 pub const INDEX_NAME: usize = 0;
1086 pub const INDEX_COLON: usize = 1;
1087 pub const INDEX_VALUE: usize = 2;
1088 pub fn new_green(
1089 db: &dyn SyntaxGroup,
1090 name: TerminalIdentifierGreen,
1091 colon: TerminalColonGreen,
1092 value: ExprGreen,
1093 ) -> ArgClauseNamedGreen {
1094 let children: Vec<GreenId> = vec![name.0, colon.0, value.0];
1095 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1096 ArgClauseNamedGreen(
1097 Arc::new(GreenNode {
1098 kind: SyntaxKind::ArgClauseNamed,
1099 details: GreenNodeDetails::Node { children, width },
1100 })
1101 .intern(db),
1102 )
1103 }
1104}
1105impl ArgClauseNamed {
1106 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1107 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
1108 }
1109 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
1110 TerminalColon::from_syntax_node(db, self.children[1].clone())
1111 }
1112 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
1113 Expr::from_syntax_node(db, self.children[2].clone())
1114 }
1115}
1116#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1117pub struct ArgClauseNamedPtr(pub SyntaxStablePtrId);
1118impl ArgClauseNamedPtr {}
1119impl TypedStablePtr for ArgClauseNamedPtr {
1120 type SyntaxNode = ArgClauseNamed;
1121 fn untyped(&self) -> SyntaxStablePtrId {
1122 self.0
1123 }
1124 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseNamed {
1125 ArgClauseNamed::from_syntax_node(db, self.0.lookup(db))
1126 }
1127}
1128impl From<ArgClauseNamedPtr> for SyntaxStablePtrId {
1129 fn from(ptr: ArgClauseNamedPtr) -> Self {
1130 ptr.untyped()
1131 }
1132}
1133#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1134pub struct ArgClauseNamedGreen(pub GreenId);
1135impl TypedSyntaxNode for ArgClauseNamed {
1136 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseNamed);
1137 type StablePtr = ArgClauseNamedPtr;
1138 type Green = ArgClauseNamedGreen;
1139 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1140 ArgClauseNamedGreen(
1141 Arc::new(GreenNode {
1142 kind: SyntaxKind::ArgClauseNamed,
1143 details: GreenNodeDetails::Node {
1144 children: vec![
1145 TerminalIdentifier::missing(db).0,
1146 TerminalColon::missing(db).0,
1147 Expr::missing(db).0,
1148 ],
1149 width: TextWidth::default(),
1150 },
1151 })
1152 .intern(db),
1153 )
1154 }
1155 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1156 let kind = node.kind(db);
1157 assert_eq!(
1158 kind,
1159 SyntaxKind::ArgClauseNamed,
1160 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1161 kind,
1162 SyntaxKind::ArgClauseNamed
1163 );
1164 let children = db.get_children(node.clone());
1165 Self { node, children }
1166 }
1167 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1168 let kind = node.kind(db);
1169 if kind == SyntaxKind::ArgClauseNamed {
1170 Some(Self::from_syntax_node(db, node))
1171 } else {
1172 None
1173 }
1174 }
1175 fn as_syntax_node(&self) -> SyntaxNode {
1176 self.node.clone()
1177 }
1178 fn stable_ptr(&self) -> Self::StablePtr {
1179 ArgClauseNamedPtr(self.node.0.stable_ptr)
1180 }
1181}
1182impl From<&ArgClauseNamed> for SyntaxStablePtrId {
1183 fn from(node: &ArgClauseNamed) -> Self {
1184 node.stable_ptr().untyped()
1185 }
1186}
1187#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1188pub struct ArgClauseUnnamed {
1189 node: SyntaxNode,
1190 children: Arc<[SyntaxNode]>,
1191}
1192impl ArgClauseUnnamed {
1193 pub const INDEX_VALUE: usize = 0;
1194 pub fn new_green(db: &dyn SyntaxGroup, value: ExprGreen) -> ArgClauseUnnamedGreen {
1195 let children: Vec<GreenId> = vec![value.0];
1196 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1197 ArgClauseUnnamedGreen(
1198 Arc::new(GreenNode {
1199 kind: SyntaxKind::ArgClauseUnnamed,
1200 details: GreenNodeDetails::Node { children, width },
1201 })
1202 .intern(db),
1203 )
1204 }
1205}
1206impl ArgClauseUnnamed {
1207 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
1208 Expr::from_syntax_node(db, self.children[0].clone())
1209 }
1210}
1211#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1212pub struct ArgClauseUnnamedPtr(pub SyntaxStablePtrId);
1213impl ArgClauseUnnamedPtr {}
1214impl TypedStablePtr for ArgClauseUnnamedPtr {
1215 type SyntaxNode = ArgClauseUnnamed;
1216 fn untyped(&self) -> SyntaxStablePtrId {
1217 self.0
1218 }
1219 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseUnnamed {
1220 ArgClauseUnnamed::from_syntax_node(db, self.0.lookup(db))
1221 }
1222}
1223impl From<ArgClauseUnnamedPtr> for SyntaxStablePtrId {
1224 fn from(ptr: ArgClauseUnnamedPtr) -> Self {
1225 ptr.untyped()
1226 }
1227}
1228#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1229pub struct ArgClauseUnnamedGreen(pub GreenId);
1230impl TypedSyntaxNode for ArgClauseUnnamed {
1231 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseUnnamed);
1232 type StablePtr = ArgClauseUnnamedPtr;
1233 type Green = ArgClauseUnnamedGreen;
1234 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1235 ArgClauseUnnamedGreen(
1236 Arc::new(GreenNode {
1237 kind: SyntaxKind::ArgClauseUnnamed,
1238 details: GreenNodeDetails::Node {
1239 children: vec![Expr::missing(db).0],
1240 width: TextWidth::default(),
1241 },
1242 })
1243 .intern(db),
1244 )
1245 }
1246 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1247 let kind = node.kind(db);
1248 assert_eq!(
1249 kind,
1250 SyntaxKind::ArgClauseUnnamed,
1251 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1252 kind,
1253 SyntaxKind::ArgClauseUnnamed
1254 );
1255 let children = db.get_children(node.clone());
1256 Self { node, children }
1257 }
1258 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1259 let kind = node.kind(db);
1260 if kind == SyntaxKind::ArgClauseUnnamed {
1261 Some(Self::from_syntax_node(db, node))
1262 } else {
1263 None
1264 }
1265 }
1266 fn as_syntax_node(&self) -> SyntaxNode {
1267 self.node.clone()
1268 }
1269 fn stable_ptr(&self) -> Self::StablePtr {
1270 ArgClauseUnnamedPtr(self.node.0.stable_ptr)
1271 }
1272}
1273impl From<&ArgClauseUnnamed> for SyntaxStablePtrId {
1274 fn from(node: &ArgClauseUnnamed) -> Self {
1275 node.stable_ptr().untyped()
1276 }
1277}
1278#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1279pub struct ArgClauseFieldInitShorthand {
1280 node: SyntaxNode,
1281 children: Arc<[SyntaxNode]>,
1282}
1283impl ArgClauseFieldInitShorthand {
1284 pub const INDEX_COLON: usize = 0;
1285 pub const INDEX_NAME: usize = 1;
1286 pub fn new_green(
1287 db: &dyn SyntaxGroup,
1288 colon: TerminalColonGreen,
1289 name: ExprFieldInitShorthandGreen,
1290 ) -> ArgClauseFieldInitShorthandGreen {
1291 let children: Vec<GreenId> = vec![colon.0, name.0];
1292 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1293 ArgClauseFieldInitShorthandGreen(
1294 Arc::new(GreenNode {
1295 kind: SyntaxKind::ArgClauseFieldInitShorthand,
1296 details: GreenNodeDetails::Node { children, width },
1297 })
1298 .intern(db),
1299 )
1300 }
1301}
1302impl ArgClauseFieldInitShorthand {
1303 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
1304 TerminalColon::from_syntax_node(db, self.children[0].clone())
1305 }
1306 pub fn name(&self, db: &dyn SyntaxGroup) -> ExprFieldInitShorthand {
1307 ExprFieldInitShorthand::from_syntax_node(db, self.children[1].clone())
1308 }
1309}
1310#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1311pub struct ArgClauseFieldInitShorthandPtr(pub SyntaxStablePtrId);
1312impl ArgClauseFieldInitShorthandPtr {}
1313impl TypedStablePtr for ArgClauseFieldInitShorthandPtr {
1314 type SyntaxNode = ArgClauseFieldInitShorthand;
1315 fn untyped(&self) -> SyntaxStablePtrId {
1316 self.0
1317 }
1318 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgClauseFieldInitShorthand {
1319 ArgClauseFieldInitShorthand::from_syntax_node(db, self.0.lookup(db))
1320 }
1321}
1322impl From<ArgClauseFieldInitShorthandPtr> for SyntaxStablePtrId {
1323 fn from(ptr: ArgClauseFieldInitShorthandPtr) -> Self {
1324 ptr.untyped()
1325 }
1326}
1327#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1328pub struct ArgClauseFieldInitShorthandGreen(pub GreenId);
1329impl TypedSyntaxNode for ArgClauseFieldInitShorthand {
1330 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgClauseFieldInitShorthand);
1331 type StablePtr = ArgClauseFieldInitShorthandPtr;
1332 type Green = ArgClauseFieldInitShorthandGreen;
1333 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1334 ArgClauseFieldInitShorthandGreen(
1335 Arc::new(GreenNode {
1336 kind: SyntaxKind::ArgClauseFieldInitShorthand,
1337 details: GreenNodeDetails::Node {
1338 children: vec![
1339 TerminalColon::missing(db).0,
1340 ExprFieldInitShorthand::missing(db).0,
1341 ],
1342 width: TextWidth::default(),
1343 },
1344 })
1345 .intern(db),
1346 )
1347 }
1348 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1349 let kind = node.kind(db);
1350 assert_eq!(
1351 kind,
1352 SyntaxKind::ArgClauseFieldInitShorthand,
1353 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1354 kind,
1355 SyntaxKind::ArgClauseFieldInitShorthand
1356 );
1357 let children = db.get_children(node.clone());
1358 Self { node, children }
1359 }
1360 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1361 let kind = node.kind(db);
1362 if kind == SyntaxKind::ArgClauseFieldInitShorthand {
1363 Some(Self::from_syntax_node(db, node))
1364 } else {
1365 None
1366 }
1367 }
1368 fn as_syntax_node(&self) -> SyntaxNode {
1369 self.node.clone()
1370 }
1371 fn stable_ptr(&self) -> Self::StablePtr {
1372 ArgClauseFieldInitShorthandPtr(self.node.0.stable_ptr)
1373 }
1374}
1375impl From<&ArgClauseFieldInitShorthand> for SyntaxStablePtrId {
1376 fn from(node: &ArgClauseFieldInitShorthand) -> Self {
1377 node.stable_ptr().untyped()
1378 }
1379}
1380#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1381pub struct ExprFieldInitShorthand {
1382 node: SyntaxNode,
1383 children: Arc<[SyntaxNode]>,
1384}
1385impl ExprFieldInitShorthand {
1386 pub const INDEX_NAME: usize = 0;
1387 pub fn new_green(
1388 db: &dyn SyntaxGroup,
1389 name: TerminalIdentifierGreen,
1390 ) -> ExprFieldInitShorthandGreen {
1391 let children: Vec<GreenId> = vec![name.0];
1392 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1393 ExprFieldInitShorthandGreen(
1394 Arc::new(GreenNode {
1395 kind: SyntaxKind::ExprFieldInitShorthand,
1396 details: GreenNodeDetails::Node { children, width },
1397 })
1398 .intern(db),
1399 )
1400 }
1401}
1402impl ExprFieldInitShorthand {
1403 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1404 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
1405 }
1406}
1407#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1408pub struct ExprFieldInitShorthandPtr(pub SyntaxStablePtrId);
1409impl ExprFieldInitShorthandPtr {}
1410impl TypedStablePtr for ExprFieldInitShorthandPtr {
1411 type SyntaxNode = ExprFieldInitShorthand;
1412 fn untyped(&self) -> SyntaxStablePtrId {
1413 self.0
1414 }
1415 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFieldInitShorthand {
1416 ExprFieldInitShorthand::from_syntax_node(db, self.0.lookup(db))
1417 }
1418}
1419impl From<ExprFieldInitShorthandPtr> for SyntaxStablePtrId {
1420 fn from(ptr: ExprFieldInitShorthandPtr) -> Self {
1421 ptr.untyped()
1422 }
1423}
1424#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1425pub struct ExprFieldInitShorthandGreen(pub GreenId);
1426impl TypedSyntaxNode for ExprFieldInitShorthand {
1427 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFieldInitShorthand);
1428 type StablePtr = ExprFieldInitShorthandPtr;
1429 type Green = ExprFieldInitShorthandGreen;
1430 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1431 ExprFieldInitShorthandGreen(
1432 Arc::new(GreenNode {
1433 kind: SyntaxKind::ExprFieldInitShorthand,
1434 details: GreenNodeDetails::Node {
1435 children: vec![TerminalIdentifier::missing(db).0],
1436 width: TextWidth::default(),
1437 },
1438 })
1439 .intern(db),
1440 )
1441 }
1442 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1443 let kind = node.kind(db);
1444 assert_eq!(
1445 kind,
1446 SyntaxKind::ExprFieldInitShorthand,
1447 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1448 kind,
1449 SyntaxKind::ExprFieldInitShorthand
1450 );
1451 let children = db.get_children(node.clone());
1452 Self { node, children }
1453 }
1454 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1455 let kind = node.kind(db);
1456 if kind == SyntaxKind::ExprFieldInitShorthand {
1457 Some(Self::from_syntax_node(db, node))
1458 } else {
1459 None
1460 }
1461 }
1462 fn as_syntax_node(&self) -> SyntaxNode {
1463 self.node.clone()
1464 }
1465 fn stable_ptr(&self) -> Self::StablePtr {
1466 ExprFieldInitShorthandPtr(self.node.0.stable_ptr)
1467 }
1468}
1469impl From<&ExprFieldInitShorthand> for SyntaxStablePtrId {
1470 fn from(node: &ExprFieldInitShorthand) -> Self {
1471 node.stable_ptr().untyped()
1472 }
1473}
1474#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1475pub struct ArgList(ElementList<Arg, 2>);
1476impl Deref for ArgList {
1477 type Target = ElementList<Arg, 2>;
1478 fn deref(&self) -> &Self::Target {
1479 &self.0
1480 }
1481}
1482impl ArgList {
1483 pub fn new_green(
1484 db: &dyn SyntaxGroup,
1485 children: Vec<ArgListElementOrSeparatorGreen>,
1486 ) -> ArgListGreen {
1487 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
1488 ArgListGreen(
1489 Arc::new(GreenNode {
1490 kind: SyntaxKind::ArgList,
1491 details: GreenNodeDetails::Node {
1492 children: children.iter().map(|x| x.id()).collect(),
1493 width,
1494 },
1495 })
1496 .intern(db),
1497 )
1498 }
1499}
1500#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1501pub struct ArgListPtr(pub SyntaxStablePtrId);
1502impl TypedStablePtr for ArgListPtr {
1503 type SyntaxNode = ArgList;
1504 fn untyped(&self) -> SyntaxStablePtrId {
1505 self.0
1506 }
1507 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgList {
1508 ArgList::from_syntax_node(db, self.0.lookup(db))
1509 }
1510}
1511impl From<ArgListPtr> for SyntaxStablePtrId {
1512 fn from(ptr: ArgListPtr) -> Self {
1513 ptr.untyped()
1514 }
1515}
1516#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1517pub enum ArgListElementOrSeparatorGreen {
1518 Separator(TerminalCommaGreen),
1519 Element(ArgGreen),
1520}
1521impl From<TerminalCommaGreen> for ArgListElementOrSeparatorGreen {
1522 fn from(value: TerminalCommaGreen) -> Self {
1523 ArgListElementOrSeparatorGreen::Separator(value)
1524 }
1525}
1526impl From<ArgGreen> for ArgListElementOrSeparatorGreen {
1527 fn from(value: ArgGreen) -> Self {
1528 ArgListElementOrSeparatorGreen::Element(value)
1529 }
1530}
1531impl ArgListElementOrSeparatorGreen {
1532 fn id(&self) -> GreenId {
1533 match self {
1534 ArgListElementOrSeparatorGreen::Separator(green) => green.0,
1535 ArgListElementOrSeparatorGreen::Element(green) => green.0,
1536 }
1537 }
1538}
1539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1540pub struct ArgListGreen(pub GreenId);
1541impl TypedSyntaxNode for ArgList {
1542 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgList);
1543 type StablePtr = ArgListPtr;
1544 type Green = ArgListGreen;
1545 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1546 ArgListGreen(
1547 Arc::new(GreenNode {
1548 kind: SyntaxKind::ArgList,
1549 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
1550 })
1551 .intern(db),
1552 )
1553 }
1554 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1555 Self(ElementList::new(node))
1556 }
1557 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1558 if node.kind(db) == SyntaxKind::ArgList { Some(Self(ElementList::new(node))) } else { None }
1559 }
1560 fn as_syntax_node(&self) -> SyntaxNode {
1561 self.node.clone()
1562 }
1563 fn stable_ptr(&self) -> Self::StablePtr {
1564 ArgListPtr(self.node.0.stable_ptr)
1565 }
1566}
1567impl From<&ArgList> for SyntaxStablePtrId {
1568 fn from(node: &ArgList) -> Self {
1569 node.stable_ptr().untyped()
1570 }
1571}
1572#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1573pub struct ExprMissing {
1574 node: SyntaxNode,
1575 children: Arc<[SyntaxNode]>,
1576}
1577impl ExprMissing {
1578 pub fn new_green(db: &dyn SyntaxGroup) -> ExprMissingGreen {
1579 let children: Vec<GreenId> = vec![];
1580 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1581 ExprMissingGreen(
1582 Arc::new(GreenNode {
1583 kind: SyntaxKind::ExprMissing,
1584 details: GreenNodeDetails::Node { children, width },
1585 })
1586 .intern(db),
1587 )
1588 }
1589}
1590impl ExprMissing {}
1591#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1592pub struct ExprMissingPtr(pub SyntaxStablePtrId);
1593impl ExprMissingPtr {}
1594impl TypedStablePtr for ExprMissingPtr {
1595 type SyntaxNode = ExprMissing;
1596 fn untyped(&self) -> SyntaxStablePtrId {
1597 self.0
1598 }
1599 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprMissing {
1600 ExprMissing::from_syntax_node(db, self.0.lookup(db))
1601 }
1602}
1603impl From<ExprMissingPtr> for SyntaxStablePtrId {
1604 fn from(ptr: ExprMissingPtr) -> Self {
1605 ptr.untyped()
1606 }
1607}
1608#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1609pub struct ExprMissingGreen(pub GreenId);
1610impl TypedSyntaxNode for ExprMissing {
1611 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprMissing);
1612 type StablePtr = ExprMissingPtr;
1613 type Green = ExprMissingGreen;
1614 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1615 ExprMissingGreen(
1616 Arc::new(GreenNode {
1617 kind: SyntaxKind::ExprMissing,
1618 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
1619 })
1620 .intern(db),
1621 )
1622 }
1623 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1624 let kind = node.kind(db);
1625 assert_eq!(
1626 kind,
1627 SyntaxKind::ExprMissing,
1628 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1629 kind,
1630 SyntaxKind::ExprMissing
1631 );
1632 let children = db.get_children(node.clone());
1633 Self { node, children }
1634 }
1635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1636 let kind = node.kind(db);
1637 if kind == SyntaxKind::ExprMissing { Some(Self::from_syntax_node(db, node)) } else { None }
1638 }
1639 fn as_syntax_node(&self) -> SyntaxNode {
1640 self.node.clone()
1641 }
1642 fn stable_ptr(&self) -> Self::StablePtr {
1643 ExprMissingPtr(self.node.0.stable_ptr)
1644 }
1645}
1646impl From<&ExprMissing> for SyntaxStablePtrId {
1647 fn from(node: &ExprMissing) -> Self {
1648 node.stable_ptr().untyped()
1649 }
1650}
1651#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1652pub enum PathSegment {
1653 WithGenericArgs(PathSegmentWithGenericArgs),
1654 Simple(PathSegmentSimple),
1655}
1656#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1657pub struct PathSegmentPtr(pub SyntaxStablePtrId);
1658impl TypedStablePtr for PathSegmentPtr {
1659 type SyntaxNode = PathSegment;
1660 fn untyped(&self) -> SyntaxStablePtrId {
1661 self.0
1662 }
1663 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegment {
1664 PathSegment::from_syntax_node(db, self.0.lookup(db))
1665 }
1666}
1667impl From<PathSegmentPtr> for SyntaxStablePtrId {
1668 fn from(ptr: PathSegmentPtr) -> Self {
1669 ptr.untyped()
1670 }
1671}
1672impl From<PathSegmentWithGenericArgsPtr> for PathSegmentPtr {
1673 fn from(value: PathSegmentWithGenericArgsPtr) -> Self {
1674 Self(value.0)
1675 }
1676}
1677impl From<PathSegmentSimplePtr> for PathSegmentPtr {
1678 fn from(value: PathSegmentSimplePtr) -> Self {
1679 Self(value.0)
1680 }
1681}
1682impl From<PathSegmentWithGenericArgsGreen> for PathSegmentGreen {
1683 fn from(value: PathSegmentWithGenericArgsGreen) -> Self {
1684 Self(value.0)
1685 }
1686}
1687impl From<PathSegmentSimpleGreen> for PathSegmentGreen {
1688 fn from(value: PathSegmentSimpleGreen) -> Self {
1689 Self(value.0)
1690 }
1691}
1692#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1693pub struct PathSegmentGreen(pub GreenId);
1694impl TypedSyntaxNode for PathSegment {
1695 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1696 type StablePtr = PathSegmentPtr;
1697 type Green = PathSegmentGreen;
1698 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1699 PathSegmentGreen(PathSegmentSimple::missing(db).0)
1700 }
1701 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1702 let kind = node.kind(db);
1703 match kind {
1704 SyntaxKind::PathSegmentWithGenericArgs => {
1705 PathSegment::WithGenericArgs(PathSegmentWithGenericArgs::from_syntax_node(db, node))
1706 }
1707 SyntaxKind::PathSegmentSimple => {
1708 PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node))
1709 }
1710 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "PathSegment"),
1711 }
1712 }
1713 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1714 let kind = node.kind(db);
1715 match kind {
1716 SyntaxKind::PathSegmentWithGenericArgs => Some(PathSegment::WithGenericArgs(
1717 PathSegmentWithGenericArgs::from_syntax_node(db, node),
1718 )),
1719 SyntaxKind::PathSegmentSimple => {
1720 Some(PathSegment::Simple(PathSegmentSimple::from_syntax_node(db, node)))
1721 }
1722 _ => None,
1723 }
1724 }
1725 fn as_syntax_node(&self) -> SyntaxNode {
1726 match self {
1727 PathSegment::WithGenericArgs(x) => x.as_syntax_node(),
1728 PathSegment::Simple(x) => x.as_syntax_node(),
1729 }
1730 }
1731 fn stable_ptr(&self) -> Self::StablePtr {
1732 PathSegmentPtr(self.as_syntax_node().0.stable_ptr)
1733 }
1734}
1735impl From<&PathSegment> for SyntaxStablePtrId {
1736 fn from(node: &PathSegment) -> Self {
1737 node.stable_ptr().untyped()
1738 }
1739}
1740impl PathSegment {
1741 pub fn is_variant(kind: SyntaxKind) -> bool {
1743 matches!(kind, SyntaxKind::PathSegmentWithGenericArgs | SyntaxKind::PathSegmentSimple)
1744 }
1745}
1746#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1747pub struct PathSegmentSimple {
1748 node: SyntaxNode,
1749 children: Arc<[SyntaxNode]>,
1750}
1751impl PathSegmentSimple {
1752 pub const INDEX_IDENT: usize = 0;
1753 pub fn new_green(
1754 db: &dyn SyntaxGroup,
1755 ident: TerminalIdentifierGreen,
1756 ) -> PathSegmentSimpleGreen {
1757 let children: Vec<GreenId> = vec![ident.0];
1758 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1759 PathSegmentSimpleGreen(
1760 Arc::new(GreenNode {
1761 kind: SyntaxKind::PathSegmentSimple,
1762 details: GreenNodeDetails::Node { children, width },
1763 })
1764 .intern(db),
1765 )
1766 }
1767}
1768impl PathSegmentSimple {
1769 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
1770 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
1771 }
1772}
1773#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1774pub struct PathSegmentSimplePtr(pub SyntaxStablePtrId);
1775impl PathSegmentSimplePtr {}
1776impl TypedStablePtr for PathSegmentSimplePtr {
1777 type SyntaxNode = PathSegmentSimple;
1778 fn untyped(&self) -> SyntaxStablePtrId {
1779 self.0
1780 }
1781 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentSimple {
1782 PathSegmentSimple::from_syntax_node(db, self.0.lookup(db))
1783 }
1784}
1785impl From<PathSegmentSimplePtr> for SyntaxStablePtrId {
1786 fn from(ptr: PathSegmentSimplePtr) -> Self {
1787 ptr.untyped()
1788 }
1789}
1790#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1791pub struct PathSegmentSimpleGreen(pub GreenId);
1792impl TypedSyntaxNode for PathSegmentSimple {
1793 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentSimple);
1794 type StablePtr = PathSegmentSimplePtr;
1795 type Green = PathSegmentSimpleGreen;
1796 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1797 PathSegmentSimpleGreen(
1798 Arc::new(GreenNode {
1799 kind: SyntaxKind::PathSegmentSimple,
1800 details: GreenNodeDetails::Node {
1801 children: vec![TerminalIdentifier::missing(db).0],
1802 width: TextWidth::default(),
1803 },
1804 })
1805 .intern(db),
1806 )
1807 }
1808 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1809 let kind = node.kind(db);
1810 assert_eq!(
1811 kind,
1812 SyntaxKind::PathSegmentSimple,
1813 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1814 kind,
1815 SyntaxKind::PathSegmentSimple
1816 );
1817 let children = db.get_children(node.clone());
1818 Self { node, children }
1819 }
1820 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1821 let kind = node.kind(db);
1822 if kind == SyntaxKind::PathSegmentSimple {
1823 Some(Self::from_syntax_node(db, node))
1824 } else {
1825 None
1826 }
1827 }
1828 fn as_syntax_node(&self) -> SyntaxNode {
1829 self.node.clone()
1830 }
1831 fn stable_ptr(&self) -> Self::StablePtr {
1832 PathSegmentSimplePtr(self.node.0.stable_ptr)
1833 }
1834}
1835impl From<&PathSegmentSimple> for SyntaxStablePtrId {
1836 fn from(node: &PathSegmentSimple) -> Self {
1837 node.stable_ptr().untyped()
1838 }
1839}
1840#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1841pub enum OptionTerminalColonColon {
1842 Empty(OptionTerminalColonColonEmpty),
1843 TerminalColonColon(TerminalColonColon),
1844}
1845#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1846pub struct OptionTerminalColonColonPtr(pub SyntaxStablePtrId);
1847impl TypedStablePtr for OptionTerminalColonColonPtr {
1848 type SyntaxNode = OptionTerminalColonColon;
1849 fn untyped(&self) -> SyntaxStablePtrId {
1850 self.0
1851 }
1852 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
1853 OptionTerminalColonColon::from_syntax_node(db, self.0.lookup(db))
1854 }
1855}
1856impl From<OptionTerminalColonColonPtr> for SyntaxStablePtrId {
1857 fn from(ptr: OptionTerminalColonColonPtr) -> Self {
1858 ptr.untyped()
1859 }
1860}
1861impl From<OptionTerminalColonColonEmptyPtr> for OptionTerminalColonColonPtr {
1862 fn from(value: OptionTerminalColonColonEmptyPtr) -> Self {
1863 Self(value.0)
1864 }
1865}
1866impl From<TerminalColonColonPtr> for OptionTerminalColonColonPtr {
1867 fn from(value: TerminalColonColonPtr) -> Self {
1868 Self(value.0)
1869 }
1870}
1871impl From<OptionTerminalColonColonEmptyGreen> for OptionTerminalColonColonGreen {
1872 fn from(value: OptionTerminalColonColonEmptyGreen) -> Self {
1873 Self(value.0)
1874 }
1875}
1876impl From<TerminalColonColonGreen> for OptionTerminalColonColonGreen {
1877 fn from(value: TerminalColonColonGreen) -> Self {
1878 Self(value.0)
1879 }
1880}
1881#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1882pub struct OptionTerminalColonColonGreen(pub GreenId);
1883impl TypedSyntaxNode for OptionTerminalColonColon {
1884 const OPTIONAL_KIND: Option<SyntaxKind> = None;
1885 type StablePtr = OptionTerminalColonColonPtr;
1886 type Green = OptionTerminalColonColonGreen;
1887 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1888 panic!("No missing variant.");
1889 }
1890 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1891 let kind = node.kind(db);
1892 match kind {
1893 SyntaxKind::OptionTerminalColonColonEmpty => OptionTerminalColonColon::Empty(
1894 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1895 ),
1896 SyntaxKind::TerminalColonColon => OptionTerminalColonColon::TerminalColonColon(
1897 TerminalColonColon::from_syntax_node(db, node),
1898 ),
1899 _ => panic!(
1900 "Unexpected syntax kind {:?} when constructing {}.",
1901 kind, "OptionTerminalColonColon"
1902 ),
1903 }
1904 }
1905 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
1906 let kind = node.kind(db);
1907 match kind {
1908 SyntaxKind::OptionTerminalColonColonEmpty => Some(OptionTerminalColonColon::Empty(
1909 OptionTerminalColonColonEmpty::from_syntax_node(db, node),
1910 )),
1911 SyntaxKind::TerminalColonColon => Some(OptionTerminalColonColon::TerminalColonColon(
1912 TerminalColonColon::from_syntax_node(db, node),
1913 )),
1914 _ => None,
1915 }
1916 }
1917 fn as_syntax_node(&self) -> SyntaxNode {
1918 match self {
1919 OptionTerminalColonColon::Empty(x) => x.as_syntax_node(),
1920 OptionTerminalColonColon::TerminalColonColon(x) => x.as_syntax_node(),
1921 }
1922 }
1923 fn stable_ptr(&self) -> Self::StablePtr {
1924 OptionTerminalColonColonPtr(self.as_syntax_node().0.stable_ptr)
1925 }
1926}
1927impl From<&OptionTerminalColonColon> for SyntaxStablePtrId {
1928 fn from(node: &OptionTerminalColonColon) -> Self {
1929 node.stable_ptr().untyped()
1930 }
1931}
1932impl OptionTerminalColonColon {
1933 pub fn is_variant(kind: SyntaxKind) -> bool {
1935 matches!(kind, SyntaxKind::OptionTerminalColonColonEmpty | SyntaxKind::TerminalColonColon)
1936 }
1937}
1938#[derive(Clone, Debug, Eq, Hash, PartialEq)]
1939pub struct OptionTerminalColonColonEmpty {
1940 node: SyntaxNode,
1941 children: Arc<[SyntaxNode]>,
1942}
1943impl OptionTerminalColonColonEmpty {
1944 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmptyGreen {
1945 let children: Vec<GreenId> = vec![];
1946 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
1947 OptionTerminalColonColonEmptyGreen(
1948 Arc::new(GreenNode {
1949 kind: SyntaxKind::OptionTerminalColonColonEmpty,
1950 details: GreenNodeDetails::Node { children, width },
1951 })
1952 .intern(db),
1953 )
1954 }
1955}
1956impl OptionTerminalColonColonEmpty {}
1957#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1958pub struct OptionTerminalColonColonEmptyPtr(pub SyntaxStablePtrId);
1959impl OptionTerminalColonColonEmptyPtr {}
1960impl TypedStablePtr for OptionTerminalColonColonEmptyPtr {
1961 type SyntaxNode = OptionTerminalColonColonEmpty;
1962 fn untyped(&self) -> SyntaxStablePtrId {
1963 self.0
1964 }
1965 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColonEmpty {
1966 OptionTerminalColonColonEmpty::from_syntax_node(db, self.0.lookup(db))
1967 }
1968}
1969impl From<OptionTerminalColonColonEmptyPtr> for SyntaxStablePtrId {
1970 fn from(ptr: OptionTerminalColonColonEmptyPtr) -> Self {
1971 ptr.untyped()
1972 }
1973}
1974#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
1975pub struct OptionTerminalColonColonEmptyGreen(pub GreenId);
1976impl TypedSyntaxNode for OptionTerminalColonColonEmpty {
1977 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalColonColonEmpty);
1978 type StablePtr = OptionTerminalColonColonEmptyPtr;
1979 type Green = OptionTerminalColonColonEmptyGreen;
1980 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
1981 OptionTerminalColonColonEmptyGreen(
1982 Arc::new(GreenNode {
1983 kind: SyntaxKind::OptionTerminalColonColonEmpty,
1984 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
1985 })
1986 .intern(db),
1987 )
1988 }
1989 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
1990 let kind = node.kind(db);
1991 assert_eq!(
1992 kind,
1993 SyntaxKind::OptionTerminalColonColonEmpty,
1994 "Unexpected SyntaxKind {:?}. Expected {:?}.",
1995 kind,
1996 SyntaxKind::OptionTerminalColonColonEmpty
1997 );
1998 let children = db.get_children(node.clone());
1999 Self { node, children }
2000 }
2001 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2002 let kind = node.kind(db);
2003 if kind == SyntaxKind::OptionTerminalColonColonEmpty {
2004 Some(Self::from_syntax_node(db, node))
2005 } else {
2006 None
2007 }
2008 }
2009 fn as_syntax_node(&self) -> SyntaxNode {
2010 self.node.clone()
2011 }
2012 fn stable_ptr(&self) -> Self::StablePtr {
2013 OptionTerminalColonColonEmptyPtr(self.node.0.stable_ptr)
2014 }
2015}
2016impl From<&OptionTerminalColonColonEmpty> for SyntaxStablePtrId {
2017 fn from(node: &OptionTerminalColonColonEmpty) -> Self {
2018 node.stable_ptr().untyped()
2019 }
2020}
2021#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2022pub struct PathSegmentWithGenericArgs {
2023 node: SyntaxNode,
2024 children: Arc<[SyntaxNode]>,
2025}
2026impl PathSegmentWithGenericArgs {
2027 pub const INDEX_IDENT: usize = 0;
2028 pub const INDEX_SEPARATOR: usize = 1;
2029 pub const INDEX_GENERIC_ARGS: usize = 2;
2030 pub fn new_green(
2031 db: &dyn SyntaxGroup,
2032 ident: TerminalIdentifierGreen,
2033 separator: OptionTerminalColonColonGreen,
2034 generic_args: GenericArgsGreen,
2035 ) -> PathSegmentWithGenericArgsGreen {
2036 let children: Vec<GreenId> = vec![ident.0, separator.0, generic_args.0];
2037 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2038 PathSegmentWithGenericArgsGreen(
2039 Arc::new(GreenNode {
2040 kind: SyntaxKind::PathSegmentWithGenericArgs,
2041 details: GreenNodeDetails::Node { children, width },
2042 })
2043 .intern(db),
2044 )
2045 }
2046}
2047impl PathSegmentWithGenericArgs {
2048 pub fn ident(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
2049 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
2050 }
2051 pub fn separator(&self, db: &dyn SyntaxGroup) -> OptionTerminalColonColon {
2052 OptionTerminalColonColon::from_syntax_node(db, self.children[1].clone())
2053 }
2054 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgs {
2055 GenericArgs::from_syntax_node(db, self.children[2].clone())
2056 }
2057}
2058#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2059pub struct PathSegmentWithGenericArgsPtr(pub SyntaxStablePtrId);
2060impl PathSegmentWithGenericArgsPtr {}
2061impl TypedStablePtr for PathSegmentWithGenericArgsPtr {
2062 type SyntaxNode = PathSegmentWithGenericArgs;
2063 fn untyped(&self) -> SyntaxStablePtrId {
2064 self.0
2065 }
2066 fn lookup(&self, db: &dyn SyntaxGroup) -> PathSegmentWithGenericArgs {
2067 PathSegmentWithGenericArgs::from_syntax_node(db, self.0.lookup(db))
2068 }
2069}
2070impl From<PathSegmentWithGenericArgsPtr> for SyntaxStablePtrId {
2071 fn from(ptr: PathSegmentWithGenericArgsPtr) -> Self {
2072 ptr.untyped()
2073 }
2074}
2075#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2076pub struct PathSegmentWithGenericArgsGreen(pub GreenId);
2077impl TypedSyntaxNode for PathSegmentWithGenericArgs {
2078 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PathSegmentWithGenericArgs);
2079 type StablePtr = PathSegmentWithGenericArgsPtr;
2080 type Green = PathSegmentWithGenericArgsGreen;
2081 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2082 PathSegmentWithGenericArgsGreen(
2083 Arc::new(GreenNode {
2084 kind: SyntaxKind::PathSegmentWithGenericArgs,
2085 details: GreenNodeDetails::Node {
2086 children: vec![
2087 TerminalIdentifier::missing(db).0,
2088 OptionTerminalColonColon::missing(db).0,
2089 GenericArgs::missing(db).0,
2090 ],
2091 width: TextWidth::default(),
2092 },
2093 })
2094 .intern(db),
2095 )
2096 }
2097 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2098 let kind = node.kind(db);
2099 assert_eq!(
2100 kind,
2101 SyntaxKind::PathSegmentWithGenericArgs,
2102 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2103 kind,
2104 SyntaxKind::PathSegmentWithGenericArgs
2105 );
2106 let children = db.get_children(node.clone());
2107 Self { node, children }
2108 }
2109 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2110 let kind = node.kind(db);
2111 if kind == SyntaxKind::PathSegmentWithGenericArgs {
2112 Some(Self::from_syntax_node(db, node))
2113 } else {
2114 None
2115 }
2116 }
2117 fn as_syntax_node(&self) -> SyntaxNode {
2118 self.node.clone()
2119 }
2120 fn stable_ptr(&self) -> Self::StablePtr {
2121 PathSegmentWithGenericArgsPtr(self.node.0.stable_ptr)
2122 }
2123}
2124impl From<&PathSegmentWithGenericArgs> for SyntaxStablePtrId {
2125 fn from(node: &PathSegmentWithGenericArgs) -> Self {
2126 node.stable_ptr().untyped()
2127 }
2128}
2129#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2130pub struct ExprPath(ElementList<PathSegment, 2>);
2131impl Deref for ExprPath {
2132 type Target = ElementList<PathSegment, 2>;
2133 fn deref(&self) -> &Self::Target {
2134 &self.0
2135 }
2136}
2137impl ExprPath {
2138 pub fn new_green(
2139 db: &dyn SyntaxGroup,
2140 children: Vec<ExprPathElementOrSeparatorGreen>,
2141 ) -> ExprPathGreen {
2142 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
2143 ExprPathGreen(
2144 Arc::new(GreenNode {
2145 kind: SyntaxKind::ExprPath,
2146 details: GreenNodeDetails::Node {
2147 children: children.iter().map(|x| x.id()).collect(),
2148 width,
2149 },
2150 })
2151 .intern(db),
2152 )
2153 }
2154}
2155#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2156pub struct ExprPathPtr(pub SyntaxStablePtrId);
2157impl TypedStablePtr for ExprPathPtr {
2158 type SyntaxNode = ExprPath;
2159 fn untyped(&self) -> SyntaxStablePtrId {
2160 self.0
2161 }
2162 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprPath {
2163 ExprPath::from_syntax_node(db, self.0.lookup(db))
2164 }
2165}
2166impl From<ExprPathPtr> for SyntaxStablePtrId {
2167 fn from(ptr: ExprPathPtr) -> Self {
2168 ptr.untyped()
2169 }
2170}
2171#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2172pub enum ExprPathElementOrSeparatorGreen {
2173 Separator(TerminalColonColonGreen),
2174 Element(PathSegmentGreen),
2175}
2176impl From<TerminalColonColonGreen> for ExprPathElementOrSeparatorGreen {
2177 fn from(value: TerminalColonColonGreen) -> Self {
2178 ExprPathElementOrSeparatorGreen::Separator(value)
2179 }
2180}
2181impl From<PathSegmentGreen> for ExprPathElementOrSeparatorGreen {
2182 fn from(value: PathSegmentGreen) -> Self {
2183 ExprPathElementOrSeparatorGreen::Element(value)
2184 }
2185}
2186impl ExprPathElementOrSeparatorGreen {
2187 fn id(&self) -> GreenId {
2188 match self {
2189 ExprPathElementOrSeparatorGreen::Separator(green) => green.0,
2190 ExprPathElementOrSeparatorGreen::Element(green) => green.0,
2191 }
2192 }
2193}
2194#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2195pub struct ExprPathGreen(pub GreenId);
2196impl TypedSyntaxNode for ExprPath {
2197 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprPath);
2198 type StablePtr = ExprPathPtr;
2199 type Green = ExprPathGreen;
2200 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2201 ExprPathGreen(
2202 Arc::new(GreenNode {
2203 kind: SyntaxKind::ExprPath,
2204 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
2205 })
2206 .intern(db),
2207 )
2208 }
2209 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2210 Self(ElementList::new(node))
2211 }
2212 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2213 if node.kind(db) == SyntaxKind::ExprPath {
2214 Some(Self(ElementList::new(node)))
2215 } else {
2216 None
2217 }
2218 }
2219 fn as_syntax_node(&self) -> SyntaxNode {
2220 self.node.clone()
2221 }
2222 fn stable_ptr(&self) -> Self::StablePtr {
2223 ExprPathPtr(self.node.0.stable_ptr)
2224 }
2225}
2226impl From<&ExprPath> for SyntaxStablePtrId {
2227 fn from(node: &ExprPath) -> Self {
2228 node.stable_ptr().untyped()
2229 }
2230}
2231#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2232pub struct ExprParenthesized {
2233 node: SyntaxNode,
2234 children: Arc<[SyntaxNode]>,
2235}
2236impl ExprParenthesized {
2237 pub const INDEX_LPAREN: usize = 0;
2238 pub const INDEX_EXPR: usize = 1;
2239 pub const INDEX_RPAREN: usize = 2;
2240 pub fn new_green(
2241 db: &dyn SyntaxGroup,
2242 lparen: TerminalLParenGreen,
2243 expr: ExprGreen,
2244 rparen: TerminalRParenGreen,
2245 ) -> ExprParenthesizedGreen {
2246 let children: Vec<GreenId> = vec![lparen.0, expr.0, rparen.0];
2247 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2248 ExprParenthesizedGreen(
2249 Arc::new(GreenNode {
2250 kind: SyntaxKind::ExprParenthesized,
2251 details: GreenNodeDetails::Node { children, width },
2252 })
2253 .intern(db),
2254 )
2255 }
2256}
2257impl ExprParenthesized {
2258 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
2259 TerminalLParen::from_syntax_node(db, self.children[0].clone())
2260 }
2261 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2262 Expr::from_syntax_node(db, self.children[1].clone())
2263 }
2264 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
2265 TerminalRParen::from_syntax_node(db, self.children[2].clone())
2266 }
2267}
2268#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2269pub struct ExprParenthesizedPtr(pub SyntaxStablePtrId);
2270impl ExprParenthesizedPtr {}
2271impl TypedStablePtr for ExprParenthesizedPtr {
2272 type SyntaxNode = ExprParenthesized;
2273 fn untyped(&self) -> SyntaxStablePtrId {
2274 self.0
2275 }
2276 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprParenthesized {
2277 ExprParenthesized::from_syntax_node(db, self.0.lookup(db))
2278 }
2279}
2280impl From<ExprParenthesizedPtr> for SyntaxStablePtrId {
2281 fn from(ptr: ExprParenthesizedPtr) -> Self {
2282 ptr.untyped()
2283 }
2284}
2285#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2286pub struct ExprParenthesizedGreen(pub GreenId);
2287impl TypedSyntaxNode for ExprParenthesized {
2288 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprParenthesized);
2289 type StablePtr = ExprParenthesizedPtr;
2290 type Green = ExprParenthesizedGreen;
2291 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2292 ExprParenthesizedGreen(
2293 Arc::new(GreenNode {
2294 kind: SyntaxKind::ExprParenthesized,
2295 details: GreenNodeDetails::Node {
2296 children: vec![
2297 TerminalLParen::missing(db).0,
2298 Expr::missing(db).0,
2299 TerminalRParen::missing(db).0,
2300 ],
2301 width: TextWidth::default(),
2302 },
2303 })
2304 .intern(db),
2305 )
2306 }
2307 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2308 let kind = node.kind(db);
2309 assert_eq!(
2310 kind,
2311 SyntaxKind::ExprParenthesized,
2312 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2313 kind,
2314 SyntaxKind::ExprParenthesized
2315 );
2316 let children = db.get_children(node.clone());
2317 Self { node, children }
2318 }
2319 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2320 let kind = node.kind(db);
2321 if kind == SyntaxKind::ExprParenthesized {
2322 Some(Self::from_syntax_node(db, node))
2323 } else {
2324 None
2325 }
2326 }
2327 fn as_syntax_node(&self) -> SyntaxNode {
2328 self.node.clone()
2329 }
2330 fn stable_ptr(&self) -> Self::StablePtr {
2331 ExprParenthesizedPtr(self.node.0.stable_ptr)
2332 }
2333}
2334impl From<&ExprParenthesized> for SyntaxStablePtrId {
2335 fn from(node: &ExprParenthesized) -> Self {
2336 node.stable_ptr().untyped()
2337 }
2338}
2339#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2340pub struct ExprUnary {
2341 node: SyntaxNode,
2342 children: Arc<[SyntaxNode]>,
2343}
2344impl ExprUnary {
2345 pub const INDEX_OP: usize = 0;
2346 pub const INDEX_EXPR: usize = 1;
2347 pub fn new_green(
2348 db: &dyn SyntaxGroup,
2349 op: UnaryOperatorGreen,
2350 expr: ExprGreen,
2351 ) -> ExprUnaryGreen {
2352 let children: Vec<GreenId> = vec![op.0, expr.0];
2353 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2354 ExprUnaryGreen(
2355 Arc::new(GreenNode {
2356 kind: SyntaxKind::ExprUnary,
2357 details: GreenNodeDetails::Node { children, width },
2358 })
2359 .intern(db),
2360 )
2361 }
2362}
2363impl ExprUnary {
2364 pub fn op(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2365 UnaryOperator::from_syntax_node(db, self.children[0].clone())
2366 }
2367 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
2368 Expr::from_syntax_node(db, self.children[1].clone())
2369 }
2370}
2371#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2372pub struct ExprUnaryPtr(pub SyntaxStablePtrId);
2373impl ExprUnaryPtr {}
2374impl TypedStablePtr for ExprUnaryPtr {
2375 type SyntaxNode = ExprUnary;
2376 fn untyped(&self) -> SyntaxStablePtrId {
2377 self.0
2378 }
2379 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprUnary {
2380 ExprUnary::from_syntax_node(db, self.0.lookup(db))
2381 }
2382}
2383impl From<ExprUnaryPtr> for SyntaxStablePtrId {
2384 fn from(ptr: ExprUnaryPtr) -> Self {
2385 ptr.untyped()
2386 }
2387}
2388#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2389pub struct ExprUnaryGreen(pub GreenId);
2390impl TypedSyntaxNode for ExprUnary {
2391 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprUnary);
2392 type StablePtr = ExprUnaryPtr;
2393 type Green = ExprUnaryGreen;
2394 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2395 ExprUnaryGreen(
2396 Arc::new(GreenNode {
2397 kind: SyntaxKind::ExprUnary,
2398 details: GreenNodeDetails::Node {
2399 children: vec![UnaryOperator::missing(db).0, Expr::missing(db).0],
2400 width: TextWidth::default(),
2401 },
2402 })
2403 .intern(db),
2404 )
2405 }
2406 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2407 let kind = node.kind(db);
2408 assert_eq!(
2409 kind,
2410 SyntaxKind::ExprUnary,
2411 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2412 kind,
2413 SyntaxKind::ExprUnary
2414 );
2415 let children = db.get_children(node.clone());
2416 Self { node, children }
2417 }
2418 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2419 let kind = node.kind(db);
2420 if kind == SyntaxKind::ExprUnary { Some(Self::from_syntax_node(db, node)) } else { None }
2421 }
2422 fn as_syntax_node(&self) -> SyntaxNode {
2423 self.node.clone()
2424 }
2425 fn stable_ptr(&self) -> Self::StablePtr {
2426 ExprUnaryPtr(self.node.0.stable_ptr)
2427 }
2428}
2429impl From<&ExprUnary> for SyntaxStablePtrId {
2430 fn from(node: &ExprUnary) -> Self {
2431 node.stable_ptr().untyped()
2432 }
2433}
2434#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2435pub enum UnaryOperator {
2436 Not(TerminalNot),
2437 BitNot(TerminalBitNot),
2438 Minus(TerminalMinus),
2439 At(TerminalAt),
2440 Desnap(TerminalMul),
2441}
2442#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2443pub struct UnaryOperatorPtr(pub SyntaxStablePtrId);
2444impl TypedStablePtr for UnaryOperatorPtr {
2445 type SyntaxNode = UnaryOperator;
2446 fn untyped(&self) -> SyntaxStablePtrId {
2447 self.0
2448 }
2449 fn lookup(&self, db: &dyn SyntaxGroup) -> UnaryOperator {
2450 UnaryOperator::from_syntax_node(db, self.0.lookup(db))
2451 }
2452}
2453impl From<UnaryOperatorPtr> for SyntaxStablePtrId {
2454 fn from(ptr: UnaryOperatorPtr) -> Self {
2455 ptr.untyped()
2456 }
2457}
2458impl From<TerminalNotPtr> for UnaryOperatorPtr {
2459 fn from(value: TerminalNotPtr) -> Self {
2460 Self(value.0)
2461 }
2462}
2463impl From<TerminalBitNotPtr> for UnaryOperatorPtr {
2464 fn from(value: TerminalBitNotPtr) -> Self {
2465 Self(value.0)
2466 }
2467}
2468impl From<TerminalMinusPtr> for UnaryOperatorPtr {
2469 fn from(value: TerminalMinusPtr) -> Self {
2470 Self(value.0)
2471 }
2472}
2473impl From<TerminalAtPtr> for UnaryOperatorPtr {
2474 fn from(value: TerminalAtPtr) -> Self {
2475 Self(value.0)
2476 }
2477}
2478impl From<TerminalMulPtr> for UnaryOperatorPtr {
2479 fn from(value: TerminalMulPtr) -> Self {
2480 Self(value.0)
2481 }
2482}
2483impl From<TerminalNotGreen> for UnaryOperatorGreen {
2484 fn from(value: TerminalNotGreen) -> Self {
2485 Self(value.0)
2486 }
2487}
2488impl From<TerminalBitNotGreen> for UnaryOperatorGreen {
2489 fn from(value: TerminalBitNotGreen) -> Self {
2490 Self(value.0)
2491 }
2492}
2493impl From<TerminalMinusGreen> for UnaryOperatorGreen {
2494 fn from(value: TerminalMinusGreen) -> Self {
2495 Self(value.0)
2496 }
2497}
2498impl From<TerminalAtGreen> for UnaryOperatorGreen {
2499 fn from(value: TerminalAtGreen) -> Self {
2500 Self(value.0)
2501 }
2502}
2503impl From<TerminalMulGreen> for UnaryOperatorGreen {
2504 fn from(value: TerminalMulGreen) -> Self {
2505 Self(value.0)
2506 }
2507}
2508#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2509pub struct UnaryOperatorGreen(pub GreenId);
2510impl TypedSyntaxNode for UnaryOperator {
2511 const OPTIONAL_KIND: Option<SyntaxKind> = None;
2512 type StablePtr = UnaryOperatorPtr;
2513 type Green = UnaryOperatorGreen;
2514 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2515 panic!("No missing variant.");
2516 }
2517 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2518 let kind = node.kind(db);
2519 match kind {
2520 SyntaxKind::TerminalNot => UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
2521 SyntaxKind::TerminalBitNot => {
2522 UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node))
2523 }
2524 SyntaxKind::TerminalMinus => {
2525 UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
2526 }
2527 SyntaxKind::TerminalAt => UnaryOperator::At(TerminalAt::from_syntax_node(db, node)),
2528 SyntaxKind::TerminalMul => {
2529 UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node))
2530 }
2531 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UnaryOperator"),
2532 }
2533 }
2534 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2535 let kind = node.kind(db);
2536 match kind {
2537 SyntaxKind::TerminalNot => {
2538 Some(UnaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
2539 }
2540 SyntaxKind::TerminalBitNot => {
2541 Some(UnaryOperator::BitNot(TerminalBitNot::from_syntax_node(db, node)))
2542 }
2543 SyntaxKind::TerminalMinus => {
2544 Some(UnaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
2545 }
2546 SyntaxKind::TerminalAt => {
2547 Some(UnaryOperator::At(TerminalAt::from_syntax_node(db, node)))
2548 }
2549 SyntaxKind::TerminalMul => {
2550 Some(UnaryOperator::Desnap(TerminalMul::from_syntax_node(db, node)))
2551 }
2552 _ => None,
2553 }
2554 }
2555 fn as_syntax_node(&self) -> SyntaxNode {
2556 match self {
2557 UnaryOperator::Not(x) => x.as_syntax_node(),
2558 UnaryOperator::BitNot(x) => x.as_syntax_node(),
2559 UnaryOperator::Minus(x) => x.as_syntax_node(),
2560 UnaryOperator::At(x) => x.as_syntax_node(),
2561 UnaryOperator::Desnap(x) => x.as_syntax_node(),
2562 }
2563 }
2564 fn stable_ptr(&self) -> Self::StablePtr {
2565 UnaryOperatorPtr(self.as_syntax_node().0.stable_ptr)
2566 }
2567}
2568impl From<&UnaryOperator> for SyntaxStablePtrId {
2569 fn from(node: &UnaryOperator) -> Self {
2570 node.stable_ptr().untyped()
2571 }
2572}
2573impl UnaryOperator {
2574 pub fn is_variant(kind: SyntaxKind) -> bool {
2576 matches!(
2577 kind,
2578 SyntaxKind::TerminalNot
2579 | SyntaxKind::TerminalBitNot
2580 | SyntaxKind::TerminalMinus
2581 | SyntaxKind::TerminalAt
2582 | SyntaxKind::TerminalMul
2583 )
2584 }
2585}
2586#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2587pub struct ExprBinary {
2588 node: SyntaxNode,
2589 children: Arc<[SyntaxNode]>,
2590}
2591impl ExprBinary {
2592 pub const INDEX_LHS: usize = 0;
2593 pub const INDEX_OP: usize = 1;
2594 pub const INDEX_RHS: usize = 2;
2595 pub fn new_green(
2596 db: &dyn SyntaxGroup,
2597 lhs: ExprGreen,
2598 op: BinaryOperatorGreen,
2599 rhs: ExprGreen,
2600 ) -> ExprBinaryGreen {
2601 let children: Vec<GreenId> = vec![lhs.0, op.0, rhs.0];
2602 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
2603 ExprBinaryGreen(
2604 Arc::new(GreenNode {
2605 kind: SyntaxKind::ExprBinary,
2606 details: GreenNodeDetails::Node { children, width },
2607 })
2608 .intern(db),
2609 )
2610 }
2611}
2612impl ExprBinary {
2613 pub fn lhs(&self, db: &dyn SyntaxGroup) -> Expr {
2614 Expr::from_syntax_node(db, self.children[0].clone())
2615 }
2616 pub fn op(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
2617 BinaryOperator::from_syntax_node(db, self.children[1].clone())
2618 }
2619 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
2620 Expr::from_syntax_node(db, self.children[2].clone())
2621 }
2622}
2623#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2624pub struct ExprBinaryPtr(pub SyntaxStablePtrId);
2625impl ExprBinaryPtr {}
2626impl TypedStablePtr for ExprBinaryPtr {
2627 type SyntaxNode = ExprBinary;
2628 fn untyped(&self) -> SyntaxStablePtrId {
2629 self.0
2630 }
2631 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBinary {
2632 ExprBinary::from_syntax_node(db, self.0.lookup(db))
2633 }
2634}
2635impl From<ExprBinaryPtr> for SyntaxStablePtrId {
2636 fn from(ptr: ExprBinaryPtr) -> Self {
2637 ptr.untyped()
2638 }
2639}
2640#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2641pub struct ExprBinaryGreen(pub GreenId);
2642impl TypedSyntaxNode for ExprBinary {
2643 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBinary);
2644 type StablePtr = ExprBinaryPtr;
2645 type Green = ExprBinaryGreen;
2646 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
2647 ExprBinaryGreen(
2648 Arc::new(GreenNode {
2649 kind: SyntaxKind::ExprBinary,
2650 details: GreenNodeDetails::Node {
2651 children: vec![
2652 Expr::missing(db).0,
2653 BinaryOperator::missing(db).0,
2654 Expr::missing(db).0,
2655 ],
2656 width: TextWidth::default(),
2657 },
2658 })
2659 .intern(db),
2660 )
2661 }
2662 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
2663 let kind = node.kind(db);
2664 assert_eq!(
2665 kind,
2666 SyntaxKind::ExprBinary,
2667 "Unexpected SyntaxKind {:?}. Expected {:?}.",
2668 kind,
2669 SyntaxKind::ExprBinary
2670 );
2671 let children = db.get_children(node.clone());
2672 Self { node, children }
2673 }
2674 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
2675 let kind = node.kind(db);
2676 if kind == SyntaxKind::ExprBinary { Some(Self::from_syntax_node(db, node)) } else { None }
2677 }
2678 fn as_syntax_node(&self) -> SyntaxNode {
2679 self.node.clone()
2680 }
2681 fn stable_ptr(&self) -> Self::StablePtr {
2682 ExprBinaryPtr(self.node.0.stable_ptr)
2683 }
2684}
2685impl From<&ExprBinary> for SyntaxStablePtrId {
2686 fn from(node: &ExprBinary) -> Self {
2687 node.stable_ptr().untyped()
2688 }
2689}
2690#[derive(Clone, Debug, Eq, Hash, PartialEq)]
2691pub enum BinaryOperator {
2692 Dot(TerminalDot),
2693 Not(TerminalNot),
2694 Mul(TerminalMul),
2695 MulEq(TerminalMulEq),
2696 Div(TerminalDiv),
2697 DivEq(TerminalDivEq),
2698 Mod(TerminalMod),
2699 ModEq(TerminalModEq),
2700 Plus(TerminalPlus),
2701 PlusEq(TerminalPlusEq),
2702 Minus(TerminalMinus),
2703 MinusEq(TerminalMinusEq),
2704 EqEq(TerminalEqEq),
2705 Neq(TerminalNeq),
2706 Eq(TerminalEq),
2707 And(TerminalAnd),
2708 AndAnd(TerminalAndAnd),
2709 Or(TerminalOr),
2710 OrOr(TerminalOrOr),
2711 Xor(TerminalXor),
2712 LE(TerminalLE),
2713 GE(TerminalGE),
2714 LT(TerminalLT),
2715 GT(TerminalGT),
2716 DotDot(TerminalDotDot),
2717 DotDotEq(TerminalDotDotEq),
2718}
2719#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2720pub struct BinaryOperatorPtr(pub SyntaxStablePtrId);
2721impl TypedStablePtr for BinaryOperatorPtr {
2722 type SyntaxNode = BinaryOperator;
2723 fn untyped(&self) -> SyntaxStablePtrId {
2724 self.0
2725 }
2726 fn lookup(&self, db: &dyn SyntaxGroup) -> BinaryOperator {
2727 BinaryOperator::from_syntax_node(db, self.0.lookup(db))
2728 }
2729}
2730impl From<BinaryOperatorPtr> for SyntaxStablePtrId {
2731 fn from(ptr: BinaryOperatorPtr) -> Self {
2732 ptr.untyped()
2733 }
2734}
2735impl From<TerminalDotPtr> for BinaryOperatorPtr {
2736 fn from(value: TerminalDotPtr) -> Self {
2737 Self(value.0)
2738 }
2739}
2740impl From<TerminalNotPtr> for BinaryOperatorPtr {
2741 fn from(value: TerminalNotPtr) -> Self {
2742 Self(value.0)
2743 }
2744}
2745impl From<TerminalMulPtr> for BinaryOperatorPtr {
2746 fn from(value: TerminalMulPtr) -> Self {
2747 Self(value.0)
2748 }
2749}
2750impl From<TerminalMulEqPtr> for BinaryOperatorPtr {
2751 fn from(value: TerminalMulEqPtr) -> Self {
2752 Self(value.0)
2753 }
2754}
2755impl From<TerminalDivPtr> for BinaryOperatorPtr {
2756 fn from(value: TerminalDivPtr) -> Self {
2757 Self(value.0)
2758 }
2759}
2760impl From<TerminalDivEqPtr> for BinaryOperatorPtr {
2761 fn from(value: TerminalDivEqPtr) -> Self {
2762 Self(value.0)
2763 }
2764}
2765impl From<TerminalModPtr> for BinaryOperatorPtr {
2766 fn from(value: TerminalModPtr) -> Self {
2767 Self(value.0)
2768 }
2769}
2770impl From<TerminalModEqPtr> for BinaryOperatorPtr {
2771 fn from(value: TerminalModEqPtr) -> Self {
2772 Self(value.0)
2773 }
2774}
2775impl From<TerminalPlusPtr> for BinaryOperatorPtr {
2776 fn from(value: TerminalPlusPtr) -> Self {
2777 Self(value.0)
2778 }
2779}
2780impl From<TerminalPlusEqPtr> for BinaryOperatorPtr {
2781 fn from(value: TerminalPlusEqPtr) -> Self {
2782 Self(value.0)
2783 }
2784}
2785impl From<TerminalMinusPtr> for BinaryOperatorPtr {
2786 fn from(value: TerminalMinusPtr) -> Self {
2787 Self(value.0)
2788 }
2789}
2790impl From<TerminalMinusEqPtr> for BinaryOperatorPtr {
2791 fn from(value: TerminalMinusEqPtr) -> Self {
2792 Self(value.0)
2793 }
2794}
2795impl From<TerminalEqEqPtr> for BinaryOperatorPtr {
2796 fn from(value: TerminalEqEqPtr) -> Self {
2797 Self(value.0)
2798 }
2799}
2800impl From<TerminalNeqPtr> for BinaryOperatorPtr {
2801 fn from(value: TerminalNeqPtr) -> Self {
2802 Self(value.0)
2803 }
2804}
2805impl From<TerminalEqPtr> for BinaryOperatorPtr {
2806 fn from(value: TerminalEqPtr) -> Self {
2807 Self(value.0)
2808 }
2809}
2810impl From<TerminalAndPtr> for BinaryOperatorPtr {
2811 fn from(value: TerminalAndPtr) -> Self {
2812 Self(value.0)
2813 }
2814}
2815impl From<TerminalAndAndPtr> for BinaryOperatorPtr {
2816 fn from(value: TerminalAndAndPtr) -> Self {
2817 Self(value.0)
2818 }
2819}
2820impl From<TerminalOrPtr> for BinaryOperatorPtr {
2821 fn from(value: TerminalOrPtr) -> Self {
2822 Self(value.0)
2823 }
2824}
2825impl From<TerminalOrOrPtr> for BinaryOperatorPtr {
2826 fn from(value: TerminalOrOrPtr) -> Self {
2827 Self(value.0)
2828 }
2829}
2830impl From<TerminalXorPtr> for BinaryOperatorPtr {
2831 fn from(value: TerminalXorPtr) -> Self {
2832 Self(value.0)
2833 }
2834}
2835impl From<TerminalLEPtr> for BinaryOperatorPtr {
2836 fn from(value: TerminalLEPtr) -> Self {
2837 Self(value.0)
2838 }
2839}
2840impl From<TerminalGEPtr> for BinaryOperatorPtr {
2841 fn from(value: TerminalGEPtr) -> Self {
2842 Self(value.0)
2843 }
2844}
2845impl From<TerminalLTPtr> for BinaryOperatorPtr {
2846 fn from(value: TerminalLTPtr) -> Self {
2847 Self(value.0)
2848 }
2849}
2850impl From<TerminalGTPtr> for BinaryOperatorPtr {
2851 fn from(value: TerminalGTPtr) -> Self {
2852 Self(value.0)
2853 }
2854}
2855impl From<TerminalDotDotPtr> for BinaryOperatorPtr {
2856 fn from(value: TerminalDotDotPtr) -> Self {
2857 Self(value.0)
2858 }
2859}
2860impl From<TerminalDotDotEqPtr> for BinaryOperatorPtr {
2861 fn from(value: TerminalDotDotEqPtr) -> Self {
2862 Self(value.0)
2863 }
2864}
2865impl From<TerminalDotGreen> for BinaryOperatorGreen {
2866 fn from(value: TerminalDotGreen) -> Self {
2867 Self(value.0)
2868 }
2869}
2870impl From<TerminalNotGreen> for BinaryOperatorGreen {
2871 fn from(value: TerminalNotGreen) -> Self {
2872 Self(value.0)
2873 }
2874}
2875impl From<TerminalMulGreen> for BinaryOperatorGreen {
2876 fn from(value: TerminalMulGreen) -> Self {
2877 Self(value.0)
2878 }
2879}
2880impl From<TerminalMulEqGreen> for BinaryOperatorGreen {
2881 fn from(value: TerminalMulEqGreen) -> Self {
2882 Self(value.0)
2883 }
2884}
2885impl From<TerminalDivGreen> for BinaryOperatorGreen {
2886 fn from(value: TerminalDivGreen) -> Self {
2887 Self(value.0)
2888 }
2889}
2890impl From<TerminalDivEqGreen> for BinaryOperatorGreen {
2891 fn from(value: TerminalDivEqGreen) -> Self {
2892 Self(value.0)
2893 }
2894}
2895impl From<TerminalModGreen> for BinaryOperatorGreen {
2896 fn from(value: TerminalModGreen) -> Self {
2897 Self(value.0)
2898 }
2899}
2900impl From<TerminalModEqGreen> for BinaryOperatorGreen {
2901 fn from(value: TerminalModEqGreen) -> Self {
2902 Self(value.0)
2903 }
2904}
2905impl From<TerminalPlusGreen> for BinaryOperatorGreen {
2906 fn from(value: TerminalPlusGreen) -> Self {
2907 Self(value.0)
2908 }
2909}
2910impl From<TerminalPlusEqGreen> for BinaryOperatorGreen {
2911 fn from(value: TerminalPlusEqGreen) -> Self {
2912 Self(value.0)
2913 }
2914}
2915impl From<TerminalMinusGreen> for BinaryOperatorGreen {
2916 fn from(value: TerminalMinusGreen) -> Self {
2917 Self(value.0)
2918 }
2919}
2920impl From<TerminalMinusEqGreen> for BinaryOperatorGreen {
2921 fn from(value: TerminalMinusEqGreen) -> Self {
2922 Self(value.0)
2923 }
2924}
2925impl From<TerminalEqEqGreen> for BinaryOperatorGreen {
2926 fn from(value: TerminalEqEqGreen) -> Self {
2927 Self(value.0)
2928 }
2929}
2930impl From<TerminalNeqGreen> for BinaryOperatorGreen {
2931 fn from(value: TerminalNeqGreen) -> Self {
2932 Self(value.0)
2933 }
2934}
2935impl From<TerminalEqGreen> for BinaryOperatorGreen {
2936 fn from(value: TerminalEqGreen) -> Self {
2937 Self(value.0)
2938 }
2939}
2940impl From<TerminalAndGreen> for BinaryOperatorGreen {
2941 fn from(value: TerminalAndGreen) -> Self {
2942 Self(value.0)
2943 }
2944}
2945impl From<TerminalAndAndGreen> for BinaryOperatorGreen {
2946 fn from(value: TerminalAndAndGreen) -> Self {
2947 Self(value.0)
2948 }
2949}
2950impl From<TerminalOrGreen> for BinaryOperatorGreen {
2951 fn from(value: TerminalOrGreen) -> Self {
2952 Self(value.0)
2953 }
2954}
2955impl From<TerminalOrOrGreen> for BinaryOperatorGreen {
2956 fn from(value: TerminalOrOrGreen) -> Self {
2957 Self(value.0)
2958 }
2959}
2960impl From<TerminalXorGreen> for BinaryOperatorGreen {
2961 fn from(value: TerminalXorGreen) -> Self {
2962 Self(value.0)
2963 }
2964}
2965impl From<TerminalLEGreen> for BinaryOperatorGreen {
2966 fn from(value: TerminalLEGreen) -> Self {
2967 Self(value.0)
2968 }
2969}
2970impl From<TerminalGEGreen> for BinaryOperatorGreen {
2971 fn from(value: TerminalGEGreen) -> Self {
2972 Self(value.0)
2973 }
2974}
2975impl From<TerminalLTGreen> for BinaryOperatorGreen {
2976 fn from(value: TerminalLTGreen) -> Self {
2977 Self(value.0)
2978 }
2979}
2980impl From<TerminalGTGreen> for BinaryOperatorGreen {
2981 fn from(value: TerminalGTGreen) -> Self {
2982 Self(value.0)
2983 }
2984}
2985impl From<TerminalDotDotGreen> for BinaryOperatorGreen {
2986 fn from(value: TerminalDotDotGreen) -> Self {
2987 Self(value.0)
2988 }
2989}
2990impl From<TerminalDotDotEqGreen> for BinaryOperatorGreen {
2991 fn from(value: TerminalDotDotEqGreen) -> Self {
2992 Self(value.0)
2993 }
2994}
2995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
2996pub struct BinaryOperatorGreen(pub GreenId);
2997impl TypedSyntaxNode for BinaryOperator {
2998 const OPTIONAL_KIND: Option<SyntaxKind> = None;
2999 type StablePtr = BinaryOperatorPtr;
3000 type Green = BinaryOperatorGreen;
3001 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3002 panic!("No missing variant.");
3003 }
3004 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3005 let kind = node.kind(db);
3006 match kind {
3007 SyntaxKind::TerminalDot => BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)),
3008 SyntaxKind::TerminalNot => BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)),
3009 SyntaxKind::TerminalMul => BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)),
3010 SyntaxKind::TerminalMulEq => {
3011 BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node))
3012 }
3013 SyntaxKind::TerminalDiv => BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)),
3014 SyntaxKind::TerminalDivEq => {
3015 BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node))
3016 }
3017 SyntaxKind::TerminalMod => BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)),
3018 SyntaxKind::TerminalModEq => {
3019 BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node))
3020 }
3021 SyntaxKind::TerminalPlus => {
3022 BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node))
3023 }
3024 SyntaxKind::TerminalPlusEq => {
3025 BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node))
3026 }
3027 SyntaxKind::TerminalMinus => {
3028 BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node))
3029 }
3030 SyntaxKind::TerminalMinusEq => {
3031 BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node))
3032 }
3033 SyntaxKind::TerminalEqEq => {
3034 BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node))
3035 }
3036 SyntaxKind::TerminalNeq => BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)),
3037 SyntaxKind::TerminalEq => BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)),
3038 SyntaxKind::TerminalAnd => BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)),
3039 SyntaxKind::TerminalAndAnd => {
3040 BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node))
3041 }
3042 SyntaxKind::TerminalOr => BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)),
3043 SyntaxKind::TerminalOrOr => {
3044 BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node))
3045 }
3046 SyntaxKind::TerminalXor => BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)),
3047 SyntaxKind::TerminalLE => BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)),
3048 SyntaxKind::TerminalGE => BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)),
3049 SyntaxKind::TerminalLT => BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)),
3050 SyntaxKind::TerminalGT => BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)),
3051 SyntaxKind::TerminalDotDot => {
3052 BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node))
3053 }
3054 SyntaxKind::TerminalDotDotEq => {
3055 BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
3056 }
3057 _ => {
3058 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BinaryOperator")
3059 }
3060 }
3061 }
3062 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3063 let kind = node.kind(db);
3064 match kind {
3065 SyntaxKind::TerminalDot => {
3066 Some(BinaryOperator::Dot(TerminalDot::from_syntax_node(db, node)))
3067 }
3068 SyntaxKind::TerminalNot => {
3069 Some(BinaryOperator::Not(TerminalNot::from_syntax_node(db, node)))
3070 }
3071 SyntaxKind::TerminalMul => {
3072 Some(BinaryOperator::Mul(TerminalMul::from_syntax_node(db, node)))
3073 }
3074 SyntaxKind::TerminalMulEq => {
3075 Some(BinaryOperator::MulEq(TerminalMulEq::from_syntax_node(db, node)))
3076 }
3077 SyntaxKind::TerminalDiv => {
3078 Some(BinaryOperator::Div(TerminalDiv::from_syntax_node(db, node)))
3079 }
3080 SyntaxKind::TerminalDivEq => {
3081 Some(BinaryOperator::DivEq(TerminalDivEq::from_syntax_node(db, node)))
3082 }
3083 SyntaxKind::TerminalMod => {
3084 Some(BinaryOperator::Mod(TerminalMod::from_syntax_node(db, node)))
3085 }
3086 SyntaxKind::TerminalModEq => {
3087 Some(BinaryOperator::ModEq(TerminalModEq::from_syntax_node(db, node)))
3088 }
3089 SyntaxKind::TerminalPlus => {
3090 Some(BinaryOperator::Plus(TerminalPlus::from_syntax_node(db, node)))
3091 }
3092 SyntaxKind::TerminalPlusEq => {
3093 Some(BinaryOperator::PlusEq(TerminalPlusEq::from_syntax_node(db, node)))
3094 }
3095 SyntaxKind::TerminalMinus => {
3096 Some(BinaryOperator::Minus(TerminalMinus::from_syntax_node(db, node)))
3097 }
3098 SyntaxKind::TerminalMinusEq => {
3099 Some(BinaryOperator::MinusEq(TerminalMinusEq::from_syntax_node(db, node)))
3100 }
3101 SyntaxKind::TerminalEqEq => {
3102 Some(BinaryOperator::EqEq(TerminalEqEq::from_syntax_node(db, node)))
3103 }
3104 SyntaxKind::TerminalNeq => {
3105 Some(BinaryOperator::Neq(TerminalNeq::from_syntax_node(db, node)))
3106 }
3107 SyntaxKind::TerminalEq => {
3108 Some(BinaryOperator::Eq(TerminalEq::from_syntax_node(db, node)))
3109 }
3110 SyntaxKind::TerminalAnd => {
3111 Some(BinaryOperator::And(TerminalAnd::from_syntax_node(db, node)))
3112 }
3113 SyntaxKind::TerminalAndAnd => {
3114 Some(BinaryOperator::AndAnd(TerminalAndAnd::from_syntax_node(db, node)))
3115 }
3116 SyntaxKind::TerminalOr => {
3117 Some(BinaryOperator::Or(TerminalOr::from_syntax_node(db, node)))
3118 }
3119 SyntaxKind::TerminalOrOr => {
3120 Some(BinaryOperator::OrOr(TerminalOrOr::from_syntax_node(db, node)))
3121 }
3122 SyntaxKind::TerminalXor => {
3123 Some(BinaryOperator::Xor(TerminalXor::from_syntax_node(db, node)))
3124 }
3125 SyntaxKind::TerminalLE => {
3126 Some(BinaryOperator::LE(TerminalLE::from_syntax_node(db, node)))
3127 }
3128 SyntaxKind::TerminalGE => {
3129 Some(BinaryOperator::GE(TerminalGE::from_syntax_node(db, node)))
3130 }
3131 SyntaxKind::TerminalLT => {
3132 Some(BinaryOperator::LT(TerminalLT::from_syntax_node(db, node)))
3133 }
3134 SyntaxKind::TerminalGT => {
3135 Some(BinaryOperator::GT(TerminalGT::from_syntax_node(db, node)))
3136 }
3137 SyntaxKind::TerminalDotDot => {
3138 Some(BinaryOperator::DotDot(TerminalDotDot::from_syntax_node(db, node)))
3139 }
3140 SyntaxKind::TerminalDotDotEq => {
3141 Some(BinaryOperator::DotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
3142 }
3143 _ => None,
3144 }
3145 }
3146 fn as_syntax_node(&self) -> SyntaxNode {
3147 match self {
3148 BinaryOperator::Dot(x) => x.as_syntax_node(),
3149 BinaryOperator::Not(x) => x.as_syntax_node(),
3150 BinaryOperator::Mul(x) => x.as_syntax_node(),
3151 BinaryOperator::MulEq(x) => x.as_syntax_node(),
3152 BinaryOperator::Div(x) => x.as_syntax_node(),
3153 BinaryOperator::DivEq(x) => x.as_syntax_node(),
3154 BinaryOperator::Mod(x) => x.as_syntax_node(),
3155 BinaryOperator::ModEq(x) => x.as_syntax_node(),
3156 BinaryOperator::Plus(x) => x.as_syntax_node(),
3157 BinaryOperator::PlusEq(x) => x.as_syntax_node(),
3158 BinaryOperator::Minus(x) => x.as_syntax_node(),
3159 BinaryOperator::MinusEq(x) => x.as_syntax_node(),
3160 BinaryOperator::EqEq(x) => x.as_syntax_node(),
3161 BinaryOperator::Neq(x) => x.as_syntax_node(),
3162 BinaryOperator::Eq(x) => x.as_syntax_node(),
3163 BinaryOperator::And(x) => x.as_syntax_node(),
3164 BinaryOperator::AndAnd(x) => x.as_syntax_node(),
3165 BinaryOperator::Or(x) => x.as_syntax_node(),
3166 BinaryOperator::OrOr(x) => x.as_syntax_node(),
3167 BinaryOperator::Xor(x) => x.as_syntax_node(),
3168 BinaryOperator::LE(x) => x.as_syntax_node(),
3169 BinaryOperator::GE(x) => x.as_syntax_node(),
3170 BinaryOperator::LT(x) => x.as_syntax_node(),
3171 BinaryOperator::GT(x) => x.as_syntax_node(),
3172 BinaryOperator::DotDot(x) => x.as_syntax_node(),
3173 BinaryOperator::DotDotEq(x) => x.as_syntax_node(),
3174 }
3175 }
3176 fn stable_ptr(&self) -> Self::StablePtr {
3177 BinaryOperatorPtr(self.as_syntax_node().0.stable_ptr)
3178 }
3179}
3180impl From<&BinaryOperator> for SyntaxStablePtrId {
3181 fn from(node: &BinaryOperator) -> Self {
3182 node.stable_ptr().untyped()
3183 }
3184}
3185impl BinaryOperator {
3186 pub fn is_variant(kind: SyntaxKind) -> bool {
3188 matches!(
3189 kind,
3190 SyntaxKind::TerminalDot
3191 | SyntaxKind::TerminalNot
3192 | SyntaxKind::TerminalMul
3193 | SyntaxKind::TerminalMulEq
3194 | SyntaxKind::TerminalDiv
3195 | SyntaxKind::TerminalDivEq
3196 | SyntaxKind::TerminalMod
3197 | SyntaxKind::TerminalModEq
3198 | SyntaxKind::TerminalPlus
3199 | SyntaxKind::TerminalPlusEq
3200 | SyntaxKind::TerminalMinus
3201 | SyntaxKind::TerminalMinusEq
3202 | SyntaxKind::TerminalEqEq
3203 | SyntaxKind::TerminalNeq
3204 | SyntaxKind::TerminalEq
3205 | SyntaxKind::TerminalAnd
3206 | SyntaxKind::TerminalAndAnd
3207 | SyntaxKind::TerminalOr
3208 | SyntaxKind::TerminalOrOr
3209 | SyntaxKind::TerminalXor
3210 | SyntaxKind::TerminalLE
3211 | SyntaxKind::TerminalGE
3212 | SyntaxKind::TerminalLT
3213 | SyntaxKind::TerminalGT
3214 | SyntaxKind::TerminalDotDot
3215 | SyntaxKind::TerminalDotDotEq
3216 )
3217 }
3218}
3219#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3220pub struct ExprListParenthesized {
3221 node: SyntaxNode,
3222 children: Arc<[SyntaxNode]>,
3223}
3224impl ExprListParenthesized {
3225 pub const INDEX_LPAREN: usize = 0;
3226 pub const INDEX_EXPRESSIONS: usize = 1;
3227 pub const INDEX_RPAREN: usize = 2;
3228 pub fn new_green(
3229 db: &dyn SyntaxGroup,
3230 lparen: TerminalLParenGreen,
3231 expressions: ExprListGreen,
3232 rparen: TerminalRParenGreen,
3233 ) -> ExprListParenthesizedGreen {
3234 let children: Vec<GreenId> = vec![lparen.0, expressions.0, rparen.0];
3235 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3236 ExprListParenthesizedGreen(
3237 Arc::new(GreenNode {
3238 kind: SyntaxKind::ExprListParenthesized,
3239 details: GreenNodeDetails::Node { children, width },
3240 })
3241 .intern(db),
3242 )
3243 }
3244}
3245impl ExprListParenthesized {
3246 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3247 TerminalLParen::from_syntax_node(db, self.children[0].clone())
3248 }
3249 pub fn expressions(&self, db: &dyn SyntaxGroup) -> ExprList {
3250 ExprList::from_syntax_node(db, self.children[1].clone())
3251 }
3252 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3253 TerminalRParen::from_syntax_node(db, self.children[2].clone())
3254 }
3255}
3256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3257pub struct ExprListParenthesizedPtr(pub SyntaxStablePtrId);
3258impl ExprListParenthesizedPtr {}
3259impl TypedStablePtr for ExprListParenthesizedPtr {
3260 type SyntaxNode = ExprListParenthesized;
3261 fn untyped(&self) -> SyntaxStablePtrId {
3262 self.0
3263 }
3264 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprListParenthesized {
3265 ExprListParenthesized::from_syntax_node(db, self.0.lookup(db))
3266 }
3267}
3268impl From<ExprListParenthesizedPtr> for SyntaxStablePtrId {
3269 fn from(ptr: ExprListParenthesizedPtr) -> Self {
3270 ptr.untyped()
3271 }
3272}
3273#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3274pub struct ExprListParenthesizedGreen(pub GreenId);
3275impl TypedSyntaxNode for ExprListParenthesized {
3276 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprListParenthesized);
3277 type StablePtr = ExprListParenthesizedPtr;
3278 type Green = ExprListParenthesizedGreen;
3279 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3280 ExprListParenthesizedGreen(
3281 Arc::new(GreenNode {
3282 kind: SyntaxKind::ExprListParenthesized,
3283 details: GreenNodeDetails::Node {
3284 children: vec![
3285 TerminalLParen::missing(db).0,
3286 ExprList::missing(db).0,
3287 TerminalRParen::missing(db).0,
3288 ],
3289 width: TextWidth::default(),
3290 },
3291 })
3292 .intern(db),
3293 )
3294 }
3295 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3296 let kind = node.kind(db);
3297 assert_eq!(
3298 kind,
3299 SyntaxKind::ExprListParenthesized,
3300 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3301 kind,
3302 SyntaxKind::ExprListParenthesized
3303 );
3304 let children = db.get_children(node.clone());
3305 Self { node, children }
3306 }
3307 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3308 let kind = node.kind(db);
3309 if kind == SyntaxKind::ExprListParenthesized {
3310 Some(Self::from_syntax_node(db, node))
3311 } else {
3312 None
3313 }
3314 }
3315 fn as_syntax_node(&self) -> SyntaxNode {
3316 self.node.clone()
3317 }
3318 fn stable_ptr(&self) -> Self::StablePtr {
3319 ExprListParenthesizedPtr(self.node.0.stable_ptr)
3320 }
3321}
3322impl From<&ExprListParenthesized> for SyntaxStablePtrId {
3323 fn from(node: &ExprListParenthesized) -> Self {
3324 node.stable_ptr().untyped()
3325 }
3326}
3327#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3328pub struct ExprFunctionCall {
3329 node: SyntaxNode,
3330 children: Arc<[SyntaxNode]>,
3331}
3332impl ExprFunctionCall {
3333 pub const INDEX_PATH: usize = 0;
3334 pub const INDEX_ARGUMENTS: usize = 1;
3335 pub fn new_green(
3336 db: &dyn SyntaxGroup,
3337 path: ExprPathGreen,
3338 arguments: ArgListParenthesizedGreen,
3339 ) -> ExprFunctionCallGreen {
3340 let children: Vec<GreenId> = vec![path.0, arguments.0];
3341 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3342 ExprFunctionCallGreen(
3343 Arc::new(GreenNode {
3344 kind: SyntaxKind::ExprFunctionCall,
3345 details: GreenNodeDetails::Node { children, width },
3346 })
3347 .intern(db),
3348 )
3349 }
3350}
3351impl ExprFunctionCall {
3352 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3353 ExprPath::from_syntax_node(db, self.children[0].clone())
3354 }
3355 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3356 ArgListParenthesized::from_syntax_node(db, self.children[1].clone())
3357 }
3358}
3359#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3360pub struct ExprFunctionCallPtr(pub SyntaxStablePtrId);
3361impl ExprFunctionCallPtr {}
3362impl TypedStablePtr for ExprFunctionCallPtr {
3363 type SyntaxNode = ExprFunctionCall;
3364 fn untyped(&self) -> SyntaxStablePtrId {
3365 self.0
3366 }
3367 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFunctionCall {
3368 ExprFunctionCall::from_syntax_node(db, self.0.lookup(db))
3369 }
3370}
3371impl From<ExprFunctionCallPtr> for SyntaxStablePtrId {
3372 fn from(ptr: ExprFunctionCallPtr) -> Self {
3373 ptr.untyped()
3374 }
3375}
3376#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3377pub struct ExprFunctionCallGreen(pub GreenId);
3378impl TypedSyntaxNode for ExprFunctionCall {
3379 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFunctionCall);
3380 type StablePtr = ExprFunctionCallPtr;
3381 type Green = ExprFunctionCallGreen;
3382 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3383 ExprFunctionCallGreen(
3384 Arc::new(GreenNode {
3385 kind: SyntaxKind::ExprFunctionCall,
3386 details: GreenNodeDetails::Node {
3387 children: vec![ExprPath::missing(db).0, ArgListParenthesized::missing(db).0],
3388 width: TextWidth::default(),
3389 },
3390 })
3391 .intern(db),
3392 )
3393 }
3394 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3395 let kind = node.kind(db);
3396 assert_eq!(
3397 kind,
3398 SyntaxKind::ExprFunctionCall,
3399 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3400 kind,
3401 SyntaxKind::ExprFunctionCall
3402 );
3403 let children = db.get_children(node.clone());
3404 Self { node, children }
3405 }
3406 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3407 let kind = node.kind(db);
3408 if kind == SyntaxKind::ExprFunctionCall {
3409 Some(Self::from_syntax_node(db, node))
3410 } else {
3411 None
3412 }
3413 }
3414 fn as_syntax_node(&self) -> SyntaxNode {
3415 self.node.clone()
3416 }
3417 fn stable_ptr(&self) -> Self::StablePtr {
3418 ExprFunctionCallPtr(self.node.0.stable_ptr)
3419 }
3420}
3421impl From<&ExprFunctionCall> for SyntaxStablePtrId {
3422 fn from(node: &ExprFunctionCall) -> Self {
3423 node.stable_ptr().untyped()
3424 }
3425}
3426#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3427pub struct ArgListParenthesized {
3428 node: SyntaxNode,
3429 children: Arc<[SyntaxNode]>,
3430}
3431impl ArgListParenthesized {
3432 pub const INDEX_LPAREN: usize = 0;
3433 pub const INDEX_ARGUMENTS: usize = 1;
3434 pub const INDEX_RPAREN: usize = 2;
3435 pub fn new_green(
3436 db: &dyn SyntaxGroup,
3437 lparen: TerminalLParenGreen,
3438 arguments: ArgListGreen,
3439 rparen: TerminalRParenGreen,
3440 ) -> ArgListParenthesizedGreen {
3441 let children: Vec<GreenId> = vec![lparen.0, arguments.0, rparen.0];
3442 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3443 ArgListParenthesizedGreen(
3444 Arc::new(GreenNode {
3445 kind: SyntaxKind::ArgListParenthesized,
3446 details: GreenNodeDetails::Node { children, width },
3447 })
3448 .intern(db),
3449 )
3450 }
3451}
3452impl ArgListParenthesized {
3453 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
3454 TerminalLParen::from_syntax_node(db, self.children[0].clone())
3455 }
3456 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
3457 ArgList::from_syntax_node(db, self.children[1].clone())
3458 }
3459 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
3460 TerminalRParen::from_syntax_node(db, self.children[2].clone())
3461 }
3462}
3463#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3464pub struct ArgListParenthesizedPtr(pub SyntaxStablePtrId);
3465impl ArgListParenthesizedPtr {}
3466impl TypedStablePtr for ArgListParenthesizedPtr {
3467 type SyntaxNode = ArgListParenthesized;
3468 fn untyped(&self) -> SyntaxStablePtrId {
3469 self.0
3470 }
3471 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListParenthesized {
3472 ArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3473 }
3474}
3475impl From<ArgListParenthesizedPtr> for SyntaxStablePtrId {
3476 fn from(ptr: ArgListParenthesizedPtr) -> Self {
3477 ptr.untyped()
3478 }
3479}
3480#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3481pub struct ArgListParenthesizedGreen(pub GreenId);
3482impl TypedSyntaxNode for ArgListParenthesized {
3483 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListParenthesized);
3484 type StablePtr = ArgListParenthesizedPtr;
3485 type Green = ArgListParenthesizedGreen;
3486 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3487 ArgListParenthesizedGreen(
3488 Arc::new(GreenNode {
3489 kind: SyntaxKind::ArgListParenthesized,
3490 details: GreenNodeDetails::Node {
3491 children: vec![
3492 TerminalLParen::missing(db).0,
3493 ArgList::missing(db).0,
3494 TerminalRParen::missing(db).0,
3495 ],
3496 width: TextWidth::default(),
3497 },
3498 })
3499 .intern(db),
3500 )
3501 }
3502 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3503 let kind = node.kind(db);
3504 assert_eq!(
3505 kind,
3506 SyntaxKind::ArgListParenthesized,
3507 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3508 kind,
3509 SyntaxKind::ArgListParenthesized
3510 );
3511 let children = db.get_children(node.clone());
3512 Self { node, children }
3513 }
3514 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3515 let kind = node.kind(db);
3516 if kind == SyntaxKind::ArgListParenthesized {
3517 Some(Self::from_syntax_node(db, node))
3518 } else {
3519 None
3520 }
3521 }
3522 fn as_syntax_node(&self) -> SyntaxNode {
3523 self.node.clone()
3524 }
3525 fn stable_ptr(&self) -> Self::StablePtr {
3526 ArgListParenthesizedPtr(self.node.0.stable_ptr)
3527 }
3528}
3529impl From<&ArgListParenthesized> for SyntaxStablePtrId {
3530 fn from(node: &ArgListParenthesized) -> Self {
3531 node.stable_ptr().untyped()
3532 }
3533}
3534#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3535pub enum OptionArgListParenthesized {
3536 Empty(OptionArgListParenthesizedEmpty),
3537 ArgListParenthesized(ArgListParenthesized),
3538}
3539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3540pub struct OptionArgListParenthesizedPtr(pub SyntaxStablePtrId);
3541impl TypedStablePtr for OptionArgListParenthesizedPtr {
3542 type SyntaxNode = OptionArgListParenthesized;
3543 fn untyped(&self) -> SyntaxStablePtrId {
3544 self.0
3545 }
3546 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
3547 OptionArgListParenthesized::from_syntax_node(db, self.0.lookup(db))
3548 }
3549}
3550impl From<OptionArgListParenthesizedPtr> for SyntaxStablePtrId {
3551 fn from(ptr: OptionArgListParenthesizedPtr) -> Self {
3552 ptr.untyped()
3553 }
3554}
3555impl From<OptionArgListParenthesizedEmptyPtr> for OptionArgListParenthesizedPtr {
3556 fn from(value: OptionArgListParenthesizedEmptyPtr) -> Self {
3557 Self(value.0)
3558 }
3559}
3560impl From<ArgListParenthesizedPtr> for OptionArgListParenthesizedPtr {
3561 fn from(value: ArgListParenthesizedPtr) -> Self {
3562 Self(value.0)
3563 }
3564}
3565impl From<OptionArgListParenthesizedEmptyGreen> for OptionArgListParenthesizedGreen {
3566 fn from(value: OptionArgListParenthesizedEmptyGreen) -> Self {
3567 Self(value.0)
3568 }
3569}
3570impl From<ArgListParenthesizedGreen> for OptionArgListParenthesizedGreen {
3571 fn from(value: ArgListParenthesizedGreen) -> Self {
3572 Self(value.0)
3573 }
3574}
3575#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3576pub struct OptionArgListParenthesizedGreen(pub GreenId);
3577impl TypedSyntaxNode for OptionArgListParenthesized {
3578 const OPTIONAL_KIND: Option<SyntaxKind> = None;
3579 type StablePtr = OptionArgListParenthesizedPtr;
3580 type Green = OptionArgListParenthesizedGreen;
3581 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3582 panic!("No missing variant.");
3583 }
3584 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3585 let kind = node.kind(db);
3586 match kind {
3587 SyntaxKind::OptionArgListParenthesizedEmpty => OptionArgListParenthesized::Empty(
3588 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3589 ),
3590 SyntaxKind::ArgListParenthesized => OptionArgListParenthesized::ArgListParenthesized(
3591 ArgListParenthesized::from_syntax_node(db, node),
3592 ),
3593 _ => panic!(
3594 "Unexpected syntax kind {:?} when constructing {}.",
3595 kind, "OptionArgListParenthesized"
3596 ),
3597 }
3598 }
3599 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3600 let kind = node.kind(db);
3601 match kind {
3602 SyntaxKind::OptionArgListParenthesizedEmpty => Some(OptionArgListParenthesized::Empty(
3603 OptionArgListParenthesizedEmpty::from_syntax_node(db, node),
3604 )),
3605 SyntaxKind::ArgListParenthesized => {
3606 Some(OptionArgListParenthesized::ArgListParenthesized(
3607 ArgListParenthesized::from_syntax_node(db, node),
3608 ))
3609 }
3610 _ => None,
3611 }
3612 }
3613 fn as_syntax_node(&self) -> SyntaxNode {
3614 match self {
3615 OptionArgListParenthesized::Empty(x) => x.as_syntax_node(),
3616 OptionArgListParenthesized::ArgListParenthesized(x) => x.as_syntax_node(),
3617 }
3618 }
3619 fn stable_ptr(&self) -> Self::StablePtr {
3620 OptionArgListParenthesizedPtr(self.as_syntax_node().0.stable_ptr)
3621 }
3622}
3623impl From<&OptionArgListParenthesized> for SyntaxStablePtrId {
3624 fn from(node: &OptionArgListParenthesized) -> Self {
3625 node.stable_ptr().untyped()
3626 }
3627}
3628impl OptionArgListParenthesized {
3629 pub fn is_variant(kind: SyntaxKind) -> bool {
3631 matches!(
3632 kind,
3633 SyntaxKind::OptionArgListParenthesizedEmpty | SyntaxKind::ArgListParenthesized
3634 )
3635 }
3636}
3637#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3638pub struct OptionArgListParenthesizedEmpty {
3639 node: SyntaxNode,
3640 children: Arc<[SyntaxNode]>,
3641}
3642impl OptionArgListParenthesizedEmpty {
3643 pub fn new_green(db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmptyGreen {
3644 let children: Vec<GreenId> = vec![];
3645 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3646 OptionArgListParenthesizedEmptyGreen(
3647 Arc::new(GreenNode {
3648 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3649 details: GreenNodeDetails::Node { children, width },
3650 })
3651 .intern(db),
3652 )
3653 }
3654}
3655impl OptionArgListParenthesizedEmpty {}
3656#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3657pub struct OptionArgListParenthesizedEmptyPtr(pub SyntaxStablePtrId);
3658impl OptionArgListParenthesizedEmptyPtr {}
3659impl TypedStablePtr for OptionArgListParenthesizedEmptyPtr {
3660 type SyntaxNode = OptionArgListParenthesizedEmpty;
3661 fn untyped(&self) -> SyntaxStablePtrId {
3662 self.0
3663 }
3664 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesizedEmpty {
3665 OptionArgListParenthesizedEmpty::from_syntax_node(db, self.0.lookup(db))
3666 }
3667}
3668impl From<OptionArgListParenthesizedEmptyPtr> for SyntaxStablePtrId {
3669 fn from(ptr: OptionArgListParenthesizedEmptyPtr) -> Self {
3670 ptr.untyped()
3671 }
3672}
3673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3674pub struct OptionArgListParenthesizedEmptyGreen(pub GreenId);
3675impl TypedSyntaxNode for OptionArgListParenthesizedEmpty {
3676 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionArgListParenthesizedEmpty);
3677 type StablePtr = OptionArgListParenthesizedEmptyPtr;
3678 type Green = OptionArgListParenthesizedEmptyGreen;
3679 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3680 OptionArgListParenthesizedEmptyGreen(
3681 Arc::new(GreenNode {
3682 kind: SyntaxKind::OptionArgListParenthesizedEmpty,
3683 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
3684 })
3685 .intern(db),
3686 )
3687 }
3688 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3689 let kind = node.kind(db);
3690 assert_eq!(
3691 kind,
3692 SyntaxKind::OptionArgListParenthesizedEmpty,
3693 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3694 kind,
3695 SyntaxKind::OptionArgListParenthesizedEmpty
3696 );
3697 let children = db.get_children(node.clone());
3698 Self { node, children }
3699 }
3700 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3701 let kind = node.kind(db);
3702 if kind == SyntaxKind::OptionArgListParenthesizedEmpty {
3703 Some(Self::from_syntax_node(db, node))
3704 } else {
3705 None
3706 }
3707 }
3708 fn as_syntax_node(&self) -> SyntaxNode {
3709 self.node.clone()
3710 }
3711 fn stable_ptr(&self) -> Self::StablePtr {
3712 OptionArgListParenthesizedEmptyPtr(self.node.0.stable_ptr)
3713 }
3714}
3715impl From<&OptionArgListParenthesizedEmpty> for SyntaxStablePtrId {
3716 fn from(node: &OptionArgListParenthesizedEmpty) -> Self {
3717 node.stable_ptr().untyped()
3718 }
3719}
3720#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3721pub struct ExprStructCtorCall {
3722 node: SyntaxNode,
3723 children: Arc<[SyntaxNode]>,
3724}
3725impl ExprStructCtorCall {
3726 pub const INDEX_PATH: usize = 0;
3727 pub const INDEX_ARGUMENTS: usize = 1;
3728 pub fn new_green(
3729 db: &dyn SyntaxGroup,
3730 path: ExprPathGreen,
3731 arguments: StructArgListBracedGreen,
3732 ) -> ExprStructCtorCallGreen {
3733 let children: Vec<GreenId> = vec![path.0, arguments.0];
3734 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3735 ExprStructCtorCallGreen(
3736 Arc::new(GreenNode {
3737 kind: SyntaxKind::ExprStructCtorCall,
3738 details: GreenNodeDetails::Node { children, width },
3739 })
3740 .intern(db),
3741 )
3742 }
3743}
3744impl ExprStructCtorCall {
3745 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
3746 ExprPath::from_syntax_node(db, self.children[0].clone())
3747 }
3748 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
3749 StructArgListBraced::from_syntax_node(db, self.children[1].clone())
3750 }
3751}
3752#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3753pub struct ExprStructCtorCallPtr(pub SyntaxStablePtrId);
3754impl ExprStructCtorCallPtr {}
3755impl TypedStablePtr for ExprStructCtorCallPtr {
3756 type SyntaxNode = ExprStructCtorCall;
3757 fn untyped(&self) -> SyntaxStablePtrId {
3758 self.0
3759 }
3760 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprStructCtorCall {
3761 ExprStructCtorCall::from_syntax_node(db, self.0.lookup(db))
3762 }
3763}
3764impl From<ExprStructCtorCallPtr> for SyntaxStablePtrId {
3765 fn from(ptr: ExprStructCtorCallPtr) -> Self {
3766 ptr.untyped()
3767 }
3768}
3769#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3770pub struct ExprStructCtorCallGreen(pub GreenId);
3771impl TypedSyntaxNode for ExprStructCtorCall {
3772 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprStructCtorCall);
3773 type StablePtr = ExprStructCtorCallPtr;
3774 type Green = ExprStructCtorCallGreen;
3775 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3776 ExprStructCtorCallGreen(
3777 Arc::new(GreenNode {
3778 kind: SyntaxKind::ExprStructCtorCall,
3779 details: GreenNodeDetails::Node {
3780 children: vec![ExprPath::missing(db).0, StructArgListBraced::missing(db).0],
3781 width: TextWidth::default(),
3782 },
3783 })
3784 .intern(db),
3785 )
3786 }
3787 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3788 let kind = node.kind(db);
3789 assert_eq!(
3790 kind,
3791 SyntaxKind::ExprStructCtorCall,
3792 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3793 kind,
3794 SyntaxKind::ExprStructCtorCall
3795 );
3796 let children = db.get_children(node.clone());
3797 Self { node, children }
3798 }
3799 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3800 let kind = node.kind(db);
3801 if kind == SyntaxKind::ExprStructCtorCall {
3802 Some(Self::from_syntax_node(db, node))
3803 } else {
3804 None
3805 }
3806 }
3807 fn as_syntax_node(&self) -> SyntaxNode {
3808 self.node.clone()
3809 }
3810 fn stable_ptr(&self) -> Self::StablePtr {
3811 ExprStructCtorCallPtr(self.node.0.stable_ptr)
3812 }
3813}
3814impl From<&ExprStructCtorCall> for SyntaxStablePtrId {
3815 fn from(node: &ExprStructCtorCall) -> Self {
3816 node.stable_ptr().untyped()
3817 }
3818}
3819#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3820pub struct StructArgListBraced {
3821 node: SyntaxNode,
3822 children: Arc<[SyntaxNode]>,
3823}
3824impl StructArgListBraced {
3825 pub const INDEX_LBRACE: usize = 0;
3826 pub const INDEX_ARGUMENTS: usize = 1;
3827 pub const INDEX_RBRACE: usize = 2;
3828 pub fn new_green(
3829 db: &dyn SyntaxGroup,
3830 lbrace: TerminalLBraceGreen,
3831 arguments: StructArgListGreen,
3832 rbrace: TerminalRBraceGreen,
3833 ) -> StructArgListBracedGreen {
3834 let children: Vec<GreenId> = vec![lbrace.0, arguments.0, rbrace.0];
3835 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3836 StructArgListBracedGreen(
3837 Arc::new(GreenNode {
3838 kind: SyntaxKind::StructArgListBraced,
3839 details: GreenNodeDetails::Node { children, width },
3840 })
3841 .intern(db),
3842 )
3843 }
3844}
3845impl StructArgListBraced {
3846 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
3847 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
3848 }
3849 pub fn arguments(&self, db: &dyn SyntaxGroup) -> StructArgList {
3850 StructArgList::from_syntax_node(db, self.children[1].clone())
3851 }
3852 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
3853 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
3854 }
3855}
3856#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3857pub struct StructArgListBracedPtr(pub SyntaxStablePtrId);
3858impl StructArgListBracedPtr {}
3859impl TypedStablePtr for StructArgListBracedPtr {
3860 type SyntaxNode = StructArgListBraced;
3861 fn untyped(&self) -> SyntaxStablePtrId {
3862 self.0
3863 }
3864 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgListBraced {
3865 StructArgListBraced::from_syntax_node(db, self.0.lookup(db))
3866 }
3867}
3868impl From<StructArgListBracedPtr> for SyntaxStablePtrId {
3869 fn from(ptr: StructArgListBracedPtr) -> Self {
3870 ptr.untyped()
3871 }
3872}
3873#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3874pub struct StructArgListBracedGreen(pub GreenId);
3875impl TypedSyntaxNode for StructArgListBraced {
3876 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgListBraced);
3877 type StablePtr = StructArgListBracedPtr;
3878 type Green = StructArgListBracedGreen;
3879 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3880 StructArgListBracedGreen(
3881 Arc::new(GreenNode {
3882 kind: SyntaxKind::StructArgListBraced,
3883 details: GreenNodeDetails::Node {
3884 children: vec![
3885 TerminalLBrace::missing(db).0,
3886 StructArgList::missing(db).0,
3887 TerminalRBrace::missing(db).0,
3888 ],
3889 width: TextWidth::default(),
3890 },
3891 })
3892 .intern(db),
3893 )
3894 }
3895 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
3896 let kind = node.kind(db);
3897 assert_eq!(
3898 kind,
3899 SyntaxKind::StructArgListBraced,
3900 "Unexpected SyntaxKind {:?}. Expected {:?}.",
3901 kind,
3902 SyntaxKind::StructArgListBraced
3903 );
3904 let children = db.get_children(node.clone());
3905 Self { node, children }
3906 }
3907 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
3908 let kind = node.kind(db);
3909 if kind == SyntaxKind::StructArgListBraced {
3910 Some(Self::from_syntax_node(db, node))
3911 } else {
3912 None
3913 }
3914 }
3915 fn as_syntax_node(&self) -> SyntaxNode {
3916 self.node.clone()
3917 }
3918 fn stable_ptr(&self) -> Self::StablePtr {
3919 StructArgListBracedPtr(self.node.0.stable_ptr)
3920 }
3921}
3922impl From<&StructArgListBraced> for SyntaxStablePtrId {
3923 fn from(node: &StructArgListBraced) -> Self {
3924 node.stable_ptr().untyped()
3925 }
3926}
3927#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3928pub struct ExprBlock {
3929 node: SyntaxNode,
3930 children: Arc<[SyntaxNode]>,
3931}
3932impl ExprBlock {
3933 pub const INDEX_LBRACE: usize = 0;
3934 pub const INDEX_STATEMENTS: usize = 1;
3935 pub const INDEX_RBRACE: usize = 2;
3936 pub fn new_green(
3937 db: &dyn SyntaxGroup,
3938 lbrace: TerminalLBraceGreen,
3939 statements: StatementListGreen,
3940 rbrace: TerminalRBraceGreen,
3941 ) -> ExprBlockGreen {
3942 let children: Vec<GreenId> = vec![lbrace.0, statements.0, rbrace.0];
3943 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
3944 ExprBlockGreen(
3945 Arc::new(GreenNode {
3946 kind: SyntaxKind::ExprBlock,
3947 details: GreenNodeDetails::Node { children, width },
3948 })
3949 .intern(db),
3950 )
3951 }
3952}
3953impl ExprBlock {
3954 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
3955 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
3956 }
3957 pub fn statements(&self, db: &dyn SyntaxGroup) -> StatementList {
3958 StatementList::from_syntax_node(db, self.children[1].clone())
3959 }
3960 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
3961 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
3962 }
3963}
3964#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3965pub struct ExprBlockPtr(pub SyntaxStablePtrId);
3966impl ExprBlockPtr {}
3967impl TypedStablePtr for ExprBlockPtr {
3968 type SyntaxNode = ExprBlock;
3969 fn untyped(&self) -> SyntaxStablePtrId {
3970 self.0
3971 }
3972 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprBlock {
3973 ExprBlock::from_syntax_node(db, self.0.lookup(db))
3974 }
3975}
3976impl From<ExprBlockPtr> for SyntaxStablePtrId {
3977 fn from(ptr: ExprBlockPtr) -> Self {
3978 ptr.untyped()
3979 }
3980}
3981#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
3982pub struct ExprBlockGreen(pub GreenId);
3983impl TypedSyntaxNode for ExprBlock {
3984 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprBlock);
3985 type StablePtr = ExprBlockPtr;
3986 type Green = ExprBlockGreen;
3987 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
3988 ExprBlockGreen(
3989 Arc::new(GreenNode {
3990 kind: SyntaxKind::ExprBlock,
3991 details: GreenNodeDetails::Node {
3992 children: vec![
3993 TerminalLBrace::missing(db).0,
3994 StatementList::missing(db).0,
3995 TerminalRBrace::missing(db).0,
3996 ],
3997 width: TextWidth::default(),
3998 },
3999 })
4000 .intern(db),
4001 )
4002 }
4003 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4004 let kind = node.kind(db);
4005 assert_eq!(
4006 kind,
4007 SyntaxKind::ExprBlock,
4008 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4009 kind,
4010 SyntaxKind::ExprBlock
4011 );
4012 let children = db.get_children(node.clone());
4013 Self { node, children }
4014 }
4015 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4016 let kind = node.kind(db);
4017 if kind == SyntaxKind::ExprBlock { Some(Self::from_syntax_node(db, node)) } else { None }
4018 }
4019 fn as_syntax_node(&self) -> SyntaxNode {
4020 self.node.clone()
4021 }
4022 fn stable_ptr(&self) -> Self::StablePtr {
4023 ExprBlockPtr(self.node.0.stable_ptr)
4024 }
4025}
4026impl From<&ExprBlock> for SyntaxStablePtrId {
4027 fn from(node: &ExprBlock) -> Self {
4028 node.stable_ptr().untyped()
4029 }
4030}
4031#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4032pub struct ExprMatch {
4033 node: SyntaxNode,
4034 children: Arc<[SyntaxNode]>,
4035}
4036impl ExprMatch {
4037 pub const INDEX_MATCH_KW: usize = 0;
4038 pub const INDEX_EXPR: usize = 1;
4039 pub const INDEX_LBRACE: usize = 2;
4040 pub const INDEX_ARMS: usize = 3;
4041 pub const INDEX_RBRACE: usize = 4;
4042 pub fn new_green(
4043 db: &dyn SyntaxGroup,
4044 match_kw: TerminalMatchGreen,
4045 expr: ExprGreen,
4046 lbrace: TerminalLBraceGreen,
4047 arms: MatchArmsGreen,
4048 rbrace: TerminalRBraceGreen,
4049 ) -> ExprMatchGreen {
4050 let children: Vec<GreenId> = vec![match_kw.0, expr.0, lbrace.0, arms.0, rbrace.0];
4051 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4052 ExprMatchGreen(
4053 Arc::new(GreenNode {
4054 kind: SyntaxKind::ExprMatch,
4055 details: GreenNodeDetails::Node { children, width },
4056 })
4057 .intern(db),
4058 )
4059 }
4060}
4061impl ExprMatch {
4062 pub fn match_kw(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
4063 TerminalMatch::from_syntax_node(db, self.children[0].clone())
4064 }
4065 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4066 Expr::from_syntax_node(db, self.children[1].clone())
4067 }
4068 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
4069 TerminalLBrace::from_syntax_node(db, self.children[2].clone())
4070 }
4071 pub fn arms(&self, db: &dyn SyntaxGroup) -> MatchArms {
4072 MatchArms::from_syntax_node(db, self.children[3].clone())
4073 }
4074 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
4075 TerminalRBrace::from_syntax_node(db, self.children[4].clone())
4076 }
4077}
4078#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4079pub struct ExprMatchPtr(pub SyntaxStablePtrId);
4080impl ExprMatchPtr {}
4081impl TypedStablePtr for ExprMatchPtr {
4082 type SyntaxNode = ExprMatch;
4083 fn untyped(&self) -> SyntaxStablePtrId {
4084 self.0
4085 }
4086 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprMatch {
4087 ExprMatch::from_syntax_node(db, self.0.lookup(db))
4088 }
4089}
4090impl From<ExprMatchPtr> for SyntaxStablePtrId {
4091 fn from(ptr: ExprMatchPtr) -> Self {
4092 ptr.untyped()
4093 }
4094}
4095#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4096pub struct ExprMatchGreen(pub GreenId);
4097impl TypedSyntaxNode for ExprMatch {
4098 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprMatch);
4099 type StablePtr = ExprMatchPtr;
4100 type Green = ExprMatchGreen;
4101 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4102 ExprMatchGreen(
4103 Arc::new(GreenNode {
4104 kind: SyntaxKind::ExprMatch,
4105 details: GreenNodeDetails::Node {
4106 children: vec![
4107 TerminalMatch::missing(db).0,
4108 Expr::missing(db).0,
4109 TerminalLBrace::missing(db).0,
4110 MatchArms::missing(db).0,
4111 TerminalRBrace::missing(db).0,
4112 ],
4113 width: TextWidth::default(),
4114 },
4115 })
4116 .intern(db),
4117 )
4118 }
4119 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4120 let kind = node.kind(db);
4121 assert_eq!(
4122 kind,
4123 SyntaxKind::ExprMatch,
4124 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4125 kind,
4126 SyntaxKind::ExprMatch
4127 );
4128 let children = db.get_children(node.clone());
4129 Self { node, children }
4130 }
4131 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4132 let kind = node.kind(db);
4133 if kind == SyntaxKind::ExprMatch { Some(Self::from_syntax_node(db, node)) } else { None }
4134 }
4135 fn as_syntax_node(&self) -> SyntaxNode {
4136 self.node.clone()
4137 }
4138 fn stable_ptr(&self) -> Self::StablePtr {
4139 ExprMatchPtr(self.node.0.stable_ptr)
4140 }
4141}
4142impl From<&ExprMatch> for SyntaxStablePtrId {
4143 fn from(node: &ExprMatch) -> Self {
4144 node.stable_ptr().untyped()
4145 }
4146}
4147#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4148pub struct MatchArms(ElementList<MatchArm, 2>);
4149impl Deref for MatchArms {
4150 type Target = ElementList<MatchArm, 2>;
4151 fn deref(&self) -> &Self::Target {
4152 &self.0
4153 }
4154}
4155impl MatchArms {
4156 pub fn new_green(
4157 db: &dyn SyntaxGroup,
4158 children: Vec<MatchArmsElementOrSeparatorGreen>,
4159 ) -> MatchArmsGreen {
4160 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
4161 MatchArmsGreen(
4162 Arc::new(GreenNode {
4163 kind: SyntaxKind::MatchArms,
4164 details: GreenNodeDetails::Node {
4165 children: children.iter().map(|x| x.id()).collect(),
4166 width,
4167 },
4168 })
4169 .intern(db),
4170 )
4171 }
4172}
4173#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4174pub struct MatchArmsPtr(pub SyntaxStablePtrId);
4175impl TypedStablePtr for MatchArmsPtr {
4176 type SyntaxNode = MatchArms;
4177 fn untyped(&self) -> SyntaxStablePtrId {
4178 self.0
4179 }
4180 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArms {
4181 MatchArms::from_syntax_node(db, self.0.lookup(db))
4182 }
4183}
4184impl From<MatchArmsPtr> for SyntaxStablePtrId {
4185 fn from(ptr: MatchArmsPtr) -> Self {
4186 ptr.untyped()
4187 }
4188}
4189#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4190pub enum MatchArmsElementOrSeparatorGreen {
4191 Separator(TerminalCommaGreen),
4192 Element(MatchArmGreen),
4193}
4194impl From<TerminalCommaGreen> for MatchArmsElementOrSeparatorGreen {
4195 fn from(value: TerminalCommaGreen) -> Self {
4196 MatchArmsElementOrSeparatorGreen::Separator(value)
4197 }
4198}
4199impl From<MatchArmGreen> for MatchArmsElementOrSeparatorGreen {
4200 fn from(value: MatchArmGreen) -> Self {
4201 MatchArmsElementOrSeparatorGreen::Element(value)
4202 }
4203}
4204impl MatchArmsElementOrSeparatorGreen {
4205 fn id(&self) -> GreenId {
4206 match self {
4207 MatchArmsElementOrSeparatorGreen::Separator(green) => green.0,
4208 MatchArmsElementOrSeparatorGreen::Element(green) => green.0,
4209 }
4210 }
4211}
4212#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4213pub struct MatchArmsGreen(pub GreenId);
4214impl TypedSyntaxNode for MatchArms {
4215 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArms);
4216 type StablePtr = MatchArmsPtr;
4217 type Green = MatchArmsGreen;
4218 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4219 MatchArmsGreen(
4220 Arc::new(GreenNode {
4221 kind: SyntaxKind::MatchArms,
4222 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
4223 })
4224 .intern(db),
4225 )
4226 }
4227 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4228 Self(ElementList::new(node))
4229 }
4230 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4231 if node.kind(db) == SyntaxKind::MatchArms {
4232 Some(Self(ElementList::new(node)))
4233 } else {
4234 None
4235 }
4236 }
4237 fn as_syntax_node(&self) -> SyntaxNode {
4238 self.node.clone()
4239 }
4240 fn stable_ptr(&self) -> Self::StablePtr {
4241 MatchArmsPtr(self.node.0.stable_ptr)
4242 }
4243}
4244impl From<&MatchArms> for SyntaxStablePtrId {
4245 fn from(node: &MatchArms) -> Self {
4246 node.stable_ptr().untyped()
4247 }
4248}
4249#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4250pub struct MatchArm {
4251 node: SyntaxNode,
4252 children: Arc<[SyntaxNode]>,
4253}
4254impl MatchArm {
4255 pub const INDEX_PATTERNS: usize = 0;
4256 pub const INDEX_ARROW: usize = 1;
4257 pub const INDEX_EXPRESSION: usize = 2;
4258 pub fn new_green(
4259 db: &dyn SyntaxGroup,
4260 patterns: PatternListOrGreen,
4261 arrow: TerminalMatchArrowGreen,
4262 expression: ExprGreen,
4263 ) -> MatchArmGreen {
4264 let children: Vec<GreenId> = vec![patterns.0, arrow.0, expression.0];
4265 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4266 MatchArmGreen(
4267 Arc::new(GreenNode {
4268 kind: SyntaxKind::MatchArm,
4269 details: GreenNodeDetails::Node { children, width },
4270 })
4271 .intern(db),
4272 )
4273 }
4274}
4275impl MatchArm {
4276 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4277 PatternListOr::from_syntax_node(db, self.children[0].clone())
4278 }
4279 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
4280 TerminalMatchArrow::from_syntax_node(db, self.children[1].clone())
4281 }
4282 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
4283 Expr::from_syntax_node(db, self.children[2].clone())
4284 }
4285}
4286#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4287pub struct MatchArmPtr(pub SyntaxStablePtrId);
4288impl MatchArmPtr {}
4289impl TypedStablePtr for MatchArmPtr {
4290 type SyntaxNode = MatchArm;
4291 fn untyped(&self) -> SyntaxStablePtrId {
4292 self.0
4293 }
4294 fn lookup(&self, db: &dyn SyntaxGroup) -> MatchArm {
4295 MatchArm::from_syntax_node(db, self.0.lookup(db))
4296 }
4297}
4298impl From<MatchArmPtr> for SyntaxStablePtrId {
4299 fn from(ptr: MatchArmPtr) -> Self {
4300 ptr.untyped()
4301 }
4302}
4303#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4304pub struct MatchArmGreen(pub GreenId);
4305impl TypedSyntaxNode for MatchArm {
4306 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MatchArm);
4307 type StablePtr = MatchArmPtr;
4308 type Green = MatchArmGreen;
4309 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4310 MatchArmGreen(
4311 Arc::new(GreenNode {
4312 kind: SyntaxKind::MatchArm,
4313 details: GreenNodeDetails::Node {
4314 children: vec![
4315 PatternListOr::missing(db).0,
4316 TerminalMatchArrow::missing(db).0,
4317 Expr::missing(db).0,
4318 ],
4319 width: TextWidth::default(),
4320 },
4321 })
4322 .intern(db),
4323 )
4324 }
4325 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4326 let kind = node.kind(db);
4327 assert_eq!(
4328 kind,
4329 SyntaxKind::MatchArm,
4330 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4331 kind,
4332 SyntaxKind::MatchArm
4333 );
4334 let children = db.get_children(node.clone());
4335 Self { node, children }
4336 }
4337 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4338 let kind = node.kind(db);
4339 if kind == SyntaxKind::MatchArm { Some(Self::from_syntax_node(db, node)) } else { None }
4340 }
4341 fn as_syntax_node(&self) -> SyntaxNode {
4342 self.node.clone()
4343 }
4344 fn stable_ptr(&self) -> Self::StablePtr {
4345 MatchArmPtr(self.node.0.stable_ptr)
4346 }
4347}
4348impl From<&MatchArm> for SyntaxStablePtrId {
4349 fn from(node: &MatchArm) -> Self {
4350 node.stable_ptr().untyped()
4351 }
4352}
4353#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4354pub struct ExprIf {
4355 node: SyntaxNode,
4356 children: Arc<[SyntaxNode]>,
4357}
4358impl ExprIf {
4359 pub const INDEX_IF_KW: usize = 0;
4360 pub const INDEX_CONDITION: usize = 1;
4361 pub const INDEX_IF_BLOCK: usize = 2;
4362 pub const INDEX_ELSE_CLAUSE: usize = 3;
4363 pub fn new_green(
4364 db: &dyn SyntaxGroup,
4365 if_kw: TerminalIfGreen,
4366 condition: ConditionGreen,
4367 if_block: ExprBlockGreen,
4368 else_clause: OptionElseClauseGreen,
4369 ) -> ExprIfGreen {
4370 let children: Vec<GreenId> = vec![if_kw.0, condition.0, if_block.0, else_clause.0];
4371 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4372 ExprIfGreen(
4373 Arc::new(GreenNode {
4374 kind: SyntaxKind::ExprIf,
4375 details: GreenNodeDetails::Node { children, width },
4376 })
4377 .intern(db),
4378 )
4379 }
4380}
4381impl ExprIf {
4382 pub fn if_kw(&self, db: &dyn SyntaxGroup) -> TerminalIf {
4383 TerminalIf::from_syntax_node(db, self.children[0].clone())
4384 }
4385 pub fn condition(&self, db: &dyn SyntaxGroup) -> Condition {
4386 Condition::from_syntax_node(db, self.children[1].clone())
4387 }
4388 pub fn if_block(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4389 ExprBlock::from_syntax_node(db, self.children[2].clone())
4390 }
4391 pub fn else_clause(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
4392 OptionElseClause::from_syntax_node(db, self.children[3].clone())
4393 }
4394}
4395#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4396pub struct ExprIfPtr(pub SyntaxStablePtrId);
4397impl ExprIfPtr {}
4398impl TypedStablePtr for ExprIfPtr {
4399 type SyntaxNode = ExprIf;
4400 fn untyped(&self) -> SyntaxStablePtrId {
4401 self.0
4402 }
4403 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIf {
4404 ExprIf::from_syntax_node(db, self.0.lookup(db))
4405 }
4406}
4407impl From<ExprIfPtr> for SyntaxStablePtrId {
4408 fn from(ptr: ExprIfPtr) -> Self {
4409 ptr.untyped()
4410 }
4411}
4412#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4413pub struct ExprIfGreen(pub GreenId);
4414impl TypedSyntaxNode for ExprIf {
4415 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIf);
4416 type StablePtr = ExprIfPtr;
4417 type Green = ExprIfGreen;
4418 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4419 ExprIfGreen(
4420 Arc::new(GreenNode {
4421 kind: SyntaxKind::ExprIf,
4422 details: GreenNodeDetails::Node {
4423 children: vec![
4424 TerminalIf::missing(db).0,
4425 Condition::missing(db).0,
4426 ExprBlock::missing(db).0,
4427 OptionElseClause::missing(db).0,
4428 ],
4429 width: TextWidth::default(),
4430 },
4431 })
4432 .intern(db),
4433 )
4434 }
4435 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4436 let kind = node.kind(db);
4437 assert_eq!(
4438 kind,
4439 SyntaxKind::ExprIf,
4440 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4441 kind,
4442 SyntaxKind::ExprIf
4443 );
4444 let children = db.get_children(node.clone());
4445 Self { node, children }
4446 }
4447 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4448 let kind = node.kind(db);
4449 if kind == SyntaxKind::ExprIf { Some(Self::from_syntax_node(db, node)) } else { None }
4450 }
4451 fn as_syntax_node(&self) -> SyntaxNode {
4452 self.node.clone()
4453 }
4454 fn stable_ptr(&self) -> Self::StablePtr {
4455 ExprIfPtr(self.node.0.stable_ptr)
4456 }
4457}
4458impl From<&ExprIf> for SyntaxStablePtrId {
4459 fn from(node: &ExprIf) -> Self {
4460 node.stable_ptr().untyped()
4461 }
4462}
4463#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4464pub enum Condition {
4465 Let(ConditionLet),
4466 Expr(ConditionExpr),
4467}
4468#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4469pub struct ConditionPtr(pub SyntaxStablePtrId);
4470impl TypedStablePtr for ConditionPtr {
4471 type SyntaxNode = Condition;
4472 fn untyped(&self) -> SyntaxStablePtrId {
4473 self.0
4474 }
4475 fn lookup(&self, db: &dyn SyntaxGroup) -> Condition {
4476 Condition::from_syntax_node(db, self.0.lookup(db))
4477 }
4478}
4479impl From<ConditionPtr> for SyntaxStablePtrId {
4480 fn from(ptr: ConditionPtr) -> Self {
4481 ptr.untyped()
4482 }
4483}
4484impl From<ConditionLetPtr> for ConditionPtr {
4485 fn from(value: ConditionLetPtr) -> Self {
4486 Self(value.0)
4487 }
4488}
4489impl From<ConditionExprPtr> for ConditionPtr {
4490 fn from(value: ConditionExprPtr) -> Self {
4491 Self(value.0)
4492 }
4493}
4494impl From<ConditionLetGreen> for ConditionGreen {
4495 fn from(value: ConditionLetGreen) -> Self {
4496 Self(value.0)
4497 }
4498}
4499impl From<ConditionExprGreen> for ConditionGreen {
4500 fn from(value: ConditionExprGreen) -> Self {
4501 Self(value.0)
4502 }
4503}
4504#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4505pub struct ConditionGreen(pub GreenId);
4506impl TypedSyntaxNode for Condition {
4507 const OPTIONAL_KIND: Option<SyntaxKind> = None;
4508 type StablePtr = ConditionPtr;
4509 type Green = ConditionGreen;
4510 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4511 panic!("No missing variant.");
4512 }
4513 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4514 let kind = node.kind(db);
4515 match kind {
4516 SyntaxKind::ConditionLet => Condition::Let(ConditionLet::from_syntax_node(db, node)),
4517 SyntaxKind::ConditionExpr => Condition::Expr(ConditionExpr::from_syntax_node(db, node)),
4518 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Condition"),
4519 }
4520 }
4521 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4522 let kind = node.kind(db);
4523 match kind {
4524 SyntaxKind::ConditionLet => {
4525 Some(Condition::Let(ConditionLet::from_syntax_node(db, node)))
4526 }
4527 SyntaxKind::ConditionExpr => {
4528 Some(Condition::Expr(ConditionExpr::from_syntax_node(db, node)))
4529 }
4530 _ => None,
4531 }
4532 }
4533 fn as_syntax_node(&self) -> SyntaxNode {
4534 match self {
4535 Condition::Let(x) => x.as_syntax_node(),
4536 Condition::Expr(x) => x.as_syntax_node(),
4537 }
4538 }
4539 fn stable_ptr(&self) -> Self::StablePtr {
4540 ConditionPtr(self.as_syntax_node().0.stable_ptr)
4541 }
4542}
4543impl From<&Condition> for SyntaxStablePtrId {
4544 fn from(node: &Condition) -> Self {
4545 node.stable_ptr().untyped()
4546 }
4547}
4548impl Condition {
4549 pub fn is_variant(kind: SyntaxKind) -> bool {
4551 matches!(kind, SyntaxKind::ConditionLet | SyntaxKind::ConditionExpr)
4552 }
4553}
4554#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4555pub struct ConditionLet {
4556 node: SyntaxNode,
4557 children: Arc<[SyntaxNode]>,
4558}
4559impl ConditionLet {
4560 pub const INDEX_LET_KW: usize = 0;
4561 pub const INDEX_PATTERNS: usize = 1;
4562 pub const INDEX_EQ: usize = 2;
4563 pub const INDEX_EXPR: usize = 3;
4564 pub fn new_green(
4565 db: &dyn SyntaxGroup,
4566 let_kw: TerminalLetGreen,
4567 patterns: PatternListOrGreen,
4568 eq: TerminalEqGreen,
4569 expr: ExprGreen,
4570 ) -> ConditionLetGreen {
4571 let children: Vec<GreenId> = vec![let_kw.0, patterns.0, eq.0, expr.0];
4572 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4573 ConditionLetGreen(
4574 Arc::new(GreenNode {
4575 kind: SyntaxKind::ConditionLet,
4576 details: GreenNodeDetails::Node { children, width },
4577 })
4578 .intern(db),
4579 )
4580 }
4581}
4582impl ConditionLet {
4583 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
4584 TerminalLet::from_syntax_node(db, self.children[0].clone())
4585 }
4586 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternListOr {
4587 PatternListOr::from_syntax_node(db, self.children[1].clone())
4588 }
4589 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
4590 TerminalEq::from_syntax_node(db, self.children[2].clone())
4591 }
4592 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4593 Expr::from_syntax_node(db, self.children[3].clone())
4594 }
4595}
4596#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4597pub struct ConditionLetPtr(pub SyntaxStablePtrId);
4598impl ConditionLetPtr {}
4599impl TypedStablePtr for ConditionLetPtr {
4600 type SyntaxNode = ConditionLet;
4601 fn untyped(&self) -> SyntaxStablePtrId {
4602 self.0
4603 }
4604 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionLet {
4605 ConditionLet::from_syntax_node(db, self.0.lookup(db))
4606 }
4607}
4608impl From<ConditionLetPtr> for SyntaxStablePtrId {
4609 fn from(ptr: ConditionLetPtr) -> Self {
4610 ptr.untyped()
4611 }
4612}
4613#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4614pub struct ConditionLetGreen(pub GreenId);
4615impl TypedSyntaxNode for ConditionLet {
4616 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionLet);
4617 type StablePtr = ConditionLetPtr;
4618 type Green = ConditionLetGreen;
4619 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4620 ConditionLetGreen(
4621 Arc::new(GreenNode {
4622 kind: SyntaxKind::ConditionLet,
4623 details: GreenNodeDetails::Node {
4624 children: vec![
4625 TerminalLet::missing(db).0,
4626 PatternListOr::missing(db).0,
4627 TerminalEq::missing(db).0,
4628 Expr::missing(db).0,
4629 ],
4630 width: TextWidth::default(),
4631 },
4632 })
4633 .intern(db),
4634 )
4635 }
4636 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4637 let kind = node.kind(db);
4638 assert_eq!(
4639 kind,
4640 SyntaxKind::ConditionLet,
4641 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4642 kind,
4643 SyntaxKind::ConditionLet
4644 );
4645 let children = db.get_children(node.clone());
4646 Self { node, children }
4647 }
4648 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4649 let kind = node.kind(db);
4650 if kind == SyntaxKind::ConditionLet { Some(Self::from_syntax_node(db, node)) } else { None }
4651 }
4652 fn as_syntax_node(&self) -> SyntaxNode {
4653 self.node.clone()
4654 }
4655 fn stable_ptr(&self) -> Self::StablePtr {
4656 ConditionLetPtr(self.node.0.stable_ptr)
4657 }
4658}
4659impl From<&ConditionLet> for SyntaxStablePtrId {
4660 fn from(node: &ConditionLet) -> Self {
4661 node.stable_ptr().untyped()
4662 }
4663}
4664#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4665pub struct ConditionExpr {
4666 node: SyntaxNode,
4667 children: Arc<[SyntaxNode]>,
4668}
4669impl ConditionExpr {
4670 pub const INDEX_EXPR: usize = 0;
4671 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ConditionExprGreen {
4672 let children: Vec<GreenId> = vec![expr.0];
4673 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4674 ConditionExprGreen(
4675 Arc::new(GreenNode {
4676 kind: SyntaxKind::ConditionExpr,
4677 details: GreenNodeDetails::Node { children, width },
4678 })
4679 .intern(db),
4680 )
4681 }
4682}
4683impl ConditionExpr {
4684 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
4685 Expr::from_syntax_node(db, self.children[0].clone())
4686 }
4687}
4688#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4689pub struct ConditionExprPtr(pub SyntaxStablePtrId);
4690impl ConditionExprPtr {}
4691impl TypedStablePtr for ConditionExprPtr {
4692 type SyntaxNode = ConditionExpr;
4693 fn untyped(&self) -> SyntaxStablePtrId {
4694 self.0
4695 }
4696 fn lookup(&self, db: &dyn SyntaxGroup) -> ConditionExpr {
4697 ConditionExpr::from_syntax_node(db, self.0.lookup(db))
4698 }
4699}
4700impl From<ConditionExprPtr> for SyntaxStablePtrId {
4701 fn from(ptr: ConditionExprPtr) -> Self {
4702 ptr.untyped()
4703 }
4704}
4705#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4706pub struct ConditionExprGreen(pub GreenId);
4707impl TypedSyntaxNode for ConditionExpr {
4708 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ConditionExpr);
4709 type StablePtr = ConditionExprPtr;
4710 type Green = ConditionExprGreen;
4711 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4712 ConditionExprGreen(
4713 Arc::new(GreenNode {
4714 kind: SyntaxKind::ConditionExpr,
4715 details: GreenNodeDetails::Node {
4716 children: vec![Expr::missing(db).0],
4717 width: TextWidth::default(),
4718 },
4719 })
4720 .intern(db),
4721 )
4722 }
4723 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4724 let kind = node.kind(db);
4725 assert_eq!(
4726 kind,
4727 SyntaxKind::ConditionExpr,
4728 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4729 kind,
4730 SyntaxKind::ConditionExpr
4731 );
4732 let children = db.get_children(node.clone());
4733 Self { node, children }
4734 }
4735 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4736 let kind = node.kind(db);
4737 if kind == SyntaxKind::ConditionExpr {
4738 Some(Self::from_syntax_node(db, node))
4739 } else {
4740 None
4741 }
4742 }
4743 fn as_syntax_node(&self) -> SyntaxNode {
4744 self.node.clone()
4745 }
4746 fn stable_ptr(&self) -> Self::StablePtr {
4747 ConditionExprPtr(self.node.0.stable_ptr)
4748 }
4749}
4750impl From<&ConditionExpr> for SyntaxStablePtrId {
4751 fn from(node: &ConditionExpr) -> Self {
4752 node.stable_ptr().untyped()
4753 }
4754}
4755#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4756pub enum BlockOrIf {
4757 Block(ExprBlock),
4758 If(ExprIf),
4759}
4760#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4761pub struct BlockOrIfPtr(pub SyntaxStablePtrId);
4762impl TypedStablePtr for BlockOrIfPtr {
4763 type SyntaxNode = BlockOrIf;
4764 fn untyped(&self) -> SyntaxStablePtrId {
4765 self.0
4766 }
4767 fn lookup(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
4768 BlockOrIf::from_syntax_node(db, self.0.lookup(db))
4769 }
4770}
4771impl From<BlockOrIfPtr> for SyntaxStablePtrId {
4772 fn from(ptr: BlockOrIfPtr) -> Self {
4773 ptr.untyped()
4774 }
4775}
4776impl From<ExprBlockPtr> for BlockOrIfPtr {
4777 fn from(value: ExprBlockPtr) -> Self {
4778 Self(value.0)
4779 }
4780}
4781impl From<ExprIfPtr> for BlockOrIfPtr {
4782 fn from(value: ExprIfPtr) -> Self {
4783 Self(value.0)
4784 }
4785}
4786impl From<ExprBlockGreen> for BlockOrIfGreen {
4787 fn from(value: ExprBlockGreen) -> Self {
4788 Self(value.0)
4789 }
4790}
4791impl From<ExprIfGreen> for BlockOrIfGreen {
4792 fn from(value: ExprIfGreen) -> Self {
4793 Self(value.0)
4794 }
4795}
4796#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4797pub struct BlockOrIfGreen(pub GreenId);
4798impl TypedSyntaxNode for BlockOrIf {
4799 const OPTIONAL_KIND: Option<SyntaxKind> = None;
4800 type StablePtr = BlockOrIfPtr;
4801 type Green = BlockOrIfGreen;
4802 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4803 panic!("No missing variant.");
4804 }
4805 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4806 let kind = node.kind(db);
4807 match kind {
4808 SyntaxKind::ExprBlock => BlockOrIf::Block(ExprBlock::from_syntax_node(db, node)),
4809 SyntaxKind::ExprIf => BlockOrIf::If(ExprIf::from_syntax_node(db, node)),
4810 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "BlockOrIf"),
4811 }
4812 }
4813 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4814 let kind = node.kind(db);
4815 match kind {
4816 SyntaxKind::ExprBlock => Some(BlockOrIf::Block(ExprBlock::from_syntax_node(db, node))),
4817 SyntaxKind::ExprIf => Some(BlockOrIf::If(ExprIf::from_syntax_node(db, node))),
4818 _ => None,
4819 }
4820 }
4821 fn as_syntax_node(&self) -> SyntaxNode {
4822 match self {
4823 BlockOrIf::Block(x) => x.as_syntax_node(),
4824 BlockOrIf::If(x) => x.as_syntax_node(),
4825 }
4826 }
4827 fn stable_ptr(&self) -> Self::StablePtr {
4828 BlockOrIfPtr(self.as_syntax_node().0.stable_ptr)
4829 }
4830}
4831impl From<&BlockOrIf> for SyntaxStablePtrId {
4832 fn from(node: &BlockOrIf) -> Self {
4833 node.stable_ptr().untyped()
4834 }
4835}
4836impl BlockOrIf {
4837 pub fn is_variant(kind: SyntaxKind) -> bool {
4839 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::ExprIf)
4840 }
4841}
4842#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4843pub struct ExprLoop {
4844 node: SyntaxNode,
4845 children: Arc<[SyntaxNode]>,
4846}
4847impl ExprLoop {
4848 pub const INDEX_LOOP_KW: usize = 0;
4849 pub const INDEX_BODY: usize = 1;
4850 pub fn new_green(
4851 db: &dyn SyntaxGroup,
4852 loop_kw: TerminalLoopGreen,
4853 body: ExprBlockGreen,
4854 ) -> ExprLoopGreen {
4855 let children: Vec<GreenId> = vec![loop_kw.0, body.0];
4856 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4857 ExprLoopGreen(
4858 Arc::new(GreenNode {
4859 kind: SyntaxKind::ExprLoop,
4860 details: GreenNodeDetails::Node { children, width },
4861 })
4862 .intern(db),
4863 )
4864 }
4865}
4866impl ExprLoop {
4867 pub fn loop_kw(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
4868 TerminalLoop::from_syntax_node(db, self.children[0].clone())
4869 }
4870 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4871 ExprBlock::from_syntax_node(db, self.children[1].clone())
4872 }
4873}
4874#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4875pub struct ExprLoopPtr(pub SyntaxStablePtrId);
4876impl ExprLoopPtr {}
4877impl TypedStablePtr for ExprLoopPtr {
4878 type SyntaxNode = ExprLoop;
4879 fn untyped(&self) -> SyntaxStablePtrId {
4880 self.0
4881 }
4882 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprLoop {
4883 ExprLoop::from_syntax_node(db, self.0.lookup(db))
4884 }
4885}
4886impl From<ExprLoopPtr> for SyntaxStablePtrId {
4887 fn from(ptr: ExprLoopPtr) -> Self {
4888 ptr.untyped()
4889 }
4890}
4891#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4892pub struct ExprLoopGreen(pub GreenId);
4893impl TypedSyntaxNode for ExprLoop {
4894 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprLoop);
4895 type StablePtr = ExprLoopPtr;
4896 type Green = ExprLoopGreen;
4897 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4898 ExprLoopGreen(
4899 Arc::new(GreenNode {
4900 kind: SyntaxKind::ExprLoop,
4901 details: GreenNodeDetails::Node {
4902 children: vec![TerminalLoop::missing(db).0, ExprBlock::missing(db).0],
4903 width: TextWidth::default(),
4904 },
4905 })
4906 .intern(db),
4907 )
4908 }
4909 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
4910 let kind = node.kind(db);
4911 assert_eq!(
4912 kind,
4913 SyntaxKind::ExprLoop,
4914 "Unexpected SyntaxKind {:?}. Expected {:?}.",
4915 kind,
4916 SyntaxKind::ExprLoop
4917 );
4918 let children = db.get_children(node.clone());
4919 Self { node, children }
4920 }
4921 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
4922 let kind = node.kind(db);
4923 if kind == SyntaxKind::ExprLoop { Some(Self::from_syntax_node(db, node)) } else { None }
4924 }
4925 fn as_syntax_node(&self) -> SyntaxNode {
4926 self.node.clone()
4927 }
4928 fn stable_ptr(&self) -> Self::StablePtr {
4929 ExprLoopPtr(self.node.0.stable_ptr)
4930 }
4931}
4932impl From<&ExprLoop> for SyntaxStablePtrId {
4933 fn from(node: &ExprLoop) -> Self {
4934 node.stable_ptr().untyped()
4935 }
4936}
4937#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4938pub struct ExprWhile {
4939 node: SyntaxNode,
4940 children: Arc<[SyntaxNode]>,
4941}
4942impl ExprWhile {
4943 pub const INDEX_WHILE_KW: usize = 0;
4944 pub const INDEX_CONDITION: usize = 1;
4945 pub const INDEX_BODY: usize = 2;
4946 pub fn new_green(
4947 db: &dyn SyntaxGroup,
4948 while_kw: TerminalWhileGreen,
4949 condition: ConditionGreen,
4950 body: ExprBlockGreen,
4951 ) -> ExprWhileGreen {
4952 let children: Vec<GreenId> = vec![while_kw.0, condition.0, body.0];
4953 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
4954 ExprWhileGreen(
4955 Arc::new(GreenNode {
4956 kind: SyntaxKind::ExprWhile,
4957 details: GreenNodeDetails::Node { children, width },
4958 })
4959 .intern(db),
4960 )
4961 }
4962}
4963impl ExprWhile {
4964 pub fn while_kw(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
4965 TerminalWhile::from_syntax_node(db, self.children[0].clone())
4966 }
4967 pub fn condition(&self, db: &dyn SyntaxGroup) -> Condition {
4968 Condition::from_syntax_node(db, self.children[1].clone())
4969 }
4970 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
4971 ExprBlock::from_syntax_node(db, self.children[2].clone())
4972 }
4973}
4974#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4975pub struct ExprWhilePtr(pub SyntaxStablePtrId);
4976impl ExprWhilePtr {}
4977impl TypedStablePtr for ExprWhilePtr {
4978 type SyntaxNode = ExprWhile;
4979 fn untyped(&self) -> SyntaxStablePtrId {
4980 self.0
4981 }
4982 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprWhile {
4983 ExprWhile::from_syntax_node(db, self.0.lookup(db))
4984 }
4985}
4986impl From<ExprWhilePtr> for SyntaxStablePtrId {
4987 fn from(ptr: ExprWhilePtr) -> Self {
4988 ptr.untyped()
4989 }
4990}
4991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
4992pub struct ExprWhileGreen(pub GreenId);
4993impl TypedSyntaxNode for ExprWhile {
4994 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprWhile);
4995 type StablePtr = ExprWhilePtr;
4996 type Green = ExprWhileGreen;
4997 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
4998 ExprWhileGreen(
4999 Arc::new(GreenNode {
5000 kind: SyntaxKind::ExprWhile,
5001 details: GreenNodeDetails::Node {
5002 children: vec![
5003 TerminalWhile::missing(db).0,
5004 Condition::missing(db).0,
5005 ExprBlock::missing(db).0,
5006 ],
5007 width: TextWidth::default(),
5008 },
5009 })
5010 .intern(db),
5011 )
5012 }
5013 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5014 let kind = node.kind(db);
5015 assert_eq!(
5016 kind,
5017 SyntaxKind::ExprWhile,
5018 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5019 kind,
5020 SyntaxKind::ExprWhile
5021 );
5022 let children = db.get_children(node.clone());
5023 Self { node, children }
5024 }
5025 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5026 let kind = node.kind(db);
5027 if kind == SyntaxKind::ExprWhile { Some(Self::from_syntax_node(db, node)) } else { None }
5028 }
5029 fn as_syntax_node(&self) -> SyntaxNode {
5030 self.node.clone()
5031 }
5032 fn stable_ptr(&self) -> Self::StablePtr {
5033 ExprWhilePtr(self.node.0.stable_ptr)
5034 }
5035}
5036impl From<&ExprWhile> for SyntaxStablePtrId {
5037 fn from(node: &ExprWhile) -> Self {
5038 node.stable_ptr().untyped()
5039 }
5040}
5041#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5042pub struct ExprFor {
5043 node: SyntaxNode,
5044 children: Arc<[SyntaxNode]>,
5045}
5046impl ExprFor {
5047 pub const INDEX_FOR_KW: usize = 0;
5048 pub const INDEX_PATTERN: usize = 1;
5049 pub const INDEX_IDENTIFIER: usize = 2;
5050 pub const INDEX_EXPR: usize = 3;
5051 pub const INDEX_BODY: usize = 4;
5052 pub fn new_green(
5053 db: &dyn SyntaxGroup,
5054 for_kw: TerminalForGreen,
5055 pattern: PatternGreen,
5056 identifier: TerminalIdentifierGreen,
5057 expr: ExprGreen,
5058 body: ExprBlockGreen,
5059 ) -> ExprForGreen {
5060 let children: Vec<GreenId> = vec![for_kw.0, pattern.0, identifier.0, expr.0, body.0];
5061 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5062 ExprForGreen(
5063 Arc::new(GreenNode {
5064 kind: SyntaxKind::ExprFor,
5065 details: GreenNodeDetails::Node { children, width },
5066 })
5067 .intern(db),
5068 )
5069 }
5070}
5071impl ExprFor {
5072 pub fn for_kw(&self, db: &dyn SyntaxGroup) -> TerminalFor {
5073 TerminalFor::from_syntax_node(db, self.children[0].clone())
5074 }
5075 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
5076 Pattern::from_syntax_node(db, self.children[1].clone())
5077 }
5078 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
5079 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
5080 }
5081 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5082 Expr::from_syntax_node(db, self.children[3].clone())
5083 }
5084 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
5085 ExprBlock::from_syntax_node(db, self.children[4].clone())
5086 }
5087}
5088#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5089pub struct ExprForPtr(pub SyntaxStablePtrId);
5090impl ExprForPtr {
5091 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
5092 let ptr = self.0.lookup_intern(db);
5093 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5094 PatternGreen(key_fields[0])
5095 } else {
5096 panic!("Unexpected key field query on root.");
5097 }
5098 }
5099 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
5100 let ptr = self.0.lookup_intern(db);
5101 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
5102 TerminalIdentifierGreen(key_fields[1])
5103 } else {
5104 panic!("Unexpected key field query on root.");
5105 }
5106 }
5107}
5108impl TypedStablePtr for ExprForPtr {
5109 type SyntaxNode = ExprFor;
5110 fn untyped(&self) -> SyntaxStablePtrId {
5111 self.0
5112 }
5113 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFor {
5114 ExprFor::from_syntax_node(db, self.0.lookup(db))
5115 }
5116}
5117impl From<ExprForPtr> for SyntaxStablePtrId {
5118 fn from(ptr: ExprForPtr) -> Self {
5119 ptr.untyped()
5120 }
5121}
5122#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5123pub struct ExprForGreen(pub GreenId);
5124impl TypedSyntaxNode for ExprFor {
5125 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFor);
5126 type StablePtr = ExprForPtr;
5127 type Green = ExprForGreen;
5128 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5129 ExprForGreen(
5130 Arc::new(GreenNode {
5131 kind: SyntaxKind::ExprFor,
5132 details: GreenNodeDetails::Node {
5133 children: vec![
5134 TerminalFor::missing(db).0,
5135 Pattern::missing(db).0,
5136 TerminalIdentifier::missing(db).0,
5137 Expr::missing(db).0,
5138 ExprBlock::missing(db).0,
5139 ],
5140 width: TextWidth::default(),
5141 },
5142 })
5143 .intern(db),
5144 )
5145 }
5146 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5147 let kind = node.kind(db);
5148 assert_eq!(
5149 kind,
5150 SyntaxKind::ExprFor,
5151 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5152 kind,
5153 SyntaxKind::ExprFor
5154 );
5155 let children = db.get_children(node.clone());
5156 Self { node, children }
5157 }
5158 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5159 let kind = node.kind(db);
5160 if kind == SyntaxKind::ExprFor { Some(Self::from_syntax_node(db, node)) } else { None }
5161 }
5162 fn as_syntax_node(&self) -> SyntaxNode {
5163 self.node.clone()
5164 }
5165 fn stable_ptr(&self) -> Self::StablePtr {
5166 ExprForPtr(self.node.0.stable_ptr)
5167 }
5168}
5169impl From<&ExprFor> for SyntaxStablePtrId {
5170 fn from(node: &ExprFor) -> Self {
5171 node.stable_ptr().untyped()
5172 }
5173}
5174#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5175pub struct ElseClause {
5176 node: SyntaxNode,
5177 children: Arc<[SyntaxNode]>,
5178}
5179impl ElseClause {
5180 pub const INDEX_ELSE_KW: usize = 0;
5181 pub const INDEX_ELSE_BLOCK_OR_IF: usize = 1;
5182 pub fn new_green(
5183 db: &dyn SyntaxGroup,
5184 else_kw: TerminalElseGreen,
5185 else_block_or_if: BlockOrIfGreen,
5186 ) -> ElseClauseGreen {
5187 let children: Vec<GreenId> = vec![else_kw.0, else_block_or_if.0];
5188 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5189 ElseClauseGreen(
5190 Arc::new(GreenNode {
5191 kind: SyntaxKind::ElseClause,
5192 details: GreenNodeDetails::Node { children, width },
5193 })
5194 .intern(db),
5195 )
5196 }
5197}
5198impl ElseClause {
5199 pub fn else_kw(&self, db: &dyn SyntaxGroup) -> TerminalElse {
5200 TerminalElse::from_syntax_node(db, self.children[0].clone())
5201 }
5202 pub fn else_block_or_if(&self, db: &dyn SyntaxGroup) -> BlockOrIf {
5203 BlockOrIf::from_syntax_node(db, self.children[1].clone())
5204 }
5205}
5206#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5207pub struct ElseClausePtr(pub SyntaxStablePtrId);
5208impl ElseClausePtr {}
5209impl TypedStablePtr for ElseClausePtr {
5210 type SyntaxNode = ElseClause;
5211 fn untyped(&self) -> SyntaxStablePtrId {
5212 self.0
5213 }
5214 fn lookup(&self, db: &dyn SyntaxGroup) -> ElseClause {
5215 ElseClause::from_syntax_node(db, self.0.lookup(db))
5216 }
5217}
5218impl From<ElseClausePtr> for SyntaxStablePtrId {
5219 fn from(ptr: ElseClausePtr) -> Self {
5220 ptr.untyped()
5221 }
5222}
5223#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5224pub struct ElseClauseGreen(pub GreenId);
5225impl TypedSyntaxNode for ElseClause {
5226 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ElseClause);
5227 type StablePtr = ElseClausePtr;
5228 type Green = ElseClauseGreen;
5229 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5230 ElseClauseGreen(
5231 Arc::new(GreenNode {
5232 kind: SyntaxKind::ElseClause,
5233 details: GreenNodeDetails::Node {
5234 children: vec![TerminalElse::missing(db).0, BlockOrIf::missing(db).0],
5235 width: TextWidth::default(),
5236 },
5237 })
5238 .intern(db),
5239 )
5240 }
5241 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5242 let kind = node.kind(db);
5243 assert_eq!(
5244 kind,
5245 SyntaxKind::ElseClause,
5246 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5247 kind,
5248 SyntaxKind::ElseClause
5249 );
5250 let children = db.get_children(node.clone());
5251 Self { node, children }
5252 }
5253 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5254 let kind = node.kind(db);
5255 if kind == SyntaxKind::ElseClause { Some(Self::from_syntax_node(db, node)) } else { None }
5256 }
5257 fn as_syntax_node(&self) -> SyntaxNode {
5258 self.node.clone()
5259 }
5260 fn stable_ptr(&self) -> Self::StablePtr {
5261 ElseClausePtr(self.node.0.stable_ptr)
5262 }
5263}
5264impl From<&ElseClause> for SyntaxStablePtrId {
5265 fn from(node: &ElseClause) -> Self {
5266 node.stable_ptr().untyped()
5267 }
5268}
5269#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5270pub enum OptionElseClause {
5271 Empty(OptionElseClauseEmpty),
5272 ElseClause(ElseClause),
5273}
5274#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5275pub struct OptionElseClausePtr(pub SyntaxStablePtrId);
5276impl TypedStablePtr for OptionElseClausePtr {
5277 type SyntaxNode = OptionElseClause;
5278 fn untyped(&self) -> SyntaxStablePtrId {
5279 self.0
5280 }
5281 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClause {
5282 OptionElseClause::from_syntax_node(db, self.0.lookup(db))
5283 }
5284}
5285impl From<OptionElseClausePtr> for SyntaxStablePtrId {
5286 fn from(ptr: OptionElseClausePtr) -> Self {
5287 ptr.untyped()
5288 }
5289}
5290impl From<OptionElseClauseEmptyPtr> for OptionElseClausePtr {
5291 fn from(value: OptionElseClauseEmptyPtr) -> Self {
5292 Self(value.0)
5293 }
5294}
5295impl From<ElseClausePtr> for OptionElseClausePtr {
5296 fn from(value: ElseClausePtr) -> Self {
5297 Self(value.0)
5298 }
5299}
5300impl From<OptionElseClauseEmptyGreen> for OptionElseClauseGreen {
5301 fn from(value: OptionElseClauseEmptyGreen) -> Self {
5302 Self(value.0)
5303 }
5304}
5305impl From<ElseClauseGreen> for OptionElseClauseGreen {
5306 fn from(value: ElseClauseGreen) -> Self {
5307 Self(value.0)
5308 }
5309}
5310#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5311pub struct OptionElseClauseGreen(pub GreenId);
5312impl TypedSyntaxNode for OptionElseClause {
5313 const OPTIONAL_KIND: Option<SyntaxKind> = None;
5314 type StablePtr = OptionElseClausePtr;
5315 type Green = OptionElseClauseGreen;
5316 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5317 panic!("No missing variant.");
5318 }
5319 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5320 let kind = node.kind(db);
5321 match kind {
5322 SyntaxKind::OptionElseClauseEmpty => {
5323 OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node))
5324 }
5325 SyntaxKind::ElseClause => {
5326 OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node))
5327 }
5328 _ => panic!(
5329 "Unexpected syntax kind {:?} when constructing {}.",
5330 kind, "OptionElseClause"
5331 ),
5332 }
5333 }
5334 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5335 let kind = node.kind(db);
5336 match kind {
5337 SyntaxKind::OptionElseClauseEmpty => {
5338 Some(OptionElseClause::Empty(OptionElseClauseEmpty::from_syntax_node(db, node)))
5339 }
5340 SyntaxKind::ElseClause => {
5341 Some(OptionElseClause::ElseClause(ElseClause::from_syntax_node(db, node)))
5342 }
5343 _ => None,
5344 }
5345 }
5346 fn as_syntax_node(&self) -> SyntaxNode {
5347 match self {
5348 OptionElseClause::Empty(x) => x.as_syntax_node(),
5349 OptionElseClause::ElseClause(x) => x.as_syntax_node(),
5350 }
5351 }
5352 fn stable_ptr(&self) -> Self::StablePtr {
5353 OptionElseClausePtr(self.as_syntax_node().0.stable_ptr)
5354 }
5355}
5356impl From<&OptionElseClause> for SyntaxStablePtrId {
5357 fn from(node: &OptionElseClause) -> Self {
5358 node.stable_ptr().untyped()
5359 }
5360}
5361impl OptionElseClause {
5362 pub fn is_variant(kind: SyntaxKind) -> bool {
5364 matches!(kind, SyntaxKind::OptionElseClauseEmpty | SyntaxKind::ElseClause)
5365 }
5366}
5367#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5368pub struct OptionElseClauseEmpty {
5369 node: SyntaxNode,
5370 children: Arc<[SyntaxNode]>,
5371}
5372impl OptionElseClauseEmpty {
5373 pub fn new_green(db: &dyn SyntaxGroup) -> OptionElseClauseEmptyGreen {
5374 let children: Vec<GreenId> = vec![];
5375 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5376 OptionElseClauseEmptyGreen(
5377 Arc::new(GreenNode {
5378 kind: SyntaxKind::OptionElseClauseEmpty,
5379 details: GreenNodeDetails::Node { children, width },
5380 })
5381 .intern(db),
5382 )
5383 }
5384}
5385impl OptionElseClauseEmpty {}
5386#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5387pub struct OptionElseClauseEmptyPtr(pub SyntaxStablePtrId);
5388impl OptionElseClauseEmptyPtr {}
5389impl TypedStablePtr for OptionElseClauseEmptyPtr {
5390 type SyntaxNode = OptionElseClauseEmpty;
5391 fn untyped(&self) -> SyntaxStablePtrId {
5392 self.0
5393 }
5394 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionElseClauseEmpty {
5395 OptionElseClauseEmpty::from_syntax_node(db, self.0.lookup(db))
5396 }
5397}
5398impl From<OptionElseClauseEmptyPtr> for SyntaxStablePtrId {
5399 fn from(ptr: OptionElseClauseEmptyPtr) -> Self {
5400 ptr.untyped()
5401 }
5402}
5403#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5404pub struct OptionElseClauseEmptyGreen(pub GreenId);
5405impl TypedSyntaxNode for OptionElseClauseEmpty {
5406 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionElseClauseEmpty);
5407 type StablePtr = OptionElseClauseEmptyPtr;
5408 type Green = OptionElseClauseEmptyGreen;
5409 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5410 OptionElseClauseEmptyGreen(
5411 Arc::new(GreenNode {
5412 kind: SyntaxKind::OptionElseClauseEmpty,
5413 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
5414 })
5415 .intern(db),
5416 )
5417 }
5418 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5419 let kind = node.kind(db);
5420 assert_eq!(
5421 kind,
5422 SyntaxKind::OptionElseClauseEmpty,
5423 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5424 kind,
5425 SyntaxKind::OptionElseClauseEmpty
5426 );
5427 let children = db.get_children(node.clone());
5428 Self { node, children }
5429 }
5430 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5431 let kind = node.kind(db);
5432 if kind == SyntaxKind::OptionElseClauseEmpty {
5433 Some(Self::from_syntax_node(db, node))
5434 } else {
5435 None
5436 }
5437 }
5438 fn as_syntax_node(&self) -> SyntaxNode {
5439 self.node.clone()
5440 }
5441 fn stable_ptr(&self) -> Self::StablePtr {
5442 OptionElseClauseEmptyPtr(self.node.0.stable_ptr)
5443 }
5444}
5445impl From<&OptionElseClauseEmpty> for SyntaxStablePtrId {
5446 fn from(node: &OptionElseClauseEmpty) -> Self {
5447 node.stable_ptr().untyped()
5448 }
5449}
5450#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5451pub struct ExprErrorPropagate {
5452 node: SyntaxNode,
5453 children: Arc<[SyntaxNode]>,
5454}
5455impl ExprErrorPropagate {
5456 pub const INDEX_EXPR: usize = 0;
5457 pub const INDEX_OP: usize = 1;
5458 pub fn new_green(
5459 db: &dyn SyntaxGroup,
5460 expr: ExprGreen,
5461 op: TerminalQuestionMarkGreen,
5462 ) -> ExprErrorPropagateGreen {
5463 let children: Vec<GreenId> = vec![expr.0, op.0];
5464 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5465 ExprErrorPropagateGreen(
5466 Arc::new(GreenNode {
5467 kind: SyntaxKind::ExprErrorPropagate,
5468 details: GreenNodeDetails::Node { children, width },
5469 })
5470 .intern(db),
5471 )
5472 }
5473}
5474impl ExprErrorPropagate {
5475 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5476 Expr::from_syntax_node(db, self.children[0].clone())
5477 }
5478 pub fn op(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
5479 TerminalQuestionMark::from_syntax_node(db, self.children[1].clone())
5480 }
5481}
5482#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5483pub struct ExprErrorPropagatePtr(pub SyntaxStablePtrId);
5484impl ExprErrorPropagatePtr {}
5485impl TypedStablePtr for ExprErrorPropagatePtr {
5486 type SyntaxNode = ExprErrorPropagate;
5487 fn untyped(&self) -> SyntaxStablePtrId {
5488 self.0
5489 }
5490 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprErrorPropagate {
5491 ExprErrorPropagate::from_syntax_node(db, self.0.lookup(db))
5492 }
5493}
5494impl From<ExprErrorPropagatePtr> for SyntaxStablePtrId {
5495 fn from(ptr: ExprErrorPropagatePtr) -> Self {
5496 ptr.untyped()
5497 }
5498}
5499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5500pub struct ExprErrorPropagateGreen(pub GreenId);
5501impl TypedSyntaxNode for ExprErrorPropagate {
5502 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprErrorPropagate);
5503 type StablePtr = ExprErrorPropagatePtr;
5504 type Green = ExprErrorPropagateGreen;
5505 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5506 ExprErrorPropagateGreen(
5507 Arc::new(GreenNode {
5508 kind: SyntaxKind::ExprErrorPropagate,
5509 details: GreenNodeDetails::Node {
5510 children: vec![Expr::missing(db).0, TerminalQuestionMark::missing(db).0],
5511 width: TextWidth::default(),
5512 },
5513 })
5514 .intern(db),
5515 )
5516 }
5517 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5518 let kind = node.kind(db);
5519 assert_eq!(
5520 kind,
5521 SyntaxKind::ExprErrorPropagate,
5522 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5523 kind,
5524 SyntaxKind::ExprErrorPropagate
5525 );
5526 let children = db.get_children(node.clone());
5527 Self { node, children }
5528 }
5529 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5530 let kind = node.kind(db);
5531 if kind == SyntaxKind::ExprErrorPropagate {
5532 Some(Self::from_syntax_node(db, node))
5533 } else {
5534 None
5535 }
5536 }
5537 fn as_syntax_node(&self) -> SyntaxNode {
5538 self.node.clone()
5539 }
5540 fn stable_ptr(&self) -> Self::StablePtr {
5541 ExprErrorPropagatePtr(self.node.0.stable_ptr)
5542 }
5543}
5544impl From<&ExprErrorPropagate> for SyntaxStablePtrId {
5545 fn from(node: &ExprErrorPropagate) -> Self {
5546 node.stable_ptr().untyped()
5547 }
5548}
5549#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5550pub struct ExprIndexed {
5551 node: SyntaxNode,
5552 children: Arc<[SyntaxNode]>,
5553}
5554impl ExprIndexed {
5555 pub const INDEX_EXPR: usize = 0;
5556 pub const INDEX_LBRACK: usize = 1;
5557 pub const INDEX_INDEX_EXPR: usize = 2;
5558 pub const INDEX_RBRACK: usize = 3;
5559 pub fn new_green(
5560 db: &dyn SyntaxGroup,
5561 expr: ExprGreen,
5562 lbrack: TerminalLBrackGreen,
5563 index_expr: ExprGreen,
5564 rbrack: TerminalRBrackGreen,
5565 ) -> ExprIndexedGreen {
5566 let children: Vec<GreenId> = vec![expr.0, lbrack.0, index_expr.0, rbrack.0];
5567 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5568 ExprIndexedGreen(
5569 Arc::new(GreenNode {
5570 kind: SyntaxKind::ExprIndexed,
5571 details: GreenNodeDetails::Node { children, width },
5572 })
5573 .intern(db),
5574 )
5575 }
5576}
5577impl ExprIndexed {
5578 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
5579 Expr::from_syntax_node(db, self.children[0].clone())
5580 }
5581 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5582 TerminalLBrack::from_syntax_node(db, self.children[1].clone())
5583 }
5584 pub fn index_expr(&self, db: &dyn SyntaxGroup) -> Expr {
5585 Expr::from_syntax_node(db, self.children[2].clone())
5586 }
5587 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5588 TerminalRBrack::from_syntax_node(db, self.children[3].clone())
5589 }
5590}
5591#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5592pub struct ExprIndexedPtr(pub SyntaxStablePtrId);
5593impl ExprIndexedPtr {}
5594impl TypedStablePtr for ExprIndexedPtr {
5595 type SyntaxNode = ExprIndexed;
5596 fn untyped(&self) -> SyntaxStablePtrId {
5597 self.0
5598 }
5599 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprIndexed {
5600 ExprIndexed::from_syntax_node(db, self.0.lookup(db))
5601 }
5602}
5603impl From<ExprIndexedPtr> for SyntaxStablePtrId {
5604 fn from(ptr: ExprIndexedPtr) -> Self {
5605 ptr.untyped()
5606 }
5607}
5608#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5609pub struct ExprIndexedGreen(pub GreenId);
5610impl TypedSyntaxNode for ExprIndexed {
5611 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprIndexed);
5612 type StablePtr = ExprIndexedPtr;
5613 type Green = ExprIndexedGreen;
5614 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5615 ExprIndexedGreen(
5616 Arc::new(GreenNode {
5617 kind: SyntaxKind::ExprIndexed,
5618 details: GreenNodeDetails::Node {
5619 children: vec![
5620 Expr::missing(db).0,
5621 TerminalLBrack::missing(db).0,
5622 Expr::missing(db).0,
5623 TerminalRBrack::missing(db).0,
5624 ],
5625 width: TextWidth::default(),
5626 },
5627 })
5628 .intern(db),
5629 )
5630 }
5631 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5632 let kind = node.kind(db);
5633 assert_eq!(
5634 kind,
5635 SyntaxKind::ExprIndexed,
5636 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5637 kind,
5638 SyntaxKind::ExprIndexed
5639 );
5640 let children = db.get_children(node.clone());
5641 Self { node, children }
5642 }
5643 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5644 let kind = node.kind(db);
5645 if kind == SyntaxKind::ExprIndexed { Some(Self::from_syntax_node(db, node)) } else { None }
5646 }
5647 fn as_syntax_node(&self) -> SyntaxNode {
5648 self.node.clone()
5649 }
5650 fn stable_ptr(&self) -> Self::StablePtr {
5651 ExprIndexedPtr(self.node.0.stable_ptr)
5652 }
5653}
5654impl From<&ExprIndexed> for SyntaxStablePtrId {
5655 fn from(node: &ExprIndexed) -> Self {
5656 node.stable_ptr().untyped()
5657 }
5658}
5659#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5660pub struct ExprInlineMacro {
5661 node: SyntaxNode,
5662 children: Arc<[SyntaxNode]>,
5663}
5664impl ExprInlineMacro {
5665 pub const INDEX_PATH: usize = 0;
5666 pub const INDEX_BANG: usize = 1;
5667 pub const INDEX_ARGUMENTS: usize = 2;
5668 pub fn new_green(
5669 db: &dyn SyntaxGroup,
5670 path: ExprPathGreen,
5671 bang: TerminalNotGreen,
5672 arguments: WrappedArgListGreen,
5673 ) -> ExprInlineMacroGreen {
5674 let children: Vec<GreenId> = vec![path.0, bang.0, arguments.0];
5675 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5676 ExprInlineMacroGreen(
5677 Arc::new(GreenNode {
5678 kind: SyntaxKind::ExprInlineMacro,
5679 details: GreenNodeDetails::Node { children, width },
5680 })
5681 .intern(db),
5682 )
5683 }
5684}
5685impl ExprInlineMacro {
5686 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
5687 ExprPath::from_syntax_node(db, self.children[0].clone())
5688 }
5689 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
5690 TerminalNot::from_syntax_node(db, self.children[1].clone())
5691 }
5692 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
5693 WrappedArgList::from_syntax_node(db, self.children[2].clone())
5694 }
5695}
5696#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5697pub struct ExprInlineMacroPtr(pub SyntaxStablePtrId);
5698impl ExprInlineMacroPtr {}
5699impl TypedStablePtr for ExprInlineMacroPtr {
5700 type SyntaxNode = ExprInlineMacro;
5701 fn untyped(&self) -> SyntaxStablePtrId {
5702 self.0
5703 }
5704 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprInlineMacro {
5705 ExprInlineMacro::from_syntax_node(db, self.0.lookup(db))
5706 }
5707}
5708impl From<ExprInlineMacroPtr> for SyntaxStablePtrId {
5709 fn from(ptr: ExprInlineMacroPtr) -> Self {
5710 ptr.untyped()
5711 }
5712}
5713#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5714pub struct ExprInlineMacroGreen(pub GreenId);
5715impl TypedSyntaxNode for ExprInlineMacro {
5716 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprInlineMacro);
5717 type StablePtr = ExprInlineMacroPtr;
5718 type Green = ExprInlineMacroGreen;
5719 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5720 ExprInlineMacroGreen(
5721 Arc::new(GreenNode {
5722 kind: SyntaxKind::ExprInlineMacro,
5723 details: GreenNodeDetails::Node {
5724 children: vec![
5725 ExprPath::missing(db).0,
5726 TerminalNot::missing(db).0,
5727 WrappedArgList::missing(db).0,
5728 ],
5729 width: TextWidth::default(),
5730 },
5731 })
5732 .intern(db),
5733 )
5734 }
5735 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5736 let kind = node.kind(db);
5737 assert_eq!(
5738 kind,
5739 SyntaxKind::ExprInlineMacro,
5740 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5741 kind,
5742 SyntaxKind::ExprInlineMacro
5743 );
5744 let children = db.get_children(node.clone());
5745 Self { node, children }
5746 }
5747 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5748 let kind = node.kind(db);
5749 if kind == SyntaxKind::ExprInlineMacro {
5750 Some(Self::from_syntax_node(db, node))
5751 } else {
5752 None
5753 }
5754 }
5755 fn as_syntax_node(&self) -> SyntaxNode {
5756 self.node.clone()
5757 }
5758 fn stable_ptr(&self) -> Self::StablePtr {
5759 ExprInlineMacroPtr(self.node.0.stable_ptr)
5760 }
5761}
5762impl From<&ExprInlineMacro> for SyntaxStablePtrId {
5763 fn from(node: &ExprInlineMacro) -> Self {
5764 node.stable_ptr().untyped()
5765 }
5766}
5767#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5768pub struct ExprFixedSizeArray {
5769 node: SyntaxNode,
5770 children: Arc<[SyntaxNode]>,
5771}
5772impl ExprFixedSizeArray {
5773 pub const INDEX_LBRACK: usize = 0;
5774 pub const INDEX_EXPRS: usize = 1;
5775 pub const INDEX_SIZE: usize = 2;
5776 pub const INDEX_RBRACK: usize = 3;
5777 pub fn new_green(
5778 db: &dyn SyntaxGroup,
5779 lbrack: TerminalLBrackGreen,
5780 exprs: ExprListGreen,
5781 size: OptionFixedSizeArraySizeGreen,
5782 rbrack: TerminalRBrackGreen,
5783 ) -> ExprFixedSizeArrayGreen {
5784 let children: Vec<GreenId> = vec![lbrack.0, exprs.0, size.0, rbrack.0];
5785 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5786 ExprFixedSizeArrayGreen(
5787 Arc::new(GreenNode {
5788 kind: SyntaxKind::ExprFixedSizeArray,
5789 details: GreenNodeDetails::Node { children, width },
5790 })
5791 .intern(db),
5792 )
5793 }
5794}
5795impl ExprFixedSizeArray {
5796 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
5797 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
5798 }
5799 pub fn exprs(&self, db: &dyn SyntaxGroup) -> ExprList {
5800 ExprList::from_syntax_node(db, self.children[1].clone())
5801 }
5802 pub fn size(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
5803 OptionFixedSizeArraySize::from_syntax_node(db, self.children[2].clone())
5804 }
5805 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
5806 TerminalRBrack::from_syntax_node(db, self.children[3].clone())
5807 }
5808}
5809#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5810pub struct ExprFixedSizeArrayPtr(pub SyntaxStablePtrId);
5811impl ExprFixedSizeArrayPtr {}
5812impl TypedStablePtr for ExprFixedSizeArrayPtr {
5813 type SyntaxNode = ExprFixedSizeArray;
5814 fn untyped(&self) -> SyntaxStablePtrId {
5815 self.0
5816 }
5817 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprFixedSizeArray {
5818 ExprFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
5819 }
5820}
5821impl From<ExprFixedSizeArrayPtr> for SyntaxStablePtrId {
5822 fn from(ptr: ExprFixedSizeArrayPtr) -> Self {
5823 ptr.untyped()
5824 }
5825}
5826#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5827pub struct ExprFixedSizeArrayGreen(pub GreenId);
5828impl TypedSyntaxNode for ExprFixedSizeArray {
5829 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprFixedSizeArray);
5830 type StablePtr = ExprFixedSizeArrayPtr;
5831 type Green = ExprFixedSizeArrayGreen;
5832 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5833 ExprFixedSizeArrayGreen(
5834 Arc::new(GreenNode {
5835 kind: SyntaxKind::ExprFixedSizeArray,
5836 details: GreenNodeDetails::Node {
5837 children: vec![
5838 TerminalLBrack::missing(db).0,
5839 ExprList::missing(db).0,
5840 OptionFixedSizeArraySize::missing(db).0,
5841 TerminalRBrack::missing(db).0,
5842 ],
5843 width: TextWidth::default(),
5844 },
5845 })
5846 .intern(db),
5847 )
5848 }
5849 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5850 let kind = node.kind(db);
5851 assert_eq!(
5852 kind,
5853 SyntaxKind::ExprFixedSizeArray,
5854 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5855 kind,
5856 SyntaxKind::ExprFixedSizeArray
5857 );
5858 let children = db.get_children(node.clone());
5859 Self { node, children }
5860 }
5861 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5862 let kind = node.kind(db);
5863 if kind == SyntaxKind::ExprFixedSizeArray {
5864 Some(Self::from_syntax_node(db, node))
5865 } else {
5866 None
5867 }
5868 }
5869 fn as_syntax_node(&self) -> SyntaxNode {
5870 self.node.clone()
5871 }
5872 fn stable_ptr(&self) -> Self::StablePtr {
5873 ExprFixedSizeArrayPtr(self.node.0.stable_ptr)
5874 }
5875}
5876impl From<&ExprFixedSizeArray> for SyntaxStablePtrId {
5877 fn from(node: &ExprFixedSizeArray) -> Self {
5878 node.stable_ptr().untyped()
5879 }
5880}
5881#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5882pub struct FixedSizeArraySize {
5883 node: SyntaxNode,
5884 children: Arc<[SyntaxNode]>,
5885}
5886impl FixedSizeArraySize {
5887 pub const INDEX_SEMICOLON: usize = 0;
5888 pub const INDEX_SIZE: usize = 1;
5889 pub fn new_green(
5890 db: &dyn SyntaxGroup,
5891 semicolon: TerminalSemicolonGreen,
5892 size: ExprGreen,
5893 ) -> FixedSizeArraySizeGreen {
5894 let children: Vec<GreenId> = vec![semicolon.0, size.0];
5895 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
5896 FixedSizeArraySizeGreen(
5897 Arc::new(GreenNode {
5898 kind: SyntaxKind::FixedSizeArraySize,
5899 details: GreenNodeDetails::Node { children, width },
5900 })
5901 .intern(db),
5902 )
5903 }
5904}
5905impl FixedSizeArraySize {
5906 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
5907 TerminalSemicolon::from_syntax_node(db, self.children[0].clone())
5908 }
5909 pub fn size(&self, db: &dyn SyntaxGroup) -> Expr {
5910 Expr::from_syntax_node(db, self.children[1].clone())
5911 }
5912}
5913#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5914pub struct FixedSizeArraySizePtr(pub SyntaxStablePtrId);
5915impl FixedSizeArraySizePtr {}
5916impl TypedStablePtr for FixedSizeArraySizePtr {
5917 type SyntaxNode = FixedSizeArraySize;
5918 fn untyped(&self) -> SyntaxStablePtrId {
5919 self.0
5920 }
5921 fn lookup(&self, db: &dyn SyntaxGroup) -> FixedSizeArraySize {
5922 FixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
5923 }
5924}
5925impl From<FixedSizeArraySizePtr> for SyntaxStablePtrId {
5926 fn from(ptr: FixedSizeArraySizePtr) -> Self {
5927 ptr.untyped()
5928 }
5929}
5930#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5931pub struct FixedSizeArraySizeGreen(pub GreenId);
5932impl TypedSyntaxNode for FixedSizeArraySize {
5933 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FixedSizeArraySize);
5934 type StablePtr = FixedSizeArraySizePtr;
5935 type Green = FixedSizeArraySizeGreen;
5936 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
5937 FixedSizeArraySizeGreen(
5938 Arc::new(GreenNode {
5939 kind: SyntaxKind::FixedSizeArraySize,
5940 details: GreenNodeDetails::Node {
5941 children: vec![TerminalSemicolon::missing(db).0, Expr::missing(db).0],
5942 width: TextWidth::default(),
5943 },
5944 })
5945 .intern(db),
5946 )
5947 }
5948 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
5949 let kind = node.kind(db);
5950 assert_eq!(
5951 kind,
5952 SyntaxKind::FixedSizeArraySize,
5953 "Unexpected SyntaxKind {:?}. Expected {:?}.",
5954 kind,
5955 SyntaxKind::FixedSizeArraySize
5956 );
5957 let children = db.get_children(node.clone());
5958 Self { node, children }
5959 }
5960 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
5961 let kind = node.kind(db);
5962 if kind == SyntaxKind::FixedSizeArraySize {
5963 Some(Self::from_syntax_node(db, node))
5964 } else {
5965 None
5966 }
5967 }
5968 fn as_syntax_node(&self) -> SyntaxNode {
5969 self.node.clone()
5970 }
5971 fn stable_ptr(&self) -> Self::StablePtr {
5972 FixedSizeArraySizePtr(self.node.0.stable_ptr)
5973 }
5974}
5975impl From<&FixedSizeArraySize> for SyntaxStablePtrId {
5976 fn from(node: &FixedSizeArraySize) -> Self {
5977 node.stable_ptr().untyped()
5978 }
5979}
5980#[derive(Clone, Debug, Eq, Hash, PartialEq)]
5981pub enum OptionFixedSizeArraySize {
5982 Empty(OptionFixedSizeArraySizeEmpty),
5983 FixedSizeArraySize(FixedSizeArraySize),
5984}
5985#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
5986pub struct OptionFixedSizeArraySizePtr(pub SyntaxStablePtrId);
5987impl TypedStablePtr for OptionFixedSizeArraySizePtr {
5988 type SyntaxNode = OptionFixedSizeArraySize;
5989 fn untyped(&self) -> SyntaxStablePtrId {
5990 self.0
5991 }
5992 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySize {
5993 OptionFixedSizeArraySize::from_syntax_node(db, self.0.lookup(db))
5994 }
5995}
5996impl From<OptionFixedSizeArraySizePtr> for SyntaxStablePtrId {
5997 fn from(ptr: OptionFixedSizeArraySizePtr) -> Self {
5998 ptr.untyped()
5999 }
6000}
6001impl From<OptionFixedSizeArraySizeEmptyPtr> for OptionFixedSizeArraySizePtr {
6002 fn from(value: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6003 Self(value.0)
6004 }
6005}
6006impl From<FixedSizeArraySizePtr> for OptionFixedSizeArraySizePtr {
6007 fn from(value: FixedSizeArraySizePtr) -> Self {
6008 Self(value.0)
6009 }
6010}
6011impl From<OptionFixedSizeArraySizeEmptyGreen> for OptionFixedSizeArraySizeGreen {
6012 fn from(value: OptionFixedSizeArraySizeEmptyGreen) -> Self {
6013 Self(value.0)
6014 }
6015}
6016impl From<FixedSizeArraySizeGreen> for OptionFixedSizeArraySizeGreen {
6017 fn from(value: FixedSizeArraySizeGreen) -> Self {
6018 Self(value.0)
6019 }
6020}
6021#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6022pub struct OptionFixedSizeArraySizeGreen(pub GreenId);
6023impl TypedSyntaxNode for OptionFixedSizeArraySize {
6024 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6025 type StablePtr = OptionFixedSizeArraySizePtr;
6026 type Green = OptionFixedSizeArraySizeGreen;
6027 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6028 panic!("No missing variant.");
6029 }
6030 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6031 let kind = node.kind(db);
6032 match kind {
6033 SyntaxKind::OptionFixedSizeArraySizeEmpty => OptionFixedSizeArraySize::Empty(
6034 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6035 ),
6036 SyntaxKind::FixedSizeArraySize => OptionFixedSizeArraySize::FixedSizeArraySize(
6037 FixedSizeArraySize::from_syntax_node(db, node),
6038 ),
6039 _ => panic!(
6040 "Unexpected syntax kind {:?} when constructing {}.",
6041 kind, "OptionFixedSizeArraySize"
6042 ),
6043 }
6044 }
6045 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6046 let kind = node.kind(db);
6047 match kind {
6048 SyntaxKind::OptionFixedSizeArraySizeEmpty => Some(OptionFixedSizeArraySize::Empty(
6049 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, node),
6050 )),
6051 SyntaxKind::FixedSizeArraySize => Some(OptionFixedSizeArraySize::FixedSizeArraySize(
6052 FixedSizeArraySize::from_syntax_node(db, node),
6053 )),
6054 _ => None,
6055 }
6056 }
6057 fn as_syntax_node(&self) -> SyntaxNode {
6058 match self {
6059 OptionFixedSizeArraySize::Empty(x) => x.as_syntax_node(),
6060 OptionFixedSizeArraySize::FixedSizeArraySize(x) => x.as_syntax_node(),
6061 }
6062 }
6063 fn stable_ptr(&self) -> Self::StablePtr {
6064 OptionFixedSizeArraySizePtr(self.as_syntax_node().0.stable_ptr)
6065 }
6066}
6067impl From<&OptionFixedSizeArraySize> for SyntaxStablePtrId {
6068 fn from(node: &OptionFixedSizeArraySize) -> Self {
6069 node.stable_ptr().untyped()
6070 }
6071}
6072impl OptionFixedSizeArraySize {
6073 pub fn is_variant(kind: SyntaxKind) -> bool {
6075 matches!(kind, SyntaxKind::OptionFixedSizeArraySizeEmpty | SyntaxKind::FixedSizeArraySize)
6076 }
6077}
6078#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6079pub struct OptionFixedSizeArraySizeEmpty {
6080 node: SyntaxNode,
6081 children: Arc<[SyntaxNode]>,
6082}
6083impl OptionFixedSizeArraySizeEmpty {
6084 pub fn new_green(db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmptyGreen {
6085 let children: Vec<GreenId> = vec![];
6086 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6087 OptionFixedSizeArraySizeEmptyGreen(
6088 Arc::new(GreenNode {
6089 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6090 details: GreenNodeDetails::Node { children, width },
6091 })
6092 .intern(db),
6093 )
6094 }
6095}
6096impl OptionFixedSizeArraySizeEmpty {}
6097#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6098pub struct OptionFixedSizeArraySizeEmptyPtr(pub SyntaxStablePtrId);
6099impl OptionFixedSizeArraySizeEmptyPtr {}
6100impl TypedStablePtr for OptionFixedSizeArraySizeEmptyPtr {
6101 type SyntaxNode = OptionFixedSizeArraySizeEmpty;
6102 fn untyped(&self) -> SyntaxStablePtrId {
6103 self.0
6104 }
6105 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionFixedSizeArraySizeEmpty {
6106 OptionFixedSizeArraySizeEmpty::from_syntax_node(db, self.0.lookup(db))
6107 }
6108}
6109impl From<OptionFixedSizeArraySizeEmptyPtr> for SyntaxStablePtrId {
6110 fn from(ptr: OptionFixedSizeArraySizeEmptyPtr) -> Self {
6111 ptr.untyped()
6112 }
6113}
6114#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6115pub struct OptionFixedSizeArraySizeEmptyGreen(pub GreenId);
6116impl TypedSyntaxNode for OptionFixedSizeArraySizeEmpty {
6117 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionFixedSizeArraySizeEmpty);
6118 type StablePtr = OptionFixedSizeArraySizeEmptyPtr;
6119 type Green = OptionFixedSizeArraySizeEmptyGreen;
6120 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6121 OptionFixedSizeArraySizeEmptyGreen(
6122 Arc::new(GreenNode {
6123 kind: SyntaxKind::OptionFixedSizeArraySizeEmpty,
6124 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
6125 })
6126 .intern(db),
6127 )
6128 }
6129 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6130 let kind = node.kind(db);
6131 assert_eq!(
6132 kind,
6133 SyntaxKind::OptionFixedSizeArraySizeEmpty,
6134 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6135 kind,
6136 SyntaxKind::OptionFixedSizeArraySizeEmpty
6137 );
6138 let children = db.get_children(node.clone());
6139 Self { node, children }
6140 }
6141 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6142 let kind = node.kind(db);
6143 if kind == SyntaxKind::OptionFixedSizeArraySizeEmpty {
6144 Some(Self::from_syntax_node(db, node))
6145 } else {
6146 None
6147 }
6148 }
6149 fn as_syntax_node(&self) -> SyntaxNode {
6150 self.node.clone()
6151 }
6152 fn stable_ptr(&self) -> Self::StablePtr {
6153 OptionFixedSizeArraySizeEmptyPtr(self.node.0.stable_ptr)
6154 }
6155}
6156impl From<&OptionFixedSizeArraySizeEmpty> for SyntaxStablePtrId {
6157 fn from(node: &OptionFixedSizeArraySizeEmpty) -> Self {
6158 node.stable_ptr().untyped()
6159 }
6160}
6161#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6162pub struct ExprClosure {
6163 node: SyntaxNode,
6164 children: Arc<[SyntaxNode]>,
6165}
6166impl ExprClosure {
6167 pub const INDEX_WRAPPER: usize = 0;
6168 pub const INDEX_RET_TY: usize = 1;
6169 pub const INDEX_OPTIONAL_NO_PANIC: usize = 2;
6170 pub const INDEX_EXPR: usize = 3;
6171 pub fn new_green(
6172 db: &dyn SyntaxGroup,
6173 wrapper: ClosureParamWrapperGreen,
6174 ret_ty: OptionReturnTypeClauseGreen,
6175 optional_no_panic: OptionTerminalNoPanicGreen,
6176 expr: ExprGreen,
6177 ) -> ExprClosureGreen {
6178 let children: Vec<GreenId> = vec![wrapper.0, ret_ty.0, optional_no_panic.0, expr.0];
6179 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6180 ExprClosureGreen(
6181 Arc::new(GreenNode {
6182 kind: SyntaxKind::ExprClosure,
6183 details: GreenNodeDetails::Node { children, width },
6184 })
6185 .intern(db),
6186 )
6187 }
6188}
6189impl ExprClosure {
6190 pub fn wrapper(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6191 ClosureParamWrapper::from_syntax_node(db, self.children[0].clone())
6192 }
6193 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
6194 OptionReturnTypeClause::from_syntax_node(db, self.children[1].clone())
6195 }
6196 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
6197 OptionTerminalNoPanic::from_syntax_node(db, self.children[2].clone())
6198 }
6199 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6200 Expr::from_syntax_node(db, self.children[3].clone())
6201 }
6202}
6203#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6204pub struct ExprClosurePtr(pub SyntaxStablePtrId);
6205impl ExprClosurePtr {}
6206impl TypedStablePtr for ExprClosurePtr {
6207 type SyntaxNode = ExprClosure;
6208 fn untyped(&self) -> SyntaxStablePtrId {
6209 self.0
6210 }
6211 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClosure {
6212 ExprClosure::from_syntax_node(db, self.0.lookup(db))
6213 }
6214}
6215impl From<ExprClosurePtr> for SyntaxStablePtrId {
6216 fn from(ptr: ExprClosurePtr) -> Self {
6217 ptr.untyped()
6218 }
6219}
6220#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6221pub struct ExprClosureGreen(pub GreenId);
6222impl TypedSyntaxNode for ExprClosure {
6223 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClosure);
6224 type StablePtr = ExprClosurePtr;
6225 type Green = ExprClosureGreen;
6226 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6227 ExprClosureGreen(
6228 Arc::new(GreenNode {
6229 kind: SyntaxKind::ExprClosure,
6230 details: GreenNodeDetails::Node {
6231 children: vec![
6232 ClosureParamWrapper::missing(db).0,
6233 OptionReturnTypeClause::missing(db).0,
6234 OptionTerminalNoPanic::missing(db).0,
6235 Expr::missing(db).0,
6236 ],
6237 width: TextWidth::default(),
6238 },
6239 })
6240 .intern(db),
6241 )
6242 }
6243 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6244 let kind = node.kind(db);
6245 assert_eq!(
6246 kind,
6247 SyntaxKind::ExprClosure,
6248 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6249 kind,
6250 SyntaxKind::ExprClosure
6251 );
6252 let children = db.get_children(node.clone());
6253 Self { node, children }
6254 }
6255 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6256 let kind = node.kind(db);
6257 if kind == SyntaxKind::ExprClosure { Some(Self::from_syntax_node(db, node)) } else { None }
6258 }
6259 fn as_syntax_node(&self) -> SyntaxNode {
6260 self.node.clone()
6261 }
6262 fn stable_ptr(&self) -> Self::StablePtr {
6263 ExprClosurePtr(self.node.0.stable_ptr)
6264 }
6265}
6266impl From<&ExprClosure> for SyntaxStablePtrId {
6267 fn from(node: &ExprClosure) -> Self {
6268 node.stable_ptr().untyped()
6269 }
6270}
6271#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6272pub enum ClosureParamWrapper {
6273 Nullary(TerminalOrOr),
6274 NAry(ClosureParamWrapperNAry),
6275}
6276#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6277pub struct ClosureParamWrapperPtr(pub SyntaxStablePtrId);
6278impl TypedStablePtr for ClosureParamWrapperPtr {
6279 type SyntaxNode = ClosureParamWrapper;
6280 fn untyped(&self) -> SyntaxStablePtrId {
6281 self.0
6282 }
6283 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapper {
6284 ClosureParamWrapper::from_syntax_node(db, self.0.lookup(db))
6285 }
6286}
6287impl From<ClosureParamWrapperPtr> for SyntaxStablePtrId {
6288 fn from(ptr: ClosureParamWrapperPtr) -> Self {
6289 ptr.untyped()
6290 }
6291}
6292impl From<TerminalOrOrPtr> for ClosureParamWrapperPtr {
6293 fn from(value: TerminalOrOrPtr) -> Self {
6294 Self(value.0)
6295 }
6296}
6297impl From<ClosureParamWrapperNAryPtr> for ClosureParamWrapperPtr {
6298 fn from(value: ClosureParamWrapperNAryPtr) -> Self {
6299 Self(value.0)
6300 }
6301}
6302impl From<TerminalOrOrGreen> for ClosureParamWrapperGreen {
6303 fn from(value: TerminalOrOrGreen) -> Self {
6304 Self(value.0)
6305 }
6306}
6307impl From<ClosureParamWrapperNAryGreen> for ClosureParamWrapperGreen {
6308 fn from(value: ClosureParamWrapperNAryGreen) -> Self {
6309 Self(value.0)
6310 }
6311}
6312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6313pub struct ClosureParamWrapperGreen(pub GreenId);
6314impl TypedSyntaxNode for ClosureParamWrapper {
6315 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6316 type StablePtr = ClosureParamWrapperPtr;
6317 type Green = ClosureParamWrapperGreen;
6318 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6319 panic!("No missing variant.");
6320 }
6321 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6322 let kind = node.kind(db);
6323 match kind {
6324 SyntaxKind::TerminalOrOr => {
6325 ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node))
6326 }
6327 SyntaxKind::ClosureParamWrapperNAry => {
6328 ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node))
6329 }
6330 _ => panic!(
6331 "Unexpected syntax kind {:?} when constructing {}.",
6332 kind, "ClosureParamWrapper"
6333 ),
6334 }
6335 }
6336 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6337 let kind = node.kind(db);
6338 match kind {
6339 SyntaxKind::TerminalOrOr => {
6340 Some(ClosureParamWrapper::Nullary(TerminalOrOr::from_syntax_node(db, node)))
6341 }
6342 SyntaxKind::ClosureParamWrapperNAry => {
6343 Some(ClosureParamWrapper::NAry(ClosureParamWrapperNAry::from_syntax_node(db, node)))
6344 }
6345 _ => None,
6346 }
6347 }
6348 fn as_syntax_node(&self) -> SyntaxNode {
6349 match self {
6350 ClosureParamWrapper::Nullary(x) => x.as_syntax_node(),
6351 ClosureParamWrapper::NAry(x) => x.as_syntax_node(),
6352 }
6353 }
6354 fn stable_ptr(&self) -> Self::StablePtr {
6355 ClosureParamWrapperPtr(self.as_syntax_node().0.stable_ptr)
6356 }
6357}
6358impl From<&ClosureParamWrapper> for SyntaxStablePtrId {
6359 fn from(node: &ClosureParamWrapper) -> Self {
6360 node.stable_ptr().untyped()
6361 }
6362}
6363impl ClosureParamWrapper {
6364 pub fn is_variant(kind: SyntaxKind) -> bool {
6366 matches!(kind, SyntaxKind::TerminalOrOr | SyntaxKind::ClosureParamWrapperNAry)
6367 }
6368}
6369#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6370pub struct ClosureParamWrapperNAry {
6371 node: SyntaxNode,
6372 children: Arc<[SyntaxNode]>,
6373}
6374impl ClosureParamWrapperNAry {
6375 pub const INDEX_LEFTOR: usize = 0;
6376 pub const INDEX_PARAMS: usize = 1;
6377 pub const INDEX_RIGHTOR: usize = 2;
6378 pub fn new_green(
6379 db: &dyn SyntaxGroup,
6380 leftor: TerminalOrGreen,
6381 params: ParamListGreen,
6382 rightor: TerminalOrGreen,
6383 ) -> ClosureParamWrapperNAryGreen {
6384 let children: Vec<GreenId> = vec![leftor.0, params.0, rightor.0];
6385 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6386 ClosureParamWrapperNAryGreen(
6387 Arc::new(GreenNode {
6388 kind: SyntaxKind::ClosureParamWrapperNAry,
6389 details: GreenNodeDetails::Node { children, width },
6390 })
6391 .intern(db),
6392 )
6393 }
6394}
6395impl ClosureParamWrapperNAry {
6396 pub fn leftor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6397 TerminalOr::from_syntax_node(db, self.children[0].clone())
6398 }
6399 pub fn params(&self, db: &dyn SyntaxGroup) -> ParamList {
6400 ParamList::from_syntax_node(db, self.children[1].clone())
6401 }
6402 pub fn rightor(&self, db: &dyn SyntaxGroup) -> TerminalOr {
6403 TerminalOr::from_syntax_node(db, self.children[2].clone())
6404 }
6405}
6406#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6407pub struct ClosureParamWrapperNAryPtr(pub SyntaxStablePtrId);
6408impl ClosureParamWrapperNAryPtr {}
6409impl TypedStablePtr for ClosureParamWrapperNAryPtr {
6410 type SyntaxNode = ClosureParamWrapperNAry;
6411 fn untyped(&self) -> SyntaxStablePtrId {
6412 self.0
6413 }
6414 fn lookup(&self, db: &dyn SyntaxGroup) -> ClosureParamWrapperNAry {
6415 ClosureParamWrapperNAry::from_syntax_node(db, self.0.lookup(db))
6416 }
6417}
6418impl From<ClosureParamWrapperNAryPtr> for SyntaxStablePtrId {
6419 fn from(ptr: ClosureParamWrapperNAryPtr) -> Self {
6420 ptr.untyped()
6421 }
6422}
6423#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6424pub struct ClosureParamWrapperNAryGreen(pub GreenId);
6425impl TypedSyntaxNode for ClosureParamWrapperNAry {
6426 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ClosureParamWrapperNAry);
6427 type StablePtr = ClosureParamWrapperNAryPtr;
6428 type Green = ClosureParamWrapperNAryGreen;
6429 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6430 ClosureParamWrapperNAryGreen(
6431 Arc::new(GreenNode {
6432 kind: SyntaxKind::ClosureParamWrapperNAry,
6433 details: GreenNodeDetails::Node {
6434 children: vec![
6435 TerminalOr::missing(db).0,
6436 ParamList::missing(db).0,
6437 TerminalOr::missing(db).0,
6438 ],
6439 width: TextWidth::default(),
6440 },
6441 })
6442 .intern(db),
6443 )
6444 }
6445 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6446 let kind = node.kind(db);
6447 assert_eq!(
6448 kind,
6449 SyntaxKind::ClosureParamWrapperNAry,
6450 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6451 kind,
6452 SyntaxKind::ClosureParamWrapperNAry
6453 );
6454 let children = db.get_children(node.clone());
6455 Self { node, children }
6456 }
6457 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6458 let kind = node.kind(db);
6459 if kind == SyntaxKind::ClosureParamWrapperNAry {
6460 Some(Self::from_syntax_node(db, node))
6461 } else {
6462 None
6463 }
6464 }
6465 fn as_syntax_node(&self) -> SyntaxNode {
6466 self.node.clone()
6467 }
6468 fn stable_ptr(&self) -> Self::StablePtr {
6469 ClosureParamWrapperNAryPtr(self.node.0.stable_ptr)
6470 }
6471}
6472impl From<&ClosureParamWrapperNAry> for SyntaxStablePtrId {
6473 fn from(node: &ClosureParamWrapperNAry) -> Self {
6474 node.stable_ptr().untyped()
6475 }
6476}
6477#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6478pub struct StructArgExpr {
6479 node: SyntaxNode,
6480 children: Arc<[SyntaxNode]>,
6481}
6482impl StructArgExpr {
6483 pub const INDEX_COLON: usize = 0;
6484 pub const INDEX_EXPR: usize = 1;
6485 pub fn new_green(
6486 db: &dyn SyntaxGroup,
6487 colon: TerminalColonGreen,
6488 expr: ExprGreen,
6489 ) -> StructArgExprGreen {
6490 let children: Vec<GreenId> = vec![colon.0, expr.0];
6491 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6492 StructArgExprGreen(
6493 Arc::new(GreenNode {
6494 kind: SyntaxKind::StructArgExpr,
6495 details: GreenNodeDetails::Node { children, width },
6496 })
6497 .intern(db),
6498 )
6499 }
6500}
6501impl StructArgExpr {
6502 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
6503 TerminalColon::from_syntax_node(db, self.children[0].clone())
6504 }
6505 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
6506 Expr::from_syntax_node(db, self.children[1].clone())
6507 }
6508}
6509#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6510pub struct StructArgExprPtr(pub SyntaxStablePtrId);
6511impl StructArgExprPtr {}
6512impl TypedStablePtr for StructArgExprPtr {
6513 type SyntaxNode = StructArgExpr;
6514 fn untyped(&self) -> SyntaxStablePtrId {
6515 self.0
6516 }
6517 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgExpr {
6518 StructArgExpr::from_syntax_node(db, self.0.lookup(db))
6519 }
6520}
6521impl From<StructArgExprPtr> for SyntaxStablePtrId {
6522 fn from(ptr: StructArgExprPtr) -> Self {
6523 ptr.untyped()
6524 }
6525}
6526#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6527pub struct StructArgExprGreen(pub GreenId);
6528impl TypedSyntaxNode for StructArgExpr {
6529 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgExpr);
6530 type StablePtr = StructArgExprPtr;
6531 type Green = StructArgExprGreen;
6532 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6533 StructArgExprGreen(
6534 Arc::new(GreenNode {
6535 kind: SyntaxKind::StructArgExpr,
6536 details: GreenNodeDetails::Node {
6537 children: vec![TerminalColon::missing(db).0, Expr::missing(db).0],
6538 width: TextWidth::default(),
6539 },
6540 })
6541 .intern(db),
6542 )
6543 }
6544 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6545 let kind = node.kind(db);
6546 assert_eq!(
6547 kind,
6548 SyntaxKind::StructArgExpr,
6549 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6550 kind,
6551 SyntaxKind::StructArgExpr
6552 );
6553 let children = db.get_children(node.clone());
6554 Self { node, children }
6555 }
6556 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6557 let kind = node.kind(db);
6558 if kind == SyntaxKind::StructArgExpr {
6559 Some(Self::from_syntax_node(db, node))
6560 } else {
6561 None
6562 }
6563 }
6564 fn as_syntax_node(&self) -> SyntaxNode {
6565 self.node.clone()
6566 }
6567 fn stable_ptr(&self) -> Self::StablePtr {
6568 StructArgExprPtr(self.node.0.stable_ptr)
6569 }
6570}
6571impl From<&StructArgExpr> for SyntaxStablePtrId {
6572 fn from(node: &StructArgExpr) -> Self {
6573 node.stable_ptr().untyped()
6574 }
6575}
6576#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6577pub enum OptionStructArgExpr {
6578 Empty(OptionStructArgExprEmpty),
6579 StructArgExpr(StructArgExpr),
6580}
6581#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6582pub struct OptionStructArgExprPtr(pub SyntaxStablePtrId);
6583impl TypedStablePtr for OptionStructArgExprPtr {
6584 type SyntaxNode = OptionStructArgExpr;
6585 fn untyped(&self) -> SyntaxStablePtrId {
6586 self.0
6587 }
6588 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6589 OptionStructArgExpr::from_syntax_node(db, self.0.lookup(db))
6590 }
6591}
6592impl From<OptionStructArgExprPtr> for SyntaxStablePtrId {
6593 fn from(ptr: OptionStructArgExprPtr) -> Self {
6594 ptr.untyped()
6595 }
6596}
6597impl From<OptionStructArgExprEmptyPtr> for OptionStructArgExprPtr {
6598 fn from(value: OptionStructArgExprEmptyPtr) -> Self {
6599 Self(value.0)
6600 }
6601}
6602impl From<StructArgExprPtr> for OptionStructArgExprPtr {
6603 fn from(value: StructArgExprPtr) -> Self {
6604 Self(value.0)
6605 }
6606}
6607impl From<OptionStructArgExprEmptyGreen> for OptionStructArgExprGreen {
6608 fn from(value: OptionStructArgExprEmptyGreen) -> Self {
6609 Self(value.0)
6610 }
6611}
6612impl From<StructArgExprGreen> for OptionStructArgExprGreen {
6613 fn from(value: StructArgExprGreen) -> Self {
6614 Self(value.0)
6615 }
6616}
6617#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6618pub struct OptionStructArgExprGreen(pub GreenId);
6619impl TypedSyntaxNode for OptionStructArgExpr {
6620 const OPTIONAL_KIND: Option<SyntaxKind> = None;
6621 type StablePtr = OptionStructArgExprPtr;
6622 type Green = OptionStructArgExprGreen;
6623 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6624 panic!("No missing variant.");
6625 }
6626 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6627 let kind = node.kind(db);
6628 match kind {
6629 SyntaxKind::OptionStructArgExprEmpty => {
6630 OptionStructArgExpr::Empty(OptionStructArgExprEmpty::from_syntax_node(db, node))
6631 }
6632 SyntaxKind::StructArgExpr => {
6633 OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node))
6634 }
6635 _ => panic!(
6636 "Unexpected syntax kind {:?} when constructing {}.",
6637 kind, "OptionStructArgExpr"
6638 ),
6639 }
6640 }
6641 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6642 let kind = node.kind(db);
6643 match kind {
6644 SyntaxKind::OptionStructArgExprEmpty => Some(OptionStructArgExpr::Empty(
6645 OptionStructArgExprEmpty::from_syntax_node(db, node),
6646 )),
6647 SyntaxKind::StructArgExpr => {
6648 Some(OptionStructArgExpr::StructArgExpr(StructArgExpr::from_syntax_node(db, node)))
6649 }
6650 _ => None,
6651 }
6652 }
6653 fn as_syntax_node(&self) -> SyntaxNode {
6654 match self {
6655 OptionStructArgExpr::Empty(x) => x.as_syntax_node(),
6656 OptionStructArgExpr::StructArgExpr(x) => x.as_syntax_node(),
6657 }
6658 }
6659 fn stable_ptr(&self) -> Self::StablePtr {
6660 OptionStructArgExprPtr(self.as_syntax_node().0.stable_ptr)
6661 }
6662}
6663impl From<&OptionStructArgExpr> for SyntaxStablePtrId {
6664 fn from(node: &OptionStructArgExpr) -> Self {
6665 node.stable_ptr().untyped()
6666 }
6667}
6668impl OptionStructArgExpr {
6669 pub fn is_variant(kind: SyntaxKind) -> bool {
6671 matches!(kind, SyntaxKind::OptionStructArgExprEmpty | SyntaxKind::StructArgExpr)
6672 }
6673}
6674#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6675pub struct OptionStructArgExprEmpty {
6676 node: SyntaxNode,
6677 children: Arc<[SyntaxNode]>,
6678}
6679impl OptionStructArgExprEmpty {
6680 pub fn new_green(db: &dyn SyntaxGroup) -> OptionStructArgExprEmptyGreen {
6681 let children: Vec<GreenId> = vec![];
6682 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6683 OptionStructArgExprEmptyGreen(
6684 Arc::new(GreenNode {
6685 kind: SyntaxKind::OptionStructArgExprEmpty,
6686 details: GreenNodeDetails::Node { children, width },
6687 })
6688 .intern(db),
6689 )
6690 }
6691}
6692impl OptionStructArgExprEmpty {}
6693#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6694pub struct OptionStructArgExprEmptyPtr(pub SyntaxStablePtrId);
6695impl OptionStructArgExprEmptyPtr {}
6696impl TypedStablePtr for OptionStructArgExprEmptyPtr {
6697 type SyntaxNode = OptionStructArgExprEmpty;
6698 fn untyped(&self) -> SyntaxStablePtrId {
6699 self.0
6700 }
6701 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionStructArgExprEmpty {
6702 OptionStructArgExprEmpty::from_syntax_node(db, self.0.lookup(db))
6703 }
6704}
6705impl From<OptionStructArgExprEmptyPtr> for SyntaxStablePtrId {
6706 fn from(ptr: OptionStructArgExprEmptyPtr) -> Self {
6707 ptr.untyped()
6708 }
6709}
6710#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6711pub struct OptionStructArgExprEmptyGreen(pub GreenId);
6712impl TypedSyntaxNode for OptionStructArgExprEmpty {
6713 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionStructArgExprEmpty);
6714 type StablePtr = OptionStructArgExprEmptyPtr;
6715 type Green = OptionStructArgExprEmptyGreen;
6716 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6717 OptionStructArgExprEmptyGreen(
6718 Arc::new(GreenNode {
6719 kind: SyntaxKind::OptionStructArgExprEmpty,
6720 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
6721 })
6722 .intern(db),
6723 )
6724 }
6725 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6726 let kind = node.kind(db);
6727 assert_eq!(
6728 kind,
6729 SyntaxKind::OptionStructArgExprEmpty,
6730 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6731 kind,
6732 SyntaxKind::OptionStructArgExprEmpty
6733 );
6734 let children = db.get_children(node.clone());
6735 Self { node, children }
6736 }
6737 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6738 let kind = node.kind(db);
6739 if kind == SyntaxKind::OptionStructArgExprEmpty {
6740 Some(Self::from_syntax_node(db, node))
6741 } else {
6742 None
6743 }
6744 }
6745 fn as_syntax_node(&self) -> SyntaxNode {
6746 self.node.clone()
6747 }
6748 fn stable_ptr(&self) -> Self::StablePtr {
6749 OptionStructArgExprEmptyPtr(self.node.0.stable_ptr)
6750 }
6751}
6752impl From<&OptionStructArgExprEmpty> for SyntaxStablePtrId {
6753 fn from(node: &OptionStructArgExprEmpty) -> Self {
6754 node.stable_ptr().untyped()
6755 }
6756}
6757#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6758pub struct StructArgSingle {
6759 node: SyntaxNode,
6760 children: Arc<[SyntaxNode]>,
6761}
6762impl StructArgSingle {
6763 pub const INDEX_IDENTIFIER: usize = 0;
6764 pub const INDEX_ARG_EXPR: usize = 1;
6765 pub fn new_green(
6766 db: &dyn SyntaxGroup,
6767 identifier: TerminalIdentifierGreen,
6768 arg_expr: OptionStructArgExprGreen,
6769 ) -> StructArgSingleGreen {
6770 let children: Vec<GreenId> = vec![identifier.0, arg_expr.0];
6771 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6772 StructArgSingleGreen(
6773 Arc::new(GreenNode {
6774 kind: SyntaxKind::StructArgSingle,
6775 details: GreenNodeDetails::Node { children, width },
6776 })
6777 .intern(db),
6778 )
6779 }
6780}
6781impl StructArgSingle {
6782 pub fn identifier(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
6783 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
6784 }
6785 pub fn arg_expr(&self, db: &dyn SyntaxGroup) -> OptionStructArgExpr {
6786 OptionStructArgExpr::from_syntax_node(db, self.children[1].clone())
6787 }
6788}
6789#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6790pub struct StructArgSinglePtr(pub SyntaxStablePtrId);
6791impl StructArgSinglePtr {
6792 pub fn identifier_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
6793 let ptr = self.0.lookup_intern(db);
6794 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
6795 TerminalIdentifierGreen(key_fields[0])
6796 } else {
6797 panic!("Unexpected key field query on root.");
6798 }
6799 }
6800}
6801impl TypedStablePtr for StructArgSinglePtr {
6802 type SyntaxNode = StructArgSingle;
6803 fn untyped(&self) -> SyntaxStablePtrId {
6804 self.0
6805 }
6806 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgSingle {
6807 StructArgSingle::from_syntax_node(db, self.0.lookup(db))
6808 }
6809}
6810impl From<StructArgSinglePtr> for SyntaxStablePtrId {
6811 fn from(ptr: StructArgSinglePtr) -> Self {
6812 ptr.untyped()
6813 }
6814}
6815#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6816pub struct StructArgSingleGreen(pub GreenId);
6817impl TypedSyntaxNode for StructArgSingle {
6818 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgSingle);
6819 type StablePtr = StructArgSinglePtr;
6820 type Green = StructArgSingleGreen;
6821 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6822 StructArgSingleGreen(
6823 Arc::new(GreenNode {
6824 kind: SyntaxKind::StructArgSingle,
6825 details: GreenNodeDetails::Node {
6826 children: vec![
6827 TerminalIdentifier::missing(db).0,
6828 OptionStructArgExpr::missing(db).0,
6829 ],
6830 width: TextWidth::default(),
6831 },
6832 })
6833 .intern(db),
6834 )
6835 }
6836 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6837 let kind = node.kind(db);
6838 assert_eq!(
6839 kind,
6840 SyntaxKind::StructArgSingle,
6841 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6842 kind,
6843 SyntaxKind::StructArgSingle
6844 );
6845 let children = db.get_children(node.clone());
6846 Self { node, children }
6847 }
6848 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6849 let kind = node.kind(db);
6850 if kind == SyntaxKind::StructArgSingle {
6851 Some(Self::from_syntax_node(db, node))
6852 } else {
6853 None
6854 }
6855 }
6856 fn as_syntax_node(&self) -> SyntaxNode {
6857 self.node.clone()
6858 }
6859 fn stable_ptr(&self) -> Self::StablePtr {
6860 StructArgSinglePtr(self.node.0.stable_ptr)
6861 }
6862}
6863impl From<&StructArgSingle> for SyntaxStablePtrId {
6864 fn from(node: &StructArgSingle) -> Self {
6865 node.stable_ptr().untyped()
6866 }
6867}
6868#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6869pub struct StructArgTail {
6870 node: SyntaxNode,
6871 children: Arc<[SyntaxNode]>,
6872}
6873impl StructArgTail {
6874 pub const INDEX_DOTDOT: usize = 0;
6875 pub const INDEX_EXPRESSION: usize = 1;
6876 pub fn new_green(
6877 db: &dyn SyntaxGroup,
6878 dotdot: TerminalDotDotGreen,
6879 expression: ExprGreen,
6880 ) -> StructArgTailGreen {
6881 let children: Vec<GreenId> = vec![dotdot.0, expression.0];
6882 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
6883 StructArgTailGreen(
6884 Arc::new(GreenNode {
6885 kind: SyntaxKind::StructArgTail,
6886 details: GreenNodeDetails::Node { children, width },
6887 })
6888 .intern(db),
6889 )
6890 }
6891}
6892impl StructArgTail {
6893 pub fn dotdot(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
6894 TerminalDotDot::from_syntax_node(db, self.children[0].clone())
6895 }
6896 pub fn expression(&self, db: &dyn SyntaxGroup) -> Expr {
6897 Expr::from_syntax_node(db, self.children[1].clone())
6898 }
6899}
6900#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6901pub struct StructArgTailPtr(pub SyntaxStablePtrId);
6902impl StructArgTailPtr {}
6903impl TypedStablePtr for StructArgTailPtr {
6904 type SyntaxNode = StructArgTail;
6905 fn untyped(&self) -> SyntaxStablePtrId {
6906 self.0
6907 }
6908 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgTail {
6909 StructArgTail::from_syntax_node(db, self.0.lookup(db))
6910 }
6911}
6912impl From<StructArgTailPtr> for SyntaxStablePtrId {
6913 fn from(ptr: StructArgTailPtr) -> Self {
6914 ptr.untyped()
6915 }
6916}
6917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6918pub struct StructArgTailGreen(pub GreenId);
6919impl TypedSyntaxNode for StructArgTail {
6920 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgTail);
6921 type StablePtr = StructArgTailPtr;
6922 type Green = StructArgTailGreen;
6923 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
6924 StructArgTailGreen(
6925 Arc::new(GreenNode {
6926 kind: SyntaxKind::StructArgTail,
6927 details: GreenNodeDetails::Node {
6928 children: vec![TerminalDotDot::missing(db).0, Expr::missing(db).0],
6929 width: TextWidth::default(),
6930 },
6931 })
6932 .intern(db),
6933 )
6934 }
6935 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
6936 let kind = node.kind(db);
6937 assert_eq!(
6938 kind,
6939 SyntaxKind::StructArgTail,
6940 "Unexpected SyntaxKind {:?}. Expected {:?}.",
6941 kind,
6942 SyntaxKind::StructArgTail
6943 );
6944 let children = db.get_children(node.clone());
6945 Self { node, children }
6946 }
6947 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
6948 let kind = node.kind(db);
6949 if kind == SyntaxKind::StructArgTail {
6950 Some(Self::from_syntax_node(db, node))
6951 } else {
6952 None
6953 }
6954 }
6955 fn as_syntax_node(&self) -> SyntaxNode {
6956 self.node.clone()
6957 }
6958 fn stable_ptr(&self) -> Self::StablePtr {
6959 StructArgTailPtr(self.node.0.stable_ptr)
6960 }
6961}
6962impl From<&StructArgTail> for SyntaxStablePtrId {
6963 fn from(node: &StructArgTail) -> Self {
6964 node.stable_ptr().untyped()
6965 }
6966}
6967#[derive(Clone, Debug, Eq, Hash, PartialEq)]
6968pub enum StructArg {
6969 StructArgSingle(StructArgSingle),
6970 StructArgTail(StructArgTail),
6971}
6972#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
6973pub struct StructArgPtr(pub SyntaxStablePtrId);
6974impl TypedStablePtr for StructArgPtr {
6975 type SyntaxNode = StructArg;
6976 fn untyped(&self) -> SyntaxStablePtrId {
6977 self.0
6978 }
6979 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArg {
6980 StructArg::from_syntax_node(db, self.0.lookup(db))
6981 }
6982}
6983impl From<StructArgPtr> for SyntaxStablePtrId {
6984 fn from(ptr: StructArgPtr) -> Self {
6985 ptr.untyped()
6986 }
6987}
6988impl From<StructArgSinglePtr> for StructArgPtr {
6989 fn from(value: StructArgSinglePtr) -> Self {
6990 Self(value.0)
6991 }
6992}
6993impl From<StructArgTailPtr> for StructArgPtr {
6994 fn from(value: StructArgTailPtr) -> Self {
6995 Self(value.0)
6996 }
6997}
6998impl From<StructArgSingleGreen> for StructArgGreen {
6999 fn from(value: StructArgSingleGreen) -> Self {
7000 Self(value.0)
7001 }
7002}
7003impl From<StructArgTailGreen> for StructArgGreen {
7004 fn from(value: StructArgTailGreen) -> Self {
7005 Self(value.0)
7006 }
7007}
7008#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7009pub struct StructArgGreen(pub GreenId);
7010impl TypedSyntaxNode for StructArg {
7011 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7012 type StablePtr = StructArgPtr;
7013 type Green = StructArgGreen;
7014 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7015 panic!("No missing variant.");
7016 }
7017 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7018 let kind = node.kind(db);
7019 match kind {
7020 SyntaxKind::StructArgSingle => {
7021 StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node))
7022 }
7023 SyntaxKind::StructArgTail => {
7024 StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node))
7025 }
7026 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "StructArg"),
7027 }
7028 }
7029 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7030 let kind = node.kind(db);
7031 match kind {
7032 SyntaxKind::StructArgSingle => {
7033 Some(StructArg::StructArgSingle(StructArgSingle::from_syntax_node(db, node)))
7034 }
7035 SyntaxKind::StructArgTail => {
7036 Some(StructArg::StructArgTail(StructArgTail::from_syntax_node(db, node)))
7037 }
7038 _ => None,
7039 }
7040 }
7041 fn as_syntax_node(&self) -> SyntaxNode {
7042 match self {
7043 StructArg::StructArgSingle(x) => x.as_syntax_node(),
7044 StructArg::StructArgTail(x) => x.as_syntax_node(),
7045 }
7046 }
7047 fn stable_ptr(&self) -> Self::StablePtr {
7048 StructArgPtr(self.as_syntax_node().0.stable_ptr)
7049 }
7050}
7051impl From<&StructArg> for SyntaxStablePtrId {
7052 fn from(node: &StructArg) -> Self {
7053 node.stable_ptr().untyped()
7054 }
7055}
7056impl StructArg {
7057 pub fn is_variant(kind: SyntaxKind) -> bool {
7059 matches!(kind, SyntaxKind::StructArgSingle | SyntaxKind::StructArgTail)
7060 }
7061}
7062#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7063pub struct StructArgList(ElementList<StructArg, 2>);
7064impl Deref for StructArgList {
7065 type Target = ElementList<StructArg, 2>;
7066 fn deref(&self) -> &Self::Target {
7067 &self.0
7068 }
7069}
7070impl StructArgList {
7071 pub fn new_green(
7072 db: &dyn SyntaxGroup,
7073 children: Vec<StructArgListElementOrSeparatorGreen>,
7074 ) -> StructArgListGreen {
7075 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
7076 StructArgListGreen(
7077 Arc::new(GreenNode {
7078 kind: SyntaxKind::StructArgList,
7079 details: GreenNodeDetails::Node {
7080 children: children.iter().map(|x| x.id()).collect(),
7081 width,
7082 },
7083 })
7084 .intern(db),
7085 )
7086 }
7087}
7088#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7089pub struct StructArgListPtr(pub SyntaxStablePtrId);
7090impl TypedStablePtr for StructArgListPtr {
7091 type SyntaxNode = StructArgList;
7092 fn untyped(&self) -> SyntaxStablePtrId {
7093 self.0
7094 }
7095 fn lookup(&self, db: &dyn SyntaxGroup) -> StructArgList {
7096 StructArgList::from_syntax_node(db, self.0.lookup(db))
7097 }
7098}
7099impl From<StructArgListPtr> for SyntaxStablePtrId {
7100 fn from(ptr: StructArgListPtr) -> Self {
7101 ptr.untyped()
7102 }
7103}
7104#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7105pub enum StructArgListElementOrSeparatorGreen {
7106 Separator(TerminalCommaGreen),
7107 Element(StructArgGreen),
7108}
7109impl From<TerminalCommaGreen> for StructArgListElementOrSeparatorGreen {
7110 fn from(value: TerminalCommaGreen) -> Self {
7111 StructArgListElementOrSeparatorGreen::Separator(value)
7112 }
7113}
7114impl From<StructArgGreen> for StructArgListElementOrSeparatorGreen {
7115 fn from(value: StructArgGreen) -> Self {
7116 StructArgListElementOrSeparatorGreen::Element(value)
7117 }
7118}
7119impl StructArgListElementOrSeparatorGreen {
7120 fn id(&self) -> GreenId {
7121 match self {
7122 StructArgListElementOrSeparatorGreen::Separator(green) => green.0,
7123 StructArgListElementOrSeparatorGreen::Element(green) => green.0,
7124 }
7125 }
7126}
7127#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7128pub struct StructArgListGreen(pub GreenId);
7129impl TypedSyntaxNode for StructArgList {
7130 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StructArgList);
7131 type StablePtr = StructArgListPtr;
7132 type Green = StructArgListGreen;
7133 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7134 StructArgListGreen(
7135 Arc::new(GreenNode {
7136 kind: SyntaxKind::StructArgList,
7137 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
7138 })
7139 .intern(db),
7140 )
7141 }
7142 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7143 Self(ElementList::new(node))
7144 }
7145 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7146 if node.kind(db) == SyntaxKind::StructArgList {
7147 Some(Self(ElementList::new(node)))
7148 } else {
7149 None
7150 }
7151 }
7152 fn as_syntax_node(&self) -> SyntaxNode {
7153 self.node.clone()
7154 }
7155 fn stable_ptr(&self) -> Self::StablePtr {
7156 StructArgListPtr(self.node.0.stable_ptr)
7157 }
7158}
7159impl From<&StructArgList> for SyntaxStablePtrId {
7160 fn from(node: &StructArgList) -> Self {
7161 node.stable_ptr().untyped()
7162 }
7163}
7164#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7165pub struct ArgListBraced {
7166 node: SyntaxNode,
7167 children: Arc<[SyntaxNode]>,
7168}
7169impl ArgListBraced {
7170 pub const INDEX_LBRACE: usize = 0;
7171 pub const INDEX_ARGUMENTS: usize = 1;
7172 pub const INDEX_RBRACE: usize = 2;
7173 pub fn new_green(
7174 db: &dyn SyntaxGroup,
7175 lbrace: TerminalLBraceGreen,
7176 arguments: ArgListGreen,
7177 rbrace: TerminalRBraceGreen,
7178 ) -> ArgListBracedGreen {
7179 let children: Vec<GreenId> = vec![lbrace.0, arguments.0, rbrace.0];
7180 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7181 ArgListBracedGreen(
7182 Arc::new(GreenNode {
7183 kind: SyntaxKind::ArgListBraced,
7184 details: GreenNodeDetails::Node { children, width },
7185 })
7186 .intern(db),
7187 )
7188 }
7189}
7190impl ArgListBraced {
7191 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
7192 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
7193 }
7194 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7195 ArgList::from_syntax_node(db, self.children[1].clone())
7196 }
7197 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
7198 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
7199 }
7200}
7201#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7202pub struct ArgListBracedPtr(pub SyntaxStablePtrId);
7203impl ArgListBracedPtr {}
7204impl TypedStablePtr for ArgListBracedPtr {
7205 type SyntaxNode = ArgListBraced;
7206 fn untyped(&self) -> SyntaxStablePtrId {
7207 self.0
7208 }
7209 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBraced {
7210 ArgListBraced::from_syntax_node(db, self.0.lookup(db))
7211 }
7212}
7213impl From<ArgListBracedPtr> for SyntaxStablePtrId {
7214 fn from(ptr: ArgListBracedPtr) -> Self {
7215 ptr.untyped()
7216 }
7217}
7218#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7219pub struct ArgListBracedGreen(pub GreenId);
7220impl TypedSyntaxNode for ArgListBraced {
7221 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBraced);
7222 type StablePtr = ArgListBracedPtr;
7223 type Green = ArgListBracedGreen;
7224 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7225 ArgListBracedGreen(
7226 Arc::new(GreenNode {
7227 kind: SyntaxKind::ArgListBraced,
7228 details: GreenNodeDetails::Node {
7229 children: vec![
7230 TerminalLBrace::missing(db).0,
7231 ArgList::missing(db).0,
7232 TerminalRBrace::missing(db).0,
7233 ],
7234 width: TextWidth::default(),
7235 },
7236 })
7237 .intern(db),
7238 )
7239 }
7240 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7241 let kind = node.kind(db);
7242 assert_eq!(
7243 kind,
7244 SyntaxKind::ArgListBraced,
7245 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7246 kind,
7247 SyntaxKind::ArgListBraced
7248 );
7249 let children = db.get_children(node.clone());
7250 Self { node, children }
7251 }
7252 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7253 let kind = node.kind(db);
7254 if kind == SyntaxKind::ArgListBraced {
7255 Some(Self::from_syntax_node(db, node))
7256 } else {
7257 None
7258 }
7259 }
7260 fn as_syntax_node(&self) -> SyntaxNode {
7261 self.node.clone()
7262 }
7263 fn stable_ptr(&self) -> Self::StablePtr {
7264 ArgListBracedPtr(self.node.0.stable_ptr)
7265 }
7266}
7267impl From<&ArgListBraced> for SyntaxStablePtrId {
7268 fn from(node: &ArgListBraced) -> Self {
7269 node.stable_ptr().untyped()
7270 }
7271}
7272#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7273pub struct ArgListBracketed {
7274 node: SyntaxNode,
7275 children: Arc<[SyntaxNode]>,
7276}
7277impl ArgListBracketed {
7278 pub const INDEX_LBRACK: usize = 0;
7279 pub const INDEX_ARGUMENTS: usize = 1;
7280 pub const INDEX_RBRACK: usize = 2;
7281 pub fn new_green(
7282 db: &dyn SyntaxGroup,
7283 lbrack: TerminalLBrackGreen,
7284 arguments: ArgListGreen,
7285 rbrack: TerminalRBrackGreen,
7286 ) -> ArgListBracketedGreen {
7287 let children: Vec<GreenId> = vec![lbrack.0, arguments.0, rbrack.0];
7288 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7289 ArgListBracketedGreen(
7290 Arc::new(GreenNode {
7291 kind: SyntaxKind::ArgListBracketed,
7292 details: GreenNodeDetails::Node { children, width },
7293 })
7294 .intern(db),
7295 )
7296 }
7297}
7298impl ArgListBracketed {
7299 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
7300 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
7301 }
7302 pub fn arguments(&self, db: &dyn SyntaxGroup) -> ArgList {
7303 ArgList::from_syntax_node(db, self.children[1].clone())
7304 }
7305 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
7306 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
7307 }
7308}
7309#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7310pub struct ArgListBracketedPtr(pub SyntaxStablePtrId);
7311impl ArgListBracketedPtr {}
7312impl TypedStablePtr for ArgListBracketedPtr {
7313 type SyntaxNode = ArgListBracketed;
7314 fn untyped(&self) -> SyntaxStablePtrId {
7315 self.0
7316 }
7317 fn lookup(&self, db: &dyn SyntaxGroup) -> ArgListBracketed {
7318 ArgListBracketed::from_syntax_node(db, self.0.lookup(db))
7319 }
7320}
7321impl From<ArgListBracketedPtr> for SyntaxStablePtrId {
7322 fn from(ptr: ArgListBracketedPtr) -> Self {
7323 ptr.untyped()
7324 }
7325}
7326#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7327pub struct ArgListBracketedGreen(pub GreenId);
7328impl TypedSyntaxNode for ArgListBracketed {
7329 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ArgListBracketed);
7330 type StablePtr = ArgListBracketedPtr;
7331 type Green = ArgListBracketedGreen;
7332 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7333 ArgListBracketedGreen(
7334 Arc::new(GreenNode {
7335 kind: SyntaxKind::ArgListBracketed,
7336 details: GreenNodeDetails::Node {
7337 children: vec![
7338 TerminalLBrack::missing(db).0,
7339 ArgList::missing(db).0,
7340 TerminalRBrack::missing(db).0,
7341 ],
7342 width: TextWidth::default(),
7343 },
7344 })
7345 .intern(db),
7346 )
7347 }
7348 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7349 let kind = node.kind(db);
7350 assert_eq!(
7351 kind,
7352 SyntaxKind::ArgListBracketed,
7353 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7354 kind,
7355 SyntaxKind::ArgListBracketed
7356 );
7357 let children = db.get_children(node.clone());
7358 Self { node, children }
7359 }
7360 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7361 let kind = node.kind(db);
7362 if kind == SyntaxKind::ArgListBracketed {
7363 Some(Self::from_syntax_node(db, node))
7364 } else {
7365 None
7366 }
7367 }
7368 fn as_syntax_node(&self) -> SyntaxNode {
7369 self.node.clone()
7370 }
7371 fn stable_ptr(&self) -> Self::StablePtr {
7372 ArgListBracketedPtr(self.node.0.stable_ptr)
7373 }
7374}
7375impl From<&ArgListBracketed> for SyntaxStablePtrId {
7376 fn from(node: &ArgListBracketed) -> Self {
7377 node.stable_ptr().untyped()
7378 }
7379}
7380#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7381pub enum WrappedArgList {
7382 BracketedArgList(ArgListBracketed),
7383 ParenthesizedArgList(ArgListParenthesized),
7384 BracedArgList(ArgListBraced),
7385 Missing(WrappedArgListMissing),
7386}
7387#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7388pub struct WrappedArgListPtr(pub SyntaxStablePtrId);
7389impl TypedStablePtr for WrappedArgListPtr {
7390 type SyntaxNode = WrappedArgList;
7391 fn untyped(&self) -> SyntaxStablePtrId {
7392 self.0
7393 }
7394 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
7395 WrappedArgList::from_syntax_node(db, self.0.lookup(db))
7396 }
7397}
7398impl From<WrappedArgListPtr> for SyntaxStablePtrId {
7399 fn from(ptr: WrappedArgListPtr) -> Self {
7400 ptr.untyped()
7401 }
7402}
7403impl From<ArgListBracketedPtr> for WrappedArgListPtr {
7404 fn from(value: ArgListBracketedPtr) -> Self {
7405 Self(value.0)
7406 }
7407}
7408impl From<ArgListParenthesizedPtr> for WrappedArgListPtr {
7409 fn from(value: ArgListParenthesizedPtr) -> Self {
7410 Self(value.0)
7411 }
7412}
7413impl From<ArgListBracedPtr> for WrappedArgListPtr {
7414 fn from(value: ArgListBracedPtr) -> Self {
7415 Self(value.0)
7416 }
7417}
7418impl From<WrappedArgListMissingPtr> for WrappedArgListPtr {
7419 fn from(value: WrappedArgListMissingPtr) -> Self {
7420 Self(value.0)
7421 }
7422}
7423impl From<ArgListBracketedGreen> for WrappedArgListGreen {
7424 fn from(value: ArgListBracketedGreen) -> Self {
7425 Self(value.0)
7426 }
7427}
7428impl From<ArgListParenthesizedGreen> for WrappedArgListGreen {
7429 fn from(value: ArgListParenthesizedGreen) -> Self {
7430 Self(value.0)
7431 }
7432}
7433impl From<ArgListBracedGreen> for WrappedArgListGreen {
7434 fn from(value: ArgListBracedGreen) -> Self {
7435 Self(value.0)
7436 }
7437}
7438impl From<WrappedArgListMissingGreen> for WrappedArgListGreen {
7439 fn from(value: WrappedArgListMissingGreen) -> Self {
7440 Self(value.0)
7441 }
7442}
7443#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7444pub struct WrappedArgListGreen(pub GreenId);
7445impl TypedSyntaxNode for WrappedArgList {
7446 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7447 type StablePtr = WrappedArgListPtr;
7448 type Green = WrappedArgListGreen;
7449 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7450 WrappedArgListGreen(WrappedArgListMissing::missing(db).0)
7451 }
7452 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7453 let kind = node.kind(db);
7454 match kind {
7455 SyntaxKind::ArgListBracketed => {
7456 WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node))
7457 }
7458 SyntaxKind::ArgListParenthesized => WrappedArgList::ParenthesizedArgList(
7459 ArgListParenthesized::from_syntax_node(db, node),
7460 ),
7461 SyntaxKind::ArgListBraced => {
7462 WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node))
7463 }
7464 SyntaxKind::WrappedArgListMissing => {
7465 WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node))
7466 }
7467 _ => {
7468 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "WrappedArgList")
7469 }
7470 }
7471 }
7472 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7473 let kind = node.kind(db);
7474 match kind {
7475 SyntaxKind::ArgListBracketed => {
7476 Some(WrappedArgList::BracketedArgList(ArgListBracketed::from_syntax_node(db, node)))
7477 }
7478 SyntaxKind::ArgListParenthesized => Some(WrappedArgList::ParenthesizedArgList(
7479 ArgListParenthesized::from_syntax_node(db, node),
7480 )),
7481 SyntaxKind::ArgListBraced => {
7482 Some(WrappedArgList::BracedArgList(ArgListBraced::from_syntax_node(db, node)))
7483 }
7484 SyntaxKind::WrappedArgListMissing => {
7485 Some(WrappedArgList::Missing(WrappedArgListMissing::from_syntax_node(db, node)))
7486 }
7487 _ => None,
7488 }
7489 }
7490 fn as_syntax_node(&self) -> SyntaxNode {
7491 match self {
7492 WrappedArgList::BracketedArgList(x) => x.as_syntax_node(),
7493 WrappedArgList::ParenthesizedArgList(x) => x.as_syntax_node(),
7494 WrappedArgList::BracedArgList(x) => x.as_syntax_node(),
7495 WrappedArgList::Missing(x) => x.as_syntax_node(),
7496 }
7497 }
7498 fn stable_ptr(&self) -> Self::StablePtr {
7499 WrappedArgListPtr(self.as_syntax_node().0.stable_ptr)
7500 }
7501}
7502impl From<&WrappedArgList> for SyntaxStablePtrId {
7503 fn from(node: &WrappedArgList) -> Self {
7504 node.stable_ptr().untyped()
7505 }
7506}
7507impl WrappedArgList {
7508 pub fn is_variant(kind: SyntaxKind) -> bool {
7510 matches!(
7511 kind,
7512 SyntaxKind::ArgListBracketed
7513 | SyntaxKind::ArgListParenthesized
7514 | SyntaxKind::ArgListBraced
7515 | SyntaxKind::WrappedArgListMissing
7516 )
7517 }
7518}
7519#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7520pub struct WrappedArgListMissing {
7521 node: SyntaxNode,
7522 children: Arc<[SyntaxNode]>,
7523}
7524impl WrappedArgListMissing {
7525 pub fn new_green(db: &dyn SyntaxGroup) -> WrappedArgListMissingGreen {
7526 let children: Vec<GreenId> = vec![];
7527 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7528 WrappedArgListMissingGreen(
7529 Arc::new(GreenNode {
7530 kind: SyntaxKind::WrappedArgListMissing,
7531 details: GreenNodeDetails::Node { children, width },
7532 })
7533 .intern(db),
7534 )
7535 }
7536}
7537impl WrappedArgListMissing {}
7538#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7539pub struct WrappedArgListMissingPtr(pub SyntaxStablePtrId);
7540impl WrappedArgListMissingPtr {}
7541impl TypedStablePtr for WrappedArgListMissingPtr {
7542 type SyntaxNode = WrappedArgListMissing;
7543 fn untyped(&self) -> SyntaxStablePtrId {
7544 self.0
7545 }
7546 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedArgListMissing {
7547 WrappedArgListMissing::from_syntax_node(db, self.0.lookup(db))
7548 }
7549}
7550impl From<WrappedArgListMissingPtr> for SyntaxStablePtrId {
7551 fn from(ptr: WrappedArgListMissingPtr) -> Self {
7552 ptr.untyped()
7553 }
7554}
7555#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7556pub struct WrappedArgListMissingGreen(pub GreenId);
7557impl TypedSyntaxNode for WrappedArgListMissing {
7558 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedArgListMissing);
7559 type StablePtr = WrappedArgListMissingPtr;
7560 type Green = WrappedArgListMissingGreen;
7561 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7562 WrappedArgListMissingGreen(
7563 Arc::new(GreenNode {
7564 kind: SyntaxKind::WrappedArgListMissing,
7565 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
7566 })
7567 .intern(db),
7568 )
7569 }
7570 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7571 let kind = node.kind(db);
7572 assert_eq!(
7573 kind,
7574 SyntaxKind::WrappedArgListMissing,
7575 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7576 kind,
7577 SyntaxKind::WrappedArgListMissing
7578 );
7579 let children = db.get_children(node.clone());
7580 Self { node, children }
7581 }
7582 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7583 let kind = node.kind(db);
7584 if kind == SyntaxKind::WrappedArgListMissing {
7585 Some(Self::from_syntax_node(db, node))
7586 } else {
7587 None
7588 }
7589 }
7590 fn as_syntax_node(&self) -> SyntaxNode {
7591 self.node.clone()
7592 }
7593 fn stable_ptr(&self) -> Self::StablePtr {
7594 WrappedArgListMissingPtr(self.node.0.stable_ptr)
7595 }
7596}
7597impl From<&WrappedArgListMissing> for SyntaxStablePtrId {
7598 fn from(node: &WrappedArgListMissing) -> Self {
7599 node.stable_ptr().untyped()
7600 }
7601}
7602#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7603pub enum Pattern {
7604 Underscore(TerminalUnderscore),
7605 Literal(TerminalLiteralNumber),
7606 False(TerminalFalse),
7607 True(TerminalTrue),
7608 ShortString(TerminalShortString),
7609 String(TerminalString),
7610 Identifier(PatternIdentifier),
7611 Struct(PatternStruct),
7612 Tuple(PatternTuple),
7613 Enum(PatternEnum),
7614 FixedSizeArray(PatternFixedSizeArray),
7615 Path(ExprPath),
7616}
7617#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7618pub struct PatternPtr(pub SyntaxStablePtrId);
7619impl TypedStablePtr for PatternPtr {
7620 type SyntaxNode = Pattern;
7621 fn untyped(&self) -> SyntaxStablePtrId {
7622 self.0
7623 }
7624 fn lookup(&self, db: &dyn SyntaxGroup) -> Pattern {
7625 Pattern::from_syntax_node(db, self.0.lookup(db))
7626 }
7627}
7628impl From<PatternPtr> for SyntaxStablePtrId {
7629 fn from(ptr: PatternPtr) -> Self {
7630 ptr.untyped()
7631 }
7632}
7633impl From<TerminalUnderscorePtr> for PatternPtr {
7634 fn from(value: TerminalUnderscorePtr) -> Self {
7635 Self(value.0)
7636 }
7637}
7638impl From<TerminalLiteralNumberPtr> for PatternPtr {
7639 fn from(value: TerminalLiteralNumberPtr) -> Self {
7640 Self(value.0)
7641 }
7642}
7643impl From<TerminalFalsePtr> for PatternPtr {
7644 fn from(value: TerminalFalsePtr) -> Self {
7645 Self(value.0)
7646 }
7647}
7648impl From<TerminalTruePtr> for PatternPtr {
7649 fn from(value: TerminalTruePtr) -> Self {
7650 Self(value.0)
7651 }
7652}
7653impl From<TerminalShortStringPtr> for PatternPtr {
7654 fn from(value: TerminalShortStringPtr) -> Self {
7655 Self(value.0)
7656 }
7657}
7658impl From<TerminalStringPtr> for PatternPtr {
7659 fn from(value: TerminalStringPtr) -> Self {
7660 Self(value.0)
7661 }
7662}
7663impl From<PatternIdentifierPtr> for PatternPtr {
7664 fn from(value: PatternIdentifierPtr) -> Self {
7665 Self(value.0)
7666 }
7667}
7668impl From<PatternStructPtr> for PatternPtr {
7669 fn from(value: PatternStructPtr) -> Self {
7670 Self(value.0)
7671 }
7672}
7673impl From<PatternTuplePtr> for PatternPtr {
7674 fn from(value: PatternTuplePtr) -> Self {
7675 Self(value.0)
7676 }
7677}
7678impl From<PatternEnumPtr> for PatternPtr {
7679 fn from(value: PatternEnumPtr) -> Self {
7680 Self(value.0)
7681 }
7682}
7683impl From<PatternFixedSizeArrayPtr> for PatternPtr {
7684 fn from(value: PatternFixedSizeArrayPtr) -> Self {
7685 Self(value.0)
7686 }
7687}
7688impl From<ExprPathPtr> for PatternPtr {
7689 fn from(value: ExprPathPtr) -> Self {
7690 Self(value.0)
7691 }
7692}
7693impl From<TerminalUnderscoreGreen> for PatternGreen {
7694 fn from(value: TerminalUnderscoreGreen) -> Self {
7695 Self(value.0)
7696 }
7697}
7698impl From<TerminalLiteralNumberGreen> for PatternGreen {
7699 fn from(value: TerminalLiteralNumberGreen) -> Self {
7700 Self(value.0)
7701 }
7702}
7703impl From<TerminalFalseGreen> for PatternGreen {
7704 fn from(value: TerminalFalseGreen) -> Self {
7705 Self(value.0)
7706 }
7707}
7708impl From<TerminalTrueGreen> for PatternGreen {
7709 fn from(value: TerminalTrueGreen) -> Self {
7710 Self(value.0)
7711 }
7712}
7713impl From<TerminalShortStringGreen> for PatternGreen {
7714 fn from(value: TerminalShortStringGreen) -> Self {
7715 Self(value.0)
7716 }
7717}
7718impl From<TerminalStringGreen> for PatternGreen {
7719 fn from(value: TerminalStringGreen) -> Self {
7720 Self(value.0)
7721 }
7722}
7723impl From<PatternIdentifierGreen> for PatternGreen {
7724 fn from(value: PatternIdentifierGreen) -> Self {
7725 Self(value.0)
7726 }
7727}
7728impl From<PatternStructGreen> for PatternGreen {
7729 fn from(value: PatternStructGreen) -> Self {
7730 Self(value.0)
7731 }
7732}
7733impl From<PatternTupleGreen> for PatternGreen {
7734 fn from(value: PatternTupleGreen) -> Self {
7735 Self(value.0)
7736 }
7737}
7738impl From<PatternEnumGreen> for PatternGreen {
7739 fn from(value: PatternEnumGreen) -> Self {
7740 Self(value.0)
7741 }
7742}
7743impl From<PatternFixedSizeArrayGreen> for PatternGreen {
7744 fn from(value: PatternFixedSizeArrayGreen) -> Self {
7745 Self(value.0)
7746 }
7747}
7748impl From<ExprPathGreen> for PatternGreen {
7749 fn from(value: ExprPathGreen) -> Self {
7750 Self(value.0)
7751 }
7752}
7753#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7754pub struct PatternGreen(pub GreenId);
7755impl TypedSyntaxNode for Pattern {
7756 const OPTIONAL_KIND: Option<SyntaxKind> = None;
7757 type StablePtr = PatternPtr;
7758 type Green = PatternGreen;
7759 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7760 panic!("No missing variant.");
7761 }
7762 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7763 let kind = node.kind(db);
7764 match kind {
7765 SyntaxKind::TerminalUnderscore => {
7766 Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node))
7767 }
7768 SyntaxKind::TerminalLiteralNumber => {
7769 Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node))
7770 }
7771 SyntaxKind::TerminalFalse => Pattern::False(TerminalFalse::from_syntax_node(db, node)),
7772 SyntaxKind::TerminalTrue => Pattern::True(TerminalTrue::from_syntax_node(db, node)),
7773 SyntaxKind::TerminalShortString => {
7774 Pattern::ShortString(TerminalShortString::from_syntax_node(db, node))
7775 }
7776 SyntaxKind::TerminalString => {
7777 Pattern::String(TerminalString::from_syntax_node(db, node))
7778 }
7779 SyntaxKind::PatternIdentifier => {
7780 Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node))
7781 }
7782 SyntaxKind::PatternStruct => Pattern::Struct(PatternStruct::from_syntax_node(db, node)),
7783 SyntaxKind::PatternTuple => Pattern::Tuple(PatternTuple::from_syntax_node(db, node)),
7784 SyntaxKind::PatternEnum => Pattern::Enum(PatternEnum::from_syntax_node(db, node)),
7785 SyntaxKind::PatternFixedSizeArray => {
7786 Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node))
7787 }
7788 SyntaxKind::ExprPath => Pattern::Path(ExprPath::from_syntax_node(db, node)),
7789 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Pattern"),
7790 }
7791 }
7792 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7793 let kind = node.kind(db);
7794 match kind {
7795 SyntaxKind::TerminalUnderscore => {
7796 Some(Pattern::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
7797 }
7798 SyntaxKind::TerminalLiteralNumber => {
7799 Some(Pattern::Literal(TerminalLiteralNumber::from_syntax_node(db, node)))
7800 }
7801 SyntaxKind::TerminalFalse => {
7802 Some(Pattern::False(TerminalFalse::from_syntax_node(db, node)))
7803 }
7804 SyntaxKind::TerminalTrue => {
7805 Some(Pattern::True(TerminalTrue::from_syntax_node(db, node)))
7806 }
7807 SyntaxKind::TerminalShortString => {
7808 Some(Pattern::ShortString(TerminalShortString::from_syntax_node(db, node)))
7809 }
7810 SyntaxKind::TerminalString => {
7811 Some(Pattern::String(TerminalString::from_syntax_node(db, node)))
7812 }
7813 SyntaxKind::PatternIdentifier => {
7814 Some(Pattern::Identifier(PatternIdentifier::from_syntax_node(db, node)))
7815 }
7816 SyntaxKind::PatternStruct => {
7817 Some(Pattern::Struct(PatternStruct::from_syntax_node(db, node)))
7818 }
7819 SyntaxKind::PatternTuple => {
7820 Some(Pattern::Tuple(PatternTuple::from_syntax_node(db, node)))
7821 }
7822 SyntaxKind::PatternEnum => Some(Pattern::Enum(PatternEnum::from_syntax_node(db, node))),
7823 SyntaxKind::PatternFixedSizeArray => {
7824 Some(Pattern::FixedSizeArray(PatternFixedSizeArray::from_syntax_node(db, node)))
7825 }
7826 SyntaxKind::ExprPath => Some(Pattern::Path(ExprPath::from_syntax_node(db, node))),
7827 _ => None,
7828 }
7829 }
7830 fn as_syntax_node(&self) -> SyntaxNode {
7831 match self {
7832 Pattern::Underscore(x) => x.as_syntax_node(),
7833 Pattern::Literal(x) => x.as_syntax_node(),
7834 Pattern::False(x) => x.as_syntax_node(),
7835 Pattern::True(x) => x.as_syntax_node(),
7836 Pattern::ShortString(x) => x.as_syntax_node(),
7837 Pattern::String(x) => x.as_syntax_node(),
7838 Pattern::Identifier(x) => x.as_syntax_node(),
7839 Pattern::Struct(x) => x.as_syntax_node(),
7840 Pattern::Tuple(x) => x.as_syntax_node(),
7841 Pattern::Enum(x) => x.as_syntax_node(),
7842 Pattern::FixedSizeArray(x) => x.as_syntax_node(),
7843 Pattern::Path(x) => x.as_syntax_node(),
7844 }
7845 }
7846 fn stable_ptr(&self) -> Self::StablePtr {
7847 PatternPtr(self.as_syntax_node().0.stable_ptr)
7848 }
7849}
7850impl From<&Pattern> for SyntaxStablePtrId {
7851 fn from(node: &Pattern) -> Self {
7852 node.stable_ptr().untyped()
7853 }
7854}
7855impl Pattern {
7856 pub fn is_variant(kind: SyntaxKind) -> bool {
7858 matches!(
7859 kind,
7860 SyntaxKind::TerminalUnderscore
7861 | SyntaxKind::TerminalLiteralNumber
7862 | SyntaxKind::TerminalFalse
7863 | SyntaxKind::TerminalTrue
7864 | SyntaxKind::TerminalShortString
7865 | SyntaxKind::TerminalString
7866 | SyntaxKind::PatternIdentifier
7867 | SyntaxKind::PatternStruct
7868 | SyntaxKind::PatternTuple
7869 | SyntaxKind::PatternEnum
7870 | SyntaxKind::PatternFixedSizeArray
7871 | SyntaxKind::ExprPath
7872 )
7873 }
7874}
7875#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7876pub struct PatternIdentifier {
7877 node: SyntaxNode,
7878 children: Arc<[SyntaxNode]>,
7879}
7880impl PatternIdentifier {
7881 pub const INDEX_MODIFIERS: usize = 0;
7882 pub const INDEX_NAME: usize = 1;
7883 pub fn new_green(
7884 db: &dyn SyntaxGroup,
7885 modifiers: ModifierListGreen,
7886 name: TerminalIdentifierGreen,
7887 ) -> PatternIdentifierGreen {
7888 let children: Vec<GreenId> = vec![modifiers.0, name.0];
7889 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
7890 PatternIdentifierGreen(
7891 Arc::new(GreenNode {
7892 kind: SyntaxKind::PatternIdentifier,
7893 details: GreenNodeDetails::Node { children, width },
7894 })
7895 .intern(db),
7896 )
7897 }
7898}
7899impl PatternIdentifier {
7900 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
7901 ModifierList::from_syntax_node(db, self.children[0].clone())
7902 }
7903 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
7904 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
7905 }
7906}
7907#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7908pub struct PatternIdentifierPtr(pub SyntaxStablePtrId);
7909impl PatternIdentifierPtr {
7910 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
7911 let ptr = self.0.lookup_intern(db);
7912 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
7913 TerminalIdentifierGreen(key_fields[0])
7914 } else {
7915 panic!("Unexpected key field query on root.");
7916 }
7917 }
7918}
7919impl TypedStablePtr for PatternIdentifierPtr {
7920 type SyntaxNode = PatternIdentifier;
7921 fn untyped(&self) -> SyntaxStablePtrId {
7922 self.0
7923 }
7924 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternIdentifier {
7925 PatternIdentifier::from_syntax_node(db, self.0.lookup(db))
7926 }
7927}
7928impl From<PatternIdentifierPtr> for SyntaxStablePtrId {
7929 fn from(ptr: PatternIdentifierPtr) -> Self {
7930 ptr.untyped()
7931 }
7932}
7933#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
7934pub struct PatternIdentifierGreen(pub GreenId);
7935impl TypedSyntaxNode for PatternIdentifier {
7936 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternIdentifier);
7937 type StablePtr = PatternIdentifierPtr;
7938 type Green = PatternIdentifierGreen;
7939 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
7940 PatternIdentifierGreen(
7941 Arc::new(GreenNode {
7942 kind: SyntaxKind::PatternIdentifier,
7943 details: GreenNodeDetails::Node {
7944 children: vec![ModifierList::missing(db).0, TerminalIdentifier::missing(db).0],
7945 width: TextWidth::default(),
7946 },
7947 })
7948 .intern(db),
7949 )
7950 }
7951 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
7952 let kind = node.kind(db);
7953 assert_eq!(
7954 kind,
7955 SyntaxKind::PatternIdentifier,
7956 "Unexpected SyntaxKind {:?}. Expected {:?}.",
7957 kind,
7958 SyntaxKind::PatternIdentifier
7959 );
7960 let children = db.get_children(node.clone());
7961 Self { node, children }
7962 }
7963 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
7964 let kind = node.kind(db);
7965 if kind == SyntaxKind::PatternIdentifier {
7966 Some(Self::from_syntax_node(db, node))
7967 } else {
7968 None
7969 }
7970 }
7971 fn as_syntax_node(&self) -> SyntaxNode {
7972 self.node.clone()
7973 }
7974 fn stable_ptr(&self) -> Self::StablePtr {
7975 PatternIdentifierPtr(self.node.0.stable_ptr)
7976 }
7977}
7978impl From<&PatternIdentifier> for SyntaxStablePtrId {
7979 fn from(node: &PatternIdentifier) -> Self {
7980 node.stable_ptr().untyped()
7981 }
7982}
7983#[derive(Clone, Debug, Eq, Hash, PartialEq)]
7984pub struct PatternStruct {
7985 node: SyntaxNode,
7986 children: Arc<[SyntaxNode]>,
7987}
7988impl PatternStruct {
7989 pub const INDEX_PATH: usize = 0;
7990 pub const INDEX_LBRACE: usize = 1;
7991 pub const INDEX_PARAMS: usize = 2;
7992 pub const INDEX_RBRACE: usize = 3;
7993 pub fn new_green(
7994 db: &dyn SyntaxGroup,
7995 path: ExprPathGreen,
7996 lbrace: TerminalLBraceGreen,
7997 params: PatternStructParamListGreen,
7998 rbrace: TerminalRBraceGreen,
7999 ) -> PatternStructGreen {
8000 let children: Vec<GreenId> = vec![path.0, lbrace.0, params.0, rbrace.0];
8001 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8002 PatternStructGreen(
8003 Arc::new(GreenNode {
8004 kind: SyntaxKind::PatternStruct,
8005 details: GreenNodeDetails::Node { children, width },
8006 })
8007 .intern(db),
8008 )
8009 }
8010}
8011impl PatternStruct {
8012 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8013 ExprPath::from_syntax_node(db, self.children[0].clone())
8014 }
8015 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
8016 TerminalLBrace::from_syntax_node(db, self.children[1].clone())
8017 }
8018 pub fn params(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8019 PatternStructParamList::from_syntax_node(db, self.children[2].clone())
8020 }
8021 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
8022 TerminalRBrace::from_syntax_node(db, self.children[3].clone())
8023 }
8024}
8025#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8026pub struct PatternStructPtr(pub SyntaxStablePtrId);
8027impl PatternStructPtr {}
8028impl TypedStablePtr for PatternStructPtr {
8029 type SyntaxNode = PatternStruct;
8030 fn untyped(&self) -> SyntaxStablePtrId {
8031 self.0
8032 }
8033 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStruct {
8034 PatternStruct::from_syntax_node(db, self.0.lookup(db))
8035 }
8036}
8037impl From<PatternStructPtr> for SyntaxStablePtrId {
8038 fn from(ptr: PatternStructPtr) -> Self {
8039 ptr.untyped()
8040 }
8041}
8042#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8043pub struct PatternStructGreen(pub GreenId);
8044impl TypedSyntaxNode for PatternStruct {
8045 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStruct);
8046 type StablePtr = PatternStructPtr;
8047 type Green = PatternStructGreen;
8048 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8049 PatternStructGreen(
8050 Arc::new(GreenNode {
8051 kind: SyntaxKind::PatternStruct,
8052 details: GreenNodeDetails::Node {
8053 children: vec![
8054 ExprPath::missing(db).0,
8055 TerminalLBrace::missing(db).0,
8056 PatternStructParamList::missing(db).0,
8057 TerminalRBrace::missing(db).0,
8058 ],
8059 width: TextWidth::default(),
8060 },
8061 })
8062 .intern(db),
8063 )
8064 }
8065 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8066 let kind = node.kind(db);
8067 assert_eq!(
8068 kind,
8069 SyntaxKind::PatternStruct,
8070 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8071 kind,
8072 SyntaxKind::PatternStruct
8073 );
8074 let children = db.get_children(node.clone());
8075 Self { node, children }
8076 }
8077 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8078 let kind = node.kind(db);
8079 if kind == SyntaxKind::PatternStruct {
8080 Some(Self::from_syntax_node(db, node))
8081 } else {
8082 None
8083 }
8084 }
8085 fn as_syntax_node(&self) -> SyntaxNode {
8086 self.node.clone()
8087 }
8088 fn stable_ptr(&self) -> Self::StablePtr {
8089 PatternStructPtr(self.node.0.stable_ptr)
8090 }
8091}
8092impl From<&PatternStruct> for SyntaxStablePtrId {
8093 fn from(node: &PatternStruct) -> Self {
8094 node.stable_ptr().untyped()
8095 }
8096}
8097#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8098pub struct PatternStructParamList(ElementList<PatternStructParam, 2>);
8099impl Deref for PatternStructParamList {
8100 type Target = ElementList<PatternStructParam, 2>;
8101 fn deref(&self) -> &Self::Target {
8102 &self.0
8103 }
8104}
8105impl PatternStructParamList {
8106 pub fn new_green(
8107 db: &dyn SyntaxGroup,
8108 children: Vec<PatternStructParamListElementOrSeparatorGreen>,
8109 ) -> PatternStructParamListGreen {
8110 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8111 PatternStructParamListGreen(
8112 Arc::new(GreenNode {
8113 kind: SyntaxKind::PatternStructParamList,
8114 details: GreenNodeDetails::Node {
8115 children: children.iter().map(|x| x.id()).collect(),
8116 width,
8117 },
8118 })
8119 .intern(db),
8120 )
8121 }
8122}
8123#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8124pub struct PatternStructParamListPtr(pub SyntaxStablePtrId);
8125impl TypedStablePtr for PatternStructParamListPtr {
8126 type SyntaxNode = PatternStructParamList;
8127 fn untyped(&self) -> SyntaxStablePtrId {
8128 self.0
8129 }
8130 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamList {
8131 PatternStructParamList::from_syntax_node(db, self.0.lookup(db))
8132 }
8133}
8134impl From<PatternStructParamListPtr> for SyntaxStablePtrId {
8135 fn from(ptr: PatternStructParamListPtr) -> Self {
8136 ptr.untyped()
8137 }
8138}
8139#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8140pub enum PatternStructParamListElementOrSeparatorGreen {
8141 Separator(TerminalCommaGreen),
8142 Element(PatternStructParamGreen),
8143}
8144impl From<TerminalCommaGreen> for PatternStructParamListElementOrSeparatorGreen {
8145 fn from(value: TerminalCommaGreen) -> Self {
8146 PatternStructParamListElementOrSeparatorGreen::Separator(value)
8147 }
8148}
8149impl From<PatternStructParamGreen> for PatternStructParamListElementOrSeparatorGreen {
8150 fn from(value: PatternStructParamGreen) -> Self {
8151 PatternStructParamListElementOrSeparatorGreen::Element(value)
8152 }
8153}
8154impl PatternStructParamListElementOrSeparatorGreen {
8155 fn id(&self) -> GreenId {
8156 match self {
8157 PatternStructParamListElementOrSeparatorGreen::Separator(green) => green.0,
8158 PatternStructParamListElementOrSeparatorGreen::Element(green) => green.0,
8159 }
8160 }
8161}
8162#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8163pub struct PatternStructParamListGreen(pub GreenId);
8164impl TypedSyntaxNode for PatternStructParamList {
8165 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamList);
8166 type StablePtr = PatternStructParamListPtr;
8167 type Green = PatternStructParamListGreen;
8168 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8169 PatternStructParamListGreen(
8170 Arc::new(GreenNode {
8171 kind: SyntaxKind::PatternStructParamList,
8172 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8173 })
8174 .intern(db),
8175 )
8176 }
8177 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8178 Self(ElementList::new(node))
8179 }
8180 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8181 if node.kind(db) == SyntaxKind::PatternStructParamList {
8182 Some(Self(ElementList::new(node)))
8183 } else {
8184 None
8185 }
8186 }
8187 fn as_syntax_node(&self) -> SyntaxNode {
8188 self.node.clone()
8189 }
8190 fn stable_ptr(&self) -> Self::StablePtr {
8191 PatternStructParamListPtr(self.node.0.stable_ptr)
8192 }
8193}
8194impl From<&PatternStructParamList> for SyntaxStablePtrId {
8195 fn from(node: &PatternStructParamList) -> Self {
8196 node.stable_ptr().untyped()
8197 }
8198}
8199#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8200pub struct PatternTuple {
8201 node: SyntaxNode,
8202 children: Arc<[SyntaxNode]>,
8203}
8204impl PatternTuple {
8205 pub const INDEX_LPAREN: usize = 0;
8206 pub const INDEX_PATTERNS: usize = 1;
8207 pub const INDEX_RPAREN: usize = 2;
8208 pub fn new_green(
8209 db: &dyn SyntaxGroup,
8210 lparen: TerminalLParenGreen,
8211 patterns: PatternListGreen,
8212 rparen: TerminalRParenGreen,
8213 ) -> PatternTupleGreen {
8214 let children: Vec<GreenId> = vec![lparen.0, patterns.0, rparen.0];
8215 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8216 PatternTupleGreen(
8217 Arc::new(GreenNode {
8218 kind: SyntaxKind::PatternTuple,
8219 details: GreenNodeDetails::Node { children, width },
8220 })
8221 .intern(db),
8222 )
8223 }
8224}
8225impl PatternTuple {
8226 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
8227 TerminalLParen::from_syntax_node(db, self.children[0].clone())
8228 }
8229 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8230 PatternList::from_syntax_node(db, self.children[1].clone())
8231 }
8232 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
8233 TerminalRParen::from_syntax_node(db, self.children[2].clone())
8234 }
8235}
8236#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8237pub struct PatternTuplePtr(pub SyntaxStablePtrId);
8238impl PatternTuplePtr {}
8239impl TypedStablePtr for PatternTuplePtr {
8240 type SyntaxNode = PatternTuple;
8241 fn untyped(&self) -> SyntaxStablePtrId {
8242 self.0
8243 }
8244 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternTuple {
8245 PatternTuple::from_syntax_node(db, self.0.lookup(db))
8246 }
8247}
8248impl From<PatternTuplePtr> for SyntaxStablePtrId {
8249 fn from(ptr: PatternTuplePtr) -> Self {
8250 ptr.untyped()
8251 }
8252}
8253#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8254pub struct PatternTupleGreen(pub GreenId);
8255impl TypedSyntaxNode for PatternTuple {
8256 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternTuple);
8257 type StablePtr = PatternTuplePtr;
8258 type Green = PatternTupleGreen;
8259 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8260 PatternTupleGreen(
8261 Arc::new(GreenNode {
8262 kind: SyntaxKind::PatternTuple,
8263 details: GreenNodeDetails::Node {
8264 children: vec![
8265 TerminalLParen::missing(db).0,
8266 PatternList::missing(db).0,
8267 TerminalRParen::missing(db).0,
8268 ],
8269 width: TextWidth::default(),
8270 },
8271 })
8272 .intern(db),
8273 )
8274 }
8275 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8276 let kind = node.kind(db);
8277 assert_eq!(
8278 kind,
8279 SyntaxKind::PatternTuple,
8280 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8281 kind,
8282 SyntaxKind::PatternTuple
8283 );
8284 let children = db.get_children(node.clone());
8285 Self { node, children }
8286 }
8287 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8288 let kind = node.kind(db);
8289 if kind == SyntaxKind::PatternTuple { Some(Self::from_syntax_node(db, node)) } else { None }
8290 }
8291 fn as_syntax_node(&self) -> SyntaxNode {
8292 self.node.clone()
8293 }
8294 fn stable_ptr(&self) -> Self::StablePtr {
8295 PatternTuplePtr(self.node.0.stable_ptr)
8296 }
8297}
8298impl From<&PatternTuple> for SyntaxStablePtrId {
8299 fn from(node: &PatternTuple) -> Self {
8300 node.stable_ptr().untyped()
8301 }
8302}
8303#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8304pub struct PatternFixedSizeArray {
8305 node: SyntaxNode,
8306 children: Arc<[SyntaxNode]>,
8307}
8308impl PatternFixedSizeArray {
8309 pub const INDEX_LBRACK: usize = 0;
8310 pub const INDEX_PATTERNS: usize = 1;
8311 pub const INDEX_RBRACK: usize = 2;
8312 pub fn new_green(
8313 db: &dyn SyntaxGroup,
8314 lbrack: TerminalLBrackGreen,
8315 patterns: PatternListGreen,
8316 rbrack: TerminalRBrackGreen,
8317 ) -> PatternFixedSizeArrayGreen {
8318 let children: Vec<GreenId> = vec![lbrack.0, patterns.0, rbrack.0];
8319 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8320 PatternFixedSizeArrayGreen(
8321 Arc::new(GreenNode {
8322 kind: SyntaxKind::PatternFixedSizeArray,
8323 details: GreenNodeDetails::Node { children, width },
8324 })
8325 .intern(db),
8326 )
8327 }
8328}
8329impl PatternFixedSizeArray {
8330 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
8331 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
8332 }
8333 pub fn patterns(&self, db: &dyn SyntaxGroup) -> PatternList {
8334 PatternList::from_syntax_node(db, self.children[1].clone())
8335 }
8336 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
8337 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
8338 }
8339}
8340#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8341pub struct PatternFixedSizeArrayPtr(pub SyntaxStablePtrId);
8342impl PatternFixedSizeArrayPtr {}
8343impl TypedStablePtr for PatternFixedSizeArrayPtr {
8344 type SyntaxNode = PatternFixedSizeArray;
8345 fn untyped(&self) -> SyntaxStablePtrId {
8346 self.0
8347 }
8348 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternFixedSizeArray {
8349 PatternFixedSizeArray::from_syntax_node(db, self.0.lookup(db))
8350 }
8351}
8352impl From<PatternFixedSizeArrayPtr> for SyntaxStablePtrId {
8353 fn from(ptr: PatternFixedSizeArrayPtr) -> Self {
8354 ptr.untyped()
8355 }
8356}
8357#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8358pub struct PatternFixedSizeArrayGreen(pub GreenId);
8359impl TypedSyntaxNode for PatternFixedSizeArray {
8360 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternFixedSizeArray);
8361 type StablePtr = PatternFixedSizeArrayPtr;
8362 type Green = PatternFixedSizeArrayGreen;
8363 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8364 PatternFixedSizeArrayGreen(
8365 Arc::new(GreenNode {
8366 kind: SyntaxKind::PatternFixedSizeArray,
8367 details: GreenNodeDetails::Node {
8368 children: vec![
8369 TerminalLBrack::missing(db).0,
8370 PatternList::missing(db).0,
8371 TerminalRBrack::missing(db).0,
8372 ],
8373 width: TextWidth::default(),
8374 },
8375 })
8376 .intern(db),
8377 )
8378 }
8379 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8380 let kind = node.kind(db);
8381 assert_eq!(
8382 kind,
8383 SyntaxKind::PatternFixedSizeArray,
8384 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8385 kind,
8386 SyntaxKind::PatternFixedSizeArray
8387 );
8388 let children = db.get_children(node.clone());
8389 Self { node, children }
8390 }
8391 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8392 let kind = node.kind(db);
8393 if kind == SyntaxKind::PatternFixedSizeArray {
8394 Some(Self::from_syntax_node(db, node))
8395 } else {
8396 None
8397 }
8398 }
8399 fn as_syntax_node(&self) -> SyntaxNode {
8400 self.node.clone()
8401 }
8402 fn stable_ptr(&self) -> Self::StablePtr {
8403 PatternFixedSizeArrayPtr(self.node.0.stable_ptr)
8404 }
8405}
8406impl From<&PatternFixedSizeArray> for SyntaxStablePtrId {
8407 fn from(node: &PatternFixedSizeArray) -> Self {
8408 node.stable_ptr().untyped()
8409 }
8410}
8411#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8412pub struct PatternList(ElementList<Pattern, 2>);
8413impl Deref for PatternList {
8414 type Target = ElementList<Pattern, 2>;
8415 fn deref(&self) -> &Self::Target {
8416 &self.0
8417 }
8418}
8419impl PatternList {
8420 pub fn new_green(
8421 db: &dyn SyntaxGroup,
8422 children: Vec<PatternListElementOrSeparatorGreen>,
8423 ) -> PatternListGreen {
8424 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8425 PatternListGreen(
8426 Arc::new(GreenNode {
8427 kind: SyntaxKind::PatternList,
8428 details: GreenNodeDetails::Node {
8429 children: children.iter().map(|x| x.id()).collect(),
8430 width,
8431 },
8432 })
8433 .intern(db),
8434 )
8435 }
8436}
8437#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8438pub struct PatternListPtr(pub SyntaxStablePtrId);
8439impl TypedStablePtr for PatternListPtr {
8440 type SyntaxNode = PatternList;
8441 fn untyped(&self) -> SyntaxStablePtrId {
8442 self.0
8443 }
8444 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternList {
8445 PatternList::from_syntax_node(db, self.0.lookup(db))
8446 }
8447}
8448impl From<PatternListPtr> for SyntaxStablePtrId {
8449 fn from(ptr: PatternListPtr) -> Self {
8450 ptr.untyped()
8451 }
8452}
8453#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8454pub enum PatternListElementOrSeparatorGreen {
8455 Separator(TerminalCommaGreen),
8456 Element(PatternGreen),
8457}
8458impl From<TerminalCommaGreen> for PatternListElementOrSeparatorGreen {
8459 fn from(value: TerminalCommaGreen) -> Self {
8460 PatternListElementOrSeparatorGreen::Separator(value)
8461 }
8462}
8463impl From<PatternGreen> for PatternListElementOrSeparatorGreen {
8464 fn from(value: PatternGreen) -> Self {
8465 PatternListElementOrSeparatorGreen::Element(value)
8466 }
8467}
8468impl PatternListElementOrSeparatorGreen {
8469 fn id(&self) -> GreenId {
8470 match self {
8471 PatternListElementOrSeparatorGreen::Separator(green) => green.0,
8472 PatternListElementOrSeparatorGreen::Element(green) => green.0,
8473 }
8474 }
8475}
8476#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8477pub struct PatternListGreen(pub GreenId);
8478impl TypedSyntaxNode for PatternList {
8479 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternList);
8480 type StablePtr = PatternListPtr;
8481 type Green = PatternListGreen;
8482 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8483 PatternListGreen(
8484 Arc::new(GreenNode {
8485 kind: SyntaxKind::PatternList,
8486 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8487 })
8488 .intern(db),
8489 )
8490 }
8491 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8492 Self(ElementList::new(node))
8493 }
8494 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8495 if node.kind(db) == SyntaxKind::PatternList {
8496 Some(Self(ElementList::new(node)))
8497 } else {
8498 None
8499 }
8500 }
8501 fn as_syntax_node(&self) -> SyntaxNode {
8502 self.node.clone()
8503 }
8504 fn stable_ptr(&self) -> Self::StablePtr {
8505 PatternListPtr(self.node.0.stable_ptr)
8506 }
8507}
8508impl From<&PatternList> for SyntaxStablePtrId {
8509 fn from(node: &PatternList) -> Self {
8510 node.stable_ptr().untyped()
8511 }
8512}
8513#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8514pub struct PatternListOr(ElementList<Pattern, 2>);
8515impl Deref for PatternListOr {
8516 type Target = ElementList<Pattern, 2>;
8517 fn deref(&self) -> &Self::Target {
8518 &self.0
8519 }
8520}
8521impl PatternListOr {
8522 pub fn new_green(
8523 db: &dyn SyntaxGroup,
8524 children: Vec<PatternListOrElementOrSeparatorGreen>,
8525 ) -> PatternListOrGreen {
8526 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
8527 PatternListOrGreen(
8528 Arc::new(GreenNode {
8529 kind: SyntaxKind::PatternListOr,
8530 details: GreenNodeDetails::Node {
8531 children: children.iter().map(|x| x.id()).collect(),
8532 width,
8533 },
8534 })
8535 .intern(db),
8536 )
8537 }
8538}
8539#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8540pub struct PatternListOrPtr(pub SyntaxStablePtrId);
8541impl TypedStablePtr for PatternListOrPtr {
8542 type SyntaxNode = PatternListOr;
8543 fn untyped(&self) -> SyntaxStablePtrId {
8544 self.0
8545 }
8546 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternListOr {
8547 PatternListOr::from_syntax_node(db, self.0.lookup(db))
8548 }
8549}
8550impl From<PatternListOrPtr> for SyntaxStablePtrId {
8551 fn from(ptr: PatternListOrPtr) -> Self {
8552 ptr.untyped()
8553 }
8554}
8555#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8556pub enum PatternListOrElementOrSeparatorGreen {
8557 Separator(TerminalOrGreen),
8558 Element(PatternGreen),
8559}
8560impl From<TerminalOrGreen> for PatternListOrElementOrSeparatorGreen {
8561 fn from(value: TerminalOrGreen) -> Self {
8562 PatternListOrElementOrSeparatorGreen::Separator(value)
8563 }
8564}
8565impl From<PatternGreen> for PatternListOrElementOrSeparatorGreen {
8566 fn from(value: PatternGreen) -> Self {
8567 PatternListOrElementOrSeparatorGreen::Element(value)
8568 }
8569}
8570impl PatternListOrElementOrSeparatorGreen {
8571 fn id(&self) -> GreenId {
8572 match self {
8573 PatternListOrElementOrSeparatorGreen::Separator(green) => green.0,
8574 PatternListOrElementOrSeparatorGreen::Element(green) => green.0,
8575 }
8576 }
8577}
8578#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8579pub struct PatternListOrGreen(pub GreenId);
8580impl TypedSyntaxNode for PatternListOr {
8581 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternListOr);
8582 type StablePtr = PatternListOrPtr;
8583 type Green = PatternListOrGreen;
8584 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8585 PatternListOrGreen(
8586 Arc::new(GreenNode {
8587 kind: SyntaxKind::PatternListOr,
8588 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
8589 })
8590 .intern(db),
8591 )
8592 }
8593 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8594 Self(ElementList::new(node))
8595 }
8596 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8597 if node.kind(db) == SyntaxKind::PatternListOr {
8598 Some(Self(ElementList::new(node)))
8599 } else {
8600 None
8601 }
8602 }
8603 fn as_syntax_node(&self) -> SyntaxNode {
8604 self.node.clone()
8605 }
8606 fn stable_ptr(&self) -> Self::StablePtr {
8607 PatternListOrPtr(self.node.0.stable_ptr)
8608 }
8609}
8610impl From<&PatternListOr> for SyntaxStablePtrId {
8611 fn from(node: &PatternListOr) -> Self {
8612 node.stable_ptr().untyped()
8613 }
8614}
8615#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8616pub enum PatternStructParam {
8617 Single(PatternIdentifier),
8618 WithExpr(PatternStructParamWithExpr),
8619 Tail(TerminalDotDot),
8620}
8621#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8622pub struct PatternStructParamPtr(pub SyntaxStablePtrId);
8623impl TypedStablePtr for PatternStructParamPtr {
8624 type SyntaxNode = PatternStructParam;
8625 fn untyped(&self) -> SyntaxStablePtrId {
8626 self.0
8627 }
8628 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParam {
8629 PatternStructParam::from_syntax_node(db, self.0.lookup(db))
8630 }
8631}
8632impl From<PatternStructParamPtr> for SyntaxStablePtrId {
8633 fn from(ptr: PatternStructParamPtr) -> Self {
8634 ptr.untyped()
8635 }
8636}
8637impl From<PatternIdentifierPtr> for PatternStructParamPtr {
8638 fn from(value: PatternIdentifierPtr) -> Self {
8639 Self(value.0)
8640 }
8641}
8642impl From<PatternStructParamWithExprPtr> for PatternStructParamPtr {
8643 fn from(value: PatternStructParamWithExprPtr) -> Self {
8644 Self(value.0)
8645 }
8646}
8647impl From<TerminalDotDotPtr> for PatternStructParamPtr {
8648 fn from(value: TerminalDotDotPtr) -> Self {
8649 Self(value.0)
8650 }
8651}
8652impl From<PatternIdentifierGreen> for PatternStructParamGreen {
8653 fn from(value: PatternIdentifierGreen) -> Self {
8654 Self(value.0)
8655 }
8656}
8657impl From<PatternStructParamWithExprGreen> for PatternStructParamGreen {
8658 fn from(value: PatternStructParamWithExprGreen) -> Self {
8659 Self(value.0)
8660 }
8661}
8662impl From<TerminalDotDotGreen> for PatternStructParamGreen {
8663 fn from(value: TerminalDotDotGreen) -> Self {
8664 Self(value.0)
8665 }
8666}
8667#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8668pub struct PatternStructParamGreen(pub GreenId);
8669impl TypedSyntaxNode for PatternStructParam {
8670 const OPTIONAL_KIND: Option<SyntaxKind> = None;
8671 type StablePtr = PatternStructParamPtr;
8672 type Green = PatternStructParamGreen;
8673 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8674 panic!("No missing variant.");
8675 }
8676 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8677 let kind = node.kind(db);
8678 match kind {
8679 SyntaxKind::PatternIdentifier => {
8680 PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node))
8681 }
8682 SyntaxKind::PatternStructParamWithExpr => {
8683 PatternStructParam::WithExpr(PatternStructParamWithExpr::from_syntax_node(db, node))
8684 }
8685 SyntaxKind::TerminalDotDot => {
8686 PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node))
8687 }
8688 _ => panic!(
8689 "Unexpected syntax kind {:?} when constructing {}.",
8690 kind, "PatternStructParam"
8691 ),
8692 }
8693 }
8694 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8695 let kind = node.kind(db);
8696 match kind {
8697 SyntaxKind::PatternIdentifier => {
8698 Some(PatternStructParam::Single(PatternIdentifier::from_syntax_node(db, node)))
8699 }
8700 SyntaxKind::PatternStructParamWithExpr => Some(PatternStructParam::WithExpr(
8701 PatternStructParamWithExpr::from_syntax_node(db, node),
8702 )),
8703 SyntaxKind::TerminalDotDot => {
8704 Some(PatternStructParam::Tail(TerminalDotDot::from_syntax_node(db, node)))
8705 }
8706 _ => None,
8707 }
8708 }
8709 fn as_syntax_node(&self) -> SyntaxNode {
8710 match self {
8711 PatternStructParam::Single(x) => x.as_syntax_node(),
8712 PatternStructParam::WithExpr(x) => x.as_syntax_node(),
8713 PatternStructParam::Tail(x) => x.as_syntax_node(),
8714 }
8715 }
8716 fn stable_ptr(&self) -> Self::StablePtr {
8717 PatternStructParamPtr(self.as_syntax_node().0.stable_ptr)
8718 }
8719}
8720impl From<&PatternStructParam> for SyntaxStablePtrId {
8721 fn from(node: &PatternStructParam) -> Self {
8722 node.stable_ptr().untyped()
8723 }
8724}
8725impl PatternStructParam {
8726 pub fn is_variant(kind: SyntaxKind) -> bool {
8728 matches!(
8729 kind,
8730 SyntaxKind::PatternIdentifier
8731 | SyntaxKind::PatternStructParamWithExpr
8732 | SyntaxKind::TerminalDotDot
8733 )
8734 }
8735}
8736#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8737pub struct PatternStructParamWithExpr {
8738 node: SyntaxNode,
8739 children: Arc<[SyntaxNode]>,
8740}
8741impl PatternStructParamWithExpr {
8742 pub const INDEX_MODIFIERS: usize = 0;
8743 pub const INDEX_NAME: usize = 1;
8744 pub const INDEX_COLON: usize = 2;
8745 pub const INDEX_PATTERN: usize = 3;
8746 pub fn new_green(
8747 db: &dyn SyntaxGroup,
8748 modifiers: ModifierListGreen,
8749 name: TerminalIdentifierGreen,
8750 colon: TerminalColonGreen,
8751 pattern: PatternGreen,
8752 ) -> PatternStructParamWithExprGreen {
8753 let children: Vec<GreenId> = vec![modifiers.0, name.0, colon.0, pattern.0];
8754 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8755 PatternStructParamWithExprGreen(
8756 Arc::new(GreenNode {
8757 kind: SyntaxKind::PatternStructParamWithExpr,
8758 details: GreenNodeDetails::Node { children, width },
8759 })
8760 .intern(db),
8761 )
8762 }
8763}
8764impl PatternStructParamWithExpr {
8765 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
8766 ModifierList::from_syntax_node(db, self.children[0].clone())
8767 }
8768 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
8769 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
8770 }
8771 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
8772 TerminalColon::from_syntax_node(db, self.children[2].clone())
8773 }
8774 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
8775 Pattern::from_syntax_node(db, self.children[3].clone())
8776 }
8777}
8778#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8779pub struct PatternStructParamWithExprPtr(pub SyntaxStablePtrId);
8780impl PatternStructParamWithExprPtr {}
8781impl TypedStablePtr for PatternStructParamWithExprPtr {
8782 type SyntaxNode = PatternStructParamWithExpr;
8783 fn untyped(&self) -> SyntaxStablePtrId {
8784 self.0
8785 }
8786 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternStructParamWithExpr {
8787 PatternStructParamWithExpr::from_syntax_node(db, self.0.lookup(db))
8788 }
8789}
8790impl From<PatternStructParamWithExprPtr> for SyntaxStablePtrId {
8791 fn from(ptr: PatternStructParamWithExprPtr) -> Self {
8792 ptr.untyped()
8793 }
8794}
8795#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8796pub struct PatternStructParamWithExprGreen(pub GreenId);
8797impl TypedSyntaxNode for PatternStructParamWithExpr {
8798 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternStructParamWithExpr);
8799 type StablePtr = PatternStructParamWithExprPtr;
8800 type Green = PatternStructParamWithExprGreen;
8801 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8802 PatternStructParamWithExprGreen(
8803 Arc::new(GreenNode {
8804 kind: SyntaxKind::PatternStructParamWithExpr,
8805 details: GreenNodeDetails::Node {
8806 children: vec![
8807 ModifierList::missing(db).0,
8808 TerminalIdentifier::missing(db).0,
8809 TerminalColon::missing(db).0,
8810 Pattern::missing(db).0,
8811 ],
8812 width: TextWidth::default(),
8813 },
8814 })
8815 .intern(db),
8816 )
8817 }
8818 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8819 let kind = node.kind(db);
8820 assert_eq!(
8821 kind,
8822 SyntaxKind::PatternStructParamWithExpr,
8823 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8824 kind,
8825 SyntaxKind::PatternStructParamWithExpr
8826 );
8827 let children = db.get_children(node.clone());
8828 Self { node, children }
8829 }
8830 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8831 let kind = node.kind(db);
8832 if kind == SyntaxKind::PatternStructParamWithExpr {
8833 Some(Self::from_syntax_node(db, node))
8834 } else {
8835 None
8836 }
8837 }
8838 fn as_syntax_node(&self) -> SyntaxNode {
8839 self.node.clone()
8840 }
8841 fn stable_ptr(&self) -> Self::StablePtr {
8842 PatternStructParamWithExprPtr(self.node.0.stable_ptr)
8843 }
8844}
8845impl From<&PatternStructParamWithExpr> for SyntaxStablePtrId {
8846 fn from(node: &PatternStructParamWithExpr) -> Self {
8847 node.stable_ptr().untyped()
8848 }
8849}
8850#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8851pub struct PatternEnum {
8852 node: SyntaxNode,
8853 children: Arc<[SyntaxNode]>,
8854}
8855impl PatternEnum {
8856 pub const INDEX_PATH: usize = 0;
8857 pub const INDEX_PATTERN: usize = 1;
8858 pub fn new_green(
8859 db: &dyn SyntaxGroup,
8860 path: ExprPathGreen,
8861 pattern: OptionPatternEnumInnerPatternGreen,
8862 ) -> PatternEnumGreen {
8863 let children: Vec<GreenId> = vec![path.0, pattern.0];
8864 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8865 PatternEnumGreen(
8866 Arc::new(GreenNode {
8867 kind: SyntaxKind::PatternEnum,
8868 details: GreenNodeDetails::Node { children, width },
8869 })
8870 .intern(db),
8871 )
8872 }
8873}
8874impl PatternEnum {
8875 pub fn path(&self, db: &dyn SyntaxGroup) -> ExprPath {
8876 ExprPath::from_syntax_node(db, self.children[0].clone())
8877 }
8878 pub fn pattern(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
8879 OptionPatternEnumInnerPattern::from_syntax_node(db, self.children[1].clone())
8880 }
8881}
8882#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8883pub struct PatternEnumPtr(pub SyntaxStablePtrId);
8884impl PatternEnumPtr {}
8885impl TypedStablePtr for PatternEnumPtr {
8886 type SyntaxNode = PatternEnum;
8887 fn untyped(&self) -> SyntaxStablePtrId {
8888 self.0
8889 }
8890 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnum {
8891 PatternEnum::from_syntax_node(db, self.0.lookup(db))
8892 }
8893}
8894impl From<PatternEnumPtr> for SyntaxStablePtrId {
8895 fn from(ptr: PatternEnumPtr) -> Self {
8896 ptr.untyped()
8897 }
8898}
8899#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8900pub struct PatternEnumGreen(pub GreenId);
8901impl TypedSyntaxNode for PatternEnum {
8902 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnum);
8903 type StablePtr = PatternEnumPtr;
8904 type Green = PatternEnumGreen;
8905 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
8906 PatternEnumGreen(
8907 Arc::new(GreenNode {
8908 kind: SyntaxKind::PatternEnum,
8909 details: GreenNodeDetails::Node {
8910 children: vec![
8911 ExprPath::missing(db).0,
8912 OptionPatternEnumInnerPattern::missing(db).0,
8913 ],
8914 width: TextWidth::default(),
8915 },
8916 })
8917 .intern(db),
8918 )
8919 }
8920 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
8921 let kind = node.kind(db);
8922 assert_eq!(
8923 kind,
8924 SyntaxKind::PatternEnum,
8925 "Unexpected SyntaxKind {:?}. Expected {:?}.",
8926 kind,
8927 SyntaxKind::PatternEnum
8928 );
8929 let children = db.get_children(node.clone());
8930 Self { node, children }
8931 }
8932 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
8933 let kind = node.kind(db);
8934 if kind == SyntaxKind::PatternEnum { Some(Self::from_syntax_node(db, node)) } else { None }
8935 }
8936 fn as_syntax_node(&self) -> SyntaxNode {
8937 self.node.clone()
8938 }
8939 fn stable_ptr(&self) -> Self::StablePtr {
8940 PatternEnumPtr(self.node.0.stable_ptr)
8941 }
8942}
8943impl From<&PatternEnum> for SyntaxStablePtrId {
8944 fn from(node: &PatternEnum) -> Self {
8945 node.stable_ptr().untyped()
8946 }
8947}
8948#[derive(Clone, Debug, Eq, Hash, PartialEq)]
8949pub struct PatternEnumInnerPattern {
8950 node: SyntaxNode,
8951 children: Arc<[SyntaxNode]>,
8952}
8953impl PatternEnumInnerPattern {
8954 pub const INDEX_LPAREN: usize = 0;
8955 pub const INDEX_PATTERN: usize = 1;
8956 pub const INDEX_RPAREN: usize = 2;
8957 pub fn new_green(
8958 db: &dyn SyntaxGroup,
8959 lparen: TerminalLParenGreen,
8960 pattern: PatternGreen,
8961 rparen: TerminalRParenGreen,
8962 ) -> PatternEnumInnerPatternGreen {
8963 let children: Vec<GreenId> = vec![lparen.0, pattern.0, rparen.0];
8964 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
8965 PatternEnumInnerPatternGreen(
8966 Arc::new(GreenNode {
8967 kind: SyntaxKind::PatternEnumInnerPattern,
8968 details: GreenNodeDetails::Node { children, width },
8969 })
8970 .intern(db),
8971 )
8972 }
8973}
8974impl PatternEnumInnerPattern {
8975 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
8976 TerminalLParen::from_syntax_node(db, self.children[0].clone())
8977 }
8978 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
8979 Pattern::from_syntax_node(db, self.children[1].clone())
8980 }
8981 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
8982 TerminalRParen::from_syntax_node(db, self.children[2].clone())
8983 }
8984}
8985#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
8986pub struct PatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
8987impl PatternEnumInnerPatternPtr {}
8988impl TypedStablePtr for PatternEnumInnerPatternPtr {
8989 type SyntaxNode = PatternEnumInnerPattern;
8990 fn untyped(&self) -> SyntaxStablePtrId {
8991 self.0
8992 }
8993 fn lookup(&self, db: &dyn SyntaxGroup) -> PatternEnumInnerPattern {
8994 PatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
8995 }
8996}
8997impl From<PatternEnumInnerPatternPtr> for SyntaxStablePtrId {
8998 fn from(ptr: PatternEnumInnerPatternPtr) -> Self {
8999 ptr.untyped()
9000 }
9001}
9002#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9003pub struct PatternEnumInnerPatternGreen(pub GreenId);
9004impl TypedSyntaxNode for PatternEnumInnerPattern {
9005 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::PatternEnumInnerPattern);
9006 type StablePtr = PatternEnumInnerPatternPtr;
9007 type Green = PatternEnumInnerPatternGreen;
9008 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9009 PatternEnumInnerPatternGreen(
9010 Arc::new(GreenNode {
9011 kind: SyntaxKind::PatternEnumInnerPattern,
9012 details: GreenNodeDetails::Node {
9013 children: vec![
9014 TerminalLParen::missing(db).0,
9015 Pattern::missing(db).0,
9016 TerminalRParen::missing(db).0,
9017 ],
9018 width: TextWidth::default(),
9019 },
9020 })
9021 .intern(db),
9022 )
9023 }
9024 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9025 let kind = node.kind(db);
9026 assert_eq!(
9027 kind,
9028 SyntaxKind::PatternEnumInnerPattern,
9029 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9030 kind,
9031 SyntaxKind::PatternEnumInnerPattern
9032 );
9033 let children = db.get_children(node.clone());
9034 Self { node, children }
9035 }
9036 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9037 let kind = node.kind(db);
9038 if kind == SyntaxKind::PatternEnumInnerPattern {
9039 Some(Self::from_syntax_node(db, node))
9040 } else {
9041 None
9042 }
9043 }
9044 fn as_syntax_node(&self) -> SyntaxNode {
9045 self.node.clone()
9046 }
9047 fn stable_ptr(&self) -> Self::StablePtr {
9048 PatternEnumInnerPatternPtr(self.node.0.stable_ptr)
9049 }
9050}
9051impl From<&PatternEnumInnerPattern> for SyntaxStablePtrId {
9052 fn from(node: &PatternEnumInnerPattern) -> Self {
9053 node.stable_ptr().untyped()
9054 }
9055}
9056#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9057pub enum OptionPatternEnumInnerPattern {
9058 Empty(OptionPatternEnumInnerPatternEmpty),
9059 PatternEnumInnerPattern(PatternEnumInnerPattern),
9060}
9061#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9062pub struct OptionPatternEnumInnerPatternPtr(pub SyntaxStablePtrId);
9063impl TypedStablePtr for OptionPatternEnumInnerPatternPtr {
9064 type SyntaxNode = OptionPatternEnumInnerPattern;
9065 fn untyped(&self) -> SyntaxStablePtrId {
9066 self.0
9067 }
9068 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPattern {
9069 OptionPatternEnumInnerPattern::from_syntax_node(db, self.0.lookup(db))
9070 }
9071}
9072impl From<OptionPatternEnumInnerPatternPtr> for SyntaxStablePtrId {
9073 fn from(ptr: OptionPatternEnumInnerPatternPtr) -> Self {
9074 ptr.untyped()
9075 }
9076}
9077impl From<OptionPatternEnumInnerPatternEmptyPtr> for OptionPatternEnumInnerPatternPtr {
9078 fn from(value: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9079 Self(value.0)
9080 }
9081}
9082impl From<PatternEnumInnerPatternPtr> for OptionPatternEnumInnerPatternPtr {
9083 fn from(value: PatternEnumInnerPatternPtr) -> Self {
9084 Self(value.0)
9085 }
9086}
9087impl From<OptionPatternEnumInnerPatternEmptyGreen> for OptionPatternEnumInnerPatternGreen {
9088 fn from(value: OptionPatternEnumInnerPatternEmptyGreen) -> Self {
9089 Self(value.0)
9090 }
9091}
9092impl From<PatternEnumInnerPatternGreen> for OptionPatternEnumInnerPatternGreen {
9093 fn from(value: PatternEnumInnerPatternGreen) -> Self {
9094 Self(value.0)
9095 }
9096}
9097#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9098pub struct OptionPatternEnumInnerPatternGreen(pub GreenId);
9099impl TypedSyntaxNode for OptionPatternEnumInnerPattern {
9100 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9101 type StablePtr = OptionPatternEnumInnerPatternPtr;
9102 type Green = OptionPatternEnumInnerPatternGreen;
9103 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9104 panic!("No missing variant.");
9105 }
9106 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9107 let kind = node.kind(db);
9108 match kind {
9109 SyntaxKind::OptionPatternEnumInnerPatternEmpty => OptionPatternEnumInnerPattern::Empty(
9110 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9111 ),
9112 SyntaxKind::PatternEnumInnerPattern => {
9113 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9114 PatternEnumInnerPattern::from_syntax_node(db, node),
9115 )
9116 }
9117 _ => panic!(
9118 "Unexpected syntax kind {:?} when constructing {}.",
9119 kind, "OptionPatternEnumInnerPattern"
9120 ),
9121 }
9122 }
9123 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9124 let kind = node.kind(db);
9125 match kind {
9126 SyntaxKind::OptionPatternEnumInnerPatternEmpty => {
9127 Some(OptionPatternEnumInnerPattern::Empty(
9128 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, node),
9129 ))
9130 }
9131 SyntaxKind::PatternEnumInnerPattern => {
9132 Some(OptionPatternEnumInnerPattern::PatternEnumInnerPattern(
9133 PatternEnumInnerPattern::from_syntax_node(db, node),
9134 ))
9135 }
9136 _ => None,
9137 }
9138 }
9139 fn as_syntax_node(&self) -> SyntaxNode {
9140 match self {
9141 OptionPatternEnumInnerPattern::Empty(x) => x.as_syntax_node(),
9142 OptionPatternEnumInnerPattern::PatternEnumInnerPattern(x) => x.as_syntax_node(),
9143 }
9144 }
9145 fn stable_ptr(&self) -> Self::StablePtr {
9146 OptionPatternEnumInnerPatternPtr(self.as_syntax_node().0.stable_ptr)
9147 }
9148}
9149impl From<&OptionPatternEnumInnerPattern> for SyntaxStablePtrId {
9150 fn from(node: &OptionPatternEnumInnerPattern) -> Self {
9151 node.stable_ptr().untyped()
9152 }
9153}
9154impl OptionPatternEnumInnerPattern {
9155 pub fn is_variant(kind: SyntaxKind) -> bool {
9157 matches!(
9158 kind,
9159 SyntaxKind::OptionPatternEnumInnerPatternEmpty | SyntaxKind::PatternEnumInnerPattern
9160 )
9161 }
9162}
9163#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9164pub struct OptionPatternEnumInnerPatternEmpty {
9165 node: SyntaxNode,
9166 children: Arc<[SyntaxNode]>,
9167}
9168impl OptionPatternEnumInnerPatternEmpty {
9169 pub fn new_green(db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmptyGreen {
9170 let children: Vec<GreenId> = vec![];
9171 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9172 OptionPatternEnumInnerPatternEmptyGreen(
9173 Arc::new(GreenNode {
9174 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9175 details: GreenNodeDetails::Node { children, width },
9176 })
9177 .intern(db),
9178 )
9179 }
9180}
9181impl OptionPatternEnumInnerPatternEmpty {}
9182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9183pub struct OptionPatternEnumInnerPatternEmptyPtr(pub SyntaxStablePtrId);
9184impl OptionPatternEnumInnerPatternEmptyPtr {}
9185impl TypedStablePtr for OptionPatternEnumInnerPatternEmptyPtr {
9186 type SyntaxNode = OptionPatternEnumInnerPatternEmpty;
9187 fn untyped(&self) -> SyntaxStablePtrId {
9188 self.0
9189 }
9190 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionPatternEnumInnerPatternEmpty {
9191 OptionPatternEnumInnerPatternEmpty::from_syntax_node(db, self.0.lookup(db))
9192 }
9193}
9194impl From<OptionPatternEnumInnerPatternEmptyPtr> for SyntaxStablePtrId {
9195 fn from(ptr: OptionPatternEnumInnerPatternEmptyPtr) -> Self {
9196 ptr.untyped()
9197 }
9198}
9199#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9200pub struct OptionPatternEnumInnerPatternEmptyGreen(pub GreenId);
9201impl TypedSyntaxNode for OptionPatternEnumInnerPatternEmpty {
9202 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionPatternEnumInnerPatternEmpty);
9203 type StablePtr = OptionPatternEnumInnerPatternEmptyPtr;
9204 type Green = OptionPatternEnumInnerPatternEmptyGreen;
9205 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9206 OptionPatternEnumInnerPatternEmptyGreen(
9207 Arc::new(GreenNode {
9208 kind: SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9209 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9210 })
9211 .intern(db),
9212 )
9213 }
9214 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9215 let kind = node.kind(db);
9216 assert_eq!(
9217 kind,
9218 SyntaxKind::OptionPatternEnumInnerPatternEmpty,
9219 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9220 kind,
9221 SyntaxKind::OptionPatternEnumInnerPatternEmpty
9222 );
9223 let children = db.get_children(node.clone());
9224 Self { node, children }
9225 }
9226 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9227 let kind = node.kind(db);
9228 if kind == SyntaxKind::OptionPatternEnumInnerPatternEmpty {
9229 Some(Self::from_syntax_node(db, node))
9230 } else {
9231 None
9232 }
9233 }
9234 fn as_syntax_node(&self) -> SyntaxNode {
9235 self.node.clone()
9236 }
9237 fn stable_ptr(&self) -> Self::StablePtr {
9238 OptionPatternEnumInnerPatternEmptyPtr(self.node.0.stable_ptr)
9239 }
9240}
9241impl From<&OptionPatternEnumInnerPatternEmpty> for SyntaxStablePtrId {
9242 fn from(node: &OptionPatternEnumInnerPatternEmpty) -> Self {
9243 node.stable_ptr().untyped()
9244 }
9245}
9246#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9247pub struct TypeClause {
9248 node: SyntaxNode,
9249 children: Arc<[SyntaxNode]>,
9250}
9251impl TypeClause {
9252 pub const INDEX_COLON: usize = 0;
9253 pub const INDEX_TY: usize = 1;
9254 pub fn new_green(
9255 db: &dyn SyntaxGroup,
9256 colon: TerminalColonGreen,
9257 ty: ExprGreen,
9258 ) -> TypeClauseGreen {
9259 let children: Vec<GreenId> = vec![colon.0, ty.0];
9260 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9261 TypeClauseGreen(
9262 Arc::new(GreenNode {
9263 kind: SyntaxKind::TypeClause,
9264 details: GreenNodeDetails::Node { children, width },
9265 })
9266 .intern(db),
9267 )
9268 }
9269}
9270impl TypeClause {
9271 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
9272 TerminalColon::from_syntax_node(db, self.children[0].clone())
9273 }
9274 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9275 Expr::from_syntax_node(db, self.children[1].clone())
9276 }
9277}
9278#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9279pub struct TypeClausePtr(pub SyntaxStablePtrId);
9280impl TypeClausePtr {}
9281impl TypedStablePtr for TypeClausePtr {
9282 type SyntaxNode = TypeClause;
9283 fn untyped(&self) -> SyntaxStablePtrId {
9284 self.0
9285 }
9286 fn lookup(&self, db: &dyn SyntaxGroup) -> TypeClause {
9287 TypeClause::from_syntax_node(db, self.0.lookup(db))
9288 }
9289}
9290impl From<TypeClausePtr> for SyntaxStablePtrId {
9291 fn from(ptr: TypeClausePtr) -> Self {
9292 ptr.untyped()
9293 }
9294}
9295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9296pub struct TypeClauseGreen(pub GreenId);
9297impl TypedSyntaxNode for TypeClause {
9298 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TypeClause);
9299 type StablePtr = TypeClausePtr;
9300 type Green = TypeClauseGreen;
9301 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9302 TypeClauseGreen(
9303 Arc::new(GreenNode {
9304 kind: SyntaxKind::TypeClause,
9305 details: GreenNodeDetails::Node {
9306 children: vec![TerminalColon::missing(db).0, Expr::missing(db).0],
9307 width: TextWidth::default(),
9308 },
9309 })
9310 .intern(db),
9311 )
9312 }
9313 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9314 let kind = node.kind(db);
9315 assert_eq!(
9316 kind,
9317 SyntaxKind::TypeClause,
9318 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9319 kind,
9320 SyntaxKind::TypeClause
9321 );
9322 let children = db.get_children(node.clone());
9323 Self { node, children }
9324 }
9325 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9326 let kind = node.kind(db);
9327 if kind == SyntaxKind::TypeClause { Some(Self::from_syntax_node(db, node)) } else { None }
9328 }
9329 fn as_syntax_node(&self) -> SyntaxNode {
9330 self.node.clone()
9331 }
9332 fn stable_ptr(&self) -> Self::StablePtr {
9333 TypeClausePtr(self.node.0.stable_ptr)
9334 }
9335}
9336impl From<&TypeClause> for SyntaxStablePtrId {
9337 fn from(node: &TypeClause) -> Self {
9338 node.stable_ptr().untyped()
9339 }
9340}
9341#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9342pub enum OptionTypeClause {
9343 Empty(OptionTypeClauseEmpty),
9344 TypeClause(TypeClause),
9345}
9346#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9347pub struct OptionTypeClausePtr(pub SyntaxStablePtrId);
9348impl TypedStablePtr for OptionTypeClausePtr {
9349 type SyntaxNode = OptionTypeClause;
9350 fn untyped(&self) -> SyntaxStablePtrId {
9351 self.0
9352 }
9353 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
9354 OptionTypeClause::from_syntax_node(db, self.0.lookup(db))
9355 }
9356}
9357impl From<OptionTypeClausePtr> for SyntaxStablePtrId {
9358 fn from(ptr: OptionTypeClausePtr) -> Self {
9359 ptr.untyped()
9360 }
9361}
9362impl From<OptionTypeClauseEmptyPtr> for OptionTypeClausePtr {
9363 fn from(value: OptionTypeClauseEmptyPtr) -> Self {
9364 Self(value.0)
9365 }
9366}
9367impl From<TypeClausePtr> for OptionTypeClausePtr {
9368 fn from(value: TypeClausePtr) -> Self {
9369 Self(value.0)
9370 }
9371}
9372impl From<OptionTypeClauseEmptyGreen> for OptionTypeClauseGreen {
9373 fn from(value: OptionTypeClauseEmptyGreen) -> Self {
9374 Self(value.0)
9375 }
9376}
9377impl From<TypeClauseGreen> for OptionTypeClauseGreen {
9378 fn from(value: TypeClauseGreen) -> Self {
9379 Self(value.0)
9380 }
9381}
9382#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9383pub struct OptionTypeClauseGreen(pub GreenId);
9384impl TypedSyntaxNode for OptionTypeClause {
9385 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9386 type StablePtr = OptionTypeClausePtr;
9387 type Green = OptionTypeClauseGreen;
9388 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9389 panic!("No missing variant.");
9390 }
9391 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9392 let kind = node.kind(db);
9393 match kind {
9394 SyntaxKind::OptionTypeClauseEmpty => {
9395 OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node))
9396 }
9397 SyntaxKind::TypeClause => {
9398 OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node))
9399 }
9400 _ => panic!(
9401 "Unexpected syntax kind {:?} when constructing {}.",
9402 kind, "OptionTypeClause"
9403 ),
9404 }
9405 }
9406 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9407 let kind = node.kind(db);
9408 match kind {
9409 SyntaxKind::OptionTypeClauseEmpty => {
9410 Some(OptionTypeClause::Empty(OptionTypeClauseEmpty::from_syntax_node(db, node)))
9411 }
9412 SyntaxKind::TypeClause => {
9413 Some(OptionTypeClause::TypeClause(TypeClause::from_syntax_node(db, node)))
9414 }
9415 _ => None,
9416 }
9417 }
9418 fn as_syntax_node(&self) -> SyntaxNode {
9419 match self {
9420 OptionTypeClause::Empty(x) => x.as_syntax_node(),
9421 OptionTypeClause::TypeClause(x) => x.as_syntax_node(),
9422 }
9423 }
9424 fn stable_ptr(&self) -> Self::StablePtr {
9425 OptionTypeClausePtr(self.as_syntax_node().0.stable_ptr)
9426 }
9427}
9428impl From<&OptionTypeClause> for SyntaxStablePtrId {
9429 fn from(node: &OptionTypeClause) -> Self {
9430 node.stable_ptr().untyped()
9431 }
9432}
9433impl OptionTypeClause {
9434 pub fn is_variant(kind: SyntaxKind) -> bool {
9436 matches!(kind, SyntaxKind::OptionTypeClauseEmpty | SyntaxKind::TypeClause)
9437 }
9438}
9439#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9440pub struct OptionTypeClauseEmpty {
9441 node: SyntaxNode,
9442 children: Arc<[SyntaxNode]>,
9443}
9444impl OptionTypeClauseEmpty {
9445 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTypeClauseEmptyGreen {
9446 let children: Vec<GreenId> = vec![];
9447 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9448 OptionTypeClauseEmptyGreen(
9449 Arc::new(GreenNode {
9450 kind: SyntaxKind::OptionTypeClauseEmpty,
9451 details: GreenNodeDetails::Node { children, width },
9452 })
9453 .intern(db),
9454 )
9455 }
9456}
9457impl OptionTypeClauseEmpty {}
9458#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9459pub struct OptionTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9460impl OptionTypeClauseEmptyPtr {}
9461impl TypedStablePtr for OptionTypeClauseEmptyPtr {
9462 type SyntaxNode = OptionTypeClauseEmpty;
9463 fn untyped(&self) -> SyntaxStablePtrId {
9464 self.0
9465 }
9466 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTypeClauseEmpty {
9467 OptionTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9468 }
9469}
9470impl From<OptionTypeClauseEmptyPtr> for SyntaxStablePtrId {
9471 fn from(ptr: OptionTypeClauseEmptyPtr) -> Self {
9472 ptr.untyped()
9473 }
9474}
9475#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9476pub struct OptionTypeClauseEmptyGreen(pub GreenId);
9477impl TypedSyntaxNode for OptionTypeClauseEmpty {
9478 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTypeClauseEmpty);
9479 type StablePtr = OptionTypeClauseEmptyPtr;
9480 type Green = OptionTypeClauseEmptyGreen;
9481 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9482 OptionTypeClauseEmptyGreen(
9483 Arc::new(GreenNode {
9484 kind: SyntaxKind::OptionTypeClauseEmpty,
9485 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9486 })
9487 .intern(db),
9488 )
9489 }
9490 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9491 let kind = node.kind(db);
9492 assert_eq!(
9493 kind,
9494 SyntaxKind::OptionTypeClauseEmpty,
9495 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9496 kind,
9497 SyntaxKind::OptionTypeClauseEmpty
9498 );
9499 let children = db.get_children(node.clone());
9500 Self { node, children }
9501 }
9502 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9503 let kind = node.kind(db);
9504 if kind == SyntaxKind::OptionTypeClauseEmpty {
9505 Some(Self::from_syntax_node(db, node))
9506 } else {
9507 None
9508 }
9509 }
9510 fn as_syntax_node(&self) -> SyntaxNode {
9511 self.node.clone()
9512 }
9513 fn stable_ptr(&self) -> Self::StablePtr {
9514 OptionTypeClauseEmptyPtr(self.node.0.stable_ptr)
9515 }
9516}
9517impl From<&OptionTypeClauseEmpty> for SyntaxStablePtrId {
9518 fn from(node: &OptionTypeClauseEmpty) -> Self {
9519 node.stable_ptr().untyped()
9520 }
9521}
9522#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9523pub struct ReturnTypeClause {
9524 node: SyntaxNode,
9525 children: Arc<[SyntaxNode]>,
9526}
9527impl ReturnTypeClause {
9528 pub const INDEX_ARROW: usize = 0;
9529 pub const INDEX_TY: usize = 1;
9530 pub fn new_green(
9531 db: &dyn SyntaxGroup,
9532 arrow: TerminalArrowGreen,
9533 ty: ExprGreen,
9534 ) -> ReturnTypeClauseGreen {
9535 let children: Vec<GreenId> = vec![arrow.0, ty.0];
9536 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9537 ReturnTypeClauseGreen(
9538 Arc::new(GreenNode {
9539 kind: SyntaxKind::ReturnTypeClause,
9540 details: GreenNodeDetails::Node { children, width },
9541 })
9542 .intern(db),
9543 )
9544 }
9545}
9546impl ReturnTypeClause {
9547 pub fn arrow(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
9548 TerminalArrow::from_syntax_node(db, self.children[0].clone())
9549 }
9550 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
9551 Expr::from_syntax_node(db, self.children[1].clone())
9552 }
9553}
9554#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9555pub struct ReturnTypeClausePtr(pub SyntaxStablePtrId);
9556impl ReturnTypeClausePtr {}
9557impl TypedStablePtr for ReturnTypeClausePtr {
9558 type SyntaxNode = ReturnTypeClause;
9559 fn untyped(&self) -> SyntaxStablePtrId {
9560 self.0
9561 }
9562 fn lookup(&self, db: &dyn SyntaxGroup) -> ReturnTypeClause {
9563 ReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9564 }
9565}
9566impl From<ReturnTypeClausePtr> for SyntaxStablePtrId {
9567 fn from(ptr: ReturnTypeClausePtr) -> Self {
9568 ptr.untyped()
9569 }
9570}
9571#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9572pub struct ReturnTypeClauseGreen(pub GreenId);
9573impl TypedSyntaxNode for ReturnTypeClause {
9574 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ReturnTypeClause);
9575 type StablePtr = ReturnTypeClausePtr;
9576 type Green = ReturnTypeClauseGreen;
9577 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9578 ReturnTypeClauseGreen(
9579 Arc::new(GreenNode {
9580 kind: SyntaxKind::ReturnTypeClause,
9581 details: GreenNodeDetails::Node {
9582 children: vec![TerminalArrow::missing(db).0, Expr::missing(db).0],
9583 width: TextWidth::default(),
9584 },
9585 })
9586 .intern(db),
9587 )
9588 }
9589 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9590 let kind = node.kind(db);
9591 assert_eq!(
9592 kind,
9593 SyntaxKind::ReturnTypeClause,
9594 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9595 kind,
9596 SyntaxKind::ReturnTypeClause
9597 );
9598 let children = db.get_children(node.clone());
9599 Self { node, children }
9600 }
9601 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9602 let kind = node.kind(db);
9603 if kind == SyntaxKind::ReturnTypeClause {
9604 Some(Self::from_syntax_node(db, node))
9605 } else {
9606 None
9607 }
9608 }
9609 fn as_syntax_node(&self) -> SyntaxNode {
9610 self.node.clone()
9611 }
9612 fn stable_ptr(&self) -> Self::StablePtr {
9613 ReturnTypeClausePtr(self.node.0.stable_ptr)
9614 }
9615}
9616impl From<&ReturnTypeClause> for SyntaxStablePtrId {
9617 fn from(node: &ReturnTypeClause) -> Self {
9618 node.stable_ptr().untyped()
9619 }
9620}
9621#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9622pub enum OptionReturnTypeClause {
9623 Empty(OptionReturnTypeClauseEmpty),
9624 ReturnTypeClause(ReturnTypeClause),
9625}
9626#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9627pub struct OptionReturnTypeClausePtr(pub SyntaxStablePtrId);
9628impl TypedStablePtr for OptionReturnTypeClausePtr {
9629 type SyntaxNode = OptionReturnTypeClause;
9630 fn untyped(&self) -> SyntaxStablePtrId {
9631 self.0
9632 }
9633 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
9634 OptionReturnTypeClause::from_syntax_node(db, self.0.lookup(db))
9635 }
9636}
9637impl From<OptionReturnTypeClausePtr> for SyntaxStablePtrId {
9638 fn from(ptr: OptionReturnTypeClausePtr) -> Self {
9639 ptr.untyped()
9640 }
9641}
9642impl From<OptionReturnTypeClauseEmptyPtr> for OptionReturnTypeClausePtr {
9643 fn from(value: OptionReturnTypeClauseEmptyPtr) -> Self {
9644 Self(value.0)
9645 }
9646}
9647impl From<ReturnTypeClausePtr> for OptionReturnTypeClausePtr {
9648 fn from(value: ReturnTypeClausePtr) -> Self {
9649 Self(value.0)
9650 }
9651}
9652impl From<OptionReturnTypeClauseEmptyGreen> for OptionReturnTypeClauseGreen {
9653 fn from(value: OptionReturnTypeClauseEmptyGreen) -> Self {
9654 Self(value.0)
9655 }
9656}
9657impl From<ReturnTypeClauseGreen> for OptionReturnTypeClauseGreen {
9658 fn from(value: ReturnTypeClauseGreen) -> Self {
9659 Self(value.0)
9660 }
9661}
9662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9663pub struct OptionReturnTypeClauseGreen(pub GreenId);
9664impl TypedSyntaxNode for OptionReturnTypeClause {
9665 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9666 type StablePtr = OptionReturnTypeClausePtr;
9667 type Green = OptionReturnTypeClauseGreen;
9668 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9669 panic!("No missing variant.");
9670 }
9671 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9672 let kind = node.kind(db);
9673 match kind {
9674 SyntaxKind::OptionReturnTypeClauseEmpty => OptionReturnTypeClause::Empty(
9675 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9676 ),
9677 SyntaxKind::ReturnTypeClause => OptionReturnTypeClause::ReturnTypeClause(
9678 ReturnTypeClause::from_syntax_node(db, node),
9679 ),
9680 _ => panic!(
9681 "Unexpected syntax kind {:?} when constructing {}.",
9682 kind, "OptionReturnTypeClause"
9683 ),
9684 }
9685 }
9686 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9687 let kind = node.kind(db);
9688 match kind {
9689 SyntaxKind::OptionReturnTypeClauseEmpty => Some(OptionReturnTypeClause::Empty(
9690 OptionReturnTypeClauseEmpty::from_syntax_node(db, node),
9691 )),
9692 SyntaxKind::ReturnTypeClause => Some(OptionReturnTypeClause::ReturnTypeClause(
9693 ReturnTypeClause::from_syntax_node(db, node),
9694 )),
9695 _ => None,
9696 }
9697 }
9698 fn as_syntax_node(&self) -> SyntaxNode {
9699 match self {
9700 OptionReturnTypeClause::Empty(x) => x.as_syntax_node(),
9701 OptionReturnTypeClause::ReturnTypeClause(x) => x.as_syntax_node(),
9702 }
9703 }
9704 fn stable_ptr(&self) -> Self::StablePtr {
9705 OptionReturnTypeClausePtr(self.as_syntax_node().0.stable_ptr)
9706 }
9707}
9708impl From<&OptionReturnTypeClause> for SyntaxStablePtrId {
9709 fn from(node: &OptionReturnTypeClause) -> Self {
9710 node.stable_ptr().untyped()
9711 }
9712}
9713impl OptionReturnTypeClause {
9714 pub fn is_variant(kind: SyntaxKind) -> bool {
9716 matches!(kind, SyntaxKind::OptionReturnTypeClauseEmpty | SyntaxKind::ReturnTypeClause)
9717 }
9718}
9719#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9720pub struct OptionReturnTypeClauseEmpty {
9721 node: SyntaxNode,
9722 children: Arc<[SyntaxNode]>,
9723}
9724impl OptionReturnTypeClauseEmpty {
9725 pub fn new_green(db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmptyGreen {
9726 let children: Vec<GreenId> = vec![];
9727 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
9728 OptionReturnTypeClauseEmptyGreen(
9729 Arc::new(GreenNode {
9730 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9731 details: GreenNodeDetails::Node { children, width },
9732 })
9733 .intern(db),
9734 )
9735 }
9736}
9737impl OptionReturnTypeClauseEmpty {}
9738#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9739pub struct OptionReturnTypeClauseEmptyPtr(pub SyntaxStablePtrId);
9740impl OptionReturnTypeClauseEmptyPtr {}
9741impl TypedStablePtr for OptionReturnTypeClauseEmptyPtr {
9742 type SyntaxNode = OptionReturnTypeClauseEmpty;
9743 fn untyped(&self) -> SyntaxStablePtrId {
9744 self.0
9745 }
9746 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClauseEmpty {
9747 OptionReturnTypeClauseEmpty::from_syntax_node(db, self.0.lookup(db))
9748 }
9749}
9750impl From<OptionReturnTypeClauseEmptyPtr> for SyntaxStablePtrId {
9751 fn from(ptr: OptionReturnTypeClauseEmptyPtr) -> Self {
9752 ptr.untyped()
9753 }
9754}
9755#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9756pub struct OptionReturnTypeClauseEmptyGreen(pub GreenId);
9757impl TypedSyntaxNode for OptionReturnTypeClauseEmpty {
9758 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionReturnTypeClauseEmpty);
9759 type StablePtr = OptionReturnTypeClauseEmptyPtr;
9760 type Green = OptionReturnTypeClauseEmptyGreen;
9761 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9762 OptionReturnTypeClauseEmptyGreen(
9763 Arc::new(GreenNode {
9764 kind: SyntaxKind::OptionReturnTypeClauseEmpty,
9765 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
9766 })
9767 .intern(db),
9768 )
9769 }
9770 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9771 let kind = node.kind(db);
9772 assert_eq!(
9773 kind,
9774 SyntaxKind::OptionReturnTypeClauseEmpty,
9775 "Unexpected SyntaxKind {:?}. Expected {:?}.",
9776 kind,
9777 SyntaxKind::OptionReturnTypeClauseEmpty
9778 );
9779 let children = db.get_children(node.clone());
9780 Self { node, children }
9781 }
9782 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9783 let kind = node.kind(db);
9784 if kind == SyntaxKind::OptionReturnTypeClauseEmpty {
9785 Some(Self::from_syntax_node(db, node))
9786 } else {
9787 None
9788 }
9789 }
9790 fn as_syntax_node(&self) -> SyntaxNode {
9791 self.node.clone()
9792 }
9793 fn stable_ptr(&self) -> Self::StablePtr {
9794 OptionReturnTypeClauseEmptyPtr(self.node.0.stable_ptr)
9795 }
9796}
9797impl From<&OptionReturnTypeClauseEmpty> for SyntaxStablePtrId {
9798 fn from(node: &OptionReturnTypeClauseEmpty) -> Self {
9799 node.stable_ptr().untyped()
9800 }
9801}
9802#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9803pub enum Statement {
9804 Let(StatementLet),
9805 Expr(StatementExpr),
9806 Continue(StatementContinue),
9807 Return(StatementReturn),
9808 Break(StatementBreak),
9809 Item(StatementItem),
9810 Missing(StatementMissing),
9811}
9812#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9813pub struct StatementPtr(pub SyntaxStablePtrId);
9814impl TypedStablePtr for StatementPtr {
9815 type SyntaxNode = Statement;
9816 fn untyped(&self) -> SyntaxStablePtrId {
9817 self.0
9818 }
9819 fn lookup(&self, db: &dyn SyntaxGroup) -> Statement {
9820 Statement::from_syntax_node(db, self.0.lookup(db))
9821 }
9822}
9823impl From<StatementPtr> for SyntaxStablePtrId {
9824 fn from(ptr: StatementPtr) -> Self {
9825 ptr.untyped()
9826 }
9827}
9828impl From<StatementLetPtr> for StatementPtr {
9829 fn from(value: StatementLetPtr) -> Self {
9830 Self(value.0)
9831 }
9832}
9833impl From<StatementExprPtr> for StatementPtr {
9834 fn from(value: StatementExprPtr) -> Self {
9835 Self(value.0)
9836 }
9837}
9838impl From<StatementContinuePtr> for StatementPtr {
9839 fn from(value: StatementContinuePtr) -> Self {
9840 Self(value.0)
9841 }
9842}
9843impl From<StatementReturnPtr> for StatementPtr {
9844 fn from(value: StatementReturnPtr) -> Self {
9845 Self(value.0)
9846 }
9847}
9848impl From<StatementBreakPtr> for StatementPtr {
9849 fn from(value: StatementBreakPtr) -> Self {
9850 Self(value.0)
9851 }
9852}
9853impl From<StatementItemPtr> for StatementPtr {
9854 fn from(value: StatementItemPtr) -> Self {
9855 Self(value.0)
9856 }
9857}
9858impl From<StatementMissingPtr> for StatementPtr {
9859 fn from(value: StatementMissingPtr) -> Self {
9860 Self(value.0)
9861 }
9862}
9863impl From<StatementLetGreen> for StatementGreen {
9864 fn from(value: StatementLetGreen) -> Self {
9865 Self(value.0)
9866 }
9867}
9868impl From<StatementExprGreen> for StatementGreen {
9869 fn from(value: StatementExprGreen) -> Self {
9870 Self(value.0)
9871 }
9872}
9873impl From<StatementContinueGreen> for StatementGreen {
9874 fn from(value: StatementContinueGreen) -> Self {
9875 Self(value.0)
9876 }
9877}
9878impl From<StatementReturnGreen> for StatementGreen {
9879 fn from(value: StatementReturnGreen) -> Self {
9880 Self(value.0)
9881 }
9882}
9883impl From<StatementBreakGreen> for StatementGreen {
9884 fn from(value: StatementBreakGreen) -> Self {
9885 Self(value.0)
9886 }
9887}
9888impl From<StatementItemGreen> for StatementGreen {
9889 fn from(value: StatementItemGreen) -> Self {
9890 Self(value.0)
9891 }
9892}
9893impl From<StatementMissingGreen> for StatementGreen {
9894 fn from(value: StatementMissingGreen) -> Self {
9895 Self(value.0)
9896 }
9897}
9898#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
9899pub struct StatementGreen(pub GreenId);
9900impl TypedSyntaxNode for Statement {
9901 const OPTIONAL_KIND: Option<SyntaxKind> = None;
9902 type StablePtr = StatementPtr;
9903 type Green = StatementGreen;
9904 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
9905 StatementGreen(StatementMissing::missing(db).0)
9906 }
9907 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
9908 let kind = node.kind(db);
9909 match kind {
9910 SyntaxKind::StatementLet => Statement::Let(StatementLet::from_syntax_node(db, node)),
9911 SyntaxKind::StatementExpr => Statement::Expr(StatementExpr::from_syntax_node(db, node)),
9912 SyntaxKind::StatementContinue => {
9913 Statement::Continue(StatementContinue::from_syntax_node(db, node))
9914 }
9915 SyntaxKind::StatementReturn => {
9916 Statement::Return(StatementReturn::from_syntax_node(db, node))
9917 }
9918 SyntaxKind::StatementBreak => {
9919 Statement::Break(StatementBreak::from_syntax_node(db, node))
9920 }
9921 SyntaxKind::StatementItem => Statement::Item(StatementItem::from_syntax_node(db, node)),
9922 SyntaxKind::StatementMissing => {
9923 Statement::Missing(StatementMissing::from_syntax_node(db, node))
9924 }
9925 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Statement"),
9926 }
9927 }
9928 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
9929 let kind = node.kind(db);
9930 match kind {
9931 SyntaxKind::StatementLet => {
9932 Some(Statement::Let(StatementLet::from_syntax_node(db, node)))
9933 }
9934 SyntaxKind::StatementExpr => {
9935 Some(Statement::Expr(StatementExpr::from_syntax_node(db, node)))
9936 }
9937 SyntaxKind::StatementContinue => {
9938 Some(Statement::Continue(StatementContinue::from_syntax_node(db, node)))
9939 }
9940 SyntaxKind::StatementReturn => {
9941 Some(Statement::Return(StatementReturn::from_syntax_node(db, node)))
9942 }
9943 SyntaxKind::StatementBreak => {
9944 Some(Statement::Break(StatementBreak::from_syntax_node(db, node)))
9945 }
9946 SyntaxKind::StatementItem => {
9947 Some(Statement::Item(StatementItem::from_syntax_node(db, node)))
9948 }
9949 SyntaxKind::StatementMissing => {
9950 Some(Statement::Missing(StatementMissing::from_syntax_node(db, node)))
9951 }
9952 _ => None,
9953 }
9954 }
9955 fn as_syntax_node(&self) -> SyntaxNode {
9956 match self {
9957 Statement::Let(x) => x.as_syntax_node(),
9958 Statement::Expr(x) => x.as_syntax_node(),
9959 Statement::Continue(x) => x.as_syntax_node(),
9960 Statement::Return(x) => x.as_syntax_node(),
9961 Statement::Break(x) => x.as_syntax_node(),
9962 Statement::Item(x) => x.as_syntax_node(),
9963 Statement::Missing(x) => x.as_syntax_node(),
9964 }
9965 }
9966 fn stable_ptr(&self) -> Self::StablePtr {
9967 StatementPtr(self.as_syntax_node().0.stable_ptr)
9968 }
9969}
9970impl From<&Statement> for SyntaxStablePtrId {
9971 fn from(node: &Statement) -> Self {
9972 node.stable_ptr().untyped()
9973 }
9974}
9975impl Statement {
9976 pub fn is_variant(kind: SyntaxKind) -> bool {
9978 matches!(
9979 kind,
9980 SyntaxKind::StatementLet
9981 | SyntaxKind::StatementExpr
9982 | SyntaxKind::StatementContinue
9983 | SyntaxKind::StatementReturn
9984 | SyntaxKind::StatementBreak
9985 | SyntaxKind::StatementItem
9986 | SyntaxKind::StatementMissing
9987 )
9988 }
9989}
9990#[derive(Clone, Debug, Eq, Hash, PartialEq)]
9991pub struct StatementList(ElementList<Statement, 1>);
9992impl Deref for StatementList {
9993 type Target = ElementList<Statement, 1>;
9994 fn deref(&self) -> &Self::Target {
9995 &self.0
9996 }
9997}
9998impl StatementList {
9999 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<StatementGreen>) -> StatementListGreen {
10000 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
10001 StatementListGreen(
10002 Arc::new(GreenNode {
10003 kind: SyntaxKind::StatementList,
10004 details: GreenNodeDetails::Node {
10005 children: children.iter().map(|x| x.0).collect(),
10006 width,
10007 },
10008 })
10009 .intern(db),
10010 )
10011 }
10012}
10013#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10014pub struct StatementListPtr(pub SyntaxStablePtrId);
10015impl TypedStablePtr for StatementListPtr {
10016 type SyntaxNode = StatementList;
10017 fn untyped(&self) -> SyntaxStablePtrId {
10018 self.0
10019 }
10020 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementList {
10021 StatementList::from_syntax_node(db, self.0.lookup(db))
10022 }
10023}
10024impl From<StatementListPtr> for SyntaxStablePtrId {
10025 fn from(ptr: StatementListPtr) -> Self {
10026 ptr.untyped()
10027 }
10028}
10029#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10030pub struct StatementListGreen(pub GreenId);
10031impl TypedSyntaxNode for StatementList {
10032 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementList);
10033 type StablePtr = StatementListPtr;
10034 type Green = StatementListGreen;
10035 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10036 StatementListGreen(
10037 Arc::new(GreenNode {
10038 kind: SyntaxKind::StatementList,
10039 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10040 })
10041 .intern(db),
10042 )
10043 }
10044 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10045 Self(ElementList::new(node))
10046 }
10047 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10048 if node.kind(db) == SyntaxKind::StatementList {
10049 Some(Self(ElementList::new(node)))
10050 } else {
10051 None
10052 }
10053 }
10054 fn as_syntax_node(&self) -> SyntaxNode {
10055 self.node.clone()
10056 }
10057 fn stable_ptr(&self) -> Self::StablePtr {
10058 StatementListPtr(self.node.0.stable_ptr)
10059 }
10060}
10061impl From<&StatementList> for SyntaxStablePtrId {
10062 fn from(node: &StatementList) -> Self {
10063 node.stable_ptr().untyped()
10064 }
10065}
10066#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10067pub struct StatementMissing {
10068 node: SyntaxNode,
10069 children: Arc<[SyntaxNode]>,
10070}
10071impl StatementMissing {
10072 pub fn new_green(db: &dyn SyntaxGroup) -> StatementMissingGreen {
10073 let children: Vec<GreenId> = vec![];
10074 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10075 StatementMissingGreen(
10076 Arc::new(GreenNode {
10077 kind: SyntaxKind::StatementMissing,
10078 details: GreenNodeDetails::Node { children, width },
10079 })
10080 .intern(db),
10081 )
10082 }
10083}
10084impl StatementMissing {}
10085#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10086pub struct StatementMissingPtr(pub SyntaxStablePtrId);
10087impl StatementMissingPtr {}
10088impl TypedStablePtr for StatementMissingPtr {
10089 type SyntaxNode = StatementMissing;
10090 fn untyped(&self) -> SyntaxStablePtrId {
10091 self.0
10092 }
10093 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementMissing {
10094 StatementMissing::from_syntax_node(db, self.0.lookup(db))
10095 }
10096}
10097impl From<StatementMissingPtr> for SyntaxStablePtrId {
10098 fn from(ptr: StatementMissingPtr) -> Self {
10099 ptr.untyped()
10100 }
10101}
10102#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10103pub struct StatementMissingGreen(pub GreenId);
10104impl TypedSyntaxNode for StatementMissing {
10105 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementMissing);
10106 type StablePtr = StatementMissingPtr;
10107 type Green = StatementMissingGreen;
10108 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10109 StatementMissingGreen(
10110 Arc::new(GreenNode {
10111 kind: SyntaxKind::StatementMissing,
10112 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10113 })
10114 .intern(db),
10115 )
10116 }
10117 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10118 let kind = node.kind(db);
10119 assert_eq!(
10120 kind,
10121 SyntaxKind::StatementMissing,
10122 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10123 kind,
10124 SyntaxKind::StatementMissing
10125 );
10126 let children = db.get_children(node.clone());
10127 Self { node, children }
10128 }
10129 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10130 let kind = node.kind(db);
10131 if kind == SyntaxKind::StatementMissing {
10132 Some(Self::from_syntax_node(db, node))
10133 } else {
10134 None
10135 }
10136 }
10137 fn as_syntax_node(&self) -> SyntaxNode {
10138 self.node.clone()
10139 }
10140 fn stable_ptr(&self) -> Self::StablePtr {
10141 StatementMissingPtr(self.node.0.stable_ptr)
10142 }
10143}
10144impl From<&StatementMissing> for SyntaxStablePtrId {
10145 fn from(node: &StatementMissing) -> Self {
10146 node.stable_ptr().untyped()
10147 }
10148}
10149#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10150pub struct StatementLet {
10151 node: SyntaxNode,
10152 children: Arc<[SyntaxNode]>,
10153}
10154impl StatementLet {
10155 pub const INDEX_ATTRIBUTES: usize = 0;
10156 pub const INDEX_LET_KW: usize = 1;
10157 pub const INDEX_PATTERN: usize = 2;
10158 pub const INDEX_TYPE_CLAUSE: usize = 3;
10159 pub const INDEX_EQ: usize = 4;
10160 pub const INDEX_RHS: usize = 5;
10161 pub const INDEX_SEMICOLON: usize = 6;
10162 pub fn new_green(
10163 db: &dyn SyntaxGroup,
10164 attributes: AttributeListGreen,
10165 let_kw: TerminalLetGreen,
10166 pattern: PatternGreen,
10167 type_clause: OptionTypeClauseGreen,
10168 eq: TerminalEqGreen,
10169 rhs: ExprGreen,
10170 semicolon: TerminalSemicolonGreen,
10171 ) -> StatementLetGreen {
10172 let children: Vec<GreenId> =
10173 vec![attributes.0, let_kw.0, pattern.0, type_clause.0, eq.0, rhs.0, semicolon.0];
10174 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10175 StatementLetGreen(
10176 Arc::new(GreenNode {
10177 kind: SyntaxKind::StatementLet,
10178 details: GreenNodeDetails::Node { children, width },
10179 })
10180 .intern(db),
10181 )
10182 }
10183}
10184impl StatementLet {
10185 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10186 AttributeList::from_syntax_node(db, self.children[0].clone())
10187 }
10188 pub fn let_kw(&self, db: &dyn SyntaxGroup) -> TerminalLet {
10189 TerminalLet::from_syntax_node(db, self.children[1].clone())
10190 }
10191 pub fn pattern(&self, db: &dyn SyntaxGroup) -> Pattern {
10192 Pattern::from_syntax_node(db, self.children[2].clone())
10193 }
10194 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
10195 OptionTypeClause::from_syntax_node(db, self.children[3].clone())
10196 }
10197 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
10198 TerminalEq::from_syntax_node(db, self.children[4].clone())
10199 }
10200 pub fn rhs(&self, db: &dyn SyntaxGroup) -> Expr {
10201 Expr::from_syntax_node(db, self.children[5].clone())
10202 }
10203 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10204 TerminalSemicolon::from_syntax_node(db, self.children[6].clone())
10205 }
10206}
10207#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10208pub struct StatementLetPtr(pub SyntaxStablePtrId);
10209impl StatementLetPtr {
10210 pub fn pattern_green(self, db: &dyn SyntaxGroup) -> PatternGreen {
10211 let ptr = self.0.lookup_intern(db);
10212 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
10213 PatternGreen(key_fields[0])
10214 } else {
10215 panic!("Unexpected key field query on root.");
10216 }
10217 }
10218}
10219impl TypedStablePtr for StatementLetPtr {
10220 type SyntaxNode = StatementLet;
10221 fn untyped(&self) -> SyntaxStablePtrId {
10222 self.0
10223 }
10224 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementLet {
10225 StatementLet::from_syntax_node(db, self.0.lookup(db))
10226 }
10227}
10228impl From<StatementLetPtr> for SyntaxStablePtrId {
10229 fn from(ptr: StatementLetPtr) -> Self {
10230 ptr.untyped()
10231 }
10232}
10233#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10234pub struct StatementLetGreen(pub GreenId);
10235impl TypedSyntaxNode for StatementLet {
10236 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementLet);
10237 type StablePtr = StatementLetPtr;
10238 type Green = StatementLetGreen;
10239 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10240 StatementLetGreen(
10241 Arc::new(GreenNode {
10242 kind: SyntaxKind::StatementLet,
10243 details: GreenNodeDetails::Node {
10244 children: vec![
10245 AttributeList::missing(db).0,
10246 TerminalLet::missing(db).0,
10247 Pattern::missing(db).0,
10248 OptionTypeClause::missing(db).0,
10249 TerminalEq::missing(db).0,
10250 Expr::missing(db).0,
10251 TerminalSemicolon::missing(db).0,
10252 ],
10253 width: TextWidth::default(),
10254 },
10255 })
10256 .intern(db),
10257 )
10258 }
10259 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10260 let kind = node.kind(db);
10261 assert_eq!(
10262 kind,
10263 SyntaxKind::StatementLet,
10264 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10265 kind,
10266 SyntaxKind::StatementLet
10267 );
10268 let children = db.get_children(node.clone());
10269 Self { node, children }
10270 }
10271 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10272 let kind = node.kind(db);
10273 if kind == SyntaxKind::StatementLet { Some(Self::from_syntax_node(db, node)) } else { None }
10274 }
10275 fn as_syntax_node(&self) -> SyntaxNode {
10276 self.node.clone()
10277 }
10278 fn stable_ptr(&self) -> Self::StablePtr {
10279 StatementLetPtr(self.node.0.stable_ptr)
10280 }
10281}
10282impl From<&StatementLet> for SyntaxStablePtrId {
10283 fn from(node: &StatementLet) -> Self {
10284 node.stable_ptr().untyped()
10285 }
10286}
10287#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10288pub enum OptionTerminalSemicolon {
10289 Empty(OptionTerminalSemicolonEmpty),
10290 TerminalSemicolon(TerminalSemicolon),
10291}
10292#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10293pub struct OptionTerminalSemicolonPtr(pub SyntaxStablePtrId);
10294impl TypedStablePtr for OptionTerminalSemicolonPtr {
10295 type SyntaxNode = OptionTerminalSemicolon;
10296 fn untyped(&self) -> SyntaxStablePtrId {
10297 self.0
10298 }
10299 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10300 OptionTerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
10301 }
10302}
10303impl From<OptionTerminalSemicolonPtr> for SyntaxStablePtrId {
10304 fn from(ptr: OptionTerminalSemicolonPtr) -> Self {
10305 ptr.untyped()
10306 }
10307}
10308impl From<OptionTerminalSemicolonEmptyPtr> for OptionTerminalSemicolonPtr {
10309 fn from(value: OptionTerminalSemicolonEmptyPtr) -> Self {
10310 Self(value.0)
10311 }
10312}
10313impl From<TerminalSemicolonPtr> for OptionTerminalSemicolonPtr {
10314 fn from(value: TerminalSemicolonPtr) -> Self {
10315 Self(value.0)
10316 }
10317}
10318impl From<OptionTerminalSemicolonEmptyGreen> for OptionTerminalSemicolonGreen {
10319 fn from(value: OptionTerminalSemicolonEmptyGreen) -> Self {
10320 Self(value.0)
10321 }
10322}
10323impl From<TerminalSemicolonGreen> for OptionTerminalSemicolonGreen {
10324 fn from(value: TerminalSemicolonGreen) -> Self {
10325 Self(value.0)
10326 }
10327}
10328#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10329pub struct OptionTerminalSemicolonGreen(pub GreenId);
10330impl TypedSyntaxNode for OptionTerminalSemicolon {
10331 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10332 type StablePtr = OptionTerminalSemicolonPtr;
10333 type Green = OptionTerminalSemicolonGreen;
10334 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10335 panic!("No missing variant.");
10336 }
10337 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10338 let kind = node.kind(db);
10339 match kind {
10340 SyntaxKind::OptionTerminalSemicolonEmpty => OptionTerminalSemicolon::Empty(
10341 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10342 ),
10343 SyntaxKind::TerminalSemicolon => OptionTerminalSemicolon::TerminalSemicolon(
10344 TerminalSemicolon::from_syntax_node(db, node),
10345 ),
10346 _ => panic!(
10347 "Unexpected syntax kind {:?} when constructing {}.",
10348 kind, "OptionTerminalSemicolon"
10349 ),
10350 }
10351 }
10352 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10353 let kind = node.kind(db);
10354 match kind {
10355 SyntaxKind::OptionTerminalSemicolonEmpty => Some(OptionTerminalSemicolon::Empty(
10356 OptionTerminalSemicolonEmpty::from_syntax_node(db, node),
10357 )),
10358 SyntaxKind::TerminalSemicolon => Some(OptionTerminalSemicolon::TerminalSemicolon(
10359 TerminalSemicolon::from_syntax_node(db, node),
10360 )),
10361 _ => None,
10362 }
10363 }
10364 fn as_syntax_node(&self) -> SyntaxNode {
10365 match self {
10366 OptionTerminalSemicolon::Empty(x) => x.as_syntax_node(),
10367 OptionTerminalSemicolon::TerminalSemicolon(x) => x.as_syntax_node(),
10368 }
10369 }
10370 fn stable_ptr(&self) -> Self::StablePtr {
10371 OptionTerminalSemicolonPtr(self.as_syntax_node().0.stable_ptr)
10372 }
10373}
10374impl From<&OptionTerminalSemicolon> for SyntaxStablePtrId {
10375 fn from(node: &OptionTerminalSemicolon) -> Self {
10376 node.stable_ptr().untyped()
10377 }
10378}
10379impl OptionTerminalSemicolon {
10380 pub fn is_variant(kind: SyntaxKind) -> bool {
10382 matches!(kind, SyntaxKind::OptionTerminalSemicolonEmpty | SyntaxKind::TerminalSemicolon)
10383 }
10384}
10385#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10386pub struct OptionTerminalSemicolonEmpty {
10387 node: SyntaxNode,
10388 children: Arc<[SyntaxNode]>,
10389}
10390impl OptionTerminalSemicolonEmpty {
10391 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmptyGreen {
10392 let children: Vec<GreenId> = vec![];
10393 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10394 OptionTerminalSemicolonEmptyGreen(
10395 Arc::new(GreenNode {
10396 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10397 details: GreenNodeDetails::Node { children, width },
10398 })
10399 .intern(db),
10400 )
10401 }
10402}
10403impl OptionTerminalSemicolonEmpty {}
10404#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10405pub struct OptionTerminalSemicolonEmptyPtr(pub SyntaxStablePtrId);
10406impl OptionTerminalSemicolonEmptyPtr {}
10407impl TypedStablePtr for OptionTerminalSemicolonEmptyPtr {
10408 type SyntaxNode = OptionTerminalSemicolonEmpty;
10409 fn untyped(&self) -> SyntaxStablePtrId {
10410 self.0
10411 }
10412 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolonEmpty {
10413 OptionTerminalSemicolonEmpty::from_syntax_node(db, self.0.lookup(db))
10414 }
10415}
10416impl From<OptionTerminalSemicolonEmptyPtr> for SyntaxStablePtrId {
10417 fn from(ptr: OptionTerminalSemicolonEmptyPtr) -> Self {
10418 ptr.untyped()
10419 }
10420}
10421#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10422pub struct OptionTerminalSemicolonEmptyGreen(pub GreenId);
10423impl TypedSyntaxNode for OptionTerminalSemicolonEmpty {
10424 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalSemicolonEmpty);
10425 type StablePtr = OptionTerminalSemicolonEmptyPtr;
10426 type Green = OptionTerminalSemicolonEmptyGreen;
10427 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10428 OptionTerminalSemicolonEmptyGreen(
10429 Arc::new(GreenNode {
10430 kind: SyntaxKind::OptionTerminalSemicolonEmpty,
10431 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
10432 })
10433 .intern(db),
10434 )
10435 }
10436 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10437 let kind = node.kind(db);
10438 assert_eq!(
10439 kind,
10440 SyntaxKind::OptionTerminalSemicolonEmpty,
10441 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10442 kind,
10443 SyntaxKind::OptionTerminalSemicolonEmpty
10444 );
10445 let children = db.get_children(node.clone());
10446 Self { node, children }
10447 }
10448 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10449 let kind = node.kind(db);
10450 if kind == SyntaxKind::OptionTerminalSemicolonEmpty {
10451 Some(Self::from_syntax_node(db, node))
10452 } else {
10453 None
10454 }
10455 }
10456 fn as_syntax_node(&self) -> SyntaxNode {
10457 self.node.clone()
10458 }
10459 fn stable_ptr(&self) -> Self::StablePtr {
10460 OptionTerminalSemicolonEmptyPtr(self.node.0.stable_ptr)
10461 }
10462}
10463impl From<&OptionTerminalSemicolonEmpty> for SyntaxStablePtrId {
10464 fn from(node: &OptionTerminalSemicolonEmpty) -> Self {
10465 node.stable_ptr().untyped()
10466 }
10467}
10468#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10469pub struct StatementExpr {
10470 node: SyntaxNode,
10471 children: Arc<[SyntaxNode]>,
10472}
10473impl StatementExpr {
10474 pub const INDEX_ATTRIBUTES: usize = 0;
10475 pub const INDEX_EXPR: usize = 1;
10476 pub const INDEX_SEMICOLON: usize = 2;
10477 pub fn new_green(
10478 db: &dyn SyntaxGroup,
10479 attributes: AttributeListGreen,
10480 expr: ExprGreen,
10481 semicolon: OptionTerminalSemicolonGreen,
10482 ) -> StatementExprGreen {
10483 let children: Vec<GreenId> = vec![attributes.0, expr.0, semicolon.0];
10484 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10485 StatementExprGreen(
10486 Arc::new(GreenNode {
10487 kind: SyntaxKind::StatementExpr,
10488 details: GreenNodeDetails::Node { children, width },
10489 })
10490 .intern(db),
10491 )
10492 }
10493}
10494impl StatementExpr {
10495 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10496 AttributeList::from_syntax_node(db, self.children[0].clone())
10497 }
10498 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10499 Expr::from_syntax_node(db, self.children[1].clone())
10500 }
10501 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> OptionTerminalSemicolon {
10502 OptionTerminalSemicolon::from_syntax_node(db, self.children[2].clone())
10503 }
10504}
10505#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10506pub struct StatementExprPtr(pub SyntaxStablePtrId);
10507impl StatementExprPtr {}
10508impl TypedStablePtr for StatementExprPtr {
10509 type SyntaxNode = StatementExpr;
10510 fn untyped(&self) -> SyntaxStablePtrId {
10511 self.0
10512 }
10513 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementExpr {
10514 StatementExpr::from_syntax_node(db, self.0.lookup(db))
10515 }
10516}
10517impl From<StatementExprPtr> for SyntaxStablePtrId {
10518 fn from(ptr: StatementExprPtr) -> Self {
10519 ptr.untyped()
10520 }
10521}
10522#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10523pub struct StatementExprGreen(pub GreenId);
10524impl TypedSyntaxNode for StatementExpr {
10525 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementExpr);
10526 type StablePtr = StatementExprPtr;
10527 type Green = StatementExprGreen;
10528 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10529 StatementExprGreen(
10530 Arc::new(GreenNode {
10531 kind: SyntaxKind::StatementExpr,
10532 details: GreenNodeDetails::Node {
10533 children: vec![
10534 AttributeList::missing(db).0,
10535 Expr::missing(db).0,
10536 OptionTerminalSemicolon::missing(db).0,
10537 ],
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::StatementExpr,
10549 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10550 kind,
10551 SyntaxKind::StatementExpr
10552 );
10553 let children = db.get_children(node.clone());
10554 Self { node, children }
10555 }
10556 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10557 let kind = node.kind(db);
10558 if kind == SyntaxKind::StatementExpr {
10559 Some(Self::from_syntax_node(db, node))
10560 } else {
10561 None
10562 }
10563 }
10564 fn as_syntax_node(&self) -> SyntaxNode {
10565 self.node.clone()
10566 }
10567 fn stable_ptr(&self) -> Self::StablePtr {
10568 StatementExprPtr(self.node.0.stable_ptr)
10569 }
10570}
10571impl From<&StatementExpr> for SyntaxStablePtrId {
10572 fn from(node: &StatementExpr) -> Self {
10573 node.stable_ptr().untyped()
10574 }
10575}
10576#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10577pub struct StatementContinue {
10578 node: SyntaxNode,
10579 children: Arc<[SyntaxNode]>,
10580}
10581impl StatementContinue {
10582 pub const INDEX_ATTRIBUTES: usize = 0;
10583 pub const INDEX_CONTINUE_KW: usize = 1;
10584 pub const INDEX_SEMICOLON: usize = 2;
10585 pub fn new_green(
10586 db: &dyn SyntaxGroup,
10587 attributes: AttributeListGreen,
10588 continue_kw: TerminalContinueGreen,
10589 semicolon: TerminalSemicolonGreen,
10590 ) -> StatementContinueGreen {
10591 let children: Vec<GreenId> = vec![attributes.0, continue_kw.0, semicolon.0];
10592 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10593 StatementContinueGreen(
10594 Arc::new(GreenNode {
10595 kind: SyntaxKind::StatementContinue,
10596 details: GreenNodeDetails::Node { children, width },
10597 })
10598 .intern(db),
10599 )
10600 }
10601}
10602impl StatementContinue {
10603 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10604 AttributeList::from_syntax_node(db, self.children[0].clone())
10605 }
10606 pub fn continue_kw(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
10607 TerminalContinue::from_syntax_node(db, self.children[1].clone())
10608 }
10609 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10610 TerminalSemicolon::from_syntax_node(db, self.children[2].clone())
10611 }
10612}
10613#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10614pub struct StatementContinuePtr(pub SyntaxStablePtrId);
10615impl StatementContinuePtr {}
10616impl TypedStablePtr for StatementContinuePtr {
10617 type SyntaxNode = StatementContinue;
10618 fn untyped(&self) -> SyntaxStablePtrId {
10619 self.0
10620 }
10621 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementContinue {
10622 StatementContinue::from_syntax_node(db, self.0.lookup(db))
10623 }
10624}
10625impl From<StatementContinuePtr> for SyntaxStablePtrId {
10626 fn from(ptr: StatementContinuePtr) -> Self {
10627 ptr.untyped()
10628 }
10629}
10630#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10631pub struct StatementContinueGreen(pub GreenId);
10632impl TypedSyntaxNode for StatementContinue {
10633 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementContinue);
10634 type StablePtr = StatementContinuePtr;
10635 type Green = StatementContinueGreen;
10636 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10637 StatementContinueGreen(
10638 Arc::new(GreenNode {
10639 kind: SyntaxKind::StatementContinue,
10640 details: GreenNodeDetails::Node {
10641 children: vec![
10642 AttributeList::missing(db).0,
10643 TerminalContinue::missing(db).0,
10644 TerminalSemicolon::missing(db).0,
10645 ],
10646 width: TextWidth::default(),
10647 },
10648 })
10649 .intern(db),
10650 )
10651 }
10652 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10653 let kind = node.kind(db);
10654 assert_eq!(
10655 kind,
10656 SyntaxKind::StatementContinue,
10657 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10658 kind,
10659 SyntaxKind::StatementContinue
10660 );
10661 let children = db.get_children(node.clone());
10662 Self { node, children }
10663 }
10664 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10665 let kind = node.kind(db);
10666 if kind == SyntaxKind::StatementContinue {
10667 Some(Self::from_syntax_node(db, node))
10668 } else {
10669 None
10670 }
10671 }
10672 fn as_syntax_node(&self) -> SyntaxNode {
10673 self.node.clone()
10674 }
10675 fn stable_ptr(&self) -> Self::StablePtr {
10676 StatementContinuePtr(self.node.0.stable_ptr)
10677 }
10678}
10679impl From<&StatementContinue> for SyntaxStablePtrId {
10680 fn from(node: &StatementContinue) -> Self {
10681 node.stable_ptr().untyped()
10682 }
10683}
10684#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10685pub struct ExprClause {
10686 node: SyntaxNode,
10687 children: Arc<[SyntaxNode]>,
10688}
10689impl ExprClause {
10690 pub const INDEX_EXPR: usize = 0;
10691 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> ExprClauseGreen {
10692 let children: Vec<GreenId> = vec![expr.0];
10693 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10694 ExprClauseGreen(
10695 Arc::new(GreenNode {
10696 kind: SyntaxKind::ExprClause,
10697 details: GreenNodeDetails::Node { children, width },
10698 })
10699 .intern(db),
10700 )
10701 }
10702}
10703impl ExprClause {
10704 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
10705 Expr::from_syntax_node(db, self.children[0].clone())
10706 }
10707}
10708#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10709pub struct ExprClausePtr(pub SyntaxStablePtrId);
10710impl ExprClausePtr {}
10711impl TypedStablePtr for ExprClausePtr {
10712 type SyntaxNode = ExprClause;
10713 fn untyped(&self) -> SyntaxStablePtrId {
10714 self.0
10715 }
10716 fn lookup(&self, db: &dyn SyntaxGroup) -> ExprClause {
10717 ExprClause::from_syntax_node(db, self.0.lookup(db))
10718 }
10719}
10720impl From<ExprClausePtr> for SyntaxStablePtrId {
10721 fn from(ptr: ExprClausePtr) -> Self {
10722 ptr.untyped()
10723 }
10724}
10725#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10726pub struct ExprClauseGreen(pub GreenId);
10727impl TypedSyntaxNode for ExprClause {
10728 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ExprClause);
10729 type StablePtr = ExprClausePtr;
10730 type Green = ExprClauseGreen;
10731 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10732 ExprClauseGreen(
10733 Arc::new(GreenNode {
10734 kind: SyntaxKind::ExprClause,
10735 details: GreenNodeDetails::Node {
10736 children: vec![Expr::missing(db).0],
10737 width: TextWidth::default(),
10738 },
10739 })
10740 .intern(db),
10741 )
10742 }
10743 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10744 let kind = node.kind(db);
10745 assert_eq!(
10746 kind,
10747 SyntaxKind::ExprClause,
10748 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10749 kind,
10750 SyntaxKind::ExprClause
10751 );
10752 let children = db.get_children(node.clone());
10753 Self { node, children }
10754 }
10755 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10756 let kind = node.kind(db);
10757 if kind == SyntaxKind::ExprClause { Some(Self::from_syntax_node(db, node)) } else { None }
10758 }
10759 fn as_syntax_node(&self) -> SyntaxNode {
10760 self.node.clone()
10761 }
10762 fn stable_ptr(&self) -> Self::StablePtr {
10763 ExprClausePtr(self.node.0.stable_ptr)
10764 }
10765}
10766impl From<&ExprClause> for SyntaxStablePtrId {
10767 fn from(node: &ExprClause) -> Self {
10768 node.stable_ptr().untyped()
10769 }
10770}
10771#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10772pub enum OptionExprClause {
10773 Empty(OptionExprClauseEmpty),
10774 ExprClause(ExprClause),
10775}
10776#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10777pub struct OptionExprClausePtr(pub SyntaxStablePtrId);
10778impl TypedStablePtr for OptionExprClausePtr {
10779 type SyntaxNode = OptionExprClause;
10780 fn untyped(&self) -> SyntaxStablePtrId {
10781 self.0
10782 }
10783 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
10784 OptionExprClause::from_syntax_node(db, self.0.lookup(db))
10785 }
10786}
10787impl From<OptionExprClausePtr> for SyntaxStablePtrId {
10788 fn from(ptr: OptionExprClausePtr) -> Self {
10789 ptr.untyped()
10790 }
10791}
10792impl From<OptionExprClauseEmptyPtr> for OptionExprClausePtr {
10793 fn from(value: OptionExprClauseEmptyPtr) -> Self {
10794 Self(value.0)
10795 }
10796}
10797impl From<ExprClausePtr> for OptionExprClausePtr {
10798 fn from(value: ExprClausePtr) -> Self {
10799 Self(value.0)
10800 }
10801}
10802impl From<OptionExprClauseEmptyGreen> for OptionExprClauseGreen {
10803 fn from(value: OptionExprClauseEmptyGreen) -> Self {
10804 Self(value.0)
10805 }
10806}
10807impl From<ExprClauseGreen> for OptionExprClauseGreen {
10808 fn from(value: ExprClauseGreen) -> Self {
10809 Self(value.0)
10810 }
10811}
10812#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10813pub struct OptionExprClauseGreen(pub GreenId);
10814impl TypedSyntaxNode for OptionExprClause {
10815 const OPTIONAL_KIND: Option<SyntaxKind> = None;
10816 type StablePtr = OptionExprClausePtr;
10817 type Green = OptionExprClauseGreen;
10818 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10819 panic!("No missing variant.");
10820 }
10821 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
10822 let kind = node.kind(db);
10823 match kind {
10824 SyntaxKind::OptionExprClauseEmpty => {
10825 OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node))
10826 }
10827 SyntaxKind::ExprClause => {
10828 OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node))
10829 }
10830 _ => panic!(
10831 "Unexpected syntax kind {:?} when constructing {}.",
10832 kind, "OptionExprClause"
10833 ),
10834 }
10835 }
10836 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10837 let kind = node.kind(db);
10838 match kind {
10839 SyntaxKind::OptionExprClauseEmpty => {
10840 Some(OptionExprClause::Empty(OptionExprClauseEmpty::from_syntax_node(db, node)))
10841 }
10842 SyntaxKind::ExprClause => {
10843 Some(OptionExprClause::ExprClause(ExprClause::from_syntax_node(db, node)))
10844 }
10845 _ => None,
10846 }
10847 }
10848 fn as_syntax_node(&self) -> SyntaxNode {
10849 match self {
10850 OptionExprClause::Empty(x) => x.as_syntax_node(),
10851 OptionExprClause::ExprClause(x) => x.as_syntax_node(),
10852 }
10853 }
10854 fn stable_ptr(&self) -> Self::StablePtr {
10855 OptionExprClausePtr(self.as_syntax_node().0.stable_ptr)
10856 }
10857}
10858impl From<&OptionExprClause> for SyntaxStablePtrId {
10859 fn from(node: &OptionExprClause) -> Self {
10860 node.stable_ptr().untyped()
10861 }
10862}
10863impl OptionExprClause {
10864 pub fn is_variant(kind: SyntaxKind) -> bool {
10866 matches!(kind, SyntaxKind::OptionExprClauseEmpty | SyntaxKind::ExprClause)
10867 }
10868}
10869#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10870pub struct OptionExprClauseEmpty {
10871 node: SyntaxNode,
10872 children: Arc<[SyntaxNode]>,
10873}
10874impl OptionExprClauseEmpty {
10875 pub fn new_green(db: &dyn SyntaxGroup) -> OptionExprClauseEmptyGreen {
10876 let children: Vec<GreenId> = vec![];
10877 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10878 OptionExprClauseEmptyGreen(
10879 Arc::new(GreenNode {
10880 kind: SyntaxKind::OptionExprClauseEmpty,
10881 details: GreenNodeDetails::Node { children, width },
10882 })
10883 .intern(db),
10884 )
10885 }
10886}
10887impl OptionExprClauseEmpty {}
10888#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10889pub struct OptionExprClauseEmptyPtr(pub SyntaxStablePtrId);
10890impl OptionExprClauseEmptyPtr {}
10891impl TypedStablePtr for OptionExprClauseEmptyPtr {
10892 type SyntaxNode = OptionExprClauseEmpty;
10893 fn untyped(&self) -> SyntaxStablePtrId {
10894 self.0
10895 }
10896 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionExprClauseEmpty {
10897 OptionExprClauseEmpty::from_syntax_node(db, self.0.lookup(db))
10898 }
10899}
10900impl From<OptionExprClauseEmptyPtr> for SyntaxStablePtrId {
10901 fn from(ptr: OptionExprClauseEmptyPtr) -> Self {
10902 ptr.untyped()
10903 }
10904}
10905#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10906pub struct OptionExprClauseEmptyGreen(pub GreenId);
10907impl TypedSyntaxNode for OptionExprClauseEmpty {
10908 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionExprClauseEmpty);
10909 type StablePtr = OptionExprClauseEmptyPtr;
10910 type Green = OptionExprClauseEmptyGreen;
10911 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
10912 OptionExprClauseEmptyGreen(
10913 Arc::new(GreenNode {
10914 kind: SyntaxKind::OptionExprClauseEmpty,
10915 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
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::OptionExprClauseEmpty,
10925 "Unexpected SyntaxKind {:?}. Expected {:?}.",
10926 kind,
10927 SyntaxKind::OptionExprClauseEmpty
10928 );
10929 let children = db.get_children(node.clone());
10930 Self { node, children }
10931 }
10932 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
10933 let kind = node.kind(db);
10934 if kind == SyntaxKind::OptionExprClauseEmpty {
10935 Some(Self::from_syntax_node(db, node))
10936 } else {
10937 None
10938 }
10939 }
10940 fn as_syntax_node(&self) -> SyntaxNode {
10941 self.node.clone()
10942 }
10943 fn stable_ptr(&self) -> Self::StablePtr {
10944 OptionExprClauseEmptyPtr(self.node.0.stable_ptr)
10945 }
10946}
10947impl From<&OptionExprClauseEmpty> for SyntaxStablePtrId {
10948 fn from(node: &OptionExprClauseEmpty) -> Self {
10949 node.stable_ptr().untyped()
10950 }
10951}
10952#[derive(Clone, Debug, Eq, Hash, PartialEq)]
10953pub struct StatementReturn {
10954 node: SyntaxNode,
10955 children: Arc<[SyntaxNode]>,
10956}
10957impl StatementReturn {
10958 pub const INDEX_ATTRIBUTES: usize = 0;
10959 pub const INDEX_RETURN_KW: usize = 1;
10960 pub const INDEX_EXPR_CLAUSE: usize = 2;
10961 pub const INDEX_SEMICOLON: usize = 3;
10962 pub fn new_green(
10963 db: &dyn SyntaxGroup,
10964 attributes: AttributeListGreen,
10965 return_kw: TerminalReturnGreen,
10966 expr_clause: OptionExprClauseGreen,
10967 semicolon: TerminalSemicolonGreen,
10968 ) -> StatementReturnGreen {
10969 let children: Vec<GreenId> = vec![attributes.0, return_kw.0, expr_clause.0, semicolon.0];
10970 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
10971 StatementReturnGreen(
10972 Arc::new(GreenNode {
10973 kind: SyntaxKind::StatementReturn,
10974 details: GreenNodeDetails::Node { children, width },
10975 })
10976 .intern(db),
10977 )
10978 }
10979}
10980impl StatementReturn {
10981 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
10982 AttributeList::from_syntax_node(db, self.children[0].clone())
10983 }
10984 pub fn return_kw(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
10985 TerminalReturn::from_syntax_node(db, self.children[1].clone())
10986 }
10987 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
10988 OptionExprClause::from_syntax_node(db, self.children[2].clone())
10989 }
10990 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
10991 TerminalSemicolon::from_syntax_node(db, self.children[3].clone())
10992 }
10993}
10994#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
10995pub struct StatementReturnPtr(pub SyntaxStablePtrId);
10996impl StatementReturnPtr {}
10997impl TypedStablePtr for StatementReturnPtr {
10998 type SyntaxNode = StatementReturn;
10999 fn untyped(&self) -> SyntaxStablePtrId {
11000 self.0
11001 }
11002 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementReturn {
11003 StatementReturn::from_syntax_node(db, self.0.lookup(db))
11004 }
11005}
11006impl From<StatementReturnPtr> for SyntaxStablePtrId {
11007 fn from(ptr: StatementReturnPtr) -> Self {
11008 ptr.untyped()
11009 }
11010}
11011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11012pub struct StatementReturnGreen(pub GreenId);
11013impl TypedSyntaxNode for StatementReturn {
11014 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementReturn);
11015 type StablePtr = StatementReturnPtr;
11016 type Green = StatementReturnGreen;
11017 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11018 StatementReturnGreen(
11019 Arc::new(GreenNode {
11020 kind: SyntaxKind::StatementReturn,
11021 details: GreenNodeDetails::Node {
11022 children: vec![
11023 AttributeList::missing(db).0,
11024 TerminalReturn::missing(db).0,
11025 OptionExprClause::missing(db).0,
11026 TerminalSemicolon::missing(db).0,
11027 ],
11028 width: TextWidth::default(),
11029 },
11030 })
11031 .intern(db),
11032 )
11033 }
11034 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11035 let kind = node.kind(db);
11036 assert_eq!(
11037 kind,
11038 SyntaxKind::StatementReturn,
11039 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11040 kind,
11041 SyntaxKind::StatementReturn
11042 );
11043 let children = db.get_children(node.clone());
11044 Self { node, children }
11045 }
11046 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11047 let kind = node.kind(db);
11048 if kind == SyntaxKind::StatementReturn {
11049 Some(Self::from_syntax_node(db, node))
11050 } else {
11051 None
11052 }
11053 }
11054 fn as_syntax_node(&self) -> SyntaxNode {
11055 self.node.clone()
11056 }
11057 fn stable_ptr(&self) -> Self::StablePtr {
11058 StatementReturnPtr(self.node.0.stable_ptr)
11059 }
11060}
11061impl From<&StatementReturn> for SyntaxStablePtrId {
11062 fn from(node: &StatementReturn) -> Self {
11063 node.stable_ptr().untyped()
11064 }
11065}
11066#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11067pub struct StatementBreak {
11068 node: SyntaxNode,
11069 children: Arc<[SyntaxNode]>,
11070}
11071impl StatementBreak {
11072 pub const INDEX_ATTRIBUTES: usize = 0;
11073 pub const INDEX_BREAK_KW: usize = 1;
11074 pub const INDEX_EXPR_CLAUSE: usize = 2;
11075 pub const INDEX_SEMICOLON: usize = 3;
11076 pub fn new_green(
11077 db: &dyn SyntaxGroup,
11078 attributes: AttributeListGreen,
11079 break_kw: TerminalBreakGreen,
11080 expr_clause: OptionExprClauseGreen,
11081 semicolon: TerminalSemicolonGreen,
11082 ) -> StatementBreakGreen {
11083 let children: Vec<GreenId> = vec![attributes.0, break_kw.0, expr_clause.0, semicolon.0];
11084 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11085 StatementBreakGreen(
11086 Arc::new(GreenNode {
11087 kind: SyntaxKind::StatementBreak,
11088 details: GreenNodeDetails::Node { children, width },
11089 })
11090 .intern(db),
11091 )
11092 }
11093}
11094impl StatementBreak {
11095 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
11096 AttributeList::from_syntax_node(db, self.children[0].clone())
11097 }
11098 pub fn break_kw(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
11099 TerminalBreak::from_syntax_node(db, self.children[1].clone())
11100 }
11101 pub fn expr_clause(&self, db: &dyn SyntaxGroup) -> OptionExprClause {
11102 OptionExprClause::from_syntax_node(db, self.children[2].clone())
11103 }
11104 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
11105 TerminalSemicolon::from_syntax_node(db, self.children[3].clone())
11106 }
11107}
11108#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11109pub struct StatementBreakPtr(pub SyntaxStablePtrId);
11110impl StatementBreakPtr {}
11111impl TypedStablePtr for StatementBreakPtr {
11112 type SyntaxNode = StatementBreak;
11113 fn untyped(&self) -> SyntaxStablePtrId {
11114 self.0
11115 }
11116 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementBreak {
11117 StatementBreak::from_syntax_node(db, self.0.lookup(db))
11118 }
11119}
11120impl From<StatementBreakPtr> for SyntaxStablePtrId {
11121 fn from(ptr: StatementBreakPtr) -> Self {
11122 ptr.untyped()
11123 }
11124}
11125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11126pub struct StatementBreakGreen(pub GreenId);
11127impl TypedSyntaxNode for StatementBreak {
11128 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementBreak);
11129 type StablePtr = StatementBreakPtr;
11130 type Green = StatementBreakGreen;
11131 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11132 StatementBreakGreen(
11133 Arc::new(GreenNode {
11134 kind: SyntaxKind::StatementBreak,
11135 details: GreenNodeDetails::Node {
11136 children: vec![
11137 AttributeList::missing(db).0,
11138 TerminalBreak::missing(db).0,
11139 OptionExprClause::missing(db).0,
11140 TerminalSemicolon::missing(db).0,
11141 ],
11142 width: TextWidth::default(),
11143 },
11144 })
11145 .intern(db),
11146 )
11147 }
11148 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11149 let kind = node.kind(db);
11150 assert_eq!(
11151 kind,
11152 SyntaxKind::StatementBreak,
11153 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11154 kind,
11155 SyntaxKind::StatementBreak
11156 );
11157 let children = db.get_children(node.clone());
11158 Self { node, children }
11159 }
11160 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11161 let kind = node.kind(db);
11162 if kind == SyntaxKind::StatementBreak {
11163 Some(Self::from_syntax_node(db, node))
11164 } else {
11165 None
11166 }
11167 }
11168 fn as_syntax_node(&self) -> SyntaxNode {
11169 self.node.clone()
11170 }
11171 fn stable_ptr(&self) -> Self::StablePtr {
11172 StatementBreakPtr(self.node.0.stable_ptr)
11173 }
11174}
11175impl From<&StatementBreak> for SyntaxStablePtrId {
11176 fn from(node: &StatementBreak) -> Self {
11177 node.stable_ptr().untyped()
11178 }
11179}
11180#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11181pub struct StatementItem {
11182 node: SyntaxNode,
11183 children: Arc<[SyntaxNode]>,
11184}
11185impl StatementItem {
11186 pub const INDEX_ITEM: usize = 0;
11187 pub fn new_green(db: &dyn SyntaxGroup, item: ModuleItemGreen) -> StatementItemGreen {
11188 let children: Vec<GreenId> = vec![item.0];
11189 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11190 StatementItemGreen(
11191 Arc::new(GreenNode {
11192 kind: SyntaxKind::StatementItem,
11193 details: GreenNodeDetails::Node { children, width },
11194 })
11195 .intern(db),
11196 )
11197 }
11198}
11199impl StatementItem {
11200 pub fn item(&self, db: &dyn SyntaxGroup) -> ModuleItem {
11201 ModuleItem::from_syntax_node(db, self.children[0].clone())
11202 }
11203}
11204#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11205pub struct StatementItemPtr(pub SyntaxStablePtrId);
11206impl StatementItemPtr {}
11207impl TypedStablePtr for StatementItemPtr {
11208 type SyntaxNode = StatementItem;
11209 fn untyped(&self) -> SyntaxStablePtrId {
11210 self.0
11211 }
11212 fn lookup(&self, db: &dyn SyntaxGroup) -> StatementItem {
11213 StatementItem::from_syntax_node(db, self.0.lookup(db))
11214 }
11215}
11216impl From<StatementItemPtr> for SyntaxStablePtrId {
11217 fn from(ptr: StatementItemPtr) -> Self {
11218 ptr.untyped()
11219 }
11220}
11221#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11222pub struct StatementItemGreen(pub GreenId);
11223impl TypedSyntaxNode for StatementItem {
11224 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::StatementItem);
11225 type StablePtr = StatementItemPtr;
11226 type Green = StatementItemGreen;
11227 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11228 StatementItemGreen(
11229 Arc::new(GreenNode {
11230 kind: SyntaxKind::StatementItem,
11231 details: GreenNodeDetails::Node {
11232 children: vec![ModuleItem::missing(db).0],
11233 width: TextWidth::default(),
11234 },
11235 })
11236 .intern(db),
11237 )
11238 }
11239 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11240 let kind = node.kind(db);
11241 assert_eq!(
11242 kind,
11243 SyntaxKind::StatementItem,
11244 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11245 kind,
11246 SyntaxKind::StatementItem
11247 );
11248 let children = db.get_children(node.clone());
11249 Self { node, children }
11250 }
11251 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11252 let kind = node.kind(db);
11253 if kind == SyntaxKind::StatementItem {
11254 Some(Self::from_syntax_node(db, node))
11255 } else {
11256 None
11257 }
11258 }
11259 fn as_syntax_node(&self) -> SyntaxNode {
11260 self.node.clone()
11261 }
11262 fn stable_ptr(&self) -> Self::StablePtr {
11263 StatementItemPtr(self.node.0.stable_ptr)
11264 }
11265}
11266impl From<&StatementItem> for SyntaxStablePtrId {
11267 fn from(node: &StatementItem) -> Self {
11268 node.stable_ptr().untyped()
11269 }
11270}
11271#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11272pub struct Param {
11273 node: SyntaxNode,
11274 children: Arc<[SyntaxNode]>,
11275}
11276impl Param {
11277 pub const INDEX_MODIFIERS: usize = 0;
11278 pub const INDEX_NAME: usize = 1;
11279 pub const INDEX_TYPE_CLAUSE: usize = 2;
11280 pub fn new_green(
11281 db: &dyn SyntaxGroup,
11282 modifiers: ModifierListGreen,
11283 name: TerminalIdentifierGreen,
11284 type_clause: OptionTypeClauseGreen,
11285 ) -> ParamGreen {
11286 let children: Vec<GreenId> = vec![modifiers.0, name.0, type_clause.0];
11287 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11288 ParamGreen(
11289 Arc::new(GreenNode {
11290 kind: SyntaxKind::Param,
11291 details: GreenNodeDetails::Node { children, width },
11292 })
11293 .intern(db),
11294 )
11295 }
11296}
11297impl Param {
11298 pub fn modifiers(&self, db: &dyn SyntaxGroup) -> ModifierList {
11299 ModifierList::from_syntax_node(db, self.children[0].clone())
11300 }
11301 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
11302 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
11303 }
11304 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
11305 OptionTypeClause::from_syntax_node(db, self.children[2].clone())
11306 }
11307}
11308#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11309pub struct ParamPtr(pub SyntaxStablePtrId);
11310impl ParamPtr {
11311 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
11312 let ptr = self.0.lookup_intern(db);
11313 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
11314 TerminalIdentifierGreen(key_fields[0])
11315 } else {
11316 panic!("Unexpected key field query on root.");
11317 }
11318 }
11319}
11320impl TypedStablePtr for ParamPtr {
11321 type SyntaxNode = Param;
11322 fn untyped(&self) -> SyntaxStablePtrId {
11323 self.0
11324 }
11325 fn lookup(&self, db: &dyn SyntaxGroup) -> Param {
11326 Param::from_syntax_node(db, self.0.lookup(db))
11327 }
11328}
11329impl From<ParamPtr> for SyntaxStablePtrId {
11330 fn from(ptr: ParamPtr) -> Self {
11331 ptr.untyped()
11332 }
11333}
11334#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11335pub struct ParamGreen(pub GreenId);
11336impl TypedSyntaxNode for Param {
11337 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Param);
11338 type StablePtr = ParamPtr;
11339 type Green = ParamGreen;
11340 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11341 ParamGreen(
11342 Arc::new(GreenNode {
11343 kind: SyntaxKind::Param,
11344 details: GreenNodeDetails::Node {
11345 children: vec![
11346 ModifierList::missing(db).0,
11347 TerminalIdentifier::missing(db).0,
11348 OptionTypeClause::missing(db).0,
11349 ],
11350 width: TextWidth::default(),
11351 },
11352 })
11353 .intern(db),
11354 )
11355 }
11356 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11357 let kind = node.kind(db);
11358 assert_eq!(
11359 kind,
11360 SyntaxKind::Param,
11361 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11362 kind,
11363 SyntaxKind::Param
11364 );
11365 let children = db.get_children(node.clone());
11366 Self { node, children }
11367 }
11368 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11369 let kind = node.kind(db);
11370 if kind == SyntaxKind::Param { Some(Self::from_syntax_node(db, node)) } else { None }
11371 }
11372 fn as_syntax_node(&self) -> SyntaxNode {
11373 self.node.clone()
11374 }
11375 fn stable_ptr(&self) -> Self::StablePtr {
11376 ParamPtr(self.node.0.stable_ptr)
11377 }
11378}
11379impl From<&Param> for SyntaxStablePtrId {
11380 fn from(node: &Param) -> Self {
11381 node.stable_ptr().untyped()
11382 }
11383}
11384#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11385pub struct ModifierList(ElementList<Modifier, 1>);
11386impl Deref for ModifierList {
11387 type Target = ElementList<Modifier, 1>;
11388 fn deref(&self) -> &Self::Target {
11389 &self.0
11390 }
11391}
11392impl ModifierList {
11393 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ModifierGreen>) -> ModifierListGreen {
11394 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
11395 ModifierListGreen(
11396 Arc::new(GreenNode {
11397 kind: SyntaxKind::ModifierList,
11398 details: GreenNodeDetails::Node {
11399 children: children.iter().map(|x| x.0).collect(),
11400 width,
11401 },
11402 })
11403 .intern(db),
11404 )
11405 }
11406}
11407#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11408pub struct ModifierListPtr(pub SyntaxStablePtrId);
11409impl TypedStablePtr for ModifierListPtr {
11410 type SyntaxNode = ModifierList;
11411 fn untyped(&self) -> SyntaxStablePtrId {
11412 self.0
11413 }
11414 fn lookup(&self, db: &dyn SyntaxGroup) -> ModifierList {
11415 ModifierList::from_syntax_node(db, self.0.lookup(db))
11416 }
11417}
11418impl From<ModifierListPtr> for SyntaxStablePtrId {
11419 fn from(ptr: ModifierListPtr) -> Self {
11420 ptr.untyped()
11421 }
11422}
11423#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11424pub struct ModifierListGreen(pub GreenId);
11425impl TypedSyntaxNode for ModifierList {
11426 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModifierList);
11427 type StablePtr = ModifierListPtr;
11428 type Green = ModifierListGreen;
11429 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11430 ModifierListGreen(
11431 Arc::new(GreenNode {
11432 kind: SyntaxKind::ModifierList,
11433 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11434 })
11435 .intern(db),
11436 )
11437 }
11438 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11439 Self(ElementList::new(node))
11440 }
11441 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11442 if node.kind(db) == SyntaxKind::ModifierList {
11443 Some(Self(ElementList::new(node)))
11444 } else {
11445 None
11446 }
11447 }
11448 fn as_syntax_node(&self) -> SyntaxNode {
11449 self.node.clone()
11450 }
11451 fn stable_ptr(&self) -> Self::StablePtr {
11452 ModifierListPtr(self.node.0.stable_ptr)
11453 }
11454}
11455impl From<&ModifierList> for SyntaxStablePtrId {
11456 fn from(node: &ModifierList) -> Self {
11457 node.stable_ptr().untyped()
11458 }
11459}
11460#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11461pub enum Modifier {
11462 Ref(TerminalRef),
11463 Mut(TerminalMut),
11464}
11465#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11466pub struct ModifierPtr(pub SyntaxStablePtrId);
11467impl TypedStablePtr for ModifierPtr {
11468 type SyntaxNode = Modifier;
11469 fn untyped(&self) -> SyntaxStablePtrId {
11470 self.0
11471 }
11472 fn lookup(&self, db: &dyn SyntaxGroup) -> Modifier {
11473 Modifier::from_syntax_node(db, self.0.lookup(db))
11474 }
11475}
11476impl From<ModifierPtr> for SyntaxStablePtrId {
11477 fn from(ptr: ModifierPtr) -> Self {
11478 ptr.untyped()
11479 }
11480}
11481impl From<TerminalRefPtr> for ModifierPtr {
11482 fn from(value: TerminalRefPtr) -> Self {
11483 Self(value.0)
11484 }
11485}
11486impl From<TerminalMutPtr> for ModifierPtr {
11487 fn from(value: TerminalMutPtr) -> Self {
11488 Self(value.0)
11489 }
11490}
11491impl From<TerminalRefGreen> for ModifierGreen {
11492 fn from(value: TerminalRefGreen) -> Self {
11493 Self(value.0)
11494 }
11495}
11496impl From<TerminalMutGreen> for ModifierGreen {
11497 fn from(value: TerminalMutGreen) -> Self {
11498 Self(value.0)
11499 }
11500}
11501#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11502pub struct ModifierGreen(pub GreenId);
11503impl TypedSyntaxNode for Modifier {
11504 const OPTIONAL_KIND: Option<SyntaxKind> = None;
11505 type StablePtr = ModifierPtr;
11506 type Green = ModifierGreen;
11507 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11508 panic!("No missing variant.");
11509 }
11510 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11511 let kind = node.kind(db);
11512 match kind {
11513 SyntaxKind::TerminalRef => Modifier::Ref(TerminalRef::from_syntax_node(db, node)),
11514 SyntaxKind::TerminalMut => Modifier::Mut(TerminalMut::from_syntax_node(db, node)),
11515 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Modifier"),
11516 }
11517 }
11518 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11519 let kind = node.kind(db);
11520 match kind {
11521 SyntaxKind::TerminalRef => Some(Modifier::Ref(TerminalRef::from_syntax_node(db, node))),
11522 SyntaxKind::TerminalMut => Some(Modifier::Mut(TerminalMut::from_syntax_node(db, node))),
11523 _ => None,
11524 }
11525 }
11526 fn as_syntax_node(&self) -> SyntaxNode {
11527 match self {
11528 Modifier::Ref(x) => x.as_syntax_node(),
11529 Modifier::Mut(x) => x.as_syntax_node(),
11530 }
11531 }
11532 fn stable_ptr(&self) -> Self::StablePtr {
11533 ModifierPtr(self.as_syntax_node().0.stable_ptr)
11534 }
11535}
11536impl From<&Modifier> for SyntaxStablePtrId {
11537 fn from(node: &Modifier) -> Self {
11538 node.stable_ptr().untyped()
11539 }
11540}
11541impl Modifier {
11542 pub fn is_variant(kind: SyntaxKind) -> bool {
11544 matches!(kind, SyntaxKind::TerminalRef | SyntaxKind::TerminalMut)
11545 }
11546}
11547#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11548pub struct ParamList(ElementList<Param, 2>);
11549impl Deref for ParamList {
11550 type Target = ElementList<Param, 2>;
11551 fn deref(&self) -> &Self::Target {
11552 &self.0
11553 }
11554}
11555impl ParamList {
11556 pub fn new_green(
11557 db: &dyn SyntaxGroup,
11558 children: Vec<ParamListElementOrSeparatorGreen>,
11559 ) -> ParamListGreen {
11560 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11561 ParamListGreen(
11562 Arc::new(GreenNode {
11563 kind: SyntaxKind::ParamList,
11564 details: GreenNodeDetails::Node {
11565 children: children.iter().map(|x| x.id()).collect(),
11566 width,
11567 },
11568 })
11569 .intern(db),
11570 )
11571 }
11572}
11573#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11574pub struct ParamListPtr(pub SyntaxStablePtrId);
11575impl TypedStablePtr for ParamListPtr {
11576 type SyntaxNode = ParamList;
11577 fn untyped(&self) -> SyntaxStablePtrId {
11578 self.0
11579 }
11580 fn lookup(&self, db: &dyn SyntaxGroup) -> ParamList {
11581 ParamList::from_syntax_node(db, self.0.lookup(db))
11582 }
11583}
11584impl From<ParamListPtr> for SyntaxStablePtrId {
11585 fn from(ptr: ParamListPtr) -> Self {
11586 ptr.untyped()
11587 }
11588}
11589#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11590pub enum ParamListElementOrSeparatorGreen {
11591 Separator(TerminalCommaGreen),
11592 Element(ParamGreen),
11593}
11594impl From<TerminalCommaGreen> for ParamListElementOrSeparatorGreen {
11595 fn from(value: TerminalCommaGreen) -> Self {
11596 ParamListElementOrSeparatorGreen::Separator(value)
11597 }
11598}
11599impl From<ParamGreen> for ParamListElementOrSeparatorGreen {
11600 fn from(value: ParamGreen) -> Self {
11601 ParamListElementOrSeparatorGreen::Element(value)
11602 }
11603}
11604impl ParamListElementOrSeparatorGreen {
11605 fn id(&self) -> GreenId {
11606 match self {
11607 ParamListElementOrSeparatorGreen::Separator(green) => green.0,
11608 ParamListElementOrSeparatorGreen::Element(green) => green.0,
11609 }
11610 }
11611}
11612#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11613pub struct ParamListGreen(pub GreenId);
11614impl TypedSyntaxNode for ParamList {
11615 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ParamList);
11616 type StablePtr = ParamListPtr;
11617 type Green = ParamListGreen;
11618 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11619 ParamListGreen(
11620 Arc::new(GreenNode {
11621 kind: SyntaxKind::ParamList,
11622 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11623 })
11624 .intern(db),
11625 )
11626 }
11627 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11628 Self(ElementList::new(node))
11629 }
11630 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11631 if node.kind(db) == SyntaxKind::ParamList {
11632 Some(Self(ElementList::new(node)))
11633 } else {
11634 None
11635 }
11636 }
11637 fn as_syntax_node(&self) -> SyntaxNode {
11638 self.node.clone()
11639 }
11640 fn stable_ptr(&self) -> Self::StablePtr {
11641 ParamListPtr(self.node.0.stable_ptr)
11642 }
11643}
11644impl From<&ParamList> for SyntaxStablePtrId {
11645 fn from(node: &ParamList) -> Self {
11646 node.stable_ptr().untyped()
11647 }
11648}
11649#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11650pub struct ImplicitsClause {
11651 node: SyntaxNode,
11652 children: Arc<[SyntaxNode]>,
11653}
11654impl ImplicitsClause {
11655 pub const INDEX_IMPLICITS_KW: usize = 0;
11656 pub const INDEX_LPAREN: usize = 1;
11657 pub const INDEX_IMPLICITS: usize = 2;
11658 pub const INDEX_RPAREN: usize = 3;
11659 pub fn new_green(
11660 db: &dyn SyntaxGroup,
11661 implicits_kw: TerminalImplicitsGreen,
11662 lparen: TerminalLParenGreen,
11663 implicits: ImplicitsListGreen,
11664 rparen: TerminalRParenGreen,
11665 ) -> ImplicitsClauseGreen {
11666 let children: Vec<GreenId> = vec![implicits_kw.0, lparen.0, implicits.0, rparen.0];
11667 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11668 ImplicitsClauseGreen(
11669 Arc::new(GreenNode {
11670 kind: SyntaxKind::ImplicitsClause,
11671 details: GreenNodeDetails::Node { children, width },
11672 })
11673 .intern(db),
11674 )
11675 }
11676}
11677impl ImplicitsClause {
11678 pub fn implicits_kw(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
11679 TerminalImplicits::from_syntax_node(db, self.children[0].clone())
11680 }
11681 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
11682 TerminalLParen::from_syntax_node(db, self.children[1].clone())
11683 }
11684 pub fn implicits(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
11685 ImplicitsList::from_syntax_node(db, self.children[2].clone())
11686 }
11687 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
11688 TerminalRParen::from_syntax_node(db, self.children[3].clone())
11689 }
11690}
11691#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11692pub struct ImplicitsClausePtr(pub SyntaxStablePtrId);
11693impl ImplicitsClausePtr {}
11694impl TypedStablePtr for ImplicitsClausePtr {
11695 type SyntaxNode = ImplicitsClause;
11696 fn untyped(&self) -> SyntaxStablePtrId {
11697 self.0
11698 }
11699 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsClause {
11700 ImplicitsClause::from_syntax_node(db, self.0.lookup(db))
11701 }
11702}
11703impl From<ImplicitsClausePtr> for SyntaxStablePtrId {
11704 fn from(ptr: ImplicitsClausePtr) -> Self {
11705 ptr.untyped()
11706 }
11707}
11708#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11709pub struct ImplicitsClauseGreen(pub GreenId);
11710impl TypedSyntaxNode for ImplicitsClause {
11711 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsClause);
11712 type StablePtr = ImplicitsClausePtr;
11713 type Green = ImplicitsClauseGreen;
11714 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11715 ImplicitsClauseGreen(
11716 Arc::new(GreenNode {
11717 kind: SyntaxKind::ImplicitsClause,
11718 details: GreenNodeDetails::Node {
11719 children: vec![
11720 TerminalImplicits::missing(db).0,
11721 TerminalLParen::missing(db).0,
11722 ImplicitsList::missing(db).0,
11723 TerminalRParen::missing(db).0,
11724 ],
11725 width: TextWidth::default(),
11726 },
11727 })
11728 .intern(db),
11729 )
11730 }
11731 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11732 let kind = node.kind(db);
11733 assert_eq!(
11734 kind,
11735 SyntaxKind::ImplicitsClause,
11736 "Unexpected SyntaxKind {:?}. Expected {:?}.",
11737 kind,
11738 SyntaxKind::ImplicitsClause
11739 );
11740 let children = db.get_children(node.clone());
11741 Self { node, children }
11742 }
11743 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11744 let kind = node.kind(db);
11745 if kind == SyntaxKind::ImplicitsClause {
11746 Some(Self::from_syntax_node(db, node))
11747 } else {
11748 None
11749 }
11750 }
11751 fn as_syntax_node(&self) -> SyntaxNode {
11752 self.node.clone()
11753 }
11754 fn stable_ptr(&self) -> Self::StablePtr {
11755 ImplicitsClausePtr(self.node.0.stable_ptr)
11756 }
11757}
11758impl From<&ImplicitsClause> for SyntaxStablePtrId {
11759 fn from(node: &ImplicitsClause) -> Self {
11760 node.stable_ptr().untyped()
11761 }
11762}
11763#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11764pub struct ImplicitsList(ElementList<ExprPath, 2>);
11765impl Deref for ImplicitsList {
11766 type Target = ElementList<ExprPath, 2>;
11767 fn deref(&self) -> &Self::Target {
11768 &self.0
11769 }
11770}
11771impl ImplicitsList {
11772 pub fn new_green(
11773 db: &dyn SyntaxGroup,
11774 children: Vec<ImplicitsListElementOrSeparatorGreen>,
11775 ) -> ImplicitsListGreen {
11776 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
11777 ImplicitsListGreen(
11778 Arc::new(GreenNode {
11779 kind: SyntaxKind::ImplicitsList,
11780 details: GreenNodeDetails::Node {
11781 children: children.iter().map(|x| x.id()).collect(),
11782 width,
11783 },
11784 })
11785 .intern(db),
11786 )
11787 }
11788}
11789#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11790pub struct ImplicitsListPtr(pub SyntaxStablePtrId);
11791impl TypedStablePtr for ImplicitsListPtr {
11792 type SyntaxNode = ImplicitsList;
11793 fn untyped(&self) -> SyntaxStablePtrId {
11794 self.0
11795 }
11796 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplicitsList {
11797 ImplicitsList::from_syntax_node(db, self.0.lookup(db))
11798 }
11799}
11800impl From<ImplicitsListPtr> for SyntaxStablePtrId {
11801 fn from(ptr: ImplicitsListPtr) -> Self {
11802 ptr.untyped()
11803 }
11804}
11805#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11806pub enum ImplicitsListElementOrSeparatorGreen {
11807 Separator(TerminalCommaGreen),
11808 Element(ExprPathGreen),
11809}
11810impl From<TerminalCommaGreen> for ImplicitsListElementOrSeparatorGreen {
11811 fn from(value: TerminalCommaGreen) -> Self {
11812 ImplicitsListElementOrSeparatorGreen::Separator(value)
11813 }
11814}
11815impl From<ExprPathGreen> for ImplicitsListElementOrSeparatorGreen {
11816 fn from(value: ExprPathGreen) -> Self {
11817 ImplicitsListElementOrSeparatorGreen::Element(value)
11818 }
11819}
11820impl ImplicitsListElementOrSeparatorGreen {
11821 fn id(&self) -> GreenId {
11822 match self {
11823 ImplicitsListElementOrSeparatorGreen::Separator(green) => green.0,
11824 ImplicitsListElementOrSeparatorGreen::Element(green) => green.0,
11825 }
11826 }
11827}
11828#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11829pub struct ImplicitsListGreen(pub GreenId);
11830impl TypedSyntaxNode for ImplicitsList {
11831 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplicitsList);
11832 type StablePtr = ImplicitsListPtr;
11833 type Green = ImplicitsListGreen;
11834 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11835 ImplicitsListGreen(
11836 Arc::new(GreenNode {
11837 kind: SyntaxKind::ImplicitsList,
11838 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
11839 })
11840 .intern(db),
11841 )
11842 }
11843 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11844 Self(ElementList::new(node))
11845 }
11846 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11847 if node.kind(db) == SyntaxKind::ImplicitsList {
11848 Some(Self(ElementList::new(node)))
11849 } else {
11850 None
11851 }
11852 }
11853 fn as_syntax_node(&self) -> SyntaxNode {
11854 self.node.clone()
11855 }
11856 fn stable_ptr(&self) -> Self::StablePtr {
11857 ImplicitsListPtr(self.node.0.stable_ptr)
11858 }
11859}
11860impl From<&ImplicitsList> for SyntaxStablePtrId {
11861 fn from(node: &ImplicitsList) -> Self {
11862 node.stable_ptr().untyped()
11863 }
11864}
11865#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11866pub enum OptionImplicitsClause {
11867 Empty(OptionImplicitsClauseEmpty),
11868 ImplicitsClause(ImplicitsClause),
11869}
11870#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11871pub struct OptionImplicitsClausePtr(pub SyntaxStablePtrId);
11872impl TypedStablePtr for OptionImplicitsClausePtr {
11873 type SyntaxNode = OptionImplicitsClause;
11874 fn untyped(&self) -> SyntaxStablePtrId {
11875 self.0
11876 }
11877 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
11878 OptionImplicitsClause::from_syntax_node(db, self.0.lookup(db))
11879 }
11880}
11881impl From<OptionImplicitsClausePtr> for SyntaxStablePtrId {
11882 fn from(ptr: OptionImplicitsClausePtr) -> Self {
11883 ptr.untyped()
11884 }
11885}
11886impl From<OptionImplicitsClauseEmptyPtr> for OptionImplicitsClausePtr {
11887 fn from(value: OptionImplicitsClauseEmptyPtr) -> Self {
11888 Self(value.0)
11889 }
11890}
11891impl From<ImplicitsClausePtr> for OptionImplicitsClausePtr {
11892 fn from(value: ImplicitsClausePtr) -> Self {
11893 Self(value.0)
11894 }
11895}
11896impl From<OptionImplicitsClauseEmptyGreen> for OptionImplicitsClauseGreen {
11897 fn from(value: OptionImplicitsClauseEmptyGreen) -> Self {
11898 Self(value.0)
11899 }
11900}
11901impl From<ImplicitsClauseGreen> for OptionImplicitsClauseGreen {
11902 fn from(value: ImplicitsClauseGreen) -> Self {
11903 Self(value.0)
11904 }
11905}
11906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11907pub struct OptionImplicitsClauseGreen(pub GreenId);
11908impl TypedSyntaxNode for OptionImplicitsClause {
11909 const OPTIONAL_KIND: Option<SyntaxKind> = None;
11910 type StablePtr = OptionImplicitsClausePtr;
11911 type Green = OptionImplicitsClauseGreen;
11912 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
11913 panic!("No missing variant.");
11914 }
11915 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
11916 let kind = node.kind(db);
11917 match kind {
11918 SyntaxKind::OptionImplicitsClauseEmpty => {
11919 OptionImplicitsClause::Empty(OptionImplicitsClauseEmpty::from_syntax_node(db, node))
11920 }
11921 SyntaxKind::ImplicitsClause => {
11922 OptionImplicitsClause::ImplicitsClause(ImplicitsClause::from_syntax_node(db, node))
11923 }
11924 _ => panic!(
11925 "Unexpected syntax kind {:?} when constructing {}.",
11926 kind, "OptionImplicitsClause"
11927 ),
11928 }
11929 }
11930 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
11931 let kind = node.kind(db);
11932 match kind {
11933 SyntaxKind::OptionImplicitsClauseEmpty => Some(OptionImplicitsClause::Empty(
11934 OptionImplicitsClauseEmpty::from_syntax_node(db, node),
11935 )),
11936 SyntaxKind::ImplicitsClause => Some(OptionImplicitsClause::ImplicitsClause(
11937 ImplicitsClause::from_syntax_node(db, node),
11938 )),
11939 _ => None,
11940 }
11941 }
11942 fn as_syntax_node(&self) -> SyntaxNode {
11943 match self {
11944 OptionImplicitsClause::Empty(x) => x.as_syntax_node(),
11945 OptionImplicitsClause::ImplicitsClause(x) => x.as_syntax_node(),
11946 }
11947 }
11948 fn stable_ptr(&self) -> Self::StablePtr {
11949 OptionImplicitsClausePtr(self.as_syntax_node().0.stable_ptr)
11950 }
11951}
11952impl From<&OptionImplicitsClause> for SyntaxStablePtrId {
11953 fn from(node: &OptionImplicitsClause) -> Self {
11954 node.stable_ptr().untyped()
11955 }
11956}
11957impl OptionImplicitsClause {
11958 pub fn is_variant(kind: SyntaxKind) -> bool {
11960 matches!(kind, SyntaxKind::OptionImplicitsClauseEmpty | SyntaxKind::ImplicitsClause)
11961 }
11962}
11963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
11964pub struct OptionImplicitsClauseEmpty {
11965 node: SyntaxNode,
11966 children: Arc<[SyntaxNode]>,
11967}
11968impl OptionImplicitsClauseEmpty {
11969 pub fn new_green(db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmptyGreen {
11970 let children: Vec<GreenId> = vec![];
11971 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
11972 OptionImplicitsClauseEmptyGreen(
11973 Arc::new(GreenNode {
11974 kind: SyntaxKind::OptionImplicitsClauseEmpty,
11975 details: GreenNodeDetails::Node { children, width },
11976 })
11977 .intern(db),
11978 )
11979 }
11980}
11981impl OptionImplicitsClauseEmpty {}
11982#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
11983pub struct OptionImplicitsClauseEmptyPtr(pub SyntaxStablePtrId);
11984impl OptionImplicitsClauseEmptyPtr {}
11985impl TypedStablePtr for OptionImplicitsClauseEmptyPtr {
11986 type SyntaxNode = OptionImplicitsClauseEmpty;
11987 fn untyped(&self) -> SyntaxStablePtrId {
11988 self.0
11989 }
11990 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClauseEmpty {
11991 OptionImplicitsClauseEmpty::from_syntax_node(db, self.0.lookup(db))
11992 }
11993}
11994impl From<OptionImplicitsClauseEmptyPtr> for SyntaxStablePtrId {
11995 fn from(ptr: OptionImplicitsClauseEmptyPtr) -> Self {
11996 ptr.untyped()
11997 }
11998}
11999#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12000pub struct OptionImplicitsClauseEmptyGreen(pub GreenId);
12001impl TypedSyntaxNode for OptionImplicitsClauseEmpty {
12002 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionImplicitsClauseEmpty);
12003 type StablePtr = OptionImplicitsClauseEmptyPtr;
12004 type Green = OptionImplicitsClauseEmptyGreen;
12005 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12006 OptionImplicitsClauseEmptyGreen(
12007 Arc::new(GreenNode {
12008 kind: SyntaxKind::OptionImplicitsClauseEmpty,
12009 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12010 })
12011 .intern(db),
12012 )
12013 }
12014 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12015 let kind = node.kind(db);
12016 assert_eq!(
12017 kind,
12018 SyntaxKind::OptionImplicitsClauseEmpty,
12019 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12020 kind,
12021 SyntaxKind::OptionImplicitsClauseEmpty
12022 );
12023 let children = db.get_children(node.clone());
12024 Self { node, children }
12025 }
12026 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12027 let kind = node.kind(db);
12028 if kind == SyntaxKind::OptionImplicitsClauseEmpty {
12029 Some(Self::from_syntax_node(db, node))
12030 } else {
12031 None
12032 }
12033 }
12034 fn as_syntax_node(&self) -> SyntaxNode {
12035 self.node.clone()
12036 }
12037 fn stable_ptr(&self) -> Self::StablePtr {
12038 OptionImplicitsClauseEmptyPtr(self.node.0.stable_ptr)
12039 }
12040}
12041impl From<&OptionImplicitsClauseEmpty> for SyntaxStablePtrId {
12042 fn from(node: &OptionImplicitsClauseEmpty) -> Self {
12043 node.stable_ptr().untyped()
12044 }
12045}
12046#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12047pub enum OptionTerminalNoPanic {
12048 Empty(OptionTerminalNoPanicEmpty),
12049 TerminalNoPanic(TerminalNoPanic),
12050}
12051#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12052pub struct OptionTerminalNoPanicPtr(pub SyntaxStablePtrId);
12053impl TypedStablePtr for OptionTerminalNoPanicPtr {
12054 type SyntaxNode = OptionTerminalNoPanic;
12055 fn untyped(&self) -> SyntaxStablePtrId {
12056 self.0
12057 }
12058 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12059 OptionTerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
12060 }
12061}
12062impl From<OptionTerminalNoPanicPtr> for SyntaxStablePtrId {
12063 fn from(ptr: OptionTerminalNoPanicPtr) -> Self {
12064 ptr.untyped()
12065 }
12066}
12067impl From<OptionTerminalNoPanicEmptyPtr> for OptionTerminalNoPanicPtr {
12068 fn from(value: OptionTerminalNoPanicEmptyPtr) -> Self {
12069 Self(value.0)
12070 }
12071}
12072impl From<TerminalNoPanicPtr> for OptionTerminalNoPanicPtr {
12073 fn from(value: TerminalNoPanicPtr) -> Self {
12074 Self(value.0)
12075 }
12076}
12077impl From<OptionTerminalNoPanicEmptyGreen> for OptionTerminalNoPanicGreen {
12078 fn from(value: OptionTerminalNoPanicEmptyGreen) -> Self {
12079 Self(value.0)
12080 }
12081}
12082impl From<TerminalNoPanicGreen> for OptionTerminalNoPanicGreen {
12083 fn from(value: TerminalNoPanicGreen) -> Self {
12084 Self(value.0)
12085 }
12086}
12087#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12088pub struct OptionTerminalNoPanicGreen(pub GreenId);
12089impl TypedSyntaxNode for OptionTerminalNoPanic {
12090 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12091 type StablePtr = OptionTerminalNoPanicPtr;
12092 type Green = OptionTerminalNoPanicGreen;
12093 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12094 panic!("No missing variant.");
12095 }
12096 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12097 let kind = node.kind(db);
12098 match kind {
12099 SyntaxKind::OptionTerminalNoPanicEmpty => {
12100 OptionTerminalNoPanic::Empty(OptionTerminalNoPanicEmpty::from_syntax_node(db, node))
12101 }
12102 SyntaxKind::TerminalNoPanic => {
12103 OptionTerminalNoPanic::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
12104 }
12105 _ => panic!(
12106 "Unexpected syntax kind {:?} when constructing {}.",
12107 kind, "OptionTerminalNoPanic"
12108 ),
12109 }
12110 }
12111 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12112 let kind = node.kind(db);
12113 match kind {
12114 SyntaxKind::OptionTerminalNoPanicEmpty => Some(OptionTerminalNoPanic::Empty(
12115 OptionTerminalNoPanicEmpty::from_syntax_node(db, node),
12116 )),
12117 SyntaxKind::TerminalNoPanic => Some(OptionTerminalNoPanic::TerminalNoPanic(
12118 TerminalNoPanic::from_syntax_node(db, node),
12119 )),
12120 _ => None,
12121 }
12122 }
12123 fn as_syntax_node(&self) -> SyntaxNode {
12124 match self {
12125 OptionTerminalNoPanic::Empty(x) => x.as_syntax_node(),
12126 OptionTerminalNoPanic::TerminalNoPanic(x) => x.as_syntax_node(),
12127 }
12128 }
12129 fn stable_ptr(&self) -> Self::StablePtr {
12130 OptionTerminalNoPanicPtr(self.as_syntax_node().0.stable_ptr)
12131 }
12132}
12133impl From<&OptionTerminalNoPanic> for SyntaxStablePtrId {
12134 fn from(node: &OptionTerminalNoPanic) -> Self {
12135 node.stable_ptr().untyped()
12136 }
12137}
12138impl OptionTerminalNoPanic {
12139 pub fn is_variant(kind: SyntaxKind) -> bool {
12141 matches!(kind, SyntaxKind::OptionTerminalNoPanicEmpty | SyntaxKind::TerminalNoPanic)
12142 }
12143}
12144#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12145pub struct OptionTerminalNoPanicEmpty {
12146 node: SyntaxNode,
12147 children: Arc<[SyntaxNode]>,
12148}
12149impl OptionTerminalNoPanicEmpty {
12150 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmptyGreen {
12151 let children: Vec<GreenId> = vec![];
12152 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12153 OptionTerminalNoPanicEmptyGreen(
12154 Arc::new(GreenNode {
12155 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12156 details: GreenNodeDetails::Node { children, width },
12157 })
12158 .intern(db),
12159 )
12160 }
12161}
12162impl OptionTerminalNoPanicEmpty {}
12163#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12164pub struct OptionTerminalNoPanicEmptyPtr(pub SyntaxStablePtrId);
12165impl OptionTerminalNoPanicEmptyPtr {}
12166impl TypedStablePtr for OptionTerminalNoPanicEmptyPtr {
12167 type SyntaxNode = OptionTerminalNoPanicEmpty;
12168 fn untyped(&self) -> SyntaxStablePtrId {
12169 self.0
12170 }
12171 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanicEmpty {
12172 OptionTerminalNoPanicEmpty::from_syntax_node(db, self.0.lookup(db))
12173 }
12174}
12175impl From<OptionTerminalNoPanicEmptyPtr> for SyntaxStablePtrId {
12176 fn from(ptr: OptionTerminalNoPanicEmptyPtr) -> Self {
12177 ptr.untyped()
12178 }
12179}
12180#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12181pub struct OptionTerminalNoPanicEmptyGreen(pub GreenId);
12182impl TypedSyntaxNode for OptionTerminalNoPanicEmpty {
12183 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalNoPanicEmpty);
12184 type StablePtr = OptionTerminalNoPanicEmptyPtr;
12185 type Green = OptionTerminalNoPanicEmptyGreen;
12186 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12187 OptionTerminalNoPanicEmptyGreen(
12188 Arc::new(GreenNode {
12189 kind: SyntaxKind::OptionTerminalNoPanicEmpty,
12190 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12191 })
12192 .intern(db),
12193 )
12194 }
12195 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12196 let kind = node.kind(db);
12197 assert_eq!(
12198 kind,
12199 SyntaxKind::OptionTerminalNoPanicEmpty,
12200 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12201 kind,
12202 SyntaxKind::OptionTerminalNoPanicEmpty
12203 );
12204 let children = db.get_children(node.clone());
12205 Self { node, children }
12206 }
12207 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12208 let kind = node.kind(db);
12209 if kind == SyntaxKind::OptionTerminalNoPanicEmpty {
12210 Some(Self::from_syntax_node(db, node))
12211 } else {
12212 None
12213 }
12214 }
12215 fn as_syntax_node(&self) -> SyntaxNode {
12216 self.node.clone()
12217 }
12218 fn stable_ptr(&self) -> Self::StablePtr {
12219 OptionTerminalNoPanicEmptyPtr(self.node.0.stable_ptr)
12220 }
12221}
12222impl From<&OptionTerminalNoPanicEmpty> for SyntaxStablePtrId {
12223 fn from(node: &OptionTerminalNoPanicEmpty) -> Self {
12224 node.stable_ptr().untyped()
12225 }
12226}
12227#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12228pub enum OptionTerminalConst {
12229 Empty(OptionTerminalConstEmpty),
12230 TerminalConst(TerminalConst),
12231}
12232#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12233pub struct OptionTerminalConstPtr(pub SyntaxStablePtrId);
12234impl TypedStablePtr for OptionTerminalConstPtr {
12235 type SyntaxNode = OptionTerminalConst;
12236 fn untyped(&self) -> SyntaxStablePtrId {
12237 self.0
12238 }
12239 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
12240 OptionTerminalConst::from_syntax_node(db, self.0.lookup(db))
12241 }
12242}
12243impl From<OptionTerminalConstPtr> for SyntaxStablePtrId {
12244 fn from(ptr: OptionTerminalConstPtr) -> Self {
12245 ptr.untyped()
12246 }
12247}
12248impl From<OptionTerminalConstEmptyPtr> for OptionTerminalConstPtr {
12249 fn from(value: OptionTerminalConstEmptyPtr) -> Self {
12250 Self(value.0)
12251 }
12252}
12253impl From<TerminalConstPtr> for OptionTerminalConstPtr {
12254 fn from(value: TerminalConstPtr) -> Self {
12255 Self(value.0)
12256 }
12257}
12258impl From<OptionTerminalConstEmptyGreen> for OptionTerminalConstGreen {
12259 fn from(value: OptionTerminalConstEmptyGreen) -> Self {
12260 Self(value.0)
12261 }
12262}
12263impl From<TerminalConstGreen> for OptionTerminalConstGreen {
12264 fn from(value: TerminalConstGreen) -> Self {
12265 Self(value.0)
12266 }
12267}
12268#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12269pub struct OptionTerminalConstGreen(pub GreenId);
12270impl TypedSyntaxNode for OptionTerminalConst {
12271 const OPTIONAL_KIND: Option<SyntaxKind> = None;
12272 type StablePtr = OptionTerminalConstPtr;
12273 type Green = OptionTerminalConstGreen;
12274 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12275 panic!("No missing variant.");
12276 }
12277 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12278 let kind = node.kind(db);
12279 match kind {
12280 SyntaxKind::OptionTerminalConstEmpty => {
12281 OptionTerminalConst::Empty(OptionTerminalConstEmpty::from_syntax_node(db, node))
12282 }
12283 SyntaxKind::TerminalConst => {
12284 OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node))
12285 }
12286 _ => panic!(
12287 "Unexpected syntax kind {:?} when constructing {}.",
12288 kind, "OptionTerminalConst"
12289 ),
12290 }
12291 }
12292 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12293 let kind = node.kind(db);
12294 match kind {
12295 SyntaxKind::OptionTerminalConstEmpty => Some(OptionTerminalConst::Empty(
12296 OptionTerminalConstEmpty::from_syntax_node(db, node),
12297 )),
12298 SyntaxKind::TerminalConst => {
12299 Some(OptionTerminalConst::TerminalConst(TerminalConst::from_syntax_node(db, node)))
12300 }
12301 _ => None,
12302 }
12303 }
12304 fn as_syntax_node(&self) -> SyntaxNode {
12305 match self {
12306 OptionTerminalConst::Empty(x) => x.as_syntax_node(),
12307 OptionTerminalConst::TerminalConst(x) => x.as_syntax_node(),
12308 }
12309 }
12310 fn stable_ptr(&self) -> Self::StablePtr {
12311 OptionTerminalConstPtr(self.as_syntax_node().0.stable_ptr)
12312 }
12313}
12314impl From<&OptionTerminalConst> for SyntaxStablePtrId {
12315 fn from(node: &OptionTerminalConst) -> Self {
12316 node.stable_ptr().untyped()
12317 }
12318}
12319impl OptionTerminalConst {
12320 pub fn is_variant(kind: SyntaxKind) -> bool {
12322 matches!(kind, SyntaxKind::OptionTerminalConstEmpty | SyntaxKind::TerminalConst)
12323 }
12324}
12325#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12326pub struct OptionTerminalConstEmpty {
12327 node: SyntaxNode,
12328 children: Arc<[SyntaxNode]>,
12329}
12330impl OptionTerminalConstEmpty {
12331 pub fn new_green(db: &dyn SyntaxGroup) -> OptionTerminalConstEmptyGreen {
12332 let children: Vec<GreenId> = vec![];
12333 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12334 OptionTerminalConstEmptyGreen(
12335 Arc::new(GreenNode {
12336 kind: SyntaxKind::OptionTerminalConstEmpty,
12337 details: GreenNodeDetails::Node { children, width },
12338 })
12339 .intern(db),
12340 )
12341 }
12342}
12343impl OptionTerminalConstEmpty {}
12344#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12345pub struct OptionTerminalConstEmptyPtr(pub SyntaxStablePtrId);
12346impl OptionTerminalConstEmptyPtr {}
12347impl TypedStablePtr for OptionTerminalConstEmptyPtr {
12348 type SyntaxNode = OptionTerminalConstEmpty;
12349 fn untyped(&self) -> SyntaxStablePtrId {
12350 self.0
12351 }
12352 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionTerminalConstEmpty {
12353 OptionTerminalConstEmpty::from_syntax_node(db, self.0.lookup(db))
12354 }
12355}
12356impl From<OptionTerminalConstEmptyPtr> for SyntaxStablePtrId {
12357 fn from(ptr: OptionTerminalConstEmptyPtr) -> Self {
12358 ptr.untyped()
12359 }
12360}
12361#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12362pub struct OptionTerminalConstEmptyGreen(pub GreenId);
12363impl TypedSyntaxNode for OptionTerminalConstEmpty {
12364 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionTerminalConstEmpty);
12365 type StablePtr = OptionTerminalConstEmptyPtr;
12366 type Green = OptionTerminalConstEmptyGreen;
12367 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12368 OptionTerminalConstEmptyGreen(
12369 Arc::new(GreenNode {
12370 kind: SyntaxKind::OptionTerminalConstEmpty,
12371 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12372 })
12373 .intern(db),
12374 )
12375 }
12376 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12377 let kind = node.kind(db);
12378 assert_eq!(
12379 kind,
12380 SyntaxKind::OptionTerminalConstEmpty,
12381 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12382 kind,
12383 SyntaxKind::OptionTerminalConstEmpty
12384 );
12385 let children = db.get_children(node.clone());
12386 Self { node, children }
12387 }
12388 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12389 let kind = node.kind(db);
12390 if kind == SyntaxKind::OptionTerminalConstEmpty {
12391 Some(Self::from_syntax_node(db, node))
12392 } else {
12393 None
12394 }
12395 }
12396 fn as_syntax_node(&self) -> SyntaxNode {
12397 self.node.clone()
12398 }
12399 fn stable_ptr(&self) -> Self::StablePtr {
12400 OptionTerminalConstEmptyPtr(self.node.0.stable_ptr)
12401 }
12402}
12403impl From<&OptionTerminalConstEmpty> for SyntaxStablePtrId {
12404 fn from(node: &OptionTerminalConstEmpty) -> Self {
12405 node.stable_ptr().untyped()
12406 }
12407}
12408#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12409pub struct FunctionSignature {
12410 node: SyntaxNode,
12411 children: Arc<[SyntaxNode]>,
12412}
12413impl FunctionSignature {
12414 pub const INDEX_LPAREN: usize = 0;
12415 pub const INDEX_PARAMETERS: usize = 1;
12416 pub const INDEX_RPAREN: usize = 2;
12417 pub const INDEX_RET_TY: usize = 3;
12418 pub const INDEX_IMPLICITS_CLAUSE: usize = 4;
12419 pub const INDEX_OPTIONAL_NO_PANIC: usize = 5;
12420 pub fn new_green(
12421 db: &dyn SyntaxGroup,
12422 lparen: TerminalLParenGreen,
12423 parameters: ParamListGreen,
12424 rparen: TerminalRParenGreen,
12425 ret_ty: OptionReturnTypeClauseGreen,
12426 implicits_clause: OptionImplicitsClauseGreen,
12427 optional_no_panic: OptionTerminalNoPanicGreen,
12428 ) -> FunctionSignatureGreen {
12429 let children: Vec<GreenId> = vec![
12430 lparen.0,
12431 parameters.0,
12432 rparen.0,
12433 ret_ty.0,
12434 implicits_clause.0,
12435 optional_no_panic.0,
12436 ];
12437 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12438 FunctionSignatureGreen(
12439 Arc::new(GreenNode {
12440 kind: SyntaxKind::FunctionSignature,
12441 details: GreenNodeDetails::Node { children, width },
12442 })
12443 .intern(db),
12444 )
12445 }
12446}
12447impl FunctionSignature {
12448 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
12449 TerminalLParen::from_syntax_node(db, self.children[0].clone())
12450 }
12451 pub fn parameters(&self, db: &dyn SyntaxGroup) -> ParamList {
12452 ParamList::from_syntax_node(db, self.children[1].clone())
12453 }
12454 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
12455 TerminalRParen::from_syntax_node(db, self.children[2].clone())
12456 }
12457 pub fn ret_ty(&self, db: &dyn SyntaxGroup) -> OptionReturnTypeClause {
12458 OptionReturnTypeClause::from_syntax_node(db, self.children[3].clone())
12459 }
12460 pub fn implicits_clause(&self, db: &dyn SyntaxGroup) -> OptionImplicitsClause {
12461 OptionImplicitsClause::from_syntax_node(db, self.children[4].clone())
12462 }
12463 pub fn optional_no_panic(&self, db: &dyn SyntaxGroup) -> OptionTerminalNoPanic {
12464 OptionTerminalNoPanic::from_syntax_node(db, self.children[5].clone())
12465 }
12466}
12467#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12468pub struct FunctionSignaturePtr(pub SyntaxStablePtrId);
12469impl FunctionSignaturePtr {}
12470impl TypedStablePtr for FunctionSignaturePtr {
12471 type SyntaxNode = FunctionSignature;
12472 fn untyped(&self) -> SyntaxStablePtrId {
12473 self.0
12474 }
12475 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
12476 FunctionSignature::from_syntax_node(db, self.0.lookup(db))
12477 }
12478}
12479impl From<FunctionSignaturePtr> for SyntaxStablePtrId {
12480 fn from(ptr: FunctionSignaturePtr) -> Self {
12481 ptr.untyped()
12482 }
12483}
12484#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12485pub struct FunctionSignatureGreen(pub GreenId);
12486impl TypedSyntaxNode for FunctionSignature {
12487 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionSignature);
12488 type StablePtr = FunctionSignaturePtr;
12489 type Green = FunctionSignatureGreen;
12490 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12491 FunctionSignatureGreen(
12492 Arc::new(GreenNode {
12493 kind: SyntaxKind::FunctionSignature,
12494 details: GreenNodeDetails::Node {
12495 children: vec![
12496 TerminalLParen::missing(db).0,
12497 ParamList::missing(db).0,
12498 TerminalRParen::missing(db).0,
12499 OptionReturnTypeClause::missing(db).0,
12500 OptionImplicitsClause::missing(db).0,
12501 OptionTerminalNoPanic::missing(db).0,
12502 ],
12503 width: TextWidth::default(),
12504 },
12505 })
12506 .intern(db),
12507 )
12508 }
12509 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12510 let kind = node.kind(db);
12511 assert_eq!(
12512 kind,
12513 SyntaxKind::FunctionSignature,
12514 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12515 kind,
12516 SyntaxKind::FunctionSignature
12517 );
12518 let children = db.get_children(node.clone());
12519 Self { node, children }
12520 }
12521 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12522 let kind = node.kind(db);
12523 if kind == SyntaxKind::FunctionSignature {
12524 Some(Self::from_syntax_node(db, node))
12525 } else {
12526 None
12527 }
12528 }
12529 fn as_syntax_node(&self) -> SyntaxNode {
12530 self.node.clone()
12531 }
12532 fn stable_ptr(&self) -> Self::StablePtr {
12533 FunctionSignaturePtr(self.node.0.stable_ptr)
12534 }
12535}
12536impl From<&FunctionSignature> for SyntaxStablePtrId {
12537 fn from(node: &FunctionSignature) -> Self {
12538 node.stable_ptr().untyped()
12539 }
12540}
12541#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12542pub struct Member {
12543 node: SyntaxNode,
12544 children: Arc<[SyntaxNode]>,
12545}
12546impl Member {
12547 pub const INDEX_ATTRIBUTES: usize = 0;
12548 pub const INDEX_VISIBILITY: usize = 1;
12549 pub const INDEX_NAME: usize = 2;
12550 pub const INDEX_TYPE_CLAUSE: usize = 3;
12551 pub fn new_green(
12552 db: &dyn SyntaxGroup,
12553 attributes: AttributeListGreen,
12554 visibility: VisibilityGreen,
12555 name: TerminalIdentifierGreen,
12556 type_clause: TypeClauseGreen,
12557 ) -> MemberGreen {
12558 let children: Vec<GreenId> = vec![attributes.0, visibility.0, name.0, type_clause.0];
12559 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12560 MemberGreen(
12561 Arc::new(GreenNode {
12562 kind: SyntaxKind::Member,
12563 details: GreenNodeDetails::Node { children, width },
12564 })
12565 .intern(db),
12566 )
12567 }
12568}
12569impl Member {
12570 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12571 AttributeList::from_syntax_node(db, self.children[0].clone())
12572 }
12573 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
12574 Visibility::from_syntax_node(db, self.children[1].clone())
12575 }
12576 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12577 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
12578 }
12579 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
12580 TypeClause::from_syntax_node(db, self.children[3].clone())
12581 }
12582}
12583#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12584pub struct MemberPtr(pub SyntaxStablePtrId);
12585impl MemberPtr {
12586 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12587 let ptr = self.0.lookup_intern(db);
12588 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12589 TerminalIdentifierGreen(key_fields[0])
12590 } else {
12591 panic!("Unexpected key field query on root.");
12592 }
12593 }
12594}
12595impl TypedStablePtr for MemberPtr {
12596 type SyntaxNode = Member;
12597 fn untyped(&self) -> SyntaxStablePtrId {
12598 self.0
12599 }
12600 fn lookup(&self, db: &dyn SyntaxGroup) -> Member {
12601 Member::from_syntax_node(db, self.0.lookup(db))
12602 }
12603}
12604impl From<MemberPtr> for SyntaxStablePtrId {
12605 fn from(ptr: MemberPtr) -> Self {
12606 ptr.untyped()
12607 }
12608}
12609#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12610pub struct MemberGreen(pub GreenId);
12611impl TypedSyntaxNode for Member {
12612 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Member);
12613 type StablePtr = MemberPtr;
12614 type Green = MemberGreen;
12615 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12616 MemberGreen(
12617 Arc::new(GreenNode {
12618 kind: SyntaxKind::Member,
12619 details: GreenNodeDetails::Node {
12620 children: vec![
12621 AttributeList::missing(db).0,
12622 Visibility::missing(db).0,
12623 TerminalIdentifier::missing(db).0,
12624 TypeClause::missing(db).0,
12625 ],
12626 width: TextWidth::default(),
12627 },
12628 })
12629 .intern(db),
12630 )
12631 }
12632 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12633 let kind = node.kind(db);
12634 assert_eq!(
12635 kind,
12636 SyntaxKind::Member,
12637 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12638 kind,
12639 SyntaxKind::Member
12640 );
12641 let children = db.get_children(node.clone());
12642 Self { node, children }
12643 }
12644 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12645 let kind = node.kind(db);
12646 if kind == SyntaxKind::Member { Some(Self::from_syntax_node(db, node)) } else { None }
12647 }
12648 fn as_syntax_node(&self) -> SyntaxNode {
12649 self.node.clone()
12650 }
12651 fn stable_ptr(&self) -> Self::StablePtr {
12652 MemberPtr(self.node.0.stable_ptr)
12653 }
12654}
12655impl From<&Member> for SyntaxStablePtrId {
12656 fn from(node: &Member) -> Self {
12657 node.stable_ptr().untyped()
12658 }
12659}
12660#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12661pub struct MemberList(ElementList<Member, 2>);
12662impl Deref for MemberList {
12663 type Target = ElementList<Member, 2>;
12664 fn deref(&self) -> &Self::Target {
12665 &self.0
12666 }
12667}
12668impl MemberList {
12669 pub fn new_green(
12670 db: &dyn SyntaxGroup,
12671 children: Vec<MemberListElementOrSeparatorGreen>,
12672 ) -> MemberListGreen {
12673 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
12674 MemberListGreen(
12675 Arc::new(GreenNode {
12676 kind: SyntaxKind::MemberList,
12677 details: GreenNodeDetails::Node {
12678 children: children.iter().map(|x| x.id()).collect(),
12679 width,
12680 },
12681 })
12682 .intern(db),
12683 )
12684 }
12685}
12686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12687pub struct MemberListPtr(pub SyntaxStablePtrId);
12688impl TypedStablePtr for MemberListPtr {
12689 type SyntaxNode = MemberList;
12690 fn untyped(&self) -> SyntaxStablePtrId {
12691 self.0
12692 }
12693 fn lookup(&self, db: &dyn SyntaxGroup) -> MemberList {
12694 MemberList::from_syntax_node(db, self.0.lookup(db))
12695 }
12696}
12697impl From<MemberListPtr> for SyntaxStablePtrId {
12698 fn from(ptr: MemberListPtr) -> Self {
12699 ptr.untyped()
12700 }
12701}
12702#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12703pub enum MemberListElementOrSeparatorGreen {
12704 Separator(TerminalCommaGreen),
12705 Element(MemberGreen),
12706}
12707impl From<TerminalCommaGreen> for MemberListElementOrSeparatorGreen {
12708 fn from(value: TerminalCommaGreen) -> Self {
12709 MemberListElementOrSeparatorGreen::Separator(value)
12710 }
12711}
12712impl From<MemberGreen> for MemberListElementOrSeparatorGreen {
12713 fn from(value: MemberGreen) -> Self {
12714 MemberListElementOrSeparatorGreen::Element(value)
12715 }
12716}
12717impl MemberListElementOrSeparatorGreen {
12718 fn id(&self) -> GreenId {
12719 match self {
12720 MemberListElementOrSeparatorGreen::Separator(green) => green.0,
12721 MemberListElementOrSeparatorGreen::Element(green) => green.0,
12722 }
12723 }
12724}
12725#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12726pub struct MemberListGreen(pub GreenId);
12727impl TypedSyntaxNode for MemberList {
12728 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::MemberList);
12729 type StablePtr = MemberListPtr;
12730 type Green = MemberListGreen;
12731 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12732 MemberListGreen(
12733 Arc::new(GreenNode {
12734 kind: SyntaxKind::MemberList,
12735 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12736 })
12737 .intern(db),
12738 )
12739 }
12740 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12741 Self(ElementList::new(node))
12742 }
12743 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12744 if node.kind(db) == SyntaxKind::MemberList {
12745 Some(Self(ElementList::new(node)))
12746 } else {
12747 None
12748 }
12749 }
12750 fn as_syntax_node(&self) -> SyntaxNode {
12751 self.node.clone()
12752 }
12753 fn stable_ptr(&self) -> Self::StablePtr {
12754 MemberListPtr(self.node.0.stable_ptr)
12755 }
12756}
12757impl From<&MemberList> for SyntaxStablePtrId {
12758 fn from(node: &MemberList) -> Self {
12759 node.stable_ptr().untyped()
12760 }
12761}
12762#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12763pub struct Variant {
12764 node: SyntaxNode,
12765 children: Arc<[SyntaxNode]>,
12766}
12767impl Variant {
12768 pub const INDEX_ATTRIBUTES: usize = 0;
12769 pub const INDEX_NAME: usize = 1;
12770 pub const INDEX_TYPE_CLAUSE: usize = 2;
12771 pub fn new_green(
12772 db: &dyn SyntaxGroup,
12773 attributes: AttributeListGreen,
12774 name: TerminalIdentifierGreen,
12775 type_clause: OptionTypeClauseGreen,
12776 ) -> VariantGreen {
12777 let children: Vec<GreenId> = vec![attributes.0, name.0, type_clause.0];
12778 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
12779 VariantGreen(
12780 Arc::new(GreenNode {
12781 kind: SyntaxKind::Variant,
12782 details: GreenNodeDetails::Node { children, width },
12783 })
12784 .intern(db),
12785 )
12786 }
12787}
12788impl Variant {
12789 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
12790 AttributeList::from_syntax_node(db, self.children[0].clone())
12791 }
12792 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
12793 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
12794 }
12795 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> OptionTypeClause {
12796 OptionTypeClause::from_syntax_node(db, self.children[2].clone())
12797 }
12798}
12799#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12800pub struct VariantPtr(pub SyntaxStablePtrId);
12801impl VariantPtr {
12802 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
12803 let ptr = self.0.lookup_intern(db);
12804 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
12805 TerminalIdentifierGreen(key_fields[0])
12806 } else {
12807 panic!("Unexpected key field query on root.");
12808 }
12809 }
12810}
12811impl TypedStablePtr for VariantPtr {
12812 type SyntaxNode = Variant;
12813 fn untyped(&self) -> SyntaxStablePtrId {
12814 self.0
12815 }
12816 fn lookup(&self, db: &dyn SyntaxGroup) -> Variant {
12817 Variant::from_syntax_node(db, self.0.lookup(db))
12818 }
12819}
12820impl From<VariantPtr> for SyntaxStablePtrId {
12821 fn from(ptr: VariantPtr) -> Self {
12822 ptr.untyped()
12823 }
12824}
12825#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12826pub struct VariantGreen(pub GreenId);
12827impl TypedSyntaxNode for Variant {
12828 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Variant);
12829 type StablePtr = VariantPtr;
12830 type Green = VariantGreen;
12831 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12832 VariantGreen(
12833 Arc::new(GreenNode {
12834 kind: SyntaxKind::Variant,
12835 details: GreenNodeDetails::Node {
12836 children: vec![
12837 AttributeList::missing(db).0,
12838 TerminalIdentifier::missing(db).0,
12839 OptionTypeClause::missing(db).0,
12840 ],
12841 width: TextWidth::default(),
12842 },
12843 })
12844 .intern(db),
12845 )
12846 }
12847 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12848 let kind = node.kind(db);
12849 assert_eq!(
12850 kind,
12851 SyntaxKind::Variant,
12852 "Unexpected SyntaxKind {:?}. Expected {:?}.",
12853 kind,
12854 SyntaxKind::Variant
12855 );
12856 let children = db.get_children(node.clone());
12857 Self { node, children }
12858 }
12859 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12860 let kind = node.kind(db);
12861 if kind == SyntaxKind::Variant { Some(Self::from_syntax_node(db, node)) } else { None }
12862 }
12863 fn as_syntax_node(&self) -> SyntaxNode {
12864 self.node.clone()
12865 }
12866 fn stable_ptr(&self) -> Self::StablePtr {
12867 VariantPtr(self.node.0.stable_ptr)
12868 }
12869}
12870impl From<&Variant> for SyntaxStablePtrId {
12871 fn from(node: &Variant) -> Self {
12872 node.stable_ptr().untyped()
12873 }
12874}
12875#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12876pub struct VariantList(ElementList<Variant, 2>);
12877impl Deref for VariantList {
12878 type Target = ElementList<Variant, 2>;
12879 fn deref(&self) -> &Self::Target {
12880 &self.0
12881 }
12882}
12883impl VariantList {
12884 pub fn new_green(
12885 db: &dyn SyntaxGroup,
12886 children: Vec<VariantListElementOrSeparatorGreen>,
12887 ) -> VariantListGreen {
12888 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
12889 VariantListGreen(
12890 Arc::new(GreenNode {
12891 kind: SyntaxKind::VariantList,
12892 details: GreenNodeDetails::Node {
12893 children: children.iter().map(|x| x.id()).collect(),
12894 width,
12895 },
12896 })
12897 .intern(db),
12898 )
12899 }
12900}
12901#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12902pub struct VariantListPtr(pub SyntaxStablePtrId);
12903impl TypedStablePtr for VariantListPtr {
12904 type SyntaxNode = VariantList;
12905 fn untyped(&self) -> SyntaxStablePtrId {
12906 self.0
12907 }
12908 fn lookup(&self, db: &dyn SyntaxGroup) -> VariantList {
12909 VariantList::from_syntax_node(db, self.0.lookup(db))
12910 }
12911}
12912impl From<VariantListPtr> for SyntaxStablePtrId {
12913 fn from(ptr: VariantListPtr) -> Self {
12914 ptr.untyped()
12915 }
12916}
12917#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12918pub enum VariantListElementOrSeparatorGreen {
12919 Separator(TerminalCommaGreen),
12920 Element(VariantGreen),
12921}
12922impl From<TerminalCommaGreen> for VariantListElementOrSeparatorGreen {
12923 fn from(value: TerminalCommaGreen) -> Self {
12924 VariantListElementOrSeparatorGreen::Separator(value)
12925 }
12926}
12927impl From<VariantGreen> for VariantListElementOrSeparatorGreen {
12928 fn from(value: VariantGreen) -> Self {
12929 VariantListElementOrSeparatorGreen::Element(value)
12930 }
12931}
12932impl VariantListElementOrSeparatorGreen {
12933 fn id(&self) -> GreenId {
12934 match self {
12935 VariantListElementOrSeparatorGreen::Separator(green) => green.0,
12936 VariantListElementOrSeparatorGreen::Element(green) => green.0,
12937 }
12938 }
12939}
12940#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12941pub struct VariantListGreen(pub GreenId);
12942impl TypedSyntaxNode for VariantList {
12943 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VariantList);
12944 type StablePtr = VariantListPtr;
12945 type Green = VariantListGreen;
12946 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
12947 VariantListGreen(
12948 Arc::new(GreenNode {
12949 kind: SyntaxKind::VariantList,
12950 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
12951 })
12952 .intern(db),
12953 )
12954 }
12955 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
12956 Self(ElementList::new(node))
12957 }
12958 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
12959 if node.kind(db) == SyntaxKind::VariantList {
12960 Some(Self(ElementList::new(node)))
12961 } else {
12962 None
12963 }
12964 }
12965 fn as_syntax_node(&self) -> SyntaxNode {
12966 self.node.clone()
12967 }
12968 fn stable_ptr(&self) -> Self::StablePtr {
12969 VariantListPtr(self.node.0.stable_ptr)
12970 }
12971}
12972impl From<&VariantList> for SyntaxStablePtrId {
12973 fn from(node: &VariantList) -> Self {
12974 node.stable_ptr().untyped()
12975 }
12976}
12977#[derive(Clone, Debug, Eq, Hash, PartialEq)]
12978pub enum ModuleItem {
12979 Constant(ItemConstant),
12980 Module(ItemModule),
12981 Use(ItemUse),
12982 FreeFunction(FunctionWithBody),
12983 ExternFunction(ItemExternFunction),
12984 ExternType(ItemExternType),
12985 Trait(ItemTrait),
12986 Impl(ItemImpl),
12987 ImplAlias(ItemImplAlias),
12988 Struct(ItemStruct),
12989 Enum(ItemEnum),
12990 TypeAlias(ItemTypeAlias),
12991 InlineMacro(ItemInlineMacro),
12992 HeaderDoc(ItemHeaderDoc),
12993 Missing(ModuleItemMissing),
12994}
12995#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
12996pub struct ModuleItemPtr(pub SyntaxStablePtrId);
12997impl TypedStablePtr for ModuleItemPtr {
12998 type SyntaxNode = ModuleItem;
12999 fn untyped(&self) -> SyntaxStablePtrId {
13000 self.0
13001 }
13002 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItem {
13003 ModuleItem::from_syntax_node(db, self.0.lookup(db))
13004 }
13005}
13006impl From<ModuleItemPtr> for SyntaxStablePtrId {
13007 fn from(ptr: ModuleItemPtr) -> Self {
13008 ptr.untyped()
13009 }
13010}
13011impl From<ItemConstantPtr> for ModuleItemPtr {
13012 fn from(value: ItemConstantPtr) -> Self {
13013 Self(value.0)
13014 }
13015}
13016impl From<ItemModulePtr> for ModuleItemPtr {
13017 fn from(value: ItemModulePtr) -> Self {
13018 Self(value.0)
13019 }
13020}
13021impl From<ItemUsePtr> for ModuleItemPtr {
13022 fn from(value: ItemUsePtr) -> Self {
13023 Self(value.0)
13024 }
13025}
13026impl From<FunctionWithBodyPtr> for ModuleItemPtr {
13027 fn from(value: FunctionWithBodyPtr) -> Self {
13028 Self(value.0)
13029 }
13030}
13031impl From<ItemExternFunctionPtr> for ModuleItemPtr {
13032 fn from(value: ItemExternFunctionPtr) -> Self {
13033 Self(value.0)
13034 }
13035}
13036impl From<ItemExternTypePtr> for ModuleItemPtr {
13037 fn from(value: ItemExternTypePtr) -> Self {
13038 Self(value.0)
13039 }
13040}
13041impl From<ItemTraitPtr> for ModuleItemPtr {
13042 fn from(value: ItemTraitPtr) -> Self {
13043 Self(value.0)
13044 }
13045}
13046impl From<ItemImplPtr> for ModuleItemPtr {
13047 fn from(value: ItemImplPtr) -> Self {
13048 Self(value.0)
13049 }
13050}
13051impl From<ItemImplAliasPtr> for ModuleItemPtr {
13052 fn from(value: ItemImplAliasPtr) -> Self {
13053 Self(value.0)
13054 }
13055}
13056impl From<ItemStructPtr> for ModuleItemPtr {
13057 fn from(value: ItemStructPtr) -> Self {
13058 Self(value.0)
13059 }
13060}
13061impl From<ItemEnumPtr> for ModuleItemPtr {
13062 fn from(value: ItemEnumPtr) -> Self {
13063 Self(value.0)
13064 }
13065}
13066impl From<ItemTypeAliasPtr> for ModuleItemPtr {
13067 fn from(value: ItemTypeAliasPtr) -> Self {
13068 Self(value.0)
13069 }
13070}
13071impl From<ItemInlineMacroPtr> for ModuleItemPtr {
13072 fn from(value: ItemInlineMacroPtr) -> Self {
13073 Self(value.0)
13074 }
13075}
13076impl From<ItemHeaderDocPtr> for ModuleItemPtr {
13077 fn from(value: ItemHeaderDocPtr) -> Self {
13078 Self(value.0)
13079 }
13080}
13081impl From<ModuleItemMissingPtr> for ModuleItemPtr {
13082 fn from(value: ModuleItemMissingPtr) -> Self {
13083 Self(value.0)
13084 }
13085}
13086impl From<ItemConstantGreen> for ModuleItemGreen {
13087 fn from(value: ItemConstantGreen) -> Self {
13088 Self(value.0)
13089 }
13090}
13091impl From<ItemModuleGreen> for ModuleItemGreen {
13092 fn from(value: ItemModuleGreen) -> Self {
13093 Self(value.0)
13094 }
13095}
13096impl From<ItemUseGreen> for ModuleItemGreen {
13097 fn from(value: ItemUseGreen) -> Self {
13098 Self(value.0)
13099 }
13100}
13101impl From<FunctionWithBodyGreen> for ModuleItemGreen {
13102 fn from(value: FunctionWithBodyGreen) -> Self {
13103 Self(value.0)
13104 }
13105}
13106impl From<ItemExternFunctionGreen> for ModuleItemGreen {
13107 fn from(value: ItemExternFunctionGreen) -> Self {
13108 Self(value.0)
13109 }
13110}
13111impl From<ItemExternTypeGreen> for ModuleItemGreen {
13112 fn from(value: ItemExternTypeGreen) -> Self {
13113 Self(value.0)
13114 }
13115}
13116impl From<ItemTraitGreen> for ModuleItemGreen {
13117 fn from(value: ItemTraitGreen) -> Self {
13118 Self(value.0)
13119 }
13120}
13121impl From<ItemImplGreen> for ModuleItemGreen {
13122 fn from(value: ItemImplGreen) -> Self {
13123 Self(value.0)
13124 }
13125}
13126impl From<ItemImplAliasGreen> for ModuleItemGreen {
13127 fn from(value: ItemImplAliasGreen) -> Self {
13128 Self(value.0)
13129 }
13130}
13131impl From<ItemStructGreen> for ModuleItemGreen {
13132 fn from(value: ItemStructGreen) -> Self {
13133 Self(value.0)
13134 }
13135}
13136impl From<ItemEnumGreen> for ModuleItemGreen {
13137 fn from(value: ItemEnumGreen) -> Self {
13138 Self(value.0)
13139 }
13140}
13141impl From<ItemTypeAliasGreen> for ModuleItemGreen {
13142 fn from(value: ItemTypeAliasGreen) -> Self {
13143 Self(value.0)
13144 }
13145}
13146impl From<ItemInlineMacroGreen> for ModuleItemGreen {
13147 fn from(value: ItemInlineMacroGreen) -> Self {
13148 Self(value.0)
13149 }
13150}
13151impl From<ItemHeaderDocGreen> for ModuleItemGreen {
13152 fn from(value: ItemHeaderDocGreen) -> Self {
13153 Self(value.0)
13154 }
13155}
13156impl From<ModuleItemMissingGreen> for ModuleItemGreen {
13157 fn from(value: ModuleItemMissingGreen) -> Self {
13158 Self(value.0)
13159 }
13160}
13161#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13162pub struct ModuleItemGreen(pub GreenId);
13163impl TypedSyntaxNode for ModuleItem {
13164 const OPTIONAL_KIND: Option<SyntaxKind> = None;
13165 type StablePtr = ModuleItemPtr;
13166 type Green = ModuleItemGreen;
13167 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13168 ModuleItemGreen(ModuleItemMissing::missing(db).0)
13169 }
13170 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13171 let kind = node.kind(db);
13172 match kind {
13173 SyntaxKind::ItemConstant => {
13174 ModuleItem::Constant(ItemConstant::from_syntax_node(db, node))
13175 }
13176 SyntaxKind::ItemModule => ModuleItem::Module(ItemModule::from_syntax_node(db, node)),
13177 SyntaxKind::ItemUse => ModuleItem::Use(ItemUse::from_syntax_node(db, node)),
13178 SyntaxKind::FunctionWithBody => {
13179 ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node))
13180 }
13181 SyntaxKind::ItemExternFunction => {
13182 ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
13183 }
13184 SyntaxKind::ItemExternType => {
13185 ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node))
13186 }
13187 SyntaxKind::ItemTrait => ModuleItem::Trait(ItemTrait::from_syntax_node(db, node)),
13188 SyntaxKind::ItemImpl => ModuleItem::Impl(ItemImpl::from_syntax_node(db, node)),
13189 SyntaxKind::ItemImplAlias => {
13190 ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node))
13191 }
13192 SyntaxKind::ItemStruct => ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)),
13193 SyntaxKind::ItemEnum => ModuleItem::Enum(ItemEnum::from_syntax_node(db, node)),
13194 SyntaxKind::ItemTypeAlias => {
13195 ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node))
13196 }
13197 SyntaxKind::ItemInlineMacro => {
13198 ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node))
13199 }
13200 SyntaxKind::ItemHeaderDoc => {
13201 ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node))
13202 }
13203 SyntaxKind::ModuleItemMissing => {
13204 ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node))
13205 }
13206 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ModuleItem"),
13207 }
13208 }
13209 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13210 let kind = node.kind(db);
13211 match kind {
13212 SyntaxKind::ItemConstant => {
13213 Some(ModuleItem::Constant(ItemConstant::from_syntax_node(db, node)))
13214 }
13215 SyntaxKind::ItemModule => {
13216 Some(ModuleItem::Module(ItemModule::from_syntax_node(db, node)))
13217 }
13218 SyntaxKind::ItemUse => Some(ModuleItem::Use(ItemUse::from_syntax_node(db, node))),
13219 SyntaxKind::FunctionWithBody => {
13220 Some(ModuleItem::FreeFunction(FunctionWithBody::from_syntax_node(db, node)))
13221 }
13222 SyntaxKind::ItemExternFunction => {
13223 Some(ModuleItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
13224 }
13225 SyntaxKind::ItemExternType => {
13226 Some(ModuleItem::ExternType(ItemExternType::from_syntax_node(db, node)))
13227 }
13228 SyntaxKind::ItemTrait => Some(ModuleItem::Trait(ItemTrait::from_syntax_node(db, node))),
13229 SyntaxKind::ItemImpl => Some(ModuleItem::Impl(ItemImpl::from_syntax_node(db, node))),
13230 SyntaxKind::ItemImplAlias => {
13231 Some(ModuleItem::ImplAlias(ItemImplAlias::from_syntax_node(db, node)))
13232 }
13233 SyntaxKind::ItemStruct => {
13234 Some(ModuleItem::Struct(ItemStruct::from_syntax_node(db, node)))
13235 }
13236 SyntaxKind::ItemEnum => Some(ModuleItem::Enum(ItemEnum::from_syntax_node(db, node))),
13237 SyntaxKind::ItemTypeAlias => {
13238 Some(ModuleItem::TypeAlias(ItemTypeAlias::from_syntax_node(db, node)))
13239 }
13240 SyntaxKind::ItemInlineMacro => {
13241 Some(ModuleItem::InlineMacro(ItemInlineMacro::from_syntax_node(db, node)))
13242 }
13243 SyntaxKind::ItemHeaderDoc => {
13244 Some(ModuleItem::HeaderDoc(ItemHeaderDoc::from_syntax_node(db, node)))
13245 }
13246 SyntaxKind::ModuleItemMissing => {
13247 Some(ModuleItem::Missing(ModuleItemMissing::from_syntax_node(db, node)))
13248 }
13249 _ => None,
13250 }
13251 }
13252 fn as_syntax_node(&self) -> SyntaxNode {
13253 match self {
13254 ModuleItem::Constant(x) => x.as_syntax_node(),
13255 ModuleItem::Module(x) => x.as_syntax_node(),
13256 ModuleItem::Use(x) => x.as_syntax_node(),
13257 ModuleItem::FreeFunction(x) => x.as_syntax_node(),
13258 ModuleItem::ExternFunction(x) => x.as_syntax_node(),
13259 ModuleItem::ExternType(x) => x.as_syntax_node(),
13260 ModuleItem::Trait(x) => x.as_syntax_node(),
13261 ModuleItem::Impl(x) => x.as_syntax_node(),
13262 ModuleItem::ImplAlias(x) => x.as_syntax_node(),
13263 ModuleItem::Struct(x) => x.as_syntax_node(),
13264 ModuleItem::Enum(x) => x.as_syntax_node(),
13265 ModuleItem::TypeAlias(x) => x.as_syntax_node(),
13266 ModuleItem::InlineMacro(x) => x.as_syntax_node(),
13267 ModuleItem::HeaderDoc(x) => x.as_syntax_node(),
13268 ModuleItem::Missing(x) => x.as_syntax_node(),
13269 }
13270 }
13271 fn stable_ptr(&self) -> Self::StablePtr {
13272 ModuleItemPtr(self.as_syntax_node().0.stable_ptr)
13273 }
13274}
13275impl From<&ModuleItem> for SyntaxStablePtrId {
13276 fn from(node: &ModuleItem) -> Self {
13277 node.stable_ptr().untyped()
13278 }
13279}
13280impl ModuleItem {
13281 pub fn is_variant(kind: SyntaxKind) -> bool {
13283 matches!(
13284 kind,
13285 SyntaxKind::ItemConstant
13286 | SyntaxKind::ItemModule
13287 | SyntaxKind::ItemUse
13288 | SyntaxKind::FunctionWithBody
13289 | SyntaxKind::ItemExternFunction
13290 | SyntaxKind::ItemExternType
13291 | SyntaxKind::ItemTrait
13292 | SyntaxKind::ItemImpl
13293 | SyntaxKind::ItemImplAlias
13294 | SyntaxKind::ItemStruct
13295 | SyntaxKind::ItemEnum
13296 | SyntaxKind::ItemTypeAlias
13297 | SyntaxKind::ItemInlineMacro
13298 | SyntaxKind::ItemHeaderDoc
13299 | SyntaxKind::ModuleItemMissing
13300 )
13301 }
13302}
13303#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13304pub struct ModuleItemList(ElementList<ModuleItem, 1>);
13305impl Deref for ModuleItemList {
13306 type Target = ElementList<ModuleItem, 1>;
13307 fn deref(&self) -> &Self::Target {
13308 &self.0
13309 }
13310}
13311impl ModuleItemList {
13312 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ModuleItemGreen>) -> ModuleItemListGreen {
13313 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13314 ModuleItemListGreen(
13315 Arc::new(GreenNode {
13316 kind: SyntaxKind::ModuleItemList,
13317 details: GreenNodeDetails::Node {
13318 children: children.iter().map(|x| x.0).collect(),
13319 width,
13320 },
13321 })
13322 .intern(db),
13323 )
13324 }
13325}
13326#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13327pub struct ModuleItemListPtr(pub SyntaxStablePtrId);
13328impl TypedStablePtr for ModuleItemListPtr {
13329 type SyntaxNode = ModuleItemList;
13330 fn untyped(&self) -> SyntaxStablePtrId {
13331 self.0
13332 }
13333 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
13334 ModuleItemList::from_syntax_node(db, self.0.lookup(db))
13335 }
13336}
13337impl From<ModuleItemListPtr> for SyntaxStablePtrId {
13338 fn from(ptr: ModuleItemListPtr) -> Self {
13339 ptr.untyped()
13340 }
13341}
13342#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13343pub struct ModuleItemListGreen(pub GreenId);
13344impl TypedSyntaxNode for ModuleItemList {
13345 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemList);
13346 type StablePtr = ModuleItemListPtr;
13347 type Green = ModuleItemListGreen;
13348 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13349 ModuleItemListGreen(
13350 Arc::new(GreenNode {
13351 kind: SyntaxKind::ModuleItemList,
13352 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13353 })
13354 .intern(db),
13355 )
13356 }
13357 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13358 Self(ElementList::new(node))
13359 }
13360 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13361 if node.kind(db) == SyntaxKind::ModuleItemList {
13362 Some(Self(ElementList::new(node)))
13363 } else {
13364 None
13365 }
13366 }
13367 fn as_syntax_node(&self) -> SyntaxNode {
13368 self.node.clone()
13369 }
13370 fn stable_ptr(&self) -> Self::StablePtr {
13371 ModuleItemListPtr(self.node.0.stable_ptr)
13372 }
13373}
13374impl From<&ModuleItemList> for SyntaxStablePtrId {
13375 fn from(node: &ModuleItemList) -> Self {
13376 node.stable_ptr().untyped()
13377 }
13378}
13379#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13380pub struct ModuleItemMissing {
13381 node: SyntaxNode,
13382 children: Arc<[SyntaxNode]>,
13383}
13384impl ModuleItemMissing {
13385 pub fn new_green(db: &dyn SyntaxGroup) -> ModuleItemMissingGreen {
13386 let children: Vec<GreenId> = vec![];
13387 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13388 ModuleItemMissingGreen(
13389 Arc::new(GreenNode {
13390 kind: SyntaxKind::ModuleItemMissing,
13391 details: GreenNodeDetails::Node { children, width },
13392 })
13393 .intern(db),
13394 )
13395 }
13396}
13397impl ModuleItemMissing {}
13398#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13399pub struct ModuleItemMissingPtr(pub SyntaxStablePtrId);
13400impl ModuleItemMissingPtr {}
13401impl TypedStablePtr for ModuleItemMissingPtr {
13402 type SyntaxNode = ModuleItemMissing;
13403 fn untyped(&self) -> SyntaxStablePtrId {
13404 self.0
13405 }
13406 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleItemMissing {
13407 ModuleItemMissing::from_syntax_node(db, self.0.lookup(db))
13408 }
13409}
13410impl From<ModuleItemMissingPtr> for SyntaxStablePtrId {
13411 fn from(ptr: ModuleItemMissingPtr) -> Self {
13412 ptr.untyped()
13413 }
13414}
13415#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13416pub struct ModuleItemMissingGreen(pub GreenId);
13417impl TypedSyntaxNode for ModuleItemMissing {
13418 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleItemMissing);
13419 type StablePtr = ModuleItemMissingPtr;
13420 type Green = ModuleItemMissingGreen;
13421 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13422 ModuleItemMissingGreen(
13423 Arc::new(GreenNode {
13424 kind: SyntaxKind::ModuleItemMissing,
13425 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13426 })
13427 .intern(db),
13428 )
13429 }
13430 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13431 let kind = node.kind(db);
13432 assert_eq!(
13433 kind,
13434 SyntaxKind::ModuleItemMissing,
13435 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13436 kind,
13437 SyntaxKind::ModuleItemMissing
13438 );
13439 let children = db.get_children(node.clone());
13440 Self { node, children }
13441 }
13442 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13443 let kind = node.kind(db);
13444 if kind == SyntaxKind::ModuleItemMissing {
13445 Some(Self::from_syntax_node(db, node))
13446 } else {
13447 None
13448 }
13449 }
13450 fn as_syntax_node(&self) -> SyntaxNode {
13451 self.node.clone()
13452 }
13453 fn stable_ptr(&self) -> Self::StablePtr {
13454 ModuleItemMissingPtr(self.node.0.stable_ptr)
13455 }
13456}
13457impl From<&ModuleItemMissing> for SyntaxStablePtrId {
13458 fn from(node: &ModuleItemMissing) -> Self {
13459 node.stable_ptr().untyped()
13460 }
13461}
13462#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13463pub struct Attribute {
13464 node: SyntaxNode,
13465 children: Arc<[SyntaxNode]>,
13466}
13467impl Attribute {
13468 pub const INDEX_HASH: usize = 0;
13469 pub const INDEX_LBRACK: usize = 1;
13470 pub const INDEX_ATTR: usize = 2;
13471 pub const INDEX_ARGUMENTS: usize = 3;
13472 pub const INDEX_RBRACK: usize = 4;
13473 pub fn new_green(
13474 db: &dyn SyntaxGroup,
13475 hash: TerminalHashGreen,
13476 lbrack: TerminalLBrackGreen,
13477 attr: ExprPathGreen,
13478 arguments: OptionArgListParenthesizedGreen,
13479 rbrack: TerminalRBrackGreen,
13480 ) -> AttributeGreen {
13481 let children: Vec<GreenId> = vec![hash.0, lbrack.0, attr.0, arguments.0, rbrack.0];
13482 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13483 AttributeGreen(
13484 Arc::new(GreenNode {
13485 kind: SyntaxKind::Attribute,
13486 details: GreenNodeDetails::Node { children, width },
13487 })
13488 .intern(db),
13489 )
13490 }
13491}
13492impl Attribute {
13493 pub fn hash(&self, db: &dyn SyntaxGroup) -> TerminalHash {
13494 TerminalHash::from_syntax_node(db, self.children[0].clone())
13495 }
13496 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
13497 TerminalLBrack::from_syntax_node(db, self.children[1].clone())
13498 }
13499 pub fn attr(&self, db: &dyn SyntaxGroup) -> ExprPath {
13500 ExprPath::from_syntax_node(db, self.children[2].clone())
13501 }
13502 pub fn arguments(&self, db: &dyn SyntaxGroup) -> OptionArgListParenthesized {
13503 OptionArgListParenthesized::from_syntax_node(db, self.children[3].clone())
13504 }
13505 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
13506 TerminalRBrack::from_syntax_node(db, self.children[4].clone())
13507 }
13508}
13509#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13510pub struct AttributePtr(pub SyntaxStablePtrId);
13511impl AttributePtr {}
13512impl TypedStablePtr for AttributePtr {
13513 type SyntaxNode = Attribute;
13514 fn untyped(&self) -> SyntaxStablePtrId {
13515 self.0
13516 }
13517 fn lookup(&self, db: &dyn SyntaxGroup) -> Attribute {
13518 Attribute::from_syntax_node(db, self.0.lookup(db))
13519 }
13520}
13521impl From<AttributePtr> for SyntaxStablePtrId {
13522 fn from(ptr: AttributePtr) -> Self {
13523 ptr.untyped()
13524 }
13525}
13526#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13527pub struct AttributeGreen(pub GreenId);
13528impl TypedSyntaxNode for Attribute {
13529 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::Attribute);
13530 type StablePtr = AttributePtr;
13531 type Green = AttributeGreen;
13532 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13533 AttributeGreen(
13534 Arc::new(GreenNode {
13535 kind: SyntaxKind::Attribute,
13536 details: GreenNodeDetails::Node {
13537 children: vec![
13538 TerminalHash::missing(db).0,
13539 TerminalLBrack::missing(db).0,
13540 ExprPath::missing(db).0,
13541 OptionArgListParenthesized::missing(db).0,
13542 TerminalRBrack::missing(db).0,
13543 ],
13544 width: TextWidth::default(),
13545 },
13546 })
13547 .intern(db),
13548 )
13549 }
13550 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13551 let kind = node.kind(db);
13552 assert_eq!(
13553 kind,
13554 SyntaxKind::Attribute,
13555 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13556 kind,
13557 SyntaxKind::Attribute
13558 );
13559 let children = db.get_children(node.clone());
13560 Self { node, children }
13561 }
13562 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13563 let kind = node.kind(db);
13564 if kind == SyntaxKind::Attribute { Some(Self::from_syntax_node(db, node)) } else { None }
13565 }
13566 fn as_syntax_node(&self) -> SyntaxNode {
13567 self.node.clone()
13568 }
13569 fn stable_ptr(&self) -> Self::StablePtr {
13570 AttributePtr(self.node.0.stable_ptr)
13571 }
13572}
13573impl From<&Attribute> for SyntaxStablePtrId {
13574 fn from(node: &Attribute) -> Self {
13575 node.stable_ptr().untyped()
13576 }
13577}
13578#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13579pub struct AttributeList(ElementList<Attribute, 1>);
13580impl Deref for AttributeList {
13581 type Target = ElementList<Attribute, 1>;
13582 fn deref(&self) -> &Self::Target {
13583 &self.0
13584 }
13585}
13586impl AttributeList {
13587 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<AttributeGreen>) -> AttributeListGreen {
13588 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
13589 AttributeListGreen(
13590 Arc::new(GreenNode {
13591 kind: SyntaxKind::AttributeList,
13592 details: GreenNodeDetails::Node {
13593 children: children.iter().map(|x| x.0).collect(),
13594 width,
13595 },
13596 })
13597 .intern(db),
13598 )
13599 }
13600}
13601#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13602pub struct AttributeListPtr(pub SyntaxStablePtrId);
13603impl TypedStablePtr for AttributeListPtr {
13604 type SyntaxNode = AttributeList;
13605 fn untyped(&self) -> SyntaxStablePtrId {
13606 self.0
13607 }
13608 fn lookup(&self, db: &dyn SyntaxGroup) -> AttributeList {
13609 AttributeList::from_syntax_node(db, self.0.lookup(db))
13610 }
13611}
13612impl From<AttributeListPtr> for SyntaxStablePtrId {
13613 fn from(ptr: AttributeListPtr) -> Self {
13614 ptr.untyped()
13615 }
13616}
13617#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13618pub struct AttributeListGreen(pub GreenId);
13619impl TypedSyntaxNode for AttributeList {
13620 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AttributeList);
13621 type StablePtr = AttributeListPtr;
13622 type Green = AttributeListGreen;
13623 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13624 AttributeListGreen(
13625 Arc::new(GreenNode {
13626 kind: SyntaxKind::AttributeList,
13627 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13628 })
13629 .intern(db),
13630 )
13631 }
13632 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13633 Self(ElementList::new(node))
13634 }
13635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13636 if node.kind(db) == SyntaxKind::AttributeList {
13637 Some(Self(ElementList::new(node)))
13638 } else {
13639 None
13640 }
13641 }
13642 fn as_syntax_node(&self) -> SyntaxNode {
13643 self.node.clone()
13644 }
13645 fn stable_ptr(&self) -> Self::StablePtr {
13646 AttributeListPtr(self.node.0.stable_ptr)
13647 }
13648}
13649impl From<&AttributeList> for SyntaxStablePtrId {
13650 fn from(node: &AttributeList) -> Self {
13651 node.stable_ptr().untyped()
13652 }
13653}
13654#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13655pub struct VisibilityDefault {
13656 node: SyntaxNode,
13657 children: Arc<[SyntaxNode]>,
13658}
13659impl VisibilityDefault {
13660 pub fn new_green(db: &dyn SyntaxGroup) -> VisibilityDefaultGreen {
13661 let children: Vec<GreenId> = vec![];
13662 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13663 VisibilityDefaultGreen(
13664 Arc::new(GreenNode {
13665 kind: SyntaxKind::VisibilityDefault,
13666 details: GreenNodeDetails::Node { children, width },
13667 })
13668 .intern(db),
13669 )
13670 }
13671}
13672impl VisibilityDefault {}
13673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13674pub struct VisibilityDefaultPtr(pub SyntaxStablePtrId);
13675impl VisibilityDefaultPtr {}
13676impl TypedStablePtr for VisibilityDefaultPtr {
13677 type SyntaxNode = VisibilityDefault;
13678 fn untyped(&self) -> SyntaxStablePtrId {
13679 self.0
13680 }
13681 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityDefault {
13682 VisibilityDefault::from_syntax_node(db, self.0.lookup(db))
13683 }
13684}
13685impl From<VisibilityDefaultPtr> for SyntaxStablePtrId {
13686 fn from(ptr: VisibilityDefaultPtr) -> Self {
13687 ptr.untyped()
13688 }
13689}
13690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13691pub struct VisibilityDefaultGreen(pub GreenId);
13692impl TypedSyntaxNode for VisibilityDefault {
13693 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityDefault);
13694 type StablePtr = VisibilityDefaultPtr;
13695 type Green = VisibilityDefaultGreen;
13696 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13697 VisibilityDefaultGreen(
13698 Arc::new(GreenNode {
13699 kind: SyntaxKind::VisibilityDefault,
13700 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
13701 })
13702 .intern(db),
13703 )
13704 }
13705 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13706 let kind = node.kind(db);
13707 assert_eq!(
13708 kind,
13709 SyntaxKind::VisibilityDefault,
13710 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13711 kind,
13712 SyntaxKind::VisibilityDefault
13713 );
13714 let children = db.get_children(node.clone());
13715 Self { node, children }
13716 }
13717 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13718 let kind = node.kind(db);
13719 if kind == SyntaxKind::VisibilityDefault {
13720 Some(Self::from_syntax_node(db, node))
13721 } else {
13722 None
13723 }
13724 }
13725 fn as_syntax_node(&self) -> SyntaxNode {
13726 self.node.clone()
13727 }
13728 fn stable_ptr(&self) -> Self::StablePtr {
13729 VisibilityDefaultPtr(self.node.0.stable_ptr)
13730 }
13731}
13732impl From<&VisibilityDefault> for SyntaxStablePtrId {
13733 fn from(node: &VisibilityDefault) -> Self {
13734 node.stable_ptr().untyped()
13735 }
13736}
13737#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13738pub struct VisibilityPubArgumentClause {
13739 node: SyntaxNode,
13740 children: Arc<[SyntaxNode]>,
13741}
13742impl VisibilityPubArgumentClause {
13743 pub const INDEX_LPAREN: usize = 0;
13744 pub const INDEX_ARGUMENT: usize = 1;
13745 pub const INDEX_RPAREN: usize = 2;
13746 pub fn new_green(
13747 db: &dyn SyntaxGroup,
13748 lparen: TerminalLParenGreen,
13749 argument: TerminalIdentifierGreen,
13750 rparen: TerminalRParenGreen,
13751 ) -> VisibilityPubArgumentClauseGreen {
13752 let children: Vec<GreenId> = vec![lparen.0, argument.0, rparen.0];
13753 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13754 VisibilityPubArgumentClauseGreen(
13755 Arc::new(GreenNode {
13756 kind: SyntaxKind::VisibilityPubArgumentClause,
13757 details: GreenNodeDetails::Node { children, width },
13758 })
13759 .intern(db),
13760 )
13761 }
13762}
13763impl VisibilityPubArgumentClause {
13764 pub fn lparen(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
13765 TerminalLParen::from_syntax_node(db, self.children[0].clone())
13766 }
13767 pub fn argument(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
13768 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
13769 }
13770 pub fn rparen(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
13771 TerminalRParen::from_syntax_node(db, self.children[2].clone())
13772 }
13773}
13774#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13775pub struct VisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13776impl VisibilityPubArgumentClausePtr {}
13777impl TypedStablePtr for VisibilityPubArgumentClausePtr {
13778 type SyntaxNode = VisibilityPubArgumentClause;
13779 fn untyped(&self) -> SyntaxStablePtrId {
13780 self.0
13781 }
13782 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPubArgumentClause {
13783 VisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13784 }
13785}
13786impl From<VisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
13787 fn from(ptr: VisibilityPubArgumentClausePtr) -> Self {
13788 ptr.untyped()
13789 }
13790}
13791#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13792pub struct VisibilityPubArgumentClauseGreen(pub GreenId);
13793impl TypedSyntaxNode for VisibilityPubArgumentClause {
13794 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPubArgumentClause);
13795 type StablePtr = VisibilityPubArgumentClausePtr;
13796 type Green = VisibilityPubArgumentClauseGreen;
13797 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13798 VisibilityPubArgumentClauseGreen(
13799 Arc::new(GreenNode {
13800 kind: SyntaxKind::VisibilityPubArgumentClause,
13801 details: GreenNodeDetails::Node {
13802 children: vec![
13803 TerminalLParen::missing(db).0,
13804 TerminalIdentifier::missing(db).0,
13805 TerminalRParen::missing(db).0,
13806 ],
13807 width: TextWidth::default(),
13808 },
13809 })
13810 .intern(db),
13811 )
13812 }
13813 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13814 let kind = node.kind(db);
13815 assert_eq!(
13816 kind,
13817 SyntaxKind::VisibilityPubArgumentClause,
13818 "Unexpected SyntaxKind {:?}. Expected {:?}.",
13819 kind,
13820 SyntaxKind::VisibilityPubArgumentClause
13821 );
13822 let children = db.get_children(node.clone());
13823 Self { node, children }
13824 }
13825 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13826 let kind = node.kind(db);
13827 if kind == SyntaxKind::VisibilityPubArgumentClause {
13828 Some(Self::from_syntax_node(db, node))
13829 } else {
13830 None
13831 }
13832 }
13833 fn as_syntax_node(&self) -> SyntaxNode {
13834 self.node.clone()
13835 }
13836 fn stable_ptr(&self) -> Self::StablePtr {
13837 VisibilityPubArgumentClausePtr(self.node.0.stable_ptr)
13838 }
13839}
13840impl From<&VisibilityPubArgumentClause> for SyntaxStablePtrId {
13841 fn from(node: &VisibilityPubArgumentClause) -> Self {
13842 node.stable_ptr().untyped()
13843 }
13844}
13845#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13846pub enum OptionVisibilityPubArgumentClause {
13847 Empty(OptionVisibilityPubArgumentClauseEmpty),
13848 VisibilityPubArgumentClause(VisibilityPubArgumentClause),
13849}
13850#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13851pub struct OptionVisibilityPubArgumentClausePtr(pub SyntaxStablePtrId);
13852impl TypedStablePtr for OptionVisibilityPubArgumentClausePtr {
13853 type SyntaxNode = OptionVisibilityPubArgumentClause;
13854 fn untyped(&self) -> SyntaxStablePtrId {
13855 self.0
13856 }
13857 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
13858 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.0.lookup(db))
13859 }
13860}
13861impl From<OptionVisibilityPubArgumentClausePtr> for SyntaxStablePtrId {
13862 fn from(ptr: OptionVisibilityPubArgumentClausePtr) -> Self {
13863 ptr.untyped()
13864 }
13865}
13866impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for OptionVisibilityPubArgumentClausePtr {
13867 fn from(value: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
13868 Self(value.0)
13869 }
13870}
13871impl From<VisibilityPubArgumentClausePtr> for OptionVisibilityPubArgumentClausePtr {
13872 fn from(value: VisibilityPubArgumentClausePtr) -> Self {
13873 Self(value.0)
13874 }
13875}
13876impl From<OptionVisibilityPubArgumentClauseEmptyGreen> for OptionVisibilityPubArgumentClauseGreen {
13877 fn from(value: OptionVisibilityPubArgumentClauseEmptyGreen) -> Self {
13878 Self(value.0)
13879 }
13880}
13881impl From<VisibilityPubArgumentClauseGreen> for OptionVisibilityPubArgumentClauseGreen {
13882 fn from(value: VisibilityPubArgumentClauseGreen) -> Self {
13883 Self(value.0)
13884 }
13885}
13886#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13887pub struct OptionVisibilityPubArgumentClauseGreen(pub GreenId);
13888impl TypedSyntaxNode for OptionVisibilityPubArgumentClause {
13889 const OPTIONAL_KIND: Option<SyntaxKind> = None;
13890 type StablePtr = OptionVisibilityPubArgumentClausePtr;
13891 type Green = OptionVisibilityPubArgumentClauseGreen;
13892 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13893 panic!("No missing variant.");
13894 }
13895 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
13896 let kind = node.kind(db);
13897 match kind {
13898 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
13899 OptionVisibilityPubArgumentClause::Empty(
13900 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
13901 )
13902 }
13903 SyntaxKind::VisibilityPubArgumentClause => {
13904 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
13905 VisibilityPubArgumentClause::from_syntax_node(db, node),
13906 )
13907 }
13908 _ => panic!(
13909 "Unexpected syntax kind {:?} when constructing {}.",
13910 kind, "OptionVisibilityPubArgumentClause"
13911 ),
13912 }
13913 }
13914 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
13915 let kind = node.kind(db);
13916 match kind {
13917 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty => {
13918 Some(OptionVisibilityPubArgumentClause::Empty(
13919 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, node),
13920 ))
13921 }
13922 SyntaxKind::VisibilityPubArgumentClause => {
13923 Some(OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(
13924 VisibilityPubArgumentClause::from_syntax_node(db, node),
13925 ))
13926 }
13927 _ => None,
13928 }
13929 }
13930 fn as_syntax_node(&self) -> SyntaxNode {
13931 match self {
13932 OptionVisibilityPubArgumentClause::Empty(x) => x.as_syntax_node(),
13933 OptionVisibilityPubArgumentClause::VisibilityPubArgumentClause(x) => x.as_syntax_node(),
13934 }
13935 }
13936 fn stable_ptr(&self) -> Self::StablePtr {
13937 OptionVisibilityPubArgumentClausePtr(self.as_syntax_node().0.stable_ptr)
13938 }
13939}
13940impl From<&OptionVisibilityPubArgumentClause> for SyntaxStablePtrId {
13941 fn from(node: &OptionVisibilityPubArgumentClause) -> Self {
13942 node.stable_ptr().untyped()
13943 }
13944}
13945impl OptionVisibilityPubArgumentClause {
13946 pub fn is_variant(kind: SyntaxKind) -> bool {
13948 matches!(
13949 kind,
13950 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
13951 | SyntaxKind::VisibilityPubArgumentClause
13952 )
13953 }
13954}
13955#[derive(Clone, Debug, Eq, Hash, PartialEq)]
13956pub struct OptionVisibilityPubArgumentClauseEmpty {
13957 node: SyntaxNode,
13958 children: Arc<[SyntaxNode]>,
13959}
13960impl OptionVisibilityPubArgumentClauseEmpty {
13961 pub fn new_green(db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmptyGreen {
13962 let children: Vec<GreenId> = vec![];
13963 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
13964 OptionVisibilityPubArgumentClauseEmptyGreen(
13965 Arc::new(GreenNode {
13966 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
13967 details: GreenNodeDetails::Node { children, width },
13968 })
13969 .intern(db),
13970 )
13971 }
13972}
13973impl OptionVisibilityPubArgumentClauseEmpty {}
13974#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13975pub struct OptionVisibilityPubArgumentClauseEmptyPtr(pub SyntaxStablePtrId);
13976impl OptionVisibilityPubArgumentClauseEmptyPtr {}
13977impl TypedStablePtr for OptionVisibilityPubArgumentClauseEmptyPtr {
13978 type SyntaxNode = OptionVisibilityPubArgumentClauseEmpty;
13979 fn untyped(&self) -> SyntaxStablePtrId {
13980 self.0
13981 }
13982 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClauseEmpty {
13983 OptionVisibilityPubArgumentClauseEmpty::from_syntax_node(db, self.0.lookup(db))
13984 }
13985}
13986impl From<OptionVisibilityPubArgumentClauseEmptyPtr> for SyntaxStablePtrId {
13987 fn from(ptr: OptionVisibilityPubArgumentClauseEmptyPtr) -> Self {
13988 ptr.untyped()
13989 }
13990}
13991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
13992pub struct OptionVisibilityPubArgumentClauseEmptyGreen(pub GreenId);
13993impl TypedSyntaxNode for OptionVisibilityPubArgumentClauseEmpty {
13994 const OPTIONAL_KIND: Option<SyntaxKind> =
13995 Some(SyntaxKind::OptionVisibilityPubArgumentClauseEmpty);
13996 type StablePtr = OptionVisibilityPubArgumentClauseEmptyPtr;
13997 type Green = OptionVisibilityPubArgumentClauseEmptyGreen;
13998 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
13999 OptionVisibilityPubArgumentClauseEmptyGreen(
14000 Arc::new(GreenNode {
14001 kind: SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14002 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
14003 })
14004 .intern(db),
14005 )
14006 }
14007 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14008 let kind = node.kind(db);
14009 assert_eq!(
14010 kind,
14011 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty,
14012 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14013 kind,
14014 SyntaxKind::OptionVisibilityPubArgumentClauseEmpty
14015 );
14016 let children = db.get_children(node.clone());
14017 Self { node, children }
14018 }
14019 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14020 let kind = node.kind(db);
14021 if kind == SyntaxKind::OptionVisibilityPubArgumentClauseEmpty {
14022 Some(Self::from_syntax_node(db, node))
14023 } else {
14024 None
14025 }
14026 }
14027 fn as_syntax_node(&self) -> SyntaxNode {
14028 self.node.clone()
14029 }
14030 fn stable_ptr(&self) -> Self::StablePtr {
14031 OptionVisibilityPubArgumentClauseEmptyPtr(self.node.0.stable_ptr)
14032 }
14033}
14034impl From<&OptionVisibilityPubArgumentClauseEmpty> for SyntaxStablePtrId {
14035 fn from(node: &OptionVisibilityPubArgumentClauseEmpty) -> Self {
14036 node.stable_ptr().untyped()
14037 }
14038}
14039#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14040pub struct VisibilityPub {
14041 node: SyntaxNode,
14042 children: Arc<[SyntaxNode]>,
14043}
14044impl VisibilityPub {
14045 pub const INDEX_PUB_KW: usize = 0;
14046 pub const INDEX_ARGUMENT_CLAUSE: usize = 1;
14047 pub fn new_green(
14048 db: &dyn SyntaxGroup,
14049 pub_kw: TerminalPubGreen,
14050 argument_clause: OptionVisibilityPubArgumentClauseGreen,
14051 ) -> VisibilityPubGreen {
14052 let children: Vec<GreenId> = vec![pub_kw.0, argument_clause.0];
14053 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14054 VisibilityPubGreen(
14055 Arc::new(GreenNode {
14056 kind: SyntaxKind::VisibilityPub,
14057 details: GreenNodeDetails::Node { children, width },
14058 })
14059 .intern(db),
14060 )
14061 }
14062}
14063impl VisibilityPub {
14064 pub fn pub_kw(&self, db: &dyn SyntaxGroup) -> TerminalPub {
14065 TerminalPub::from_syntax_node(db, self.children[0].clone())
14066 }
14067 pub fn argument_clause(&self, db: &dyn SyntaxGroup) -> OptionVisibilityPubArgumentClause {
14068 OptionVisibilityPubArgumentClause::from_syntax_node(db, self.children[1].clone())
14069 }
14070}
14071#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14072pub struct VisibilityPubPtr(pub SyntaxStablePtrId);
14073impl VisibilityPubPtr {}
14074impl TypedStablePtr for VisibilityPubPtr {
14075 type SyntaxNode = VisibilityPub;
14076 fn untyped(&self) -> SyntaxStablePtrId {
14077 self.0
14078 }
14079 fn lookup(&self, db: &dyn SyntaxGroup) -> VisibilityPub {
14080 VisibilityPub::from_syntax_node(db, self.0.lookup(db))
14081 }
14082}
14083impl From<VisibilityPubPtr> for SyntaxStablePtrId {
14084 fn from(ptr: VisibilityPubPtr) -> Self {
14085 ptr.untyped()
14086 }
14087}
14088#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14089pub struct VisibilityPubGreen(pub GreenId);
14090impl TypedSyntaxNode for VisibilityPub {
14091 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::VisibilityPub);
14092 type StablePtr = VisibilityPubPtr;
14093 type Green = VisibilityPubGreen;
14094 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14095 VisibilityPubGreen(
14096 Arc::new(GreenNode {
14097 kind: SyntaxKind::VisibilityPub,
14098 details: GreenNodeDetails::Node {
14099 children: vec![
14100 TerminalPub::missing(db).0,
14101 OptionVisibilityPubArgumentClause::missing(db).0,
14102 ],
14103 width: TextWidth::default(),
14104 },
14105 })
14106 .intern(db),
14107 )
14108 }
14109 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14110 let kind = node.kind(db);
14111 assert_eq!(
14112 kind,
14113 SyntaxKind::VisibilityPub,
14114 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14115 kind,
14116 SyntaxKind::VisibilityPub
14117 );
14118 let children = db.get_children(node.clone());
14119 Self { node, children }
14120 }
14121 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14122 let kind = node.kind(db);
14123 if kind == SyntaxKind::VisibilityPub {
14124 Some(Self::from_syntax_node(db, node))
14125 } else {
14126 None
14127 }
14128 }
14129 fn as_syntax_node(&self) -> SyntaxNode {
14130 self.node.clone()
14131 }
14132 fn stable_ptr(&self) -> Self::StablePtr {
14133 VisibilityPubPtr(self.node.0.stable_ptr)
14134 }
14135}
14136impl From<&VisibilityPub> for SyntaxStablePtrId {
14137 fn from(node: &VisibilityPub) -> Self {
14138 node.stable_ptr().untyped()
14139 }
14140}
14141#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14142pub enum Visibility {
14143 Default(VisibilityDefault),
14144 Pub(VisibilityPub),
14145}
14146#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14147pub struct VisibilityPtr(pub SyntaxStablePtrId);
14148impl TypedStablePtr for VisibilityPtr {
14149 type SyntaxNode = Visibility;
14150 fn untyped(&self) -> SyntaxStablePtrId {
14151 self.0
14152 }
14153 fn lookup(&self, db: &dyn SyntaxGroup) -> Visibility {
14154 Visibility::from_syntax_node(db, self.0.lookup(db))
14155 }
14156}
14157impl From<VisibilityPtr> for SyntaxStablePtrId {
14158 fn from(ptr: VisibilityPtr) -> Self {
14159 ptr.untyped()
14160 }
14161}
14162impl From<VisibilityDefaultPtr> for VisibilityPtr {
14163 fn from(value: VisibilityDefaultPtr) -> Self {
14164 Self(value.0)
14165 }
14166}
14167impl From<VisibilityPubPtr> for VisibilityPtr {
14168 fn from(value: VisibilityPubPtr) -> Self {
14169 Self(value.0)
14170 }
14171}
14172impl From<VisibilityDefaultGreen> for VisibilityGreen {
14173 fn from(value: VisibilityDefaultGreen) -> Self {
14174 Self(value.0)
14175 }
14176}
14177impl From<VisibilityPubGreen> for VisibilityGreen {
14178 fn from(value: VisibilityPubGreen) -> Self {
14179 Self(value.0)
14180 }
14181}
14182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14183pub struct VisibilityGreen(pub GreenId);
14184impl TypedSyntaxNode for Visibility {
14185 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14186 type StablePtr = VisibilityPtr;
14187 type Green = VisibilityGreen;
14188 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14189 panic!("No missing variant.");
14190 }
14191 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14192 let kind = node.kind(db);
14193 match kind {
14194 SyntaxKind::VisibilityDefault => {
14195 Visibility::Default(VisibilityDefault::from_syntax_node(db, node))
14196 }
14197 SyntaxKind::VisibilityPub => Visibility::Pub(VisibilityPub::from_syntax_node(db, node)),
14198 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "Visibility"),
14199 }
14200 }
14201 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14202 let kind = node.kind(db);
14203 match kind {
14204 SyntaxKind::VisibilityDefault => {
14205 Some(Visibility::Default(VisibilityDefault::from_syntax_node(db, node)))
14206 }
14207 SyntaxKind::VisibilityPub => {
14208 Some(Visibility::Pub(VisibilityPub::from_syntax_node(db, node)))
14209 }
14210 _ => None,
14211 }
14212 }
14213 fn as_syntax_node(&self) -> SyntaxNode {
14214 match self {
14215 Visibility::Default(x) => x.as_syntax_node(),
14216 Visibility::Pub(x) => x.as_syntax_node(),
14217 }
14218 }
14219 fn stable_ptr(&self) -> Self::StablePtr {
14220 VisibilityPtr(self.as_syntax_node().0.stable_ptr)
14221 }
14222}
14223impl From<&Visibility> for SyntaxStablePtrId {
14224 fn from(node: &Visibility) -> Self {
14225 node.stable_ptr().untyped()
14226 }
14227}
14228impl Visibility {
14229 pub fn is_variant(kind: SyntaxKind) -> bool {
14231 matches!(kind, SyntaxKind::VisibilityDefault | SyntaxKind::VisibilityPub)
14232 }
14233}
14234#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14235pub struct ItemModule {
14236 node: SyntaxNode,
14237 children: Arc<[SyntaxNode]>,
14238}
14239impl ItemModule {
14240 pub const INDEX_ATTRIBUTES: usize = 0;
14241 pub const INDEX_VISIBILITY: usize = 1;
14242 pub const INDEX_MODULE_KW: usize = 2;
14243 pub const INDEX_NAME: usize = 3;
14244 pub const INDEX_BODY: usize = 4;
14245 pub fn new_green(
14246 db: &dyn SyntaxGroup,
14247 attributes: AttributeListGreen,
14248 visibility: VisibilityGreen,
14249 module_kw: TerminalModuleGreen,
14250 name: TerminalIdentifierGreen,
14251 body: MaybeModuleBodyGreen,
14252 ) -> ItemModuleGreen {
14253 let children: Vec<GreenId> = vec![attributes.0, visibility.0, module_kw.0, name.0, body.0];
14254 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14255 ItemModuleGreen(
14256 Arc::new(GreenNode {
14257 kind: SyntaxKind::ItemModule,
14258 details: GreenNodeDetails::Node { children, width },
14259 })
14260 .intern(db),
14261 )
14262 }
14263}
14264impl ItemModule {
14265 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14266 AttributeList::from_syntax_node(db, self.children[0].clone())
14267 }
14268 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14269 Visibility::from_syntax_node(db, self.children[1].clone())
14270 }
14271 pub fn module_kw(&self, db: &dyn SyntaxGroup) -> TerminalModule {
14272 TerminalModule::from_syntax_node(db, self.children[2].clone())
14273 }
14274 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14275 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
14276 }
14277 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14278 MaybeModuleBody::from_syntax_node(db, self.children[4].clone())
14279 }
14280}
14281#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14282pub struct ItemModulePtr(pub SyntaxStablePtrId);
14283impl ItemModulePtr {
14284 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14285 let ptr = self.0.lookup_intern(db);
14286 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14287 TerminalIdentifierGreen(key_fields[0])
14288 } else {
14289 panic!("Unexpected key field query on root.");
14290 }
14291 }
14292}
14293impl TypedStablePtr for ItemModulePtr {
14294 type SyntaxNode = ItemModule;
14295 fn untyped(&self) -> SyntaxStablePtrId {
14296 self.0
14297 }
14298 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemModule {
14299 ItemModule::from_syntax_node(db, self.0.lookup(db))
14300 }
14301}
14302impl From<ItemModulePtr> for SyntaxStablePtrId {
14303 fn from(ptr: ItemModulePtr) -> Self {
14304 ptr.untyped()
14305 }
14306}
14307#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14308pub struct ItemModuleGreen(pub GreenId);
14309impl TypedSyntaxNode for ItemModule {
14310 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemModule);
14311 type StablePtr = ItemModulePtr;
14312 type Green = ItemModuleGreen;
14313 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14314 ItemModuleGreen(
14315 Arc::new(GreenNode {
14316 kind: SyntaxKind::ItemModule,
14317 details: GreenNodeDetails::Node {
14318 children: vec![
14319 AttributeList::missing(db).0,
14320 Visibility::missing(db).0,
14321 TerminalModule::missing(db).0,
14322 TerminalIdentifier::missing(db).0,
14323 MaybeModuleBody::missing(db).0,
14324 ],
14325 width: TextWidth::default(),
14326 },
14327 })
14328 .intern(db),
14329 )
14330 }
14331 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14332 let kind = node.kind(db);
14333 assert_eq!(
14334 kind,
14335 SyntaxKind::ItemModule,
14336 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14337 kind,
14338 SyntaxKind::ItemModule
14339 );
14340 let children = db.get_children(node.clone());
14341 Self { node, children }
14342 }
14343 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14344 let kind = node.kind(db);
14345 if kind == SyntaxKind::ItemModule { Some(Self::from_syntax_node(db, node)) } else { None }
14346 }
14347 fn as_syntax_node(&self) -> SyntaxNode {
14348 self.node.clone()
14349 }
14350 fn stable_ptr(&self) -> Self::StablePtr {
14351 ItemModulePtr(self.node.0.stable_ptr)
14352 }
14353}
14354impl From<&ItemModule> for SyntaxStablePtrId {
14355 fn from(node: &ItemModule) -> Self {
14356 node.stable_ptr().untyped()
14357 }
14358}
14359#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14360pub enum MaybeModuleBody {
14361 Some(ModuleBody),
14362 None(TerminalSemicolon),
14363}
14364#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14365pub struct MaybeModuleBodyPtr(pub SyntaxStablePtrId);
14366impl TypedStablePtr for MaybeModuleBodyPtr {
14367 type SyntaxNode = MaybeModuleBody;
14368 fn untyped(&self) -> SyntaxStablePtrId {
14369 self.0
14370 }
14371 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeModuleBody {
14372 MaybeModuleBody::from_syntax_node(db, self.0.lookup(db))
14373 }
14374}
14375impl From<MaybeModuleBodyPtr> for SyntaxStablePtrId {
14376 fn from(ptr: MaybeModuleBodyPtr) -> Self {
14377 ptr.untyped()
14378 }
14379}
14380impl From<ModuleBodyPtr> for MaybeModuleBodyPtr {
14381 fn from(value: ModuleBodyPtr) -> Self {
14382 Self(value.0)
14383 }
14384}
14385impl From<TerminalSemicolonPtr> for MaybeModuleBodyPtr {
14386 fn from(value: TerminalSemicolonPtr) -> Self {
14387 Self(value.0)
14388 }
14389}
14390impl From<ModuleBodyGreen> for MaybeModuleBodyGreen {
14391 fn from(value: ModuleBodyGreen) -> Self {
14392 Self(value.0)
14393 }
14394}
14395impl From<TerminalSemicolonGreen> for MaybeModuleBodyGreen {
14396 fn from(value: TerminalSemicolonGreen) -> Self {
14397 Self(value.0)
14398 }
14399}
14400#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14401pub struct MaybeModuleBodyGreen(pub GreenId);
14402impl TypedSyntaxNode for MaybeModuleBody {
14403 const OPTIONAL_KIND: Option<SyntaxKind> = None;
14404 type StablePtr = MaybeModuleBodyPtr;
14405 type Green = MaybeModuleBodyGreen;
14406 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14407 panic!("No missing variant.");
14408 }
14409 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14410 let kind = node.kind(db);
14411 match kind {
14412 SyntaxKind::ModuleBody => MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)),
14413 SyntaxKind::TerminalSemicolon => {
14414 MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node))
14415 }
14416 _ => {
14417 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeModuleBody")
14418 }
14419 }
14420 }
14421 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14422 let kind = node.kind(db);
14423 match kind {
14424 SyntaxKind::ModuleBody => {
14425 Some(MaybeModuleBody::Some(ModuleBody::from_syntax_node(db, node)))
14426 }
14427 SyntaxKind::TerminalSemicolon => {
14428 Some(MaybeModuleBody::None(TerminalSemicolon::from_syntax_node(db, node)))
14429 }
14430 _ => None,
14431 }
14432 }
14433 fn as_syntax_node(&self) -> SyntaxNode {
14434 match self {
14435 MaybeModuleBody::Some(x) => x.as_syntax_node(),
14436 MaybeModuleBody::None(x) => x.as_syntax_node(),
14437 }
14438 }
14439 fn stable_ptr(&self) -> Self::StablePtr {
14440 MaybeModuleBodyPtr(self.as_syntax_node().0.stable_ptr)
14441 }
14442}
14443impl From<&MaybeModuleBody> for SyntaxStablePtrId {
14444 fn from(node: &MaybeModuleBody) -> Self {
14445 node.stable_ptr().untyped()
14446 }
14447}
14448impl MaybeModuleBody {
14449 pub fn is_variant(kind: SyntaxKind) -> bool {
14451 matches!(kind, SyntaxKind::ModuleBody | SyntaxKind::TerminalSemicolon)
14452 }
14453}
14454#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14455pub struct ModuleBody {
14456 node: SyntaxNode,
14457 children: Arc<[SyntaxNode]>,
14458}
14459impl ModuleBody {
14460 pub const INDEX_LBRACE: usize = 0;
14461 pub const INDEX_ITEMS: usize = 1;
14462 pub const INDEX_RBRACE: usize = 2;
14463 pub fn new_green(
14464 db: &dyn SyntaxGroup,
14465 lbrace: TerminalLBraceGreen,
14466 items: ModuleItemListGreen,
14467 rbrace: TerminalRBraceGreen,
14468 ) -> ModuleBodyGreen {
14469 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
14470 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14471 ModuleBodyGreen(
14472 Arc::new(GreenNode {
14473 kind: SyntaxKind::ModuleBody,
14474 details: GreenNodeDetails::Node { children, width },
14475 })
14476 .intern(db),
14477 )
14478 }
14479}
14480impl ModuleBody {
14481 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
14482 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
14483 }
14484 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
14485 ModuleItemList::from_syntax_node(db, self.children[1].clone())
14486 }
14487 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
14488 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
14489 }
14490}
14491#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14492pub struct ModuleBodyPtr(pub SyntaxStablePtrId);
14493impl ModuleBodyPtr {}
14494impl TypedStablePtr for ModuleBodyPtr {
14495 type SyntaxNode = ModuleBody;
14496 fn untyped(&self) -> SyntaxStablePtrId {
14497 self.0
14498 }
14499 fn lookup(&self, db: &dyn SyntaxGroup) -> ModuleBody {
14500 ModuleBody::from_syntax_node(db, self.0.lookup(db))
14501 }
14502}
14503impl From<ModuleBodyPtr> for SyntaxStablePtrId {
14504 fn from(ptr: ModuleBodyPtr) -> Self {
14505 ptr.untyped()
14506 }
14507}
14508#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14509pub struct ModuleBodyGreen(pub GreenId);
14510impl TypedSyntaxNode for ModuleBody {
14511 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ModuleBody);
14512 type StablePtr = ModuleBodyPtr;
14513 type Green = ModuleBodyGreen;
14514 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14515 ModuleBodyGreen(
14516 Arc::new(GreenNode {
14517 kind: SyntaxKind::ModuleBody,
14518 details: GreenNodeDetails::Node {
14519 children: vec![
14520 TerminalLBrace::missing(db).0,
14521 ModuleItemList::missing(db).0,
14522 TerminalRBrace::missing(db).0,
14523 ],
14524 width: TextWidth::default(),
14525 },
14526 })
14527 .intern(db),
14528 )
14529 }
14530 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14531 let kind = node.kind(db);
14532 assert_eq!(
14533 kind,
14534 SyntaxKind::ModuleBody,
14535 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14536 kind,
14537 SyntaxKind::ModuleBody
14538 );
14539 let children = db.get_children(node.clone());
14540 Self { node, children }
14541 }
14542 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14543 let kind = node.kind(db);
14544 if kind == SyntaxKind::ModuleBody { Some(Self::from_syntax_node(db, node)) } else { None }
14545 }
14546 fn as_syntax_node(&self) -> SyntaxNode {
14547 self.node.clone()
14548 }
14549 fn stable_ptr(&self) -> Self::StablePtr {
14550 ModuleBodyPtr(self.node.0.stable_ptr)
14551 }
14552}
14553impl From<&ModuleBody> for SyntaxStablePtrId {
14554 fn from(node: &ModuleBody) -> Self {
14555 node.stable_ptr().untyped()
14556 }
14557}
14558#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14559pub struct FunctionDeclaration {
14560 node: SyntaxNode,
14561 children: Arc<[SyntaxNode]>,
14562}
14563impl FunctionDeclaration {
14564 pub const INDEX_OPTIONAL_CONST: usize = 0;
14565 pub const INDEX_FUNCTION_KW: usize = 1;
14566 pub const INDEX_NAME: usize = 2;
14567 pub const INDEX_GENERIC_PARAMS: usize = 3;
14568 pub const INDEX_SIGNATURE: usize = 4;
14569 pub fn new_green(
14570 db: &dyn SyntaxGroup,
14571 optional_const: OptionTerminalConstGreen,
14572 function_kw: TerminalFunctionGreen,
14573 name: TerminalIdentifierGreen,
14574 generic_params: OptionWrappedGenericParamListGreen,
14575 signature: FunctionSignatureGreen,
14576 ) -> FunctionDeclarationGreen {
14577 let children: Vec<GreenId> =
14578 vec![optional_const.0, function_kw.0, name.0, generic_params.0, signature.0];
14579 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14580 FunctionDeclarationGreen(
14581 Arc::new(GreenNode {
14582 kind: SyntaxKind::FunctionDeclaration,
14583 details: GreenNodeDetails::Node { children, width },
14584 })
14585 .intern(db),
14586 )
14587 }
14588}
14589impl FunctionDeclaration {
14590 pub fn optional_const(&self, db: &dyn SyntaxGroup) -> OptionTerminalConst {
14591 OptionTerminalConst::from_syntax_node(db, self.children[0].clone())
14592 }
14593 pub fn function_kw(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
14594 TerminalFunction::from_syntax_node(db, self.children[1].clone())
14595 }
14596 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14597 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
14598 }
14599 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
14600 OptionWrappedGenericParamList::from_syntax_node(db, self.children[3].clone())
14601 }
14602 pub fn signature(&self, db: &dyn SyntaxGroup) -> FunctionSignature {
14603 FunctionSignature::from_syntax_node(db, self.children[4].clone())
14604 }
14605}
14606#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14607pub struct FunctionDeclarationPtr(pub SyntaxStablePtrId);
14608impl FunctionDeclarationPtr {
14609 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14610 let ptr = self.0.lookup_intern(db);
14611 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14612 TerminalIdentifierGreen(key_fields[0])
14613 } else {
14614 panic!("Unexpected key field query on root.");
14615 }
14616 }
14617}
14618impl TypedStablePtr for FunctionDeclarationPtr {
14619 type SyntaxNode = FunctionDeclaration;
14620 fn untyped(&self) -> SyntaxStablePtrId {
14621 self.0
14622 }
14623 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14624 FunctionDeclaration::from_syntax_node(db, self.0.lookup(db))
14625 }
14626}
14627impl From<FunctionDeclarationPtr> for SyntaxStablePtrId {
14628 fn from(ptr: FunctionDeclarationPtr) -> Self {
14629 ptr.untyped()
14630 }
14631}
14632#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14633pub struct FunctionDeclarationGreen(pub GreenId);
14634impl TypedSyntaxNode for FunctionDeclaration {
14635 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionDeclaration);
14636 type StablePtr = FunctionDeclarationPtr;
14637 type Green = FunctionDeclarationGreen;
14638 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14639 FunctionDeclarationGreen(
14640 Arc::new(GreenNode {
14641 kind: SyntaxKind::FunctionDeclaration,
14642 details: GreenNodeDetails::Node {
14643 children: vec![
14644 OptionTerminalConst::missing(db).0,
14645 TerminalFunction::missing(db).0,
14646 TerminalIdentifier::missing(db).0,
14647 OptionWrappedGenericParamList::missing(db).0,
14648 FunctionSignature::missing(db).0,
14649 ],
14650 width: TextWidth::default(),
14651 },
14652 })
14653 .intern(db),
14654 )
14655 }
14656 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14657 let kind = node.kind(db);
14658 assert_eq!(
14659 kind,
14660 SyntaxKind::FunctionDeclaration,
14661 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14662 kind,
14663 SyntaxKind::FunctionDeclaration
14664 );
14665 let children = db.get_children(node.clone());
14666 Self { node, children }
14667 }
14668 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14669 let kind = node.kind(db);
14670 if kind == SyntaxKind::FunctionDeclaration {
14671 Some(Self::from_syntax_node(db, node))
14672 } else {
14673 None
14674 }
14675 }
14676 fn as_syntax_node(&self) -> SyntaxNode {
14677 self.node.clone()
14678 }
14679 fn stable_ptr(&self) -> Self::StablePtr {
14680 FunctionDeclarationPtr(self.node.0.stable_ptr)
14681 }
14682}
14683impl From<&FunctionDeclaration> for SyntaxStablePtrId {
14684 fn from(node: &FunctionDeclaration) -> Self {
14685 node.stable_ptr().untyped()
14686 }
14687}
14688#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14689pub struct ItemConstant {
14690 node: SyntaxNode,
14691 children: Arc<[SyntaxNode]>,
14692}
14693impl ItemConstant {
14694 pub const INDEX_ATTRIBUTES: usize = 0;
14695 pub const INDEX_VISIBILITY: usize = 1;
14696 pub const INDEX_CONST_KW: usize = 2;
14697 pub const INDEX_NAME: usize = 3;
14698 pub const INDEX_TYPE_CLAUSE: usize = 4;
14699 pub const INDEX_EQ: usize = 5;
14700 pub const INDEX_VALUE: usize = 6;
14701 pub const INDEX_SEMICOLON: usize = 7;
14702 pub fn new_green(
14703 db: &dyn SyntaxGroup,
14704 attributes: AttributeListGreen,
14705 visibility: VisibilityGreen,
14706 const_kw: TerminalConstGreen,
14707 name: TerminalIdentifierGreen,
14708 type_clause: TypeClauseGreen,
14709 eq: TerminalEqGreen,
14710 value: ExprGreen,
14711 semicolon: TerminalSemicolonGreen,
14712 ) -> ItemConstantGreen {
14713 let children: Vec<GreenId> = vec![
14714 attributes.0,
14715 visibility.0,
14716 const_kw.0,
14717 name.0,
14718 type_clause.0,
14719 eq.0,
14720 value.0,
14721 semicolon.0,
14722 ];
14723 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14724 ItemConstantGreen(
14725 Arc::new(GreenNode {
14726 kind: SyntaxKind::ItemConstant,
14727 details: GreenNodeDetails::Node { children, width },
14728 })
14729 .intern(db),
14730 )
14731 }
14732}
14733impl ItemConstant {
14734 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14735 AttributeList::from_syntax_node(db, self.children[0].clone())
14736 }
14737 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14738 Visibility::from_syntax_node(db, self.children[1].clone())
14739 }
14740 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
14741 TerminalConst::from_syntax_node(db, self.children[2].clone())
14742 }
14743 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
14744 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
14745 }
14746 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
14747 TypeClause::from_syntax_node(db, self.children[4].clone())
14748 }
14749 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
14750 TerminalEq::from_syntax_node(db, self.children[5].clone())
14751 }
14752 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
14753 Expr::from_syntax_node(db, self.children[6].clone())
14754 }
14755 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
14756 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
14757 }
14758}
14759#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14760pub struct ItemConstantPtr(pub SyntaxStablePtrId);
14761impl ItemConstantPtr {
14762 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
14763 let ptr = self.0.lookup_intern(db);
14764 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14765 TerminalIdentifierGreen(key_fields[0])
14766 } else {
14767 panic!("Unexpected key field query on root.");
14768 }
14769 }
14770}
14771impl TypedStablePtr for ItemConstantPtr {
14772 type SyntaxNode = ItemConstant;
14773 fn untyped(&self) -> SyntaxStablePtrId {
14774 self.0
14775 }
14776 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemConstant {
14777 ItemConstant::from_syntax_node(db, self.0.lookup(db))
14778 }
14779}
14780impl From<ItemConstantPtr> for SyntaxStablePtrId {
14781 fn from(ptr: ItemConstantPtr) -> Self {
14782 ptr.untyped()
14783 }
14784}
14785#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14786pub struct ItemConstantGreen(pub GreenId);
14787impl TypedSyntaxNode for ItemConstant {
14788 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemConstant);
14789 type StablePtr = ItemConstantPtr;
14790 type Green = ItemConstantGreen;
14791 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14792 ItemConstantGreen(
14793 Arc::new(GreenNode {
14794 kind: SyntaxKind::ItemConstant,
14795 details: GreenNodeDetails::Node {
14796 children: vec![
14797 AttributeList::missing(db).0,
14798 Visibility::missing(db).0,
14799 TerminalConst::missing(db).0,
14800 TerminalIdentifier::missing(db).0,
14801 TypeClause::missing(db).0,
14802 TerminalEq::missing(db).0,
14803 Expr::missing(db).0,
14804 TerminalSemicolon::missing(db).0,
14805 ],
14806 width: TextWidth::default(),
14807 },
14808 })
14809 .intern(db),
14810 )
14811 }
14812 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14813 let kind = node.kind(db);
14814 assert_eq!(
14815 kind,
14816 SyntaxKind::ItemConstant,
14817 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14818 kind,
14819 SyntaxKind::ItemConstant
14820 );
14821 let children = db.get_children(node.clone());
14822 Self { node, children }
14823 }
14824 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14825 let kind = node.kind(db);
14826 if kind == SyntaxKind::ItemConstant { Some(Self::from_syntax_node(db, node)) } else { None }
14827 }
14828 fn as_syntax_node(&self) -> SyntaxNode {
14829 self.node.clone()
14830 }
14831 fn stable_ptr(&self) -> Self::StablePtr {
14832 ItemConstantPtr(self.node.0.stable_ptr)
14833 }
14834}
14835impl From<&ItemConstant> for SyntaxStablePtrId {
14836 fn from(node: &ItemConstant) -> Self {
14837 node.stable_ptr().untyped()
14838 }
14839}
14840#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14841pub struct FunctionWithBody {
14842 node: SyntaxNode,
14843 children: Arc<[SyntaxNode]>,
14844}
14845impl FunctionWithBody {
14846 pub const INDEX_ATTRIBUTES: usize = 0;
14847 pub const INDEX_VISIBILITY: usize = 1;
14848 pub const INDEX_DECLARATION: usize = 2;
14849 pub const INDEX_BODY: usize = 3;
14850 pub fn new_green(
14851 db: &dyn SyntaxGroup,
14852 attributes: AttributeListGreen,
14853 visibility: VisibilityGreen,
14854 declaration: FunctionDeclarationGreen,
14855 body: ExprBlockGreen,
14856 ) -> FunctionWithBodyGreen {
14857 let children: Vec<GreenId> = vec![attributes.0, visibility.0, declaration.0, body.0];
14858 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14859 FunctionWithBodyGreen(
14860 Arc::new(GreenNode {
14861 kind: SyntaxKind::FunctionWithBody,
14862 details: GreenNodeDetails::Node { children, width },
14863 })
14864 .intern(db),
14865 )
14866 }
14867}
14868impl FunctionWithBody {
14869 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14870 AttributeList::from_syntax_node(db, self.children[0].clone())
14871 }
14872 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14873 Visibility::from_syntax_node(db, self.children[1].clone())
14874 }
14875 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
14876 FunctionDeclaration::from_syntax_node(db, self.children[2].clone())
14877 }
14878 pub fn body(&self, db: &dyn SyntaxGroup) -> ExprBlock {
14879 ExprBlock::from_syntax_node(db, self.children[3].clone())
14880 }
14881}
14882#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14883pub struct FunctionWithBodyPtr(pub SyntaxStablePtrId);
14884impl FunctionWithBodyPtr {
14885 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
14886 let ptr = self.0.lookup_intern(db);
14887 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
14888 FunctionDeclarationGreen(key_fields[0])
14889 } else {
14890 panic!("Unexpected key field query on root.");
14891 }
14892 }
14893}
14894impl TypedStablePtr for FunctionWithBodyPtr {
14895 type SyntaxNode = FunctionWithBody;
14896 fn untyped(&self) -> SyntaxStablePtrId {
14897 self.0
14898 }
14899 fn lookup(&self, db: &dyn SyntaxGroup) -> FunctionWithBody {
14900 FunctionWithBody::from_syntax_node(db, self.0.lookup(db))
14901 }
14902}
14903impl From<FunctionWithBodyPtr> for SyntaxStablePtrId {
14904 fn from(ptr: FunctionWithBodyPtr) -> Self {
14905 ptr.untyped()
14906 }
14907}
14908#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
14909pub struct FunctionWithBodyGreen(pub GreenId);
14910impl TypedSyntaxNode for FunctionWithBody {
14911 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::FunctionWithBody);
14912 type StablePtr = FunctionWithBodyPtr;
14913 type Green = FunctionWithBodyGreen;
14914 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
14915 FunctionWithBodyGreen(
14916 Arc::new(GreenNode {
14917 kind: SyntaxKind::FunctionWithBody,
14918 details: GreenNodeDetails::Node {
14919 children: vec![
14920 AttributeList::missing(db).0,
14921 Visibility::missing(db).0,
14922 FunctionDeclaration::missing(db).0,
14923 ExprBlock::missing(db).0,
14924 ],
14925 width: TextWidth::default(),
14926 },
14927 })
14928 .intern(db),
14929 )
14930 }
14931 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
14932 let kind = node.kind(db);
14933 assert_eq!(
14934 kind,
14935 SyntaxKind::FunctionWithBody,
14936 "Unexpected SyntaxKind {:?}. Expected {:?}.",
14937 kind,
14938 SyntaxKind::FunctionWithBody
14939 );
14940 let children = db.get_children(node.clone());
14941 Self { node, children }
14942 }
14943 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
14944 let kind = node.kind(db);
14945 if kind == SyntaxKind::FunctionWithBody {
14946 Some(Self::from_syntax_node(db, node))
14947 } else {
14948 None
14949 }
14950 }
14951 fn as_syntax_node(&self) -> SyntaxNode {
14952 self.node.clone()
14953 }
14954 fn stable_ptr(&self) -> Self::StablePtr {
14955 FunctionWithBodyPtr(self.node.0.stable_ptr)
14956 }
14957}
14958impl From<&FunctionWithBody> for SyntaxStablePtrId {
14959 fn from(node: &FunctionWithBody) -> Self {
14960 node.stable_ptr().untyped()
14961 }
14962}
14963#[derive(Clone, Debug, Eq, Hash, PartialEq)]
14964pub struct ItemExternFunction {
14965 node: SyntaxNode,
14966 children: Arc<[SyntaxNode]>,
14967}
14968impl ItemExternFunction {
14969 pub const INDEX_ATTRIBUTES: usize = 0;
14970 pub const INDEX_VISIBILITY: usize = 1;
14971 pub const INDEX_EXTERN_KW: usize = 2;
14972 pub const INDEX_DECLARATION: usize = 3;
14973 pub const INDEX_SEMICOLON: usize = 4;
14974 pub fn new_green(
14975 db: &dyn SyntaxGroup,
14976 attributes: AttributeListGreen,
14977 visibility: VisibilityGreen,
14978 extern_kw: TerminalExternGreen,
14979 declaration: FunctionDeclarationGreen,
14980 semicolon: TerminalSemicolonGreen,
14981 ) -> ItemExternFunctionGreen {
14982 let children: Vec<GreenId> =
14983 vec![attributes.0, visibility.0, extern_kw.0, declaration.0, semicolon.0];
14984 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
14985 ItemExternFunctionGreen(
14986 Arc::new(GreenNode {
14987 kind: SyntaxKind::ItemExternFunction,
14988 details: GreenNodeDetails::Node { children, width },
14989 })
14990 .intern(db),
14991 )
14992 }
14993}
14994impl ItemExternFunction {
14995 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
14996 AttributeList::from_syntax_node(db, self.children[0].clone())
14997 }
14998 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
14999 Visibility::from_syntax_node(db, self.children[1].clone())
15000 }
15001 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15002 TerminalExtern::from_syntax_node(db, self.children[2].clone())
15003 }
15004 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
15005 FunctionDeclaration::from_syntax_node(db, self.children[3].clone())
15006 }
15007 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15008 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
15009 }
15010}
15011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15012pub struct ItemExternFunctionPtr(pub SyntaxStablePtrId);
15013impl ItemExternFunctionPtr {
15014 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15015 let ptr = self.0.lookup_intern(db);
15016 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15017 FunctionDeclarationGreen(key_fields[0])
15018 } else {
15019 panic!("Unexpected key field query on root.");
15020 }
15021 }
15022}
15023impl TypedStablePtr for ItemExternFunctionPtr {
15024 type SyntaxNode = ItemExternFunction;
15025 fn untyped(&self) -> SyntaxStablePtrId {
15026 self.0
15027 }
15028 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternFunction {
15029 ItemExternFunction::from_syntax_node(db, self.0.lookup(db))
15030 }
15031}
15032impl From<ItemExternFunctionPtr> for SyntaxStablePtrId {
15033 fn from(ptr: ItemExternFunctionPtr) -> Self {
15034 ptr.untyped()
15035 }
15036}
15037#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15038pub struct ItemExternFunctionGreen(pub GreenId);
15039impl TypedSyntaxNode for ItemExternFunction {
15040 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternFunction);
15041 type StablePtr = ItemExternFunctionPtr;
15042 type Green = ItemExternFunctionGreen;
15043 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15044 ItemExternFunctionGreen(
15045 Arc::new(GreenNode {
15046 kind: SyntaxKind::ItemExternFunction,
15047 details: GreenNodeDetails::Node {
15048 children: vec![
15049 AttributeList::missing(db).0,
15050 Visibility::missing(db).0,
15051 TerminalExtern::missing(db).0,
15052 FunctionDeclaration::missing(db).0,
15053 TerminalSemicolon::missing(db).0,
15054 ],
15055 width: TextWidth::default(),
15056 },
15057 })
15058 .intern(db),
15059 )
15060 }
15061 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15062 let kind = node.kind(db);
15063 assert_eq!(
15064 kind,
15065 SyntaxKind::ItemExternFunction,
15066 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15067 kind,
15068 SyntaxKind::ItemExternFunction
15069 );
15070 let children = db.get_children(node.clone());
15071 Self { node, children }
15072 }
15073 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15074 let kind = node.kind(db);
15075 if kind == SyntaxKind::ItemExternFunction {
15076 Some(Self::from_syntax_node(db, node))
15077 } else {
15078 None
15079 }
15080 }
15081 fn as_syntax_node(&self) -> SyntaxNode {
15082 self.node.clone()
15083 }
15084 fn stable_ptr(&self) -> Self::StablePtr {
15085 ItemExternFunctionPtr(self.node.0.stable_ptr)
15086 }
15087}
15088impl From<&ItemExternFunction> for SyntaxStablePtrId {
15089 fn from(node: &ItemExternFunction) -> Self {
15090 node.stable_ptr().untyped()
15091 }
15092}
15093#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15094pub struct ItemExternType {
15095 node: SyntaxNode,
15096 children: Arc<[SyntaxNode]>,
15097}
15098impl ItemExternType {
15099 pub const INDEX_ATTRIBUTES: usize = 0;
15100 pub const INDEX_VISIBILITY: usize = 1;
15101 pub const INDEX_EXTERN_KW: usize = 2;
15102 pub const INDEX_TYPE_KW: usize = 3;
15103 pub const INDEX_NAME: usize = 4;
15104 pub const INDEX_GENERIC_PARAMS: usize = 5;
15105 pub const INDEX_SEMICOLON: usize = 6;
15106 pub fn new_green(
15107 db: &dyn SyntaxGroup,
15108 attributes: AttributeListGreen,
15109 visibility: VisibilityGreen,
15110 extern_kw: TerminalExternGreen,
15111 type_kw: TerminalTypeGreen,
15112 name: TerminalIdentifierGreen,
15113 generic_params: OptionWrappedGenericParamListGreen,
15114 semicolon: TerminalSemicolonGreen,
15115 ) -> ItemExternTypeGreen {
15116 let children: Vec<GreenId> = vec![
15117 attributes.0,
15118 visibility.0,
15119 extern_kw.0,
15120 type_kw.0,
15121 name.0,
15122 generic_params.0,
15123 semicolon.0,
15124 ];
15125 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15126 ItemExternTypeGreen(
15127 Arc::new(GreenNode {
15128 kind: SyntaxKind::ItemExternType,
15129 details: GreenNodeDetails::Node { children, width },
15130 })
15131 .intern(db),
15132 )
15133 }
15134}
15135impl ItemExternType {
15136 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15137 AttributeList::from_syntax_node(db, self.children[0].clone())
15138 }
15139 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15140 Visibility::from_syntax_node(db, self.children[1].clone())
15141 }
15142 pub fn extern_kw(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
15143 TerminalExtern::from_syntax_node(db, self.children[2].clone())
15144 }
15145 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
15146 TerminalType::from_syntax_node(db, self.children[3].clone())
15147 }
15148 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15149 TerminalIdentifier::from_syntax_node(db, self.children[4].clone())
15150 }
15151 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15152 OptionWrappedGenericParamList::from_syntax_node(db, self.children[5].clone())
15153 }
15154 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
15155 TerminalSemicolon::from_syntax_node(db, self.children[6].clone())
15156 }
15157}
15158#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15159pub struct ItemExternTypePtr(pub SyntaxStablePtrId);
15160impl ItemExternTypePtr {
15161 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15162 let ptr = self.0.lookup_intern(db);
15163 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15164 TerminalIdentifierGreen(key_fields[0])
15165 } else {
15166 panic!("Unexpected key field query on root.");
15167 }
15168 }
15169}
15170impl TypedStablePtr for ItemExternTypePtr {
15171 type SyntaxNode = ItemExternType;
15172 fn untyped(&self) -> SyntaxStablePtrId {
15173 self.0
15174 }
15175 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemExternType {
15176 ItemExternType::from_syntax_node(db, self.0.lookup(db))
15177 }
15178}
15179impl From<ItemExternTypePtr> for SyntaxStablePtrId {
15180 fn from(ptr: ItemExternTypePtr) -> Self {
15181 ptr.untyped()
15182 }
15183}
15184#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15185pub struct ItemExternTypeGreen(pub GreenId);
15186impl TypedSyntaxNode for ItemExternType {
15187 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemExternType);
15188 type StablePtr = ItemExternTypePtr;
15189 type Green = ItemExternTypeGreen;
15190 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15191 ItemExternTypeGreen(
15192 Arc::new(GreenNode {
15193 kind: SyntaxKind::ItemExternType,
15194 details: GreenNodeDetails::Node {
15195 children: vec![
15196 AttributeList::missing(db).0,
15197 Visibility::missing(db).0,
15198 TerminalExtern::missing(db).0,
15199 TerminalType::missing(db).0,
15200 TerminalIdentifier::missing(db).0,
15201 OptionWrappedGenericParamList::missing(db).0,
15202 TerminalSemicolon::missing(db).0,
15203 ],
15204 width: TextWidth::default(),
15205 },
15206 })
15207 .intern(db),
15208 )
15209 }
15210 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15211 let kind = node.kind(db);
15212 assert_eq!(
15213 kind,
15214 SyntaxKind::ItemExternType,
15215 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15216 kind,
15217 SyntaxKind::ItemExternType
15218 );
15219 let children = db.get_children(node.clone());
15220 Self { node, children }
15221 }
15222 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15223 let kind = node.kind(db);
15224 if kind == SyntaxKind::ItemExternType {
15225 Some(Self::from_syntax_node(db, node))
15226 } else {
15227 None
15228 }
15229 }
15230 fn as_syntax_node(&self) -> SyntaxNode {
15231 self.node.clone()
15232 }
15233 fn stable_ptr(&self) -> Self::StablePtr {
15234 ItemExternTypePtr(self.node.0.stable_ptr)
15235 }
15236}
15237impl From<&ItemExternType> for SyntaxStablePtrId {
15238 fn from(node: &ItemExternType) -> Self {
15239 node.stable_ptr().untyped()
15240 }
15241}
15242#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15243pub struct ItemTrait {
15244 node: SyntaxNode,
15245 children: Arc<[SyntaxNode]>,
15246}
15247impl ItemTrait {
15248 pub const INDEX_ATTRIBUTES: usize = 0;
15249 pub const INDEX_VISIBILITY: usize = 1;
15250 pub const INDEX_TRAIT_KW: usize = 2;
15251 pub const INDEX_NAME: usize = 3;
15252 pub const INDEX_GENERIC_PARAMS: usize = 4;
15253 pub const INDEX_BODY: usize = 5;
15254 pub fn new_green(
15255 db: &dyn SyntaxGroup,
15256 attributes: AttributeListGreen,
15257 visibility: VisibilityGreen,
15258 trait_kw: TerminalTraitGreen,
15259 name: TerminalIdentifierGreen,
15260 generic_params: OptionWrappedGenericParamListGreen,
15261 body: MaybeTraitBodyGreen,
15262 ) -> ItemTraitGreen {
15263 let children: Vec<GreenId> =
15264 vec![attributes.0, visibility.0, trait_kw.0, name.0, generic_params.0, body.0];
15265 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15266 ItemTraitGreen(
15267 Arc::new(GreenNode {
15268 kind: SyntaxKind::ItemTrait,
15269 details: GreenNodeDetails::Node { children, width },
15270 })
15271 .intern(db),
15272 )
15273 }
15274}
15275impl ItemTrait {
15276 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15277 AttributeList::from_syntax_node(db, self.children[0].clone())
15278 }
15279 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
15280 Visibility::from_syntax_node(db, self.children[1].clone())
15281 }
15282 pub fn trait_kw(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
15283 TerminalTrait::from_syntax_node(db, self.children[2].clone())
15284 }
15285 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
15286 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
15287 }
15288 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
15289 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
15290 }
15291 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15292 MaybeTraitBody::from_syntax_node(db, self.children[5].clone())
15293 }
15294}
15295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15296pub struct ItemTraitPtr(pub SyntaxStablePtrId);
15297impl ItemTraitPtr {
15298 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
15299 let ptr = self.0.lookup_intern(db);
15300 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15301 TerminalIdentifierGreen(key_fields[0])
15302 } else {
15303 panic!("Unexpected key field query on root.");
15304 }
15305 }
15306}
15307impl TypedStablePtr for ItemTraitPtr {
15308 type SyntaxNode = ItemTrait;
15309 fn untyped(&self) -> SyntaxStablePtrId {
15310 self.0
15311 }
15312 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTrait {
15313 ItemTrait::from_syntax_node(db, self.0.lookup(db))
15314 }
15315}
15316impl From<ItemTraitPtr> for SyntaxStablePtrId {
15317 fn from(ptr: ItemTraitPtr) -> Self {
15318 ptr.untyped()
15319 }
15320}
15321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15322pub struct ItemTraitGreen(pub GreenId);
15323impl TypedSyntaxNode for ItemTrait {
15324 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTrait);
15325 type StablePtr = ItemTraitPtr;
15326 type Green = ItemTraitGreen;
15327 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15328 ItemTraitGreen(
15329 Arc::new(GreenNode {
15330 kind: SyntaxKind::ItemTrait,
15331 details: GreenNodeDetails::Node {
15332 children: vec![
15333 AttributeList::missing(db).0,
15334 Visibility::missing(db).0,
15335 TerminalTrait::missing(db).0,
15336 TerminalIdentifier::missing(db).0,
15337 OptionWrappedGenericParamList::missing(db).0,
15338 MaybeTraitBody::missing(db).0,
15339 ],
15340 width: TextWidth::default(),
15341 },
15342 })
15343 .intern(db),
15344 )
15345 }
15346 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15347 let kind = node.kind(db);
15348 assert_eq!(
15349 kind,
15350 SyntaxKind::ItemTrait,
15351 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15352 kind,
15353 SyntaxKind::ItemTrait
15354 );
15355 let children = db.get_children(node.clone());
15356 Self { node, children }
15357 }
15358 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15359 let kind = node.kind(db);
15360 if kind == SyntaxKind::ItemTrait { Some(Self::from_syntax_node(db, node)) } else { None }
15361 }
15362 fn as_syntax_node(&self) -> SyntaxNode {
15363 self.node.clone()
15364 }
15365 fn stable_ptr(&self) -> Self::StablePtr {
15366 ItemTraitPtr(self.node.0.stable_ptr)
15367 }
15368}
15369impl From<&ItemTrait> for SyntaxStablePtrId {
15370 fn from(node: &ItemTrait) -> Self {
15371 node.stable_ptr().untyped()
15372 }
15373}
15374#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15375pub enum MaybeTraitBody {
15376 Some(TraitBody),
15377 None(TerminalSemicolon),
15378}
15379#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15380pub struct MaybeTraitBodyPtr(pub SyntaxStablePtrId);
15381impl TypedStablePtr for MaybeTraitBodyPtr {
15382 type SyntaxNode = MaybeTraitBody;
15383 fn untyped(&self) -> SyntaxStablePtrId {
15384 self.0
15385 }
15386 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitBody {
15387 MaybeTraitBody::from_syntax_node(db, self.0.lookup(db))
15388 }
15389}
15390impl From<MaybeTraitBodyPtr> for SyntaxStablePtrId {
15391 fn from(ptr: MaybeTraitBodyPtr) -> Self {
15392 ptr.untyped()
15393 }
15394}
15395impl From<TraitBodyPtr> for MaybeTraitBodyPtr {
15396 fn from(value: TraitBodyPtr) -> Self {
15397 Self(value.0)
15398 }
15399}
15400impl From<TerminalSemicolonPtr> for MaybeTraitBodyPtr {
15401 fn from(value: TerminalSemicolonPtr) -> Self {
15402 Self(value.0)
15403 }
15404}
15405impl From<TraitBodyGreen> for MaybeTraitBodyGreen {
15406 fn from(value: TraitBodyGreen) -> Self {
15407 Self(value.0)
15408 }
15409}
15410impl From<TerminalSemicolonGreen> for MaybeTraitBodyGreen {
15411 fn from(value: TerminalSemicolonGreen) -> Self {
15412 Self(value.0)
15413 }
15414}
15415#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15416pub struct MaybeTraitBodyGreen(pub GreenId);
15417impl TypedSyntaxNode for MaybeTraitBody {
15418 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15419 type StablePtr = MaybeTraitBodyPtr;
15420 type Green = MaybeTraitBodyGreen;
15421 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15422 panic!("No missing variant.");
15423 }
15424 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15425 let kind = node.kind(db);
15426 match kind {
15427 SyntaxKind::TraitBody => MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)),
15428 SyntaxKind::TerminalSemicolon => {
15429 MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node))
15430 }
15431 _ => {
15432 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeTraitBody")
15433 }
15434 }
15435 }
15436 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15437 let kind = node.kind(db);
15438 match kind {
15439 SyntaxKind::TraitBody => {
15440 Some(MaybeTraitBody::Some(TraitBody::from_syntax_node(db, node)))
15441 }
15442 SyntaxKind::TerminalSemicolon => {
15443 Some(MaybeTraitBody::None(TerminalSemicolon::from_syntax_node(db, node)))
15444 }
15445 _ => None,
15446 }
15447 }
15448 fn as_syntax_node(&self) -> SyntaxNode {
15449 match self {
15450 MaybeTraitBody::Some(x) => x.as_syntax_node(),
15451 MaybeTraitBody::None(x) => x.as_syntax_node(),
15452 }
15453 }
15454 fn stable_ptr(&self) -> Self::StablePtr {
15455 MaybeTraitBodyPtr(self.as_syntax_node().0.stable_ptr)
15456 }
15457}
15458impl From<&MaybeTraitBody> for SyntaxStablePtrId {
15459 fn from(node: &MaybeTraitBody) -> Self {
15460 node.stable_ptr().untyped()
15461 }
15462}
15463impl MaybeTraitBody {
15464 pub fn is_variant(kind: SyntaxKind) -> bool {
15466 matches!(kind, SyntaxKind::TraitBody | SyntaxKind::TerminalSemicolon)
15467 }
15468}
15469#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15470pub struct TraitBody {
15471 node: SyntaxNode,
15472 children: Arc<[SyntaxNode]>,
15473}
15474impl TraitBody {
15475 pub const INDEX_LBRACE: usize = 0;
15476 pub const INDEX_ITEMS: usize = 1;
15477 pub const INDEX_RBRACE: usize = 2;
15478 pub fn new_green(
15479 db: &dyn SyntaxGroup,
15480 lbrace: TerminalLBraceGreen,
15481 items: TraitItemListGreen,
15482 rbrace: TerminalRBraceGreen,
15483 ) -> TraitBodyGreen {
15484 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
15485 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15486 TraitBodyGreen(
15487 Arc::new(GreenNode {
15488 kind: SyntaxKind::TraitBody,
15489 details: GreenNodeDetails::Node { children, width },
15490 })
15491 .intern(db),
15492 )
15493 }
15494}
15495impl TraitBody {
15496 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
15497 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
15498 }
15499 pub fn items(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15500 TraitItemList::from_syntax_node(db, self.children[1].clone())
15501 }
15502 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
15503 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
15504 }
15505}
15506#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15507pub struct TraitBodyPtr(pub SyntaxStablePtrId);
15508impl TraitBodyPtr {}
15509impl TypedStablePtr for TraitBodyPtr {
15510 type SyntaxNode = TraitBody;
15511 fn untyped(&self) -> SyntaxStablePtrId {
15512 self.0
15513 }
15514 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitBody {
15515 TraitBody::from_syntax_node(db, self.0.lookup(db))
15516 }
15517}
15518impl From<TraitBodyPtr> for SyntaxStablePtrId {
15519 fn from(ptr: TraitBodyPtr) -> Self {
15520 ptr.untyped()
15521 }
15522}
15523#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15524pub struct TraitBodyGreen(pub GreenId);
15525impl TypedSyntaxNode for TraitBody {
15526 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitBody);
15527 type StablePtr = TraitBodyPtr;
15528 type Green = TraitBodyGreen;
15529 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15530 TraitBodyGreen(
15531 Arc::new(GreenNode {
15532 kind: SyntaxKind::TraitBody,
15533 details: GreenNodeDetails::Node {
15534 children: vec![
15535 TerminalLBrace::missing(db).0,
15536 TraitItemList::missing(db).0,
15537 TerminalRBrace::missing(db).0,
15538 ],
15539 width: TextWidth::default(),
15540 },
15541 })
15542 .intern(db),
15543 )
15544 }
15545 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15546 let kind = node.kind(db);
15547 assert_eq!(
15548 kind,
15549 SyntaxKind::TraitBody,
15550 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15551 kind,
15552 SyntaxKind::TraitBody
15553 );
15554 let children = db.get_children(node.clone());
15555 Self { node, children }
15556 }
15557 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15558 let kind = node.kind(db);
15559 if kind == SyntaxKind::TraitBody { Some(Self::from_syntax_node(db, node)) } else { None }
15560 }
15561 fn as_syntax_node(&self) -> SyntaxNode {
15562 self.node.clone()
15563 }
15564 fn stable_ptr(&self) -> Self::StablePtr {
15565 TraitBodyPtr(self.node.0.stable_ptr)
15566 }
15567}
15568impl From<&TraitBody> for SyntaxStablePtrId {
15569 fn from(node: &TraitBody) -> Self {
15570 node.stable_ptr().untyped()
15571 }
15572}
15573#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15574pub struct TraitItemList(ElementList<TraitItem, 1>);
15575impl Deref for TraitItemList {
15576 type Target = ElementList<TraitItem, 1>;
15577 fn deref(&self) -> &Self::Target {
15578 &self.0
15579 }
15580}
15581impl TraitItemList {
15582 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<TraitItemGreen>) -> TraitItemListGreen {
15583 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
15584 TraitItemListGreen(
15585 Arc::new(GreenNode {
15586 kind: SyntaxKind::TraitItemList,
15587 details: GreenNodeDetails::Node {
15588 children: children.iter().map(|x| x.0).collect(),
15589 width,
15590 },
15591 })
15592 .intern(db),
15593 )
15594 }
15595}
15596#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15597pub struct TraitItemListPtr(pub SyntaxStablePtrId);
15598impl TypedStablePtr for TraitItemListPtr {
15599 type SyntaxNode = TraitItemList;
15600 fn untyped(&self) -> SyntaxStablePtrId {
15601 self.0
15602 }
15603 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemList {
15604 TraitItemList::from_syntax_node(db, self.0.lookup(db))
15605 }
15606}
15607impl From<TraitItemListPtr> for SyntaxStablePtrId {
15608 fn from(ptr: TraitItemListPtr) -> Self {
15609 ptr.untyped()
15610 }
15611}
15612#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15613pub struct TraitItemListGreen(pub GreenId);
15614impl TypedSyntaxNode for TraitItemList {
15615 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemList);
15616 type StablePtr = TraitItemListPtr;
15617 type Green = TraitItemListGreen;
15618 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15619 TraitItemListGreen(
15620 Arc::new(GreenNode {
15621 kind: SyntaxKind::TraitItemList,
15622 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
15623 })
15624 .intern(db),
15625 )
15626 }
15627 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15628 Self(ElementList::new(node))
15629 }
15630 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15631 if node.kind(db) == SyntaxKind::TraitItemList {
15632 Some(Self(ElementList::new(node)))
15633 } else {
15634 None
15635 }
15636 }
15637 fn as_syntax_node(&self) -> SyntaxNode {
15638 self.node.clone()
15639 }
15640 fn stable_ptr(&self) -> Self::StablePtr {
15641 TraitItemListPtr(self.node.0.stable_ptr)
15642 }
15643}
15644impl From<&TraitItemList> for SyntaxStablePtrId {
15645 fn from(node: &TraitItemList) -> Self {
15646 node.stable_ptr().untyped()
15647 }
15648}
15649#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15650pub enum TraitItem {
15651 Function(TraitItemFunction),
15652 Type(TraitItemType),
15653 Constant(TraitItemConstant),
15654 Impl(TraitItemImpl),
15655 Missing(TraitItemMissing),
15656}
15657#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15658pub struct TraitItemPtr(pub SyntaxStablePtrId);
15659impl TypedStablePtr for TraitItemPtr {
15660 type SyntaxNode = TraitItem;
15661 fn untyped(&self) -> SyntaxStablePtrId {
15662 self.0
15663 }
15664 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItem {
15665 TraitItem::from_syntax_node(db, self.0.lookup(db))
15666 }
15667}
15668impl From<TraitItemPtr> for SyntaxStablePtrId {
15669 fn from(ptr: TraitItemPtr) -> Self {
15670 ptr.untyped()
15671 }
15672}
15673impl From<TraitItemFunctionPtr> for TraitItemPtr {
15674 fn from(value: TraitItemFunctionPtr) -> Self {
15675 Self(value.0)
15676 }
15677}
15678impl From<TraitItemTypePtr> for TraitItemPtr {
15679 fn from(value: TraitItemTypePtr) -> Self {
15680 Self(value.0)
15681 }
15682}
15683impl From<TraitItemConstantPtr> for TraitItemPtr {
15684 fn from(value: TraitItemConstantPtr) -> Self {
15685 Self(value.0)
15686 }
15687}
15688impl From<TraitItemImplPtr> for TraitItemPtr {
15689 fn from(value: TraitItemImplPtr) -> Self {
15690 Self(value.0)
15691 }
15692}
15693impl From<TraitItemMissingPtr> for TraitItemPtr {
15694 fn from(value: TraitItemMissingPtr) -> Self {
15695 Self(value.0)
15696 }
15697}
15698impl From<TraitItemFunctionGreen> for TraitItemGreen {
15699 fn from(value: TraitItemFunctionGreen) -> Self {
15700 Self(value.0)
15701 }
15702}
15703impl From<TraitItemTypeGreen> for TraitItemGreen {
15704 fn from(value: TraitItemTypeGreen) -> Self {
15705 Self(value.0)
15706 }
15707}
15708impl From<TraitItemConstantGreen> for TraitItemGreen {
15709 fn from(value: TraitItemConstantGreen) -> Self {
15710 Self(value.0)
15711 }
15712}
15713impl From<TraitItemImplGreen> for TraitItemGreen {
15714 fn from(value: TraitItemImplGreen) -> Self {
15715 Self(value.0)
15716 }
15717}
15718impl From<TraitItemMissingGreen> for TraitItemGreen {
15719 fn from(value: TraitItemMissingGreen) -> Self {
15720 Self(value.0)
15721 }
15722}
15723#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15724pub struct TraitItemGreen(pub GreenId);
15725impl TypedSyntaxNode for TraitItem {
15726 const OPTIONAL_KIND: Option<SyntaxKind> = None;
15727 type StablePtr = TraitItemPtr;
15728 type Green = TraitItemGreen;
15729 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15730 TraitItemGreen(TraitItemMissing::missing(db).0)
15731 }
15732 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15733 let kind = node.kind(db);
15734 match kind {
15735 SyntaxKind::TraitItemFunction => {
15736 TraitItem::Function(TraitItemFunction::from_syntax_node(db, node))
15737 }
15738 SyntaxKind::TraitItemType => TraitItem::Type(TraitItemType::from_syntax_node(db, node)),
15739 SyntaxKind::TraitItemConstant => {
15740 TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node))
15741 }
15742 SyntaxKind::TraitItemImpl => TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)),
15743 SyntaxKind::TraitItemMissing => {
15744 TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node))
15745 }
15746 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TraitItem"),
15747 }
15748 }
15749 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15750 let kind = node.kind(db);
15751 match kind {
15752 SyntaxKind::TraitItemFunction => {
15753 Some(TraitItem::Function(TraitItemFunction::from_syntax_node(db, node)))
15754 }
15755 SyntaxKind::TraitItemType => {
15756 Some(TraitItem::Type(TraitItemType::from_syntax_node(db, node)))
15757 }
15758 SyntaxKind::TraitItemConstant => {
15759 Some(TraitItem::Constant(TraitItemConstant::from_syntax_node(db, node)))
15760 }
15761 SyntaxKind::TraitItemImpl => {
15762 Some(TraitItem::Impl(TraitItemImpl::from_syntax_node(db, node)))
15763 }
15764 SyntaxKind::TraitItemMissing => {
15765 Some(TraitItem::Missing(TraitItemMissing::from_syntax_node(db, node)))
15766 }
15767 _ => None,
15768 }
15769 }
15770 fn as_syntax_node(&self) -> SyntaxNode {
15771 match self {
15772 TraitItem::Function(x) => x.as_syntax_node(),
15773 TraitItem::Type(x) => x.as_syntax_node(),
15774 TraitItem::Constant(x) => x.as_syntax_node(),
15775 TraitItem::Impl(x) => x.as_syntax_node(),
15776 TraitItem::Missing(x) => x.as_syntax_node(),
15777 }
15778 }
15779 fn stable_ptr(&self) -> Self::StablePtr {
15780 TraitItemPtr(self.as_syntax_node().0.stable_ptr)
15781 }
15782}
15783impl From<&TraitItem> for SyntaxStablePtrId {
15784 fn from(node: &TraitItem) -> Self {
15785 node.stable_ptr().untyped()
15786 }
15787}
15788impl TraitItem {
15789 pub fn is_variant(kind: SyntaxKind) -> bool {
15791 matches!(
15792 kind,
15793 SyntaxKind::TraitItemFunction
15794 | SyntaxKind::TraitItemType
15795 | SyntaxKind::TraitItemConstant
15796 | SyntaxKind::TraitItemImpl
15797 | SyntaxKind::TraitItemMissing
15798 )
15799 }
15800}
15801#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15802pub struct TraitItemMissing {
15803 node: SyntaxNode,
15804 children: Arc<[SyntaxNode]>,
15805}
15806impl TraitItemMissing {
15807 pub fn new_green(db: &dyn SyntaxGroup) -> TraitItemMissingGreen {
15808 let children: Vec<GreenId> = vec![];
15809 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15810 TraitItemMissingGreen(
15811 Arc::new(GreenNode {
15812 kind: SyntaxKind::TraitItemMissing,
15813 details: GreenNodeDetails::Node { children, width },
15814 })
15815 .intern(db),
15816 )
15817 }
15818}
15819impl TraitItemMissing {}
15820#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15821pub struct TraitItemMissingPtr(pub SyntaxStablePtrId);
15822impl TraitItemMissingPtr {}
15823impl TypedStablePtr for TraitItemMissingPtr {
15824 type SyntaxNode = TraitItemMissing;
15825 fn untyped(&self) -> SyntaxStablePtrId {
15826 self.0
15827 }
15828 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemMissing {
15829 TraitItemMissing::from_syntax_node(db, self.0.lookup(db))
15830 }
15831}
15832impl From<TraitItemMissingPtr> for SyntaxStablePtrId {
15833 fn from(ptr: TraitItemMissingPtr) -> Self {
15834 ptr.untyped()
15835 }
15836}
15837#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15838pub struct TraitItemMissingGreen(pub GreenId);
15839impl TypedSyntaxNode for TraitItemMissing {
15840 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemMissing);
15841 type StablePtr = TraitItemMissingPtr;
15842 type Green = TraitItemMissingGreen;
15843 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15844 TraitItemMissingGreen(
15845 Arc::new(GreenNode {
15846 kind: SyntaxKind::TraitItemMissing,
15847 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
15848 })
15849 .intern(db),
15850 )
15851 }
15852 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15853 let kind = node.kind(db);
15854 assert_eq!(
15855 kind,
15856 SyntaxKind::TraitItemMissing,
15857 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15858 kind,
15859 SyntaxKind::TraitItemMissing
15860 );
15861 let children = db.get_children(node.clone());
15862 Self { node, children }
15863 }
15864 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15865 let kind = node.kind(db);
15866 if kind == SyntaxKind::TraitItemMissing {
15867 Some(Self::from_syntax_node(db, node))
15868 } else {
15869 None
15870 }
15871 }
15872 fn as_syntax_node(&self) -> SyntaxNode {
15873 self.node.clone()
15874 }
15875 fn stable_ptr(&self) -> Self::StablePtr {
15876 TraitItemMissingPtr(self.node.0.stable_ptr)
15877 }
15878}
15879impl From<&TraitItemMissing> for SyntaxStablePtrId {
15880 fn from(node: &TraitItemMissing) -> Self {
15881 node.stable_ptr().untyped()
15882 }
15883}
15884#[derive(Clone, Debug, Eq, Hash, PartialEq)]
15885pub struct TraitItemFunction {
15886 node: SyntaxNode,
15887 children: Arc<[SyntaxNode]>,
15888}
15889impl TraitItemFunction {
15890 pub const INDEX_ATTRIBUTES: usize = 0;
15891 pub const INDEX_DECLARATION: usize = 1;
15892 pub const INDEX_BODY: usize = 2;
15893 pub fn new_green(
15894 db: &dyn SyntaxGroup,
15895 attributes: AttributeListGreen,
15896 declaration: FunctionDeclarationGreen,
15897 body: MaybeTraitFunctionBodyGreen,
15898 ) -> TraitItemFunctionGreen {
15899 let children: Vec<GreenId> = vec![attributes.0, declaration.0, body.0];
15900 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
15901 TraitItemFunctionGreen(
15902 Arc::new(GreenNode {
15903 kind: SyntaxKind::TraitItemFunction,
15904 details: GreenNodeDetails::Node { children, width },
15905 })
15906 .intern(db),
15907 )
15908 }
15909}
15910impl TraitItemFunction {
15911 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
15912 AttributeList::from_syntax_node(db, self.children[0].clone())
15913 }
15914 pub fn declaration(&self, db: &dyn SyntaxGroup) -> FunctionDeclaration {
15915 FunctionDeclaration::from_syntax_node(db, self.children[1].clone())
15916 }
15917 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
15918 MaybeTraitFunctionBody::from_syntax_node(db, self.children[2].clone())
15919 }
15920}
15921#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15922pub struct TraitItemFunctionPtr(pub SyntaxStablePtrId);
15923impl TraitItemFunctionPtr {
15924 pub fn declaration_green(self, db: &dyn SyntaxGroup) -> FunctionDeclarationGreen {
15925 let ptr = self.0.lookup_intern(db);
15926 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
15927 FunctionDeclarationGreen(key_fields[0])
15928 } else {
15929 panic!("Unexpected key field query on root.");
15930 }
15931 }
15932}
15933impl TypedStablePtr for TraitItemFunctionPtr {
15934 type SyntaxNode = TraitItemFunction;
15935 fn untyped(&self) -> SyntaxStablePtrId {
15936 self.0
15937 }
15938 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemFunction {
15939 TraitItemFunction::from_syntax_node(db, self.0.lookup(db))
15940 }
15941}
15942impl From<TraitItemFunctionPtr> for SyntaxStablePtrId {
15943 fn from(ptr: TraitItemFunctionPtr) -> Self {
15944 ptr.untyped()
15945 }
15946}
15947#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
15948pub struct TraitItemFunctionGreen(pub GreenId);
15949impl TypedSyntaxNode for TraitItemFunction {
15950 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemFunction);
15951 type StablePtr = TraitItemFunctionPtr;
15952 type Green = TraitItemFunctionGreen;
15953 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
15954 TraitItemFunctionGreen(
15955 Arc::new(GreenNode {
15956 kind: SyntaxKind::TraitItemFunction,
15957 details: GreenNodeDetails::Node {
15958 children: vec![
15959 AttributeList::missing(db).0,
15960 FunctionDeclaration::missing(db).0,
15961 MaybeTraitFunctionBody::missing(db).0,
15962 ],
15963 width: TextWidth::default(),
15964 },
15965 })
15966 .intern(db),
15967 )
15968 }
15969 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
15970 let kind = node.kind(db);
15971 assert_eq!(
15972 kind,
15973 SyntaxKind::TraitItemFunction,
15974 "Unexpected SyntaxKind {:?}. Expected {:?}.",
15975 kind,
15976 SyntaxKind::TraitItemFunction
15977 );
15978 let children = db.get_children(node.clone());
15979 Self { node, children }
15980 }
15981 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
15982 let kind = node.kind(db);
15983 if kind == SyntaxKind::TraitItemFunction {
15984 Some(Self::from_syntax_node(db, node))
15985 } else {
15986 None
15987 }
15988 }
15989 fn as_syntax_node(&self) -> SyntaxNode {
15990 self.node.clone()
15991 }
15992 fn stable_ptr(&self) -> Self::StablePtr {
15993 TraitItemFunctionPtr(self.node.0.stable_ptr)
15994 }
15995}
15996impl From<&TraitItemFunction> for SyntaxStablePtrId {
15997 fn from(node: &TraitItemFunction) -> Self {
15998 node.stable_ptr().untyped()
15999 }
16000}
16001#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16002pub struct TraitItemType {
16003 node: SyntaxNode,
16004 children: Arc<[SyntaxNode]>,
16005}
16006impl TraitItemType {
16007 pub const INDEX_ATTRIBUTES: usize = 0;
16008 pub const INDEX_TYPE_KW: usize = 1;
16009 pub const INDEX_NAME: usize = 2;
16010 pub const INDEX_GENERIC_PARAMS: usize = 3;
16011 pub const INDEX_SEMICOLON: usize = 4;
16012 pub fn new_green(
16013 db: &dyn SyntaxGroup,
16014 attributes: AttributeListGreen,
16015 type_kw: TerminalTypeGreen,
16016 name: TerminalIdentifierGreen,
16017 generic_params: OptionWrappedGenericParamListGreen,
16018 semicolon: TerminalSemicolonGreen,
16019 ) -> TraitItemTypeGreen {
16020 let children: Vec<GreenId> =
16021 vec![attributes.0, type_kw.0, name.0, generic_params.0, semicolon.0];
16022 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16023 TraitItemTypeGreen(
16024 Arc::new(GreenNode {
16025 kind: SyntaxKind::TraitItemType,
16026 details: GreenNodeDetails::Node { children, width },
16027 })
16028 .intern(db),
16029 )
16030 }
16031}
16032impl TraitItemType {
16033 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16034 AttributeList::from_syntax_node(db, self.children[0].clone())
16035 }
16036 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
16037 TerminalType::from_syntax_node(db, self.children[1].clone())
16038 }
16039 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16040 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16041 }
16042 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16043 OptionWrappedGenericParamList::from_syntax_node(db, self.children[3].clone())
16044 }
16045 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16046 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16047 }
16048}
16049#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16050pub struct TraitItemTypePtr(pub SyntaxStablePtrId);
16051impl TraitItemTypePtr {
16052 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16053 let ptr = self.0.lookup_intern(db);
16054 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16055 TerminalIdentifierGreen(key_fields[0])
16056 } else {
16057 panic!("Unexpected key field query on root.");
16058 }
16059 }
16060}
16061impl TypedStablePtr for TraitItemTypePtr {
16062 type SyntaxNode = TraitItemType;
16063 fn untyped(&self) -> SyntaxStablePtrId {
16064 self.0
16065 }
16066 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemType {
16067 TraitItemType::from_syntax_node(db, self.0.lookup(db))
16068 }
16069}
16070impl From<TraitItemTypePtr> for SyntaxStablePtrId {
16071 fn from(ptr: TraitItemTypePtr) -> Self {
16072 ptr.untyped()
16073 }
16074}
16075#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16076pub struct TraitItemTypeGreen(pub GreenId);
16077impl TypedSyntaxNode for TraitItemType {
16078 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemType);
16079 type StablePtr = TraitItemTypePtr;
16080 type Green = TraitItemTypeGreen;
16081 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16082 TraitItemTypeGreen(
16083 Arc::new(GreenNode {
16084 kind: SyntaxKind::TraitItemType,
16085 details: GreenNodeDetails::Node {
16086 children: vec![
16087 AttributeList::missing(db).0,
16088 TerminalType::missing(db).0,
16089 TerminalIdentifier::missing(db).0,
16090 OptionWrappedGenericParamList::missing(db).0,
16091 TerminalSemicolon::missing(db).0,
16092 ],
16093 width: TextWidth::default(),
16094 },
16095 })
16096 .intern(db),
16097 )
16098 }
16099 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16100 let kind = node.kind(db);
16101 assert_eq!(
16102 kind,
16103 SyntaxKind::TraitItemType,
16104 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16105 kind,
16106 SyntaxKind::TraitItemType
16107 );
16108 let children = db.get_children(node.clone());
16109 Self { node, children }
16110 }
16111 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16112 let kind = node.kind(db);
16113 if kind == SyntaxKind::TraitItemType {
16114 Some(Self::from_syntax_node(db, node))
16115 } else {
16116 None
16117 }
16118 }
16119 fn as_syntax_node(&self) -> SyntaxNode {
16120 self.node.clone()
16121 }
16122 fn stable_ptr(&self) -> Self::StablePtr {
16123 TraitItemTypePtr(self.node.0.stable_ptr)
16124 }
16125}
16126impl From<&TraitItemType> for SyntaxStablePtrId {
16127 fn from(node: &TraitItemType) -> Self {
16128 node.stable_ptr().untyped()
16129 }
16130}
16131#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16132pub struct TraitItemConstant {
16133 node: SyntaxNode,
16134 children: Arc<[SyntaxNode]>,
16135}
16136impl TraitItemConstant {
16137 pub const INDEX_ATTRIBUTES: usize = 0;
16138 pub const INDEX_CONST_KW: usize = 1;
16139 pub const INDEX_NAME: usize = 2;
16140 pub const INDEX_TYPE_CLAUSE: usize = 3;
16141 pub const INDEX_SEMICOLON: usize = 4;
16142 pub fn new_green(
16143 db: &dyn SyntaxGroup,
16144 attributes: AttributeListGreen,
16145 const_kw: TerminalConstGreen,
16146 name: TerminalIdentifierGreen,
16147 type_clause: TypeClauseGreen,
16148 semicolon: TerminalSemicolonGreen,
16149 ) -> TraitItemConstantGreen {
16150 let children: Vec<GreenId> =
16151 vec![attributes.0, const_kw.0, name.0, type_clause.0, semicolon.0];
16152 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16153 TraitItemConstantGreen(
16154 Arc::new(GreenNode {
16155 kind: SyntaxKind::TraitItemConstant,
16156 details: GreenNodeDetails::Node { children, width },
16157 })
16158 .intern(db),
16159 )
16160 }
16161}
16162impl TraitItemConstant {
16163 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16164 AttributeList::from_syntax_node(db, self.children[0].clone())
16165 }
16166 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
16167 TerminalConst::from_syntax_node(db, self.children[1].clone())
16168 }
16169 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16170 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16171 }
16172 pub fn type_clause(&self, db: &dyn SyntaxGroup) -> TypeClause {
16173 TypeClause::from_syntax_node(db, self.children[3].clone())
16174 }
16175 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16176 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16177 }
16178}
16179#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16180pub struct TraitItemConstantPtr(pub SyntaxStablePtrId);
16181impl TraitItemConstantPtr {
16182 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16183 let ptr = self.0.lookup_intern(db);
16184 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16185 TerminalIdentifierGreen(key_fields[0])
16186 } else {
16187 panic!("Unexpected key field query on root.");
16188 }
16189 }
16190}
16191impl TypedStablePtr for TraitItemConstantPtr {
16192 type SyntaxNode = TraitItemConstant;
16193 fn untyped(&self) -> SyntaxStablePtrId {
16194 self.0
16195 }
16196 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemConstant {
16197 TraitItemConstant::from_syntax_node(db, self.0.lookup(db))
16198 }
16199}
16200impl From<TraitItemConstantPtr> for SyntaxStablePtrId {
16201 fn from(ptr: TraitItemConstantPtr) -> Self {
16202 ptr.untyped()
16203 }
16204}
16205#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16206pub struct TraitItemConstantGreen(pub GreenId);
16207impl TypedSyntaxNode for TraitItemConstant {
16208 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemConstant);
16209 type StablePtr = TraitItemConstantPtr;
16210 type Green = TraitItemConstantGreen;
16211 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16212 TraitItemConstantGreen(
16213 Arc::new(GreenNode {
16214 kind: SyntaxKind::TraitItemConstant,
16215 details: GreenNodeDetails::Node {
16216 children: vec![
16217 AttributeList::missing(db).0,
16218 TerminalConst::missing(db).0,
16219 TerminalIdentifier::missing(db).0,
16220 TypeClause::missing(db).0,
16221 TerminalSemicolon::missing(db).0,
16222 ],
16223 width: TextWidth::default(),
16224 },
16225 })
16226 .intern(db),
16227 )
16228 }
16229 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16230 let kind = node.kind(db);
16231 assert_eq!(
16232 kind,
16233 SyntaxKind::TraitItemConstant,
16234 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16235 kind,
16236 SyntaxKind::TraitItemConstant
16237 );
16238 let children = db.get_children(node.clone());
16239 Self { node, children }
16240 }
16241 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16242 let kind = node.kind(db);
16243 if kind == SyntaxKind::TraitItemConstant {
16244 Some(Self::from_syntax_node(db, node))
16245 } else {
16246 None
16247 }
16248 }
16249 fn as_syntax_node(&self) -> SyntaxNode {
16250 self.node.clone()
16251 }
16252 fn stable_ptr(&self) -> Self::StablePtr {
16253 TraitItemConstantPtr(self.node.0.stable_ptr)
16254 }
16255}
16256impl From<&TraitItemConstant> for SyntaxStablePtrId {
16257 fn from(node: &TraitItemConstant) -> Self {
16258 node.stable_ptr().untyped()
16259 }
16260}
16261#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16262pub struct TraitItemImpl {
16263 node: SyntaxNode,
16264 children: Arc<[SyntaxNode]>,
16265}
16266impl TraitItemImpl {
16267 pub const INDEX_ATTRIBUTES: usize = 0;
16268 pub const INDEX_IMPL_KW: usize = 1;
16269 pub const INDEX_NAME: usize = 2;
16270 pub const INDEX_COLON: usize = 3;
16271 pub const INDEX_TRAIT_PATH: usize = 4;
16272 pub const INDEX_SEMICOLON: usize = 5;
16273 pub fn new_green(
16274 db: &dyn SyntaxGroup,
16275 attributes: AttributeListGreen,
16276 impl_kw: TerminalImplGreen,
16277 name: TerminalIdentifierGreen,
16278 colon: TerminalColonGreen,
16279 trait_path: ExprPathGreen,
16280 semicolon: TerminalSemicolonGreen,
16281 ) -> TraitItemImplGreen {
16282 let children: Vec<GreenId> =
16283 vec![attributes.0, impl_kw.0, name.0, colon.0, trait_path.0, semicolon.0];
16284 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16285 TraitItemImplGreen(
16286 Arc::new(GreenNode {
16287 kind: SyntaxKind::TraitItemImpl,
16288 details: GreenNodeDetails::Node { children, width },
16289 })
16290 .intern(db),
16291 )
16292 }
16293}
16294impl TraitItemImpl {
16295 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16296 AttributeList::from_syntax_node(db, self.children[0].clone())
16297 }
16298 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16299 TerminalImpl::from_syntax_node(db, self.children[1].clone())
16300 }
16301 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16302 TerminalIdentifier::from_syntax_node(db, self.children[2].clone())
16303 }
16304 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
16305 TerminalColon::from_syntax_node(db, self.children[3].clone())
16306 }
16307 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16308 ExprPath::from_syntax_node(db, self.children[4].clone())
16309 }
16310 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16311 TerminalSemicolon::from_syntax_node(db, self.children[5].clone())
16312 }
16313}
16314#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16315pub struct TraitItemImplPtr(pub SyntaxStablePtrId);
16316impl TraitItemImplPtr {
16317 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16318 let ptr = self.0.lookup_intern(db);
16319 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16320 TerminalIdentifierGreen(key_fields[0])
16321 } else {
16322 panic!("Unexpected key field query on root.");
16323 }
16324 }
16325}
16326impl TypedStablePtr for TraitItemImplPtr {
16327 type SyntaxNode = TraitItemImpl;
16328 fn untyped(&self) -> SyntaxStablePtrId {
16329 self.0
16330 }
16331 fn lookup(&self, db: &dyn SyntaxGroup) -> TraitItemImpl {
16332 TraitItemImpl::from_syntax_node(db, self.0.lookup(db))
16333 }
16334}
16335impl From<TraitItemImplPtr> for SyntaxStablePtrId {
16336 fn from(ptr: TraitItemImplPtr) -> Self {
16337 ptr.untyped()
16338 }
16339}
16340#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16341pub struct TraitItemImplGreen(pub GreenId);
16342impl TypedSyntaxNode for TraitItemImpl {
16343 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TraitItemImpl);
16344 type StablePtr = TraitItemImplPtr;
16345 type Green = TraitItemImplGreen;
16346 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16347 TraitItemImplGreen(
16348 Arc::new(GreenNode {
16349 kind: SyntaxKind::TraitItemImpl,
16350 details: GreenNodeDetails::Node {
16351 children: vec![
16352 AttributeList::missing(db).0,
16353 TerminalImpl::missing(db).0,
16354 TerminalIdentifier::missing(db).0,
16355 TerminalColon::missing(db).0,
16356 ExprPath::missing(db).0,
16357 TerminalSemicolon::missing(db).0,
16358 ],
16359 width: TextWidth::default(),
16360 },
16361 })
16362 .intern(db),
16363 )
16364 }
16365 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16366 let kind = node.kind(db);
16367 assert_eq!(
16368 kind,
16369 SyntaxKind::TraitItemImpl,
16370 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16371 kind,
16372 SyntaxKind::TraitItemImpl
16373 );
16374 let children = db.get_children(node.clone());
16375 Self { node, children }
16376 }
16377 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16378 let kind = node.kind(db);
16379 if kind == SyntaxKind::TraitItemImpl {
16380 Some(Self::from_syntax_node(db, node))
16381 } else {
16382 None
16383 }
16384 }
16385 fn as_syntax_node(&self) -> SyntaxNode {
16386 self.node.clone()
16387 }
16388 fn stable_ptr(&self) -> Self::StablePtr {
16389 TraitItemImplPtr(self.node.0.stable_ptr)
16390 }
16391}
16392impl From<&TraitItemImpl> for SyntaxStablePtrId {
16393 fn from(node: &TraitItemImpl) -> Self {
16394 node.stable_ptr().untyped()
16395 }
16396}
16397#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16398pub enum MaybeTraitFunctionBody {
16399 Some(ExprBlock),
16400 None(TerminalSemicolon),
16401}
16402#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16403pub struct MaybeTraitFunctionBodyPtr(pub SyntaxStablePtrId);
16404impl TypedStablePtr for MaybeTraitFunctionBodyPtr {
16405 type SyntaxNode = MaybeTraitFunctionBody;
16406 fn untyped(&self) -> SyntaxStablePtrId {
16407 self.0
16408 }
16409 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeTraitFunctionBody {
16410 MaybeTraitFunctionBody::from_syntax_node(db, self.0.lookup(db))
16411 }
16412}
16413impl From<MaybeTraitFunctionBodyPtr> for SyntaxStablePtrId {
16414 fn from(ptr: MaybeTraitFunctionBodyPtr) -> Self {
16415 ptr.untyped()
16416 }
16417}
16418impl From<ExprBlockPtr> for MaybeTraitFunctionBodyPtr {
16419 fn from(value: ExprBlockPtr) -> Self {
16420 Self(value.0)
16421 }
16422}
16423impl From<TerminalSemicolonPtr> for MaybeTraitFunctionBodyPtr {
16424 fn from(value: TerminalSemicolonPtr) -> Self {
16425 Self(value.0)
16426 }
16427}
16428impl From<ExprBlockGreen> for MaybeTraitFunctionBodyGreen {
16429 fn from(value: ExprBlockGreen) -> Self {
16430 Self(value.0)
16431 }
16432}
16433impl From<TerminalSemicolonGreen> for MaybeTraitFunctionBodyGreen {
16434 fn from(value: TerminalSemicolonGreen) -> Self {
16435 Self(value.0)
16436 }
16437}
16438#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16439pub struct MaybeTraitFunctionBodyGreen(pub GreenId);
16440impl TypedSyntaxNode for MaybeTraitFunctionBody {
16441 const OPTIONAL_KIND: Option<SyntaxKind> = None;
16442 type StablePtr = MaybeTraitFunctionBodyPtr;
16443 type Green = MaybeTraitFunctionBodyGreen;
16444 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16445 panic!("No missing variant.");
16446 }
16447 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16448 let kind = node.kind(db);
16449 match kind {
16450 SyntaxKind::ExprBlock => {
16451 MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node))
16452 }
16453 SyntaxKind::TerminalSemicolon => {
16454 MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node))
16455 }
16456 _ => panic!(
16457 "Unexpected syntax kind {:?} when constructing {}.",
16458 kind, "MaybeTraitFunctionBody"
16459 ),
16460 }
16461 }
16462 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16463 let kind = node.kind(db);
16464 match kind {
16465 SyntaxKind::ExprBlock => {
16466 Some(MaybeTraitFunctionBody::Some(ExprBlock::from_syntax_node(db, node)))
16467 }
16468 SyntaxKind::TerminalSemicolon => {
16469 Some(MaybeTraitFunctionBody::None(TerminalSemicolon::from_syntax_node(db, node)))
16470 }
16471 _ => None,
16472 }
16473 }
16474 fn as_syntax_node(&self) -> SyntaxNode {
16475 match self {
16476 MaybeTraitFunctionBody::Some(x) => x.as_syntax_node(),
16477 MaybeTraitFunctionBody::None(x) => x.as_syntax_node(),
16478 }
16479 }
16480 fn stable_ptr(&self) -> Self::StablePtr {
16481 MaybeTraitFunctionBodyPtr(self.as_syntax_node().0.stable_ptr)
16482 }
16483}
16484impl From<&MaybeTraitFunctionBody> for SyntaxStablePtrId {
16485 fn from(node: &MaybeTraitFunctionBody) -> Self {
16486 node.stable_ptr().untyped()
16487 }
16488}
16489impl MaybeTraitFunctionBody {
16490 pub fn is_variant(kind: SyntaxKind) -> bool {
16492 matches!(kind, SyntaxKind::ExprBlock | SyntaxKind::TerminalSemicolon)
16493 }
16494}
16495#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16496pub struct ItemImpl {
16497 node: SyntaxNode,
16498 children: Arc<[SyntaxNode]>,
16499}
16500impl ItemImpl {
16501 pub const INDEX_ATTRIBUTES: usize = 0;
16502 pub const INDEX_VISIBILITY: usize = 1;
16503 pub const INDEX_IMPL_KW: usize = 2;
16504 pub const INDEX_NAME: usize = 3;
16505 pub const INDEX_GENERIC_PARAMS: usize = 4;
16506 pub const INDEX_OF_KW: usize = 5;
16507 pub const INDEX_TRAIT_PATH: usize = 6;
16508 pub const INDEX_BODY: usize = 7;
16509 pub fn new_green(
16510 db: &dyn SyntaxGroup,
16511 attributes: AttributeListGreen,
16512 visibility: VisibilityGreen,
16513 impl_kw: TerminalImplGreen,
16514 name: TerminalIdentifierGreen,
16515 generic_params: OptionWrappedGenericParamListGreen,
16516 of_kw: TerminalOfGreen,
16517 trait_path: ExprPathGreen,
16518 body: MaybeImplBodyGreen,
16519 ) -> ItemImplGreen {
16520 let children: Vec<GreenId> = vec![
16521 attributes.0,
16522 visibility.0,
16523 impl_kw.0,
16524 name.0,
16525 generic_params.0,
16526 of_kw.0,
16527 trait_path.0,
16528 body.0,
16529 ];
16530 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16531 ItemImplGreen(
16532 Arc::new(GreenNode {
16533 kind: SyntaxKind::ItemImpl,
16534 details: GreenNodeDetails::Node { children, width },
16535 })
16536 .intern(db),
16537 )
16538 }
16539}
16540impl ItemImpl {
16541 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16542 AttributeList::from_syntax_node(db, self.children[0].clone())
16543 }
16544 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
16545 Visibility::from_syntax_node(db, self.children[1].clone())
16546 }
16547 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
16548 TerminalImpl::from_syntax_node(db, self.children[2].clone())
16549 }
16550 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16551 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
16552 }
16553 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
16554 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
16555 }
16556 pub fn of_kw(&self, db: &dyn SyntaxGroup) -> TerminalOf {
16557 TerminalOf::from_syntax_node(db, self.children[5].clone())
16558 }
16559 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
16560 ExprPath::from_syntax_node(db, self.children[6].clone())
16561 }
16562 pub fn body(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16563 MaybeImplBody::from_syntax_node(db, self.children[7].clone())
16564 }
16565}
16566#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16567pub struct ItemImplPtr(pub SyntaxStablePtrId);
16568impl ItemImplPtr {
16569 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
16570 let ptr = self.0.lookup_intern(db);
16571 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
16572 TerminalIdentifierGreen(key_fields[0])
16573 } else {
16574 panic!("Unexpected key field query on root.");
16575 }
16576 }
16577}
16578impl TypedStablePtr for ItemImplPtr {
16579 type SyntaxNode = ItemImpl;
16580 fn untyped(&self) -> SyntaxStablePtrId {
16581 self.0
16582 }
16583 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImpl {
16584 ItemImpl::from_syntax_node(db, self.0.lookup(db))
16585 }
16586}
16587impl From<ItemImplPtr> for SyntaxStablePtrId {
16588 fn from(ptr: ItemImplPtr) -> Self {
16589 ptr.untyped()
16590 }
16591}
16592#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16593pub struct ItemImplGreen(pub GreenId);
16594impl TypedSyntaxNode for ItemImpl {
16595 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImpl);
16596 type StablePtr = ItemImplPtr;
16597 type Green = ItemImplGreen;
16598 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16599 ItemImplGreen(
16600 Arc::new(GreenNode {
16601 kind: SyntaxKind::ItemImpl,
16602 details: GreenNodeDetails::Node {
16603 children: vec![
16604 AttributeList::missing(db).0,
16605 Visibility::missing(db).0,
16606 TerminalImpl::missing(db).0,
16607 TerminalIdentifier::missing(db).0,
16608 OptionWrappedGenericParamList::missing(db).0,
16609 TerminalOf::missing(db).0,
16610 ExprPath::missing(db).0,
16611 MaybeImplBody::missing(db).0,
16612 ],
16613 width: TextWidth::default(),
16614 },
16615 })
16616 .intern(db),
16617 )
16618 }
16619 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16620 let kind = node.kind(db);
16621 assert_eq!(
16622 kind,
16623 SyntaxKind::ItemImpl,
16624 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16625 kind,
16626 SyntaxKind::ItemImpl
16627 );
16628 let children = db.get_children(node.clone());
16629 Self { node, children }
16630 }
16631 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16632 let kind = node.kind(db);
16633 if kind == SyntaxKind::ItemImpl { Some(Self::from_syntax_node(db, node)) } else { None }
16634 }
16635 fn as_syntax_node(&self) -> SyntaxNode {
16636 self.node.clone()
16637 }
16638 fn stable_ptr(&self) -> Self::StablePtr {
16639 ItemImplPtr(self.node.0.stable_ptr)
16640 }
16641}
16642impl From<&ItemImpl> for SyntaxStablePtrId {
16643 fn from(node: &ItemImpl) -> Self {
16644 node.stable_ptr().untyped()
16645 }
16646}
16647#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16648pub struct ItemInlineMacro {
16649 node: SyntaxNode,
16650 children: Arc<[SyntaxNode]>,
16651}
16652impl ItemInlineMacro {
16653 pub const INDEX_ATTRIBUTES: usize = 0;
16654 pub const INDEX_NAME: usize = 1;
16655 pub const INDEX_BANG: usize = 2;
16656 pub const INDEX_ARGUMENTS: usize = 3;
16657 pub const INDEX_SEMICOLON: usize = 4;
16658 pub fn new_green(
16659 db: &dyn SyntaxGroup,
16660 attributes: AttributeListGreen,
16661 name: TerminalIdentifierGreen,
16662 bang: TerminalNotGreen,
16663 arguments: WrappedArgListGreen,
16664 semicolon: TerminalSemicolonGreen,
16665 ) -> ItemInlineMacroGreen {
16666 let children: Vec<GreenId> = vec![attributes.0, name.0, bang.0, arguments.0, semicolon.0];
16667 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16668 ItemInlineMacroGreen(
16669 Arc::new(GreenNode {
16670 kind: SyntaxKind::ItemInlineMacro,
16671 details: GreenNodeDetails::Node { children, width },
16672 })
16673 .intern(db),
16674 )
16675 }
16676}
16677impl ItemInlineMacro {
16678 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
16679 AttributeList::from_syntax_node(db, self.children[0].clone())
16680 }
16681 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
16682 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
16683 }
16684 pub fn bang(&self, db: &dyn SyntaxGroup) -> TerminalNot {
16685 TerminalNot::from_syntax_node(db, self.children[2].clone())
16686 }
16687 pub fn arguments(&self, db: &dyn SyntaxGroup) -> WrappedArgList {
16688 WrappedArgList::from_syntax_node(db, self.children[3].clone())
16689 }
16690 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
16691 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
16692 }
16693}
16694#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16695pub struct ItemInlineMacroPtr(pub SyntaxStablePtrId);
16696impl ItemInlineMacroPtr {}
16697impl TypedStablePtr for ItemInlineMacroPtr {
16698 type SyntaxNode = ItemInlineMacro;
16699 fn untyped(&self) -> SyntaxStablePtrId {
16700 self.0
16701 }
16702 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemInlineMacro {
16703 ItemInlineMacro::from_syntax_node(db, self.0.lookup(db))
16704 }
16705}
16706impl From<ItemInlineMacroPtr> for SyntaxStablePtrId {
16707 fn from(ptr: ItemInlineMacroPtr) -> Self {
16708 ptr.untyped()
16709 }
16710}
16711#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16712pub struct ItemInlineMacroGreen(pub GreenId);
16713impl TypedSyntaxNode for ItemInlineMacro {
16714 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemInlineMacro);
16715 type StablePtr = ItemInlineMacroPtr;
16716 type Green = ItemInlineMacroGreen;
16717 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16718 ItemInlineMacroGreen(
16719 Arc::new(GreenNode {
16720 kind: SyntaxKind::ItemInlineMacro,
16721 details: GreenNodeDetails::Node {
16722 children: vec![
16723 AttributeList::missing(db).0,
16724 TerminalIdentifier::missing(db).0,
16725 TerminalNot::missing(db).0,
16726 WrappedArgList::missing(db).0,
16727 TerminalSemicolon::missing(db).0,
16728 ],
16729 width: TextWidth::default(),
16730 },
16731 })
16732 .intern(db),
16733 )
16734 }
16735 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16736 let kind = node.kind(db);
16737 assert_eq!(
16738 kind,
16739 SyntaxKind::ItemInlineMacro,
16740 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16741 kind,
16742 SyntaxKind::ItemInlineMacro
16743 );
16744 let children = db.get_children(node.clone());
16745 Self { node, children }
16746 }
16747 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16748 let kind = node.kind(db);
16749 if kind == SyntaxKind::ItemInlineMacro {
16750 Some(Self::from_syntax_node(db, node))
16751 } else {
16752 None
16753 }
16754 }
16755 fn as_syntax_node(&self) -> SyntaxNode {
16756 self.node.clone()
16757 }
16758 fn stable_ptr(&self) -> Self::StablePtr {
16759 ItemInlineMacroPtr(self.node.0.stable_ptr)
16760 }
16761}
16762impl From<&ItemInlineMacro> for SyntaxStablePtrId {
16763 fn from(node: &ItemInlineMacro) -> Self {
16764 node.stable_ptr().untyped()
16765 }
16766}
16767#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16768pub struct ItemHeaderDoc {
16769 node: SyntaxNode,
16770 children: Arc<[SyntaxNode]>,
16771}
16772impl ItemHeaderDoc {
16773 pub const INDEX_EMPTY: usize = 0;
16774 pub fn new_green(db: &dyn SyntaxGroup, empty: TerminalEmptyGreen) -> ItemHeaderDocGreen {
16775 let children: Vec<GreenId> = vec![empty.0];
16776 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16777 ItemHeaderDocGreen(
16778 Arc::new(GreenNode {
16779 kind: SyntaxKind::ItemHeaderDoc,
16780 details: GreenNodeDetails::Node { children, width },
16781 })
16782 .intern(db),
16783 )
16784 }
16785}
16786impl ItemHeaderDoc {
16787 pub fn empty(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
16788 TerminalEmpty::from_syntax_node(db, self.children[0].clone())
16789 }
16790}
16791#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16792pub struct ItemHeaderDocPtr(pub SyntaxStablePtrId);
16793impl ItemHeaderDocPtr {}
16794impl TypedStablePtr for ItemHeaderDocPtr {
16795 type SyntaxNode = ItemHeaderDoc;
16796 fn untyped(&self) -> SyntaxStablePtrId {
16797 self.0
16798 }
16799 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemHeaderDoc {
16800 ItemHeaderDoc::from_syntax_node(db, self.0.lookup(db))
16801 }
16802}
16803impl From<ItemHeaderDocPtr> for SyntaxStablePtrId {
16804 fn from(ptr: ItemHeaderDocPtr) -> Self {
16805 ptr.untyped()
16806 }
16807}
16808#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16809pub struct ItemHeaderDocGreen(pub GreenId);
16810impl TypedSyntaxNode for ItemHeaderDoc {
16811 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemHeaderDoc);
16812 type StablePtr = ItemHeaderDocPtr;
16813 type Green = ItemHeaderDocGreen;
16814 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16815 ItemHeaderDocGreen(
16816 Arc::new(GreenNode {
16817 kind: SyntaxKind::ItemHeaderDoc,
16818 details: GreenNodeDetails::Node {
16819 children: vec![TerminalEmpty::missing(db).0],
16820 width: TextWidth::default(),
16821 },
16822 })
16823 .intern(db),
16824 )
16825 }
16826 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16827 let kind = node.kind(db);
16828 assert_eq!(
16829 kind,
16830 SyntaxKind::ItemHeaderDoc,
16831 "Unexpected SyntaxKind {:?}. Expected {:?}.",
16832 kind,
16833 SyntaxKind::ItemHeaderDoc
16834 );
16835 let children = db.get_children(node.clone());
16836 Self { node, children }
16837 }
16838 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16839 let kind = node.kind(db);
16840 if kind == SyntaxKind::ItemHeaderDoc {
16841 Some(Self::from_syntax_node(db, node))
16842 } else {
16843 None
16844 }
16845 }
16846 fn as_syntax_node(&self) -> SyntaxNode {
16847 self.node.clone()
16848 }
16849 fn stable_ptr(&self) -> Self::StablePtr {
16850 ItemHeaderDocPtr(self.node.0.stable_ptr)
16851 }
16852}
16853impl From<&ItemHeaderDoc> for SyntaxStablePtrId {
16854 fn from(node: &ItemHeaderDoc) -> Self {
16855 node.stable_ptr().untyped()
16856 }
16857}
16858#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16859pub enum MaybeImplBody {
16860 Some(ImplBody),
16861 None(TerminalSemicolon),
16862}
16863#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16864pub struct MaybeImplBodyPtr(pub SyntaxStablePtrId);
16865impl TypedStablePtr for MaybeImplBodyPtr {
16866 type SyntaxNode = MaybeImplBody;
16867 fn untyped(&self) -> SyntaxStablePtrId {
16868 self.0
16869 }
16870 fn lookup(&self, db: &dyn SyntaxGroup) -> MaybeImplBody {
16871 MaybeImplBody::from_syntax_node(db, self.0.lookup(db))
16872 }
16873}
16874impl From<MaybeImplBodyPtr> for SyntaxStablePtrId {
16875 fn from(ptr: MaybeImplBodyPtr) -> Self {
16876 ptr.untyped()
16877 }
16878}
16879impl From<ImplBodyPtr> for MaybeImplBodyPtr {
16880 fn from(value: ImplBodyPtr) -> Self {
16881 Self(value.0)
16882 }
16883}
16884impl From<TerminalSemicolonPtr> for MaybeImplBodyPtr {
16885 fn from(value: TerminalSemicolonPtr) -> Self {
16886 Self(value.0)
16887 }
16888}
16889impl From<ImplBodyGreen> for MaybeImplBodyGreen {
16890 fn from(value: ImplBodyGreen) -> Self {
16891 Self(value.0)
16892 }
16893}
16894impl From<TerminalSemicolonGreen> for MaybeImplBodyGreen {
16895 fn from(value: TerminalSemicolonGreen) -> Self {
16896 Self(value.0)
16897 }
16898}
16899#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16900pub struct MaybeImplBodyGreen(pub GreenId);
16901impl TypedSyntaxNode for MaybeImplBody {
16902 const OPTIONAL_KIND: Option<SyntaxKind> = None;
16903 type StablePtr = MaybeImplBodyPtr;
16904 type Green = MaybeImplBodyGreen;
16905 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
16906 panic!("No missing variant.");
16907 }
16908 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
16909 let kind = node.kind(db);
16910 match kind {
16911 SyntaxKind::ImplBody => MaybeImplBody::Some(ImplBody::from_syntax_node(db, node)),
16912 SyntaxKind::TerminalSemicolon => {
16913 MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node))
16914 }
16915 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "MaybeImplBody"),
16916 }
16917 }
16918 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
16919 let kind = node.kind(db);
16920 match kind {
16921 SyntaxKind::ImplBody => Some(MaybeImplBody::Some(ImplBody::from_syntax_node(db, node))),
16922 SyntaxKind::TerminalSemicolon => {
16923 Some(MaybeImplBody::None(TerminalSemicolon::from_syntax_node(db, node)))
16924 }
16925 _ => None,
16926 }
16927 }
16928 fn as_syntax_node(&self) -> SyntaxNode {
16929 match self {
16930 MaybeImplBody::Some(x) => x.as_syntax_node(),
16931 MaybeImplBody::None(x) => x.as_syntax_node(),
16932 }
16933 }
16934 fn stable_ptr(&self) -> Self::StablePtr {
16935 MaybeImplBodyPtr(self.as_syntax_node().0.stable_ptr)
16936 }
16937}
16938impl From<&MaybeImplBody> for SyntaxStablePtrId {
16939 fn from(node: &MaybeImplBody) -> Self {
16940 node.stable_ptr().untyped()
16941 }
16942}
16943impl MaybeImplBody {
16944 pub fn is_variant(kind: SyntaxKind) -> bool {
16946 matches!(kind, SyntaxKind::ImplBody | SyntaxKind::TerminalSemicolon)
16947 }
16948}
16949#[derive(Clone, Debug, Eq, Hash, PartialEq)]
16950pub struct ImplBody {
16951 node: SyntaxNode,
16952 children: Arc<[SyntaxNode]>,
16953}
16954impl ImplBody {
16955 pub const INDEX_LBRACE: usize = 0;
16956 pub const INDEX_ITEMS: usize = 1;
16957 pub const INDEX_RBRACE: usize = 2;
16958 pub fn new_green(
16959 db: &dyn SyntaxGroup,
16960 lbrace: TerminalLBraceGreen,
16961 items: ImplItemListGreen,
16962 rbrace: TerminalRBraceGreen,
16963 ) -> ImplBodyGreen {
16964 let children: Vec<GreenId> = vec![lbrace.0, items.0, rbrace.0];
16965 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
16966 ImplBodyGreen(
16967 Arc::new(GreenNode {
16968 kind: SyntaxKind::ImplBody,
16969 details: GreenNodeDetails::Node { children, width },
16970 })
16971 .intern(db),
16972 )
16973 }
16974}
16975impl ImplBody {
16976 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
16977 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
16978 }
16979 pub fn items(&self, db: &dyn SyntaxGroup) -> ImplItemList {
16980 ImplItemList::from_syntax_node(db, self.children[1].clone())
16981 }
16982 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
16983 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
16984 }
16985}
16986#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
16987pub struct ImplBodyPtr(pub SyntaxStablePtrId);
16988impl ImplBodyPtr {}
16989impl TypedStablePtr for ImplBodyPtr {
16990 type SyntaxNode = ImplBody;
16991 fn untyped(&self) -> SyntaxStablePtrId {
16992 self.0
16993 }
16994 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplBody {
16995 ImplBody::from_syntax_node(db, self.0.lookup(db))
16996 }
16997}
16998impl From<ImplBodyPtr> for SyntaxStablePtrId {
16999 fn from(ptr: ImplBodyPtr) -> Self {
17000 ptr.untyped()
17001 }
17002}
17003#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17004pub struct ImplBodyGreen(pub GreenId);
17005impl TypedSyntaxNode for ImplBody {
17006 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplBody);
17007 type StablePtr = ImplBodyPtr;
17008 type Green = ImplBodyGreen;
17009 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17010 ImplBodyGreen(
17011 Arc::new(GreenNode {
17012 kind: SyntaxKind::ImplBody,
17013 details: GreenNodeDetails::Node {
17014 children: vec![
17015 TerminalLBrace::missing(db).0,
17016 ImplItemList::missing(db).0,
17017 TerminalRBrace::missing(db).0,
17018 ],
17019 width: TextWidth::default(),
17020 },
17021 })
17022 .intern(db),
17023 )
17024 }
17025 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17026 let kind = node.kind(db);
17027 assert_eq!(
17028 kind,
17029 SyntaxKind::ImplBody,
17030 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17031 kind,
17032 SyntaxKind::ImplBody
17033 );
17034 let children = db.get_children(node.clone());
17035 Self { node, children }
17036 }
17037 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17038 let kind = node.kind(db);
17039 if kind == SyntaxKind::ImplBody { Some(Self::from_syntax_node(db, node)) } else { None }
17040 }
17041 fn as_syntax_node(&self) -> SyntaxNode {
17042 self.node.clone()
17043 }
17044 fn stable_ptr(&self) -> Self::StablePtr {
17045 ImplBodyPtr(self.node.0.stable_ptr)
17046 }
17047}
17048impl From<&ImplBody> for SyntaxStablePtrId {
17049 fn from(node: &ImplBody) -> Self {
17050 node.stable_ptr().untyped()
17051 }
17052}
17053#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17054pub struct ImplItemList(ElementList<ImplItem, 1>);
17055impl Deref for ImplItemList {
17056 type Target = ElementList<ImplItem, 1>;
17057 fn deref(&self) -> &Self::Target {
17058 &self.0
17059 }
17060}
17061impl ImplItemList {
17062 pub fn new_green(db: &dyn SyntaxGroup, children: Vec<ImplItemGreen>) -> ImplItemListGreen {
17063 let width = children.iter().map(|id| id.0.lookup_intern(db).width()).sum();
17064 ImplItemListGreen(
17065 Arc::new(GreenNode {
17066 kind: SyntaxKind::ImplItemList,
17067 details: GreenNodeDetails::Node {
17068 children: children.iter().map(|x| x.0).collect(),
17069 width,
17070 },
17071 })
17072 .intern(db),
17073 )
17074 }
17075}
17076#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17077pub struct ImplItemListPtr(pub SyntaxStablePtrId);
17078impl TypedStablePtr for ImplItemListPtr {
17079 type SyntaxNode = ImplItemList;
17080 fn untyped(&self) -> SyntaxStablePtrId {
17081 self.0
17082 }
17083 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemList {
17084 ImplItemList::from_syntax_node(db, self.0.lookup(db))
17085 }
17086}
17087impl From<ImplItemListPtr> for SyntaxStablePtrId {
17088 fn from(ptr: ImplItemListPtr) -> Self {
17089 ptr.untyped()
17090 }
17091}
17092#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17093pub struct ImplItemListGreen(pub GreenId);
17094impl TypedSyntaxNode for ImplItemList {
17095 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemList);
17096 type StablePtr = ImplItemListPtr;
17097 type Green = ImplItemListGreen;
17098 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17099 ImplItemListGreen(
17100 Arc::new(GreenNode {
17101 kind: SyntaxKind::ImplItemList,
17102 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
17103 })
17104 .intern(db),
17105 )
17106 }
17107 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17108 Self(ElementList::new(node))
17109 }
17110 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17111 if node.kind(db) == SyntaxKind::ImplItemList {
17112 Some(Self(ElementList::new(node)))
17113 } else {
17114 None
17115 }
17116 }
17117 fn as_syntax_node(&self) -> SyntaxNode {
17118 self.node.clone()
17119 }
17120 fn stable_ptr(&self) -> Self::StablePtr {
17121 ImplItemListPtr(self.node.0.stable_ptr)
17122 }
17123}
17124impl From<&ImplItemList> for SyntaxStablePtrId {
17125 fn from(node: &ImplItemList) -> Self {
17126 node.stable_ptr().untyped()
17127 }
17128}
17129#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17130pub enum ImplItem {
17131 Function(FunctionWithBody),
17132 Type(ItemTypeAlias),
17133 Constant(ItemConstant),
17134 Impl(ItemImplAlias),
17135 Module(ItemModule),
17136 Use(ItemUse),
17137 ExternFunction(ItemExternFunction),
17138 ExternType(ItemExternType),
17139 Trait(ItemTrait),
17140 Struct(ItemStruct),
17141 Enum(ItemEnum),
17142 Missing(ImplItemMissing),
17143}
17144#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17145pub struct ImplItemPtr(pub SyntaxStablePtrId);
17146impl TypedStablePtr for ImplItemPtr {
17147 type SyntaxNode = ImplItem;
17148 fn untyped(&self) -> SyntaxStablePtrId {
17149 self.0
17150 }
17151 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItem {
17152 ImplItem::from_syntax_node(db, self.0.lookup(db))
17153 }
17154}
17155impl From<ImplItemPtr> for SyntaxStablePtrId {
17156 fn from(ptr: ImplItemPtr) -> Self {
17157 ptr.untyped()
17158 }
17159}
17160impl From<FunctionWithBodyPtr> for ImplItemPtr {
17161 fn from(value: FunctionWithBodyPtr) -> Self {
17162 Self(value.0)
17163 }
17164}
17165impl From<ItemTypeAliasPtr> for ImplItemPtr {
17166 fn from(value: ItemTypeAliasPtr) -> Self {
17167 Self(value.0)
17168 }
17169}
17170impl From<ItemConstantPtr> for ImplItemPtr {
17171 fn from(value: ItemConstantPtr) -> Self {
17172 Self(value.0)
17173 }
17174}
17175impl From<ItemImplAliasPtr> for ImplItemPtr {
17176 fn from(value: ItemImplAliasPtr) -> Self {
17177 Self(value.0)
17178 }
17179}
17180impl From<ItemModulePtr> for ImplItemPtr {
17181 fn from(value: ItemModulePtr) -> Self {
17182 Self(value.0)
17183 }
17184}
17185impl From<ItemUsePtr> for ImplItemPtr {
17186 fn from(value: ItemUsePtr) -> Self {
17187 Self(value.0)
17188 }
17189}
17190impl From<ItemExternFunctionPtr> for ImplItemPtr {
17191 fn from(value: ItemExternFunctionPtr) -> Self {
17192 Self(value.0)
17193 }
17194}
17195impl From<ItemExternTypePtr> for ImplItemPtr {
17196 fn from(value: ItemExternTypePtr) -> Self {
17197 Self(value.0)
17198 }
17199}
17200impl From<ItemTraitPtr> for ImplItemPtr {
17201 fn from(value: ItemTraitPtr) -> Self {
17202 Self(value.0)
17203 }
17204}
17205impl From<ItemStructPtr> for ImplItemPtr {
17206 fn from(value: ItemStructPtr) -> Self {
17207 Self(value.0)
17208 }
17209}
17210impl From<ItemEnumPtr> for ImplItemPtr {
17211 fn from(value: ItemEnumPtr) -> Self {
17212 Self(value.0)
17213 }
17214}
17215impl From<ImplItemMissingPtr> for ImplItemPtr {
17216 fn from(value: ImplItemMissingPtr) -> Self {
17217 Self(value.0)
17218 }
17219}
17220impl From<FunctionWithBodyGreen> for ImplItemGreen {
17221 fn from(value: FunctionWithBodyGreen) -> Self {
17222 Self(value.0)
17223 }
17224}
17225impl From<ItemTypeAliasGreen> for ImplItemGreen {
17226 fn from(value: ItemTypeAliasGreen) -> Self {
17227 Self(value.0)
17228 }
17229}
17230impl From<ItemConstantGreen> for ImplItemGreen {
17231 fn from(value: ItemConstantGreen) -> Self {
17232 Self(value.0)
17233 }
17234}
17235impl From<ItemImplAliasGreen> for ImplItemGreen {
17236 fn from(value: ItemImplAliasGreen) -> Self {
17237 Self(value.0)
17238 }
17239}
17240impl From<ItemModuleGreen> for ImplItemGreen {
17241 fn from(value: ItemModuleGreen) -> Self {
17242 Self(value.0)
17243 }
17244}
17245impl From<ItemUseGreen> for ImplItemGreen {
17246 fn from(value: ItemUseGreen) -> Self {
17247 Self(value.0)
17248 }
17249}
17250impl From<ItemExternFunctionGreen> for ImplItemGreen {
17251 fn from(value: ItemExternFunctionGreen) -> Self {
17252 Self(value.0)
17253 }
17254}
17255impl From<ItemExternTypeGreen> for ImplItemGreen {
17256 fn from(value: ItemExternTypeGreen) -> Self {
17257 Self(value.0)
17258 }
17259}
17260impl From<ItemTraitGreen> for ImplItemGreen {
17261 fn from(value: ItemTraitGreen) -> Self {
17262 Self(value.0)
17263 }
17264}
17265impl From<ItemStructGreen> for ImplItemGreen {
17266 fn from(value: ItemStructGreen) -> Self {
17267 Self(value.0)
17268 }
17269}
17270impl From<ItemEnumGreen> for ImplItemGreen {
17271 fn from(value: ItemEnumGreen) -> Self {
17272 Self(value.0)
17273 }
17274}
17275impl From<ImplItemMissingGreen> for ImplItemGreen {
17276 fn from(value: ImplItemMissingGreen) -> Self {
17277 Self(value.0)
17278 }
17279}
17280#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17281pub struct ImplItemGreen(pub GreenId);
17282impl TypedSyntaxNode for ImplItem {
17283 const OPTIONAL_KIND: Option<SyntaxKind> = None;
17284 type StablePtr = ImplItemPtr;
17285 type Green = ImplItemGreen;
17286 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17287 ImplItemGreen(ImplItemMissing::missing(db).0)
17288 }
17289 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17290 let kind = node.kind(db);
17291 match kind {
17292 SyntaxKind::FunctionWithBody => {
17293 ImplItem::Function(FunctionWithBody::from_syntax_node(db, node))
17294 }
17295 SyntaxKind::ItemTypeAlias => ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)),
17296 SyntaxKind::ItemConstant => {
17297 ImplItem::Constant(ItemConstant::from_syntax_node(db, node))
17298 }
17299 SyntaxKind::ItemImplAlias => ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)),
17300 SyntaxKind::ItemModule => ImplItem::Module(ItemModule::from_syntax_node(db, node)),
17301 SyntaxKind::ItemUse => ImplItem::Use(ItemUse::from_syntax_node(db, node)),
17302 SyntaxKind::ItemExternFunction => {
17303 ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node))
17304 }
17305 SyntaxKind::ItemExternType => {
17306 ImplItem::ExternType(ItemExternType::from_syntax_node(db, node))
17307 }
17308 SyntaxKind::ItemTrait => ImplItem::Trait(ItemTrait::from_syntax_node(db, node)),
17309 SyntaxKind::ItemStruct => ImplItem::Struct(ItemStruct::from_syntax_node(db, node)),
17310 SyntaxKind::ItemEnum => ImplItem::Enum(ItemEnum::from_syntax_node(db, node)),
17311 SyntaxKind::ImplItemMissing => {
17312 ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node))
17313 }
17314 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "ImplItem"),
17315 }
17316 }
17317 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17318 let kind = node.kind(db);
17319 match kind {
17320 SyntaxKind::FunctionWithBody => {
17321 Some(ImplItem::Function(FunctionWithBody::from_syntax_node(db, node)))
17322 }
17323 SyntaxKind::ItemTypeAlias => {
17324 Some(ImplItem::Type(ItemTypeAlias::from_syntax_node(db, node)))
17325 }
17326 SyntaxKind::ItemConstant => {
17327 Some(ImplItem::Constant(ItemConstant::from_syntax_node(db, node)))
17328 }
17329 SyntaxKind::ItemImplAlias => {
17330 Some(ImplItem::Impl(ItemImplAlias::from_syntax_node(db, node)))
17331 }
17332 SyntaxKind::ItemModule => {
17333 Some(ImplItem::Module(ItemModule::from_syntax_node(db, node)))
17334 }
17335 SyntaxKind::ItemUse => Some(ImplItem::Use(ItemUse::from_syntax_node(db, node))),
17336 SyntaxKind::ItemExternFunction => {
17337 Some(ImplItem::ExternFunction(ItemExternFunction::from_syntax_node(db, node)))
17338 }
17339 SyntaxKind::ItemExternType => {
17340 Some(ImplItem::ExternType(ItemExternType::from_syntax_node(db, node)))
17341 }
17342 SyntaxKind::ItemTrait => Some(ImplItem::Trait(ItemTrait::from_syntax_node(db, node))),
17343 SyntaxKind::ItemStruct => {
17344 Some(ImplItem::Struct(ItemStruct::from_syntax_node(db, node)))
17345 }
17346 SyntaxKind::ItemEnum => Some(ImplItem::Enum(ItemEnum::from_syntax_node(db, node))),
17347 SyntaxKind::ImplItemMissing => {
17348 Some(ImplItem::Missing(ImplItemMissing::from_syntax_node(db, node)))
17349 }
17350 _ => None,
17351 }
17352 }
17353 fn as_syntax_node(&self) -> SyntaxNode {
17354 match self {
17355 ImplItem::Function(x) => x.as_syntax_node(),
17356 ImplItem::Type(x) => x.as_syntax_node(),
17357 ImplItem::Constant(x) => x.as_syntax_node(),
17358 ImplItem::Impl(x) => x.as_syntax_node(),
17359 ImplItem::Module(x) => x.as_syntax_node(),
17360 ImplItem::Use(x) => x.as_syntax_node(),
17361 ImplItem::ExternFunction(x) => x.as_syntax_node(),
17362 ImplItem::ExternType(x) => x.as_syntax_node(),
17363 ImplItem::Trait(x) => x.as_syntax_node(),
17364 ImplItem::Struct(x) => x.as_syntax_node(),
17365 ImplItem::Enum(x) => x.as_syntax_node(),
17366 ImplItem::Missing(x) => x.as_syntax_node(),
17367 }
17368 }
17369 fn stable_ptr(&self) -> Self::StablePtr {
17370 ImplItemPtr(self.as_syntax_node().0.stable_ptr)
17371 }
17372}
17373impl From<&ImplItem> for SyntaxStablePtrId {
17374 fn from(node: &ImplItem) -> Self {
17375 node.stable_ptr().untyped()
17376 }
17377}
17378impl ImplItem {
17379 pub fn is_variant(kind: SyntaxKind) -> bool {
17381 matches!(
17382 kind,
17383 SyntaxKind::FunctionWithBody
17384 | SyntaxKind::ItemTypeAlias
17385 | SyntaxKind::ItemConstant
17386 | SyntaxKind::ItemImplAlias
17387 | SyntaxKind::ItemModule
17388 | SyntaxKind::ItemUse
17389 | SyntaxKind::ItemExternFunction
17390 | SyntaxKind::ItemExternType
17391 | SyntaxKind::ItemTrait
17392 | SyntaxKind::ItemStruct
17393 | SyntaxKind::ItemEnum
17394 | SyntaxKind::ImplItemMissing
17395 )
17396 }
17397}
17398#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17399pub struct ImplItemMissing {
17400 node: SyntaxNode,
17401 children: Arc<[SyntaxNode]>,
17402}
17403impl ImplItemMissing {
17404 pub fn new_green(db: &dyn SyntaxGroup) -> ImplItemMissingGreen {
17405 let children: Vec<GreenId> = vec![];
17406 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17407 ImplItemMissingGreen(
17408 Arc::new(GreenNode {
17409 kind: SyntaxKind::ImplItemMissing,
17410 details: GreenNodeDetails::Node { children, width },
17411 })
17412 .intern(db),
17413 )
17414 }
17415}
17416impl ImplItemMissing {}
17417#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17418pub struct ImplItemMissingPtr(pub SyntaxStablePtrId);
17419impl ImplItemMissingPtr {}
17420impl TypedStablePtr for ImplItemMissingPtr {
17421 type SyntaxNode = ImplItemMissing;
17422 fn untyped(&self) -> SyntaxStablePtrId {
17423 self.0
17424 }
17425 fn lookup(&self, db: &dyn SyntaxGroup) -> ImplItemMissing {
17426 ImplItemMissing::from_syntax_node(db, self.0.lookup(db))
17427 }
17428}
17429impl From<ImplItemMissingPtr> for SyntaxStablePtrId {
17430 fn from(ptr: ImplItemMissingPtr) -> Self {
17431 ptr.untyped()
17432 }
17433}
17434#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17435pub struct ImplItemMissingGreen(pub GreenId);
17436impl TypedSyntaxNode for ImplItemMissing {
17437 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ImplItemMissing);
17438 type StablePtr = ImplItemMissingPtr;
17439 type Green = ImplItemMissingGreen;
17440 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17441 ImplItemMissingGreen(
17442 Arc::new(GreenNode {
17443 kind: SyntaxKind::ImplItemMissing,
17444 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
17445 })
17446 .intern(db),
17447 )
17448 }
17449 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17450 let kind = node.kind(db);
17451 assert_eq!(
17452 kind,
17453 SyntaxKind::ImplItemMissing,
17454 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17455 kind,
17456 SyntaxKind::ImplItemMissing
17457 );
17458 let children = db.get_children(node.clone());
17459 Self { node, children }
17460 }
17461 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17462 let kind = node.kind(db);
17463 if kind == SyntaxKind::ImplItemMissing {
17464 Some(Self::from_syntax_node(db, node))
17465 } else {
17466 None
17467 }
17468 }
17469 fn as_syntax_node(&self) -> SyntaxNode {
17470 self.node.clone()
17471 }
17472 fn stable_ptr(&self) -> Self::StablePtr {
17473 ImplItemMissingPtr(self.node.0.stable_ptr)
17474 }
17475}
17476impl From<&ImplItemMissing> for SyntaxStablePtrId {
17477 fn from(node: &ImplItemMissing) -> Self {
17478 node.stable_ptr().untyped()
17479 }
17480}
17481#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17482pub struct ItemImplAlias {
17483 node: SyntaxNode,
17484 children: Arc<[SyntaxNode]>,
17485}
17486impl ItemImplAlias {
17487 pub const INDEX_ATTRIBUTES: usize = 0;
17488 pub const INDEX_VISIBILITY: usize = 1;
17489 pub const INDEX_IMPL_KW: usize = 2;
17490 pub const INDEX_NAME: usize = 3;
17491 pub const INDEX_GENERIC_PARAMS: usize = 4;
17492 pub const INDEX_EQ: usize = 5;
17493 pub const INDEX_IMPL_PATH: usize = 6;
17494 pub const INDEX_SEMICOLON: usize = 7;
17495 pub fn new_green(
17496 db: &dyn SyntaxGroup,
17497 attributes: AttributeListGreen,
17498 visibility: VisibilityGreen,
17499 impl_kw: TerminalImplGreen,
17500 name: TerminalIdentifierGreen,
17501 generic_params: OptionWrappedGenericParamListGreen,
17502 eq: TerminalEqGreen,
17503 impl_path: ExprPathGreen,
17504 semicolon: TerminalSemicolonGreen,
17505 ) -> ItemImplAliasGreen {
17506 let children: Vec<GreenId> = vec![
17507 attributes.0,
17508 visibility.0,
17509 impl_kw.0,
17510 name.0,
17511 generic_params.0,
17512 eq.0,
17513 impl_path.0,
17514 semicolon.0,
17515 ];
17516 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17517 ItemImplAliasGreen(
17518 Arc::new(GreenNode {
17519 kind: SyntaxKind::ItemImplAlias,
17520 details: GreenNodeDetails::Node { children, width },
17521 })
17522 .intern(db),
17523 )
17524 }
17525}
17526impl ItemImplAlias {
17527 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17528 AttributeList::from_syntax_node(db, self.children[0].clone())
17529 }
17530 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17531 Visibility::from_syntax_node(db, self.children[1].clone())
17532 }
17533 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
17534 TerminalImpl::from_syntax_node(db, self.children[2].clone())
17535 }
17536 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17537 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17538 }
17539 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17540 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17541 }
17542 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
17543 TerminalEq::from_syntax_node(db, self.children[5].clone())
17544 }
17545 pub fn impl_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
17546 ExprPath::from_syntax_node(db, self.children[6].clone())
17547 }
17548 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
17549 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
17550 }
17551}
17552#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17553pub struct ItemImplAliasPtr(pub SyntaxStablePtrId);
17554impl ItemImplAliasPtr {
17555 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17556 let ptr = self.0.lookup_intern(db);
17557 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17558 TerminalIdentifierGreen(key_fields[0])
17559 } else {
17560 panic!("Unexpected key field query on root.");
17561 }
17562 }
17563}
17564impl TypedStablePtr for ItemImplAliasPtr {
17565 type SyntaxNode = ItemImplAlias;
17566 fn untyped(&self) -> SyntaxStablePtrId {
17567 self.0
17568 }
17569 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemImplAlias {
17570 ItemImplAlias::from_syntax_node(db, self.0.lookup(db))
17571 }
17572}
17573impl From<ItemImplAliasPtr> for SyntaxStablePtrId {
17574 fn from(ptr: ItemImplAliasPtr) -> Self {
17575 ptr.untyped()
17576 }
17577}
17578#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17579pub struct ItemImplAliasGreen(pub GreenId);
17580impl TypedSyntaxNode for ItemImplAlias {
17581 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemImplAlias);
17582 type StablePtr = ItemImplAliasPtr;
17583 type Green = ItemImplAliasGreen;
17584 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17585 ItemImplAliasGreen(
17586 Arc::new(GreenNode {
17587 kind: SyntaxKind::ItemImplAlias,
17588 details: GreenNodeDetails::Node {
17589 children: vec![
17590 AttributeList::missing(db).0,
17591 Visibility::missing(db).0,
17592 TerminalImpl::missing(db).0,
17593 TerminalIdentifier::missing(db).0,
17594 OptionWrappedGenericParamList::missing(db).0,
17595 TerminalEq::missing(db).0,
17596 ExprPath::missing(db).0,
17597 TerminalSemicolon::missing(db).0,
17598 ],
17599 width: TextWidth::default(),
17600 },
17601 })
17602 .intern(db),
17603 )
17604 }
17605 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17606 let kind = node.kind(db);
17607 assert_eq!(
17608 kind,
17609 SyntaxKind::ItemImplAlias,
17610 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17611 kind,
17612 SyntaxKind::ItemImplAlias
17613 );
17614 let children = db.get_children(node.clone());
17615 Self { node, children }
17616 }
17617 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17618 let kind = node.kind(db);
17619 if kind == SyntaxKind::ItemImplAlias {
17620 Some(Self::from_syntax_node(db, node))
17621 } else {
17622 None
17623 }
17624 }
17625 fn as_syntax_node(&self) -> SyntaxNode {
17626 self.node.clone()
17627 }
17628 fn stable_ptr(&self) -> Self::StablePtr {
17629 ItemImplAliasPtr(self.node.0.stable_ptr)
17630 }
17631}
17632impl From<&ItemImplAlias> for SyntaxStablePtrId {
17633 fn from(node: &ItemImplAlias) -> Self {
17634 node.stable_ptr().untyped()
17635 }
17636}
17637#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17638pub struct ItemStruct {
17639 node: SyntaxNode,
17640 children: Arc<[SyntaxNode]>,
17641}
17642impl ItemStruct {
17643 pub const INDEX_ATTRIBUTES: usize = 0;
17644 pub const INDEX_VISIBILITY: usize = 1;
17645 pub const INDEX_STRUCT_KW: usize = 2;
17646 pub const INDEX_NAME: usize = 3;
17647 pub const INDEX_GENERIC_PARAMS: usize = 4;
17648 pub const INDEX_LBRACE: usize = 5;
17649 pub const INDEX_MEMBERS: usize = 6;
17650 pub const INDEX_RBRACE: usize = 7;
17651 pub fn new_green(
17652 db: &dyn SyntaxGroup,
17653 attributes: AttributeListGreen,
17654 visibility: VisibilityGreen,
17655 struct_kw: TerminalStructGreen,
17656 name: TerminalIdentifierGreen,
17657 generic_params: OptionWrappedGenericParamListGreen,
17658 lbrace: TerminalLBraceGreen,
17659 members: MemberListGreen,
17660 rbrace: TerminalRBraceGreen,
17661 ) -> ItemStructGreen {
17662 let children: Vec<GreenId> = vec![
17663 attributes.0,
17664 visibility.0,
17665 struct_kw.0,
17666 name.0,
17667 generic_params.0,
17668 lbrace.0,
17669 members.0,
17670 rbrace.0,
17671 ];
17672 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17673 ItemStructGreen(
17674 Arc::new(GreenNode {
17675 kind: SyntaxKind::ItemStruct,
17676 details: GreenNodeDetails::Node { children, width },
17677 })
17678 .intern(db),
17679 )
17680 }
17681}
17682impl ItemStruct {
17683 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17684 AttributeList::from_syntax_node(db, self.children[0].clone())
17685 }
17686 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17687 Visibility::from_syntax_node(db, self.children[1].clone())
17688 }
17689 pub fn struct_kw(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
17690 TerminalStruct::from_syntax_node(db, self.children[2].clone())
17691 }
17692 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17693 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17694 }
17695 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17696 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17697 }
17698 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17699 TerminalLBrace::from_syntax_node(db, self.children[5].clone())
17700 }
17701 pub fn members(&self, db: &dyn SyntaxGroup) -> MemberList {
17702 MemberList::from_syntax_node(db, self.children[6].clone())
17703 }
17704 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17705 TerminalRBrace::from_syntax_node(db, self.children[7].clone())
17706 }
17707}
17708#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17709pub struct ItemStructPtr(pub SyntaxStablePtrId);
17710impl ItemStructPtr {
17711 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17712 let ptr = self.0.lookup_intern(db);
17713 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17714 TerminalIdentifierGreen(key_fields[0])
17715 } else {
17716 panic!("Unexpected key field query on root.");
17717 }
17718 }
17719}
17720impl TypedStablePtr for ItemStructPtr {
17721 type SyntaxNode = ItemStruct;
17722 fn untyped(&self) -> SyntaxStablePtrId {
17723 self.0
17724 }
17725 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemStruct {
17726 ItemStruct::from_syntax_node(db, self.0.lookup(db))
17727 }
17728}
17729impl From<ItemStructPtr> for SyntaxStablePtrId {
17730 fn from(ptr: ItemStructPtr) -> Self {
17731 ptr.untyped()
17732 }
17733}
17734#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17735pub struct ItemStructGreen(pub GreenId);
17736impl TypedSyntaxNode for ItemStruct {
17737 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemStruct);
17738 type StablePtr = ItemStructPtr;
17739 type Green = ItemStructGreen;
17740 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17741 ItemStructGreen(
17742 Arc::new(GreenNode {
17743 kind: SyntaxKind::ItemStruct,
17744 details: GreenNodeDetails::Node {
17745 children: vec![
17746 AttributeList::missing(db).0,
17747 Visibility::missing(db).0,
17748 TerminalStruct::missing(db).0,
17749 TerminalIdentifier::missing(db).0,
17750 OptionWrappedGenericParamList::missing(db).0,
17751 TerminalLBrace::missing(db).0,
17752 MemberList::missing(db).0,
17753 TerminalRBrace::missing(db).0,
17754 ],
17755 width: TextWidth::default(),
17756 },
17757 })
17758 .intern(db),
17759 )
17760 }
17761 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17762 let kind = node.kind(db);
17763 assert_eq!(
17764 kind,
17765 SyntaxKind::ItemStruct,
17766 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17767 kind,
17768 SyntaxKind::ItemStruct
17769 );
17770 let children = db.get_children(node.clone());
17771 Self { node, children }
17772 }
17773 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17774 let kind = node.kind(db);
17775 if kind == SyntaxKind::ItemStruct { Some(Self::from_syntax_node(db, node)) } else { None }
17776 }
17777 fn as_syntax_node(&self) -> SyntaxNode {
17778 self.node.clone()
17779 }
17780 fn stable_ptr(&self) -> Self::StablePtr {
17781 ItemStructPtr(self.node.0.stable_ptr)
17782 }
17783}
17784impl From<&ItemStruct> for SyntaxStablePtrId {
17785 fn from(node: &ItemStruct) -> Self {
17786 node.stable_ptr().untyped()
17787 }
17788}
17789#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17790pub struct ItemEnum {
17791 node: SyntaxNode,
17792 children: Arc<[SyntaxNode]>,
17793}
17794impl ItemEnum {
17795 pub const INDEX_ATTRIBUTES: usize = 0;
17796 pub const INDEX_VISIBILITY: usize = 1;
17797 pub const INDEX_ENUM_KW: usize = 2;
17798 pub const INDEX_NAME: usize = 3;
17799 pub const INDEX_GENERIC_PARAMS: usize = 4;
17800 pub const INDEX_LBRACE: usize = 5;
17801 pub const INDEX_VARIANTS: usize = 6;
17802 pub const INDEX_RBRACE: usize = 7;
17803 pub fn new_green(
17804 db: &dyn SyntaxGroup,
17805 attributes: AttributeListGreen,
17806 visibility: VisibilityGreen,
17807 enum_kw: TerminalEnumGreen,
17808 name: TerminalIdentifierGreen,
17809 generic_params: OptionWrappedGenericParamListGreen,
17810 lbrace: TerminalLBraceGreen,
17811 variants: VariantListGreen,
17812 rbrace: TerminalRBraceGreen,
17813 ) -> ItemEnumGreen {
17814 let children: Vec<GreenId> = vec![
17815 attributes.0,
17816 visibility.0,
17817 enum_kw.0,
17818 name.0,
17819 generic_params.0,
17820 lbrace.0,
17821 variants.0,
17822 rbrace.0,
17823 ];
17824 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17825 ItemEnumGreen(
17826 Arc::new(GreenNode {
17827 kind: SyntaxKind::ItemEnum,
17828 details: GreenNodeDetails::Node { children, width },
17829 })
17830 .intern(db),
17831 )
17832 }
17833}
17834impl ItemEnum {
17835 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17836 AttributeList::from_syntax_node(db, self.children[0].clone())
17837 }
17838 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17839 Visibility::from_syntax_node(db, self.children[1].clone())
17840 }
17841 pub fn enum_kw(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
17842 TerminalEnum::from_syntax_node(db, self.children[2].clone())
17843 }
17844 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17845 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17846 }
17847 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
17848 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
17849 }
17850 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
17851 TerminalLBrace::from_syntax_node(db, self.children[5].clone())
17852 }
17853 pub fn variants(&self, db: &dyn SyntaxGroup) -> VariantList {
17854 VariantList::from_syntax_node(db, self.children[6].clone())
17855 }
17856 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
17857 TerminalRBrace::from_syntax_node(db, self.children[7].clone())
17858 }
17859}
17860#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17861pub struct ItemEnumPtr(pub SyntaxStablePtrId);
17862impl ItemEnumPtr {
17863 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
17864 let ptr = self.0.lookup_intern(db);
17865 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
17866 TerminalIdentifierGreen(key_fields[0])
17867 } else {
17868 panic!("Unexpected key field query on root.");
17869 }
17870 }
17871}
17872impl TypedStablePtr for ItemEnumPtr {
17873 type SyntaxNode = ItemEnum;
17874 fn untyped(&self) -> SyntaxStablePtrId {
17875 self.0
17876 }
17877 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemEnum {
17878 ItemEnum::from_syntax_node(db, self.0.lookup(db))
17879 }
17880}
17881impl From<ItemEnumPtr> for SyntaxStablePtrId {
17882 fn from(ptr: ItemEnumPtr) -> Self {
17883 ptr.untyped()
17884 }
17885}
17886#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
17887pub struct ItemEnumGreen(pub GreenId);
17888impl TypedSyntaxNode for ItemEnum {
17889 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemEnum);
17890 type StablePtr = ItemEnumPtr;
17891 type Green = ItemEnumGreen;
17892 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
17893 ItemEnumGreen(
17894 Arc::new(GreenNode {
17895 kind: SyntaxKind::ItemEnum,
17896 details: GreenNodeDetails::Node {
17897 children: vec![
17898 AttributeList::missing(db).0,
17899 Visibility::missing(db).0,
17900 TerminalEnum::missing(db).0,
17901 TerminalIdentifier::missing(db).0,
17902 OptionWrappedGenericParamList::missing(db).0,
17903 TerminalLBrace::missing(db).0,
17904 VariantList::missing(db).0,
17905 TerminalRBrace::missing(db).0,
17906 ],
17907 width: TextWidth::default(),
17908 },
17909 })
17910 .intern(db),
17911 )
17912 }
17913 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
17914 let kind = node.kind(db);
17915 assert_eq!(
17916 kind,
17917 SyntaxKind::ItemEnum,
17918 "Unexpected SyntaxKind {:?}. Expected {:?}.",
17919 kind,
17920 SyntaxKind::ItemEnum
17921 );
17922 let children = db.get_children(node.clone());
17923 Self { node, children }
17924 }
17925 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
17926 let kind = node.kind(db);
17927 if kind == SyntaxKind::ItemEnum { Some(Self::from_syntax_node(db, node)) } else { None }
17928 }
17929 fn as_syntax_node(&self) -> SyntaxNode {
17930 self.node.clone()
17931 }
17932 fn stable_ptr(&self) -> Self::StablePtr {
17933 ItemEnumPtr(self.node.0.stable_ptr)
17934 }
17935}
17936impl From<&ItemEnum> for SyntaxStablePtrId {
17937 fn from(node: &ItemEnum) -> Self {
17938 node.stable_ptr().untyped()
17939 }
17940}
17941#[derive(Clone, Debug, Eq, Hash, PartialEq)]
17942pub struct ItemTypeAlias {
17943 node: SyntaxNode,
17944 children: Arc<[SyntaxNode]>,
17945}
17946impl ItemTypeAlias {
17947 pub const INDEX_ATTRIBUTES: usize = 0;
17948 pub const INDEX_VISIBILITY: usize = 1;
17949 pub const INDEX_TYPE_KW: usize = 2;
17950 pub const INDEX_NAME: usize = 3;
17951 pub const INDEX_GENERIC_PARAMS: usize = 4;
17952 pub const INDEX_EQ: usize = 5;
17953 pub const INDEX_TY: usize = 6;
17954 pub const INDEX_SEMICOLON: usize = 7;
17955 pub fn new_green(
17956 db: &dyn SyntaxGroup,
17957 attributes: AttributeListGreen,
17958 visibility: VisibilityGreen,
17959 type_kw: TerminalTypeGreen,
17960 name: TerminalIdentifierGreen,
17961 generic_params: OptionWrappedGenericParamListGreen,
17962 eq: TerminalEqGreen,
17963 ty: ExprGreen,
17964 semicolon: TerminalSemicolonGreen,
17965 ) -> ItemTypeAliasGreen {
17966 let children: Vec<GreenId> = vec![
17967 attributes.0,
17968 visibility.0,
17969 type_kw.0,
17970 name.0,
17971 generic_params.0,
17972 eq.0,
17973 ty.0,
17974 semicolon.0,
17975 ];
17976 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
17977 ItemTypeAliasGreen(
17978 Arc::new(GreenNode {
17979 kind: SyntaxKind::ItemTypeAlias,
17980 details: GreenNodeDetails::Node { children, width },
17981 })
17982 .intern(db),
17983 )
17984 }
17985}
17986impl ItemTypeAlias {
17987 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
17988 AttributeList::from_syntax_node(db, self.children[0].clone())
17989 }
17990 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
17991 Visibility::from_syntax_node(db, self.children[1].clone())
17992 }
17993 pub fn type_kw(&self, db: &dyn SyntaxGroup) -> TerminalType {
17994 TerminalType::from_syntax_node(db, self.children[2].clone())
17995 }
17996 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
17997 TerminalIdentifier::from_syntax_node(db, self.children[3].clone())
17998 }
17999 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
18000 OptionWrappedGenericParamList::from_syntax_node(db, self.children[4].clone())
18001 }
18002 pub fn eq(&self, db: &dyn SyntaxGroup) -> TerminalEq {
18003 TerminalEq::from_syntax_node(db, self.children[5].clone())
18004 }
18005 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
18006 Expr::from_syntax_node(db, self.children[6].clone())
18007 }
18008 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
18009 TerminalSemicolon::from_syntax_node(db, self.children[7].clone())
18010 }
18011}
18012#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18013pub struct ItemTypeAliasPtr(pub SyntaxStablePtrId);
18014impl ItemTypeAliasPtr {
18015 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
18016 let ptr = self.0.lookup_intern(db);
18017 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18018 TerminalIdentifierGreen(key_fields[0])
18019 } else {
18020 panic!("Unexpected key field query on root.");
18021 }
18022 }
18023}
18024impl TypedStablePtr for ItemTypeAliasPtr {
18025 type SyntaxNode = ItemTypeAlias;
18026 fn untyped(&self) -> SyntaxStablePtrId {
18027 self.0
18028 }
18029 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemTypeAlias {
18030 ItemTypeAlias::from_syntax_node(db, self.0.lookup(db))
18031 }
18032}
18033impl From<ItemTypeAliasPtr> for SyntaxStablePtrId {
18034 fn from(ptr: ItemTypeAliasPtr) -> Self {
18035 ptr.untyped()
18036 }
18037}
18038#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18039pub struct ItemTypeAliasGreen(pub GreenId);
18040impl TypedSyntaxNode for ItemTypeAlias {
18041 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemTypeAlias);
18042 type StablePtr = ItemTypeAliasPtr;
18043 type Green = ItemTypeAliasGreen;
18044 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18045 ItemTypeAliasGreen(
18046 Arc::new(GreenNode {
18047 kind: SyntaxKind::ItemTypeAlias,
18048 details: GreenNodeDetails::Node {
18049 children: vec![
18050 AttributeList::missing(db).0,
18051 Visibility::missing(db).0,
18052 TerminalType::missing(db).0,
18053 TerminalIdentifier::missing(db).0,
18054 OptionWrappedGenericParamList::missing(db).0,
18055 TerminalEq::missing(db).0,
18056 Expr::missing(db).0,
18057 TerminalSemicolon::missing(db).0,
18058 ],
18059 width: TextWidth::default(),
18060 },
18061 })
18062 .intern(db),
18063 )
18064 }
18065 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18066 let kind = node.kind(db);
18067 assert_eq!(
18068 kind,
18069 SyntaxKind::ItemTypeAlias,
18070 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18071 kind,
18072 SyntaxKind::ItemTypeAlias
18073 );
18074 let children = db.get_children(node.clone());
18075 Self { node, children }
18076 }
18077 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18078 let kind = node.kind(db);
18079 if kind == SyntaxKind::ItemTypeAlias {
18080 Some(Self::from_syntax_node(db, node))
18081 } else {
18082 None
18083 }
18084 }
18085 fn as_syntax_node(&self) -> SyntaxNode {
18086 self.node.clone()
18087 }
18088 fn stable_ptr(&self) -> Self::StablePtr {
18089 ItemTypeAliasPtr(self.node.0.stable_ptr)
18090 }
18091}
18092impl From<&ItemTypeAlias> for SyntaxStablePtrId {
18093 fn from(node: &ItemTypeAlias) -> Self {
18094 node.stable_ptr().untyped()
18095 }
18096}
18097#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18098pub struct ItemUse {
18099 node: SyntaxNode,
18100 children: Arc<[SyntaxNode]>,
18101}
18102impl ItemUse {
18103 pub const INDEX_ATTRIBUTES: usize = 0;
18104 pub const INDEX_VISIBILITY: usize = 1;
18105 pub const INDEX_USE_KW: usize = 2;
18106 pub const INDEX_USE_PATH: usize = 3;
18107 pub const INDEX_SEMICOLON: usize = 4;
18108 pub fn new_green(
18109 db: &dyn SyntaxGroup,
18110 attributes: AttributeListGreen,
18111 visibility: VisibilityGreen,
18112 use_kw: TerminalUseGreen,
18113 use_path: UsePathGreen,
18114 semicolon: TerminalSemicolonGreen,
18115 ) -> ItemUseGreen {
18116 let children: Vec<GreenId> =
18117 vec![attributes.0, visibility.0, use_kw.0, use_path.0, semicolon.0];
18118 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18119 ItemUseGreen(
18120 Arc::new(GreenNode {
18121 kind: SyntaxKind::ItemUse,
18122 details: GreenNodeDetails::Node { children, width },
18123 })
18124 .intern(db),
18125 )
18126 }
18127}
18128impl ItemUse {
18129 pub fn attributes(&self, db: &dyn SyntaxGroup) -> AttributeList {
18130 AttributeList::from_syntax_node(db, self.children[0].clone())
18131 }
18132 pub fn visibility(&self, db: &dyn SyntaxGroup) -> Visibility {
18133 Visibility::from_syntax_node(db, self.children[1].clone())
18134 }
18135 pub fn use_kw(&self, db: &dyn SyntaxGroup) -> TerminalUse {
18136 TerminalUse::from_syntax_node(db, self.children[2].clone())
18137 }
18138 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
18139 UsePath::from_syntax_node(db, self.children[3].clone())
18140 }
18141 pub fn semicolon(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
18142 TerminalSemicolon::from_syntax_node(db, self.children[4].clone())
18143 }
18144}
18145#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18146pub struct ItemUsePtr(pub SyntaxStablePtrId);
18147impl ItemUsePtr {
18148 pub fn use_path_green(self, db: &dyn SyntaxGroup) -> UsePathGreen {
18149 let ptr = self.0.lookup_intern(db);
18150 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18151 UsePathGreen(key_fields[0])
18152 } else {
18153 panic!("Unexpected key field query on root.");
18154 }
18155 }
18156}
18157impl TypedStablePtr for ItemUsePtr {
18158 type SyntaxNode = ItemUse;
18159 fn untyped(&self) -> SyntaxStablePtrId {
18160 self.0
18161 }
18162 fn lookup(&self, db: &dyn SyntaxGroup) -> ItemUse {
18163 ItemUse::from_syntax_node(db, self.0.lookup(db))
18164 }
18165}
18166impl From<ItemUsePtr> for SyntaxStablePtrId {
18167 fn from(ptr: ItemUsePtr) -> Self {
18168 ptr.untyped()
18169 }
18170}
18171#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18172pub struct ItemUseGreen(pub GreenId);
18173impl TypedSyntaxNode for ItemUse {
18174 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::ItemUse);
18175 type StablePtr = ItemUsePtr;
18176 type Green = ItemUseGreen;
18177 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18178 ItemUseGreen(
18179 Arc::new(GreenNode {
18180 kind: SyntaxKind::ItemUse,
18181 details: GreenNodeDetails::Node {
18182 children: vec![
18183 AttributeList::missing(db).0,
18184 Visibility::missing(db).0,
18185 TerminalUse::missing(db).0,
18186 UsePath::missing(db).0,
18187 TerminalSemicolon::missing(db).0,
18188 ],
18189 width: TextWidth::default(),
18190 },
18191 })
18192 .intern(db),
18193 )
18194 }
18195 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18196 let kind = node.kind(db);
18197 assert_eq!(
18198 kind,
18199 SyntaxKind::ItemUse,
18200 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18201 kind,
18202 SyntaxKind::ItemUse
18203 );
18204 let children = db.get_children(node.clone());
18205 Self { node, children }
18206 }
18207 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18208 let kind = node.kind(db);
18209 if kind == SyntaxKind::ItemUse { Some(Self::from_syntax_node(db, node)) } else { None }
18210 }
18211 fn as_syntax_node(&self) -> SyntaxNode {
18212 self.node.clone()
18213 }
18214 fn stable_ptr(&self) -> Self::StablePtr {
18215 ItemUsePtr(self.node.0.stable_ptr)
18216 }
18217}
18218impl From<&ItemUse> for SyntaxStablePtrId {
18219 fn from(node: &ItemUse) -> Self {
18220 node.stable_ptr().untyped()
18221 }
18222}
18223#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18224pub enum UsePath {
18225 Leaf(UsePathLeaf),
18226 Single(UsePathSingle),
18227 Multi(UsePathMulti),
18228 Star(UsePathStar),
18229}
18230#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18231pub struct UsePathPtr(pub SyntaxStablePtrId);
18232impl TypedStablePtr for UsePathPtr {
18233 type SyntaxNode = UsePath;
18234 fn untyped(&self) -> SyntaxStablePtrId {
18235 self.0
18236 }
18237 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePath {
18238 UsePath::from_syntax_node(db, self.0.lookup(db))
18239 }
18240}
18241impl From<UsePathPtr> for SyntaxStablePtrId {
18242 fn from(ptr: UsePathPtr) -> Self {
18243 ptr.untyped()
18244 }
18245}
18246impl From<UsePathLeafPtr> for UsePathPtr {
18247 fn from(value: UsePathLeafPtr) -> Self {
18248 Self(value.0)
18249 }
18250}
18251impl From<UsePathSinglePtr> for UsePathPtr {
18252 fn from(value: UsePathSinglePtr) -> Self {
18253 Self(value.0)
18254 }
18255}
18256impl From<UsePathMultiPtr> for UsePathPtr {
18257 fn from(value: UsePathMultiPtr) -> Self {
18258 Self(value.0)
18259 }
18260}
18261impl From<UsePathStarPtr> for UsePathPtr {
18262 fn from(value: UsePathStarPtr) -> Self {
18263 Self(value.0)
18264 }
18265}
18266impl From<UsePathLeafGreen> for UsePathGreen {
18267 fn from(value: UsePathLeafGreen) -> Self {
18268 Self(value.0)
18269 }
18270}
18271impl From<UsePathSingleGreen> for UsePathGreen {
18272 fn from(value: UsePathSingleGreen) -> Self {
18273 Self(value.0)
18274 }
18275}
18276impl From<UsePathMultiGreen> for UsePathGreen {
18277 fn from(value: UsePathMultiGreen) -> Self {
18278 Self(value.0)
18279 }
18280}
18281impl From<UsePathStarGreen> for UsePathGreen {
18282 fn from(value: UsePathStarGreen) -> Self {
18283 Self(value.0)
18284 }
18285}
18286#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18287pub struct UsePathGreen(pub GreenId);
18288impl TypedSyntaxNode for UsePath {
18289 const OPTIONAL_KIND: Option<SyntaxKind> = None;
18290 type StablePtr = UsePathPtr;
18291 type Green = UsePathGreen;
18292 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18293 panic!("No missing variant.");
18294 }
18295 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18296 let kind = node.kind(db);
18297 match kind {
18298 SyntaxKind::UsePathLeaf => UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node)),
18299 SyntaxKind::UsePathSingle => UsePath::Single(UsePathSingle::from_syntax_node(db, node)),
18300 SyntaxKind::UsePathMulti => UsePath::Multi(UsePathMulti::from_syntax_node(db, node)),
18301 SyntaxKind::UsePathStar => UsePath::Star(UsePathStar::from_syntax_node(db, node)),
18302 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "UsePath"),
18303 }
18304 }
18305 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18306 let kind = node.kind(db);
18307 match kind {
18308 SyntaxKind::UsePathLeaf => Some(UsePath::Leaf(UsePathLeaf::from_syntax_node(db, node))),
18309 SyntaxKind::UsePathSingle => {
18310 Some(UsePath::Single(UsePathSingle::from_syntax_node(db, node)))
18311 }
18312 SyntaxKind::UsePathMulti => {
18313 Some(UsePath::Multi(UsePathMulti::from_syntax_node(db, node)))
18314 }
18315 SyntaxKind::UsePathStar => Some(UsePath::Star(UsePathStar::from_syntax_node(db, node))),
18316 _ => None,
18317 }
18318 }
18319 fn as_syntax_node(&self) -> SyntaxNode {
18320 match self {
18321 UsePath::Leaf(x) => x.as_syntax_node(),
18322 UsePath::Single(x) => x.as_syntax_node(),
18323 UsePath::Multi(x) => x.as_syntax_node(),
18324 UsePath::Star(x) => x.as_syntax_node(),
18325 }
18326 }
18327 fn stable_ptr(&self) -> Self::StablePtr {
18328 UsePathPtr(self.as_syntax_node().0.stable_ptr)
18329 }
18330}
18331impl From<&UsePath> for SyntaxStablePtrId {
18332 fn from(node: &UsePath) -> Self {
18333 node.stable_ptr().untyped()
18334 }
18335}
18336impl UsePath {
18337 pub fn is_variant(kind: SyntaxKind) -> bool {
18339 matches!(
18340 kind,
18341 SyntaxKind::UsePathLeaf
18342 | SyntaxKind::UsePathSingle
18343 | SyntaxKind::UsePathMulti
18344 | SyntaxKind::UsePathStar
18345 )
18346 }
18347}
18348#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18349pub struct UsePathLeaf {
18350 node: SyntaxNode,
18351 children: Arc<[SyntaxNode]>,
18352}
18353impl UsePathLeaf {
18354 pub const INDEX_IDENT: usize = 0;
18355 pub const INDEX_ALIAS_CLAUSE: usize = 1;
18356 pub fn new_green(
18357 db: &dyn SyntaxGroup,
18358 ident: PathSegmentGreen,
18359 alias_clause: OptionAliasClauseGreen,
18360 ) -> UsePathLeafGreen {
18361 let children: Vec<GreenId> = vec![ident.0, alias_clause.0];
18362 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18363 UsePathLeafGreen(
18364 Arc::new(GreenNode {
18365 kind: SyntaxKind::UsePathLeaf,
18366 details: GreenNodeDetails::Node { children, width },
18367 })
18368 .intern(db),
18369 )
18370 }
18371}
18372impl UsePathLeaf {
18373 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18374 PathSegment::from_syntax_node(db, self.children[0].clone())
18375 }
18376 pub fn alias_clause(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
18377 OptionAliasClause::from_syntax_node(db, self.children[1].clone())
18378 }
18379}
18380#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18381pub struct UsePathLeafPtr(pub SyntaxStablePtrId);
18382impl UsePathLeafPtr {
18383 pub fn ident_green(self, db: &dyn SyntaxGroup) -> PathSegmentGreen {
18384 let ptr = self.0.lookup_intern(db);
18385 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18386 PathSegmentGreen(key_fields[0])
18387 } else {
18388 panic!("Unexpected key field query on root.");
18389 }
18390 }
18391 pub fn alias_clause_green(self, db: &dyn SyntaxGroup) -> OptionAliasClauseGreen {
18392 let ptr = self.0.lookup_intern(db);
18393 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18394 OptionAliasClauseGreen(key_fields[1])
18395 } else {
18396 panic!("Unexpected key field query on root.");
18397 }
18398 }
18399}
18400impl TypedStablePtr for UsePathLeafPtr {
18401 type SyntaxNode = UsePathLeaf;
18402 fn untyped(&self) -> SyntaxStablePtrId {
18403 self.0
18404 }
18405 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathLeaf {
18406 UsePathLeaf::from_syntax_node(db, self.0.lookup(db))
18407 }
18408}
18409impl From<UsePathLeafPtr> for SyntaxStablePtrId {
18410 fn from(ptr: UsePathLeafPtr) -> Self {
18411 ptr.untyped()
18412 }
18413}
18414#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18415pub struct UsePathLeafGreen(pub GreenId);
18416impl TypedSyntaxNode for UsePathLeaf {
18417 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathLeaf);
18418 type StablePtr = UsePathLeafPtr;
18419 type Green = UsePathLeafGreen;
18420 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18421 UsePathLeafGreen(
18422 Arc::new(GreenNode {
18423 kind: SyntaxKind::UsePathLeaf,
18424 details: GreenNodeDetails::Node {
18425 children: vec![PathSegment::missing(db).0, OptionAliasClause::missing(db).0],
18426 width: TextWidth::default(),
18427 },
18428 })
18429 .intern(db),
18430 )
18431 }
18432 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18433 let kind = node.kind(db);
18434 assert_eq!(
18435 kind,
18436 SyntaxKind::UsePathLeaf,
18437 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18438 kind,
18439 SyntaxKind::UsePathLeaf
18440 );
18441 let children = db.get_children(node.clone());
18442 Self { node, children }
18443 }
18444 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18445 let kind = node.kind(db);
18446 if kind == SyntaxKind::UsePathLeaf { Some(Self::from_syntax_node(db, node)) } else { None }
18447 }
18448 fn as_syntax_node(&self) -> SyntaxNode {
18449 self.node.clone()
18450 }
18451 fn stable_ptr(&self) -> Self::StablePtr {
18452 UsePathLeafPtr(self.node.0.stable_ptr)
18453 }
18454}
18455impl From<&UsePathLeaf> for SyntaxStablePtrId {
18456 fn from(node: &UsePathLeaf) -> Self {
18457 node.stable_ptr().untyped()
18458 }
18459}
18460#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18461pub struct UsePathSingle {
18462 node: SyntaxNode,
18463 children: Arc<[SyntaxNode]>,
18464}
18465impl UsePathSingle {
18466 pub const INDEX_IDENT: usize = 0;
18467 pub const INDEX_COLON_COLON: usize = 1;
18468 pub const INDEX_USE_PATH: usize = 2;
18469 pub fn new_green(
18470 db: &dyn SyntaxGroup,
18471 ident: PathSegmentGreen,
18472 colon_colon: TerminalColonColonGreen,
18473 use_path: UsePathGreen,
18474 ) -> UsePathSingleGreen {
18475 let children: Vec<GreenId> = vec![ident.0, colon_colon.0, use_path.0];
18476 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18477 UsePathSingleGreen(
18478 Arc::new(GreenNode {
18479 kind: SyntaxKind::UsePathSingle,
18480 details: GreenNodeDetails::Node { children, width },
18481 })
18482 .intern(db),
18483 )
18484 }
18485}
18486impl UsePathSingle {
18487 pub fn ident(&self, db: &dyn SyntaxGroup) -> PathSegment {
18488 PathSegment::from_syntax_node(db, self.children[0].clone())
18489 }
18490 pub fn colon_colon(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
18491 TerminalColonColon::from_syntax_node(db, self.children[1].clone())
18492 }
18493 pub fn use_path(&self, db: &dyn SyntaxGroup) -> UsePath {
18494 UsePath::from_syntax_node(db, self.children[2].clone())
18495 }
18496}
18497#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18498pub struct UsePathSinglePtr(pub SyntaxStablePtrId);
18499impl UsePathSinglePtr {}
18500impl TypedStablePtr for UsePathSinglePtr {
18501 type SyntaxNode = UsePathSingle;
18502 fn untyped(&self) -> SyntaxStablePtrId {
18503 self.0
18504 }
18505 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathSingle {
18506 UsePathSingle::from_syntax_node(db, self.0.lookup(db))
18507 }
18508}
18509impl From<UsePathSinglePtr> for SyntaxStablePtrId {
18510 fn from(ptr: UsePathSinglePtr) -> Self {
18511 ptr.untyped()
18512 }
18513}
18514#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18515pub struct UsePathSingleGreen(pub GreenId);
18516impl TypedSyntaxNode for UsePathSingle {
18517 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathSingle);
18518 type StablePtr = UsePathSinglePtr;
18519 type Green = UsePathSingleGreen;
18520 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18521 UsePathSingleGreen(
18522 Arc::new(GreenNode {
18523 kind: SyntaxKind::UsePathSingle,
18524 details: GreenNodeDetails::Node {
18525 children: vec![
18526 PathSegment::missing(db).0,
18527 TerminalColonColon::missing(db).0,
18528 UsePath::missing(db).0,
18529 ],
18530 width: TextWidth::default(),
18531 },
18532 })
18533 .intern(db),
18534 )
18535 }
18536 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18537 let kind = node.kind(db);
18538 assert_eq!(
18539 kind,
18540 SyntaxKind::UsePathSingle,
18541 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18542 kind,
18543 SyntaxKind::UsePathSingle
18544 );
18545 let children = db.get_children(node.clone());
18546 Self { node, children }
18547 }
18548 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18549 let kind = node.kind(db);
18550 if kind == SyntaxKind::UsePathSingle {
18551 Some(Self::from_syntax_node(db, node))
18552 } else {
18553 None
18554 }
18555 }
18556 fn as_syntax_node(&self) -> SyntaxNode {
18557 self.node.clone()
18558 }
18559 fn stable_ptr(&self) -> Self::StablePtr {
18560 UsePathSinglePtr(self.node.0.stable_ptr)
18561 }
18562}
18563impl From<&UsePathSingle> for SyntaxStablePtrId {
18564 fn from(node: &UsePathSingle) -> Self {
18565 node.stable_ptr().untyped()
18566 }
18567}
18568#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18569pub struct UsePathMulti {
18570 node: SyntaxNode,
18571 children: Arc<[SyntaxNode]>,
18572}
18573impl UsePathMulti {
18574 pub const INDEX_LBRACE: usize = 0;
18575 pub const INDEX_USE_PATHS: usize = 1;
18576 pub const INDEX_RBRACE: usize = 2;
18577 pub fn new_green(
18578 db: &dyn SyntaxGroup,
18579 lbrace: TerminalLBraceGreen,
18580 use_paths: UsePathListGreen,
18581 rbrace: TerminalRBraceGreen,
18582 ) -> UsePathMultiGreen {
18583 let children: Vec<GreenId> = vec![lbrace.0, use_paths.0, rbrace.0];
18584 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18585 UsePathMultiGreen(
18586 Arc::new(GreenNode {
18587 kind: SyntaxKind::UsePathMulti,
18588 details: GreenNodeDetails::Node { children, width },
18589 })
18590 .intern(db),
18591 )
18592 }
18593}
18594impl UsePathMulti {
18595 pub fn lbrace(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
18596 TerminalLBrace::from_syntax_node(db, self.children[0].clone())
18597 }
18598 pub fn use_paths(&self, db: &dyn SyntaxGroup) -> UsePathList {
18599 UsePathList::from_syntax_node(db, self.children[1].clone())
18600 }
18601 pub fn rbrace(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
18602 TerminalRBrace::from_syntax_node(db, self.children[2].clone())
18603 }
18604}
18605#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18606pub struct UsePathMultiPtr(pub SyntaxStablePtrId);
18607impl UsePathMultiPtr {}
18608impl TypedStablePtr for UsePathMultiPtr {
18609 type SyntaxNode = UsePathMulti;
18610 fn untyped(&self) -> SyntaxStablePtrId {
18611 self.0
18612 }
18613 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathMulti {
18614 UsePathMulti::from_syntax_node(db, self.0.lookup(db))
18615 }
18616}
18617impl From<UsePathMultiPtr> for SyntaxStablePtrId {
18618 fn from(ptr: UsePathMultiPtr) -> Self {
18619 ptr.untyped()
18620 }
18621}
18622#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18623pub struct UsePathMultiGreen(pub GreenId);
18624impl TypedSyntaxNode for UsePathMulti {
18625 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathMulti);
18626 type StablePtr = UsePathMultiPtr;
18627 type Green = UsePathMultiGreen;
18628 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18629 UsePathMultiGreen(
18630 Arc::new(GreenNode {
18631 kind: SyntaxKind::UsePathMulti,
18632 details: GreenNodeDetails::Node {
18633 children: vec![
18634 TerminalLBrace::missing(db).0,
18635 UsePathList::missing(db).0,
18636 TerminalRBrace::missing(db).0,
18637 ],
18638 width: TextWidth::default(),
18639 },
18640 })
18641 .intern(db),
18642 )
18643 }
18644 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18645 let kind = node.kind(db);
18646 assert_eq!(
18647 kind,
18648 SyntaxKind::UsePathMulti,
18649 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18650 kind,
18651 SyntaxKind::UsePathMulti
18652 );
18653 let children = db.get_children(node.clone());
18654 Self { node, children }
18655 }
18656 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18657 let kind = node.kind(db);
18658 if kind == SyntaxKind::UsePathMulti { Some(Self::from_syntax_node(db, node)) } else { None }
18659 }
18660 fn as_syntax_node(&self) -> SyntaxNode {
18661 self.node.clone()
18662 }
18663 fn stable_ptr(&self) -> Self::StablePtr {
18664 UsePathMultiPtr(self.node.0.stable_ptr)
18665 }
18666}
18667impl From<&UsePathMulti> for SyntaxStablePtrId {
18668 fn from(node: &UsePathMulti) -> Self {
18669 node.stable_ptr().untyped()
18670 }
18671}
18672#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18673pub struct UsePathStar {
18674 node: SyntaxNode,
18675 children: Arc<[SyntaxNode]>,
18676}
18677impl UsePathStar {
18678 pub const INDEX_STAR: usize = 0;
18679 pub fn new_green(db: &dyn SyntaxGroup, star: TerminalMulGreen) -> UsePathStarGreen {
18680 let children: Vec<GreenId> = vec![star.0];
18681 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18682 UsePathStarGreen(
18683 Arc::new(GreenNode {
18684 kind: SyntaxKind::UsePathStar,
18685 details: GreenNodeDetails::Node { children, width },
18686 })
18687 .intern(db),
18688 )
18689 }
18690}
18691impl UsePathStar {
18692 pub fn star(&self, db: &dyn SyntaxGroup) -> TerminalMul {
18693 TerminalMul::from_syntax_node(db, self.children[0].clone())
18694 }
18695}
18696#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18697pub struct UsePathStarPtr(pub SyntaxStablePtrId);
18698impl UsePathStarPtr {}
18699impl TypedStablePtr for UsePathStarPtr {
18700 type SyntaxNode = UsePathStar;
18701 fn untyped(&self) -> SyntaxStablePtrId {
18702 self.0
18703 }
18704 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathStar {
18705 UsePathStar::from_syntax_node(db, self.0.lookup(db))
18706 }
18707}
18708impl From<UsePathStarPtr> for SyntaxStablePtrId {
18709 fn from(ptr: UsePathStarPtr) -> Self {
18710 ptr.untyped()
18711 }
18712}
18713#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18714pub struct UsePathStarGreen(pub GreenId);
18715impl TypedSyntaxNode for UsePathStar {
18716 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathStar);
18717 type StablePtr = UsePathStarPtr;
18718 type Green = UsePathStarGreen;
18719 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18720 UsePathStarGreen(
18721 Arc::new(GreenNode {
18722 kind: SyntaxKind::UsePathStar,
18723 details: GreenNodeDetails::Node {
18724 children: vec![TerminalMul::missing(db).0],
18725 width: TextWidth::default(),
18726 },
18727 })
18728 .intern(db),
18729 )
18730 }
18731 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18732 let kind = node.kind(db);
18733 assert_eq!(
18734 kind,
18735 SyntaxKind::UsePathStar,
18736 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18737 kind,
18738 SyntaxKind::UsePathStar
18739 );
18740 let children = db.get_children(node.clone());
18741 Self { node, children }
18742 }
18743 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18744 let kind = node.kind(db);
18745 if kind == SyntaxKind::UsePathStar { Some(Self::from_syntax_node(db, node)) } else { None }
18746 }
18747 fn as_syntax_node(&self) -> SyntaxNode {
18748 self.node.clone()
18749 }
18750 fn stable_ptr(&self) -> Self::StablePtr {
18751 UsePathStarPtr(self.node.0.stable_ptr)
18752 }
18753}
18754impl From<&UsePathStar> for SyntaxStablePtrId {
18755 fn from(node: &UsePathStar) -> Self {
18756 node.stable_ptr().untyped()
18757 }
18758}
18759#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18760pub struct UsePathList(ElementList<UsePath, 2>);
18761impl Deref for UsePathList {
18762 type Target = ElementList<UsePath, 2>;
18763 fn deref(&self) -> &Self::Target {
18764 &self.0
18765 }
18766}
18767impl UsePathList {
18768 pub fn new_green(
18769 db: &dyn SyntaxGroup,
18770 children: Vec<UsePathListElementOrSeparatorGreen>,
18771 ) -> UsePathListGreen {
18772 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
18773 UsePathListGreen(
18774 Arc::new(GreenNode {
18775 kind: SyntaxKind::UsePathList,
18776 details: GreenNodeDetails::Node {
18777 children: children.iter().map(|x| x.id()).collect(),
18778 width,
18779 },
18780 })
18781 .intern(db),
18782 )
18783 }
18784}
18785#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18786pub struct UsePathListPtr(pub SyntaxStablePtrId);
18787impl TypedStablePtr for UsePathListPtr {
18788 type SyntaxNode = UsePathList;
18789 fn untyped(&self) -> SyntaxStablePtrId {
18790 self.0
18791 }
18792 fn lookup(&self, db: &dyn SyntaxGroup) -> UsePathList {
18793 UsePathList::from_syntax_node(db, self.0.lookup(db))
18794 }
18795}
18796impl From<UsePathListPtr> for SyntaxStablePtrId {
18797 fn from(ptr: UsePathListPtr) -> Self {
18798 ptr.untyped()
18799 }
18800}
18801#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18802pub enum UsePathListElementOrSeparatorGreen {
18803 Separator(TerminalCommaGreen),
18804 Element(UsePathGreen),
18805}
18806impl From<TerminalCommaGreen> for UsePathListElementOrSeparatorGreen {
18807 fn from(value: TerminalCommaGreen) -> Self {
18808 UsePathListElementOrSeparatorGreen::Separator(value)
18809 }
18810}
18811impl From<UsePathGreen> for UsePathListElementOrSeparatorGreen {
18812 fn from(value: UsePathGreen) -> Self {
18813 UsePathListElementOrSeparatorGreen::Element(value)
18814 }
18815}
18816impl UsePathListElementOrSeparatorGreen {
18817 fn id(&self) -> GreenId {
18818 match self {
18819 UsePathListElementOrSeparatorGreen::Separator(green) => green.0,
18820 UsePathListElementOrSeparatorGreen::Element(green) => green.0,
18821 }
18822 }
18823}
18824#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18825pub struct UsePathListGreen(pub GreenId);
18826impl TypedSyntaxNode for UsePathList {
18827 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::UsePathList);
18828 type StablePtr = UsePathListPtr;
18829 type Green = UsePathListGreen;
18830 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18831 UsePathListGreen(
18832 Arc::new(GreenNode {
18833 kind: SyntaxKind::UsePathList,
18834 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
18835 })
18836 .intern(db),
18837 )
18838 }
18839 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18840 Self(ElementList::new(node))
18841 }
18842 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18843 if node.kind(db) == SyntaxKind::UsePathList {
18844 Some(Self(ElementList::new(node)))
18845 } else {
18846 None
18847 }
18848 }
18849 fn as_syntax_node(&self) -> SyntaxNode {
18850 self.node.clone()
18851 }
18852 fn stable_ptr(&self) -> Self::StablePtr {
18853 UsePathListPtr(self.node.0.stable_ptr)
18854 }
18855}
18856impl From<&UsePathList> for SyntaxStablePtrId {
18857 fn from(node: &UsePathList) -> Self {
18858 node.stable_ptr().untyped()
18859 }
18860}
18861#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18862pub struct AliasClause {
18863 node: SyntaxNode,
18864 children: Arc<[SyntaxNode]>,
18865}
18866impl AliasClause {
18867 pub const INDEX_AS_KW: usize = 0;
18868 pub const INDEX_ALIAS: usize = 1;
18869 pub fn new_green(
18870 db: &dyn SyntaxGroup,
18871 as_kw: TerminalAsGreen,
18872 alias: TerminalIdentifierGreen,
18873 ) -> AliasClauseGreen {
18874 let children: Vec<GreenId> = vec![as_kw.0, alias.0];
18875 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
18876 AliasClauseGreen(
18877 Arc::new(GreenNode {
18878 kind: SyntaxKind::AliasClause,
18879 details: GreenNodeDetails::Node { children, width },
18880 })
18881 .intern(db),
18882 )
18883 }
18884}
18885impl AliasClause {
18886 pub fn as_kw(&self, db: &dyn SyntaxGroup) -> TerminalAs {
18887 TerminalAs::from_syntax_node(db, self.children[0].clone())
18888 }
18889 pub fn alias(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
18890 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
18891 }
18892}
18893#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18894pub struct AliasClausePtr(pub SyntaxStablePtrId);
18895impl AliasClausePtr {
18896 pub fn alias_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
18897 let ptr = self.0.lookup_intern(db);
18898 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
18899 TerminalIdentifierGreen(key_fields[0])
18900 } else {
18901 panic!("Unexpected key field query on root.");
18902 }
18903 }
18904}
18905impl TypedStablePtr for AliasClausePtr {
18906 type SyntaxNode = AliasClause;
18907 fn untyped(&self) -> SyntaxStablePtrId {
18908 self.0
18909 }
18910 fn lookup(&self, db: &dyn SyntaxGroup) -> AliasClause {
18911 AliasClause::from_syntax_node(db, self.0.lookup(db))
18912 }
18913}
18914impl From<AliasClausePtr> for SyntaxStablePtrId {
18915 fn from(ptr: AliasClausePtr) -> Self {
18916 ptr.untyped()
18917 }
18918}
18919#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18920pub struct AliasClauseGreen(pub GreenId);
18921impl TypedSyntaxNode for AliasClause {
18922 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AliasClause);
18923 type StablePtr = AliasClausePtr;
18924 type Green = AliasClauseGreen;
18925 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
18926 AliasClauseGreen(
18927 Arc::new(GreenNode {
18928 kind: SyntaxKind::AliasClause,
18929 details: GreenNodeDetails::Node {
18930 children: vec![TerminalAs::missing(db).0, TerminalIdentifier::missing(db).0],
18931 width: TextWidth::default(),
18932 },
18933 })
18934 .intern(db),
18935 )
18936 }
18937 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
18938 let kind = node.kind(db);
18939 assert_eq!(
18940 kind,
18941 SyntaxKind::AliasClause,
18942 "Unexpected SyntaxKind {:?}. Expected {:?}.",
18943 kind,
18944 SyntaxKind::AliasClause
18945 );
18946 let children = db.get_children(node.clone());
18947 Self { node, children }
18948 }
18949 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
18950 let kind = node.kind(db);
18951 if kind == SyntaxKind::AliasClause { Some(Self::from_syntax_node(db, node)) } else { None }
18952 }
18953 fn as_syntax_node(&self) -> SyntaxNode {
18954 self.node.clone()
18955 }
18956 fn stable_ptr(&self) -> Self::StablePtr {
18957 AliasClausePtr(self.node.0.stable_ptr)
18958 }
18959}
18960impl From<&AliasClause> for SyntaxStablePtrId {
18961 fn from(node: &AliasClause) -> Self {
18962 node.stable_ptr().untyped()
18963 }
18964}
18965#[derive(Clone, Debug, Eq, Hash, PartialEq)]
18966pub enum OptionAliasClause {
18967 Empty(OptionAliasClauseEmpty),
18968 AliasClause(AliasClause),
18969}
18970#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
18971pub struct OptionAliasClausePtr(pub SyntaxStablePtrId);
18972impl TypedStablePtr for OptionAliasClausePtr {
18973 type SyntaxNode = OptionAliasClause;
18974 fn untyped(&self) -> SyntaxStablePtrId {
18975 self.0
18976 }
18977 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClause {
18978 OptionAliasClause::from_syntax_node(db, self.0.lookup(db))
18979 }
18980}
18981impl From<OptionAliasClausePtr> for SyntaxStablePtrId {
18982 fn from(ptr: OptionAliasClausePtr) -> Self {
18983 ptr.untyped()
18984 }
18985}
18986impl From<OptionAliasClauseEmptyPtr> for OptionAliasClausePtr {
18987 fn from(value: OptionAliasClauseEmptyPtr) -> Self {
18988 Self(value.0)
18989 }
18990}
18991impl From<AliasClausePtr> for OptionAliasClausePtr {
18992 fn from(value: AliasClausePtr) -> Self {
18993 Self(value.0)
18994 }
18995}
18996impl From<OptionAliasClauseEmptyGreen> for OptionAliasClauseGreen {
18997 fn from(value: OptionAliasClauseEmptyGreen) -> Self {
18998 Self(value.0)
18999 }
19000}
19001impl From<AliasClauseGreen> for OptionAliasClauseGreen {
19002 fn from(value: AliasClauseGreen) -> Self {
19003 Self(value.0)
19004 }
19005}
19006#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19007pub struct OptionAliasClauseGreen(pub GreenId);
19008impl TypedSyntaxNode for OptionAliasClause {
19009 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19010 type StablePtr = OptionAliasClausePtr;
19011 type Green = OptionAliasClauseGreen;
19012 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19013 panic!("No missing variant.");
19014 }
19015 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19016 let kind = node.kind(db);
19017 match kind {
19018 SyntaxKind::OptionAliasClauseEmpty => {
19019 OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node))
19020 }
19021 SyntaxKind::AliasClause => {
19022 OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node))
19023 }
19024 _ => panic!(
19025 "Unexpected syntax kind {:?} when constructing {}.",
19026 kind, "OptionAliasClause"
19027 ),
19028 }
19029 }
19030 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19031 let kind = node.kind(db);
19032 match kind {
19033 SyntaxKind::OptionAliasClauseEmpty => {
19034 Some(OptionAliasClause::Empty(OptionAliasClauseEmpty::from_syntax_node(db, node)))
19035 }
19036 SyntaxKind::AliasClause => {
19037 Some(OptionAliasClause::AliasClause(AliasClause::from_syntax_node(db, node)))
19038 }
19039 _ => None,
19040 }
19041 }
19042 fn as_syntax_node(&self) -> SyntaxNode {
19043 match self {
19044 OptionAliasClause::Empty(x) => x.as_syntax_node(),
19045 OptionAliasClause::AliasClause(x) => x.as_syntax_node(),
19046 }
19047 }
19048 fn stable_ptr(&self) -> Self::StablePtr {
19049 OptionAliasClausePtr(self.as_syntax_node().0.stable_ptr)
19050 }
19051}
19052impl From<&OptionAliasClause> for SyntaxStablePtrId {
19053 fn from(node: &OptionAliasClause) -> Self {
19054 node.stable_ptr().untyped()
19055 }
19056}
19057impl OptionAliasClause {
19058 pub fn is_variant(kind: SyntaxKind) -> bool {
19060 matches!(kind, SyntaxKind::OptionAliasClauseEmpty | SyntaxKind::AliasClause)
19061 }
19062}
19063#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19064pub struct OptionAliasClauseEmpty {
19065 node: SyntaxNode,
19066 children: Arc<[SyntaxNode]>,
19067}
19068impl OptionAliasClauseEmpty {
19069 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAliasClauseEmptyGreen {
19070 let children: Vec<GreenId> = vec![];
19071 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19072 OptionAliasClauseEmptyGreen(
19073 Arc::new(GreenNode {
19074 kind: SyntaxKind::OptionAliasClauseEmpty,
19075 details: GreenNodeDetails::Node { children, width },
19076 })
19077 .intern(db),
19078 )
19079 }
19080}
19081impl OptionAliasClauseEmpty {}
19082#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19083pub struct OptionAliasClauseEmptyPtr(pub SyntaxStablePtrId);
19084impl OptionAliasClauseEmptyPtr {}
19085impl TypedStablePtr for OptionAliasClauseEmptyPtr {
19086 type SyntaxNode = OptionAliasClauseEmpty;
19087 fn untyped(&self) -> SyntaxStablePtrId {
19088 self.0
19089 }
19090 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAliasClauseEmpty {
19091 OptionAliasClauseEmpty::from_syntax_node(db, self.0.lookup(db))
19092 }
19093}
19094impl From<OptionAliasClauseEmptyPtr> for SyntaxStablePtrId {
19095 fn from(ptr: OptionAliasClauseEmptyPtr) -> Self {
19096 ptr.untyped()
19097 }
19098}
19099#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19100pub struct OptionAliasClauseEmptyGreen(pub GreenId);
19101impl TypedSyntaxNode for OptionAliasClauseEmpty {
19102 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionAliasClauseEmpty);
19103 type StablePtr = OptionAliasClauseEmptyPtr;
19104 type Green = OptionAliasClauseEmptyGreen;
19105 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19106 OptionAliasClauseEmptyGreen(
19107 Arc::new(GreenNode {
19108 kind: SyntaxKind::OptionAliasClauseEmpty,
19109 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
19110 })
19111 .intern(db),
19112 )
19113 }
19114 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19115 let kind = node.kind(db);
19116 assert_eq!(
19117 kind,
19118 SyntaxKind::OptionAliasClauseEmpty,
19119 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19120 kind,
19121 SyntaxKind::OptionAliasClauseEmpty
19122 );
19123 let children = db.get_children(node.clone());
19124 Self { node, children }
19125 }
19126 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19127 let kind = node.kind(db);
19128 if kind == SyntaxKind::OptionAliasClauseEmpty {
19129 Some(Self::from_syntax_node(db, node))
19130 } else {
19131 None
19132 }
19133 }
19134 fn as_syntax_node(&self) -> SyntaxNode {
19135 self.node.clone()
19136 }
19137 fn stable_ptr(&self) -> Self::StablePtr {
19138 OptionAliasClauseEmptyPtr(self.node.0.stable_ptr)
19139 }
19140}
19141impl From<&OptionAliasClauseEmpty> for SyntaxStablePtrId {
19142 fn from(node: &OptionAliasClauseEmpty) -> Self {
19143 node.stable_ptr().untyped()
19144 }
19145}
19146#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19147pub enum GenericArg {
19148 Unnamed(GenericArgUnnamed),
19149 Named(GenericArgNamed),
19150}
19151#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19152pub struct GenericArgPtr(pub SyntaxStablePtrId);
19153impl TypedStablePtr for GenericArgPtr {
19154 type SyntaxNode = GenericArg;
19155 fn untyped(&self) -> SyntaxStablePtrId {
19156 self.0
19157 }
19158 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArg {
19159 GenericArg::from_syntax_node(db, self.0.lookup(db))
19160 }
19161}
19162impl From<GenericArgPtr> for SyntaxStablePtrId {
19163 fn from(ptr: GenericArgPtr) -> Self {
19164 ptr.untyped()
19165 }
19166}
19167impl From<GenericArgUnnamedPtr> for GenericArgPtr {
19168 fn from(value: GenericArgUnnamedPtr) -> Self {
19169 Self(value.0)
19170 }
19171}
19172impl From<GenericArgNamedPtr> for GenericArgPtr {
19173 fn from(value: GenericArgNamedPtr) -> Self {
19174 Self(value.0)
19175 }
19176}
19177impl From<GenericArgUnnamedGreen> for GenericArgGreen {
19178 fn from(value: GenericArgUnnamedGreen) -> Self {
19179 Self(value.0)
19180 }
19181}
19182impl From<GenericArgNamedGreen> for GenericArgGreen {
19183 fn from(value: GenericArgNamedGreen) -> Self {
19184 Self(value.0)
19185 }
19186}
19187#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19188pub struct GenericArgGreen(pub GreenId);
19189impl TypedSyntaxNode for GenericArg {
19190 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19191 type StablePtr = GenericArgPtr;
19192 type Green = GenericArgGreen;
19193 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19194 panic!("No missing variant.");
19195 }
19196 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19197 let kind = node.kind(db);
19198 match kind {
19199 SyntaxKind::GenericArgUnnamed => {
19200 GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node))
19201 }
19202 SyntaxKind::GenericArgNamed => {
19203 GenericArg::Named(GenericArgNamed::from_syntax_node(db, node))
19204 }
19205 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArg"),
19206 }
19207 }
19208 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19209 let kind = node.kind(db);
19210 match kind {
19211 SyntaxKind::GenericArgUnnamed => {
19212 Some(GenericArg::Unnamed(GenericArgUnnamed::from_syntax_node(db, node)))
19213 }
19214 SyntaxKind::GenericArgNamed => {
19215 Some(GenericArg::Named(GenericArgNamed::from_syntax_node(db, node)))
19216 }
19217 _ => None,
19218 }
19219 }
19220 fn as_syntax_node(&self) -> SyntaxNode {
19221 match self {
19222 GenericArg::Unnamed(x) => x.as_syntax_node(),
19223 GenericArg::Named(x) => x.as_syntax_node(),
19224 }
19225 }
19226 fn stable_ptr(&self) -> Self::StablePtr {
19227 GenericArgPtr(self.as_syntax_node().0.stable_ptr)
19228 }
19229}
19230impl From<&GenericArg> for SyntaxStablePtrId {
19231 fn from(node: &GenericArg) -> Self {
19232 node.stable_ptr().untyped()
19233 }
19234}
19235impl GenericArg {
19236 pub fn is_variant(kind: SyntaxKind) -> bool {
19238 matches!(kind, SyntaxKind::GenericArgUnnamed | SyntaxKind::GenericArgNamed)
19239 }
19240}
19241#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19242pub struct GenericArgNamed {
19243 node: SyntaxNode,
19244 children: Arc<[SyntaxNode]>,
19245}
19246impl GenericArgNamed {
19247 pub const INDEX_NAME: usize = 0;
19248 pub const INDEX_COLON: usize = 1;
19249 pub const INDEX_VALUE: usize = 2;
19250 pub fn new_green(
19251 db: &dyn SyntaxGroup,
19252 name: TerminalIdentifierGreen,
19253 colon: TerminalColonGreen,
19254 value: GenericArgValueGreen,
19255 ) -> GenericArgNamedGreen {
19256 let children: Vec<GreenId> = vec![name.0, colon.0, value.0];
19257 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19258 GenericArgNamedGreen(
19259 Arc::new(GreenNode {
19260 kind: SyntaxKind::GenericArgNamed,
19261 details: GreenNodeDetails::Node { children, width },
19262 })
19263 .intern(db),
19264 )
19265 }
19266}
19267impl GenericArgNamed {
19268 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19269 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
19270 }
19271 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19272 TerminalColon::from_syntax_node(db, self.children[1].clone())
19273 }
19274 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19275 GenericArgValue::from_syntax_node(db, self.children[2].clone())
19276 }
19277}
19278#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19279pub struct GenericArgNamedPtr(pub SyntaxStablePtrId);
19280impl GenericArgNamedPtr {}
19281impl TypedStablePtr for GenericArgNamedPtr {
19282 type SyntaxNode = GenericArgNamed;
19283 fn untyped(&self) -> SyntaxStablePtrId {
19284 self.0
19285 }
19286 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgNamed {
19287 GenericArgNamed::from_syntax_node(db, self.0.lookup(db))
19288 }
19289}
19290impl From<GenericArgNamedPtr> for SyntaxStablePtrId {
19291 fn from(ptr: GenericArgNamedPtr) -> Self {
19292 ptr.untyped()
19293 }
19294}
19295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19296pub struct GenericArgNamedGreen(pub GreenId);
19297impl TypedSyntaxNode for GenericArgNamed {
19298 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgNamed);
19299 type StablePtr = GenericArgNamedPtr;
19300 type Green = GenericArgNamedGreen;
19301 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19302 GenericArgNamedGreen(
19303 Arc::new(GreenNode {
19304 kind: SyntaxKind::GenericArgNamed,
19305 details: GreenNodeDetails::Node {
19306 children: vec![
19307 TerminalIdentifier::missing(db).0,
19308 TerminalColon::missing(db).0,
19309 GenericArgValue::missing(db).0,
19310 ],
19311 width: TextWidth::default(),
19312 },
19313 })
19314 .intern(db),
19315 )
19316 }
19317 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19318 let kind = node.kind(db);
19319 assert_eq!(
19320 kind,
19321 SyntaxKind::GenericArgNamed,
19322 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19323 kind,
19324 SyntaxKind::GenericArgNamed
19325 );
19326 let children = db.get_children(node.clone());
19327 Self { node, children }
19328 }
19329 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19330 let kind = node.kind(db);
19331 if kind == SyntaxKind::GenericArgNamed {
19332 Some(Self::from_syntax_node(db, node))
19333 } else {
19334 None
19335 }
19336 }
19337 fn as_syntax_node(&self) -> SyntaxNode {
19338 self.node.clone()
19339 }
19340 fn stable_ptr(&self) -> Self::StablePtr {
19341 GenericArgNamedPtr(self.node.0.stable_ptr)
19342 }
19343}
19344impl From<&GenericArgNamed> for SyntaxStablePtrId {
19345 fn from(node: &GenericArgNamed) -> Self {
19346 node.stable_ptr().untyped()
19347 }
19348}
19349#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19350pub struct GenericArgUnnamed {
19351 node: SyntaxNode,
19352 children: Arc<[SyntaxNode]>,
19353}
19354impl GenericArgUnnamed {
19355 pub const INDEX_VALUE: usize = 0;
19356 pub fn new_green(db: &dyn SyntaxGroup, value: GenericArgValueGreen) -> GenericArgUnnamedGreen {
19357 let children: Vec<GreenId> = vec![value.0];
19358 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19359 GenericArgUnnamedGreen(
19360 Arc::new(GreenNode {
19361 kind: SyntaxKind::GenericArgUnnamed,
19362 details: GreenNodeDetails::Node { children, width },
19363 })
19364 .intern(db),
19365 )
19366 }
19367}
19368impl GenericArgUnnamed {
19369 pub fn value(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19370 GenericArgValue::from_syntax_node(db, self.children[0].clone())
19371 }
19372}
19373#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19374pub struct GenericArgUnnamedPtr(pub SyntaxStablePtrId);
19375impl GenericArgUnnamedPtr {}
19376impl TypedStablePtr for GenericArgUnnamedPtr {
19377 type SyntaxNode = GenericArgUnnamed;
19378 fn untyped(&self) -> SyntaxStablePtrId {
19379 self.0
19380 }
19381 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgUnnamed {
19382 GenericArgUnnamed::from_syntax_node(db, self.0.lookup(db))
19383 }
19384}
19385impl From<GenericArgUnnamedPtr> for SyntaxStablePtrId {
19386 fn from(ptr: GenericArgUnnamedPtr) -> Self {
19387 ptr.untyped()
19388 }
19389}
19390#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19391pub struct GenericArgUnnamedGreen(pub GreenId);
19392impl TypedSyntaxNode for GenericArgUnnamed {
19393 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgUnnamed);
19394 type StablePtr = GenericArgUnnamedPtr;
19395 type Green = GenericArgUnnamedGreen;
19396 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19397 GenericArgUnnamedGreen(
19398 Arc::new(GreenNode {
19399 kind: SyntaxKind::GenericArgUnnamed,
19400 details: GreenNodeDetails::Node {
19401 children: vec![GenericArgValue::missing(db).0],
19402 width: TextWidth::default(),
19403 },
19404 })
19405 .intern(db),
19406 )
19407 }
19408 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19409 let kind = node.kind(db);
19410 assert_eq!(
19411 kind,
19412 SyntaxKind::GenericArgUnnamed,
19413 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19414 kind,
19415 SyntaxKind::GenericArgUnnamed
19416 );
19417 let children = db.get_children(node.clone());
19418 Self { node, children }
19419 }
19420 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19421 let kind = node.kind(db);
19422 if kind == SyntaxKind::GenericArgUnnamed {
19423 Some(Self::from_syntax_node(db, node))
19424 } else {
19425 None
19426 }
19427 }
19428 fn as_syntax_node(&self) -> SyntaxNode {
19429 self.node.clone()
19430 }
19431 fn stable_ptr(&self) -> Self::StablePtr {
19432 GenericArgUnnamedPtr(self.node.0.stable_ptr)
19433 }
19434}
19435impl From<&GenericArgUnnamed> for SyntaxStablePtrId {
19436 fn from(node: &GenericArgUnnamed) -> Self {
19437 node.stable_ptr().untyped()
19438 }
19439}
19440#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19441pub enum GenericArgValue {
19442 Expr(GenericArgValueExpr),
19443 Underscore(TerminalUnderscore),
19444}
19445#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19446pub struct GenericArgValuePtr(pub SyntaxStablePtrId);
19447impl TypedStablePtr for GenericArgValuePtr {
19448 type SyntaxNode = GenericArgValue;
19449 fn untyped(&self) -> SyntaxStablePtrId {
19450 self.0
19451 }
19452 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValue {
19453 GenericArgValue::from_syntax_node(db, self.0.lookup(db))
19454 }
19455}
19456impl From<GenericArgValuePtr> for SyntaxStablePtrId {
19457 fn from(ptr: GenericArgValuePtr) -> Self {
19458 ptr.untyped()
19459 }
19460}
19461impl From<GenericArgValueExprPtr> for GenericArgValuePtr {
19462 fn from(value: GenericArgValueExprPtr) -> Self {
19463 Self(value.0)
19464 }
19465}
19466impl From<TerminalUnderscorePtr> for GenericArgValuePtr {
19467 fn from(value: TerminalUnderscorePtr) -> Self {
19468 Self(value.0)
19469 }
19470}
19471impl From<GenericArgValueExprGreen> for GenericArgValueGreen {
19472 fn from(value: GenericArgValueExprGreen) -> Self {
19473 Self(value.0)
19474 }
19475}
19476impl From<TerminalUnderscoreGreen> for GenericArgValueGreen {
19477 fn from(value: TerminalUnderscoreGreen) -> Self {
19478 Self(value.0)
19479 }
19480}
19481#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19482pub struct GenericArgValueGreen(pub GreenId);
19483impl TypedSyntaxNode for GenericArgValue {
19484 const OPTIONAL_KIND: Option<SyntaxKind> = None;
19485 type StablePtr = GenericArgValuePtr;
19486 type Green = GenericArgValueGreen;
19487 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19488 panic!("No missing variant.");
19489 }
19490 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19491 let kind = node.kind(db);
19492 match kind {
19493 SyntaxKind::GenericArgValueExpr => {
19494 GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node))
19495 }
19496 SyntaxKind::TerminalUnderscore => {
19497 GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node))
19498 }
19499 _ => {
19500 panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericArgValue")
19501 }
19502 }
19503 }
19504 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19505 let kind = node.kind(db);
19506 match kind {
19507 SyntaxKind::GenericArgValueExpr => {
19508 Some(GenericArgValue::Expr(GenericArgValueExpr::from_syntax_node(db, node)))
19509 }
19510 SyntaxKind::TerminalUnderscore => {
19511 Some(GenericArgValue::Underscore(TerminalUnderscore::from_syntax_node(db, node)))
19512 }
19513 _ => None,
19514 }
19515 }
19516 fn as_syntax_node(&self) -> SyntaxNode {
19517 match self {
19518 GenericArgValue::Expr(x) => x.as_syntax_node(),
19519 GenericArgValue::Underscore(x) => x.as_syntax_node(),
19520 }
19521 }
19522 fn stable_ptr(&self) -> Self::StablePtr {
19523 GenericArgValuePtr(self.as_syntax_node().0.stable_ptr)
19524 }
19525}
19526impl From<&GenericArgValue> for SyntaxStablePtrId {
19527 fn from(node: &GenericArgValue) -> Self {
19528 node.stable_ptr().untyped()
19529 }
19530}
19531impl GenericArgValue {
19532 pub fn is_variant(kind: SyntaxKind) -> bool {
19534 matches!(kind, SyntaxKind::GenericArgValueExpr | SyntaxKind::TerminalUnderscore)
19535 }
19536}
19537#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19538pub struct GenericArgValueExpr {
19539 node: SyntaxNode,
19540 children: Arc<[SyntaxNode]>,
19541}
19542impl GenericArgValueExpr {
19543 pub const INDEX_EXPR: usize = 0;
19544 pub fn new_green(db: &dyn SyntaxGroup, expr: ExprGreen) -> GenericArgValueExprGreen {
19545 let children: Vec<GreenId> = vec![expr.0];
19546 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19547 GenericArgValueExprGreen(
19548 Arc::new(GreenNode {
19549 kind: SyntaxKind::GenericArgValueExpr,
19550 details: GreenNodeDetails::Node { children, width },
19551 })
19552 .intern(db),
19553 )
19554 }
19555}
19556impl GenericArgValueExpr {
19557 pub fn expr(&self, db: &dyn SyntaxGroup) -> Expr {
19558 Expr::from_syntax_node(db, self.children[0].clone())
19559 }
19560}
19561#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19562pub struct GenericArgValueExprPtr(pub SyntaxStablePtrId);
19563impl GenericArgValueExprPtr {}
19564impl TypedStablePtr for GenericArgValueExprPtr {
19565 type SyntaxNode = GenericArgValueExpr;
19566 fn untyped(&self) -> SyntaxStablePtrId {
19567 self.0
19568 }
19569 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgValueExpr {
19570 GenericArgValueExpr::from_syntax_node(db, self.0.lookup(db))
19571 }
19572}
19573impl From<GenericArgValueExprPtr> for SyntaxStablePtrId {
19574 fn from(ptr: GenericArgValueExprPtr) -> Self {
19575 ptr.untyped()
19576 }
19577}
19578#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19579pub struct GenericArgValueExprGreen(pub GreenId);
19580impl TypedSyntaxNode for GenericArgValueExpr {
19581 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgValueExpr);
19582 type StablePtr = GenericArgValueExprPtr;
19583 type Green = GenericArgValueExprGreen;
19584 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19585 GenericArgValueExprGreen(
19586 Arc::new(GreenNode {
19587 kind: SyntaxKind::GenericArgValueExpr,
19588 details: GreenNodeDetails::Node {
19589 children: vec![Expr::missing(db).0],
19590 width: TextWidth::default(),
19591 },
19592 })
19593 .intern(db),
19594 )
19595 }
19596 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19597 let kind = node.kind(db);
19598 assert_eq!(
19599 kind,
19600 SyntaxKind::GenericArgValueExpr,
19601 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19602 kind,
19603 SyntaxKind::GenericArgValueExpr
19604 );
19605 let children = db.get_children(node.clone());
19606 Self { node, children }
19607 }
19608 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19609 let kind = node.kind(db);
19610 if kind == SyntaxKind::GenericArgValueExpr {
19611 Some(Self::from_syntax_node(db, node))
19612 } else {
19613 None
19614 }
19615 }
19616 fn as_syntax_node(&self) -> SyntaxNode {
19617 self.node.clone()
19618 }
19619 fn stable_ptr(&self) -> Self::StablePtr {
19620 GenericArgValueExprPtr(self.node.0.stable_ptr)
19621 }
19622}
19623impl From<&GenericArgValueExpr> for SyntaxStablePtrId {
19624 fn from(node: &GenericArgValueExpr) -> Self {
19625 node.stable_ptr().untyped()
19626 }
19627}
19628#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19629pub struct GenericArgs {
19630 node: SyntaxNode,
19631 children: Arc<[SyntaxNode]>,
19632}
19633impl GenericArgs {
19634 pub const INDEX_LANGLE: usize = 0;
19635 pub const INDEX_GENERIC_ARGS: usize = 1;
19636 pub const INDEX_RANGLE: usize = 2;
19637 pub fn new_green(
19638 db: &dyn SyntaxGroup,
19639 langle: TerminalLTGreen,
19640 generic_args: GenericArgListGreen,
19641 rangle: TerminalGTGreen,
19642 ) -> GenericArgsGreen {
19643 let children: Vec<GreenId> = vec![langle.0, generic_args.0, rangle.0];
19644 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19645 GenericArgsGreen(
19646 Arc::new(GreenNode {
19647 kind: SyntaxKind::GenericArgs,
19648 details: GreenNodeDetails::Node { children, width },
19649 })
19650 .intern(db),
19651 )
19652 }
19653}
19654impl GenericArgs {
19655 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
19656 TerminalLT::from_syntax_node(db, self.children[0].clone())
19657 }
19658 pub fn generic_args(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19659 GenericArgList::from_syntax_node(db, self.children[1].clone())
19660 }
19661 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
19662 TerminalGT::from_syntax_node(db, self.children[2].clone())
19663 }
19664}
19665#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19666pub struct GenericArgsPtr(pub SyntaxStablePtrId);
19667impl GenericArgsPtr {}
19668impl TypedStablePtr for GenericArgsPtr {
19669 type SyntaxNode = GenericArgs;
19670 fn untyped(&self) -> SyntaxStablePtrId {
19671 self.0
19672 }
19673 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgs {
19674 GenericArgs::from_syntax_node(db, self.0.lookup(db))
19675 }
19676}
19677impl From<GenericArgsPtr> for SyntaxStablePtrId {
19678 fn from(ptr: GenericArgsPtr) -> Self {
19679 ptr.untyped()
19680 }
19681}
19682#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19683pub struct GenericArgsGreen(pub GreenId);
19684impl TypedSyntaxNode for GenericArgs {
19685 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgs);
19686 type StablePtr = GenericArgsPtr;
19687 type Green = GenericArgsGreen;
19688 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19689 GenericArgsGreen(
19690 Arc::new(GreenNode {
19691 kind: SyntaxKind::GenericArgs,
19692 details: GreenNodeDetails::Node {
19693 children: vec![
19694 TerminalLT::missing(db).0,
19695 GenericArgList::missing(db).0,
19696 TerminalGT::missing(db).0,
19697 ],
19698 width: TextWidth::default(),
19699 },
19700 })
19701 .intern(db),
19702 )
19703 }
19704 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19705 let kind = node.kind(db);
19706 assert_eq!(
19707 kind,
19708 SyntaxKind::GenericArgs,
19709 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19710 kind,
19711 SyntaxKind::GenericArgs
19712 );
19713 let children = db.get_children(node.clone());
19714 Self { node, children }
19715 }
19716 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19717 let kind = node.kind(db);
19718 if kind == SyntaxKind::GenericArgs { Some(Self::from_syntax_node(db, node)) } else { None }
19719 }
19720 fn as_syntax_node(&self) -> SyntaxNode {
19721 self.node.clone()
19722 }
19723 fn stable_ptr(&self) -> Self::StablePtr {
19724 GenericArgsPtr(self.node.0.stable_ptr)
19725 }
19726}
19727impl From<&GenericArgs> for SyntaxStablePtrId {
19728 fn from(node: &GenericArgs) -> Self {
19729 node.stable_ptr().untyped()
19730 }
19731}
19732#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19733pub struct GenericArgList(ElementList<GenericArg, 2>);
19734impl Deref for GenericArgList {
19735 type Target = ElementList<GenericArg, 2>;
19736 fn deref(&self) -> &Self::Target {
19737 &self.0
19738 }
19739}
19740impl GenericArgList {
19741 pub fn new_green(
19742 db: &dyn SyntaxGroup,
19743 children: Vec<GenericArgListElementOrSeparatorGreen>,
19744 ) -> GenericArgListGreen {
19745 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
19746 GenericArgListGreen(
19747 Arc::new(GreenNode {
19748 kind: SyntaxKind::GenericArgList,
19749 details: GreenNodeDetails::Node {
19750 children: children.iter().map(|x| x.id()).collect(),
19751 width,
19752 },
19753 })
19754 .intern(db),
19755 )
19756 }
19757}
19758#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19759pub struct GenericArgListPtr(pub SyntaxStablePtrId);
19760impl TypedStablePtr for GenericArgListPtr {
19761 type SyntaxNode = GenericArgList;
19762 fn untyped(&self) -> SyntaxStablePtrId {
19763 self.0
19764 }
19765 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericArgList {
19766 GenericArgList::from_syntax_node(db, self.0.lookup(db))
19767 }
19768}
19769impl From<GenericArgListPtr> for SyntaxStablePtrId {
19770 fn from(ptr: GenericArgListPtr) -> Self {
19771 ptr.untyped()
19772 }
19773}
19774#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19775pub enum GenericArgListElementOrSeparatorGreen {
19776 Separator(TerminalCommaGreen),
19777 Element(GenericArgGreen),
19778}
19779impl From<TerminalCommaGreen> for GenericArgListElementOrSeparatorGreen {
19780 fn from(value: TerminalCommaGreen) -> Self {
19781 GenericArgListElementOrSeparatorGreen::Separator(value)
19782 }
19783}
19784impl From<GenericArgGreen> for GenericArgListElementOrSeparatorGreen {
19785 fn from(value: GenericArgGreen) -> Self {
19786 GenericArgListElementOrSeparatorGreen::Element(value)
19787 }
19788}
19789impl GenericArgListElementOrSeparatorGreen {
19790 fn id(&self) -> GreenId {
19791 match self {
19792 GenericArgListElementOrSeparatorGreen::Separator(green) => green.0,
19793 GenericArgListElementOrSeparatorGreen::Element(green) => green.0,
19794 }
19795 }
19796}
19797#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19798pub struct GenericArgListGreen(pub GreenId);
19799impl TypedSyntaxNode for GenericArgList {
19800 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericArgList);
19801 type StablePtr = GenericArgListPtr;
19802 type Green = GenericArgListGreen;
19803 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19804 GenericArgListGreen(
19805 Arc::new(GreenNode {
19806 kind: SyntaxKind::GenericArgList,
19807 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
19808 })
19809 .intern(db),
19810 )
19811 }
19812 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19813 Self(ElementList::new(node))
19814 }
19815 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19816 if node.kind(db) == SyntaxKind::GenericArgList {
19817 Some(Self(ElementList::new(node)))
19818 } else {
19819 None
19820 }
19821 }
19822 fn as_syntax_node(&self) -> SyntaxNode {
19823 self.node.clone()
19824 }
19825 fn stable_ptr(&self) -> Self::StablePtr {
19826 GenericArgListPtr(self.node.0.stable_ptr)
19827 }
19828}
19829impl From<&GenericArgList> for SyntaxStablePtrId {
19830 fn from(node: &GenericArgList) -> Self {
19831 node.stable_ptr().untyped()
19832 }
19833}
19834#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19835pub struct AssociatedItemConstraint {
19836 node: SyntaxNode,
19837 children: Arc<[SyntaxNode]>,
19838}
19839impl AssociatedItemConstraint {
19840 pub const INDEX_ITEM: usize = 0;
19841 pub const INDEX_COLON: usize = 1;
19842 pub const INDEX_VALUE: usize = 2;
19843 pub fn new_green(
19844 db: &dyn SyntaxGroup,
19845 item: TerminalIdentifierGreen,
19846 colon: TerminalColonGreen,
19847 value: ExprGreen,
19848 ) -> AssociatedItemConstraintGreen {
19849 let children: Vec<GreenId> = vec![item.0, colon.0, value.0];
19850 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19851 AssociatedItemConstraintGreen(
19852 Arc::new(GreenNode {
19853 kind: SyntaxKind::AssociatedItemConstraint,
19854 details: GreenNodeDetails::Node { children, width },
19855 })
19856 .intern(db),
19857 )
19858 }
19859}
19860impl AssociatedItemConstraint {
19861 pub fn item(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
19862 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
19863 }
19864 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
19865 TerminalColon::from_syntax_node(db, self.children[1].clone())
19866 }
19867 pub fn value(&self, db: &dyn SyntaxGroup) -> Expr {
19868 Expr::from_syntax_node(db, self.children[2].clone())
19869 }
19870}
19871#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19872pub struct AssociatedItemConstraintPtr(pub SyntaxStablePtrId);
19873impl AssociatedItemConstraintPtr {}
19874impl TypedStablePtr for AssociatedItemConstraintPtr {
19875 type SyntaxNode = AssociatedItemConstraint;
19876 fn untyped(&self) -> SyntaxStablePtrId {
19877 self.0
19878 }
19879 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraint {
19880 AssociatedItemConstraint::from_syntax_node(db, self.0.lookup(db))
19881 }
19882}
19883impl From<AssociatedItemConstraintPtr> for SyntaxStablePtrId {
19884 fn from(ptr: AssociatedItemConstraintPtr) -> Self {
19885 ptr.untyped()
19886 }
19887}
19888#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19889pub struct AssociatedItemConstraintGreen(pub GreenId);
19890impl TypedSyntaxNode for AssociatedItemConstraint {
19891 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraint);
19892 type StablePtr = AssociatedItemConstraintPtr;
19893 type Green = AssociatedItemConstraintGreen;
19894 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
19895 AssociatedItemConstraintGreen(
19896 Arc::new(GreenNode {
19897 kind: SyntaxKind::AssociatedItemConstraint,
19898 details: GreenNodeDetails::Node {
19899 children: vec![
19900 TerminalIdentifier::missing(db).0,
19901 TerminalColon::missing(db).0,
19902 Expr::missing(db).0,
19903 ],
19904 width: TextWidth::default(),
19905 },
19906 })
19907 .intern(db),
19908 )
19909 }
19910 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
19911 let kind = node.kind(db);
19912 assert_eq!(
19913 kind,
19914 SyntaxKind::AssociatedItemConstraint,
19915 "Unexpected SyntaxKind {:?}. Expected {:?}.",
19916 kind,
19917 SyntaxKind::AssociatedItemConstraint
19918 );
19919 let children = db.get_children(node.clone());
19920 Self { node, children }
19921 }
19922 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
19923 let kind = node.kind(db);
19924 if kind == SyntaxKind::AssociatedItemConstraint {
19925 Some(Self::from_syntax_node(db, node))
19926 } else {
19927 None
19928 }
19929 }
19930 fn as_syntax_node(&self) -> SyntaxNode {
19931 self.node.clone()
19932 }
19933 fn stable_ptr(&self) -> Self::StablePtr {
19934 AssociatedItemConstraintPtr(self.node.0.stable_ptr)
19935 }
19936}
19937impl From<&AssociatedItemConstraint> for SyntaxStablePtrId {
19938 fn from(node: &AssociatedItemConstraint) -> Self {
19939 node.stable_ptr().untyped()
19940 }
19941}
19942#[derive(Clone, Debug, Eq, Hash, PartialEq)]
19943pub struct AssociatedItemConstraints {
19944 node: SyntaxNode,
19945 children: Arc<[SyntaxNode]>,
19946}
19947impl AssociatedItemConstraints {
19948 pub const INDEX_LBRACK: usize = 0;
19949 pub const INDEX_ASSOCIATED_ITEM_CONSTRAINTS: usize = 1;
19950 pub const INDEX_RBRACK: usize = 2;
19951 pub fn new_green(
19952 db: &dyn SyntaxGroup,
19953 lbrack: TerminalLBrackGreen,
19954 associated_item_constraints: AssociatedItemConstraintListGreen,
19955 rbrack: TerminalRBrackGreen,
19956 ) -> AssociatedItemConstraintsGreen {
19957 let children: Vec<GreenId> = vec![lbrack.0, associated_item_constraints.0, rbrack.0];
19958 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
19959 AssociatedItemConstraintsGreen(
19960 Arc::new(GreenNode {
19961 kind: SyntaxKind::AssociatedItemConstraints,
19962 details: GreenNodeDetails::Node { children, width },
19963 })
19964 .intern(db),
19965 )
19966 }
19967}
19968impl AssociatedItemConstraints {
19969 pub fn lbrack(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
19970 TerminalLBrack::from_syntax_node(db, self.children[0].clone())
19971 }
19972 pub fn associated_item_constraints(
19973 &self,
19974 db: &dyn SyntaxGroup,
19975 ) -> AssociatedItemConstraintList {
19976 AssociatedItemConstraintList::from_syntax_node(db, self.children[1].clone())
19977 }
19978 pub fn rbrack(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
19979 TerminalRBrack::from_syntax_node(db, self.children[2].clone())
19980 }
19981}
19982#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
19983pub struct AssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
19984impl AssociatedItemConstraintsPtr {}
19985impl TypedStablePtr for AssociatedItemConstraintsPtr {
19986 type SyntaxNode = AssociatedItemConstraints;
19987 fn untyped(&self) -> SyntaxStablePtrId {
19988 self.0
19989 }
19990 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraints {
19991 AssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
19992 }
19993}
19994impl From<AssociatedItemConstraintsPtr> for SyntaxStablePtrId {
19995 fn from(ptr: AssociatedItemConstraintsPtr) -> Self {
19996 ptr.untyped()
19997 }
19998}
19999#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20000pub struct AssociatedItemConstraintsGreen(pub GreenId);
20001impl TypedSyntaxNode for AssociatedItemConstraints {
20002 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraints);
20003 type StablePtr = AssociatedItemConstraintsPtr;
20004 type Green = AssociatedItemConstraintsGreen;
20005 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20006 AssociatedItemConstraintsGreen(
20007 Arc::new(GreenNode {
20008 kind: SyntaxKind::AssociatedItemConstraints,
20009 details: GreenNodeDetails::Node {
20010 children: vec![
20011 TerminalLBrack::missing(db).0,
20012 AssociatedItemConstraintList::missing(db).0,
20013 TerminalRBrack::missing(db).0,
20014 ],
20015 width: TextWidth::default(),
20016 },
20017 })
20018 .intern(db),
20019 )
20020 }
20021 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20022 let kind = node.kind(db);
20023 assert_eq!(
20024 kind,
20025 SyntaxKind::AssociatedItemConstraints,
20026 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20027 kind,
20028 SyntaxKind::AssociatedItemConstraints
20029 );
20030 let children = db.get_children(node.clone());
20031 Self { node, children }
20032 }
20033 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20034 let kind = node.kind(db);
20035 if kind == SyntaxKind::AssociatedItemConstraints {
20036 Some(Self::from_syntax_node(db, node))
20037 } else {
20038 None
20039 }
20040 }
20041 fn as_syntax_node(&self) -> SyntaxNode {
20042 self.node.clone()
20043 }
20044 fn stable_ptr(&self) -> Self::StablePtr {
20045 AssociatedItemConstraintsPtr(self.node.0.stable_ptr)
20046 }
20047}
20048impl From<&AssociatedItemConstraints> for SyntaxStablePtrId {
20049 fn from(node: &AssociatedItemConstraints) -> Self {
20050 node.stable_ptr().untyped()
20051 }
20052}
20053#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20054pub struct AssociatedItemConstraintList(ElementList<AssociatedItemConstraint, 2>);
20055impl Deref for AssociatedItemConstraintList {
20056 type Target = ElementList<AssociatedItemConstraint, 2>;
20057 fn deref(&self) -> &Self::Target {
20058 &self.0
20059 }
20060}
20061impl AssociatedItemConstraintList {
20062 pub fn new_green(
20063 db: &dyn SyntaxGroup,
20064 children: Vec<AssociatedItemConstraintListElementOrSeparatorGreen>,
20065 ) -> AssociatedItemConstraintListGreen {
20066 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
20067 AssociatedItemConstraintListGreen(
20068 Arc::new(GreenNode {
20069 kind: SyntaxKind::AssociatedItemConstraintList,
20070 details: GreenNodeDetails::Node {
20071 children: children.iter().map(|x| x.id()).collect(),
20072 width,
20073 },
20074 })
20075 .intern(db),
20076 )
20077 }
20078}
20079#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20080pub struct AssociatedItemConstraintListPtr(pub SyntaxStablePtrId);
20081impl TypedStablePtr for AssociatedItemConstraintListPtr {
20082 type SyntaxNode = AssociatedItemConstraintList;
20083 fn untyped(&self) -> SyntaxStablePtrId {
20084 self.0
20085 }
20086 fn lookup(&self, db: &dyn SyntaxGroup) -> AssociatedItemConstraintList {
20087 AssociatedItemConstraintList::from_syntax_node(db, self.0.lookup(db))
20088 }
20089}
20090impl From<AssociatedItemConstraintListPtr> for SyntaxStablePtrId {
20091 fn from(ptr: AssociatedItemConstraintListPtr) -> Self {
20092 ptr.untyped()
20093 }
20094}
20095#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20096pub enum AssociatedItemConstraintListElementOrSeparatorGreen {
20097 Separator(TerminalCommaGreen),
20098 Element(AssociatedItemConstraintGreen),
20099}
20100impl From<TerminalCommaGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
20101 fn from(value: TerminalCommaGreen) -> Self {
20102 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(value)
20103 }
20104}
20105impl From<AssociatedItemConstraintGreen> for AssociatedItemConstraintListElementOrSeparatorGreen {
20106 fn from(value: AssociatedItemConstraintGreen) -> Self {
20107 AssociatedItemConstraintListElementOrSeparatorGreen::Element(value)
20108 }
20109}
20110impl AssociatedItemConstraintListElementOrSeparatorGreen {
20111 fn id(&self) -> GreenId {
20112 match self {
20113 AssociatedItemConstraintListElementOrSeparatorGreen::Separator(green) => green.0,
20114 AssociatedItemConstraintListElementOrSeparatorGreen::Element(green) => green.0,
20115 }
20116 }
20117}
20118#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20119pub struct AssociatedItemConstraintListGreen(pub GreenId);
20120impl TypedSyntaxNode for AssociatedItemConstraintList {
20121 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::AssociatedItemConstraintList);
20122 type StablePtr = AssociatedItemConstraintListPtr;
20123 type Green = AssociatedItemConstraintListGreen;
20124 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20125 AssociatedItemConstraintListGreen(
20126 Arc::new(GreenNode {
20127 kind: SyntaxKind::AssociatedItemConstraintList,
20128 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20129 })
20130 .intern(db),
20131 )
20132 }
20133 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20134 Self(ElementList::new(node))
20135 }
20136 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20137 if node.kind(db) == SyntaxKind::AssociatedItemConstraintList {
20138 Some(Self(ElementList::new(node)))
20139 } else {
20140 None
20141 }
20142 }
20143 fn as_syntax_node(&self) -> SyntaxNode {
20144 self.node.clone()
20145 }
20146 fn stable_ptr(&self) -> Self::StablePtr {
20147 AssociatedItemConstraintListPtr(self.node.0.stable_ptr)
20148 }
20149}
20150impl From<&AssociatedItemConstraintList> for SyntaxStablePtrId {
20151 fn from(node: &AssociatedItemConstraintList) -> Self {
20152 node.stable_ptr().untyped()
20153 }
20154}
20155#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20156pub enum OptionAssociatedItemConstraints {
20157 Empty(OptionAssociatedItemConstraintsEmpty),
20158 AssociatedItemConstraints(AssociatedItemConstraints),
20159}
20160#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20161pub struct OptionAssociatedItemConstraintsPtr(pub SyntaxStablePtrId);
20162impl TypedStablePtr for OptionAssociatedItemConstraintsPtr {
20163 type SyntaxNode = OptionAssociatedItemConstraints;
20164 fn untyped(&self) -> SyntaxStablePtrId {
20165 self.0
20166 }
20167 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
20168 OptionAssociatedItemConstraints::from_syntax_node(db, self.0.lookup(db))
20169 }
20170}
20171impl From<OptionAssociatedItemConstraintsPtr> for SyntaxStablePtrId {
20172 fn from(ptr: OptionAssociatedItemConstraintsPtr) -> Self {
20173 ptr.untyped()
20174 }
20175}
20176impl From<OptionAssociatedItemConstraintsEmptyPtr> for OptionAssociatedItemConstraintsPtr {
20177 fn from(value: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
20178 Self(value.0)
20179 }
20180}
20181impl From<AssociatedItemConstraintsPtr> for OptionAssociatedItemConstraintsPtr {
20182 fn from(value: AssociatedItemConstraintsPtr) -> Self {
20183 Self(value.0)
20184 }
20185}
20186impl From<OptionAssociatedItemConstraintsEmptyGreen> for OptionAssociatedItemConstraintsGreen {
20187 fn from(value: OptionAssociatedItemConstraintsEmptyGreen) -> Self {
20188 Self(value.0)
20189 }
20190}
20191impl From<AssociatedItemConstraintsGreen> for OptionAssociatedItemConstraintsGreen {
20192 fn from(value: AssociatedItemConstraintsGreen) -> Self {
20193 Self(value.0)
20194 }
20195}
20196#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20197pub struct OptionAssociatedItemConstraintsGreen(pub GreenId);
20198impl TypedSyntaxNode for OptionAssociatedItemConstraints {
20199 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20200 type StablePtr = OptionAssociatedItemConstraintsPtr;
20201 type Green = OptionAssociatedItemConstraintsGreen;
20202 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20203 panic!("No missing variant.");
20204 }
20205 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20206 let kind = node.kind(db);
20207 match kind {
20208 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
20209 OptionAssociatedItemConstraints::Empty(
20210 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
20211 )
20212 }
20213 SyntaxKind::AssociatedItemConstraints => {
20214 OptionAssociatedItemConstraints::AssociatedItemConstraints(
20215 AssociatedItemConstraints::from_syntax_node(db, node),
20216 )
20217 }
20218 _ => panic!(
20219 "Unexpected syntax kind {:?} when constructing {}.",
20220 kind, "OptionAssociatedItemConstraints"
20221 ),
20222 }
20223 }
20224 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20225 let kind = node.kind(db);
20226 match kind {
20227 SyntaxKind::OptionAssociatedItemConstraintsEmpty => {
20228 Some(OptionAssociatedItemConstraints::Empty(
20229 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, node),
20230 ))
20231 }
20232 SyntaxKind::AssociatedItemConstraints => {
20233 Some(OptionAssociatedItemConstraints::AssociatedItemConstraints(
20234 AssociatedItemConstraints::from_syntax_node(db, node),
20235 ))
20236 }
20237 _ => None,
20238 }
20239 }
20240 fn as_syntax_node(&self) -> SyntaxNode {
20241 match self {
20242 OptionAssociatedItemConstraints::Empty(x) => x.as_syntax_node(),
20243 OptionAssociatedItemConstraints::AssociatedItemConstraints(x) => x.as_syntax_node(),
20244 }
20245 }
20246 fn stable_ptr(&self) -> Self::StablePtr {
20247 OptionAssociatedItemConstraintsPtr(self.as_syntax_node().0.stable_ptr)
20248 }
20249}
20250impl From<&OptionAssociatedItemConstraints> for SyntaxStablePtrId {
20251 fn from(node: &OptionAssociatedItemConstraints) -> Self {
20252 node.stable_ptr().untyped()
20253 }
20254}
20255impl OptionAssociatedItemConstraints {
20256 pub fn is_variant(kind: SyntaxKind) -> bool {
20258 matches!(
20259 kind,
20260 SyntaxKind::OptionAssociatedItemConstraintsEmpty
20261 | SyntaxKind::AssociatedItemConstraints
20262 )
20263 }
20264}
20265#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20266pub struct OptionAssociatedItemConstraintsEmpty {
20267 node: SyntaxNode,
20268 children: Arc<[SyntaxNode]>,
20269}
20270impl OptionAssociatedItemConstraintsEmpty {
20271 pub fn new_green(db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmptyGreen {
20272 let children: Vec<GreenId> = vec![];
20273 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20274 OptionAssociatedItemConstraintsEmptyGreen(
20275 Arc::new(GreenNode {
20276 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20277 details: GreenNodeDetails::Node { children, width },
20278 })
20279 .intern(db),
20280 )
20281 }
20282}
20283impl OptionAssociatedItemConstraintsEmpty {}
20284#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20285pub struct OptionAssociatedItemConstraintsEmptyPtr(pub SyntaxStablePtrId);
20286impl OptionAssociatedItemConstraintsEmptyPtr {}
20287impl TypedStablePtr for OptionAssociatedItemConstraintsEmptyPtr {
20288 type SyntaxNode = OptionAssociatedItemConstraintsEmpty;
20289 fn untyped(&self) -> SyntaxStablePtrId {
20290 self.0
20291 }
20292 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraintsEmpty {
20293 OptionAssociatedItemConstraintsEmpty::from_syntax_node(db, self.0.lookup(db))
20294 }
20295}
20296impl From<OptionAssociatedItemConstraintsEmptyPtr> for SyntaxStablePtrId {
20297 fn from(ptr: OptionAssociatedItemConstraintsEmptyPtr) -> Self {
20298 ptr.untyped()
20299 }
20300}
20301#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20302pub struct OptionAssociatedItemConstraintsEmptyGreen(pub GreenId);
20303impl TypedSyntaxNode for OptionAssociatedItemConstraintsEmpty {
20304 const OPTIONAL_KIND: Option<SyntaxKind> =
20305 Some(SyntaxKind::OptionAssociatedItemConstraintsEmpty);
20306 type StablePtr = OptionAssociatedItemConstraintsEmptyPtr;
20307 type Green = OptionAssociatedItemConstraintsEmptyGreen;
20308 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20309 OptionAssociatedItemConstraintsEmptyGreen(
20310 Arc::new(GreenNode {
20311 kind: SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20312 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20313 })
20314 .intern(db),
20315 )
20316 }
20317 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20318 let kind = node.kind(db);
20319 assert_eq!(
20320 kind,
20321 SyntaxKind::OptionAssociatedItemConstraintsEmpty,
20322 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20323 kind,
20324 SyntaxKind::OptionAssociatedItemConstraintsEmpty
20325 );
20326 let children = db.get_children(node.clone());
20327 Self { node, children }
20328 }
20329 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20330 let kind = node.kind(db);
20331 if kind == SyntaxKind::OptionAssociatedItemConstraintsEmpty {
20332 Some(Self::from_syntax_node(db, node))
20333 } else {
20334 None
20335 }
20336 }
20337 fn as_syntax_node(&self) -> SyntaxNode {
20338 self.node.clone()
20339 }
20340 fn stable_ptr(&self) -> Self::StablePtr {
20341 OptionAssociatedItemConstraintsEmptyPtr(self.node.0.stable_ptr)
20342 }
20343}
20344impl From<&OptionAssociatedItemConstraintsEmpty> for SyntaxStablePtrId {
20345 fn from(node: &OptionAssociatedItemConstraintsEmpty) -> Self {
20346 node.stable_ptr().untyped()
20347 }
20348}
20349#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20350pub enum OptionWrappedGenericParamList {
20351 Empty(OptionWrappedGenericParamListEmpty),
20352 WrappedGenericParamList(WrappedGenericParamList),
20353}
20354#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20355pub struct OptionWrappedGenericParamListPtr(pub SyntaxStablePtrId);
20356impl TypedStablePtr for OptionWrappedGenericParamListPtr {
20357 type SyntaxNode = OptionWrappedGenericParamList;
20358 fn untyped(&self) -> SyntaxStablePtrId {
20359 self.0
20360 }
20361 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamList {
20362 OptionWrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20363 }
20364}
20365impl From<OptionWrappedGenericParamListPtr> for SyntaxStablePtrId {
20366 fn from(ptr: OptionWrappedGenericParamListPtr) -> Self {
20367 ptr.untyped()
20368 }
20369}
20370impl From<OptionWrappedGenericParamListEmptyPtr> for OptionWrappedGenericParamListPtr {
20371 fn from(value: OptionWrappedGenericParamListEmptyPtr) -> Self {
20372 Self(value.0)
20373 }
20374}
20375impl From<WrappedGenericParamListPtr> for OptionWrappedGenericParamListPtr {
20376 fn from(value: WrappedGenericParamListPtr) -> Self {
20377 Self(value.0)
20378 }
20379}
20380impl From<OptionWrappedGenericParamListEmptyGreen> for OptionWrappedGenericParamListGreen {
20381 fn from(value: OptionWrappedGenericParamListEmptyGreen) -> Self {
20382 Self(value.0)
20383 }
20384}
20385impl From<WrappedGenericParamListGreen> for OptionWrappedGenericParamListGreen {
20386 fn from(value: WrappedGenericParamListGreen) -> Self {
20387 Self(value.0)
20388 }
20389}
20390#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20391pub struct OptionWrappedGenericParamListGreen(pub GreenId);
20392impl TypedSyntaxNode for OptionWrappedGenericParamList {
20393 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20394 type StablePtr = OptionWrappedGenericParamListPtr;
20395 type Green = OptionWrappedGenericParamListGreen;
20396 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20397 panic!("No missing variant.");
20398 }
20399 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20400 let kind = node.kind(db);
20401 match kind {
20402 SyntaxKind::OptionWrappedGenericParamListEmpty => OptionWrappedGenericParamList::Empty(
20403 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20404 ),
20405 SyntaxKind::WrappedGenericParamList => {
20406 OptionWrappedGenericParamList::WrappedGenericParamList(
20407 WrappedGenericParamList::from_syntax_node(db, node),
20408 )
20409 }
20410 _ => panic!(
20411 "Unexpected syntax kind {:?} when constructing {}.",
20412 kind, "OptionWrappedGenericParamList"
20413 ),
20414 }
20415 }
20416 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20417 let kind = node.kind(db);
20418 match kind {
20419 SyntaxKind::OptionWrappedGenericParamListEmpty => {
20420 Some(OptionWrappedGenericParamList::Empty(
20421 OptionWrappedGenericParamListEmpty::from_syntax_node(db, node),
20422 ))
20423 }
20424 SyntaxKind::WrappedGenericParamList => {
20425 Some(OptionWrappedGenericParamList::WrappedGenericParamList(
20426 WrappedGenericParamList::from_syntax_node(db, node),
20427 ))
20428 }
20429 _ => None,
20430 }
20431 }
20432 fn as_syntax_node(&self) -> SyntaxNode {
20433 match self {
20434 OptionWrappedGenericParamList::Empty(x) => x.as_syntax_node(),
20435 OptionWrappedGenericParamList::WrappedGenericParamList(x) => x.as_syntax_node(),
20436 }
20437 }
20438 fn stable_ptr(&self) -> Self::StablePtr {
20439 OptionWrappedGenericParamListPtr(self.as_syntax_node().0.stable_ptr)
20440 }
20441}
20442impl From<&OptionWrappedGenericParamList> for SyntaxStablePtrId {
20443 fn from(node: &OptionWrappedGenericParamList) -> Self {
20444 node.stable_ptr().untyped()
20445 }
20446}
20447impl OptionWrappedGenericParamList {
20448 pub fn is_variant(kind: SyntaxKind) -> bool {
20450 matches!(
20451 kind,
20452 SyntaxKind::OptionWrappedGenericParamListEmpty | SyntaxKind::WrappedGenericParamList
20453 )
20454 }
20455}
20456#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20457pub struct OptionWrappedGenericParamListEmpty {
20458 node: SyntaxNode,
20459 children: Arc<[SyntaxNode]>,
20460}
20461impl OptionWrappedGenericParamListEmpty {
20462 pub fn new_green(db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmptyGreen {
20463 let children: Vec<GreenId> = vec![];
20464 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20465 OptionWrappedGenericParamListEmptyGreen(
20466 Arc::new(GreenNode {
20467 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20468 details: GreenNodeDetails::Node { children, width },
20469 })
20470 .intern(db),
20471 )
20472 }
20473}
20474impl OptionWrappedGenericParamListEmpty {}
20475#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20476pub struct OptionWrappedGenericParamListEmptyPtr(pub SyntaxStablePtrId);
20477impl OptionWrappedGenericParamListEmptyPtr {}
20478impl TypedStablePtr for OptionWrappedGenericParamListEmptyPtr {
20479 type SyntaxNode = OptionWrappedGenericParamListEmpty;
20480 fn untyped(&self) -> SyntaxStablePtrId {
20481 self.0
20482 }
20483 fn lookup(&self, db: &dyn SyntaxGroup) -> OptionWrappedGenericParamListEmpty {
20484 OptionWrappedGenericParamListEmpty::from_syntax_node(db, self.0.lookup(db))
20485 }
20486}
20487impl From<OptionWrappedGenericParamListEmptyPtr> for SyntaxStablePtrId {
20488 fn from(ptr: OptionWrappedGenericParamListEmptyPtr) -> Self {
20489 ptr.untyped()
20490 }
20491}
20492#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20493pub struct OptionWrappedGenericParamListEmptyGreen(pub GreenId);
20494impl TypedSyntaxNode for OptionWrappedGenericParamListEmpty {
20495 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::OptionWrappedGenericParamListEmpty);
20496 type StablePtr = OptionWrappedGenericParamListEmptyPtr;
20497 type Green = OptionWrappedGenericParamListEmptyGreen;
20498 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20499 OptionWrappedGenericParamListEmptyGreen(
20500 Arc::new(GreenNode {
20501 kind: SyntaxKind::OptionWrappedGenericParamListEmpty,
20502 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20503 })
20504 .intern(db),
20505 )
20506 }
20507 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20508 let kind = node.kind(db);
20509 assert_eq!(
20510 kind,
20511 SyntaxKind::OptionWrappedGenericParamListEmpty,
20512 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20513 kind,
20514 SyntaxKind::OptionWrappedGenericParamListEmpty
20515 );
20516 let children = db.get_children(node.clone());
20517 Self { node, children }
20518 }
20519 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20520 let kind = node.kind(db);
20521 if kind == SyntaxKind::OptionWrappedGenericParamListEmpty {
20522 Some(Self::from_syntax_node(db, node))
20523 } else {
20524 None
20525 }
20526 }
20527 fn as_syntax_node(&self) -> SyntaxNode {
20528 self.node.clone()
20529 }
20530 fn stable_ptr(&self) -> Self::StablePtr {
20531 OptionWrappedGenericParamListEmptyPtr(self.node.0.stable_ptr)
20532 }
20533}
20534impl From<&OptionWrappedGenericParamListEmpty> for SyntaxStablePtrId {
20535 fn from(node: &OptionWrappedGenericParamListEmpty) -> Self {
20536 node.stable_ptr().untyped()
20537 }
20538}
20539#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20540pub struct WrappedGenericParamList {
20541 node: SyntaxNode,
20542 children: Arc<[SyntaxNode]>,
20543}
20544impl WrappedGenericParamList {
20545 pub const INDEX_LANGLE: usize = 0;
20546 pub const INDEX_GENERIC_PARAMS: usize = 1;
20547 pub const INDEX_RANGLE: usize = 2;
20548 pub fn new_green(
20549 db: &dyn SyntaxGroup,
20550 langle: TerminalLTGreen,
20551 generic_params: GenericParamListGreen,
20552 rangle: TerminalGTGreen,
20553 ) -> WrappedGenericParamListGreen {
20554 let children: Vec<GreenId> = vec![langle.0, generic_params.0, rangle.0];
20555 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20556 WrappedGenericParamListGreen(
20557 Arc::new(GreenNode {
20558 kind: SyntaxKind::WrappedGenericParamList,
20559 details: GreenNodeDetails::Node { children, width },
20560 })
20561 .intern(db),
20562 )
20563 }
20564}
20565impl WrappedGenericParamList {
20566 pub fn langle(&self, db: &dyn SyntaxGroup) -> TerminalLT {
20567 TerminalLT::from_syntax_node(db, self.children[0].clone())
20568 }
20569 pub fn generic_params(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20570 GenericParamList::from_syntax_node(db, self.children[1].clone())
20571 }
20572 pub fn rangle(&self, db: &dyn SyntaxGroup) -> TerminalGT {
20573 TerminalGT::from_syntax_node(db, self.children[2].clone())
20574 }
20575}
20576#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20577pub struct WrappedGenericParamListPtr(pub SyntaxStablePtrId);
20578impl WrappedGenericParamListPtr {}
20579impl TypedStablePtr for WrappedGenericParamListPtr {
20580 type SyntaxNode = WrappedGenericParamList;
20581 fn untyped(&self) -> SyntaxStablePtrId {
20582 self.0
20583 }
20584 fn lookup(&self, db: &dyn SyntaxGroup) -> WrappedGenericParamList {
20585 WrappedGenericParamList::from_syntax_node(db, self.0.lookup(db))
20586 }
20587}
20588impl From<WrappedGenericParamListPtr> for SyntaxStablePtrId {
20589 fn from(ptr: WrappedGenericParamListPtr) -> Self {
20590 ptr.untyped()
20591 }
20592}
20593#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20594pub struct WrappedGenericParamListGreen(pub GreenId);
20595impl TypedSyntaxNode for WrappedGenericParamList {
20596 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::WrappedGenericParamList);
20597 type StablePtr = WrappedGenericParamListPtr;
20598 type Green = WrappedGenericParamListGreen;
20599 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20600 WrappedGenericParamListGreen(
20601 Arc::new(GreenNode {
20602 kind: SyntaxKind::WrappedGenericParamList,
20603 details: GreenNodeDetails::Node {
20604 children: vec![
20605 TerminalLT::missing(db).0,
20606 GenericParamList::missing(db).0,
20607 TerminalGT::missing(db).0,
20608 ],
20609 width: TextWidth::default(),
20610 },
20611 })
20612 .intern(db),
20613 )
20614 }
20615 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20616 let kind = node.kind(db);
20617 assert_eq!(
20618 kind,
20619 SyntaxKind::WrappedGenericParamList,
20620 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20621 kind,
20622 SyntaxKind::WrappedGenericParamList
20623 );
20624 let children = db.get_children(node.clone());
20625 Self { node, children }
20626 }
20627 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20628 let kind = node.kind(db);
20629 if kind == SyntaxKind::WrappedGenericParamList {
20630 Some(Self::from_syntax_node(db, node))
20631 } else {
20632 None
20633 }
20634 }
20635 fn as_syntax_node(&self) -> SyntaxNode {
20636 self.node.clone()
20637 }
20638 fn stable_ptr(&self) -> Self::StablePtr {
20639 WrappedGenericParamListPtr(self.node.0.stable_ptr)
20640 }
20641}
20642impl From<&WrappedGenericParamList> for SyntaxStablePtrId {
20643 fn from(node: &WrappedGenericParamList) -> Self {
20644 node.stable_ptr().untyped()
20645 }
20646}
20647#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20648pub struct GenericParamList(ElementList<GenericParam, 2>);
20649impl Deref for GenericParamList {
20650 type Target = ElementList<GenericParam, 2>;
20651 fn deref(&self) -> &Self::Target {
20652 &self.0
20653 }
20654}
20655impl GenericParamList {
20656 pub fn new_green(
20657 db: &dyn SyntaxGroup,
20658 children: Vec<GenericParamListElementOrSeparatorGreen>,
20659 ) -> GenericParamListGreen {
20660 let width = children.iter().map(|id| id.id().lookup_intern(db).width()).sum();
20661 GenericParamListGreen(
20662 Arc::new(GreenNode {
20663 kind: SyntaxKind::GenericParamList,
20664 details: GreenNodeDetails::Node {
20665 children: children.iter().map(|x| x.id()).collect(),
20666 width,
20667 },
20668 })
20669 .intern(db),
20670 )
20671 }
20672}
20673#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20674pub struct GenericParamListPtr(pub SyntaxStablePtrId);
20675impl TypedStablePtr for GenericParamListPtr {
20676 type SyntaxNode = GenericParamList;
20677 fn untyped(&self) -> SyntaxStablePtrId {
20678 self.0
20679 }
20680 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamList {
20681 GenericParamList::from_syntax_node(db, self.0.lookup(db))
20682 }
20683}
20684impl From<GenericParamListPtr> for SyntaxStablePtrId {
20685 fn from(ptr: GenericParamListPtr) -> Self {
20686 ptr.untyped()
20687 }
20688}
20689#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20690pub enum GenericParamListElementOrSeparatorGreen {
20691 Separator(TerminalCommaGreen),
20692 Element(GenericParamGreen),
20693}
20694impl From<TerminalCommaGreen> for GenericParamListElementOrSeparatorGreen {
20695 fn from(value: TerminalCommaGreen) -> Self {
20696 GenericParamListElementOrSeparatorGreen::Separator(value)
20697 }
20698}
20699impl From<GenericParamGreen> for GenericParamListElementOrSeparatorGreen {
20700 fn from(value: GenericParamGreen) -> Self {
20701 GenericParamListElementOrSeparatorGreen::Element(value)
20702 }
20703}
20704impl GenericParamListElementOrSeparatorGreen {
20705 fn id(&self) -> GreenId {
20706 match self {
20707 GenericParamListElementOrSeparatorGreen::Separator(green) => green.0,
20708 GenericParamListElementOrSeparatorGreen::Element(green) => green.0,
20709 }
20710 }
20711}
20712#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20713pub struct GenericParamListGreen(pub GreenId);
20714impl TypedSyntaxNode for GenericParamList {
20715 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamList);
20716 type StablePtr = GenericParamListPtr;
20717 type Green = GenericParamListGreen;
20718 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20719 GenericParamListGreen(
20720 Arc::new(GreenNode {
20721 kind: SyntaxKind::GenericParamList,
20722 details: GreenNodeDetails::Node { children: vec![], width: TextWidth::default() },
20723 })
20724 .intern(db),
20725 )
20726 }
20727 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20728 Self(ElementList::new(node))
20729 }
20730 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20731 if node.kind(db) == SyntaxKind::GenericParamList {
20732 Some(Self(ElementList::new(node)))
20733 } else {
20734 None
20735 }
20736 }
20737 fn as_syntax_node(&self) -> SyntaxNode {
20738 self.node.clone()
20739 }
20740 fn stable_ptr(&self) -> Self::StablePtr {
20741 GenericParamListPtr(self.node.0.stable_ptr)
20742 }
20743}
20744impl From<&GenericParamList> for SyntaxStablePtrId {
20745 fn from(node: &GenericParamList) -> Self {
20746 node.stable_ptr().untyped()
20747 }
20748}
20749#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20750pub enum GenericParam {
20751 Type(GenericParamType),
20752 Const(GenericParamConst),
20753 ImplNamed(GenericParamImplNamed),
20754 ImplAnonymous(GenericParamImplAnonymous),
20755 NegativeImpl(GenericParamNegativeImpl),
20756}
20757#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20758pub struct GenericParamPtr(pub SyntaxStablePtrId);
20759impl TypedStablePtr for GenericParamPtr {
20760 type SyntaxNode = GenericParam;
20761 fn untyped(&self) -> SyntaxStablePtrId {
20762 self.0
20763 }
20764 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParam {
20765 GenericParam::from_syntax_node(db, self.0.lookup(db))
20766 }
20767}
20768impl From<GenericParamPtr> for SyntaxStablePtrId {
20769 fn from(ptr: GenericParamPtr) -> Self {
20770 ptr.untyped()
20771 }
20772}
20773impl From<GenericParamTypePtr> for GenericParamPtr {
20774 fn from(value: GenericParamTypePtr) -> Self {
20775 Self(value.0)
20776 }
20777}
20778impl From<GenericParamConstPtr> for GenericParamPtr {
20779 fn from(value: GenericParamConstPtr) -> Self {
20780 Self(value.0)
20781 }
20782}
20783impl From<GenericParamImplNamedPtr> for GenericParamPtr {
20784 fn from(value: GenericParamImplNamedPtr) -> Self {
20785 Self(value.0)
20786 }
20787}
20788impl From<GenericParamImplAnonymousPtr> for GenericParamPtr {
20789 fn from(value: GenericParamImplAnonymousPtr) -> Self {
20790 Self(value.0)
20791 }
20792}
20793impl From<GenericParamNegativeImplPtr> for GenericParamPtr {
20794 fn from(value: GenericParamNegativeImplPtr) -> Self {
20795 Self(value.0)
20796 }
20797}
20798impl From<GenericParamTypeGreen> for GenericParamGreen {
20799 fn from(value: GenericParamTypeGreen) -> Self {
20800 Self(value.0)
20801 }
20802}
20803impl From<GenericParamConstGreen> for GenericParamGreen {
20804 fn from(value: GenericParamConstGreen) -> Self {
20805 Self(value.0)
20806 }
20807}
20808impl From<GenericParamImplNamedGreen> for GenericParamGreen {
20809 fn from(value: GenericParamImplNamedGreen) -> Self {
20810 Self(value.0)
20811 }
20812}
20813impl From<GenericParamImplAnonymousGreen> for GenericParamGreen {
20814 fn from(value: GenericParamImplAnonymousGreen) -> Self {
20815 Self(value.0)
20816 }
20817}
20818impl From<GenericParamNegativeImplGreen> for GenericParamGreen {
20819 fn from(value: GenericParamNegativeImplGreen) -> Self {
20820 Self(value.0)
20821 }
20822}
20823#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20824pub struct GenericParamGreen(pub GreenId);
20825impl TypedSyntaxNode for GenericParam {
20826 const OPTIONAL_KIND: Option<SyntaxKind> = None;
20827 type StablePtr = GenericParamPtr;
20828 type Green = GenericParamGreen;
20829 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20830 panic!("No missing variant.");
20831 }
20832 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20833 let kind = node.kind(db);
20834 match kind {
20835 SyntaxKind::GenericParamType => {
20836 GenericParam::Type(GenericParamType::from_syntax_node(db, node))
20837 }
20838 SyntaxKind::GenericParamConst => {
20839 GenericParam::Const(GenericParamConst::from_syntax_node(db, node))
20840 }
20841 SyntaxKind::GenericParamImplNamed => {
20842 GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node))
20843 }
20844 SyntaxKind::GenericParamImplAnonymous => {
20845 GenericParam::ImplAnonymous(GenericParamImplAnonymous::from_syntax_node(db, node))
20846 }
20847 SyntaxKind::GenericParamNegativeImpl => {
20848 GenericParam::NegativeImpl(GenericParamNegativeImpl::from_syntax_node(db, node))
20849 }
20850 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "GenericParam"),
20851 }
20852 }
20853 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20854 let kind = node.kind(db);
20855 match kind {
20856 SyntaxKind::GenericParamType => {
20857 Some(GenericParam::Type(GenericParamType::from_syntax_node(db, node)))
20858 }
20859 SyntaxKind::GenericParamConst => {
20860 Some(GenericParam::Const(GenericParamConst::from_syntax_node(db, node)))
20861 }
20862 SyntaxKind::GenericParamImplNamed => {
20863 Some(GenericParam::ImplNamed(GenericParamImplNamed::from_syntax_node(db, node)))
20864 }
20865 SyntaxKind::GenericParamImplAnonymous => Some(GenericParam::ImplAnonymous(
20866 GenericParamImplAnonymous::from_syntax_node(db, node),
20867 )),
20868 SyntaxKind::GenericParamNegativeImpl => Some(GenericParam::NegativeImpl(
20869 GenericParamNegativeImpl::from_syntax_node(db, node),
20870 )),
20871 _ => None,
20872 }
20873 }
20874 fn as_syntax_node(&self) -> SyntaxNode {
20875 match self {
20876 GenericParam::Type(x) => x.as_syntax_node(),
20877 GenericParam::Const(x) => x.as_syntax_node(),
20878 GenericParam::ImplNamed(x) => x.as_syntax_node(),
20879 GenericParam::ImplAnonymous(x) => x.as_syntax_node(),
20880 GenericParam::NegativeImpl(x) => x.as_syntax_node(),
20881 }
20882 }
20883 fn stable_ptr(&self) -> Self::StablePtr {
20884 GenericParamPtr(self.as_syntax_node().0.stable_ptr)
20885 }
20886}
20887impl From<&GenericParam> for SyntaxStablePtrId {
20888 fn from(node: &GenericParam) -> Self {
20889 node.stable_ptr().untyped()
20890 }
20891}
20892impl GenericParam {
20893 pub fn is_variant(kind: SyntaxKind) -> bool {
20895 matches!(
20896 kind,
20897 SyntaxKind::GenericParamType
20898 | SyntaxKind::GenericParamConst
20899 | SyntaxKind::GenericParamImplNamed
20900 | SyntaxKind::GenericParamImplAnonymous
20901 | SyntaxKind::GenericParamNegativeImpl
20902 )
20903 }
20904}
20905#[derive(Clone, Debug, Eq, Hash, PartialEq)]
20906pub struct GenericParamType {
20907 node: SyntaxNode,
20908 children: Arc<[SyntaxNode]>,
20909}
20910impl GenericParamType {
20911 pub const INDEX_NAME: usize = 0;
20912 pub fn new_green(db: &dyn SyntaxGroup, name: TerminalIdentifierGreen) -> GenericParamTypeGreen {
20913 let children: Vec<GreenId> = vec![name.0];
20914 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
20915 GenericParamTypeGreen(
20916 Arc::new(GreenNode {
20917 kind: SyntaxKind::GenericParamType,
20918 details: GreenNodeDetails::Node { children, width },
20919 })
20920 .intern(db),
20921 )
20922 }
20923}
20924impl GenericParamType {
20925 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
20926 TerminalIdentifier::from_syntax_node(db, self.children[0].clone())
20927 }
20928}
20929#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20930pub struct GenericParamTypePtr(pub SyntaxStablePtrId);
20931impl GenericParamTypePtr {
20932 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
20933 let ptr = self.0.lookup_intern(db);
20934 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
20935 TerminalIdentifierGreen(key_fields[0])
20936 } else {
20937 panic!("Unexpected key field query on root.");
20938 }
20939 }
20940}
20941impl TypedStablePtr for GenericParamTypePtr {
20942 type SyntaxNode = GenericParamType;
20943 fn untyped(&self) -> SyntaxStablePtrId {
20944 self.0
20945 }
20946 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamType {
20947 GenericParamType::from_syntax_node(db, self.0.lookup(db))
20948 }
20949}
20950impl From<GenericParamTypePtr> for SyntaxStablePtrId {
20951 fn from(ptr: GenericParamTypePtr) -> Self {
20952 ptr.untyped()
20953 }
20954}
20955#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
20956pub struct GenericParamTypeGreen(pub GreenId);
20957impl TypedSyntaxNode for GenericParamType {
20958 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamType);
20959 type StablePtr = GenericParamTypePtr;
20960 type Green = GenericParamTypeGreen;
20961 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
20962 GenericParamTypeGreen(
20963 Arc::new(GreenNode {
20964 kind: SyntaxKind::GenericParamType,
20965 details: GreenNodeDetails::Node {
20966 children: vec![TerminalIdentifier::missing(db).0],
20967 width: TextWidth::default(),
20968 },
20969 })
20970 .intern(db),
20971 )
20972 }
20973 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
20974 let kind = node.kind(db);
20975 assert_eq!(
20976 kind,
20977 SyntaxKind::GenericParamType,
20978 "Unexpected SyntaxKind {:?}. Expected {:?}.",
20979 kind,
20980 SyntaxKind::GenericParamType
20981 );
20982 let children = db.get_children(node.clone());
20983 Self { node, children }
20984 }
20985 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
20986 let kind = node.kind(db);
20987 if kind == SyntaxKind::GenericParamType {
20988 Some(Self::from_syntax_node(db, node))
20989 } else {
20990 None
20991 }
20992 }
20993 fn as_syntax_node(&self) -> SyntaxNode {
20994 self.node.clone()
20995 }
20996 fn stable_ptr(&self) -> Self::StablePtr {
20997 GenericParamTypePtr(self.node.0.stable_ptr)
20998 }
20999}
21000impl From<&GenericParamType> for SyntaxStablePtrId {
21001 fn from(node: &GenericParamType) -> Self {
21002 node.stable_ptr().untyped()
21003 }
21004}
21005#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21006pub struct GenericParamConst {
21007 node: SyntaxNode,
21008 children: Arc<[SyntaxNode]>,
21009}
21010impl GenericParamConst {
21011 pub const INDEX_CONST_KW: usize = 0;
21012 pub const INDEX_NAME: usize = 1;
21013 pub const INDEX_COLON: usize = 2;
21014 pub const INDEX_TY: usize = 3;
21015 pub fn new_green(
21016 db: &dyn SyntaxGroup,
21017 const_kw: TerminalConstGreen,
21018 name: TerminalIdentifierGreen,
21019 colon: TerminalColonGreen,
21020 ty: ExprGreen,
21021 ) -> GenericParamConstGreen {
21022 let children: Vec<GreenId> = vec![const_kw.0, name.0, colon.0, ty.0];
21023 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21024 GenericParamConstGreen(
21025 Arc::new(GreenNode {
21026 kind: SyntaxKind::GenericParamConst,
21027 details: GreenNodeDetails::Node { children, width },
21028 })
21029 .intern(db),
21030 )
21031 }
21032}
21033impl GenericParamConst {
21034 pub fn const_kw(&self, db: &dyn SyntaxGroup) -> TerminalConst {
21035 TerminalConst::from_syntax_node(db, self.children[0].clone())
21036 }
21037 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21038 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
21039 }
21040 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
21041 TerminalColon::from_syntax_node(db, self.children[2].clone())
21042 }
21043 pub fn ty(&self, db: &dyn SyntaxGroup) -> Expr {
21044 Expr::from_syntax_node(db, self.children[3].clone())
21045 }
21046}
21047#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21048pub struct GenericParamConstPtr(pub SyntaxStablePtrId);
21049impl GenericParamConstPtr {
21050 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
21051 let ptr = self.0.lookup_intern(db);
21052 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
21053 TerminalIdentifierGreen(key_fields[0])
21054 } else {
21055 panic!("Unexpected key field query on root.");
21056 }
21057 }
21058}
21059impl TypedStablePtr for GenericParamConstPtr {
21060 type SyntaxNode = GenericParamConst;
21061 fn untyped(&self) -> SyntaxStablePtrId {
21062 self.0
21063 }
21064 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamConst {
21065 GenericParamConst::from_syntax_node(db, self.0.lookup(db))
21066 }
21067}
21068impl From<GenericParamConstPtr> for SyntaxStablePtrId {
21069 fn from(ptr: GenericParamConstPtr) -> Self {
21070 ptr.untyped()
21071 }
21072}
21073#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21074pub struct GenericParamConstGreen(pub GreenId);
21075impl TypedSyntaxNode for GenericParamConst {
21076 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamConst);
21077 type StablePtr = GenericParamConstPtr;
21078 type Green = GenericParamConstGreen;
21079 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21080 GenericParamConstGreen(
21081 Arc::new(GreenNode {
21082 kind: SyntaxKind::GenericParamConst,
21083 details: GreenNodeDetails::Node {
21084 children: vec![
21085 TerminalConst::missing(db).0,
21086 TerminalIdentifier::missing(db).0,
21087 TerminalColon::missing(db).0,
21088 Expr::missing(db).0,
21089 ],
21090 width: TextWidth::default(),
21091 },
21092 })
21093 .intern(db),
21094 )
21095 }
21096 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21097 let kind = node.kind(db);
21098 assert_eq!(
21099 kind,
21100 SyntaxKind::GenericParamConst,
21101 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21102 kind,
21103 SyntaxKind::GenericParamConst
21104 );
21105 let children = db.get_children(node.clone());
21106 Self { node, children }
21107 }
21108 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21109 let kind = node.kind(db);
21110 if kind == SyntaxKind::GenericParamConst {
21111 Some(Self::from_syntax_node(db, node))
21112 } else {
21113 None
21114 }
21115 }
21116 fn as_syntax_node(&self) -> SyntaxNode {
21117 self.node.clone()
21118 }
21119 fn stable_ptr(&self) -> Self::StablePtr {
21120 GenericParamConstPtr(self.node.0.stable_ptr)
21121 }
21122}
21123impl From<&GenericParamConst> for SyntaxStablePtrId {
21124 fn from(node: &GenericParamConst) -> Self {
21125 node.stable_ptr().untyped()
21126 }
21127}
21128#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21129pub struct GenericParamImplNamed {
21130 node: SyntaxNode,
21131 children: Arc<[SyntaxNode]>,
21132}
21133impl GenericParamImplNamed {
21134 pub const INDEX_IMPL_KW: usize = 0;
21135 pub const INDEX_NAME: usize = 1;
21136 pub const INDEX_COLON: usize = 2;
21137 pub const INDEX_TRAIT_PATH: usize = 3;
21138 pub const INDEX_TYPE_CONSTRAINS: usize = 4;
21139 pub fn new_green(
21140 db: &dyn SyntaxGroup,
21141 impl_kw: TerminalImplGreen,
21142 name: TerminalIdentifierGreen,
21143 colon: TerminalColonGreen,
21144 trait_path: ExprPathGreen,
21145 type_constrains: OptionAssociatedItemConstraintsGreen,
21146 ) -> GenericParamImplNamedGreen {
21147 let children: Vec<GreenId> =
21148 vec![impl_kw.0, name.0, colon.0, trait_path.0, type_constrains.0];
21149 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21150 GenericParamImplNamedGreen(
21151 Arc::new(GreenNode {
21152 kind: SyntaxKind::GenericParamImplNamed,
21153 details: GreenNodeDetails::Node { children, width },
21154 })
21155 .intern(db),
21156 )
21157 }
21158}
21159impl GenericParamImplNamed {
21160 pub fn impl_kw(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
21161 TerminalImpl::from_syntax_node(db, self.children[0].clone())
21162 }
21163 pub fn name(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21164 TerminalIdentifier::from_syntax_node(db, self.children[1].clone())
21165 }
21166 pub fn colon(&self, db: &dyn SyntaxGroup) -> TerminalColon {
21167 TerminalColon::from_syntax_node(db, self.children[2].clone())
21168 }
21169 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21170 ExprPath::from_syntax_node(db, self.children[3].clone())
21171 }
21172 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
21173 OptionAssociatedItemConstraints::from_syntax_node(db, self.children[4].clone())
21174 }
21175}
21176#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21177pub struct GenericParamImplNamedPtr(pub SyntaxStablePtrId);
21178impl GenericParamImplNamedPtr {
21179 pub fn name_green(self, db: &dyn SyntaxGroup) -> TerminalIdentifierGreen {
21180 let ptr = self.0.lookup_intern(db);
21181 if let SyntaxStablePtr::Child { key_fields, .. } = ptr {
21182 TerminalIdentifierGreen(key_fields[0])
21183 } else {
21184 panic!("Unexpected key field query on root.");
21185 }
21186 }
21187}
21188impl TypedStablePtr for GenericParamImplNamedPtr {
21189 type SyntaxNode = GenericParamImplNamed;
21190 fn untyped(&self) -> SyntaxStablePtrId {
21191 self.0
21192 }
21193 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplNamed {
21194 GenericParamImplNamed::from_syntax_node(db, self.0.lookup(db))
21195 }
21196}
21197impl From<GenericParamImplNamedPtr> for SyntaxStablePtrId {
21198 fn from(ptr: GenericParamImplNamedPtr) -> Self {
21199 ptr.untyped()
21200 }
21201}
21202#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21203pub struct GenericParamImplNamedGreen(pub GreenId);
21204impl TypedSyntaxNode for GenericParamImplNamed {
21205 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplNamed);
21206 type StablePtr = GenericParamImplNamedPtr;
21207 type Green = GenericParamImplNamedGreen;
21208 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21209 GenericParamImplNamedGreen(
21210 Arc::new(GreenNode {
21211 kind: SyntaxKind::GenericParamImplNamed,
21212 details: GreenNodeDetails::Node {
21213 children: vec![
21214 TerminalImpl::missing(db).0,
21215 TerminalIdentifier::missing(db).0,
21216 TerminalColon::missing(db).0,
21217 ExprPath::missing(db).0,
21218 OptionAssociatedItemConstraints::missing(db).0,
21219 ],
21220 width: TextWidth::default(),
21221 },
21222 })
21223 .intern(db),
21224 )
21225 }
21226 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21227 let kind = node.kind(db);
21228 assert_eq!(
21229 kind,
21230 SyntaxKind::GenericParamImplNamed,
21231 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21232 kind,
21233 SyntaxKind::GenericParamImplNamed
21234 );
21235 let children = db.get_children(node.clone());
21236 Self { node, children }
21237 }
21238 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21239 let kind = node.kind(db);
21240 if kind == SyntaxKind::GenericParamImplNamed {
21241 Some(Self::from_syntax_node(db, node))
21242 } else {
21243 None
21244 }
21245 }
21246 fn as_syntax_node(&self) -> SyntaxNode {
21247 self.node.clone()
21248 }
21249 fn stable_ptr(&self) -> Self::StablePtr {
21250 GenericParamImplNamedPtr(self.node.0.stable_ptr)
21251 }
21252}
21253impl From<&GenericParamImplNamed> for SyntaxStablePtrId {
21254 fn from(node: &GenericParamImplNamed) -> Self {
21255 node.stable_ptr().untyped()
21256 }
21257}
21258#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21259pub struct GenericParamImplAnonymous {
21260 node: SyntaxNode,
21261 children: Arc<[SyntaxNode]>,
21262}
21263impl GenericParamImplAnonymous {
21264 pub const INDEX_PLUS: usize = 0;
21265 pub const INDEX_TRAIT_PATH: usize = 1;
21266 pub const INDEX_TYPE_CONSTRAINS: usize = 2;
21267 pub fn new_green(
21268 db: &dyn SyntaxGroup,
21269 plus: TerminalPlusGreen,
21270 trait_path: ExprPathGreen,
21271 type_constrains: OptionAssociatedItemConstraintsGreen,
21272 ) -> GenericParamImplAnonymousGreen {
21273 let children: Vec<GreenId> = vec![plus.0, trait_path.0, type_constrains.0];
21274 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21275 GenericParamImplAnonymousGreen(
21276 Arc::new(GreenNode {
21277 kind: SyntaxKind::GenericParamImplAnonymous,
21278 details: GreenNodeDetails::Node { children, width },
21279 })
21280 .intern(db),
21281 )
21282 }
21283}
21284impl GenericParamImplAnonymous {
21285 pub fn plus(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
21286 TerminalPlus::from_syntax_node(db, self.children[0].clone())
21287 }
21288 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21289 ExprPath::from_syntax_node(db, self.children[1].clone())
21290 }
21291 pub fn type_constrains(&self, db: &dyn SyntaxGroup) -> OptionAssociatedItemConstraints {
21292 OptionAssociatedItemConstraints::from_syntax_node(db, self.children[2].clone())
21293 }
21294}
21295#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21296pub struct GenericParamImplAnonymousPtr(pub SyntaxStablePtrId);
21297impl GenericParamImplAnonymousPtr {}
21298impl TypedStablePtr for GenericParamImplAnonymousPtr {
21299 type SyntaxNode = GenericParamImplAnonymous;
21300 fn untyped(&self) -> SyntaxStablePtrId {
21301 self.0
21302 }
21303 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamImplAnonymous {
21304 GenericParamImplAnonymous::from_syntax_node(db, self.0.lookup(db))
21305 }
21306}
21307impl From<GenericParamImplAnonymousPtr> for SyntaxStablePtrId {
21308 fn from(ptr: GenericParamImplAnonymousPtr) -> Self {
21309 ptr.untyped()
21310 }
21311}
21312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21313pub struct GenericParamImplAnonymousGreen(pub GreenId);
21314impl TypedSyntaxNode for GenericParamImplAnonymous {
21315 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamImplAnonymous);
21316 type StablePtr = GenericParamImplAnonymousPtr;
21317 type Green = GenericParamImplAnonymousGreen;
21318 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21319 GenericParamImplAnonymousGreen(
21320 Arc::new(GreenNode {
21321 kind: SyntaxKind::GenericParamImplAnonymous,
21322 details: GreenNodeDetails::Node {
21323 children: vec![
21324 TerminalPlus::missing(db).0,
21325 ExprPath::missing(db).0,
21326 OptionAssociatedItemConstraints::missing(db).0,
21327 ],
21328 width: TextWidth::default(),
21329 },
21330 })
21331 .intern(db),
21332 )
21333 }
21334 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21335 let kind = node.kind(db);
21336 assert_eq!(
21337 kind,
21338 SyntaxKind::GenericParamImplAnonymous,
21339 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21340 kind,
21341 SyntaxKind::GenericParamImplAnonymous
21342 );
21343 let children = db.get_children(node.clone());
21344 Self { node, children }
21345 }
21346 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21347 let kind = node.kind(db);
21348 if kind == SyntaxKind::GenericParamImplAnonymous {
21349 Some(Self::from_syntax_node(db, node))
21350 } else {
21351 None
21352 }
21353 }
21354 fn as_syntax_node(&self) -> SyntaxNode {
21355 self.node.clone()
21356 }
21357 fn stable_ptr(&self) -> Self::StablePtr {
21358 GenericParamImplAnonymousPtr(self.node.0.stable_ptr)
21359 }
21360}
21361impl From<&GenericParamImplAnonymous> for SyntaxStablePtrId {
21362 fn from(node: &GenericParamImplAnonymous) -> Self {
21363 node.stable_ptr().untyped()
21364 }
21365}
21366#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21367pub struct GenericParamNegativeImpl {
21368 node: SyntaxNode,
21369 children: Arc<[SyntaxNode]>,
21370}
21371impl GenericParamNegativeImpl {
21372 pub const INDEX_MINUS: usize = 0;
21373 pub const INDEX_TRAIT_PATH: usize = 1;
21374 pub fn new_green(
21375 db: &dyn SyntaxGroup,
21376 minus: TerminalMinusGreen,
21377 trait_path: ExprPathGreen,
21378 ) -> GenericParamNegativeImplGreen {
21379 let children: Vec<GreenId> = vec![minus.0, trait_path.0];
21380 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21381 GenericParamNegativeImplGreen(
21382 Arc::new(GreenNode {
21383 kind: SyntaxKind::GenericParamNegativeImpl,
21384 details: GreenNodeDetails::Node { children, width },
21385 })
21386 .intern(db),
21387 )
21388 }
21389}
21390impl GenericParamNegativeImpl {
21391 pub fn minus(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
21392 TerminalMinus::from_syntax_node(db, self.children[0].clone())
21393 }
21394 pub fn trait_path(&self, db: &dyn SyntaxGroup) -> ExprPath {
21395 ExprPath::from_syntax_node(db, self.children[1].clone())
21396 }
21397}
21398#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21399pub struct GenericParamNegativeImplPtr(pub SyntaxStablePtrId);
21400impl GenericParamNegativeImplPtr {}
21401impl TypedStablePtr for GenericParamNegativeImplPtr {
21402 type SyntaxNode = GenericParamNegativeImpl;
21403 fn untyped(&self) -> SyntaxStablePtrId {
21404 self.0
21405 }
21406 fn lookup(&self, db: &dyn SyntaxGroup) -> GenericParamNegativeImpl {
21407 GenericParamNegativeImpl::from_syntax_node(db, self.0.lookup(db))
21408 }
21409}
21410impl From<GenericParamNegativeImplPtr> for SyntaxStablePtrId {
21411 fn from(ptr: GenericParamNegativeImplPtr) -> Self {
21412 ptr.untyped()
21413 }
21414}
21415#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21416pub struct GenericParamNegativeImplGreen(pub GreenId);
21417impl TypedSyntaxNode for GenericParamNegativeImpl {
21418 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::GenericParamNegativeImpl);
21419 type StablePtr = GenericParamNegativeImplPtr;
21420 type Green = GenericParamNegativeImplGreen;
21421 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21422 GenericParamNegativeImplGreen(
21423 Arc::new(GreenNode {
21424 kind: SyntaxKind::GenericParamNegativeImpl,
21425 details: GreenNodeDetails::Node {
21426 children: vec![TerminalMinus::missing(db).0, ExprPath::missing(db).0],
21427 width: TextWidth::default(),
21428 },
21429 })
21430 .intern(db),
21431 )
21432 }
21433 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21434 let kind = node.kind(db);
21435 assert_eq!(
21436 kind,
21437 SyntaxKind::GenericParamNegativeImpl,
21438 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21439 kind,
21440 SyntaxKind::GenericParamNegativeImpl
21441 );
21442 let children = db.get_children(node.clone());
21443 Self { node, children }
21444 }
21445 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21446 let kind = node.kind(db);
21447 if kind == SyntaxKind::GenericParamNegativeImpl {
21448 Some(Self::from_syntax_node(db, node))
21449 } else {
21450 None
21451 }
21452 }
21453 fn as_syntax_node(&self) -> SyntaxNode {
21454 self.node.clone()
21455 }
21456 fn stable_ptr(&self) -> Self::StablePtr {
21457 GenericParamNegativeImplPtr(self.node.0.stable_ptr)
21458 }
21459}
21460impl From<&GenericParamNegativeImpl> for SyntaxStablePtrId {
21461 fn from(node: &GenericParamNegativeImpl) -> Self {
21462 node.stable_ptr().untyped()
21463 }
21464}
21465#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21466pub struct TriviumSkippedNode {
21467 node: SyntaxNode,
21468 children: Arc<[SyntaxNode]>,
21469}
21470impl TriviumSkippedNode {
21471 pub const INDEX_NODE: usize = 0;
21472 pub fn new_green(db: &dyn SyntaxGroup, node: SkippedNodeGreen) -> TriviumSkippedNodeGreen {
21473 let children: Vec<GreenId> = vec![node.0];
21474 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21475 TriviumSkippedNodeGreen(
21476 Arc::new(GreenNode {
21477 kind: SyntaxKind::TriviumSkippedNode,
21478 details: GreenNodeDetails::Node { children, width },
21479 })
21480 .intern(db),
21481 )
21482 }
21483}
21484impl TriviumSkippedNode {
21485 pub fn node(&self, db: &dyn SyntaxGroup) -> SkippedNode {
21486 SkippedNode::from_syntax_node(db, self.children[0].clone())
21487 }
21488}
21489#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21490pub struct TriviumSkippedNodePtr(pub SyntaxStablePtrId);
21491impl TriviumSkippedNodePtr {}
21492impl TypedStablePtr for TriviumSkippedNodePtr {
21493 type SyntaxNode = TriviumSkippedNode;
21494 fn untyped(&self) -> SyntaxStablePtrId {
21495 self.0
21496 }
21497 fn lookup(&self, db: &dyn SyntaxGroup) -> TriviumSkippedNode {
21498 TriviumSkippedNode::from_syntax_node(db, self.0.lookup(db))
21499 }
21500}
21501impl From<TriviumSkippedNodePtr> for SyntaxStablePtrId {
21502 fn from(ptr: TriviumSkippedNodePtr) -> Self {
21503 ptr.untyped()
21504 }
21505}
21506#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21507pub struct TriviumSkippedNodeGreen(pub GreenId);
21508impl TypedSyntaxNode for TriviumSkippedNode {
21509 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TriviumSkippedNode);
21510 type StablePtr = TriviumSkippedNodePtr;
21511 type Green = TriviumSkippedNodeGreen;
21512 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21513 TriviumSkippedNodeGreen(
21514 Arc::new(GreenNode {
21515 kind: SyntaxKind::TriviumSkippedNode,
21516 details: GreenNodeDetails::Node {
21517 children: vec![SkippedNode::missing(db).0],
21518 width: TextWidth::default(),
21519 },
21520 })
21521 .intern(db),
21522 )
21523 }
21524 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21525 let kind = node.kind(db);
21526 assert_eq!(
21527 kind,
21528 SyntaxKind::TriviumSkippedNode,
21529 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21530 kind,
21531 SyntaxKind::TriviumSkippedNode
21532 );
21533 let children = db.get_children(node.clone());
21534 Self { node, children }
21535 }
21536 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21537 let kind = node.kind(db);
21538 if kind == SyntaxKind::TriviumSkippedNode {
21539 Some(Self::from_syntax_node(db, node))
21540 } else {
21541 None
21542 }
21543 }
21544 fn as_syntax_node(&self) -> SyntaxNode {
21545 self.node.clone()
21546 }
21547 fn stable_ptr(&self) -> Self::StablePtr {
21548 TriviumSkippedNodePtr(self.node.0.stable_ptr)
21549 }
21550}
21551impl From<&TriviumSkippedNode> for SyntaxStablePtrId {
21552 fn from(node: &TriviumSkippedNode) -> Self {
21553 node.stable_ptr().untyped()
21554 }
21555}
21556#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21557pub enum SkippedNode {
21558 AttributeList(AttributeList),
21559 VisibilityPub(VisibilityPub),
21560}
21561#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21562pub struct SkippedNodePtr(pub SyntaxStablePtrId);
21563impl TypedStablePtr for SkippedNodePtr {
21564 type SyntaxNode = SkippedNode;
21565 fn untyped(&self) -> SyntaxStablePtrId {
21566 self.0
21567 }
21568 fn lookup(&self, db: &dyn SyntaxGroup) -> SkippedNode {
21569 SkippedNode::from_syntax_node(db, self.0.lookup(db))
21570 }
21571}
21572impl From<SkippedNodePtr> for SyntaxStablePtrId {
21573 fn from(ptr: SkippedNodePtr) -> Self {
21574 ptr.untyped()
21575 }
21576}
21577impl From<AttributeListPtr> for SkippedNodePtr {
21578 fn from(value: AttributeListPtr) -> Self {
21579 Self(value.0)
21580 }
21581}
21582impl From<VisibilityPubPtr> for SkippedNodePtr {
21583 fn from(value: VisibilityPubPtr) -> Self {
21584 Self(value.0)
21585 }
21586}
21587impl From<AttributeListGreen> for SkippedNodeGreen {
21588 fn from(value: AttributeListGreen) -> Self {
21589 Self(value.0)
21590 }
21591}
21592impl From<VisibilityPubGreen> for SkippedNodeGreen {
21593 fn from(value: VisibilityPubGreen) -> Self {
21594 Self(value.0)
21595 }
21596}
21597#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21598pub struct SkippedNodeGreen(pub GreenId);
21599impl TypedSyntaxNode for SkippedNode {
21600 const OPTIONAL_KIND: Option<SyntaxKind> = None;
21601 type StablePtr = SkippedNodePtr;
21602 type Green = SkippedNodeGreen;
21603 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21604 panic!("No missing variant.");
21605 }
21606 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21607 let kind = node.kind(db);
21608 match kind {
21609 SyntaxKind::AttributeList => {
21610 SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node))
21611 }
21612 SyntaxKind::VisibilityPub => {
21613 SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node))
21614 }
21615 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "SkippedNode"),
21616 }
21617 }
21618 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21619 let kind = node.kind(db);
21620 match kind {
21621 SyntaxKind::AttributeList => {
21622 Some(SkippedNode::AttributeList(AttributeList::from_syntax_node(db, node)))
21623 }
21624 SyntaxKind::VisibilityPub => {
21625 Some(SkippedNode::VisibilityPub(VisibilityPub::from_syntax_node(db, node)))
21626 }
21627 _ => None,
21628 }
21629 }
21630 fn as_syntax_node(&self) -> SyntaxNode {
21631 match self {
21632 SkippedNode::AttributeList(x) => x.as_syntax_node(),
21633 SkippedNode::VisibilityPub(x) => x.as_syntax_node(),
21634 }
21635 }
21636 fn stable_ptr(&self) -> Self::StablePtr {
21637 SkippedNodePtr(self.as_syntax_node().0.stable_ptr)
21638 }
21639}
21640impl From<&SkippedNode> for SyntaxStablePtrId {
21641 fn from(node: &SkippedNode) -> Self {
21642 node.stable_ptr().untyped()
21643 }
21644}
21645impl SkippedNode {
21646 pub fn is_variant(kind: SyntaxKind) -> bool {
21648 matches!(kind, SyntaxKind::AttributeList | SyntaxKind::VisibilityPub)
21649 }
21650}
21651#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21652pub struct TokenIdentifier {
21653 node: SyntaxNode,
21654}
21655impl Token for TokenIdentifier {
21656 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
21657 TokenIdentifierGreen(
21658 Arc::new(GreenNode {
21659 kind: SyntaxKind::TokenIdentifier,
21660 details: GreenNodeDetails::Token(text),
21661 })
21662 .intern(db),
21663 )
21664 }
21665 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21666 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
21667 .clone()
21668 }
21669}
21670#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21671pub struct TokenIdentifierPtr(pub SyntaxStablePtrId);
21672impl TypedStablePtr for TokenIdentifierPtr {
21673 type SyntaxNode = TokenIdentifier;
21674 fn untyped(&self) -> SyntaxStablePtrId {
21675 self.0
21676 }
21677 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
21678 TokenIdentifier::from_syntax_node(db, self.0.lookup(db))
21679 }
21680}
21681impl From<TokenIdentifierPtr> for SyntaxStablePtrId {
21682 fn from(ptr: TokenIdentifierPtr) -> Self {
21683 ptr.untyped()
21684 }
21685}
21686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21687pub struct TokenIdentifierGreen(pub GreenId);
21688impl TokenIdentifierGreen {
21689 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21690 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
21691 }
21692}
21693impl TypedSyntaxNode for TokenIdentifier {
21694 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIdentifier);
21695 type StablePtr = TokenIdentifierPtr;
21696 type Green = TokenIdentifierGreen;
21697 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21698 TokenIdentifierGreen(
21699 Arc::new(GreenNode {
21700 kind: SyntaxKind::TokenMissing,
21701 details: GreenNodeDetails::Token("".into()),
21702 })
21703 .intern(db),
21704 )
21705 }
21706 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21707 match node.0.green.lookup_intern(db).details {
21708 GreenNodeDetails::Token(_) => Self { node },
21709 GreenNodeDetails::Node { .. } => {
21710 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIdentifier)
21711 }
21712 }
21713 }
21714 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21715 match node.0.green.lookup_intern(db).details {
21716 GreenNodeDetails::Token(_) => Some(Self { node }),
21717 GreenNodeDetails::Node { .. } => None,
21718 }
21719 }
21720 fn as_syntax_node(&self) -> SyntaxNode {
21721 self.node.clone()
21722 }
21723 fn stable_ptr(&self) -> Self::StablePtr {
21724 TokenIdentifierPtr(self.node.0.stable_ptr)
21725 }
21726}
21727impl From<&TokenIdentifier> for SyntaxStablePtrId {
21728 fn from(node: &TokenIdentifier) -> Self {
21729 node.stable_ptr().untyped()
21730 }
21731}
21732#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21733pub struct TerminalIdentifier {
21734 node: SyntaxNode,
21735 children: Arc<[SyntaxNode]>,
21736}
21737impl Terminal for TerminalIdentifier {
21738 const KIND: SyntaxKind = SyntaxKind::TerminalIdentifier;
21739 type TokenType = TokenIdentifier;
21740 fn new_green(
21741 db: &dyn SyntaxGroup,
21742 leading_trivia: TriviaGreen,
21743 token: <<TerminalIdentifier as Terminal>::TokenType as TypedSyntaxNode>::Green,
21744 trailing_trivia: TriviaGreen,
21745 ) -> Self::Green {
21746 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
21747 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21748 TerminalIdentifierGreen(
21749 Arc::new(GreenNode {
21750 kind: SyntaxKind::TerminalIdentifier,
21751 details: GreenNodeDetails::Node { children, width },
21752 })
21753 .intern(db),
21754 )
21755 }
21756 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21757 self.token(db).text(db)
21758 }
21759}
21760impl TerminalIdentifier {
21761 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21762 Trivia::from_syntax_node(db, self.children[0].clone())
21763 }
21764 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIdentifier {
21765 TokenIdentifier::from_syntax_node(db, self.children[1].clone())
21766 }
21767 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21768 Trivia::from_syntax_node(db, self.children[2].clone())
21769 }
21770}
21771#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21772pub struct TerminalIdentifierPtr(pub SyntaxStablePtrId);
21773impl TerminalIdentifierPtr {}
21774impl TypedStablePtr for TerminalIdentifierPtr {
21775 type SyntaxNode = TerminalIdentifier;
21776 fn untyped(&self) -> SyntaxStablePtrId {
21777 self.0
21778 }
21779 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIdentifier {
21780 TerminalIdentifier::from_syntax_node(db, self.0.lookup(db))
21781 }
21782}
21783impl From<TerminalIdentifierPtr> for SyntaxStablePtrId {
21784 fn from(ptr: TerminalIdentifierPtr) -> Self {
21785 ptr.untyped()
21786 }
21787}
21788#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21789pub struct TerminalIdentifierGreen(pub GreenId);
21790impl TypedSyntaxNode for TerminalIdentifier {
21791 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIdentifier);
21792 type StablePtr = TerminalIdentifierPtr;
21793 type Green = TerminalIdentifierGreen;
21794 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21795 TerminalIdentifierGreen(
21796 Arc::new(GreenNode {
21797 kind: SyntaxKind::TerminalIdentifier,
21798 details: GreenNodeDetails::Node {
21799 children: vec![
21800 Trivia::missing(db).0,
21801 TokenIdentifier::missing(db).0,
21802 Trivia::missing(db).0,
21803 ],
21804 width: TextWidth::default(),
21805 },
21806 })
21807 .intern(db),
21808 )
21809 }
21810 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21811 let kind = node.kind(db);
21812 assert_eq!(
21813 kind,
21814 SyntaxKind::TerminalIdentifier,
21815 "Unexpected SyntaxKind {:?}. Expected {:?}.",
21816 kind,
21817 SyntaxKind::TerminalIdentifier
21818 );
21819 let children = db.get_children(node.clone());
21820 Self { node, children }
21821 }
21822 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21823 let kind = node.kind(db);
21824 if kind == SyntaxKind::TerminalIdentifier {
21825 Some(Self::from_syntax_node(db, node))
21826 } else {
21827 None
21828 }
21829 }
21830 fn as_syntax_node(&self) -> SyntaxNode {
21831 self.node.clone()
21832 }
21833 fn stable_ptr(&self) -> Self::StablePtr {
21834 TerminalIdentifierPtr(self.node.0.stable_ptr)
21835 }
21836}
21837impl From<&TerminalIdentifier> for SyntaxStablePtrId {
21838 fn from(node: &TerminalIdentifier) -> Self {
21839 node.stable_ptr().untyped()
21840 }
21841}
21842#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21843pub struct TokenLiteralNumber {
21844 node: SyntaxNode,
21845}
21846impl Token for TokenLiteralNumber {
21847 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
21848 TokenLiteralNumberGreen(
21849 Arc::new(GreenNode {
21850 kind: SyntaxKind::TokenLiteralNumber,
21851 details: GreenNodeDetails::Token(text),
21852 })
21853 .intern(db),
21854 )
21855 }
21856 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21857 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
21858 .clone()
21859 }
21860}
21861#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21862pub struct TokenLiteralNumberPtr(pub SyntaxStablePtrId);
21863impl TypedStablePtr for TokenLiteralNumberPtr {
21864 type SyntaxNode = TokenLiteralNumber;
21865 fn untyped(&self) -> SyntaxStablePtrId {
21866 self.0
21867 }
21868 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
21869 TokenLiteralNumber::from_syntax_node(db, self.0.lookup(db))
21870 }
21871}
21872impl From<TokenLiteralNumberPtr> for SyntaxStablePtrId {
21873 fn from(ptr: TokenLiteralNumberPtr) -> Self {
21874 ptr.untyped()
21875 }
21876}
21877#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21878pub struct TokenLiteralNumberGreen(pub GreenId);
21879impl TokenLiteralNumberGreen {
21880 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21881 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
21882 }
21883}
21884impl TypedSyntaxNode for TokenLiteralNumber {
21885 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLiteralNumber);
21886 type StablePtr = TokenLiteralNumberPtr;
21887 type Green = TokenLiteralNumberGreen;
21888 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21889 TokenLiteralNumberGreen(
21890 Arc::new(GreenNode {
21891 kind: SyntaxKind::TokenMissing,
21892 details: GreenNodeDetails::Token("".into()),
21893 })
21894 .intern(db),
21895 )
21896 }
21897 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
21898 match node.0.green.lookup_intern(db).details {
21899 GreenNodeDetails::Token(_) => Self { node },
21900 GreenNodeDetails::Node { .. } => panic!(
21901 "Expected a token {:?}, not an internal node",
21902 SyntaxKind::TokenLiteralNumber
21903 ),
21904 }
21905 }
21906 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
21907 match node.0.green.lookup_intern(db).details {
21908 GreenNodeDetails::Token(_) => Some(Self { node }),
21909 GreenNodeDetails::Node { .. } => None,
21910 }
21911 }
21912 fn as_syntax_node(&self) -> SyntaxNode {
21913 self.node.clone()
21914 }
21915 fn stable_ptr(&self) -> Self::StablePtr {
21916 TokenLiteralNumberPtr(self.node.0.stable_ptr)
21917 }
21918}
21919impl From<&TokenLiteralNumber> for SyntaxStablePtrId {
21920 fn from(node: &TokenLiteralNumber) -> Self {
21921 node.stable_ptr().untyped()
21922 }
21923}
21924#[derive(Clone, Debug, Eq, Hash, PartialEq)]
21925pub struct TerminalLiteralNumber {
21926 node: SyntaxNode,
21927 children: Arc<[SyntaxNode]>,
21928}
21929impl Terminal for TerminalLiteralNumber {
21930 const KIND: SyntaxKind = SyntaxKind::TerminalLiteralNumber;
21931 type TokenType = TokenLiteralNumber;
21932 fn new_green(
21933 db: &dyn SyntaxGroup,
21934 leading_trivia: TriviaGreen,
21935 token: <<TerminalLiteralNumber as Terminal>::TokenType as TypedSyntaxNode>::Green,
21936 trailing_trivia: TriviaGreen,
21937 ) -> Self::Green {
21938 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
21939 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
21940 TerminalLiteralNumberGreen(
21941 Arc::new(GreenNode {
21942 kind: SyntaxKind::TerminalLiteralNumber,
21943 details: GreenNodeDetails::Node { children, width },
21944 })
21945 .intern(db),
21946 )
21947 }
21948 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
21949 self.token(db).text(db)
21950 }
21951}
21952impl TerminalLiteralNumber {
21953 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21954 Trivia::from_syntax_node(db, self.children[0].clone())
21955 }
21956 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLiteralNumber {
21957 TokenLiteralNumber::from_syntax_node(db, self.children[1].clone())
21958 }
21959 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
21960 Trivia::from_syntax_node(db, self.children[2].clone())
21961 }
21962}
21963#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21964pub struct TerminalLiteralNumberPtr(pub SyntaxStablePtrId);
21965impl TerminalLiteralNumberPtr {}
21966impl TypedStablePtr for TerminalLiteralNumberPtr {
21967 type SyntaxNode = TerminalLiteralNumber;
21968 fn untyped(&self) -> SyntaxStablePtrId {
21969 self.0
21970 }
21971 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLiteralNumber {
21972 TerminalLiteralNumber::from_syntax_node(db, self.0.lookup(db))
21973 }
21974}
21975impl From<TerminalLiteralNumberPtr> for SyntaxStablePtrId {
21976 fn from(ptr: TerminalLiteralNumberPtr) -> Self {
21977 ptr.untyped()
21978 }
21979}
21980#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
21981pub struct TerminalLiteralNumberGreen(pub GreenId);
21982impl TypedSyntaxNode for TerminalLiteralNumber {
21983 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLiteralNumber);
21984 type StablePtr = TerminalLiteralNumberPtr;
21985 type Green = TerminalLiteralNumberGreen;
21986 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
21987 TerminalLiteralNumberGreen(
21988 Arc::new(GreenNode {
21989 kind: SyntaxKind::TerminalLiteralNumber,
21990 details: GreenNodeDetails::Node {
21991 children: vec![
21992 Trivia::missing(db).0,
21993 TokenLiteralNumber::missing(db).0,
21994 Trivia::missing(db).0,
21995 ],
21996 width: TextWidth::default(),
21997 },
21998 })
21999 .intern(db),
22000 )
22001 }
22002 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22003 let kind = node.kind(db);
22004 assert_eq!(
22005 kind,
22006 SyntaxKind::TerminalLiteralNumber,
22007 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22008 kind,
22009 SyntaxKind::TerminalLiteralNumber
22010 );
22011 let children = db.get_children(node.clone());
22012 Self { node, children }
22013 }
22014 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22015 let kind = node.kind(db);
22016 if kind == SyntaxKind::TerminalLiteralNumber {
22017 Some(Self::from_syntax_node(db, node))
22018 } else {
22019 None
22020 }
22021 }
22022 fn as_syntax_node(&self) -> SyntaxNode {
22023 self.node.clone()
22024 }
22025 fn stable_ptr(&self) -> Self::StablePtr {
22026 TerminalLiteralNumberPtr(self.node.0.stable_ptr)
22027 }
22028}
22029impl From<&TerminalLiteralNumber> for SyntaxStablePtrId {
22030 fn from(node: &TerminalLiteralNumber) -> Self {
22031 node.stable_ptr().untyped()
22032 }
22033}
22034#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22035pub struct TokenShortString {
22036 node: SyntaxNode,
22037}
22038impl Token for TokenShortString {
22039 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22040 TokenShortStringGreen(
22041 Arc::new(GreenNode {
22042 kind: SyntaxKind::TokenShortString,
22043 details: GreenNodeDetails::Token(text),
22044 })
22045 .intern(db),
22046 )
22047 }
22048 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22049 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22050 .clone()
22051 }
22052}
22053#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22054pub struct TokenShortStringPtr(pub SyntaxStablePtrId);
22055impl TypedStablePtr for TokenShortStringPtr {
22056 type SyntaxNode = TokenShortString;
22057 fn untyped(&self) -> SyntaxStablePtrId {
22058 self.0
22059 }
22060 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenShortString {
22061 TokenShortString::from_syntax_node(db, self.0.lookup(db))
22062 }
22063}
22064impl From<TokenShortStringPtr> for SyntaxStablePtrId {
22065 fn from(ptr: TokenShortStringPtr) -> Self {
22066 ptr.untyped()
22067 }
22068}
22069#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22070pub struct TokenShortStringGreen(pub GreenId);
22071impl TokenShortStringGreen {
22072 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22073 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22074 }
22075}
22076impl TypedSyntaxNode for TokenShortString {
22077 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenShortString);
22078 type StablePtr = TokenShortStringPtr;
22079 type Green = TokenShortStringGreen;
22080 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22081 TokenShortStringGreen(
22082 Arc::new(GreenNode {
22083 kind: SyntaxKind::TokenMissing,
22084 details: GreenNodeDetails::Token("".into()),
22085 })
22086 .intern(db),
22087 )
22088 }
22089 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22090 match node.0.green.lookup_intern(db).details {
22091 GreenNodeDetails::Token(_) => Self { node },
22092 GreenNodeDetails::Node { .. } => {
22093 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenShortString)
22094 }
22095 }
22096 }
22097 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22098 match node.0.green.lookup_intern(db).details {
22099 GreenNodeDetails::Token(_) => Some(Self { node }),
22100 GreenNodeDetails::Node { .. } => None,
22101 }
22102 }
22103 fn as_syntax_node(&self) -> SyntaxNode {
22104 self.node.clone()
22105 }
22106 fn stable_ptr(&self) -> Self::StablePtr {
22107 TokenShortStringPtr(self.node.0.stable_ptr)
22108 }
22109}
22110impl From<&TokenShortString> for SyntaxStablePtrId {
22111 fn from(node: &TokenShortString) -> Self {
22112 node.stable_ptr().untyped()
22113 }
22114}
22115#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22116pub struct TerminalShortString {
22117 node: SyntaxNode,
22118 children: Arc<[SyntaxNode]>,
22119}
22120impl Terminal for TerminalShortString {
22121 const KIND: SyntaxKind = SyntaxKind::TerminalShortString;
22122 type TokenType = TokenShortString;
22123 fn new_green(
22124 db: &dyn SyntaxGroup,
22125 leading_trivia: TriviaGreen,
22126 token: <<TerminalShortString as Terminal>::TokenType as TypedSyntaxNode>::Green,
22127 trailing_trivia: TriviaGreen,
22128 ) -> Self::Green {
22129 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22130 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22131 TerminalShortStringGreen(
22132 Arc::new(GreenNode {
22133 kind: SyntaxKind::TerminalShortString,
22134 details: GreenNodeDetails::Node { children, width },
22135 })
22136 .intern(db),
22137 )
22138 }
22139 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22140 self.token(db).text(db)
22141 }
22142}
22143impl TerminalShortString {
22144 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22145 Trivia::from_syntax_node(db, self.children[0].clone())
22146 }
22147 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenShortString {
22148 TokenShortString::from_syntax_node(db, self.children[1].clone())
22149 }
22150 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22151 Trivia::from_syntax_node(db, self.children[2].clone())
22152 }
22153}
22154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22155pub struct TerminalShortStringPtr(pub SyntaxStablePtrId);
22156impl TerminalShortStringPtr {}
22157impl TypedStablePtr for TerminalShortStringPtr {
22158 type SyntaxNode = TerminalShortString;
22159 fn untyped(&self) -> SyntaxStablePtrId {
22160 self.0
22161 }
22162 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalShortString {
22163 TerminalShortString::from_syntax_node(db, self.0.lookup(db))
22164 }
22165}
22166impl From<TerminalShortStringPtr> for SyntaxStablePtrId {
22167 fn from(ptr: TerminalShortStringPtr) -> Self {
22168 ptr.untyped()
22169 }
22170}
22171#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22172pub struct TerminalShortStringGreen(pub GreenId);
22173impl TypedSyntaxNode for TerminalShortString {
22174 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalShortString);
22175 type StablePtr = TerminalShortStringPtr;
22176 type Green = TerminalShortStringGreen;
22177 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22178 TerminalShortStringGreen(
22179 Arc::new(GreenNode {
22180 kind: SyntaxKind::TerminalShortString,
22181 details: GreenNodeDetails::Node {
22182 children: vec![
22183 Trivia::missing(db).0,
22184 TokenShortString::missing(db).0,
22185 Trivia::missing(db).0,
22186 ],
22187 width: TextWidth::default(),
22188 },
22189 })
22190 .intern(db),
22191 )
22192 }
22193 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22194 let kind = node.kind(db);
22195 assert_eq!(
22196 kind,
22197 SyntaxKind::TerminalShortString,
22198 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22199 kind,
22200 SyntaxKind::TerminalShortString
22201 );
22202 let children = db.get_children(node.clone());
22203 Self { node, children }
22204 }
22205 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22206 let kind = node.kind(db);
22207 if kind == SyntaxKind::TerminalShortString {
22208 Some(Self::from_syntax_node(db, node))
22209 } else {
22210 None
22211 }
22212 }
22213 fn as_syntax_node(&self) -> SyntaxNode {
22214 self.node.clone()
22215 }
22216 fn stable_ptr(&self) -> Self::StablePtr {
22217 TerminalShortStringPtr(self.node.0.stable_ptr)
22218 }
22219}
22220impl From<&TerminalShortString> for SyntaxStablePtrId {
22221 fn from(node: &TerminalShortString) -> Self {
22222 node.stable_ptr().untyped()
22223 }
22224}
22225#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22226pub struct TokenString {
22227 node: SyntaxNode,
22228}
22229impl Token for TokenString {
22230 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22231 TokenStringGreen(
22232 Arc::new(GreenNode {
22233 kind: SyntaxKind::TokenString,
22234 details: GreenNodeDetails::Token(text),
22235 })
22236 .intern(db),
22237 )
22238 }
22239 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22240 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22241 .clone()
22242 }
22243}
22244#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22245pub struct TokenStringPtr(pub SyntaxStablePtrId);
22246impl TypedStablePtr for TokenStringPtr {
22247 type SyntaxNode = TokenString;
22248 fn untyped(&self) -> SyntaxStablePtrId {
22249 self.0
22250 }
22251 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenString {
22252 TokenString::from_syntax_node(db, self.0.lookup(db))
22253 }
22254}
22255impl From<TokenStringPtr> for SyntaxStablePtrId {
22256 fn from(ptr: TokenStringPtr) -> Self {
22257 ptr.untyped()
22258 }
22259}
22260#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22261pub struct TokenStringGreen(pub GreenId);
22262impl TokenStringGreen {
22263 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22264 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22265 }
22266}
22267impl TypedSyntaxNode for TokenString {
22268 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenString);
22269 type StablePtr = TokenStringPtr;
22270 type Green = TokenStringGreen;
22271 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22272 TokenStringGreen(
22273 Arc::new(GreenNode {
22274 kind: SyntaxKind::TokenMissing,
22275 details: GreenNodeDetails::Token("".into()),
22276 })
22277 .intern(db),
22278 )
22279 }
22280 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22281 match node.0.green.lookup_intern(db).details {
22282 GreenNodeDetails::Token(_) => Self { node },
22283 GreenNodeDetails::Node { .. } => {
22284 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenString)
22285 }
22286 }
22287 }
22288 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22289 match node.0.green.lookup_intern(db).details {
22290 GreenNodeDetails::Token(_) => Some(Self { node }),
22291 GreenNodeDetails::Node { .. } => None,
22292 }
22293 }
22294 fn as_syntax_node(&self) -> SyntaxNode {
22295 self.node.clone()
22296 }
22297 fn stable_ptr(&self) -> Self::StablePtr {
22298 TokenStringPtr(self.node.0.stable_ptr)
22299 }
22300}
22301impl From<&TokenString> for SyntaxStablePtrId {
22302 fn from(node: &TokenString) -> Self {
22303 node.stable_ptr().untyped()
22304 }
22305}
22306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22307pub struct TerminalString {
22308 node: SyntaxNode,
22309 children: Arc<[SyntaxNode]>,
22310}
22311impl Terminal for TerminalString {
22312 const KIND: SyntaxKind = SyntaxKind::TerminalString;
22313 type TokenType = TokenString;
22314 fn new_green(
22315 db: &dyn SyntaxGroup,
22316 leading_trivia: TriviaGreen,
22317 token: <<TerminalString as Terminal>::TokenType as TypedSyntaxNode>::Green,
22318 trailing_trivia: TriviaGreen,
22319 ) -> Self::Green {
22320 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22321 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22322 TerminalStringGreen(
22323 Arc::new(GreenNode {
22324 kind: SyntaxKind::TerminalString,
22325 details: GreenNodeDetails::Node { children, width },
22326 })
22327 .intern(db),
22328 )
22329 }
22330 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22331 self.token(db).text(db)
22332 }
22333}
22334impl TerminalString {
22335 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22336 Trivia::from_syntax_node(db, self.children[0].clone())
22337 }
22338 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenString {
22339 TokenString::from_syntax_node(db, self.children[1].clone())
22340 }
22341 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22342 Trivia::from_syntax_node(db, self.children[2].clone())
22343 }
22344}
22345#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22346pub struct TerminalStringPtr(pub SyntaxStablePtrId);
22347impl TerminalStringPtr {}
22348impl TypedStablePtr for TerminalStringPtr {
22349 type SyntaxNode = TerminalString;
22350 fn untyped(&self) -> SyntaxStablePtrId {
22351 self.0
22352 }
22353 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalString {
22354 TerminalString::from_syntax_node(db, self.0.lookup(db))
22355 }
22356}
22357impl From<TerminalStringPtr> for SyntaxStablePtrId {
22358 fn from(ptr: TerminalStringPtr) -> Self {
22359 ptr.untyped()
22360 }
22361}
22362#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22363pub struct TerminalStringGreen(pub GreenId);
22364impl TypedSyntaxNode for TerminalString {
22365 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalString);
22366 type StablePtr = TerminalStringPtr;
22367 type Green = TerminalStringGreen;
22368 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22369 TerminalStringGreen(
22370 Arc::new(GreenNode {
22371 kind: SyntaxKind::TerminalString,
22372 details: GreenNodeDetails::Node {
22373 children: vec![
22374 Trivia::missing(db).0,
22375 TokenString::missing(db).0,
22376 Trivia::missing(db).0,
22377 ],
22378 width: TextWidth::default(),
22379 },
22380 })
22381 .intern(db),
22382 )
22383 }
22384 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22385 let kind = node.kind(db);
22386 assert_eq!(
22387 kind,
22388 SyntaxKind::TerminalString,
22389 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22390 kind,
22391 SyntaxKind::TerminalString
22392 );
22393 let children = db.get_children(node.clone());
22394 Self { node, children }
22395 }
22396 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22397 let kind = node.kind(db);
22398 if kind == SyntaxKind::TerminalString {
22399 Some(Self::from_syntax_node(db, node))
22400 } else {
22401 None
22402 }
22403 }
22404 fn as_syntax_node(&self) -> SyntaxNode {
22405 self.node.clone()
22406 }
22407 fn stable_ptr(&self) -> Self::StablePtr {
22408 TerminalStringPtr(self.node.0.stable_ptr)
22409 }
22410}
22411impl From<&TerminalString> for SyntaxStablePtrId {
22412 fn from(node: &TerminalString) -> Self {
22413 node.stable_ptr().untyped()
22414 }
22415}
22416#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22417pub struct TokenAs {
22418 node: SyntaxNode,
22419}
22420impl Token for TokenAs {
22421 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22422 TokenAsGreen(
22423 Arc::new(GreenNode {
22424 kind: SyntaxKind::TokenAs,
22425 details: GreenNodeDetails::Token(text),
22426 })
22427 .intern(db),
22428 )
22429 }
22430 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22431 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22432 .clone()
22433 }
22434}
22435#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22436pub struct TokenAsPtr(pub SyntaxStablePtrId);
22437impl TypedStablePtr for TokenAsPtr {
22438 type SyntaxNode = TokenAs;
22439 fn untyped(&self) -> SyntaxStablePtrId {
22440 self.0
22441 }
22442 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAs {
22443 TokenAs::from_syntax_node(db, self.0.lookup(db))
22444 }
22445}
22446impl From<TokenAsPtr> for SyntaxStablePtrId {
22447 fn from(ptr: TokenAsPtr) -> Self {
22448 ptr.untyped()
22449 }
22450}
22451#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22452pub struct TokenAsGreen(pub GreenId);
22453impl TokenAsGreen {
22454 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22455 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22456 }
22457}
22458impl TypedSyntaxNode for TokenAs {
22459 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAs);
22460 type StablePtr = TokenAsPtr;
22461 type Green = TokenAsGreen;
22462 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22463 TokenAsGreen(
22464 Arc::new(GreenNode {
22465 kind: SyntaxKind::TokenMissing,
22466 details: GreenNodeDetails::Token("".into()),
22467 })
22468 .intern(db),
22469 )
22470 }
22471 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22472 match node.0.green.lookup_intern(db).details {
22473 GreenNodeDetails::Token(_) => Self { node },
22474 GreenNodeDetails::Node { .. } => {
22475 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAs)
22476 }
22477 }
22478 }
22479 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22480 match node.0.green.lookup_intern(db).details {
22481 GreenNodeDetails::Token(_) => Some(Self { node }),
22482 GreenNodeDetails::Node { .. } => None,
22483 }
22484 }
22485 fn as_syntax_node(&self) -> SyntaxNode {
22486 self.node.clone()
22487 }
22488 fn stable_ptr(&self) -> Self::StablePtr {
22489 TokenAsPtr(self.node.0.stable_ptr)
22490 }
22491}
22492impl From<&TokenAs> for SyntaxStablePtrId {
22493 fn from(node: &TokenAs) -> Self {
22494 node.stable_ptr().untyped()
22495 }
22496}
22497#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22498pub struct TerminalAs {
22499 node: SyntaxNode,
22500 children: Arc<[SyntaxNode]>,
22501}
22502impl Terminal for TerminalAs {
22503 const KIND: SyntaxKind = SyntaxKind::TerminalAs;
22504 type TokenType = TokenAs;
22505 fn new_green(
22506 db: &dyn SyntaxGroup,
22507 leading_trivia: TriviaGreen,
22508 token: <<TerminalAs as Terminal>::TokenType as TypedSyntaxNode>::Green,
22509 trailing_trivia: TriviaGreen,
22510 ) -> Self::Green {
22511 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22512 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22513 TerminalAsGreen(
22514 Arc::new(GreenNode {
22515 kind: SyntaxKind::TerminalAs,
22516 details: GreenNodeDetails::Node { children, width },
22517 })
22518 .intern(db),
22519 )
22520 }
22521 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22522 self.token(db).text(db)
22523 }
22524}
22525impl TerminalAs {
22526 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22527 Trivia::from_syntax_node(db, self.children[0].clone())
22528 }
22529 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAs {
22530 TokenAs::from_syntax_node(db, self.children[1].clone())
22531 }
22532 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22533 Trivia::from_syntax_node(db, self.children[2].clone())
22534 }
22535}
22536#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22537pub struct TerminalAsPtr(pub SyntaxStablePtrId);
22538impl TerminalAsPtr {}
22539impl TypedStablePtr for TerminalAsPtr {
22540 type SyntaxNode = TerminalAs;
22541 fn untyped(&self) -> SyntaxStablePtrId {
22542 self.0
22543 }
22544 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAs {
22545 TerminalAs::from_syntax_node(db, self.0.lookup(db))
22546 }
22547}
22548impl From<TerminalAsPtr> for SyntaxStablePtrId {
22549 fn from(ptr: TerminalAsPtr) -> Self {
22550 ptr.untyped()
22551 }
22552}
22553#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22554pub struct TerminalAsGreen(pub GreenId);
22555impl TypedSyntaxNode for TerminalAs {
22556 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAs);
22557 type StablePtr = TerminalAsPtr;
22558 type Green = TerminalAsGreen;
22559 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22560 TerminalAsGreen(
22561 Arc::new(GreenNode {
22562 kind: SyntaxKind::TerminalAs,
22563 details: GreenNodeDetails::Node {
22564 children: vec![
22565 Trivia::missing(db).0,
22566 TokenAs::missing(db).0,
22567 Trivia::missing(db).0,
22568 ],
22569 width: TextWidth::default(),
22570 },
22571 })
22572 .intern(db),
22573 )
22574 }
22575 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22576 let kind = node.kind(db);
22577 assert_eq!(
22578 kind,
22579 SyntaxKind::TerminalAs,
22580 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22581 kind,
22582 SyntaxKind::TerminalAs
22583 );
22584 let children = db.get_children(node.clone());
22585 Self { node, children }
22586 }
22587 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22588 let kind = node.kind(db);
22589 if kind == SyntaxKind::TerminalAs { Some(Self::from_syntax_node(db, node)) } else { None }
22590 }
22591 fn as_syntax_node(&self) -> SyntaxNode {
22592 self.node.clone()
22593 }
22594 fn stable_ptr(&self) -> Self::StablePtr {
22595 TerminalAsPtr(self.node.0.stable_ptr)
22596 }
22597}
22598impl From<&TerminalAs> for SyntaxStablePtrId {
22599 fn from(node: &TerminalAs) -> Self {
22600 node.stable_ptr().untyped()
22601 }
22602}
22603#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22604pub struct TokenConst {
22605 node: SyntaxNode,
22606}
22607impl Token for TokenConst {
22608 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22609 TokenConstGreen(
22610 Arc::new(GreenNode {
22611 kind: SyntaxKind::TokenConst,
22612 details: GreenNodeDetails::Token(text),
22613 })
22614 .intern(db),
22615 )
22616 }
22617 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22618 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22619 .clone()
22620 }
22621}
22622#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22623pub struct TokenConstPtr(pub SyntaxStablePtrId);
22624impl TypedStablePtr for TokenConstPtr {
22625 type SyntaxNode = TokenConst;
22626 fn untyped(&self) -> SyntaxStablePtrId {
22627 self.0
22628 }
22629 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenConst {
22630 TokenConst::from_syntax_node(db, self.0.lookup(db))
22631 }
22632}
22633impl From<TokenConstPtr> for SyntaxStablePtrId {
22634 fn from(ptr: TokenConstPtr) -> Self {
22635 ptr.untyped()
22636 }
22637}
22638#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22639pub struct TokenConstGreen(pub GreenId);
22640impl TokenConstGreen {
22641 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22642 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22643 }
22644}
22645impl TypedSyntaxNode for TokenConst {
22646 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenConst);
22647 type StablePtr = TokenConstPtr;
22648 type Green = TokenConstGreen;
22649 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22650 TokenConstGreen(
22651 Arc::new(GreenNode {
22652 kind: SyntaxKind::TokenMissing,
22653 details: GreenNodeDetails::Token("".into()),
22654 })
22655 .intern(db),
22656 )
22657 }
22658 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22659 match node.0.green.lookup_intern(db).details {
22660 GreenNodeDetails::Token(_) => Self { node },
22661 GreenNodeDetails::Node { .. } => {
22662 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenConst)
22663 }
22664 }
22665 }
22666 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22667 match node.0.green.lookup_intern(db).details {
22668 GreenNodeDetails::Token(_) => Some(Self { node }),
22669 GreenNodeDetails::Node { .. } => None,
22670 }
22671 }
22672 fn as_syntax_node(&self) -> SyntaxNode {
22673 self.node.clone()
22674 }
22675 fn stable_ptr(&self) -> Self::StablePtr {
22676 TokenConstPtr(self.node.0.stable_ptr)
22677 }
22678}
22679impl From<&TokenConst> for SyntaxStablePtrId {
22680 fn from(node: &TokenConst) -> Self {
22681 node.stable_ptr().untyped()
22682 }
22683}
22684#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22685pub struct TerminalConst {
22686 node: SyntaxNode,
22687 children: Arc<[SyntaxNode]>,
22688}
22689impl Terminal for TerminalConst {
22690 const KIND: SyntaxKind = SyntaxKind::TerminalConst;
22691 type TokenType = TokenConst;
22692 fn new_green(
22693 db: &dyn SyntaxGroup,
22694 leading_trivia: TriviaGreen,
22695 token: <<TerminalConst as Terminal>::TokenType as TypedSyntaxNode>::Green,
22696 trailing_trivia: TriviaGreen,
22697 ) -> Self::Green {
22698 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22699 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22700 TerminalConstGreen(
22701 Arc::new(GreenNode {
22702 kind: SyntaxKind::TerminalConst,
22703 details: GreenNodeDetails::Node { children, width },
22704 })
22705 .intern(db),
22706 )
22707 }
22708 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22709 self.token(db).text(db)
22710 }
22711}
22712impl TerminalConst {
22713 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22714 Trivia::from_syntax_node(db, self.children[0].clone())
22715 }
22716 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenConst {
22717 TokenConst::from_syntax_node(db, self.children[1].clone())
22718 }
22719 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22720 Trivia::from_syntax_node(db, self.children[2].clone())
22721 }
22722}
22723#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22724pub struct TerminalConstPtr(pub SyntaxStablePtrId);
22725impl TerminalConstPtr {}
22726impl TypedStablePtr for TerminalConstPtr {
22727 type SyntaxNode = TerminalConst;
22728 fn untyped(&self) -> SyntaxStablePtrId {
22729 self.0
22730 }
22731 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalConst {
22732 TerminalConst::from_syntax_node(db, self.0.lookup(db))
22733 }
22734}
22735impl From<TerminalConstPtr> for SyntaxStablePtrId {
22736 fn from(ptr: TerminalConstPtr) -> Self {
22737 ptr.untyped()
22738 }
22739}
22740#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22741pub struct TerminalConstGreen(pub GreenId);
22742impl TypedSyntaxNode for TerminalConst {
22743 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalConst);
22744 type StablePtr = TerminalConstPtr;
22745 type Green = TerminalConstGreen;
22746 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22747 TerminalConstGreen(
22748 Arc::new(GreenNode {
22749 kind: SyntaxKind::TerminalConst,
22750 details: GreenNodeDetails::Node {
22751 children: vec![
22752 Trivia::missing(db).0,
22753 TokenConst::missing(db).0,
22754 Trivia::missing(db).0,
22755 ],
22756 width: TextWidth::default(),
22757 },
22758 })
22759 .intern(db),
22760 )
22761 }
22762 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22763 let kind = node.kind(db);
22764 assert_eq!(
22765 kind,
22766 SyntaxKind::TerminalConst,
22767 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22768 kind,
22769 SyntaxKind::TerminalConst
22770 );
22771 let children = db.get_children(node.clone());
22772 Self { node, children }
22773 }
22774 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22775 let kind = node.kind(db);
22776 if kind == SyntaxKind::TerminalConst {
22777 Some(Self::from_syntax_node(db, node))
22778 } else {
22779 None
22780 }
22781 }
22782 fn as_syntax_node(&self) -> SyntaxNode {
22783 self.node.clone()
22784 }
22785 fn stable_ptr(&self) -> Self::StablePtr {
22786 TerminalConstPtr(self.node.0.stable_ptr)
22787 }
22788}
22789impl From<&TerminalConst> for SyntaxStablePtrId {
22790 fn from(node: &TerminalConst) -> Self {
22791 node.stable_ptr().untyped()
22792 }
22793}
22794#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22795pub struct TokenElse {
22796 node: SyntaxNode,
22797}
22798impl Token for TokenElse {
22799 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22800 TokenElseGreen(
22801 Arc::new(GreenNode {
22802 kind: SyntaxKind::TokenElse,
22803 details: GreenNodeDetails::Token(text),
22804 })
22805 .intern(db),
22806 )
22807 }
22808 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22809 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22810 .clone()
22811 }
22812}
22813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22814pub struct TokenElsePtr(pub SyntaxStablePtrId);
22815impl TypedStablePtr for TokenElsePtr {
22816 type SyntaxNode = TokenElse;
22817 fn untyped(&self) -> SyntaxStablePtrId {
22818 self.0
22819 }
22820 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenElse {
22821 TokenElse::from_syntax_node(db, self.0.lookup(db))
22822 }
22823}
22824impl From<TokenElsePtr> for SyntaxStablePtrId {
22825 fn from(ptr: TokenElsePtr) -> Self {
22826 ptr.untyped()
22827 }
22828}
22829#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22830pub struct TokenElseGreen(pub GreenId);
22831impl TokenElseGreen {
22832 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22833 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
22834 }
22835}
22836impl TypedSyntaxNode for TokenElse {
22837 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenElse);
22838 type StablePtr = TokenElsePtr;
22839 type Green = TokenElseGreen;
22840 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22841 TokenElseGreen(
22842 Arc::new(GreenNode {
22843 kind: SyntaxKind::TokenMissing,
22844 details: GreenNodeDetails::Token("".into()),
22845 })
22846 .intern(db),
22847 )
22848 }
22849 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22850 match node.0.green.lookup_intern(db).details {
22851 GreenNodeDetails::Token(_) => Self { node },
22852 GreenNodeDetails::Node { .. } => {
22853 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenElse)
22854 }
22855 }
22856 }
22857 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22858 match node.0.green.lookup_intern(db).details {
22859 GreenNodeDetails::Token(_) => Some(Self { node }),
22860 GreenNodeDetails::Node { .. } => None,
22861 }
22862 }
22863 fn as_syntax_node(&self) -> SyntaxNode {
22864 self.node.clone()
22865 }
22866 fn stable_ptr(&self) -> Self::StablePtr {
22867 TokenElsePtr(self.node.0.stable_ptr)
22868 }
22869}
22870impl From<&TokenElse> for SyntaxStablePtrId {
22871 fn from(node: &TokenElse) -> Self {
22872 node.stable_ptr().untyped()
22873 }
22874}
22875#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22876pub struct TerminalElse {
22877 node: SyntaxNode,
22878 children: Arc<[SyntaxNode]>,
22879}
22880impl Terminal for TerminalElse {
22881 const KIND: SyntaxKind = SyntaxKind::TerminalElse;
22882 type TokenType = TokenElse;
22883 fn new_green(
22884 db: &dyn SyntaxGroup,
22885 leading_trivia: TriviaGreen,
22886 token: <<TerminalElse as Terminal>::TokenType as TypedSyntaxNode>::Green,
22887 trailing_trivia: TriviaGreen,
22888 ) -> Self::Green {
22889 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
22890 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
22891 TerminalElseGreen(
22892 Arc::new(GreenNode {
22893 kind: SyntaxKind::TerminalElse,
22894 details: GreenNodeDetails::Node { children, width },
22895 })
22896 .intern(db),
22897 )
22898 }
22899 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22900 self.token(db).text(db)
22901 }
22902}
22903impl TerminalElse {
22904 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22905 Trivia::from_syntax_node(db, self.children[0].clone())
22906 }
22907 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenElse {
22908 TokenElse::from_syntax_node(db, self.children[1].clone())
22909 }
22910 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
22911 Trivia::from_syntax_node(db, self.children[2].clone())
22912 }
22913}
22914#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22915pub struct TerminalElsePtr(pub SyntaxStablePtrId);
22916impl TerminalElsePtr {}
22917impl TypedStablePtr for TerminalElsePtr {
22918 type SyntaxNode = TerminalElse;
22919 fn untyped(&self) -> SyntaxStablePtrId {
22920 self.0
22921 }
22922 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalElse {
22923 TerminalElse::from_syntax_node(db, self.0.lookup(db))
22924 }
22925}
22926impl From<TerminalElsePtr> for SyntaxStablePtrId {
22927 fn from(ptr: TerminalElsePtr) -> Self {
22928 ptr.untyped()
22929 }
22930}
22931#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
22932pub struct TerminalElseGreen(pub GreenId);
22933impl TypedSyntaxNode for TerminalElse {
22934 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalElse);
22935 type StablePtr = TerminalElsePtr;
22936 type Green = TerminalElseGreen;
22937 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
22938 TerminalElseGreen(
22939 Arc::new(GreenNode {
22940 kind: SyntaxKind::TerminalElse,
22941 details: GreenNodeDetails::Node {
22942 children: vec![
22943 Trivia::missing(db).0,
22944 TokenElse::missing(db).0,
22945 Trivia::missing(db).0,
22946 ],
22947 width: TextWidth::default(),
22948 },
22949 })
22950 .intern(db),
22951 )
22952 }
22953 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
22954 let kind = node.kind(db);
22955 assert_eq!(
22956 kind,
22957 SyntaxKind::TerminalElse,
22958 "Unexpected SyntaxKind {:?}. Expected {:?}.",
22959 kind,
22960 SyntaxKind::TerminalElse
22961 );
22962 let children = db.get_children(node.clone());
22963 Self { node, children }
22964 }
22965 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
22966 let kind = node.kind(db);
22967 if kind == SyntaxKind::TerminalElse { Some(Self::from_syntax_node(db, node)) } else { None }
22968 }
22969 fn as_syntax_node(&self) -> SyntaxNode {
22970 self.node.clone()
22971 }
22972 fn stable_ptr(&self) -> Self::StablePtr {
22973 TerminalElsePtr(self.node.0.stable_ptr)
22974 }
22975}
22976impl From<&TerminalElse> for SyntaxStablePtrId {
22977 fn from(node: &TerminalElse) -> Self {
22978 node.stable_ptr().untyped()
22979 }
22980}
22981#[derive(Clone, Debug, Eq, Hash, PartialEq)]
22982pub struct TokenEnum {
22983 node: SyntaxNode,
22984}
22985impl Token for TokenEnum {
22986 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
22987 TokenEnumGreen(
22988 Arc::new(GreenNode {
22989 kind: SyntaxKind::TokenEnum,
22990 details: GreenNodeDetails::Token(text),
22991 })
22992 .intern(db),
22993 )
22994 }
22995 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
22996 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
22997 .clone()
22998 }
22999}
23000#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23001pub struct TokenEnumPtr(pub SyntaxStablePtrId);
23002impl TypedStablePtr for TokenEnumPtr {
23003 type SyntaxNode = TokenEnum;
23004 fn untyped(&self) -> SyntaxStablePtrId {
23005 self.0
23006 }
23007 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEnum {
23008 TokenEnum::from_syntax_node(db, self.0.lookup(db))
23009 }
23010}
23011impl From<TokenEnumPtr> for SyntaxStablePtrId {
23012 fn from(ptr: TokenEnumPtr) -> Self {
23013 ptr.untyped()
23014 }
23015}
23016#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23017pub struct TokenEnumGreen(pub GreenId);
23018impl TokenEnumGreen {
23019 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23020 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23021 }
23022}
23023impl TypedSyntaxNode for TokenEnum {
23024 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEnum);
23025 type StablePtr = TokenEnumPtr;
23026 type Green = TokenEnumGreen;
23027 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23028 TokenEnumGreen(
23029 Arc::new(GreenNode {
23030 kind: SyntaxKind::TokenMissing,
23031 details: GreenNodeDetails::Token("".into()),
23032 })
23033 .intern(db),
23034 )
23035 }
23036 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23037 match node.0.green.lookup_intern(db).details {
23038 GreenNodeDetails::Token(_) => Self { node },
23039 GreenNodeDetails::Node { .. } => {
23040 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEnum)
23041 }
23042 }
23043 }
23044 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23045 match node.0.green.lookup_intern(db).details {
23046 GreenNodeDetails::Token(_) => Some(Self { node }),
23047 GreenNodeDetails::Node { .. } => None,
23048 }
23049 }
23050 fn as_syntax_node(&self) -> SyntaxNode {
23051 self.node.clone()
23052 }
23053 fn stable_ptr(&self) -> Self::StablePtr {
23054 TokenEnumPtr(self.node.0.stable_ptr)
23055 }
23056}
23057impl From<&TokenEnum> for SyntaxStablePtrId {
23058 fn from(node: &TokenEnum) -> Self {
23059 node.stable_ptr().untyped()
23060 }
23061}
23062#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23063pub struct TerminalEnum {
23064 node: SyntaxNode,
23065 children: Arc<[SyntaxNode]>,
23066}
23067impl Terminal for TerminalEnum {
23068 const KIND: SyntaxKind = SyntaxKind::TerminalEnum;
23069 type TokenType = TokenEnum;
23070 fn new_green(
23071 db: &dyn SyntaxGroup,
23072 leading_trivia: TriviaGreen,
23073 token: <<TerminalEnum as Terminal>::TokenType as TypedSyntaxNode>::Green,
23074 trailing_trivia: TriviaGreen,
23075 ) -> Self::Green {
23076 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23077 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23078 TerminalEnumGreen(
23079 Arc::new(GreenNode {
23080 kind: SyntaxKind::TerminalEnum,
23081 details: GreenNodeDetails::Node { children, width },
23082 })
23083 .intern(db),
23084 )
23085 }
23086 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23087 self.token(db).text(db)
23088 }
23089}
23090impl TerminalEnum {
23091 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23092 Trivia::from_syntax_node(db, self.children[0].clone())
23093 }
23094 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEnum {
23095 TokenEnum::from_syntax_node(db, self.children[1].clone())
23096 }
23097 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23098 Trivia::from_syntax_node(db, self.children[2].clone())
23099 }
23100}
23101#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23102pub struct TerminalEnumPtr(pub SyntaxStablePtrId);
23103impl TerminalEnumPtr {}
23104impl TypedStablePtr for TerminalEnumPtr {
23105 type SyntaxNode = TerminalEnum;
23106 fn untyped(&self) -> SyntaxStablePtrId {
23107 self.0
23108 }
23109 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEnum {
23110 TerminalEnum::from_syntax_node(db, self.0.lookup(db))
23111 }
23112}
23113impl From<TerminalEnumPtr> for SyntaxStablePtrId {
23114 fn from(ptr: TerminalEnumPtr) -> Self {
23115 ptr.untyped()
23116 }
23117}
23118#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23119pub struct TerminalEnumGreen(pub GreenId);
23120impl TypedSyntaxNode for TerminalEnum {
23121 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEnum);
23122 type StablePtr = TerminalEnumPtr;
23123 type Green = TerminalEnumGreen;
23124 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23125 TerminalEnumGreen(
23126 Arc::new(GreenNode {
23127 kind: SyntaxKind::TerminalEnum,
23128 details: GreenNodeDetails::Node {
23129 children: vec![
23130 Trivia::missing(db).0,
23131 TokenEnum::missing(db).0,
23132 Trivia::missing(db).0,
23133 ],
23134 width: TextWidth::default(),
23135 },
23136 })
23137 .intern(db),
23138 )
23139 }
23140 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23141 let kind = node.kind(db);
23142 assert_eq!(
23143 kind,
23144 SyntaxKind::TerminalEnum,
23145 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23146 kind,
23147 SyntaxKind::TerminalEnum
23148 );
23149 let children = db.get_children(node.clone());
23150 Self { node, children }
23151 }
23152 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23153 let kind = node.kind(db);
23154 if kind == SyntaxKind::TerminalEnum { Some(Self::from_syntax_node(db, node)) } else { None }
23155 }
23156 fn as_syntax_node(&self) -> SyntaxNode {
23157 self.node.clone()
23158 }
23159 fn stable_ptr(&self) -> Self::StablePtr {
23160 TerminalEnumPtr(self.node.0.stable_ptr)
23161 }
23162}
23163impl From<&TerminalEnum> for SyntaxStablePtrId {
23164 fn from(node: &TerminalEnum) -> Self {
23165 node.stable_ptr().untyped()
23166 }
23167}
23168#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23169pub struct TokenExtern {
23170 node: SyntaxNode,
23171}
23172impl Token for TokenExtern {
23173 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23174 TokenExternGreen(
23175 Arc::new(GreenNode {
23176 kind: SyntaxKind::TokenExtern,
23177 details: GreenNodeDetails::Token(text),
23178 })
23179 .intern(db),
23180 )
23181 }
23182 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23183 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23184 .clone()
23185 }
23186}
23187#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23188pub struct TokenExternPtr(pub SyntaxStablePtrId);
23189impl TypedStablePtr for TokenExternPtr {
23190 type SyntaxNode = TokenExtern;
23191 fn untyped(&self) -> SyntaxStablePtrId {
23192 self.0
23193 }
23194 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenExtern {
23195 TokenExtern::from_syntax_node(db, self.0.lookup(db))
23196 }
23197}
23198impl From<TokenExternPtr> for SyntaxStablePtrId {
23199 fn from(ptr: TokenExternPtr) -> Self {
23200 ptr.untyped()
23201 }
23202}
23203#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23204pub struct TokenExternGreen(pub GreenId);
23205impl TokenExternGreen {
23206 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23207 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23208 }
23209}
23210impl TypedSyntaxNode for TokenExtern {
23211 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenExtern);
23212 type StablePtr = TokenExternPtr;
23213 type Green = TokenExternGreen;
23214 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23215 TokenExternGreen(
23216 Arc::new(GreenNode {
23217 kind: SyntaxKind::TokenMissing,
23218 details: GreenNodeDetails::Token("".into()),
23219 })
23220 .intern(db),
23221 )
23222 }
23223 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23224 match node.0.green.lookup_intern(db).details {
23225 GreenNodeDetails::Token(_) => Self { node },
23226 GreenNodeDetails::Node { .. } => {
23227 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenExtern)
23228 }
23229 }
23230 }
23231 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23232 match node.0.green.lookup_intern(db).details {
23233 GreenNodeDetails::Token(_) => Some(Self { node }),
23234 GreenNodeDetails::Node { .. } => None,
23235 }
23236 }
23237 fn as_syntax_node(&self) -> SyntaxNode {
23238 self.node.clone()
23239 }
23240 fn stable_ptr(&self) -> Self::StablePtr {
23241 TokenExternPtr(self.node.0.stable_ptr)
23242 }
23243}
23244impl From<&TokenExtern> for SyntaxStablePtrId {
23245 fn from(node: &TokenExtern) -> Self {
23246 node.stable_ptr().untyped()
23247 }
23248}
23249#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23250pub struct TerminalExtern {
23251 node: SyntaxNode,
23252 children: Arc<[SyntaxNode]>,
23253}
23254impl Terminal for TerminalExtern {
23255 const KIND: SyntaxKind = SyntaxKind::TerminalExtern;
23256 type TokenType = TokenExtern;
23257 fn new_green(
23258 db: &dyn SyntaxGroup,
23259 leading_trivia: TriviaGreen,
23260 token: <<TerminalExtern as Terminal>::TokenType as TypedSyntaxNode>::Green,
23261 trailing_trivia: TriviaGreen,
23262 ) -> Self::Green {
23263 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23264 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23265 TerminalExternGreen(
23266 Arc::new(GreenNode {
23267 kind: SyntaxKind::TerminalExtern,
23268 details: GreenNodeDetails::Node { children, width },
23269 })
23270 .intern(db),
23271 )
23272 }
23273 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23274 self.token(db).text(db)
23275 }
23276}
23277impl TerminalExtern {
23278 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23279 Trivia::from_syntax_node(db, self.children[0].clone())
23280 }
23281 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenExtern {
23282 TokenExtern::from_syntax_node(db, self.children[1].clone())
23283 }
23284 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23285 Trivia::from_syntax_node(db, self.children[2].clone())
23286 }
23287}
23288#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23289pub struct TerminalExternPtr(pub SyntaxStablePtrId);
23290impl TerminalExternPtr {}
23291impl TypedStablePtr for TerminalExternPtr {
23292 type SyntaxNode = TerminalExtern;
23293 fn untyped(&self) -> SyntaxStablePtrId {
23294 self.0
23295 }
23296 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalExtern {
23297 TerminalExtern::from_syntax_node(db, self.0.lookup(db))
23298 }
23299}
23300impl From<TerminalExternPtr> for SyntaxStablePtrId {
23301 fn from(ptr: TerminalExternPtr) -> Self {
23302 ptr.untyped()
23303 }
23304}
23305#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23306pub struct TerminalExternGreen(pub GreenId);
23307impl TypedSyntaxNode for TerminalExtern {
23308 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalExtern);
23309 type StablePtr = TerminalExternPtr;
23310 type Green = TerminalExternGreen;
23311 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23312 TerminalExternGreen(
23313 Arc::new(GreenNode {
23314 kind: SyntaxKind::TerminalExtern,
23315 details: GreenNodeDetails::Node {
23316 children: vec![
23317 Trivia::missing(db).0,
23318 TokenExtern::missing(db).0,
23319 Trivia::missing(db).0,
23320 ],
23321 width: TextWidth::default(),
23322 },
23323 })
23324 .intern(db),
23325 )
23326 }
23327 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23328 let kind = node.kind(db);
23329 assert_eq!(
23330 kind,
23331 SyntaxKind::TerminalExtern,
23332 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23333 kind,
23334 SyntaxKind::TerminalExtern
23335 );
23336 let children = db.get_children(node.clone());
23337 Self { node, children }
23338 }
23339 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23340 let kind = node.kind(db);
23341 if kind == SyntaxKind::TerminalExtern {
23342 Some(Self::from_syntax_node(db, node))
23343 } else {
23344 None
23345 }
23346 }
23347 fn as_syntax_node(&self) -> SyntaxNode {
23348 self.node.clone()
23349 }
23350 fn stable_ptr(&self) -> Self::StablePtr {
23351 TerminalExternPtr(self.node.0.stable_ptr)
23352 }
23353}
23354impl From<&TerminalExtern> for SyntaxStablePtrId {
23355 fn from(node: &TerminalExtern) -> Self {
23356 node.stable_ptr().untyped()
23357 }
23358}
23359#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23360pub struct TokenFalse {
23361 node: SyntaxNode,
23362}
23363impl Token for TokenFalse {
23364 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23365 TokenFalseGreen(
23366 Arc::new(GreenNode {
23367 kind: SyntaxKind::TokenFalse,
23368 details: GreenNodeDetails::Token(text),
23369 })
23370 .intern(db),
23371 )
23372 }
23373 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23374 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23375 .clone()
23376 }
23377}
23378#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23379pub struct TokenFalsePtr(pub SyntaxStablePtrId);
23380impl TypedStablePtr for TokenFalsePtr {
23381 type SyntaxNode = TokenFalse;
23382 fn untyped(&self) -> SyntaxStablePtrId {
23383 self.0
23384 }
23385 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFalse {
23386 TokenFalse::from_syntax_node(db, self.0.lookup(db))
23387 }
23388}
23389impl From<TokenFalsePtr> for SyntaxStablePtrId {
23390 fn from(ptr: TokenFalsePtr) -> Self {
23391 ptr.untyped()
23392 }
23393}
23394#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23395pub struct TokenFalseGreen(pub GreenId);
23396impl TokenFalseGreen {
23397 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23398 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23399 }
23400}
23401impl TypedSyntaxNode for TokenFalse {
23402 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFalse);
23403 type StablePtr = TokenFalsePtr;
23404 type Green = TokenFalseGreen;
23405 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23406 TokenFalseGreen(
23407 Arc::new(GreenNode {
23408 kind: SyntaxKind::TokenMissing,
23409 details: GreenNodeDetails::Token("".into()),
23410 })
23411 .intern(db),
23412 )
23413 }
23414 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23415 match node.0.green.lookup_intern(db).details {
23416 GreenNodeDetails::Token(_) => Self { node },
23417 GreenNodeDetails::Node { .. } => {
23418 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFalse)
23419 }
23420 }
23421 }
23422 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23423 match node.0.green.lookup_intern(db).details {
23424 GreenNodeDetails::Token(_) => Some(Self { node }),
23425 GreenNodeDetails::Node { .. } => None,
23426 }
23427 }
23428 fn as_syntax_node(&self) -> SyntaxNode {
23429 self.node.clone()
23430 }
23431 fn stable_ptr(&self) -> Self::StablePtr {
23432 TokenFalsePtr(self.node.0.stable_ptr)
23433 }
23434}
23435impl From<&TokenFalse> for SyntaxStablePtrId {
23436 fn from(node: &TokenFalse) -> Self {
23437 node.stable_ptr().untyped()
23438 }
23439}
23440#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23441pub struct TerminalFalse {
23442 node: SyntaxNode,
23443 children: Arc<[SyntaxNode]>,
23444}
23445impl Terminal for TerminalFalse {
23446 const KIND: SyntaxKind = SyntaxKind::TerminalFalse;
23447 type TokenType = TokenFalse;
23448 fn new_green(
23449 db: &dyn SyntaxGroup,
23450 leading_trivia: TriviaGreen,
23451 token: <<TerminalFalse as Terminal>::TokenType as TypedSyntaxNode>::Green,
23452 trailing_trivia: TriviaGreen,
23453 ) -> Self::Green {
23454 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23455 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23456 TerminalFalseGreen(
23457 Arc::new(GreenNode {
23458 kind: SyntaxKind::TerminalFalse,
23459 details: GreenNodeDetails::Node { children, width },
23460 })
23461 .intern(db),
23462 )
23463 }
23464 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23465 self.token(db).text(db)
23466 }
23467}
23468impl TerminalFalse {
23469 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23470 Trivia::from_syntax_node(db, self.children[0].clone())
23471 }
23472 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFalse {
23473 TokenFalse::from_syntax_node(db, self.children[1].clone())
23474 }
23475 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23476 Trivia::from_syntax_node(db, self.children[2].clone())
23477 }
23478}
23479#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23480pub struct TerminalFalsePtr(pub SyntaxStablePtrId);
23481impl TerminalFalsePtr {}
23482impl TypedStablePtr for TerminalFalsePtr {
23483 type SyntaxNode = TerminalFalse;
23484 fn untyped(&self) -> SyntaxStablePtrId {
23485 self.0
23486 }
23487 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFalse {
23488 TerminalFalse::from_syntax_node(db, self.0.lookup(db))
23489 }
23490}
23491impl From<TerminalFalsePtr> for SyntaxStablePtrId {
23492 fn from(ptr: TerminalFalsePtr) -> Self {
23493 ptr.untyped()
23494 }
23495}
23496#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23497pub struct TerminalFalseGreen(pub GreenId);
23498impl TypedSyntaxNode for TerminalFalse {
23499 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFalse);
23500 type StablePtr = TerminalFalsePtr;
23501 type Green = TerminalFalseGreen;
23502 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23503 TerminalFalseGreen(
23504 Arc::new(GreenNode {
23505 kind: SyntaxKind::TerminalFalse,
23506 details: GreenNodeDetails::Node {
23507 children: vec![
23508 Trivia::missing(db).0,
23509 TokenFalse::missing(db).0,
23510 Trivia::missing(db).0,
23511 ],
23512 width: TextWidth::default(),
23513 },
23514 })
23515 .intern(db),
23516 )
23517 }
23518 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23519 let kind = node.kind(db);
23520 assert_eq!(
23521 kind,
23522 SyntaxKind::TerminalFalse,
23523 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23524 kind,
23525 SyntaxKind::TerminalFalse
23526 );
23527 let children = db.get_children(node.clone());
23528 Self { node, children }
23529 }
23530 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23531 let kind = node.kind(db);
23532 if kind == SyntaxKind::TerminalFalse {
23533 Some(Self::from_syntax_node(db, node))
23534 } else {
23535 None
23536 }
23537 }
23538 fn as_syntax_node(&self) -> SyntaxNode {
23539 self.node.clone()
23540 }
23541 fn stable_ptr(&self) -> Self::StablePtr {
23542 TerminalFalsePtr(self.node.0.stable_ptr)
23543 }
23544}
23545impl From<&TerminalFalse> for SyntaxStablePtrId {
23546 fn from(node: &TerminalFalse) -> Self {
23547 node.stable_ptr().untyped()
23548 }
23549}
23550#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23551pub struct TokenFunction {
23552 node: SyntaxNode,
23553}
23554impl Token for TokenFunction {
23555 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23556 TokenFunctionGreen(
23557 Arc::new(GreenNode {
23558 kind: SyntaxKind::TokenFunction,
23559 details: GreenNodeDetails::Token(text),
23560 })
23561 .intern(db),
23562 )
23563 }
23564 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23565 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23566 .clone()
23567 }
23568}
23569#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23570pub struct TokenFunctionPtr(pub SyntaxStablePtrId);
23571impl TypedStablePtr for TokenFunctionPtr {
23572 type SyntaxNode = TokenFunction;
23573 fn untyped(&self) -> SyntaxStablePtrId {
23574 self.0
23575 }
23576 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFunction {
23577 TokenFunction::from_syntax_node(db, self.0.lookup(db))
23578 }
23579}
23580impl From<TokenFunctionPtr> for SyntaxStablePtrId {
23581 fn from(ptr: TokenFunctionPtr) -> Self {
23582 ptr.untyped()
23583 }
23584}
23585#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23586pub struct TokenFunctionGreen(pub GreenId);
23587impl TokenFunctionGreen {
23588 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23589 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23590 }
23591}
23592impl TypedSyntaxNode for TokenFunction {
23593 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFunction);
23594 type StablePtr = TokenFunctionPtr;
23595 type Green = TokenFunctionGreen;
23596 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23597 TokenFunctionGreen(
23598 Arc::new(GreenNode {
23599 kind: SyntaxKind::TokenMissing,
23600 details: GreenNodeDetails::Token("".into()),
23601 })
23602 .intern(db),
23603 )
23604 }
23605 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23606 match node.0.green.lookup_intern(db).details {
23607 GreenNodeDetails::Token(_) => Self { node },
23608 GreenNodeDetails::Node { .. } => {
23609 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFunction)
23610 }
23611 }
23612 }
23613 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23614 match node.0.green.lookup_intern(db).details {
23615 GreenNodeDetails::Token(_) => Some(Self { node }),
23616 GreenNodeDetails::Node { .. } => None,
23617 }
23618 }
23619 fn as_syntax_node(&self) -> SyntaxNode {
23620 self.node.clone()
23621 }
23622 fn stable_ptr(&self) -> Self::StablePtr {
23623 TokenFunctionPtr(self.node.0.stable_ptr)
23624 }
23625}
23626impl From<&TokenFunction> for SyntaxStablePtrId {
23627 fn from(node: &TokenFunction) -> Self {
23628 node.stable_ptr().untyped()
23629 }
23630}
23631#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23632pub struct TerminalFunction {
23633 node: SyntaxNode,
23634 children: Arc<[SyntaxNode]>,
23635}
23636impl Terminal for TerminalFunction {
23637 const KIND: SyntaxKind = SyntaxKind::TerminalFunction;
23638 type TokenType = TokenFunction;
23639 fn new_green(
23640 db: &dyn SyntaxGroup,
23641 leading_trivia: TriviaGreen,
23642 token: <<TerminalFunction as Terminal>::TokenType as TypedSyntaxNode>::Green,
23643 trailing_trivia: TriviaGreen,
23644 ) -> Self::Green {
23645 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23646 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23647 TerminalFunctionGreen(
23648 Arc::new(GreenNode {
23649 kind: SyntaxKind::TerminalFunction,
23650 details: GreenNodeDetails::Node { children, width },
23651 })
23652 .intern(db),
23653 )
23654 }
23655 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23656 self.token(db).text(db)
23657 }
23658}
23659impl TerminalFunction {
23660 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23661 Trivia::from_syntax_node(db, self.children[0].clone())
23662 }
23663 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFunction {
23664 TokenFunction::from_syntax_node(db, self.children[1].clone())
23665 }
23666 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23667 Trivia::from_syntax_node(db, self.children[2].clone())
23668 }
23669}
23670#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23671pub struct TerminalFunctionPtr(pub SyntaxStablePtrId);
23672impl TerminalFunctionPtr {}
23673impl TypedStablePtr for TerminalFunctionPtr {
23674 type SyntaxNode = TerminalFunction;
23675 fn untyped(&self) -> SyntaxStablePtrId {
23676 self.0
23677 }
23678 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFunction {
23679 TerminalFunction::from_syntax_node(db, self.0.lookup(db))
23680 }
23681}
23682impl From<TerminalFunctionPtr> for SyntaxStablePtrId {
23683 fn from(ptr: TerminalFunctionPtr) -> Self {
23684 ptr.untyped()
23685 }
23686}
23687#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23688pub struct TerminalFunctionGreen(pub GreenId);
23689impl TypedSyntaxNode for TerminalFunction {
23690 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFunction);
23691 type StablePtr = TerminalFunctionPtr;
23692 type Green = TerminalFunctionGreen;
23693 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23694 TerminalFunctionGreen(
23695 Arc::new(GreenNode {
23696 kind: SyntaxKind::TerminalFunction,
23697 details: GreenNodeDetails::Node {
23698 children: vec![
23699 Trivia::missing(db).0,
23700 TokenFunction::missing(db).0,
23701 Trivia::missing(db).0,
23702 ],
23703 width: TextWidth::default(),
23704 },
23705 })
23706 .intern(db),
23707 )
23708 }
23709 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23710 let kind = node.kind(db);
23711 assert_eq!(
23712 kind,
23713 SyntaxKind::TerminalFunction,
23714 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23715 kind,
23716 SyntaxKind::TerminalFunction
23717 );
23718 let children = db.get_children(node.clone());
23719 Self { node, children }
23720 }
23721 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23722 let kind = node.kind(db);
23723 if kind == SyntaxKind::TerminalFunction {
23724 Some(Self::from_syntax_node(db, node))
23725 } else {
23726 None
23727 }
23728 }
23729 fn as_syntax_node(&self) -> SyntaxNode {
23730 self.node.clone()
23731 }
23732 fn stable_ptr(&self) -> Self::StablePtr {
23733 TerminalFunctionPtr(self.node.0.stable_ptr)
23734 }
23735}
23736impl From<&TerminalFunction> for SyntaxStablePtrId {
23737 fn from(node: &TerminalFunction) -> Self {
23738 node.stable_ptr().untyped()
23739 }
23740}
23741#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23742pub struct TokenIf {
23743 node: SyntaxNode,
23744}
23745impl Token for TokenIf {
23746 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23747 TokenIfGreen(
23748 Arc::new(GreenNode {
23749 kind: SyntaxKind::TokenIf,
23750 details: GreenNodeDetails::Token(text),
23751 })
23752 .intern(db),
23753 )
23754 }
23755 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23756 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23757 .clone()
23758 }
23759}
23760#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23761pub struct TokenIfPtr(pub SyntaxStablePtrId);
23762impl TypedStablePtr for TokenIfPtr {
23763 type SyntaxNode = TokenIf;
23764 fn untyped(&self) -> SyntaxStablePtrId {
23765 self.0
23766 }
23767 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenIf {
23768 TokenIf::from_syntax_node(db, self.0.lookup(db))
23769 }
23770}
23771impl From<TokenIfPtr> for SyntaxStablePtrId {
23772 fn from(ptr: TokenIfPtr) -> Self {
23773 ptr.untyped()
23774 }
23775}
23776#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23777pub struct TokenIfGreen(pub GreenId);
23778impl TokenIfGreen {
23779 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23780 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23781 }
23782}
23783impl TypedSyntaxNode for TokenIf {
23784 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenIf);
23785 type StablePtr = TokenIfPtr;
23786 type Green = TokenIfGreen;
23787 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23788 TokenIfGreen(
23789 Arc::new(GreenNode {
23790 kind: SyntaxKind::TokenMissing,
23791 details: GreenNodeDetails::Token("".into()),
23792 })
23793 .intern(db),
23794 )
23795 }
23796 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23797 match node.0.green.lookup_intern(db).details {
23798 GreenNodeDetails::Token(_) => Self { node },
23799 GreenNodeDetails::Node { .. } => {
23800 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenIf)
23801 }
23802 }
23803 }
23804 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23805 match node.0.green.lookup_intern(db).details {
23806 GreenNodeDetails::Token(_) => Some(Self { node }),
23807 GreenNodeDetails::Node { .. } => None,
23808 }
23809 }
23810 fn as_syntax_node(&self) -> SyntaxNode {
23811 self.node.clone()
23812 }
23813 fn stable_ptr(&self) -> Self::StablePtr {
23814 TokenIfPtr(self.node.0.stable_ptr)
23815 }
23816}
23817impl From<&TokenIf> for SyntaxStablePtrId {
23818 fn from(node: &TokenIf) -> Self {
23819 node.stable_ptr().untyped()
23820 }
23821}
23822#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23823pub struct TerminalIf {
23824 node: SyntaxNode,
23825 children: Arc<[SyntaxNode]>,
23826}
23827impl Terminal for TerminalIf {
23828 const KIND: SyntaxKind = SyntaxKind::TerminalIf;
23829 type TokenType = TokenIf;
23830 fn new_green(
23831 db: &dyn SyntaxGroup,
23832 leading_trivia: TriviaGreen,
23833 token: <<TerminalIf as Terminal>::TokenType as TypedSyntaxNode>::Green,
23834 trailing_trivia: TriviaGreen,
23835 ) -> Self::Green {
23836 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
23837 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
23838 TerminalIfGreen(
23839 Arc::new(GreenNode {
23840 kind: SyntaxKind::TerminalIf,
23841 details: GreenNodeDetails::Node { children, width },
23842 })
23843 .intern(db),
23844 )
23845 }
23846 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23847 self.token(db).text(db)
23848 }
23849}
23850impl TerminalIf {
23851 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23852 Trivia::from_syntax_node(db, self.children[0].clone())
23853 }
23854 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenIf {
23855 TokenIf::from_syntax_node(db, self.children[1].clone())
23856 }
23857 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
23858 Trivia::from_syntax_node(db, self.children[2].clone())
23859 }
23860}
23861#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23862pub struct TerminalIfPtr(pub SyntaxStablePtrId);
23863impl TerminalIfPtr {}
23864impl TypedStablePtr for TerminalIfPtr {
23865 type SyntaxNode = TerminalIf;
23866 fn untyped(&self) -> SyntaxStablePtrId {
23867 self.0
23868 }
23869 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalIf {
23870 TerminalIf::from_syntax_node(db, self.0.lookup(db))
23871 }
23872}
23873impl From<TerminalIfPtr> for SyntaxStablePtrId {
23874 fn from(ptr: TerminalIfPtr) -> Self {
23875 ptr.untyped()
23876 }
23877}
23878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23879pub struct TerminalIfGreen(pub GreenId);
23880impl TypedSyntaxNode for TerminalIf {
23881 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalIf);
23882 type StablePtr = TerminalIfPtr;
23883 type Green = TerminalIfGreen;
23884 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23885 TerminalIfGreen(
23886 Arc::new(GreenNode {
23887 kind: SyntaxKind::TerminalIf,
23888 details: GreenNodeDetails::Node {
23889 children: vec![
23890 Trivia::missing(db).0,
23891 TokenIf::missing(db).0,
23892 Trivia::missing(db).0,
23893 ],
23894 width: TextWidth::default(),
23895 },
23896 })
23897 .intern(db),
23898 )
23899 }
23900 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23901 let kind = node.kind(db);
23902 assert_eq!(
23903 kind,
23904 SyntaxKind::TerminalIf,
23905 "Unexpected SyntaxKind {:?}. Expected {:?}.",
23906 kind,
23907 SyntaxKind::TerminalIf
23908 );
23909 let children = db.get_children(node.clone());
23910 Self { node, children }
23911 }
23912 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23913 let kind = node.kind(db);
23914 if kind == SyntaxKind::TerminalIf { Some(Self::from_syntax_node(db, node)) } else { None }
23915 }
23916 fn as_syntax_node(&self) -> SyntaxNode {
23917 self.node.clone()
23918 }
23919 fn stable_ptr(&self) -> Self::StablePtr {
23920 TerminalIfPtr(self.node.0.stable_ptr)
23921 }
23922}
23923impl From<&TerminalIf> for SyntaxStablePtrId {
23924 fn from(node: &TerminalIf) -> Self {
23925 node.stable_ptr().untyped()
23926 }
23927}
23928#[derive(Clone, Debug, Eq, Hash, PartialEq)]
23929pub struct TokenWhile {
23930 node: SyntaxNode,
23931}
23932impl Token for TokenWhile {
23933 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
23934 TokenWhileGreen(
23935 Arc::new(GreenNode {
23936 kind: SyntaxKind::TokenWhile,
23937 details: GreenNodeDetails::Token(text),
23938 })
23939 .intern(db),
23940 )
23941 }
23942 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23943 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
23944 .clone()
23945 }
23946}
23947#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23948pub struct TokenWhilePtr(pub SyntaxStablePtrId);
23949impl TypedStablePtr for TokenWhilePtr {
23950 type SyntaxNode = TokenWhile;
23951 fn untyped(&self) -> SyntaxStablePtrId {
23952 self.0
23953 }
23954 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhile {
23955 TokenWhile::from_syntax_node(db, self.0.lookup(db))
23956 }
23957}
23958impl From<TokenWhilePtr> for SyntaxStablePtrId {
23959 fn from(ptr: TokenWhilePtr) -> Self {
23960 ptr.untyped()
23961 }
23962}
23963#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
23964pub struct TokenWhileGreen(pub GreenId);
23965impl TokenWhileGreen {
23966 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
23967 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
23968 }
23969}
23970impl TypedSyntaxNode for TokenWhile {
23971 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhile);
23972 type StablePtr = TokenWhilePtr;
23973 type Green = TokenWhileGreen;
23974 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
23975 TokenWhileGreen(
23976 Arc::new(GreenNode {
23977 kind: SyntaxKind::TokenMissing,
23978 details: GreenNodeDetails::Token("".into()),
23979 })
23980 .intern(db),
23981 )
23982 }
23983 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
23984 match node.0.green.lookup_intern(db).details {
23985 GreenNodeDetails::Token(_) => Self { node },
23986 GreenNodeDetails::Node { .. } => {
23987 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhile)
23988 }
23989 }
23990 }
23991 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
23992 match node.0.green.lookup_intern(db).details {
23993 GreenNodeDetails::Token(_) => Some(Self { node }),
23994 GreenNodeDetails::Node { .. } => None,
23995 }
23996 }
23997 fn as_syntax_node(&self) -> SyntaxNode {
23998 self.node.clone()
23999 }
24000 fn stable_ptr(&self) -> Self::StablePtr {
24001 TokenWhilePtr(self.node.0.stable_ptr)
24002 }
24003}
24004impl From<&TokenWhile> for SyntaxStablePtrId {
24005 fn from(node: &TokenWhile) -> Self {
24006 node.stable_ptr().untyped()
24007 }
24008}
24009#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24010pub struct TerminalWhile {
24011 node: SyntaxNode,
24012 children: Arc<[SyntaxNode]>,
24013}
24014impl Terminal for TerminalWhile {
24015 const KIND: SyntaxKind = SyntaxKind::TerminalWhile;
24016 type TokenType = TokenWhile;
24017 fn new_green(
24018 db: &dyn SyntaxGroup,
24019 leading_trivia: TriviaGreen,
24020 token: <<TerminalWhile as Terminal>::TokenType as TypedSyntaxNode>::Green,
24021 trailing_trivia: TriviaGreen,
24022 ) -> Self::Green {
24023 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24024 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24025 TerminalWhileGreen(
24026 Arc::new(GreenNode {
24027 kind: SyntaxKind::TerminalWhile,
24028 details: GreenNodeDetails::Node { children, width },
24029 })
24030 .intern(db),
24031 )
24032 }
24033 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24034 self.token(db).text(db)
24035 }
24036}
24037impl TerminalWhile {
24038 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24039 Trivia::from_syntax_node(db, self.children[0].clone())
24040 }
24041 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenWhile {
24042 TokenWhile::from_syntax_node(db, self.children[1].clone())
24043 }
24044 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24045 Trivia::from_syntax_node(db, self.children[2].clone())
24046 }
24047}
24048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24049pub struct TerminalWhilePtr(pub SyntaxStablePtrId);
24050impl TerminalWhilePtr {}
24051impl TypedStablePtr for TerminalWhilePtr {
24052 type SyntaxNode = TerminalWhile;
24053 fn untyped(&self) -> SyntaxStablePtrId {
24054 self.0
24055 }
24056 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalWhile {
24057 TerminalWhile::from_syntax_node(db, self.0.lookup(db))
24058 }
24059}
24060impl From<TerminalWhilePtr> for SyntaxStablePtrId {
24061 fn from(ptr: TerminalWhilePtr) -> Self {
24062 ptr.untyped()
24063 }
24064}
24065#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24066pub struct TerminalWhileGreen(pub GreenId);
24067impl TypedSyntaxNode for TerminalWhile {
24068 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalWhile);
24069 type StablePtr = TerminalWhilePtr;
24070 type Green = TerminalWhileGreen;
24071 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24072 TerminalWhileGreen(
24073 Arc::new(GreenNode {
24074 kind: SyntaxKind::TerminalWhile,
24075 details: GreenNodeDetails::Node {
24076 children: vec![
24077 Trivia::missing(db).0,
24078 TokenWhile::missing(db).0,
24079 Trivia::missing(db).0,
24080 ],
24081 width: TextWidth::default(),
24082 },
24083 })
24084 .intern(db),
24085 )
24086 }
24087 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24088 let kind = node.kind(db);
24089 assert_eq!(
24090 kind,
24091 SyntaxKind::TerminalWhile,
24092 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24093 kind,
24094 SyntaxKind::TerminalWhile
24095 );
24096 let children = db.get_children(node.clone());
24097 Self { node, children }
24098 }
24099 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24100 let kind = node.kind(db);
24101 if kind == SyntaxKind::TerminalWhile {
24102 Some(Self::from_syntax_node(db, node))
24103 } else {
24104 None
24105 }
24106 }
24107 fn as_syntax_node(&self) -> SyntaxNode {
24108 self.node.clone()
24109 }
24110 fn stable_ptr(&self) -> Self::StablePtr {
24111 TerminalWhilePtr(self.node.0.stable_ptr)
24112 }
24113}
24114impl From<&TerminalWhile> for SyntaxStablePtrId {
24115 fn from(node: &TerminalWhile) -> Self {
24116 node.stable_ptr().untyped()
24117 }
24118}
24119#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24120pub struct TokenFor {
24121 node: SyntaxNode,
24122}
24123impl Token for TokenFor {
24124 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24125 TokenForGreen(
24126 Arc::new(GreenNode {
24127 kind: SyntaxKind::TokenFor,
24128 details: GreenNodeDetails::Token(text),
24129 })
24130 .intern(db),
24131 )
24132 }
24133 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24134 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24135 .clone()
24136 }
24137}
24138#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24139pub struct TokenForPtr(pub SyntaxStablePtrId);
24140impl TypedStablePtr for TokenForPtr {
24141 type SyntaxNode = TokenFor;
24142 fn untyped(&self) -> SyntaxStablePtrId {
24143 self.0
24144 }
24145 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenFor {
24146 TokenFor::from_syntax_node(db, self.0.lookup(db))
24147 }
24148}
24149impl From<TokenForPtr> for SyntaxStablePtrId {
24150 fn from(ptr: TokenForPtr) -> Self {
24151 ptr.untyped()
24152 }
24153}
24154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24155pub struct TokenForGreen(pub GreenId);
24156impl TokenForGreen {
24157 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24158 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24159 }
24160}
24161impl TypedSyntaxNode for TokenFor {
24162 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenFor);
24163 type StablePtr = TokenForPtr;
24164 type Green = TokenForGreen;
24165 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24166 TokenForGreen(
24167 Arc::new(GreenNode {
24168 kind: SyntaxKind::TokenMissing,
24169 details: GreenNodeDetails::Token("".into()),
24170 })
24171 .intern(db),
24172 )
24173 }
24174 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24175 match node.0.green.lookup_intern(db).details {
24176 GreenNodeDetails::Token(_) => Self { node },
24177 GreenNodeDetails::Node { .. } => {
24178 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenFor)
24179 }
24180 }
24181 }
24182 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24183 match node.0.green.lookup_intern(db).details {
24184 GreenNodeDetails::Token(_) => Some(Self { node }),
24185 GreenNodeDetails::Node { .. } => None,
24186 }
24187 }
24188 fn as_syntax_node(&self) -> SyntaxNode {
24189 self.node.clone()
24190 }
24191 fn stable_ptr(&self) -> Self::StablePtr {
24192 TokenForPtr(self.node.0.stable_ptr)
24193 }
24194}
24195impl From<&TokenFor> for SyntaxStablePtrId {
24196 fn from(node: &TokenFor) -> Self {
24197 node.stable_ptr().untyped()
24198 }
24199}
24200#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24201pub struct TerminalFor {
24202 node: SyntaxNode,
24203 children: Arc<[SyntaxNode]>,
24204}
24205impl Terminal for TerminalFor {
24206 const KIND: SyntaxKind = SyntaxKind::TerminalFor;
24207 type TokenType = TokenFor;
24208 fn new_green(
24209 db: &dyn SyntaxGroup,
24210 leading_trivia: TriviaGreen,
24211 token: <<TerminalFor as Terminal>::TokenType as TypedSyntaxNode>::Green,
24212 trailing_trivia: TriviaGreen,
24213 ) -> Self::Green {
24214 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24215 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24216 TerminalForGreen(
24217 Arc::new(GreenNode {
24218 kind: SyntaxKind::TerminalFor,
24219 details: GreenNodeDetails::Node { children, width },
24220 })
24221 .intern(db),
24222 )
24223 }
24224 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24225 self.token(db).text(db)
24226 }
24227}
24228impl TerminalFor {
24229 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24230 Trivia::from_syntax_node(db, self.children[0].clone())
24231 }
24232 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenFor {
24233 TokenFor::from_syntax_node(db, self.children[1].clone())
24234 }
24235 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24236 Trivia::from_syntax_node(db, self.children[2].clone())
24237 }
24238}
24239#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24240pub struct TerminalForPtr(pub SyntaxStablePtrId);
24241impl TerminalForPtr {}
24242impl TypedStablePtr for TerminalForPtr {
24243 type SyntaxNode = TerminalFor;
24244 fn untyped(&self) -> SyntaxStablePtrId {
24245 self.0
24246 }
24247 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalFor {
24248 TerminalFor::from_syntax_node(db, self.0.lookup(db))
24249 }
24250}
24251impl From<TerminalForPtr> for SyntaxStablePtrId {
24252 fn from(ptr: TerminalForPtr) -> Self {
24253 ptr.untyped()
24254 }
24255}
24256#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24257pub struct TerminalForGreen(pub GreenId);
24258impl TypedSyntaxNode for TerminalFor {
24259 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalFor);
24260 type StablePtr = TerminalForPtr;
24261 type Green = TerminalForGreen;
24262 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24263 TerminalForGreen(
24264 Arc::new(GreenNode {
24265 kind: SyntaxKind::TerminalFor,
24266 details: GreenNodeDetails::Node {
24267 children: vec![
24268 Trivia::missing(db).0,
24269 TokenFor::missing(db).0,
24270 Trivia::missing(db).0,
24271 ],
24272 width: TextWidth::default(),
24273 },
24274 })
24275 .intern(db),
24276 )
24277 }
24278 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24279 let kind = node.kind(db);
24280 assert_eq!(
24281 kind,
24282 SyntaxKind::TerminalFor,
24283 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24284 kind,
24285 SyntaxKind::TerminalFor
24286 );
24287 let children = db.get_children(node.clone());
24288 Self { node, children }
24289 }
24290 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24291 let kind = node.kind(db);
24292 if kind == SyntaxKind::TerminalFor { Some(Self::from_syntax_node(db, node)) } else { None }
24293 }
24294 fn as_syntax_node(&self) -> SyntaxNode {
24295 self.node.clone()
24296 }
24297 fn stable_ptr(&self) -> Self::StablePtr {
24298 TerminalForPtr(self.node.0.stable_ptr)
24299 }
24300}
24301impl From<&TerminalFor> for SyntaxStablePtrId {
24302 fn from(node: &TerminalFor) -> Self {
24303 node.stable_ptr().untyped()
24304 }
24305}
24306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24307pub struct TokenLoop {
24308 node: SyntaxNode,
24309}
24310impl Token for TokenLoop {
24311 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24312 TokenLoopGreen(
24313 Arc::new(GreenNode {
24314 kind: SyntaxKind::TokenLoop,
24315 details: GreenNodeDetails::Token(text),
24316 })
24317 .intern(db),
24318 )
24319 }
24320 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24321 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24322 .clone()
24323 }
24324}
24325#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24326pub struct TokenLoopPtr(pub SyntaxStablePtrId);
24327impl TypedStablePtr for TokenLoopPtr {
24328 type SyntaxNode = TokenLoop;
24329 fn untyped(&self) -> SyntaxStablePtrId {
24330 self.0
24331 }
24332 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLoop {
24333 TokenLoop::from_syntax_node(db, self.0.lookup(db))
24334 }
24335}
24336impl From<TokenLoopPtr> for SyntaxStablePtrId {
24337 fn from(ptr: TokenLoopPtr) -> Self {
24338 ptr.untyped()
24339 }
24340}
24341#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24342pub struct TokenLoopGreen(pub GreenId);
24343impl TokenLoopGreen {
24344 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24345 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24346 }
24347}
24348impl TypedSyntaxNode for TokenLoop {
24349 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLoop);
24350 type StablePtr = TokenLoopPtr;
24351 type Green = TokenLoopGreen;
24352 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24353 TokenLoopGreen(
24354 Arc::new(GreenNode {
24355 kind: SyntaxKind::TokenMissing,
24356 details: GreenNodeDetails::Token("".into()),
24357 })
24358 .intern(db),
24359 )
24360 }
24361 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24362 match node.0.green.lookup_intern(db).details {
24363 GreenNodeDetails::Token(_) => Self { node },
24364 GreenNodeDetails::Node { .. } => {
24365 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLoop)
24366 }
24367 }
24368 }
24369 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24370 match node.0.green.lookup_intern(db).details {
24371 GreenNodeDetails::Token(_) => Some(Self { node }),
24372 GreenNodeDetails::Node { .. } => None,
24373 }
24374 }
24375 fn as_syntax_node(&self) -> SyntaxNode {
24376 self.node.clone()
24377 }
24378 fn stable_ptr(&self) -> Self::StablePtr {
24379 TokenLoopPtr(self.node.0.stable_ptr)
24380 }
24381}
24382impl From<&TokenLoop> for SyntaxStablePtrId {
24383 fn from(node: &TokenLoop) -> Self {
24384 node.stable_ptr().untyped()
24385 }
24386}
24387#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24388pub struct TerminalLoop {
24389 node: SyntaxNode,
24390 children: Arc<[SyntaxNode]>,
24391}
24392impl Terminal for TerminalLoop {
24393 const KIND: SyntaxKind = SyntaxKind::TerminalLoop;
24394 type TokenType = TokenLoop;
24395 fn new_green(
24396 db: &dyn SyntaxGroup,
24397 leading_trivia: TriviaGreen,
24398 token: <<TerminalLoop as Terminal>::TokenType as TypedSyntaxNode>::Green,
24399 trailing_trivia: TriviaGreen,
24400 ) -> Self::Green {
24401 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24402 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24403 TerminalLoopGreen(
24404 Arc::new(GreenNode {
24405 kind: SyntaxKind::TerminalLoop,
24406 details: GreenNodeDetails::Node { children, width },
24407 })
24408 .intern(db),
24409 )
24410 }
24411 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24412 self.token(db).text(db)
24413 }
24414}
24415impl TerminalLoop {
24416 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24417 Trivia::from_syntax_node(db, self.children[0].clone())
24418 }
24419 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLoop {
24420 TokenLoop::from_syntax_node(db, self.children[1].clone())
24421 }
24422 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24423 Trivia::from_syntax_node(db, self.children[2].clone())
24424 }
24425}
24426#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24427pub struct TerminalLoopPtr(pub SyntaxStablePtrId);
24428impl TerminalLoopPtr {}
24429impl TypedStablePtr for TerminalLoopPtr {
24430 type SyntaxNode = TerminalLoop;
24431 fn untyped(&self) -> SyntaxStablePtrId {
24432 self.0
24433 }
24434 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLoop {
24435 TerminalLoop::from_syntax_node(db, self.0.lookup(db))
24436 }
24437}
24438impl From<TerminalLoopPtr> for SyntaxStablePtrId {
24439 fn from(ptr: TerminalLoopPtr) -> Self {
24440 ptr.untyped()
24441 }
24442}
24443#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24444pub struct TerminalLoopGreen(pub GreenId);
24445impl TypedSyntaxNode for TerminalLoop {
24446 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLoop);
24447 type StablePtr = TerminalLoopPtr;
24448 type Green = TerminalLoopGreen;
24449 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24450 TerminalLoopGreen(
24451 Arc::new(GreenNode {
24452 kind: SyntaxKind::TerminalLoop,
24453 details: GreenNodeDetails::Node {
24454 children: vec![
24455 Trivia::missing(db).0,
24456 TokenLoop::missing(db).0,
24457 Trivia::missing(db).0,
24458 ],
24459 width: TextWidth::default(),
24460 },
24461 })
24462 .intern(db),
24463 )
24464 }
24465 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24466 let kind = node.kind(db);
24467 assert_eq!(
24468 kind,
24469 SyntaxKind::TerminalLoop,
24470 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24471 kind,
24472 SyntaxKind::TerminalLoop
24473 );
24474 let children = db.get_children(node.clone());
24475 Self { node, children }
24476 }
24477 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24478 let kind = node.kind(db);
24479 if kind == SyntaxKind::TerminalLoop { Some(Self::from_syntax_node(db, node)) } else { None }
24480 }
24481 fn as_syntax_node(&self) -> SyntaxNode {
24482 self.node.clone()
24483 }
24484 fn stable_ptr(&self) -> Self::StablePtr {
24485 TerminalLoopPtr(self.node.0.stable_ptr)
24486 }
24487}
24488impl From<&TerminalLoop> for SyntaxStablePtrId {
24489 fn from(node: &TerminalLoop) -> Self {
24490 node.stable_ptr().untyped()
24491 }
24492}
24493#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24494pub struct TokenImpl {
24495 node: SyntaxNode,
24496}
24497impl Token for TokenImpl {
24498 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24499 TokenImplGreen(
24500 Arc::new(GreenNode {
24501 kind: SyntaxKind::TokenImpl,
24502 details: GreenNodeDetails::Token(text),
24503 })
24504 .intern(db),
24505 )
24506 }
24507 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24508 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24509 .clone()
24510 }
24511}
24512#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24513pub struct TokenImplPtr(pub SyntaxStablePtrId);
24514impl TypedStablePtr for TokenImplPtr {
24515 type SyntaxNode = TokenImpl;
24516 fn untyped(&self) -> SyntaxStablePtrId {
24517 self.0
24518 }
24519 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImpl {
24520 TokenImpl::from_syntax_node(db, self.0.lookup(db))
24521 }
24522}
24523impl From<TokenImplPtr> for SyntaxStablePtrId {
24524 fn from(ptr: TokenImplPtr) -> Self {
24525 ptr.untyped()
24526 }
24527}
24528#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24529pub struct TokenImplGreen(pub GreenId);
24530impl TokenImplGreen {
24531 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24532 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24533 }
24534}
24535impl TypedSyntaxNode for TokenImpl {
24536 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImpl);
24537 type StablePtr = TokenImplPtr;
24538 type Green = TokenImplGreen;
24539 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24540 TokenImplGreen(
24541 Arc::new(GreenNode {
24542 kind: SyntaxKind::TokenMissing,
24543 details: GreenNodeDetails::Token("".into()),
24544 })
24545 .intern(db),
24546 )
24547 }
24548 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24549 match node.0.green.lookup_intern(db).details {
24550 GreenNodeDetails::Token(_) => Self { node },
24551 GreenNodeDetails::Node { .. } => {
24552 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImpl)
24553 }
24554 }
24555 }
24556 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24557 match node.0.green.lookup_intern(db).details {
24558 GreenNodeDetails::Token(_) => Some(Self { node }),
24559 GreenNodeDetails::Node { .. } => None,
24560 }
24561 }
24562 fn as_syntax_node(&self) -> SyntaxNode {
24563 self.node.clone()
24564 }
24565 fn stable_ptr(&self) -> Self::StablePtr {
24566 TokenImplPtr(self.node.0.stable_ptr)
24567 }
24568}
24569impl From<&TokenImpl> for SyntaxStablePtrId {
24570 fn from(node: &TokenImpl) -> Self {
24571 node.stable_ptr().untyped()
24572 }
24573}
24574#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24575pub struct TerminalImpl {
24576 node: SyntaxNode,
24577 children: Arc<[SyntaxNode]>,
24578}
24579impl Terminal for TerminalImpl {
24580 const KIND: SyntaxKind = SyntaxKind::TerminalImpl;
24581 type TokenType = TokenImpl;
24582 fn new_green(
24583 db: &dyn SyntaxGroup,
24584 leading_trivia: TriviaGreen,
24585 token: <<TerminalImpl as Terminal>::TokenType as TypedSyntaxNode>::Green,
24586 trailing_trivia: TriviaGreen,
24587 ) -> Self::Green {
24588 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24589 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24590 TerminalImplGreen(
24591 Arc::new(GreenNode {
24592 kind: SyntaxKind::TerminalImpl,
24593 details: GreenNodeDetails::Node { children, width },
24594 })
24595 .intern(db),
24596 )
24597 }
24598 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24599 self.token(db).text(db)
24600 }
24601}
24602impl TerminalImpl {
24603 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24604 Trivia::from_syntax_node(db, self.children[0].clone())
24605 }
24606 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImpl {
24607 TokenImpl::from_syntax_node(db, self.children[1].clone())
24608 }
24609 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24610 Trivia::from_syntax_node(db, self.children[2].clone())
24611 }
24612}
24613#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24614pub struct TerminalImplPtr(pub SyntaxStablePtrId);
24615impl TerminalImplPtr {}
24616impl TypedStablePtr for TerminalImplPtr {
24617 type SyntaxNode = TerminalImpl;
24618 fn untyped(&self) -> SyntaxStablePtrId {
24619 self.0
24620 }
24621 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImpl {
24622 TerminalImpl::from_syntax_node(db, self.0.lookup(db))
24623 }
24624}
24625impl From<TerminalImplPtr> for SyntaxStablePtrId {
24626 fn from(ptr: TerminalImplPtr) -> Self {
24627 ptr.untyped()
24628 }
24629}
24630#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24631pub struct TerminalImplGreen(pub GreenId);
24632impl TypedSyntaxNode for TerminalImpl {
24633 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImpl);
24634 type StablePtr = TerminalImplPtr;
24635 type Green = TerminalImplGreen;
24636 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24637 TerminalImplGreen(
24638 Arc::new(GreenNode {
24639 kind: SyntaxKind::TerminalImpl,
24640 details: GreenNodeDetails::Node {
24641 children: vec![
24642 Trivia::missing(db).0,
24643 TokenImpl::missing(db).0,
24644 Trivia::missing(db).0,
24645 ],
24646 width: TextWidth::default(),
24647 },
24648 })
24649 .intern(db),
24650 )
24651 }
24652 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24653 let kind = node.kind(db);
24654 assert_eq!(
24655 kind,
24656 SyntaxKind::TerminalImpl,
24657 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24658 kind,
24659 SyntaxKind::TerminalImpl
24660 );
24661 let children = db.get_children(node.clone());
24662 Self { node, children }
24663 }
24664 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24665 let kind = node.kind(db);
24666 if kind == SyntaxKind::TerminalImpl { Some(Self::from_syntax_node(db, node)) } else { None }
24667 }
24668 fn as_syntax_node(&self) -> SyntaxNode {
24669 self.node.clone()
24670 }
24671 fn stable_ptr(&self) -> Self::StablePtr {
24672 TerminalImplPtr(self.node.0.stable_ptr)
24673 }
24674}
24675impl From<&TerminalImpl> for SyntaxStablePtrId {
24676 fn from(node: &TerminalImpl) -> Self {
24677 node.stable_ptr().untyped()
24678 }
24679}
24680#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24681pub struct TokenImplicits {
24682 node: SyntaxNode,
24683}
24684impl Token for TokenImplicits {
24685 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24686 TokenImplicitsGreen(
24687 Arc::new(GreenNode {
24688 kind: SyntaxKind::TokenImplicits,
24689 details: GreenNodeDetails::Token(text),
24690 })
24691 .intern(db),
24692 )
24693 }
24694 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24695 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24696 .clone()
24697 }
24698}
24699#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24700pub struct TokenImplicitsPtr(pub SyntaxStablePtrId);
24701impl TypedStablePtr for TokenImplicitsPtr {
24702 type SyntaxNode = TokenImplicits;
24703 fn untyped(&self) -> SyntaxStablePtrId {
24704 self.0
24705 }
24706 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
24707 TokenImplicits::from_syntax_node(db, self.0.lookup(db))
24708 }
24709}
24710impl From<TokenImplicitsPtr> for SyntaxStablePtrId {
24711 fn from(ptr: TokenImplicitsPtr) -> Self {
24712 ptr.untyped()
24713 }
24714}
24715#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24716pub struct TokenImplicitsGreen(pub GreenId);
24717impl TokenImplicitsGreen {
24718 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24719 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24720 }
24721}
24722impl TypedSyntaxNode for TokenImplicits {
24723 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenImplicits);
24724 type StablePtr = TokenImplicitsPtr;
24725 type Green = TokenImplicitsGreen;
24726 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24727 TokenImplicitsGreen(
24728 Arc::new(GreenNode {
24729 kind: SyntaxKind::TokenMissing,
24730 details: GreenNodeDetails::Token("".into()),
24731 })
24732 .intern(db),
24733 )
24734 }
24735 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24736 match node.0.green.lookup_intern(db).details {
24737 GreenNodeDetails::Token(_) => Self { node },
24738 GreenNodeDetails::Node { .. } => {
24739 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenImplicits)
24740 }
24741 }
24742 }
24743 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24744 match node.0.green.lookup_intern(db).details {
24745 GreenNodeDetails::Token(_) => Some(Self { node }),
24746 GreenNodeDetails::Node { .. } => None,
24747 }
24748 }
24749 fn as_syntax_node(&self) -> SyntaxNode {
24750 self.node.clone()
24751 }
24752 fn stable_ptr(&self) -> Self::StablePtr {
24753 TokenImplicitsPtr(self.node.0.stable_ptr)
24754 }
24755}
24756impl From<&TokenImplicits> for SyntaxStablePtrId {
24757 fn from(node: &TokenImplicits) -> Self {
24758 node.stable_ptr().untyped()
24759 }
24760}
24761#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24762pub struct TerminalImplicits {
24763 node: SyntaxNode,
24764 children: Arc<[SyntaxNode]>,
24765}
24766impl Terminal for TerminalImplicits {
24767 const KIND: SyntaxKind = SyntaxKind::TerminalImplicits;
24768 type TokenType = TokenImplicits;
24769 fn new_green(
24770 db: &dyn SyntaxGroup,
24771 leading_trivia: TriviaGreen,
24772 token: <<TerminalImplicits as Terminal>::TokenType as TypedSyntaxNode>::Green,
24773 trailing_trivia: TriviaGreen,
24774 ) -> Self::Green {
24775 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24776 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24777 TerminalImplicitsGreen(
24778 Arc::new(GreenNode {
24779 kind: SyntaxKind::TerminalImplicits,
24780 details: GreenNodeDetails::Node { children, width },
24781 })
24782 .intern(db),
24783 )
24784 }
24785 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24786 self.token(db).text(db)
24787 }
24788}
24789impl TerminalImplicits {
24790 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24791 Trivia::from_syntax_node(db, self.children[0].clone())
24792 }
24793 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenImplicits {
24794 TokenImplicits::from_syntax_node(db, self.children[1].clone())
24795 }
24796 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24797 Trivia::from_syntax_node(db, self.children[2].clone())
24798 }
24799}
24800#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24801pub struct TerminalImplicitsPtr(pub SyntaxStablePtrId);
24802impl TerminalImplicitsPtr {}
24803impl TypedStablePtr for TerminalImplicitsPtr {
24804 type SyntaxNode = TerminalImplicits;
24805 fn untyped(&self) -> SyntaxStablePtrId {
24806 self.0
24807 }
24808 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalImplicits {
24809 TerminalImplicits::from_syntax_node(db, self.0.lookup(db))
24810 }
24811}
24812impl From<TerminalImplicitsPtr> for SyntaxStablePtrId {
24813 fn from(ptr: TerminalImplicitsPtr) -> Self {
24814 ptr.untyped()
24815 }
24816}
24817#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24818pub struct TerminalImplicitsGreen(pub GreenId);
24819impl TypedSyntaxNode for TerminalImplicits {
24820 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalImplicits);
24821 type StablePtr = TerminalImplicitsPtr;
24822 type Green = TerminalImplicitsGreen;
24823 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24824 TerminalImplicitsGreen(
24825 Arc::new(GreenNode {
24826 kind: SyntaxKind::TerminalImplicits,
24827 details: GreenNodeDetails::Node {
24828 children: vec![
24829 Trivia::missing(db).0,
24830 TokenImplicits::missing(db).0,
24831 Trivia::missing(db).0,
24832 ],
24833 width: TextWidth::default(),
24834 },
24835 })
24836 .intern(db),
24837 )
24838 }
24839 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24840 let kind = node.kind(db);
24841 assert_eq!(
24842 kind,
24843 SyntaxKind::TerminalImplicits,
24844 "Unexpected SyntaxKind {:?}. Expected {:?}.",
24845 kind,
24846 SyntaxKind::TerminalImplicits
24847 );
24848 let children = db.get_children(node.clone());
24849 Self { node, children }
24850 }
24851 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24852 let kind = node.kind(db);
24853 if kind == SyntaxKind::TerminalImplicits {
24854 Some(Self::from_syntax_node(db, node))
24855 } else {
24856 None
24857 }
24858 }
24859 fn as_syntax_node(&self) -> SyntaxNode {
24860 self.node.clone()
24861 }
24862 fn stable_ptr(&self) -> Self::StablePtr {
24863 TerminalImplicitsPtr(self.node.0.stable_ptr)
24864 }
24865}
24866impl From<&TerminalImplicits> for SyntaxStablePtrId {
24867 fn from(node: &TerminalImplicits) -> Self {
24868 node.stable_ptr().untyped()
24869 }
24870}
24871#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24872pub struct TokenLet {
24873 node: SyntaxNode,
24874}
24875impl Token for TokenLet {
24876 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
24877 TokenLetGreen(
24878 Arc::new(GreenNode {
24879 kind: SyntaxKind::TokenLet,
24880 details: GreenNodeDetails::Token(text),
24881 })
24882 .intern(db),
24883 )
24884 }
24885 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24886 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
24887 .clone()
24888 }
24889}
24890#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24891pub struct TokenLetPtr(pub SyntaxStablePtrId);
24892impl TypedStablePtr for TokenLetPtr {
24893 type SyntaxNode = TokenLet;
24894 fn untyped(&self) -> SyntaxStablePtrId {
24895 self.0
24896 }
24897 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLet {
24898 TokenLet::from_syntax_node(db, self.0.lookup(db))
24899 }
24900}
24901impl From<TokenLetPtr> for SyntaxStablePtrId {
24902 fn from(ptr: TokenLetPtr) -> Self {
24903 ptr.untyped()
24904 }
24905}
24906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24907pub struct TokenLetGreen(pub GreenId);
24908impl TokenLetGreen {
24909 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24910 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
24911 }
24912}
24913impl TypedSyntaxNode for TokenLet {
24914 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLet);
24915 type StablePtr = TokenLetPtr;
24916 type Green = TokenLetGreen;
24917 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
24918 TokenLetGreen(
24919 Arc::new(GreenNode {
24920 kind: SyntaxKind::TokenMissing,
24921 details: GreenNodeDetails::Token("".into()),
24922 })
24923 .intern(db),
24924 )
24925 }
24926 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
24927 match node.0.green.lookup_intern(db).details {
24928 GreenNodeDetails::Token(_) => Self { node },
24929 GreenNodeDetails::Node { .. } => {
24930 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLet)
24931 }
24932 }
24933 }
24934 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
24935 match node.0.green.lookup_intern(db).details {
24936 GreenNodeDetails::Token(_) => Some(Self { node }),
24937 GreenNodeDetails::Node { .. } => None,
24938 }
24939 }
24940 fn as_syntax_node(&self) -> SyntaxNode {
24941 self.node.clone()
24942 }
24943 fn stable_ptr(&self) -> Self::StablePtr {
24944 TokenLetPtr(self.node.0.stable_ptr)
24945 }
24946}
24947impl From<&TokenLet> for SyntaxStablePtrId {
24948 fn from(node: &TokenLet) -> Self {
24949 node.stable_ptr().untyped()
24950 }
24951}
24952#[derive(Clone, Debug, Eq, Hash, PartialEq)]
24953pub struct TerminalLet {
24954 node: SyntaxNode,
24955 children: Arc<[SyntaxNode]>,
24956}
24957impl Terminal for TerminalLet {
24958 const KIND: SyntaxKind = SyntaxKind::TerminalLet;
24959 type TokenType = TokenLet;
24960 fn new_green(
24961 db: &dyn SyntaxGroup,
24962 leading_trivia: TriviaGreen,
24963 token: <<TerminalLet as Terminal>::TokenType as TypedSyntaxNode>::Green,
24964 trailing_trivia: TriviaGreen,
24965 ) -> Self::Green {
24966 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
24967 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
24968 TerminalLetGreen(
24969 Arc::new(GreenNode {
24970 kind: SyntaxKind::TerminalLet,
24971 details: GreenNodeDetails::Node { children, width },
24972 })
24973 .intern(db),
24974 )
24975 }
24976 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
24977 self.token(db).text(db)
24978 }
24979}
24980impl TerminalLet {
24981 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24982 Trivia::from_syntax_node(db, self.children[0].clone())
24983 }
24984 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLet {
24985 TokenLet::from_syntax_node(db, self.children[1].clone())
24986 }
24987 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
24988 Trivia::from_syntax_node(db, self.children[2].clone())
24989 }
24990}
24991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
24992pub struct TerminalLetPtr(pub SyntaxStablePtrId);
24993impl TerminalLetPtr {}
24994impl TypedStablePtr for TerminalLetPtr {
24995 type SyntaxNode = TerminalLet;
24996 fn untyped(&self) -> SyntaxStablePtrId {
24997 self.0
24998 }
24999 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLet {
25000 TerminalLet::from_syntax_node(db, self.0.lookup(db))
25001 }
25002}
25003impl From<TerminalLetPtr> for SyntaxStablePtrId {
25004 fn from(ptr: TerminalLetPtr) -> Self {
25005 ptr.untyped()
25006 }
25007}
25008#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25009pub struct TerminalLetGreen(pub GreenId);
25010impl TypedSyntaxNode for TerminalLet {
25011 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLet);
25012 type StablePtr = TerminalLetPtr;
25013 type Green = TerminalLetGreen;
25014 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25015 TerminalLetGreen(
25016 Arc::new(GreenNode {
25017 kind: SyntaxKind::TerminalLet,
25018 details: GreenNodeDetails::Node {
25019 children: vec![
25020 Trivia::missing(db).0,
25021 TokenLet::missing(db).0,
25022 Trivia::missing(db).0,
25023 ],
25024 width: TextWidth::default(),
25025 },
25026 })
25027 .intern(db),
25028 )
25029 }
25030 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25031 let kind = node.kind(db);
25032 assert_eq!(
25033 kind,
25034 SyntaxKind::TerminalLet,
25035 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25036 kind,
25037 SyntaxKind::TerminalLet
25038 );
25039 let children = db.get_children(node.clone());
25040 Self { node, children }
25041 }
25042 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25043 let kind = node.kind(db);
25044 if kind == SyntaxKind::TerminalLet { Some(Self::from_syntax_node(db, node)) } else { None }
25045 }
25046 fn as_syntax_node(&self) -> SyntaxNode {
25047 self.node.clone()
25048 }
25049 fn stable_ptr(&self) -> Self::StablePtr {
25050 TerminalLetPtr(self.node.0.stable_ptr)
25051 }
25052}
25053impl From<&TerminalLet> for SyntaxStablePtrId {
25054 fn from(node: &TerminalLet) -> Self {
25055 node.stable_ptr().untyped()
25056 }
25057}
25058#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25059pub struct TokenMatch {
25060 node: SyntaxNode,
25061}
25062impl Token for TokenMatch {
25063 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25064 TokenMatchGreen(
25065 Arc::new(GreenNode {
25066 kind: SyntaxKind::TokenMatch,
25067 details: GreenNodeDetails::Token(text),
25068 })
25069 .intern(db),
25070 )
25071 }
25072 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25073 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25074 .clone()
25075 }
25076}
25077#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25078pub struct TokenMatchPtr(pub SyntaxStablePtrId);
25079impl TypedStablePtr for TokenMatchPtr {
25080 type SyntaxNode = TokenMatch;
25081 fn untyped(&self) -> SyntaxStablePtrId {
25082 self.0
25083 }
25084 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatch {
25085 TokenMatch::from_syntax_node(db, self.0.lookup(db))
25086 }
25087}
25088impl From<TokenMatchPtr> for SyntaxStablePtrId {
25089 fn from(ptr: TokenMatchPtr) -> Self {
25090 ptr.untyped()
25091 }
25092}
25093#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25094pub struct TokenMatchGreen(pub GreenId);
25095impl TokenMatchGreen {
25096 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25097 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25098 }
25099}
25100impl TypedSyntaxNode for TokenMatch {
25101 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatch);
25102 type StablePtr = TokenMatchPtr;
25103 type Green = TokenMatchGreen;
25104 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25105 TokenMatchGreen(
25106 Arc::new(GreenNode {
25107 kind: SyntaxKind::TokenMissing,
25108 details: GreenNodeDetails::Token("".into()),
25109 })
25110 .intern(db),
25111 )
25112 }
25113 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25114 match node.0.green.lookup_intern(db).details {
25115 GreenNodeDetails::Token(_) => Self { node },
25116 GreenNodeDetails::Node { .. } => {
25117 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatch)
25118 }
25119 }
25120 }
25121 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25122 match node.0.green.lookup_intern(db).details {
25123 GreenNodeDetails::Token(_) => Some(Self { node }),
25124 GreenNodeDetails::Node { .. } => None,
25125 }
25126 }
25127 fn as_syntax_node(&self) -> SyntaxNode {
25128 self.node.clone()
25129 }
25130 fn stable_ptr(&self) -> Self::StablePtr {
25131 TokenMatchPtr(self.node.0.stable_ptr)
25132 }
25133}
25134impl From<&TokenMatch> for SyntaxStablePtrId {
25135 fn from(node: &TokenMatch) -> Self {
25136 node.stable_ptr().untyped()
25137 }
25138}
25139#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25140pub struct TerminalMatch {
25141 node: SyntaxNode,
25142 children: Arc<[SyntaxNode]>,
25143}
25144impl Terminal for TerminalMatch {
25145 const KIND: SyntaxKind = SyntaxKind::TerminalMatch;
25146 type TokenType = TokenMatch;
25147 fn new_green(
25148 db: &dyn SyntaxGroup,
25149 leading_trivia: TriviaGreen,
25150 token: <<TerminalMatch as Terminal>::TokenType as TypedSyntaxNode>::Green,
25151 trailing_trivia: TriviaGreen,
25152 ) -> Self::Green {
25153 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25154 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25155 TerminalMatchGreen(
25156 Arc::new(GreenNode {
25157 kind: SyntaxKind::TerminalMatch,
25158 details: GreenNodeDetails::Node { children, width },
25159 })
25160 .intern(db),
25161 )
25162 }
25163 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25164 self.token(db).text(db)
25165 }
25166}
25167impl TerminalMatch {
25168 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25169 Trivia::from_syntax_node(db, self.children[0].clone())
25170 }
25171 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatch {
25172 TokenMatch::from_syntax_node(db, self.children[1].clone())
25173 }
25174 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25175 Trivia::from_syntax_node(db, self.children[2].clone())
25176 }
25177}
25178#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25179pub struct TerminalMatchPtr(pub SyntaxStablePtrId);
25180impl TerminalMatchPtr {}
25181impl TypedStablePtr for TerminalMatchPtr {
25182 type SyntaxNode = TerminalMatch;
25183 fn untyped(&self) -> SyntaxStablePtrId {
25184 self.0
25185 }
25186 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatch {
25187 TerminalMatch::from_syntax_node(db, self.0.lookup(db))
25188 }
25189}
25190impl From<TerminalMatchPtr> for SyntaxStablePtrId {
25191 fn from(ptr: TerminalMatchPtr) -> Self {
25192 ptr.untyped()
25193 }
25194}
25195#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25196pub struct TerminalMatchGreen(pub GreenId);
25197impl TypedSyntaxNode for TerminalMatch {
25198 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatch);
25199 type StablePtr = TerminalMatchPtr;
25200 type Green = TerminalMatchGreen;
25201 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25202 TerminalMatchGreen(
25203 Arc::new(GreenNode {
25204 kind: SyntaxKind::TerminalMatch,
25205 details: GreenNodeDetails::Node {
25206 children: vec![
25207 Trivia::missing(db).0,
25208 TokenMatch::missing(db).0,
25209 Trivia::missing(db).0,
25210 ],
25211 width: TextWidth::default(),
25212 },
25213 })
25214 .intern(db),
25215 )
25216 }
25217 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25218 let kind = node.kind(db);
25219 assert_eq!(
25220 kind,
25221 SyntaxKind::TerminalMatch,
25222 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25223 kind,
25224 SyntaxKind::TerminalMatch
25225 );
25226 let children = db.get_children(node.clone());
25227 Self { node, children }
25228 }
25229 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25230 let kind = node.kind(db);
25231 if kind == SyntaxKind::TerminalMatch {
25232 Some(Self::from_syntax_node(db, node))
25233 } else {
25234 None
25235 }
25236 }
25237 fn as_syntax_node(&self) -> SyntaxNode {
25238 self.node.clone()
25239 }
25240 fn stable_ptr(&self) -> Self::StablePtr {
25241 TerminalMatchPtr(self.node.0.stable_ptr)
25242 }
25243}
25244impl From<&TerminalMatch> for SyntaxStablePtrId {
25245 fn from(node: &TerminalMatch) -> Self {
25246 node.stable_ptr().untyped()
25247 }
25248}
25249#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25250pub struct TokenModule {
25251 node: SyntaxNode,
25252}
25253impl Token for TokenModule {
25254 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25255 TokenModuleGreen(
25256 Arc::new(GreenNode {
25257 kind: SyntaxKind::TokenModule,
25258 details: GreenNodeDetails::Token(text),
25259 })
25260 .intern(db),
25261 )
25262 }
25263 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25264 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25265 .clone()
25266 }
25267}
25268#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25269pub struct TokenModulePtr(pub SyntaxStablePtrId);
25270impl TypedStablePtr for TokenModulePtr {
25271 type SyntaxNode = TokenModule;
25272 fn untyped(&self) -> SyntaxStablePtrId {
25273 self.0
25274 }
25275 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModule {
25276 TokenModule::from_syntax_node(db, self.0.lookup(db))
25277 }
25278}
25279impl From<TokenModulePtr> for SyntaxStablePtrId {
25280 fn from(ptr: TokenModulePtr) -> Self {
25281 ptr.untyped()
25282 }
25283}
25284#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25285pub struct TokenModuleGreen(pub GreenId);
25286impl TokenModuleGreen {
25287 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25288 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25289 }
25290}
25291impl TypedSyntaxNode for TokenModule {
25292 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModule);
25293 type StablePtr = TokenModulePtr;
25294 type Green = TokenModuleGreen;
25295 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25296 TokenModuleGreen(
25297 Arc::new(GreenNode {
25298 kind: SyntaxKind::TokenMissing,
25299 details: GreenNodeDetails::Token("".into()),
25300 })
25301 .intern(db),
25302 )
25303 }
25304 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25305 match node.0.green.lookup_intern(db).details {
25306 GreenNodeDetails::Token(_) => Self { node },
25307 GreenNodeDetails::Node { .. } => {
25308 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModule)
25309 }
25310 }
25311 }
25312 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25313 match node.0.green.lookup_intern(db).details {
25314 GreenNodeDetails::Token(_) => Some(Self { node }),
25315 GreenNodeDetails::Node { .. } => None,
25316 }
25317 }
25318 fn as_syntax_node(&self) -> SyntaxNode {
25319 self.node.clone()
25320 }
25321 fn stable_ptr(&self) -> Self::StablePtr {
25322 TokenModulePtr(self.node.0.stable_ptr)
25323 }
25324}
25325impl From<&TokenModule> for SyntaxStablePtrId {
25326 fn from(node: &TokenModule) -> Self {
25327 node.stable_ptr().untyped()
25328 }
25329}
25330#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25331pub struct TerminalModule {
25332 node: SyntaxNode,
25333 children: Arc<[SyntaxNode]>,
25334}
25335impl Terminal for TerminalModule {
25336 const KIND: SyntaxKind = SyntaxKind::TerminalModule;
25337 type TokenType = TokenModule;
25338 fn new_green(
25339 db: &dyn SyntaxGroup,
25340 leading_trivia: TriviaGreen,
25341 token: <<TerminalModule as Terminal>::TokenType as TypedSyntaxNode>::Green,
25342 trailing_trivia: TriviaGreen,
25343 ) -> Self::Green {
25344 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25345 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25346 TerminalModuleGreen(
25347 Arc::new(GreenNode {
25348 kind: SyntaxKind::TerminalModule,
25349 details: GreenNodeDetails::Node { children, width },
25350 })
25351 .intern(db),
25352 )
25353 }
25354 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25355 self.token(db).text(db)
25356 }
25357}
25358impl TerminalModule {
25359 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25360 Trivia::from_syntax_node(db, self.children[0].clone())
25361 }
25362 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModule {
25363 TokenModule::from_syntax_node(db, self.children[1].clone())
25364 }
25365 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25366 Trivia::from_syntax_node(db, self.children[2].clone())
25367 }
25368}
25369#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25370pub struct TerminalModulePtr(pub SyntaxStablePtrId);
25371impl TerminalModulePtr {}
25372impl TypedStablePtr for TerminalModulePtr {
25373 type SyntaxNode = TerminalModule;
25374 fn untyped(&self) -> SyntaxStablePtrId {
25375 self.0
25376 }
25377 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModule {
25378 TerminalModule::from_syntax_node(db, self.0.lookup(db))
25379 }
25380}
25381impl From<TerminalModulePtr> for SyntaxStablePtrId {
25382 fn from(ptr: TerminalModulePtr) -> Self {
25383 ptr.untyped()
25384 }
25385}
25386#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25387pub struct TerminalModuleGreen(pub GreenId);
25388impl TypedSyntaxNode for TerminalModule {
25389 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModule);
25390 type StablePtr = TerminalModulePtr;
25391 type Green = TerminalModuleGreen;
25392 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25393 TerminalModuleGreen(
25394 Arc::new(GreenNode {
25395 kind: SyntaxKind::TerminalModule,
25396 details: GreenNodeDetails::Node {
25397 children: vec![
25398 Trivia::missing(db).0,
25399 TokenModule::missing(db).0,
25400 Trivia::missing(db).0,
25401 ],
25402 width: TextWidth::default(),
25403 },
25404 })
25405 .intern(db),
25406 )
25407 }
25408 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25409 let kind = node.kind(db);
25410 assert_eq!(
25411 kind,
25412 SyntaxKind::TerminalModule,
25413 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25414 kind,
25415 SyntaxKind::TerminalModule
25416 );
25417 let children = db.get_children(node.clone());
25418 Self { node, children }
25419 }
25420 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25421 let kind = node.kind(db);
25422 if kind == SyntaxKind::TerminalModule {
25423 Some(Self::from_syntax_node(db, node))
25424 } else {
25425 None
25426 }
25427 }
25428 fn as_syntax_node(&self) -> SyntaxNode {
25429 self.node.clone()
25430 }
25431 fn stable_ptr(&self) -> Self::StablePtr {
25432 TerminalModulePtr(self.node.0.stable_ptr)
25433 }
25434}
25435impl From<&TerminalModule> for SyntaxStablePtrId {
25436 fn from(node: &TerminalModule) -> Self {
25437 node.stable_ptr().untyped()
25438 }
25439}
25440#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25441pub struct TokenMut {
25442 node: SyntaxNode,
25443}
25444impl Token for TokenMut {
25445 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25446 TokenMutGreen(
25447 Arc::new(GreenNode {
25448 kind: SyntaxKind::TokenMut,
25449 details: GreenNodeDetails::Token(text),
25450 })
25451 .intern(db),
25452 )
25453 }
25454 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25455 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25456 .clone()
25457 }
25458}
25459#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25460pub struct TokenMutPtr(pub SyntaxStablePtrId);
25461impl TypedStablePtr for TokenMutPtr {
25462 type SyntaxNode = TokenMut;
25463 fn untyped(&self) -> SyntaxStablePtrId {
25464 self.0
25465 }
25466 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMut {
25467 TokenMut::from_syntax_node(db, self.0.lookup(db))
25468 }
25469}
25470impl From<TokenMutPtr> for SyntaxStablePtrId {
25471 fn from(ptr: TokenMutPtr) -> Self {
25472 ptr.untyped()
25473 }
25474}
25475#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25476pub struct TokenMutGreen(pub GreenId);
25477impl TokenMutGreen {
25478 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25479 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25480 }
25481}
25482impl TypedSyntaxNode for TokenMut {
25483 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMut);
25484 type StablePtr = TokenMutPtr;
25485 type Green = TokenMutGreen;
25486 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25487 TokenMutGreen(
25488 Arc::new(GreenNode {
25489 kind: SyntaxKind::TokenMissing,
25490 details: GreenNodeDetails::Token("".into()),
25491 })
25492 .intern(db),
25493 )
25494 }
25495 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25496 match node.0.green.lookup_intern(db).details {
25497 GreenNodeDetails::Token(_) => Self { node },
25498 GreenNodeDetails::Node { .. } => {
25499 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMut)
25500 }
25501 }
25502 }
25503 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25504 match node.0.green.lookup_intern(db).details {
25505 GreenNodeDetails::Token(_) => Some(Self { node }),
25506 GreenNodeDetails::Node { .. } => None,
25507 }
25508 }
25509 fn as_syntax_node(&self) -> SyntaxNode {
25510 self.node.clone()
25511 }
25512 fn stable_ptr(&self) -> Self::StablePtr {
25513 TokenMutPtr(self.node.0.stable_ptr)
25514 }
25515}
25516impl From<&TokenMut> for SyntaxStablePtrId {
25517 fn from(node: &TokenMut) -> Self {
25518 node.stable_ptr().untyped()
25519 }
25520}
25521#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25522pub struct TerminalMut {
25523 node: SyntaxNode,
25524 children: Arc<[SyntaxNode]>,
25525}
25526impl Terminal for TerminalMut {
25527 const KIND: SyntaxKind = SyntaxKind::TerminalMut;
25528 type TokenType = TokenMut;
25529 fn new_green(
25530 db: &dyn SyntaxGroup,
25531 leading_trivia: TriviaGreen,
25532 token: <<TerminalMut as Terminal>::TokenType as TypedSyntaxNode>::Green,
25533 trailing_trivia: TriviaGreen,
25534 ) -> Self::Green {
25535 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25536 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25537 TerminalMutGreen(
25538 Arc::new(GreenNode {
25539 kind: SyntaxKind::TerminalMut,
25540 details: GreenNodeDetails::Node { children, width },
25541 })
25542 .intern(db),
25543 )
25544 }
25545 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25546 self.token(db).text(db)
25547 }
25548}
25549impl TerminalMut {
25550 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25551 Trivia::from_syntax_node(db, self.children[0].clone())
25552 }
25553 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMut {
25554 TokenMut::from_syntax_node(db, self.children[1].clone())
25555 }
25556 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25557 Trivia::from_syntax_node(db, self.children[2].clone())
25558 }
25559}
25560#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25561pub struct TerminalMutPtr(pub SyntaxStablePtrId);
25562impl TerminalMutPtr {}
25563impl TypedStablePtr for TerminalMutPtr {
25564 type SyntaxNode = TerminalMut;
25565 fn untyped(&self) -> SyntaxStablePtrId {
25566 self.0
25567 }
25568 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMut {
25569 TerminalMut::from_syntax_node(db, self.0.lookup(db))
25570 }
25571}
25572impl From<TerminalMutPtr> for SyntaxStablePtrId {
25573 fn from(ptr: TerminalMutPtr) -> Self {
25574 ptr.untyped()
25575 }
25576}
25577#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25578pub struct TerminalMutGreen(pub GreenId);
25579impl TypedSyntaxNode for TerminalMut {
25580 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMut);
25581 type StablePtr = TerminalMutPtr;
25582 type Green = TerminalMutGreen;
25583 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25584 TerminalMutGreen(
25585 Arc::new(GreenNode {
25586 kind: SyntaxKind::TerminalMut,
25587 details: GreenNodeDetails::Node {
25588 children: vec![
25589 Trivia::missing(db).0,
25590 TokenMut::missing(db).0,
25591 Trivia::missing(db).0,
25592 ],
25593 width: TextWidth::default(),
25594 },
25595 })
25596 .intern(db),
25597 )
25598 }
25599 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25600 let kind = node.kind(db);
25601 assert_eq!(
25602 kind,
25603 SyntaxKind::TerminalMut,
25604 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25605 kind,
25606 SyntaxKind::TerminalMut
25607 );
25608 let children = db.get_children(node.clone());
25609 Self { node, children }
25610 }
25611 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25612 let kind = node.kind(db);
25613 if kind == SyntaxKind::TerminalMut { Some(Self::from_syntax_node(db, node)) } else { None }
25614 }
25615 fn as_syntax_node(&self) -> SyntaxNode {
25616 self.node.clone()
25617 }
25618 fn stable_ptr(&self) -> Self::StablePtr {
25619 TerminalMutPtr(self.node.0.stable_ptr)
25620 }
25621}
25622impl From<&TerminalMut> for SyntaxStablePtrId {
25623 fn from(node: &TerminalMut) -> Self {
25624 node.stable_ptr().untyped()
25625 }
25626}
25627#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25628pub struct TokenNoPanic {
25629 node: SyntaxNode,
25630}
25631impl Token for TokenNoPanic {
25632 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25633 TokenNoPanicGreen(
25634 Arc::new(GreenNode {
25635 kind: SyntaxKind::TokenNoPanic,
25636 details: GreenNodeDetails::Token(text),
25637 })
25638 .intern(db),
25639 )
25640 }
25641 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25642 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25643 .clone()
25644 }
25645}
25646#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25647pub struct TokenNoPanicPtr(pub SyntaxStablePtrId);
25648impl TypedStablePtr for TokenNoPanicPtr {
25649 type SyntaxNode = TokenNoPanic;
25650 fn untyped(&self) -> SyntaxStablePtrId {
25651 self.0
25652 }
25653 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
25654 TokenNoPanic::from_syntax_node(db, self.0.lookup(db))
25655 }
25656}
25657impl From<TokenNoPanicPtr> for SyntaxStablePtrId {
25658 fn from(ptr: TokenNoPanicPtr) -> Self {
25659 ptr.untyped()
25660 }
25661}
25662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25663pub struct TokenNoPanicGreen(pub GreenId);
25664impl TokenNoPanicGreen {
25665 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25666 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25667 }
25668}
25669impl TypedSyntaxNode for TokenNoPanic {
25670 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNoPanic);
25671 type StablePtr = TokenNoPanicPtr;
25672 type Green = TokenNoPanicGreen;
25673 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25674 TokenNoPanicGreen(
25675 Arc::new(GreenNode {
25676 kind: SyntaxKind::TokenMissing,
25677 details: GreenNodeDetails::Token("".into()),
25678 })
25679 .intern(db),
25680 )
25681 }
25682 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25683 match node.0.green.lookup_intern(db).details {
25684 GreenNodeDetails::Token(_) => Self { node },
25685 GreenNodeDetails::Node { .. } => {
25686 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNoPanic)
25687 }
25688 }
25689 }
25690 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25691 match node.0.green.lookup_intern(db).details {
25692 GreenNodeDetails::Token(_) => Some(Self { node }),
25693 GreenNodeDetails::Node { .. } => None,
25694 }
25695 }
25696 fn as_syntax_node(&self) -> SyntaxNode {
25697 self.node.clone()
25698 }
25699 fn stable_ptr(&self) -> Self::StablePtr {
25700 TokenNoPanicPtr(self.node.0.stable_ptr)
25701 }
25702}
25703impl From<&TokenNoPanic> for SyntaxStablePtrId {
25704 fn from(node: &TokenNoPanic) -> Self {
25705 node.stable_ptr().untyped()
25706 }
25707}
25708#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25709pub struct TerminalNoPanic {
25710 node: SyntaxNode,
25711 children: Arc<[SyntaxNode]>,
25712}
25713impl Terminal for TerminalNoPanic {
25714 const KIND: SyntaxKind = SyntaxKind::TerminalNoPanic;
25715 type TokenType = TokenNoPanic;
25716 fn new_green(
25717 db: &dyn SyntaxGroup,
25718 leading_trivia: TriviaGreen,
25719 token: <<TerminalNoPanic as Terminal>::TokenType as TypedSyntaxNode>::Green,
25720 trailing_trivia: TriviaGreen,
25721 ) -> Self::Green {
25722 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25723 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25724 TerminalNoPanicGreen(
25725 Arc::new(GreenNode {
25726 kind: SyntaxKind::TerminalNoPanic,
25727 details: GreenNodeDetails::Node { children, width },
25728 })
25729 .intern(db),
25730 )
25731 }
25732 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25733 self.token(db).text(db)
25734 }
25735}
25736impl TerminalNoPanic {
25737 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25738 Trivia::from_syntax_node(db, self.children[0].clone())
25739 }
25740 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNoPanic {
25741 TokenNoPanic::from_syntax_node(db, self.children[1].clone())
25742 }
25743 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25744 Trivia::from_syntax_node(db, self.children[2].clone())
25745 }
25746}
25747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25748pub struct TerminalNoPanicPtr(pub SyntaxStablePtrId);
25749impl TerminalNoPanicPtr {}
25750impl TypedStablePtr for TerminalNoPanicPtr {
25751 type SyntaxNode = TerminalNoPanic;
25752 fn untyped(&self) -> SyntaxStablePtrId {
25753 self.0
25754 }
25755 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNoPanic {
25756 TerminalNoPanic::from_syntax_node(db, self.0.lookup(db))
25757 }
25758}
25759impl From<TerminalNoPanicPtr> for SyntaxStablePtrId {
25760 fn from(ptr: TerminalNoPanicPtr) -> Self {
25761 ptr.untyped()
25762 }
25763}
25764#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25765pub struct TerminalNoPanicGreen(pub GreenId);
25766impl TypedSyntaxNode for TerminalNoPanic {
25767 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNoPanic);
25768 type StablePtr = TerminalNoPanicPtr;
25769 type Green = TerminalNoPanicGreen;
25770 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25771 TerminalNoPanicGreen(
25772 Arc::new(GreenNode {
25773 kind: SyntaxKind::TerminalNoPanic,
25774 details: GreenNodeDetails::Node {
25775 children: vec![
25776 Trivia::missing(db).0,
25777 TokenNoPanic::missing(db).0,
25778 Trivia::missing(db).0,
25779 ],
25780 width: TextWidth::default(),
25781 },
25782 })
25783 .intern(db),
25784 )
25785 }
25786 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25787 let kind = node.kind(db);
25788 assert_eq!(
25789 kind,
25790 SyntaxKind::TerminalNoPanic,
25791 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25792 kind,
25793 SyntaxKind::TerminalNoPanic
25794 );
25795 let children = db.get_children(node.clone());
25796 Self { node, children }
25797 }
25798 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25799 let kind = node.kind(db);
25800 if kind == SyntaxKind::TerminalNoPanic {
25801 Some(Self::from_syntax_node(db, node))
25802 } else {
25803 None
25804 }
25805 }
25806 fn as_syntax_node(&self) -> SyntaxNode {
25807 self.node.clone()
25808 }
25809 fn stable_ptr(&self) -> Self::StablePtr {
25810 TerminalNoPanicPtr(self.node.0.stable_ptr)
25811 }
25812}
25813impl From<&TerminalNoPanic> for SyntaxStablePtrId {
25814 fn from(node: &TerminalNoPanic) -> Self {
25815 node.stable_ptr().untyped()
25816 }
25817}
25818#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25819pub struct TokenOf {
25820 node: SyntaxNode,
25821}
25822impl Token for TokenOf {
25823 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
25824 TokenOfGreen(
25825 Arc::new(GreenNode {
25826 kind: SyntaxKind::TokenOf,
25827 details: GreenNodeDetails::Token(text),
25828 })
25829 .intern(db),
25830 )
25831 }
25832 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25833 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
25834 .clone()
25835 }
25836}
25837#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25838pub struct TokenOfPtr(pub SyntaxStablePtrId);
25839impl TypedStablePtr for TokenOfPtr {
25840 type SyntaxNode = TokenOf;
25841 fn untyped(&self) -> SyntaxStablePtrId {
25842 self.0
25843 }
25844 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOf {
25845 TokenOf::from_syntax_node(db, self.0.lookup(db))
25846 }
25847}
25848impl From<TokenOfPtr> for SyntaxStablePtrId {
25849 fn from(ptr: TokenOfPtr) -> Self {
25850 ptr.untyped()
25851 }
25852}
25853#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25854pub struct TokenOfGreen(pub GreenId);
25855impl TokenOfGreen {
25856 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25857 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
25858 }
25859}
25860impl TypedSyntaxNode for TokenOf {
25861 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOf);
25862 type StablePtr = TokenOfPtr;
25863 type Green = TokenOfGreen;
25864 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25865 TokenOfGreen(
25866 Arc::new(GreenNode {
25867 kind: SyntaxKind::TokenMissing,
25868 details: GreenNodeDetails::Token("".into()),
25869 })
25870 .intern(db),
25871 )
25872 }
25873 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25874 match node.0.green.lookup_intern(db).details {
25875 GreenNodeDetails::Token(_) => Self { node },
25876 GreenNodeDetails::Node { .. } => {
25877 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOf)
25878 }
25879 }
25880 }
25881 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25882 match node.0.green.lookup_intern(db).details {
25883 GreenNodeDetails::Token(_) => Some(Self { node }),
25884 GreenNodeDetails::Node { .. } => None,
25885 }
25886 }
25887 fn as_syntax_node(&self) -> SyntaxNode {
25888 self.node.clone()
25889 }
25890 fn stable_ptr(&self) -> Self::StablePtr {
25891 TokenOfPtr(self.node.0.stable_ptr)
25892 }
25893}
25894impl From<&TokenOf> for SyntaxStablePtrId {
25895 fn from(node: &TokenOf) -> Self {
25896 node.stable_ptr().untyped()
25897 }
25898}
25899#[derive(Clone, Debug, Eq, Hash, PartialEq)]
25900pub struct TerminalOf {
25901 node: SyntaxNode,
25902 children: Arc<[SyntaxNode]>,
25903}
25904impl Terminal for TerminalOf {
25905 const KIND: SyntaxKind = SyntaxKind::TerminalOf;
25906 type TokenType = TokenOf;
25907 fn new_green(
25908 db: &dyn SyntaxGroup,
25909 leading_trivia: TriviaGreen,
25910 token: <<TerminalOf as Terminal>::TokenType as TypedSyntaxNode>::Green,
25911 trailing_trivia: TriviaGreen,
25912 ) -> Self::Green {
25913 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
25914 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
25915 TerminalOfGreen(
25916 Arc::new(GreenNode {
25917 kind: SyntaxKind::TerminalOf,
25918 details: GreenNodeDetails::Node { children, width },
25919 })
25920 .intern(db),
25921 )
25922 }
25923 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
25924 self.token(db).text(db)
25925 }
25926}
25927impl TerminalOf {
25928 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25929 Trivia::from_syntax_node(db, self.children[0].clone())
25930 }
25931 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOf {
25932 TokenOf::from_syntax_node(db, self.children[1].clone())
25933 }
25934 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
25935 Trivia::from_syntax_node(db, self.children[2].clone())
25936 }
25937}
25938#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25939pub struct TerminalOfPtr(pub SyntaxStablePtrId);
25940impl TerminalOfPtr {}
25941impl TypedStablePtr for TerminalOfPtr {
25942 type SyntaxNode = TerminalOf;
25943 fn untyped(&self) -> SyntaxStablePtrId {
25944 self.0
25945 }
25946 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOf {
25947 TerminalOf::from_syntax_node(db, self.0.lookup(db))
25948 }
25949}
25950impl From<TerminalOfPtr> for SyntaxStablePtrId {
25951 fn from(ptr: TerminalOfPtr) -> Self {
25952 ptr.untyped()
25953 }
25954}
25955#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
25956pub struct TerminalOfGreen(pub GreenId);
25957impl TypedSyntaxNode for TerminalOf {
25958 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOf);
25959 type StablePtr = TerminalOfPtr;
25960 type Green = TerminalOfGreen;
25961 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
25962 TerminalOfGreen(
25963 Arc::new(GreenNode {
25964 kind: SyntaxKind::TerminalOf,
25965 details: GreenNodeDetails::Node {
25966 children: vec![
25967 Trivia::missing(db).0,
25968 TokenOf::missing(db).0,
25969 Trivia::missing(db).0,
25970 ],
25971 width: TextWidth::default(),
25972 },
25973 })
25974 .intern(db),
25975 )
25976 }
25977 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
25978 let kind = node.kind(db);
25979 assert_eq!(
25980 kind,
25981 SyntaxKind::TerminalOf,
25982 "Unexpected SyntaxKind {:?}. Expected {:?}.",
25983 kind,
25984 SyntaxKind::TerminalOf
25985 );
25986 let children = db.get_children(node.clone());
25987 Self { node, children }
25988 }
25989 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
25990 let kind = node.kind(db);
25991 if kind == SyntaxKind::TerminalOf { Some(Self::from_syntax_node(db, node)) } else { None }
25992 }
25993 fn as_syntax_node(&self) -> SyntaxNode {
25994 self.node.clone()
25995 }
25996 fn stable_ptr(&self) -> Self::StablePtr {
25997 TerminalOfPtr(self.node.0.stable_ptr)
25998 }
25999}
26000impl From<&TerminalOf> for SyntaxStablePtrId {
26001 fn from(node: &TerminalOf) -> Self {
26002 node.stable_ptr().untyped()
26003 }
26004}
26005#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26006pub struct TokenRef {
26007 node: SyntaxNode,
26008}
26009impl Token for TokenRef {
26010 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26011 TokenRefGreen(
26012 Arc::new(GreenNode {
26013 kind: SyntaxKind::TokenRef,
26014 details: GreenNodeDetails::Token(text),
26015 })
26016 .intern(db),
26017 )
26018 }
26019 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26020 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26021 .clone()
26022 }
26023}
26024#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26025pub struct TokenRefPtr(pub SyntaxStablePtrId);
26026impl TypedStablePtr for TokenRefPtr {
26027 type SyntaxNode = TokenRef;
26028 fn untyped(&self) -> SyntaxStablePtrId {
26029 self.0
26030 }
26031 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRef {
26032 TokenRef::from_syntax_node(db, self.0.lookup(db))
26033 }
26034}
26035impl From<TokenRefPtr> for SyntaxStablePtrId {
26036 fn from(ptr: TokenRefPtr) -> Self {
26037 ptr.untyped()
26038 }
26039}
26040#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26041pub struct TokenRefGreen(pub GreenId);
26042impl TokenRefGreen {
26043 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26044 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26045 }
26046}
26047impl TypedSyntaxNode for TokenRef {
26048 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRef);
26049 type StablePtr = TokenRefPtr;
26050 type Green = TokenRefGreen;
26051 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26052 TokenRefGreen(
26053 Arc::new(GreenNode {
26054 kind: SyntaxKind::TokenMissing,
26055 details: GreenNodeDetails::Token("".into()),
26056 })
26057 .intern(db),
26058 )
26059 }
26060 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26061 match node.0.green.lookup_intern(db).details {
26062 GreenNodeDetails::Token(_) => Self { node },
26063 GreenNodeDetails::Node { .. } => {
26064 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRef)
26065 }
26066 }
26067 }
26068 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26069 match node.0.green.lookup_intern(db).details {
26070 GreenNodeDetails::Token(_) => Some(Self { node }),
26071 GreenNodeDetails::Node { .. } => None,
26072 }
26073 }
26074 fn as_syntax_node(&self) -> SyntaxNode {
26075 self.node.clone()
26076 }
26077 fn stable_ptr(&self) -> Self::StablePtr {
26078 TokenRefPtr(self.node.0.stable_ptr)
26079 }
26080}
26081impl From<&TokenRef> for SyntaxStablePtrId {
26082 fn from(node: &TokenRef) -> Self {
26083 node.stable_ptr().untyped()
26084 }
26085}
26086#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26087pub struct TerminalRef {
26088 node: SyntaxNode,
26089 children: Arc<[SyntaxNode]>,
26090}
26091impl Terminal for TerminalRef {
26092 const KIND: SyntaxKind = SyntaxKind::TerminalRef;
26093 type TokenType = TokenRef;
26094 fn new_green(
26095 db: &dyn SyntaxGroup,
26096 leading_trivia: TriviaGreen,
26097 token: <<TerminalRef as Terminal>::TokenType as TypedSyntaxNode>::Green,
26098 trailing_trivia: TriviaGreen,
26099 ) -> Self::Green {
26100 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26101 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26102 TerminalRefGreen(
26103 Arc::new(GreenNode {
26104 kind: SyntaxKind::TerminalRef,
26105 details: GreenNodeDetails::Node { children, width },
26106 })
26107 .intern(db),
26108 )
26109 }
26110 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26111 self.token(db).text(db)
26112 }
26113}
26114impl TerminalRef {
26115 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26116 Trivia::from_syntax_node(db, self.children[0].clone())
26117 }
26118 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRef {
26119 TokenRef::from_syntax_node(db, self.children[1].clone())
26120 }
26121 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26122 Trivia::from_syntax_node(db, self.children[2].clone())
26123 }
26124}
26125#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26126pub struct TerminalRefPtr(pub SyntaxStablePtrId);
26127impl TerminalRefPtr {}
26128impl TypedStablePtr for TerminalRefPtr {
26129 type SyntaxNode = TerminalRef;
26130 fn untyped(&self) -> SyntaxStablePtrId {
26131 self.0
26132 }
26133 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRef {
26134 TerminalRef::from_syntax_node(db, self.0.lookup(db))
26135 }
26136}
26137impl From<TerminalRefPtr> for SyntaxStablePtrId {
26138 fn from(ptr: TerminalRefPtr) -> Self {
26139 ptr.untyped()
26140 }
26141}
26142#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26143pub struct TerminalRefGreen(pub GreenId);
26144impl TypedSyntaxNode for TerminalRef {
26145 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRef);
26146 type StablePtr = TerminalRefPtr;
26147 type Green = TerminalRefGreen;
26148 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26149 TerminalRefGreen(
26150 Arc::new(GreenNode {
26151 kind: SyntaxKind::TerminalRef,
26152 details: GreenNodeDetails::Node {
26153 children: vec![
26154 Trivia::missing(db).0,
26155 TokenRef::missing(db).0,
26156 Trivia::missing(db).0,
26157 ],
26158 width: TextWidth::default(),
26159 },
26160 })
26161 .intern(db),
26162 )
26163 }
26164 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26165 let kind = node.kind(db);
26166 assert_eq!(
26167 kind,
26168 SyntaxKind::TerminalRef,
26169 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26170 kind,
26171 SyntaxKind::TerminalRef
26172 );
26173 let children = db.get_children(node.clone());
26174 Self { node, children }
26175 }
26176 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26177 let kind = node.kind(db);
26178 if kind == SyntaxKind::TerminalRef { Some(Self::from_syntax_node(db, node)) } else { None }
26179 }
26180 fn as_syntax_node(&self) -> SyntaxNode {
26181 self.node.clone()
26182 }
26183 fn stable_ptr(&self) -> Self::StablePtr {
26184 TerminalRefPtr(self.node.0.stable_ptr)
26185 }
26186}
26187impl From<&TerminalRef> for SyntaxStablePtrId {
26188 fn from(node: &TerminalRef) -> Self {
26189 node.stable_ptr().untyped()
26190 }
26191}
26192#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26193pub struct TokenContinue {
26194 node: SyntaxNode,
26195}
26196impl Token for TokenContinue {
26197 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26198 TokenContinueGreen(
26199 Arc::new(GreenNode {
26200 kind: SyntaxKind::TokenContinue,
26201 details: GreenNodeDetails::Token(text),
26202 })
26203 .intern(db),
26204 )
26205 }
26206 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26207 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26208 .clone()
26209 }
26210}
26211#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26212pub struct TokenContinuePtr(pub SyntaxStablePtrId);
26213impl TypedStablePtr for TokenContinuePtr {
26214 type SyntaxNode = TokenContinue;
26215 fn untyped(&self) -> SyntaxStablePtrId {
26216 self.0
26217 }
26218 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenContinue {
26219 TokenContinue::from_syntax_node(db, self.0.lookup(db))
26220 }
26221}
26222impl From<TokenContinuePtr> for SyntaxStablePtrId {
26223 fn from(ptr: TokenContinuePtr) -> Self {
26224 ptr.untyped()
26225 }
26226}
26227#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26228pub struct TokenContinueGreen(pub GreenId);
26229impl TokenContinueGreen {
26230 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26231 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26232 }
26233}
26234impl TypedSyntaxNode for TokenContinue {
26235 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenContinue);
26236 type StablePtr = TokenContinuePtr;
26237 type Green = TokenContinueGreen;
26238 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26239 TokenContinueGreen(
26240 Arc::new(GreenNode {
26241 kind: SyntaxKind::TokenMissing,
26242 details: GreenNodeDetails::Token("".into()),
26243 })
26244 .intern(db),
26245 )
26246 }
26247 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26248 match node.0.green.lookup_intern(db).details {
26249 GreenNodeDetails::Token(_) => Self { node },
26250 GreenNodeDetails::Node { .. } => {
26251 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenContinue)
26252 }
26253 }
26254 }
26255 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26256 match node.0.green.lookup_intern(db).details {
26257 GreenNodeDetails::Token(_) => Some(Self { node }),
26258 GreenNodeDetails::Node { .. } => None,
26259 }
26260 }
26261 fn as_syntax_node(&self) -> SyntaxNode {
26262 self.node.clone()
26263 }
26264 fn stable_ptr(&self) -> Self::StablePtr {
26265 TokenContinuePtr(self.node.0.stable_ptr)
26266 }
26267}
26268impl From<&TokenContinue> for SyntaxStablePtrId {
26269 fn from(node: &TokenContinue) -> Self {
26270 node.stable_ptr().untyped()
26271 }
26272}
26273#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26274pub struct TerminalContinue {
26275 node: SyntaxNode,
26276 children: Arc<[SyntaxNode]>,
26277}
26278impl Terminal for TerminalContinue {
26279 const KIND: SyntaxKind = SyntaxKind::TerminalContinue;
26280 type TokenType = TokenContinue;
26281 fn new_green(
26282 db: &dyn SyntaxGroup,
26283 leading_trivia: TriviaGreen,
26284 token: <<TerminalContinue as Terminal>::TokenType as TypedSyntaxNode>::Green,
26285 trailing_trivia: TriviaGreen,
26286 ) -> Self::Green {
26287 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26288 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26289 TerminalContinueGreen(
26290 Arc::new(GreenNode {
26291 kind: SyntaxKind::TerminalContinue,
26292 details: GreenNodeDetails::Node { children, width },
26293 })
26294 .intern(db),
26295 )
26296 }
26297 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26298 self.token(db).text(db)
26299 }
26300}
26301impl TerminalContinue {
26302 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26303 Trivia::from_syntax_node(db, self.children[0].clone())
26304 }
26305 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenContinue {
26306 TokenContinue::from_syntax_node(db, self.children[1].clone())
26307 }
26308 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26309 Trivia::from_syntax_node(db, self.children[2].clone())
26310 }
26311}
26312#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26313pub struct TerminalContinuePtr(pub SyntaxStablePtrId);
26314impl TerminalContinuePtr {}
26315impl TypedStablePtr for TerminalContinuePtr {
26316 type SyntaxNode = TerminalContinue;
26317 fn untyped(&self) -> SyntaxStablePtrId {
26318 self.0
26319 }
26320 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalContinue {
26321 TerminalContinue::from_syntax_node(db, self.0.lookup(db))
26322 }
26323}
26324impl From<TerminalContinuePtr> for SyntaxStablePtrId {
26325 fn from(ptr: TerminalContinuePtr) -> Self {
26326 ptr.untyped()
26327 }
26328}
26329#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26330pub struct TerminalContinueGreen(pub GreenId);
26331impl TypedSyntaxNode for TerminalContinue {
26332 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalContinue);
26333 type StablePtr = TerminalContinuePtr;
26334 type Green = TerminalContinueGreen;
26335 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26336 TerminalContinueGreen(
26337 Arc::new(GreenNode {
26338 kind: SyntaxKind::TerminalContinue,
26339 details: GreenNodeDetails::Node {
26340 children: vec![
26341 Trivia::missing(db).0,
26342 TokenContinue::missing(db).0,
26343 Trivia::missing(db).0,
26344 ],
26345 width: TextWidth::default(),
26346 },
26347 })
26348 .intern(db),
26349 )
26350 }
26351 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26352 let kind = node.kind(db);
26353 assert_eq!(
26354 kind,
26355 SyntaxKind::TerminalContinue,
26356 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26357 kind,
26358 SyntaxKind::TerminalContinue
26359 );
26360 let children = db.get_children(node.clone());
26361 Self { node, children }
26362 }
26363 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26364 let kind = node.kind(db);
26365 if kind == SyntaxKind::TerminalContinue {
26366 Some(Self::from_syntax_node(db, node))
26367 } else {
26368 None
26369 }
26370 }
26371 fn as_syntax_node(&self) -> SyntaxNode {
26372 self.node.clone()
26373 }
26374 fn stable_ptr(&self) -> Self::StablePtr {
26375 TerminalContinuePtr(self.node.0.stable_ptr)
26376 }
26377}
26378impl From<&TerminalContinue> for SyntaxStablePtrId {
26379 fn from(node: &TerminalContinue) -> Self {
26380 node.stable_ptr().untyped()
26381 }
26382}
26383#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26384pub struct TokenReturn {
26385 node: SyntaxNode,
26386}
26387impl Token for TokenReturn {
26388 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26389 TokenReturnGreen(
26390 Arc::new(GreenNode {
26391 kind: SyntaxKind::TokenReturn,
26392 details: GreenNodeDetails::Token(text),
26393 })
26394 .intern(db),
26395 )
26396 }
26397 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26398 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26399 .clone()
26400 }
26401}
26402#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26403pub struct TokenReturnPtr(pub SyntaxStablePtrId);
26404impl TypedStablePtr for TokenReturnPtr {
26405 type SyntaxNode = TokenReturn;
26406 fn untyped(&self) -> SyntaxStablePtrId {
26407 self.0
26408 }
26409 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenReturn {
26410 TokenReturn::from_syntax_node(db, self.0.lookup(db))
26411 }
26412}
26413impl From<TokenReturnPtr> for SyntaxStablePtrId {
26414 fn from(ptr: TokenReturnPtr) -> Self {
26415 ptr.untyped()
26416 }
26417}
26418#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26419pub struct TokenReturnGreen(pub GreenId);
26420impl TokenReturnGreen {
26421 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26422 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26423 }
26424}
26425impl TypedSyntaxNode for TokenReturn {
26426 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenReturn);
26427 type StablePtr = TokenReturnPtr;
26428 type Green = TokenReturnGreen;
26429 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26430 TokenReturnGreen(
26431 Arc::new(GreenNode {
26432 kind: SyntaxKind::TokenMissing,
26433 details: GreenNodeDetails::Token("".into()),
26434 })
26435 .intern(db),
26436 )
26437 }
26438 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26439 match node.0.green.lookup_intern(db).details {
26440 GreenNodeDetails::Token(_) => Self { node },
26441 GreenNodeDetails::Node { .. } => {
26442 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenReturn)
26443 }
26444 }
26445 }
26446 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26447 match node.0.green.lookup_intern(db).details {
26448 GreenNodeDetails::Token(_) => Some(Self { node }),
26449 GreenNodeDetails::Node { .. } => None,
26450 }
26451 }
26452 fn as_syntax_node(&self) -> SyntaxNode {
26453 self.node.clone()
26454 }
26455 fn stable_ptr(&self) -> Self::StablePtr {
26456 TokenReturnPtr(self.node.0.stable_ptr)
26457 }
26458}
26459impl From<&TokenReturn> for SyntaxStablePtrId {
26460 fn from(node: &TokenReturn) -> Self {
26461 node.stable_ptr().untyped()
26462 }
26463}
26464#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26465pub struct TerminalReturn {
26466 node: SyntaxNode,
26467 children: Arc<[SyntaxNode]>,
26468}
26469impl Terminal for TerminalReturn {
26470 const KIND: SyntaxKind = SyntaxKind::TerminalReturn;
26471 type TokenType = TokenReturn;
26472 fn new_green(
26473 db: &dyn SyntaxGroup,
26474 leading_trivia: TriviaGreen,
26475 token: <<TerminalReturn as Terminal>::TokenType as TypedSyntaxNode>::Green,
26476 trailing_trivia: TriviaGreen,
26477 ) -> Self::Green {
26478 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26479 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26480 TerminalReturnGreen(
26481 Arc::new(GreenNode {
26482 kind: SyntaxKind::TerminalReturn,
26483 details: GreenNodeDetails::Node { children, width },
26484 })
26485 .intern(db),
26486 )
26487 }
26488 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26489 self.token(db).text(db)
26490 }
26491}
26492impl TerminalReturn {
26493 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26494 Trivia::from_syntax_node(db, self.children[0].clone())
26495 }
26496 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenReturn {
26497 TokenReturn::from_syntax_node(db, self.children[1].clone())
26498 }
26499 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26500 Trivia::from_syntax_node(db, self.children[2].clone())
26501 }
26502}
26503#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26504pub struct TerminalReturnPtr(pub SyntaxStablePtrId);
26505impl TerminalReturnPtr {}
26506impl TypedStablePtr for TerminalReturnPtr {
26507 type SyntaxNode = TerminalReturn;
26508 fn untyped(&self) -> SyntaxStablePtrId {
26509 self.0
26510 }
26511 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalReturn {
26512 TerminalReturn::from_syntax_node(db, self.0.lookup(db))
26513 }
26514}
26515impl From<TerminalReturnPtr> for SyntaxStablePtrId {
26516 fn from(ptr: TerminalReturnPtr) -> Self {
26517 ptr.untyped()
26518 }
26519}
26520#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26521pub struct TerminalReturnGreen(pub GreenId);
26522impl TypedSyntaxNode for TerminalReturn {
26523 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalReturn);
26524 type StablePtr = TerminalReturnPtr;
26525 type Green = TerminalReturnGreen;
26526 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26527 TerminalReturnGreen(
26528 Arc::new(GreenNode {
26529 kind: SyntaxKind::TerminalReturn,
26530 details: GreenNodeDetails::Node {
26531 children: vec![
26532 Trivia::missing(db).0,
26533 TokenReturn::missing(db).0,
26534 Trivia::missing(db).0,
26535 ],
26536 width: TextWidth::default(),
26537 },
26538 })
26539 .intern(db),
26540 )
26541 }
26542 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26543 let kind = node.kind(db);
26544 assert_eq!(
26545 kind,
26546 SyntaxKind::TerminalReturn,
26547 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26548 kind,
26549 SyntaxKind::TerminalReturn
26550 );
26551 let children = db.get_children(node.clone());
26552 Self { node, children }
26553 }
26554 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26555 let kind = node.kind(db);
26556 if kind == SyntaxKind::TerminalReturn {
26557 Some(Self::from_syntax_node(db, node))
26558 } else {
26559 None
26560 }
26561 }
26562 fn as_syntax_node(&self) -> SyntaxNode {
26563 self.node.clone()
26564 }
26565 fn stable_ptr(&self) -> Self::StablePtr {
26566 TerminalReturnPtr(self.node.0.stable_ptr)
26567 }
26568}
26569impl From<&TerminalReturn> for SyntaxStablePtrId {
26570 fn from(node: &TerminalReturn) -> Self {
26571 node.stable_ptr().untyped()
26572 }
26573}
26574#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26575pub struct TokenBreak {
26576 node: SyntaxNode,
26577}
26578impl Token for TokenBreak {
26579 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26580 TokenBreakGreen(
26581 Arc::new(GreenNode {
26582 kind: SyntaxKind::TokenBreak,
26583 details: GreenNodeDetails::Token(text),
26584 })
26585 .intern(db),
26586 )
26587 }
26588 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26589 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26590 .clone()
26591 }
26592}
26593#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26594pub struct TokenBreakPtr(pub SyntaxStablePtrId);
26595impl TypedStablePtr for TokenBreakPtr {
26596 type SyntaxNode = TokenBreak;
26597 fn untyped(&self) -> SyntaxStablePtrId {
26598 self.0
26599 }
26600 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBreak {
26601 TokenBreak::from_syntax_node(db, self.0.lookup(db))
26602 }
26603}
26604impl From<TokenBreakPtr> for SyntaxStablePtrId {
26605 fn from(ptr: TokenBreakPtr) -> Self {
26606 ptr.untyped()
26607 }
26608}
26609#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26610pub struct TokenBreakGreen(pub GreenId);
26611impl TokenBreakGreen {
26612 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26613 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26614 }
26615}
26616impl TypedSyntaxNode for TokenBreak {
26617 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBreak);
26618 type StablePtr = TokenBreakPtr;
26619 type Green = TokenBreakGreen;
26620 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26621 TokenBreakGreen(
26622 Arc::new(GreenNode {
26623 kind: SyntaxKind::TokenMissing,
26624 details: GreenNodeDetails::Token("".into()),
26625 })
26626 .intern(db),
26627 )
26628 }
26629 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26630 match node.0.green.lookup_intern(db).details {
26631 GreenNodeDetails::Token(_) => Self { node },
26632 GreenNodeDetails::Node { .. } => {
26633 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBreak)
26634 }
26635 }
26636 }
26637 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26638 match node.0.green.lookup_intern(db).details {
26639 GreenNodeDetails::Token(_) => Some(Self { node }),
26640 GreenNodeDetails::Node { .. } => None,
26641 }
26642 }
26643 fn as_syntax_node(&self) -> SyntaxNode {
26644 self.node.clone()
26645 }
26646 fn stable_ptr(&self) -> Self::StablePtr {
26647 TokenBreakPtr(self.node.0.stable_ptr)
26648 }
26649}
26650impl From<&TokenBreak> for SyntaxStablePtrId {
26651 fn from(node: &TokenBreak) -> Self {
26652 node.stable_ptr().untyped()
26653 }
26654}
26655#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26656pub struct TerminalBreak {
26657 node: SyntaxNode,
26658 children: Arc<[SyntaxNode]>,
26659}
26660impl Terminal for TerminalBreak {
26661 const KIND: SyntaxKind = SyntaxKind::TerminalBreak;
26662 type TokenType = TokenBreak;
26663 fn new_green(
26664 db: &dyn SyntaxGroup,
26665 leading_trivia: TriviaGreen,
26666 token: <<TerminalBreak as Terminal>::TokenType as TypedSyntaxNode>::Green,
26667 trailing_trivia: TriviaGreen,
26668 ) -> Self::Green {
26669 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26670 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26671 TerminalBreakGreen(
26672 Arc::new(GreenNode {
26673 kind: SyntaxKind::TerminalBreak,
26674 details: GreenNodeDetails::Node { children, width },
26675 })
26676 .intern(db),
26677 )
26678 }
26679 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26680 self.token(db).text(db)
26681 }
26682}
26683impl TerminalBreak {
26684 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26685 Trivia::from_syntax_node(db, self.children[0].clone())
26686 }
26687 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBreak {
26688 TokenBreak::from_syntax_node(db, self.children[1].clone())
26689 }
26690 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26691 Trivia::from_syntax_node(db, self.children[2].clone())
26692 }
26693}
26694#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26695pub struct TerminalBreakPtr(pub SyntaxStablePtrId);
26696impl TerminalBreakPtr {}
26697impl TypedStablePtr for TerminalBreakPtr {
26698 type SyntaxNode = TerminalBreak;
26699 fn untyped(&self) -> SyntaxStablePtrId {
26700 self.0
26701 }
26702 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBreak {
26703 TerminalBreak::from_syntax_node(db, self.0.lookup(db))
26704 }
26705}
26706impl From<TerminalBreakPtr> for SyntaxStablePtrId {
26707 fn from(ptr: TerminalBreakPtr) -> Self {
26708 ptr.untyped()
26709 }
26710}
26711#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26712pub struct TerminalBreakGreen(pub GreenId);
26713impl TypedSyntaxNode for TerminalBreak {
26714 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBreak);
26715 type StablePtr = TerminalBreakPtr;
26716 type Green = TerminalBreakGreen;
26717 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26718 TerminalBreakGreen(
26719 Arc::new(GreenNode {
26720 kind: SyntaxKind::TerminalBreak,
26721 details: GreenNodeDetails::Node {
26722 children: vec![
26723 Trivia::missing(db).0,
26724 TokenBreak::missing(db).0,
26725 Trivia::missing(db).0,
26726 ],
26727 width: TextWidth::default(),
26728 },
26729 })
26730 .intern(db),
26731 )
26732 }
26733 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26734 let kind = node.kind(db);
26735 assert_eq!(
26736 kind,
26737 SyntaxKind::TerminalBreak,
26738 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26739 kind,
26740 SyntaxKind::TerminalBreak
26741 );
26742 let children = db.get_children(node.clone());
26743 Self { node, children }
26744 }
26745 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26746 let kind = node.kind(db);
26747 if kind == SyntaxKind::TerminalBreak {
26748 Some(Self::from_syntax_node(db, node))
26749 } else {
26750 None
26751 }
26752 }
26753 fn as_syntax_node(&self) -> SyntaxNode {
26754 self.node.clone()
26755 }
26756 fn stable_ptr(&self) -> Self::StablePtr {
26757 TerminalBreakPtr(self.node.0.stable_ptr)
26758 }
26759}
26760impl From<&TerminalBreak> for SyntaxStablePtrId {
26761 fn from(node: &TerminalBreak) -> Self {
26762 node.stable_ptr().untyped()
26763 }
26764}
26765#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26766pub struct TokenStruct {
26767 node: SyntaxNode,
26768}
26769impl Token for TokenStruct {
26770 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26771 TokenStructGreen(
26772 Arc::new(GreenNode {
26773 kind: SyntaxKind::TokenStruct,
26774 details: GreenNodeDetails::Token(text),
26775 })
26776 .intern(db),
26777 )
26778 }
26779 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26780 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26781 .clone()
26782 }
26783}
26784#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26785pub struct TokenStructPtr(pub SyntaxStablePtrId);
26786impl TypedStablePtr for TokenStructPtr {
26787 type SyntaxNode = TokenStruct;
26788 fn untyped(&self) -> SyntaxStablePtrId {
26789 self.0
26790 }
26791 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenStruct {
26792 TokenStruct::from_syntax_node(db, self.0.lookup(db))
26793 }
26794}
26795impl From<TokenStructPtr> for SyntaxStablePtrId {
26796 fn from(ptr: TokenStructPtr) -> Self {
26797 ptr.untyped()
26798 }
26799}
26800#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26801pub struct TokenStructGreen(pub GreenId);
26802impl TokenStructGreen {
26803 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26804 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26805 }
26806}
26807impl TypedSyntaxNode for TokenStruct {
26808 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenStruct);
26809 type StablePtr = TokenStructPtr;
26810 type Green = TokenStructGreen;
26811 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26812 TokenStructGreen(
26813 Arc::new(GreenNode {
26814 kind: SyntaxKind::TokenMissing,
26815 details: GreenNodeDetails::Token("".into()),
26816 })
26817 .intern(db),
26818 )
26819 }
26820 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26821 match node.0.green.lookup_intern(db).details {
26822 GreenNodeDetails::Token(_) => Self { node },
26823 GreenNodeDetails::Node { .. } => {
26824 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenStruct)
26825 }
26826 }
26827 }
26828 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26829 match node.0.green.lookup_intern(db).details {
26830 GreenNodeDetails::Token(_) => Some(Self { node }),
26831 GreenNodeDetails::Node { .. } => None,
26832 }
26833 }
26834 fn as_syntax_node(&self) -> SyntaxNode {
26835 self.node.clone()
26836 }
26837 fn stable_ptr(&self) -> Self::StablePtr {
26838 TokenStructPtr(self.node.0.stable_ptr)
26839 }
26840}
26841impl From<&TokenStruct> for SyntaxStablePtrId {
26842 fn from(node: &TokenStruct) -> Self {
26843 node.stable_ptr().untyped()
26844 }
26845}
26846#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26847pub struct TerminalStruct {
26848 node: SyntaxNode,
26849 children: Arc<[SyntaxNode]>,
26850}
26851impl Terminal for TerminalStruct {
26852 const KIND: SyntaxKind = SyntaxKind::TerminalStruct;
26853 type TokenType = TokenStruct;
26854 fn new_green(
26855 db: &dyn SyntaxGroup,
26856 leading_trivia: TriviaGreen,
26857 token: <<TerminalStruct as Terminal>::TokenType as TypedSyntaxNode>::Green,
26858 trailing_trivia: TriviaGreen,
26859 ) -> Self::Green {
26860 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
26861 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
26862 TerminalStructGreen(
26863 Arc::new(GreenNode {
26864 kind: SyntaxKind::TerminalStruct,
26865 details: GreenNodeDetails::Node { children, width },
26866 })
26867 .intern(db),
26868 )
26869 }
26870 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26871 self.token(db).text(db)
26872 }
26873}
26874impl TerminalStruct {
26875 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26876 Trivia::from_syntax_node(db, self.children[0].clone())
26877 }
26878 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenStruct {
26879 TokenStruct::from_syntax_node(db, self.children[1].clone())
26880 }
26881 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
26882 Trivia::from_syntax_node(db, self.children[2].clone())
26883 }
26884}
26885#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26886pub struct TerminalStructPtr(pub SyntaxStablePtrId);
26887impl TerminalStructPtr {}
26888impl TypedStablePtr for TerminalStructPtr {
26889 type SyntaxNode = TerminalStruct;
26890 fn untyped(&self) -> SyntaxStablePtrId {
26891 self.0
26892 }
26893 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalStruct {
26894 TerminalStruct::from_syntax_node(db, self.0.lookup(db))
26895 }
26896}
26897impl From<TerminalStructPtr> for SyntaxStablePtrId {
26898 fn from(ptr: TerminalStructPtr) -> Self {
26899 ptr.untyped()
26900 }
26901}
26902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26903pub struct TerminalStructGreen(pub GreenId);
26904impl TypedSyntaxNode for TerminalStruct {
26905 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalStruct);
26906 type StablePtr = TerminalStructPtr;
26907 type Green = TerminalStructGreen;
26908 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
26909 TerminalStructGreen(
26910 Arc::new(GreenNode {
26911 kind: SyntaxKind::TerminalStruct,
26912 details: GreenNodeDetails::Node {
26913 children: vec![
26914 Trivia::missing(db).0,
26915 TokenStruct::missing(db).0,
26916 Trivia::missing(db).0,
26917 ],
26918 width: TextWidth::default(),
26919 },
26920 })
26921 .intern(db),
26922 )
26923 }
26924 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
26925 let kind = node.kind(db);
26926 assert_eq!(
26927 kind,
26928 SyntaxKind::TerminalStruct,
26929 "Unexpected SyntaxKind {:?}. Expected {:?}.",
26930 kind,
26931 SyntaxKind::TerminalStruct
26932 );
26933 let children = db.get_children(node.clone());
26934 Self { node, children }
26935 }
26936 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
26937 let kind = node.kind(db);
26938 if kind == SyntaxKind::TerminalStruct {
26939 Some(Self::from_syntax_node(db, node))
26940 } else {
26941 None
26942 }
26943 }
26944 fn as_syntax_node(&self) -> SyntaxNode {
26945 self.node.clone()
26946 }
26947 fn stable_ptr(&self) -> Self::StablePtr {
26948 TerminalStructPtr(self.node.0.stable_ptr)
26949 }
26950}
26951impl From<&TerminalStruct> for SyntaxStablePtrId {
26952 fn from(node: &TerminalStruct) -> Self {
26953 node.stable_ptr().untyped()
26954 }
26955}
26956#[derive(Clone, Debug, Eq, Hash, PartialEq)]
26957pub struct TokenTrait {
26958 node: SyntaxNode,
26959}
26960impl Token for TokenTrait {
26961 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
26962 TokenTraitGreen(
26963 Arc::new(GreenNode {
26964 kind: SyntaxKind::TokenTrait,
26965 details: GreenNodeDetails::Token(text),
26966 })
26967 .intern(db),
26968 )
26969 }
26970 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26971 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
26972 .clone()
26973 }
26974}
26975#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26976pub struct TokenTraitPtr(pub SyntaxStablePtrId);
26977impl TypedStablePtr for TokenTraitPtr {
26978 type SyntaxNode = TokenTrait;
26979 fn untyped(&self) -> SyntaxStablePtrId {
26980 self.0
26981 }
26982 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrait {
26983 TokenTrait::from_syntax_node(db, self.0.lookup(db))
26984 }
26985}
26986impl From<TokenTraitPtr> for SyntaxStablePtrId {
26987 fn from(ptr: TokenTraitPtr) -> Self {
26988 ptr.untyped()
26989 }
26990}
26991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
26992pub struct TokenTraitGreen(pub GreenId);
26993impl TokenTraitGreen {
26994 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
26995 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
26996 }
26997}
26998impl TypedSyntaxNode for TokenTrait {
26999 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrait);
27000 type StablePtr = TokenTraitPtr;
27001 type Green = TokenTraitGreen;
27002 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27003 TokenTraitGreen(
27004 Arc::new(GreenNode {
27005 kind: SyntaxKind::TokenMissing,
27006 details: GreenNodeDetails::Token("".into()),
27007 })
27008 .intern(db),
27009 )
27010 }
27011 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27012 match node.0.green.lookup_intern(db).details {
27013 GreenNodeDetails::Token(_) => Self { node },
27014 GreenNodeDetails::Node { .. } => {
27015 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrait)
27016 }
27017 }
27018 }
27019 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27020 match node.0.green.lookup_intern(db).details {
27021 GreenNodeDetails::Token(_) => Some(Self { node }),
27022 GreenNodeDetails::Node { .. } => None,
27023 }
27024 }
27025 fn as_syntax_node(&self) -> SyntaxNode {
27026 self.node.clone()
27027 }
27028 fn stable_ptr(&self) -> Self::StablePtr {
27029 TokenTraitPtr(self.node.0.stable_ptr)
27030 }
27031}
27032impl From<&TokenTrait> for SyntaxStablePtrId {
27033 fn from(node: &TokenTrait) -> Self {
27034 node.stable_ptr().untyped()
27035 }
27036}
27037#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27038pub struct TerminalTrait {
27039 node: SyntaxNode,
27040 children: Arc<[SyntaxNode]>,
27041}
27042impl Terminal for TerminalTrait {
27043 const KIND: SyntaxKind = SyntaxKind::TerminalTrait;
27044 type TokenType = TokenTrait;
27045 fn new_green(
27046 db: &dyn SyntaxGroup,
27047 leading_trivia: TriviaGreen,
27048 token: <<TerminalTrait as Terminal>::TokenType as TypedSyntaxNode>::Green,
27049 trailing_trivia: TriviaGreen,
27050 ) -> Self::Green {
27051 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27052 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27053 TerminalTraitGreen(
27054 Arc::new(GreenNode {
27055 kind: SyntaxKind::TerminalTrait,
27056 details: GreenNodeDetails::Node { children, width },
27057 })
27058 .intern(db),
27059 )
27060 }
27061 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27062 self.token(db).text(db)
27063 }
27064}
27065impl TerminalTrait {
27066 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27067 Trivia::from_syntax_node(db, self.children[0].clone())
27068 }
27069 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrait {
27070 TokenTrait::from_syntax_node(db, self.children[1].clone())
27071 }
27072 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27073 Trivia::from_syntax_node(db, self.children[2].clone())
27074 }
27075}
27076#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27077pub struct TerminalTraitPtr(pub SyntaxStablePtrId);
27078impl TerminalTraitPtr {}
27079impl TypedStablePtr for TerminalTraitPtr {
27080 type SyntaxNode = TerminalTrait;
27081 fn untyped(&self) -> SyntaxStablePtrId {
27082 self.0
27083 }
27084 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrait {
27085 TerminalTrait::from_syntax_node(db, self.0.lookup(db))
27086 }
27087}
27088impl From<TerminalTraitPtr> for SyntaxStablePtrId {
27089 fn from(ptr: TerminalTraitPtr) -> Self {
27090 ptr.untyped()
27091 }
27092}
27093#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27094pub struct TerminalTraitGreen(pub GreenId);
27095impl TypedSyntaxNode for TerminalTrait {
27096 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrait);
27097 type StablePtr = TerminalTraitPtr;
27098 type Green = TerminalTraitGreen;
27099 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27100 TerminalTraitGreen(
27101 Arc::new(GreenNode {
27102 kind: SyntaxKind::TerminalTrait,
27103 details: GreenNodeDetails::Node {
27104 children: vec![
27105 Trivia::missing(db).0,
27106 TokenTrait::missing(db).0,
27107 Trivia::missing(db).0,
27108 ],
27109 width: TextWidth::default(),
27110 },
27111 })
27112 .intern(db),
27113 )
27114 }
27115 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27116 let kind = node.kind(db);
27117 assert_eq!(
27118 kind,
27119 SyntaxKind::TerminalTrait,
27120 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27121 kind,
27122 SyntaxKind::TerminalTrait
27123 );
27124 let children = db.get_children(node.clone());
27125 Self { node, children }
27126 }
27127 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27128 let kind = node.kind(db);
27129 if kind == SyntaxKind::TerminalTrait {
27130 Some(Self::from_syntax_node(db, node))
27131 } else {
27132 None
27133 }
27134 }
27135 fn as_syntax_node(&self) -> SyntaxNode {
27136 self.node.clone()
27137 }
27138 fn stable_ptr(&self) -> Self::StablePtr {
27139 TerminalTraitPtr(self.node.0.stable_ptr)
27140 }
27141}
27142impl From<&TerminalTrait> for SyntaxStablePtrId {
27143 fn from(node: &TerminalTrait) -> Self {
27144 node.stable_ptr().untyped()
27145 }
27146}
27147#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27148pub struct TokenTrue {
27149 node: SyntaxNode,
27150}
27151impl Token for TokenTrue {
27152 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27153 TokenTrueGreen(
27154 Arc::new(GreenNode {
27155 kind: SyntaxKind::TokenTrue,
27156 details: GreenNodeDetails::Token(text),
27157 })
27158 .intern(db),
27159 )
27160 }
27161 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27162 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27163 .clone()
27164 }
27165}
27166#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27167pub struct TokenTruePtr(pub SyntaxStablePtrId);
27168impl TypedStablePtr for TokenTruePtr {
27169 type SyntaxNode = TokenTrue;
27170 fn untyped(&self) -> SyntaxStablePtrId {
27171 self.0
27172 }
27173 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenTrue {
27174 TokenTrue::from_syntax_node(db, self.0.lookup(db))
27175 }
27176}
27177impl From<TokenTruePtr> for SyntaxStablePtrId {
27178 fn from(ptr: TokenTruePtr) -> Self {
27179 ptr.untyped()
27180 }
27181}
27182#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27183pub struct TokenTrueGreen(pub GreenId);
27184impl TokenTrueGreen {
27185 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27186 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27187 }
27188}
27189impl TypedSyntaxNode for TokenTrue {
27190 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenTrue);
27191 type StablePtr = TokenTruePtr;
27192 type Green = TokenTrueGreen;
27193 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27194 TokenTrueGreen(
27195 Arc::new(GreenNode {
27196 kind: SyntaxKind::TokenMissing,
27197 details: GreenNodeDetails::Token("".into()),
27198 })
27199 .intern(db),
27200 )
27201 }
27202 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27203 match node.0.green.lookup_intern(db).details {
27204 GreenNodeDetails::Token(_) => Self { node },
27205 GreenNodeDetails::Node { .. } => {
27206 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenTrue)
27207 }
27208 }
27209 }
27210 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27211 match node.0.green.lookup_intern(db).details {
27212 GreenNodeDetails::Token(_) => Some(Self { node }),
27213 GreenNodeDetails::Node { .. } => None,
27214 }
27215 }
27216 fn as_syntax_node(&self) -> SyntaxNode {
27217 self.node.clone()
27218 }
27219 fn stable_ptr(&self) -> Self::StablePtr {
27220 TokenTruePtr(self.node.0.stable_ptr)
27221 }
27222}
27223impl From<&TokenTrue> for SyntaxStablePtrId {
27224 fn from(node: &TokenTrue) -> Self {
27225 node.stable_ptr().untyped()
27226 }
27227}
27228#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27229pub struct TerminalTrue {
27230 node: SyntaxNode,
27231 children: Arc<[SyntaxNode]>,
27232}
27233impl Terminal for TerminalTrue {
27234 const KIND: SyntaxKind = SyntaxKind::TerminalTrue;
27235 type TokenType = TokenTrue;
27236 fn new_green(
27237 db: &dyn SyntaxGroup,
27238 leading_trivia: TriviaGreen,
27239 token: <<TerminalTrue as Terminal>::TokenType as TypedSyntaxNode>::Green,
27240 trailing_trivia: TriviaGreen,
27241 ) -> Self::Green {
27242 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27243 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27244 TerminalTrueGreen(
27245 Arc::new(GreenNode {
27246 kind: SyntaxKind::TerminalTrue,
27247 details: GreenNodeDetails::Node { children, width },
27248 })
27249 .intern(db),
27250 )
27251 }
27252 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27253 self.token(db).text(db)
27254 }
27255}
27256impl TerminalTrue {
27257 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27258 Trivia::from_syntax_node(db, self.children[0].clone())
27259 }
27260 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenTrue {
27261 TokenTrue::from_syntax_node(db, self.children[1].clone())
27262 }
27263 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27264 Trivia::from_syntax_node(db, self.children[2].clone())
27265 }
27266}
27267#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27268pub struct TerminalTruePtr(pub SyntaxStablePtrId);
27269impl TerminalTruePtr {}
27270impl TypedStablePtr for TerminalTruePtr {
27271 type SyntaxNode = TerminalTrue;
27272 fn untyped(&self) -> SyntaxStablePtrId {
27273 self.0
27274 }
27275 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalTrue {
27276 TerminalTrue::from_syntax_node(db, self.0.lookup(db))
27277 }
27278}
27279impl From<TerminalTruePtr> for SyntaxStablePtrId {
27280 fn from(ptr: TerminalTruePtr) -> Self {
27281 ptr.untyped()
27282 }
27283}
27284#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27285pub struct TerminalTrueGreen(pub GreenId);
27286impl TypedSyntaxNode for TerminalTrue {
27287 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalTrue);
27288 type StablePtr = TerminalTruePtr;
27289 type Green = TerminalTrueGreen;
27290 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27291 TerminalTrueGreen(
27292 Arc::new(GreenNode {
27293 kind: SyntaxKind::TerminalTrue,
27294 details: GreenNodeDetails::Node {
27295 children: vec![
27296 Trivia::missing(db).0,
27297 TokenTrue::missing(db).0,
27298 Trivia::missing(db).0,
27299 ],
27300 width: TextWidth::default(),
27301 },
27302 })
27303 .intern(db),
27304 )
27305 }
27306 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27307 let kind = node.kind(db);
27308 assert_eq!(
27309 kind,
27310 SyntaxKind::TerminalTrue,
27311 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27312 kind,
27313 SyntaxKind::TerminalTrue
27314 );
27315 let children = db.get_children(node.clone());
27316 Self { node, children }
27317 }
27318 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27319 let kind = node.kind(db);
27320 if kind == SyntaxKind::TerminalTrue { Some(Self::from_syntax_node(db, node)) } else { None }
27321 }
27322 fn as_syntax_node(&self) -> SyntaxNode {
27323 self.node.clone()
27324 }
27325 fn stable_ptr(&self) -> Self::StablePtr {
27326 TerminalTruePtr(self.node.0.stable_ptr)
27327 }
27328}
27329impl From<&TerminalTrue> for SyntaxStablePtrId {
27330 fn from(node: &TerminalTrue) -> Self {
27331 node.stable_ptr().untyped()
27332 }
27333}
27334#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27335pub struct TokenType {
27336 node: SyntaxNode,
27337}
27338impl Token for TokenType {
27339 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27340 TokenTypeGreen(
27341 Arc::new(GreenNode {
27342 kind: SyntaxKind::TokenType,
27343 details: GreenNodeDetails::Token(text),
27344 })
27345 .intern(db),
27346 )
27347 }
27348 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27349 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27350 .clone()
27351 }
27352}
27353#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27354pub struct TokenTypePtr(pub SyntaxStablePtrId);
27355impl TypedStablePtr for TokenTypePtr {
27356 type SyntaxNode = TokenType;
27357 fn untyped(&self) -> SyntaxStablePtrId {
27358 self.0
27359 }
27360 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenType {
27361 TokenType::from_syntax_node(db, self.0.lookup(db))
27362 }
27363}
27364impl From<TokenTypePtr> for SyntaxStablePtrId {
27365 fn from(ptr: TokenTypePtr) -> Self {
27366 ptr.untyped()
27367 }
27368}
27369#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27370pub struct TokenTypeGreen(pub GreenId);
27371impl TokenTypeGreen {
27372 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27373 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27374 }
27375}
27376impl TypedSyntaxNode for TokenType {
27377 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenType);
27378 type StablePtr = TokenTypePtr;
27379 type Green = TokenTypeGreen;
27380 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27381 TokenTypeGreen(
27382 Arc::new(GreenNode {
27383 kind: SyntaxKind::TokenMissing,
27384 details: GreenNodeDetails::Token("".into()),
27385 })
27386 .intern(db),
27387 )
27388 }
27389 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27390 match node.0.green.lookup_intern(db).details {
27391 GreenNodeDetails::Token(_) => Self { node },
27392 GreenNodeDetails::Node { .. } => {
27393 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenType)
27394 }
27395 }
27396 }
27397 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27398 match node.0.green.lookup_intern(db).details {
27399 GreenNodeDetails::Token(_) => Some(Self { node }),
27400 GreenNodeDetails::Node { .. } => None,
27401 }
27402 }
27403 fn as_syntax_node(&self) -> SyntaxNode {
27404 self.node.clone()
27405 }
27406 fn stable_ptr(&self) -> Self::StablePtr {
27407 TokenTypePtr(self.node.0.stable_ptr)
27408 }
27409}
27410impl From<&TokenType> for SyntaxStablePtrId {
27411 fn from(node: &TokenType) -> Self {
27412 node.stable_ptr().untyped()
27413 }
27414}
27415#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27416pub struct TerminalType {
27417 node: SyntaxNode,
27418 children: Arc<[SyntaxNode]>,
27419}
27420impl Terminal for TerminalType {
27421 const KIND: SyntaxKind = SyntaxKind::TerminalType;
27422 type TokenType = TokenType;
27423 fn new_green(
27424 db: &dyn SyntaxGroup,
27425 leading_trivia: TriviaGreen,
27426 token: <<TerminalType as Terminal>::TokenType as TypedSyntaxNode>::Green,
27427 trailing_trivia: TriviaGreen,
27428 ) -> Self::Green {
27429 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27430 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27431 TerminalTypeGreen(
27432 Arc::new(GreenNode {
27433 kind: SyntaxKind::TerminalType,
27434 details: GreenNodeDetails::Node { children, width },
27435 })
27436 .intern(db),
27437 )
27438 }
27439 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27440 self.token(db).text(db)
27441 }
27442}
27443impl TerminalType {
27444 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27445 Trivia::from_syntax_node(db, self.children[0].clone())
27446 }
27447 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenType {
27448 TokenType::from_syntax_node(db, self.children[1].clone())
27449 }
27450 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27451 Trivia::from_syntax_node(db, self.children[2].clone())
27452 }
27453}
27454#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27455pub struct TerminalTypePtr(pub SyntaxStablePtrId);
27456impl TerminalTypePtr {}
27457impl TypedStablePtr for TerminalTypePtr {
27458 type SyntaxNode = TerminalType;
27459 fn untyped(&self) -> SyntaxStablePtrId {
27460 self.0
27461 }
27462 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalType {
27463 TerminalType::from_syntax_node(db, self.0.lookup(db))
27464 }
27465}
27466impl From<TerminalTypePtr> for SyntaxStablePtrId {
27467 fn from(ptr: TerminalTypePtr) -> Self {
27468 ptr.untyped()
27469 }
27470}
27471#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27472pub struct TerminalTypeGreen(pub GreenId);
27473impl TypedSyntaxNode for TerminalType {
27474 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalType);
27475 type StablePtr = TerminalTypePtr;
27476 type Green = TerminalTypeGreen;
27477 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27478 TerminalTypeGreen(
27479 Arc::new(GreenNode {
27480 kind: SyntaxKind::TerminalType,
27481 details: GreenNodeDetails::Node {
27482 children: vec![
27483 Trivia::missing(db).0,
27484 TokenType::missing(db).0,
27485 Trivia::missing(db).0,
27486 ],
27487 width: TextWidth::default(),
27488 },
27489 })
27490 .intern(db),
27491 )
27492 }
27493 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27494 let kind = node.kind(db);
27495 assert_eq!(
27496 kind,
27497 SyntaxKind::TerminalType,
27498 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27499 kind,
27500 SyntaxKind::TerminalType
27501 );
27502 let children = db.get_children(node.clone());
27503 Self { node, children }
27504 }
27505 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27506 let kind = node.kind(db);
27507 if kind == SyntaxKind::TerminalType { Some(Self::from_syntax_node(db, node)) } else { None }
27508 }
27509 fn as_syntax_node(&self) -> SyntaxNode {
27510 self.node.clone()
27511 }
27512 fn stable_ptr(&self) -> Self::StablePtr {
27513 TerminalTypePtr(self.node.0.stable_ptr)
27514 }
27515}
27516impl From<&TerminalType> for SyntaxStablePtrId {
27517 fn from(node: &TerminalType) -> Self {
27518 node.stable_ptr().untyped()
27519 }
27520}
27521#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27522pub struct TokenUse {
27523 node: SyntaxNode,
27524}
27525impl Token for TokenUse {
27526 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27527 TokenUseGreen(
27528 Arc::new(GreenNode {
27529 kind: SyntaxKind::TokenUse,
27530 details: GreenNodeDetails::Token(text),
27531 })
27532 .intern(db),
27533 )
27534 }
27535 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27536 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27537 .clone()
27538 }
27539}
27540#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27541pub struct TokenUsePtr(pub SyntaxStablePtrId);
27542impl TypedStablePtr for TokenUsePtr {
27543 type SyntaxNode = TokenUse;
27544 fn untyped(&self) -> SyntaxStablePtrId {
27545 self.0
27546 }
27547 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUse {
27548 TokenUse::from_syntax_node(db, self.0.lookup(db))
27549 }
27550}
27551impl From<TokenUsePtr> for SyntaxStablePtrId {
27552 fn from(ptr: TokenUsePtr) -> Self {
27553 ptr.untyped()
27554 }
27555}
27556#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27557pub struct TokenUseGreen(pub GreenId);
27558impl TokenUseGreen {
27559 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27560 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27561 }
27562}
27563impl TypedSyntaxNode for TokenUse {
27564 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUse);
27565 type StablePtr = TokenUsePtr;
27566 type Green = TokenUseGreen;
27567 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27568 TokenUseGreen(
27569 Arc::new(GreenNode {
27570 kind: SyntaxKind::TokenMissing,
27571 details: GreenNodeDetails::Token("".into()),
27572 })
27573 .intern(db),
27574 )
27575 }
27576 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27577 match node.0.green.lookup_intern(db).details {
27578 GreenNodeDetails::Token(_) => Self { node },
27579 GreenNodeDetails::Node { .. } => {
27580 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUse)
27581 }
27582 }
27583 }
27584 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27585 match node.0.green.lookup_intern(db).details {
27586 GreenNodeDetails::Token(_) => Some(Self { node }),
27587 GreenNodeDetails::Node { .. } => None,
27588 }
27589 }
27590 fn as_syntax_node(&self) -> SyntaxNode {
27591 self.node.clone()
27592 }
27593 fn stable_ptr(&self) -> Self::StablePtr {
27594 TokenUsePtr(self.node.0.stable_ptr)
27595 }
27596}
27597impl From<&TokenUse> for SyntaxStablePtrId {
27598 fn from(node: &TokenUse) -> Self {
27599 node.stable_ptr().untyped()
27600 }
27601}
27602#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27603pub struct TerminalUse {
27604 node: SyntaxNode,
27605 children: Arc<[SyntaxNode]>,
27606}
27607impl Terminal for TerminalUse {
27608 const KIND: SyntaxKind = SyntaxKind::TerminalUse;
27609 type TokenType = TokenUse;
27610 fn new_green(
27611 db: &dyn SyntaxGroup,
27612 leading_trivia: TriviaGreen,
27613 token: <<TerminalUse as Terminal>::TokenType as TypedSyntaxNode>::Green,
27614 trailing_trivia: TriviaGreen,
27615 ) -> Self::Green {
27616 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27617 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27618 TerminalUseGreen(
27619 Arc::new(GreenNode {
27620 kind: SyntaxKind::TerminalUse,
27621 details: GreenNodeDetails::Node { children, width },
27622 })
27623 .intern(db),
27624 )
27625 }
27626 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27627 self.token(db).text(db)
27628 }
27629}
27630impl TerminalUse {
27631 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27632 Trivia::from_syntax_node(db, self.children[0].clone())
27633 }
27634 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUse {
27635 TokenUse::from_syntax_node(db, self.children[1].clone())
27636 }
27637 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27638 Trivia::from_syntax_node(db, self.children[2].clone())
27639 }
27640}
27641#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27642pub struct TerminalUsePtr(pub SyntaxStablePtrId);
27643impl TerminalUsePtr {}
27644impl TypedStablePtr for TerminalUsePtr {
27645 type SyntaxNode = TerminalUse;
27646 fn untyped(&self) -> SyntaxStablePtrId {
27647 self.0
27648 }
27649 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUse {
27650 TerminalUse::from_syntax_node(db, self.0.lookup(db))
27651 }
27652}
27653impl From<TerminalUsePtr> for SyntaxStablePtrId {
27654 fn from(ptr: TerminalUsePtr) -> Self {
27655 ptr.untyped()
27656 }
27657}
27658#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27659pub struct TerminalUseGreen(pub GreenId);
27660impl TypedSyntaxNode for TerminalUse {
27661 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUse);
27662 type StablePtr = TerminalUsePtr;
27663 type Green = TerminalUseGreen;
27664 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27665 TerminalUseGreen(
27666 Arc::new(GreenNode {
27667 kind: SyntaxKind::TerminalUse,
27668 details: GreenNodeDetails::Node {
27669 children: vec![
27670 Trivia::missing(db).0,
27671 TokenUse::missing(db).0,
27672 Trivia::missing(db).0,
27673 ],
27674 width: TextWidth::default(),
27675 },
27676 })
27677 .intern(db),
27678 )
27679 }
27680 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27681 let kind = node.kind(db);
27682 assert_eq!(
27683 kind,
27684 SyntaxKind::TerminalUse,
27685 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27686 kind,
27687 SyntaxKind::TerminalUse
27688 );
27689 let children = db.get_children(node.clone());
27690 Self { node, children }
27691 }
27692 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27693 let kind = node.kind(db);
27694 if kind == SyntaxKind::TerminalUse { Some(Self::from_syntax_node(db, node)) } else { None }
27695 }
27696 fn as_syntax_node(&self) -> SyntaxNode {
27697 self.node.clone()
27698 }
27699 fn stable_ptr(&self) -> Self::StablePtr {
27700 TerminalUsePtr(self.node.0.stable_ptr)
27701 }
27702}
27703impl From<&TerminalUse> for SyntaxStablePtrId {
27704 fn from(node: &TerminalUse) -> Self {
27705 node.stable_ptr().untyped()
27706 }
27707}
27708#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27709pub struct TokenPub {
27710 node: SyntaxNode,
27711}
27712impl Token for TokenPub {
27713 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27714 TokenPubGreen(
27715 Arc::new(GreenNode {
27716 kind: SyntaxKind::TokenPub,
27717 details: GreenNodeDetails::Token(text),
27718 })
27719 .intern(db),
27720 )
27721 }
27722 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27723 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27724 .clone()
27725 }
27726}
27727#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27728pub struct TokenPubPtr(pub SyntaxStablePtrId);
27729impl TypedStablePtr for TokenPubPtr {
27730 type SyntaxNode = TokenPub;
27731 fn untyped(&self) -> SyntaxStablePtrId {
27732 self.0
27733 }
27734 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPub {
27735 TokenPub::from_syntax_node(db, self.0.lookup(db))
27736 }
27737}
27738impl From<TokenPubPtr> for SyntaxStablePtrId {
27739 fn from(ptr: TokenPubPtr) -> Self {
27740 ptr.untyped()
27741 }
27742}
27743#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27744pub struct TokenPubGreen(pub GreenId);
27745impl TokenPubGreen {
27746 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27747 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27748 }
27749}
27750impl TypedSyntaxNode for TokenPub {
27751 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPub);
27752 type StablePtr = TokenPubPtr;
27753 type Green = TokenPubGreen;
27754 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27755 TokenPubGreen(
27756 Arc::new(GreenNode {
27757 kind: SyntaxKind::TokenMissing,
27758 details: GreenNodeDetails::Token("".into()),
27759 })
27760 .intern(db),
27761 )
27762 }
27763 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27764 match node.0.green.lookup_intern(db).details {
27765 GreenNodeDetails::Token(_) => Self { node },
27766 GreenNodeDetails::Node { .. } => {
27767 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPub)
27768 }
27769 }
27770 }
27771 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27772 match node.0.green.lookup_intern(db).details {
27773 GreenNodeDetails::Token(_) => Some(Self { node }),
27774 GreenNodeDetails::Node { .. } => None,
27775 }
27776 }
27777 fn as_syntax_node(&self) -> SyntaxNode {
27778 self.node.clone()
27779 }
27780 fn stable_ptr(&self) -> Self::StablePtr {
27781 TokenPubPtr(self.node.0.stable_ptr)
27782 }
27783}
27784impl From<&TokenPub> for SyntaxStablePtrId {
27785 fn from(node: &TokenPub) -> Self {
27786 node.stable_ptr().untyped()
27787 }
27788}
27789#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27790pub struct TerminalPub {
27791 node: SyntaxNode,
27792 children: Arc<[SyntaxNode]>,
27793}
27794impl Terminal for TerminalPub {
27795 const KIND: SyntaxKind = SyntaxKind::TerminalPub;
27796 type TokenType = TokenPub;
27797 fn new_green(
27798 db: &dyn SyntaxGroup,
27799 leading_trivia: TriviaGreen,
27800 token: <<TerminalPub as Terminal>::TokenType as TypedSyntaxNode>::Green,
27801 trailing_trivia: TriviaGreen,
27802 ) -> Self::Green {
27803 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27804 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27805 TerminalPubGreen(
27806 Arc::new(GreenNode {
27807 kind: SyntaxKind::TerminalPub,
27808 details: GreenNodeDetails::Node { children, width },
27809 })
27810 .intern(db),
27811 )
27812 }
27813 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27814 self.token(db).text(db)
27815 }
27816}
27817impl TerminalPub {
27818 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27819 Trivia::from_syntax_node(db, self.children[0].clone())
27820 }
27821 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPub {
27822 TokenPub::from_syntax_node(db, self.children[1].clone())
27823 }
27824 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
27825 Trivia::from_syntax_node(db, self.children[2].clone())
27826 }
27827}
27828#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27829pub struct TerminalPubPtr(pub SyntaxStablePtrId);
27830impl TerminalPubPtr {}
27831impl TypedStablePtr for TerminalPubPtr {
27832 type SyntaxNode = TerminalPub;
27833 fn untyped(&self) -> SyntaxStablePtrId {
27834 self.0
27835 }
27836 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPub {
27837 TerminalPub::from_syntax_node(db, self.0.lookup(db))
27838 }
27839}
27840impl From<TerminalPubPtr> for SyntaxStablePtrId {
27841 fn from(ptr: TerminalPubPtr) -> Self {
27842 ptr.untyped()
27843 }
27844}
27845#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27846pub struct TerminalPubGreen(pub GreenId);
27847impl TypedSyntaxNode for TerminalPub {
27848 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPub);
27849 type StablePtr = TerminalPubPtr;
27850 type Green = TerminalPubGreen;
27851 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27852 TerminalPubGreen(
27853 Arc::new(GreenNode {
27854 kind: SyntaxKind::TerminalPub,
27855 details: GreenNodeDetails::Node {
27856 children: vec![
27857 Trivia::missing(db).0,
27858 TokenPub::missing(db).0,
27859 Trivia::missing(db).0,
27860 ],
27861 width: TextWidth::default(),
27862 },
27863 })
27864 .intern(db),
27865 )
27866 }
27867 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27868 let kind = node.kind(db);
27869 assert_eq!(
27870 kind,
27871 SyntaxKind::TerminalPub,
27872 "Unexpected SyntaxKind {:?}. Expected {:?}.",
27873 kind,
27874 SyntaxKind::TerminalPub
27875 );
27876 let children = db.get_children(node.clone());
27877 Self { node, children }
27878 }
27879 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27880 let kind = node.kind(db);
27881 if kind == SyntaxKind::TerminalPub { Some(Self::from_syntax_node(db, node)) } else { None }
27882 }
27883 fn as_syntax_node(&self) -> SyntaxNode {
27884 self.node.clone()
27885 }
27886 fn stable_ptr(&self) -> Self::StablePtr {
27887 TerminalPubPtr(self.node.0.stable_ptr)
27888 }
27889}
27890impl From<&TerminalPub> for SyntaxStablePtrId {
27891 fn from(node: &TerminalPub) -> Self {
27892 node.stable_ptr().untyped()
27893 }
27894}
27895#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27896pub struct TokenAnd {
27897 node: SyntaxNode,
27898}
27899impl Token for TokenAnd {
27900 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
27901 TokenAndGreen(
27902 Arc::new(GreenNode {
27903 kind: SyntaxKind::TokenAnd,
27904 details: GreenNodeDetails::Token(text),
27905 })
27906 .intern(db),
27907 )
27908 }
27909 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27910 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
27911 .clone()
27912 }
27913}
27914#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27915pub struct TokenAndPtr(pub SyntaxStablePtrId);
27916impl TypedStablePtr for TokenAndPtr {
27917 type SyntaxNode = TokenAnd;
27918 fn untyped(&self) -> SyntaxStablePtrId {
27919 self.0
27920 }
27921 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAnd {
27922 TokenAnd::from_syntax_node(db, self.0.lookup(db))
27923 }
27924}
27925impl From<TokenAndPtr> for SyntaxStablePtrId {
27926 fn from(ptr: TokenAndPtr) -> Self {
27927 ptr.untyped()
27928 }
27929}
27930#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
27931pub struct TokenAndGreen(pub GreenId);
27932impl TokenAndGreen {
27933 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
27934 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
27935 }
27936}
27937impl TypedSyntaxNode for TokenAnd {
27938 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAnd);
27939 type StablePtr = TokenAndPtr;
27940 type Green = TokenAndGreen;
27941 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
27942 TokenAndGreen(
27943 Arc::new(GreenNode {
27944 kind: SyntaxKind::TokenMissing,
27945 details: GreenNodeDetails::Token("".into()),
27946 })
27947 .intern(db),
27948 )
27949 }
27950 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
27951 match node.0.green.lookup_intern(db).details {
27952 GreenNodeDetails::Token(_) => Self { node },
27953 GreenNodeDetails::Node { .. } => {
27954 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAnd)
27955 }
27956 }
27957 }
27958 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
27959 match node.0.green.lookup_intern(db).details {
27960 GreenNodeDetails::Token(_) => Some(Self { node }),
27961 GreenNodeDetails::Node { .. } => None,
27962 }
27963 }
27964 fn as_syntax_node(&self) -> SyntaxNode {
27965 self.node.clone()
27966 }
27967 fn stable_ptr(&self) -> Self::StablePtr {
27968 TokenAndPtr(self.node.0.stable_ptr)
27969 }
27970}
27971impl From<&TokenAnd> for SyntaxStablePtrId {
27972 fn from(node: &TokenAnd) -> Self {
27973 node.stable_ptr().untyped()
27974 }
27975}
27976#[derive(Clone, Debug, Eq, Hash, PartialEq)]
27977pub struct TerminalAnd {
27978 node: SyntaxNode,
27979 children: Arc<[SyntaxNode]>,
27980}
27981impl Terminal for TerminalAnd {
27982 const KIND: SyntaxKind = SyntaxKind::TerminalAnd;
27983 type TokenType = TokenAnd;
27984 fn new_green(
27985 db: &dyn SyntaxGroup,
27986 leading_trivia: TriviaGreen,
27987 token: <<TerminalAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
27988 trailing_trivia: TriviaGreen,
27989 ) -> Self::Green {
27990 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
27991 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
27992 TerminalAndGreen(
27993 Arc::new(GreenNode {
27994 kind: SyntaxKind::TerminalAnd,
27995 details: GreenNodeDetails::Node { children, width },
27996 })
27997 .intern(db),
27998 )
27999 }
28000 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28001 self.token(db).text(db)
28002 }
28003}
28004impl TerminalAnd {
28005 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28006 Trivia::from_syntax_node(db, self.children[0].clone())
28007 }
28008 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAnd {
28009 TokenAnd::from_syntax_node(db, self.children[1].clone())
28010 }
28011 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28012 Trivia::from_syntax_node(db, self.children[2].clone())
28013 }
28014}
28015#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28016pub struct TerminalAndPtr(pub SyntaxStablePtrId);
28017impl TerminalAndPtr {}
28018impl TypedStablePtr for TerminalAndPtr {
28019 type SyntaxNode = TerminalAnd;
28020 fn untyped(&self) -> SyntaxStablePtrId {
28021 self.0
28022 }
28023 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAnd {
28024 TerminalAnd::from_syntax_node(db, self.0.lookup(db))
28025 }
28026}
28027impl From<TerminalAndPtr> for SyntaxStablePtrId {
28028 fn from(ptr: TerminalAndPtr) -> Self {
28029 ptr.untyped()
28030 }
28031}
28032#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28033pub struct TerminalAndGreen(pub GreenId);
28034impl TypedSyntaxNode for TerminalAnd {
28035 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAnd);
28036 type StablePtr = TerminalAndPtr;
28037 type Green = TerminalAndGreen;
28038 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28039 TerminalAndGreen(
28040 Arc::new(GreenNode {
28041 kind: SyntaxKind::TerminalAnd,
28042 details: GreenNodeDetails::Node {
28043 children: vec![
28044 Trivia::missing(db).0,
28045 TokenAnd::missing(db).0,
28046 Trivia::missing(db).0,
28047 ],
28048 width: TextWidth::default(),
28049 },
28050 })
28051 .intern(db),
28052 )
28053 }
28054 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28055 let kind = node.kind(db);
28056 assert_eq!(
28057 kind,
28058 SyntaxKind::TerminalAnd,
28059 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28060 kind,
28061 SyntaxKind::TerminalAnd
28062 );
28063 let children = db.get_children(node.clone());
28064 Self { node, children }
28065 }
28066 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28067 let kind = node.kind(db);
28068 if kind == SyntaxKind::TerminalAnd { Some(Self::from_syntax_node(db, node)) } else { None }
28069 }
28070 fn as_syntax_node(&self) -> SyntaxNode {
28071 self.node.clone()
28072 }
28073 fn stable_ptr(&self) -> Self::StablePtr {
28074 TerminalAndPtr(self.node.0.stable_ptr)
28075 }
28076}
28077impl From<&TerminalAnd> for SyntaxStablePtrId {
28078 fn from(node: &TerminalAnd) -> Self {
28079 node.stable_ptr().untyped()
28080 }
28081}
28082#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28083pub struct TokenAndAnd {
28084 node: SyntaxNode,
28085}
28086impl Token for TokenAndAnd {
28087 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28088 TokenAndAndGreen(
28089 Arc::new(GreenNode {
28090 kind: SyntaxKind::TokenAndAnd,
28091 details: GreenNodeDetails::Token(text),
28092 })
28093 .intern(db),
28094 )
28095 }
28096 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28097 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28098 .clone()
28099 }
28100}
28101#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28102pub struct TokenAndAndPtr(pub SyntaxStablePtrId);
28103impl TypedStablePtr for TokenAndAndPtr {
28104 type SyntaxNode = TokenAndAnd;
28105 fn untyped(&self) -> SyntaxStablePtrId {
28106 self.0
28107 }
28108 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
28109 TokenAndAnd::from_syntax_node(db, self.0.lookup(db))
28110 }
28111}
28112impl From<TokenAndAndPtr> for SyntaxStablePtrId {
28113 fn from(ptr: TokenAndAndPtr) -> Self {
28114 ptr.untyped()
28115 }
28116}
28117#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28118pub struct TokenAndAndGreen(pub GreenId);
28119impl TokenAndAndGreen {
28120 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28121 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28122 }
28123}
28124impl TypedSyntaxNode for TokenAndAnd {
28125 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAndAnd);
28126 type StablePtr = TokenAndAndPtr;
28127 type Green = TokenAndAndGreen;
28128 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28129 TokenAndAndGreen(
28130 Arc::new(GreenNode {
28131 kind: SyntaxKind::TokenMissing,
28132 details: GreenNodeDetails::Token("".into()),
28133 })
28134 .intern(db),
28135 )
28136 }
28137 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28138 match node.0.green.lookup_intern(db).details {
28139 GreenNodeDetails::Token(_) => Self { node },
28140 GreenNodeDetails::Node { .. } => {
28141 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAndAnd)
28142 }
28143 }
28144 }
28145 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28146 match node.0.green.lookup_intern(db).details {
28147 GreenNodeDetails::Token(_) => Some(Self { node }),
28148 GreenNodeDetails::Node { .. } => None,
28149 }
28150 }
28151 fn as_syntax_node(&self) -> SyntaxNode {
28152 self.node.clone()
28153 }
28154 fn stable_ptr(&self) -> Self::StablePtr {
28155 TokenAndAndPtr(self.node.0.stable_ptr)
28156 }
28157}
28158impl From<&TokenAndAnd> for SyntaxStablePtrId {
28159 fn from(node: &TokenAndAnd) -> Self {
28160 node.stable_ptr().untyped()
28161 }
28162}
28163#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28164pub struct TerminalAndAnd {
28165 node: SyntaxNode,
28166 children: Arc<[SyntaxNode]>,
28167}
28168impl Terminal for TerminalAndAnd {
28169 const KIND: SyntaxKind = SyntaxKind::TerminalAndAnd;
28170 type TokenType = TokenAndAnd;
28171 fn new_green(
28172 db: &dyn SyntaxGroup,
28173 leading_trivia: TriviaGreen,
28174 token: <<TerminalAndAnd as Terminal>::TokenType as TypedSyntaxNode>::Green,
28175 trailing_trivia: TriviaGreen,
28176 ) -> Self::Green {
28177 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28178 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28179 TerminalAndAndGreen(
28180 Arc::new(GreenNode {
28181 kind: SyntaxKind::TerminalAndAnd,
28182 details: GreenNodeDetails::Node { children, width },
28183 })
28184 .intern(db),
28185 )
28186 }
28187 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28188 self.token(db).text(db)
28189 }
28190}
28191impl TerminalAndAnd {
28192 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28193 Trivia::from_syntax_node(db, self.children[0].clone())
28194 }
28195 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAndAnd {
28196 TokenAndAnd::from_syntax_node(db, self.children[1].clone())
28197 }
28198 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28199 Trivia::from_syntax_node(db, self.children[2].clone())
28200 }
28201}
28202#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28203pub struct TerminalAndAndPtr(pub SyntaxStablePtrId);
28204impl TerminalAndAndPtr {}
28205impl TypedStablePtr for TerminalAndAndPtr {
28206 type SyntaxNode = TerminalAndAnd;
28207 fn untyped(&self) -> SyntaxStablePtrId {
28208 self.0
28209 }
28210 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAndAnd {
28211 TerminalAndAnd::from_syntax_node(db, self.0.lookup(db))
28212 }
28213}
28214impl From<TerminalAndAndPtr> for SyntaxStablePtrId {
28215 fn from(ptr: TerminalAndAndPtr) -> Self {
28216 ptr.untyped()
28217 }
28218}
28219#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28220pub struct TerminalAndAndGreen(pub GreenId);
28221impl TypedSyntaxNode for TerminalAndAnd {
28222 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAndAnd);
28223 type StablePtr = TerminalAndAndPtr;
28224 type Green = TerminalAndAndGreen;
28225 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28226 TerminalAndAndGreen(
28227 Arc::new(GreenNode {
28228 kind: SyntaxKind::TerminalAndAnd,
28229 details: GreenNodeDetails::Node {
28230 children: vec![
28231 Trivia::missing(db).0,
28232 TokenAndAnd::missing(db).0,
28233 Trivia::missing(db).0,
28234 ],
28235 width: TextWidth::default(),
28236 },
28237 })
28238 .intern(db),
28239 )
28240 }
28241 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28242 let kind = node.kind(db);
28243 assert_eq!(
28244 kind,
28245 SyntaxKind::TerminalAndAnd,
28246 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28247 kind,
28248 SyntaxKind::TerminalAndAnd
28249 );
28250 let children = db.get_children(node.clone());
28251 Self { node, children }
28252 }
28253 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28254 let kind = node.kind(db);
28255 if kind == SyntaxKind::TerminalAndAnd {
28256 Some(Self::from_syntax_node(db, node))
28257 } else {
28258 None
28259 }
28260 }
28261 fn as_syntax_node(&self) -> SyntaxNode {
28262 self.node.clone()
28263 }
28264 fn stable_ptr(&self) -> Self::StablePtr {
28265 TerminalAndAndPtr(self.node.0.stable_ptr)
28266 }
28267}
28268impl From<&TerminalAndAnd> for SyntaxStablePtrId {
28269 fn from(node: &TerminalAndAnd) -> Self {
28270 node.stable_ptr().untyped()
28271 }
28272}
28273#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28274pub struct TokenArrow {
28275 node: SyntaxNode,
28276}
28277impl Token for TokenArrow {
28278 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28279 TokenArrowGreen(
28280 Arc::new(GreenNode {
28281 kind: SyntaxKind::TokenArrow,
28282 details: GreenNodeDetails::Token(text),
28283 })
28284 .intern(db),
28285 )
28286 }
28287 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28288 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28289 .clone()
28290 }
28291}
28292#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28293pub struct TokenArrowPtr(pub SyntaxStablePtrId);
28294impl TypedStablePtr for TokenArrowPtr {
28295 type SyntaxNode = TokenArrow;
28296 fn untyped(&self) -> SyntaxStablePtrId {
28297 self.0
28298 }
28299 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenArrow {
28300 TokenArrow::from_syntax_node(db, self.0.lookup(db))
28301 }
28302}
28303impl From<TokenArrowPtr> for SyntaxStablePtrId {
28304 fn from(ptr: TokenArrowPtr) -> Self {
28305 ptr.untyped()
28306 }
28307}
28308#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28309pub struct TokenArrowGreen(pub GreenId);
28310impl TokenArrowGreen {
28311 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28312 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28313 }
28314}
28315impl TypedSyntaxNode for TokenArrow {
28316 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenArrow);
28317 type StablePtr = TokenArrowPtr;
28318 type Green = TokenArrowGreen;
28319 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28320 TokenArrowGreen(
28321 Arc::new(GreenNode {
28322 kind: SyntaxKind::TokenMissing,
28323 details: GreenNodeDetails::Token("".into()),
28324 })
28325 .intern(db),
28326 )
28327 }
28328 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28329 match node.0.green.lookup_intern(db).details {
28330 GreenNodeDetails::Token(_) => Self { node },
28331 GreenNodeDetails::Node { .. } => {
28332 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenArrow)
28333 }
28334 }
28335 }
28336 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28337 match node.0.green.lookup_intern(db).details {
28338 GreenNodeDetails::Token(_) => Some(Self { node }),
28339 GreenNodeDetails::Node { .. } => None,
28340 }
28341 }
28342 fn as_syntax_node(&self) -> SyntaxNode {
28343 self.node.clone()
28344 }
28345 fn stable_ptr(&self) -> Self::StablePtr {
28346 TokenArrowPtr(self.node.0.stable_ptr)
28347 }
28348}
28349impl From<&TokenArrow> for SyntaxStablePtrId {
28350 fn from(node: &TokenArrow) -> Self {
28351 node.stable_ptr().untyped()
28352 }
28353}
28354#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28355pub struct TerminalArrow {
28356 node: SyntaxNode,
28357 children: Arc<[SyntaxNode]>,
28358}
28359impl Terminal for TerminalArrow {
28360 const KIND: SyntaxKind = SyntaxKind::TerminalArrow;
28361 type TokenType = TokenArrow;
28362 fn new_green(
28363 db: &dyn SyntaxGroup,
28364 leading_trivia: TriviaGreen,
28365 token: <<TerminalArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
28366 trailing_trivia: TriviaGreen,
28367 ) -> Self::Green {
28368 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28369 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28370 TerminalArrowGreen(
28371 Arc::new(GreenNode {
28372 kind: SyntaxKind::TerminalArrow,
28373 details: GreenNodeDetails::Node { children, width },
28374 })
28375 .intern(db),
28376 )
28377 }
28378 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28379 self.token(db).text(db)
28380 }
28381}
28382impl TerminalArrow {
28383 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28384 Trivia::from_syntax_node(db, self.children[0].clone())
28385 }
28386 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenArrow {
28387 TokenArrow::from_syntax_node(db, self.children[1].clone())
28388 }
28389 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28390 Trivia::from_syntax_node(db, self.children[2].clone())
28391 }
28392}
28393#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28394pub struct TerminalArrowPtr(pub SyntaxStablePtrId);
28395impl TerminalArrowPtr {}
28396impl TypedStablePtr for TerminalArrowPtr {
28397 type SyntaxNode = TerminalArrow;
28398 fn untyped(&self) -> SyntaxStablePtrId {
28399 self.0
28400 }
28401 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalArrow {
28402 TerminalArrow::from_syntax_node(db, self.0.lookup(db))
28403 }
28404}
28405impl From<TerminalArrowPtr> for SyntaxStablePtrId {
28406 fn from(ptr: TerminalArrowPtr) -> Self {
28407 ptr.untyped()
28408 }
28409}
28410#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28411pub struct TerminalArrowGreen(pub GreenId);
28412impl TypedSyntaxNode for TerminalArrow {
28413 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalArrow);
28414 type StablePtr = TerminalArrowPtr;
28415 type Green = TerminalArrowGreen;
28416 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28417 TerminalArrowGreen(
28418 Arc::new(GreenNode {
28419 kind: SyntaxKind::TerminalArrow,
28420 details: GreenNodeDetails::Node {
28421 children: vec![
28422 Trivia::missing(db).0,
28423 TokenArrow::missing(db).0,
28424 Trivia::missing(db).0,
28425 ],
28426 width: TextWidth::default(),
28427 },
28428 })
28429 .intern(db),
28430 )
28431 }
28432 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28433 let kind = node.kind(db);
28434 assert_eq!(
28435 kind,
28436 SyntaxKind::TerminalArrow,
28437 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28438 kind,
28439 SyntaxKind::TerminalArrow
28440 );
28441 let children = db.get_children(node.clone());
28442 Self { node, children }
28443 }
28444 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28445 let kind = node.kind(db);
28446 if kind == SyntaxKind::TerminalArrow {
28447 Some(Self::from_syntax_node(db, node))
28448 } else {
28449 None
28450 }
28451 }
28452 fn as_syntax_node(&self) -> SyntaxNode {
28453 self.node.clone()
28454 }
28455 fn stable_ptr(&self) -> Self::StablePtr {
28456 TerminalArrowPtr(self.node.0.stable_ptr)
28457 }
28458}
28459impl From<&TerminalArrow> for SyntaxStablePtrId {
28460 fn from(node: &TerminalArrow) -> Self {
28461 node.stable_ptr().untyped()
28462 }
28463}
28464#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28465pub struct TokenAt {
28466 node: SyntaxNode,
28467}
28468impl Token for TokenAt {
28469 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28470 TokenAtGreen(
28471 Arc::new(GreenNode {
28472 kind: SyntaxKind::TokenAt,
28473 details: GreenNodeDetails::Token(text),
28474 })
28475 .intern(db),
28476 )
28477 }
28478 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28479 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28480 .clone()
28481 }
28482}
28483#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28484pub struct TokenAtPtr(pub SyntaxStablePtrId);
28485impl TypedStablePtr for TokenAtPtr {
28486 type SyntaxNode = TokenAt;
28487 fn untyped(&self) -> SyntaxStablePtrId {
28488 self.0
28489 }
28490 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenAt {
28491 TokenAt::from_syntax_node(db, self.0.lookup(db))
28492 }
28493}
28494impl From<TokenAtPtr> for SyntaxStablePtrId {
28495 fn from(ptr: TokenAtPtr) -> Self {
28496 ptr.untyped()
28497 }
28498}
28499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28500pub struct TokenAtGreen(pub GreenId);
28501impl TokenAtGreen {
28502 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28503 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28504 }
28505}
28506impl TypedSyntaxNode for TokenAt {
28507 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenAt);
28508 type StablePtr = TokenAtPtr;
28509 type Green = TokenAtGreen;
28510 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28511 TokenAtGreen(
28512 Arc::new(GreenNode {
28513 kind: SyntaxKind::TokenMissing,
28514 details: GreenNodeDetails::Token("".into()),
28515 })
28516 .intern(db),
28517 )
28518 }
28519 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28520 match node.0.green.lookup_intern(db).details {
28521 GreenNodeDetails::Token(_) => Self { node },
28522 GreenNodeDetails::Node { .. } => {
28523 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenAt)
28524 }
28525 }
28526 }
28527 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28528 match node.0.green.lookup_intern(db).details {
28529 GreenNodeDetails::Token(_) => Some(Self { node }),
28530 GreenNodeDetails::Node { .. } => None,
28531 }
28532 }
28533 fn as_syntax_node(&self) -> SyntaxNode {
28534 self.node.clone()
28535 }
28536 fn stable_ptr(&self) -> Self::StablePtr {
28537 TokenAtPtr(self.node.0.stable_ptr)
28538 }
28539}
28540impl From<&TokenAt> for SyntaxStablePtrId {
28541 fn from(node: &TokenAt) -> Self {
28542 node.stable_ptr().untyped()
28543 }
28544}
28545#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28546pub struct TerminalAt {
28547 node: SyntaxNode,
28548 children: Arc<[SyntaxNode]>,
28549}
28550impl Terminal for TerminalAt {
28551 const KIND: SyntaxKind = SyntaxKind::TerminalAt;
28552 type TokenType = TokenAt;
28553 fn new_green(
28554 db: &dyn SyntaxGroup,
28555 leading_trivia: TriviaGreen,
28556 token: <<TerminalAt as Terminal>::TokenType as TypedSyntaxNode>::Green,
28557 trailing_trivia: TriviaGreen,
28558 ) -> Self::Green {
28559 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28560 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28561 TerminalAtGreen(
28562 Arc::new(GreenNode {
28563 kind: SyntaxKind::TerminalAt,
28564 details: GreenNodeDetails::Node { children, width },
28565 })
28566 .intern(db),
28567 )
28568 }
28569 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28570 self.token(db).text(db)
28571 }
28572}
28573impl TerminalAt {
28574 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28575 Trivia::from_syntax_node(db, self.children[0].clone())
28576 }
28577 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenAt {
28578 TokenAt::from_syntax_node(db, self.children[1].clone())
28579 }
28580 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28581 Trivia::from_syntax_node(db, self.children[2].clone())
28582 }
28583}
28584#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28585pub struct TerminalAtPtr(pub SyntaxStablePtrId);
28586impl TerminalAtPtr {}
28587impl TypedStablePtr for TerminalAtPtr {
28588 type SyntaxNode = TerminalAt;
28589 fn untyped(&self) -> SyntaxStablePtrId {
28590 self.0
28591 }
28592 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalAt {
28593 TerminalAt::from_syntax_node(db, self.0.lookup(db))
28594 }
28595}
28596impl From<TerminalAtPtr> for SyntaxStablePtrId {
28597 fn from(ptr: TerminalAtPtr) -> Self {
28598 ptr.untyped()
28599 }
28600}
28601#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28602pub struct TerminalAtGreen(pub GreenId);
28603impl TypedSyntaxNode for TerminalAt {
28604 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalAt);
28605 type StablePtr = TerminalAtPtr;
28606 type Green = TerminalAtGreen;
28607 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28608 TerminalAtGreen(
28609 Arc::new(GreenNode {
28610 kind: SyntaxKind::TerminalAt,
28611 details: GreenNodeDetails::Node {
28612 children: vec![
28613 Trivia::missing(db).0,
28614 TokenAt::missing(db).0,
28615 Trivia::missing(db).0,
28616 ],
28617 width: TextWidth::default(),
28618 },
28619 })
28620 .intern(db),
28621 )
28622 }
28623 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28624 let kind = node.kind(db);
28625 assert_eq!(
28626 kind,
28627 SyntaxKind::TerminalAt,
28628 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28629 kind,
28630 SyntaxKind::TerminalAt
28631 );
28632 let children = db.get_children(node.clone());
28633 Self { node, children }
28634 }
28635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28636 let kind = node.kind(db);
28637 if kind == SyntaxKind::TerminalAt { Some(Self::from_syntax_node(db, node)) } else { None }
28638 }
28639 fn as_syntax_node(&self) -> SyntaxNode {
28640 self.node.clone()
28641 }
28642 fn stable_ptr(&self) -> Self::StablePtr {
28643 TerminalAtPtr(self.node.0.stable_ptr)
28644 }
28645}
28646impl From<&TerminalAt> for SyntaxStablePtrId {
28647 fn from(node: &TerminalAt) -> Self {
28648 node.stable_ptr().untyped()
28649 }
28650}
28651#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28652pub struct TokenBadCharacters {
28653 node: SyntaxNode,
28654}
28655impl Token for TokenBadCharacters {
28656 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28657 TokenBadCharactersGreen(
28658 Arc::new(GreenNode {
28659 kind: SyntaxKind::TokenBadCharacters,
28660 details: GreenNodeDetails::Token(text),
28661 })
28662 .intern(db),
28663 )
28664 }
28665 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28666 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28667 .clone()
28668 }
28669}
28670#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28671pub struct TokenBadCharactersPtr(pub SyntaxStablePtrId);
28672impl TypedStablePtr for TokenBadCharactersPtr {
28673 type SyntaxNode = TokenBadCharacters;
28674 fn untyped(&self) -> SyntaxStablePtrId {
28675 self.0
28676 }
28677 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
28678 TokenBadCharacters::from_syntax_node(db, self.0.lookup(db))
28679 }
28680}
28681impl From<TokenBadCharactersPtr> for SyntaxStablePtrId {
28682 fn from(ptr: TokenBadCharactersPtr) -> Self {
28683 ptr.untyped()
28684 }
28685}
28686#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28687pub struct TokenBadCharactersGreen(pub GreenId);
28688impl TokenBadCharactersGreen {
28689 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28690 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28691 }
28692}
28693impl TypedSyntaxNode for TokenBadCharacters {
28694 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBadCharacters);
28695 type StablePtr = TokenBadCharactersPtr;
28696 type Green = TokenBadCharactersGreen;
28697 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28698 TokenBadCharactersGreen(
28699 Arc::new(GreenNode {
28700 kind: SyntaxKind::TokenMissing,
28701 details: GreenNodeDetails::Token("".into()),
28702 })
28703 .intern(db),
28704 )
28705 }
28706 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28707 match node.0.green.lookup_intern(db).details {
28708 GreenNodeDetails::Token(_) => Self { node },
28709 GreenNodeDetails::Node { .. } => panic!(
28710 "Expected a token {:?}, not an internal node",
28711 SyntaxKind::TokenBadCharacters
28712 ),
28713 }
28714 }
28715 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28716 match node.0.green.lookup_intern(db).details {
28717 GreenNodeDetails::Token(_) => Some(Self { node }),
28718 GreenNodeDetails::Node { .. } => None,
28719 }
28720 }
28721 fn as_syntax_node(&self) -> SyntaxNode {
28722 self.node.clone()
28723 }
28724 fn stable_ptr(&self) -> Self::StablePtr {
28725 TokenBadCharactersPtr(self.node.0.stable_ptr)
28726 }
28727}
28728impl From<&TokenBadCharacters> for SyntaxStablePtrId {
28729 fn from(node: &TokenBadCharacters) -> Self {
28730 node.stable_ptr().untyped()
28731 }
28732}
28733#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28734pub struct TerminalBadCharacters {
28735 node: SyntaxNode,
28736 children: Arc<[SyntaxNode]>,
28737}
28738impl Terminal for TerminalBadCharacters {
28739 const KIND: SyntaxKind = SyntaxKind::TerminalBadCharacters;
28740 type TokenType = TokenBadCharacters;
28741 fn new_green(
28742 db: &dyn SyntaxGroup,
28743 leading_trivia: TriviaGreen,
28744 token: <<TerminalBadCharacters as Terminal>::TokenType as TypedSyntaxNode>::Green,
28745 trailing_trivia: TriviaGreen,
28746 ) -> Self::Green {
28747 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28748 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28749 TerminalBadCharactersGreen(
28750 Arc::new(GreenNode {
28751 kind: SyntaxKind::TerminalBadCharacters,
28752 details: GreenNodeDetails::Node { children, width },
28753 })
28754 .intern(db),
28755 )
28756 }
28757 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28758 self.token(db).text(db)
28759 }
28760}
28761impl TerminalBadCharacters {
28762 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28763 Trivia::from_syntax_node(db, self.children[0].clone())
28764 }
28765 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBadCharacters {
28766 TokenBadCharacters::from_syntax_node(db, self.children[1].clone())
28767 }
28768 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28769 Trivia::from_syntax_node(db, self.children[2].clone())
28770 }
28771}
28772#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28773pub struct TerminalBadCharactersPtr(pub SyntaxStablePtrId);
28774impl TerminalBadCharactersPtr {}
28775impl TypedStablePtr for TerminalBadCharactersPtr {
28776 type SyntaxNode = TerminalBadCharacters;
28777 fn untyped(&self) -> SyntaxStablePtrId {
28778 self.0
28779 }
28780 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBadCharacters {
28781 TerminalBadCharacters::from_syntax_node(db, self.0.lookup(db))
28782 }
28783}
28784impl From<TerminalBadCharactersPtr> for SyntaxStablePtrId {
28785 fn from(ptr: TerminalBadCharactersPtr) -> Self {
28786 ptr.untyped()
28787 }
28788}
28789#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28790pub struct TerminalBadCharactersGreen(pub GreenId);
28791impl TypedSyntaxNode for TerminalBadCharacters {
28792 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBadCharacters);
28793 type StablePtr = TerminalBadCharactersPtr;
28794 type Green = TerminalBadCharactersGreen;
28795 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28796 TerminalBadCharactersGreen(
28797 Arc::new(GreenNode {
28798 kind: SyntaxKind::TerminalBadCharacters,
28799 details: GreenNodeDetails::Node {
28800 children: vec![
28801 Trivia::missing(db).0,
28802 TokenBadCharacters::missing(db).0,
28803 Trivia::missing(db).0,
28804 ],
28805 width: TextWidth::default(),
28806 },
28807 })
28808 .intern(db),
28809 )
28810 }
28811 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28812 let kind = node.kind(db);
28813 assert_eq!(
28814 kind,
28815 SyntaxKind::TerminalBadCharacters,
28816 "Unexpected SyntaxKind {:?}. Expected {:?}.",
28817 kind,
28818 SyntaxKind::TerminalBadCharacters
28819 );
28820 let children = db.get_children(node.clone());
28821 Self { node, children }
28822 }
28823 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28824 let kind = node.kind(db);
28825 if kind == SyntaxKind::TerminalBadCharacters {
28826 Some(Self::from_syntax_node(db, node))
28827 } else {
28828 None
28829 }
28830 }
28831 fn as_syntax_node(&self) -> SyntaxNode {
28832 self.node.clone()
28833 }
28834 fn stable_ptr(&self) -> Self::StablePtr {
28835 TerminalBadCharactersPtr(self.node.0.stable_ptr)
28836 }
28837}
28838impl From<&TerminalBadCharacters> for SyntaxStablePtrId {
28839 fn from(node: &TerminalBadCharacters) -> Self {
28840 node.stable_ptr().untyped()
28841 }
28842}
28843#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28844pub struct TokenColon {
28845 node: SyntaxNode,
28846}
28847impl Token for TokenColon {
28848 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
28849 TokenColonGreen(
28850 Arc::new(GreenNode {
28851 kind: SyntaxKind::TokenColon,
28852 details: GreenNodeDetails::Token(text),
28853 })
28854 .intern(db),
28855 )
28856 }
28857 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28858 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
28859 .clone()
28860 }
28861}
28862#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28863pub struct TokenColonPtr(pub SyntaxStablePtrId);
28864impl TypedStablePtr for TokenColonPtr {
28865 type SyntaxNode = TokenColon;
28866 fn untyped(&self) -> SyntaxStablePtrId {
28867 self.0
28868 }
28869 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColon {
28870 TokenColon::from_syntax_node(db, self.0.lookup(db))
28871 }
28872}
28873impl From<TokenColonPtr> for SyntaxStablePtrId {
28874 fn from(ptr: TokenColonPtr) -> Self {
28875 ptr.untyped()
28876 }
28877}
28878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28879pub struct TokenColonGreen(pub GreenId);
28880impl TokenColonGreen {
28881 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28882 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
28883 }
28884}
28885impl TypedSyntaxNode for TokenColon {
28886 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColon);
28887 type StablePtr = TokenColonPtr;
28888 type Green = TokenColonGreen;
28889 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28890 TokenColonGreen(
28891 Arc::new(GreenNode {
28892 kind: SyntaxKind::TokenMissing,
28893 details: GreenNodeDetails::Token("".into()),
28894 })
28895 .intern(db),
28896 )
28897 }
28898 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
28899 match node.0.green.lookup_intern(db).details {
28900 GreenNodeDetails::Token(_) => Self { node },
28901 GreenNodeDetails::Node { .. } => {
28902 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColon)
28903 }
28904 }
28905 }
28906 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
28907 match node.0.green.lookup_intern(db).details {
28908 GreenNodeDetails::Token(_) => Some(Self { node }),
28909 GreenNodeDetails::Node { .. } => None,
28910 }
28911 }
28912 fn as_syntax_node(&self) -> SyntaxNode {
28913 self.node.clone()
28914 }
28915 fn stable_ptr(&self) -> Self::StablePtr {
28916 TokenColonPtr(self.node.0.stable_ptr)
28917 }
28918}
28919impl From<&TokenColon> for SyntaxStablePtrId {
28920 fn from(node: &TokenColon) -> Self {
28921 node.stable_ptr().untyped()
28922 }
28923}
28924#[derive(Clone, Debug, Eq, Hash, PartialEq)]
28925pub struct TerminalColon {
28926 node: SyntaxNode,
28927 children: Arc<[SyntaxNode]>,
28928}
28929impl Terminal for TerminalColon {
28930 const KIND: SyntaxKind = SyntaxKind::TerminalColon;
28931 type TokenType = TokenColon;
28932 fn new_green(
28933 db: &dyn SyntaxGroup,
28934 leading_trivia: TriviaGreen,
28935 token: <<TerminalColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
28936 trailing_trivia: TriviaGreen,
28937 ) -> Self::Green {
28938 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
28939 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
28940 TerminalColonGreen(
28941 Arc::new(GreenNode {
28942 kind: SyntaxKind::TerminalColon,
28943 details: GreenNodeDetails::Node { children, width },
28944 })
28945 .intern(db),
28946 )
28947 }
28948 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
28949 self.token(db).text(db)
28950 }
28951}
28952impl TerminalColon {
28953 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28954 Trivia::from_syntax_node(db, self.children[0].clone())
28955 }
28956 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColon {
28957 TokenColon::from_syntax_node(db, self.children[1].clone())
28958 }
28959 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
28960 Trivia::from_syntax_node(db, self.children[2].clone())
28961 }
28962}
28963#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28964pub struct TerminalColonPtr(pub SyntaxStablePtrId);
28965impl TerminalColonPtr {}
28966impl TypedStablePtr for TerminalColonPtr {
28967 type SyntaxNode = TerminalColon;
28968 fn untyped(&self) -> SyntaxStablePtrId {
28969 self.0
28970 }
28971 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColon {
28972 TerminalColon::from_syntax_node(db, self.0.lookup(db))
28973 }
28974}
28975impl From<TerminalColonPtr> for SyntaxStablePtrId {
28976 fn from(ptr: TerminalColonPtr) -> Self {
28977 ptr.untyped()
28978 }
28979}
28980#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
28981pub struct TerminalColonGreen(pub GreenId);
28982impl TypedSyntaxNode for TerminalColon {
28983 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColon);
28984 type StablePtr = TerminalColonPtr;
28985 type Green = TerminalColonGreen;
28986 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
28987 TerminalColonGreen(
28988 Arc::new(GreenNode {
28989 kind: SyntaxKind::TerminalColon,
28990 details: GreenNodeDetails::Node {
28991 children: vec![
28992 Trivia::missing(db).0,
28993 TokenColon::missing(db).0,
28994 Trivia::missing(db).0,
28995 ],
28996 width: TextWidth::default(),
28997 },
28998 })
28999 .intern(db),
29000 )
29001 }
29002 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29003 let kind = node.kind(db);
29004 assert_eq!(
29005 kind,
29006 SyntaxKind::TerminalColon,
29007 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29008 kind,
29009 SyntaxKind::TerminalColon
29010 );
29011 let children = db.get_children(node.clone());
29012 Self { node, children }
29013 }
29014 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29015 let kind = node.kind(db);
29016 if kind == SyntaxKind::TerminalColon {
29017 Some(Self::from_syntax_node(db, node))
29018 } else {
29019 None
29020 }
29021 }
29022 fn as_syntax_node(&self) -> SyntaxNode {
29023 self.node.clone()
29024 }
29025 fn stable_ptr(&self) -> Self::StablePtr {
29026 TerminalColonPtr(self.node.0.stable_ptr)
29027 }
29028}
29029impl From<&TerminalColon> for SyntaxStablePtrId {
29030 fn from(node: &TerminalColon) -> Self {
29031 node.stable_ptr().untyped()
29032 }
29033}
29034#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29035pub struct TokenColonColon {
29036 node: SyntaxNode,
29037}
29038impl Token for TokenColonColon {
29039 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29040 TokenColonColonGreen(
29041 Arc::new(GreenNode {
29042 kind: SyntaxKind::TokenColonColon,
29043 details: GreenNodeDetails::Token(text),
29044 })
29045 .intern(db),
29046 )
29047 }
29048 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29049 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29050 .clone()
29051 }
29052}
29053#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29054pub struct TokenColonColonPtr(pub SyntaxStablePtrId);
29055impl TypedStablePtr for TokenColonColonPtr {
29056 type SyntaxNode = TokenColonColon;
29057 fn untyped(&self) -> SyntaxStablePtrId {
29058 self.0
29059 }
29060 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
29061 TokenColonColon::from_syntax_node(db, self.0.lookup(db))
29062 }
29063}
29064impl From<TokenColonColonPtr> for SyntaxStablePtrId {
29065 fn from(ptr: TokenColonColonPtr) -> Self {
29066 ptr.untyped()
29067 }
29068}
29069#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29070pub struct TokenColonColonGreen(pub GreenId);
29071impl TokenColonColonGreen {
29072 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29073 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29074 }
29075}
29076impl TypedSyntaxNode for TokenColonColon {
29077 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenColonColon);
29078 type StablePtr = TokenColonColonPtr;
29079 type Green = TokenColonColonGreen;
29080 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29081 TokenColonColonGreen(
29082 Arc::new(GreenNode {
29083 kind: SyntaxKind::TokenMissing,
29084 details: GreenNodeDetails::Token("".into()),
29085 })
29086 .intern(db),
29087 )
29088 }
29089 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29090 match node.0.green.lookup_intern(db).details {
29091 GreenNodeDetails::Token(_) => Self { node },
29092 GreenNodeDetails::Node { .. } => {
29093 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenColonColon)
29094 }
29095 }
29096 }
29097 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29098 match node.0.green.lookup_intern(db).details {
29099 GreenNodeDetails::Token(_) => Some(Self { node }),
29100 GreenNodeDetails::Node { .. } => None,
29101 }
29102 }
29103 fn as_syntax_node(&self) -> SyntaxNode {
29104 self.node.clone()
29105 }
29106 fn stable_ptr(&self) -> Self::StablePtr {
29107 TokenColonColonPtr(self.node.0.stable_ptr)
29108 }
29109}
29110impl From<&TokenColonColon> for SyntaxStablePtrId {
29111 fn from(node: &TokenColonColon) -> Self {
29112 node.stable_ptr().untyped()
29113 }
29114}
29115#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29116pub struct TerminalColonColon {
29117 node: SyntaxNode,
29118 children: Arc<[SyntaxNode]>,
29119}
29120impl Terminal for TerminalColonColon {
29121 const KIND: SyntaxKind = SyntaxKind::TerminalColonColon;
29122 type TokenType = TokenColonColon;
29123 fn new_green(
29124 db: &dyn SyntaxGroup,
29125 leading_trivia: TriviaGreen,
29126 token: <<TerminalColonColon as Terminal>::TokenType as TypedSyntaxNode>::Green,
29127 trailing_trivia: TriviaGreen,
29128 ) -> Self::Green {
29129 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29130 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29131 TerminalColonColonGreen(
29132 Arc::new(GreenNode {
29133 kind: SyntaxKind::TerminalColonColon,
29134 details: GreenNodeDetails::Node { children, width },
29135 })
29136 .intern(db),
29137 )
29138 }
29139 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29140 self.token(db).text(db)
29141 }
29142}
29143impl TerminalColonColon {
29144 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29145 Trivia::from_syntax_node(db, self.children[0].clone())
29146 }
29147 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenColonColon {
29148 TokenColonColon::from_syntax_node(db, self.children[1].clone())
29149 }
29150 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29151 Trivia::from_syntax_node(db, self.children[2].clone())
29152 }
29153}
29154#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29155pub struct TerminalColonColonPtr(pub SyntaxStablePtrId);
29156impl TerminalColonColonPtr {}
29157impl TypedStablePtr for TerminalColonColonPtr {
29158 type SyntaxNode = TerminalColonColon;
29159 fn untyped(&self) -> SyntaxStablePtrId {
29160 self.0
29161 }
29162 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalColonColon {
29163 TerminalColonColon::from_syntax_node(db, self.0.lookup(db))
29164 }
29165}
29166impl From<TerminalColonColonPtr> for SyntaxStablePtrId {
29167 fn from(ptr: TerminalColonColonPtr) -> Self {
29168 ptr.untyped()
29169 }
29170}
29171#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29172pub struct TerminalColonColonGreen(pub GreenId);
29173impl TypedSyntaxNode for TerminalColonColon {
29174 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalColonColon);
29175 type StablePtr = TerminalColonColonPtr;
29176 type Green = TerminalColonColonGreen;
29177 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29178 TerminalColonColonGreen(
29179 Arc::new(GreenNode {
29180 kind: SyntaxKind::TerminalColonColon,
29181 details: GreenNodeDetails::Node {
29182 children: vec![
29183 Trivia::missing(db).0,
29184 TokenColonColon::missing(db).0,
29185 Trivia::missing(db).0,
29186 ],
29187 width: TextWidth::default(),
29188 },
29189 })
29190 .intern(db),
29191 )
29192 }
29193 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29194 let kind = node.kind(db);
29195 assert_eq!(
29196 kind,
29197 SyntaxKind::TerminalColonColon,
29198 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29199 kind,
29200 SyntaxKind::TerminalColonColon
29201 );
29202 let children = db.get_children(node.clone());
29203 Self { node, children }
29204 }
29205 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29206 let kind = node.kind(db);
29207 if kind == SyntaxKind::TerminalColonColon {
29208 Some(Self::from_syntax_node(db, node))
29209 } else {
29210 None
29211 }
29212 }
29213 fn as_syntax_node(&self) -> SyntaxNode {
29214 self.node.clone()
29215 }
29216 fn stable_ptr(&self) -> Self::StablePtr {
29217 TerminalColonColonPtr(self.node.0.stable_ptr)
29218 }
29219}
29220impl From<&TerminalColonColon> for SyntaxStablePtrId {
29221 fn from(node: &TerminalColonColon) -> Self {
29222 node.stable_ptr().untyped()
29223 }
29224}
29225#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29226pub struct TokenComma {
29227 node: SyntaxNode,
29228}
29229impl Token for TokenComma {
29230 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29231 TokenCommaGreen(
29232 Arc::new(GreenNode {
29233 kind: SyntaxKind::TokenComma,
29234 details: GreenNodeDetails::Token(text),
29235 })
29236 .intern(db),
29237 )
29238 }
29239 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29240 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29241 .clone()
29242 }
29243}
29244#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29245pub struct TokenCommaPtr(pub SyntaxStablePtrId);
29246impl TypedStablePtr for TokenCommaPtr {
29247 type SyntaxNode = TokenComma;
29248 fn untyped(&self) -> SyntaxStablePtrId {
29249 self.0
29250 }
29251 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenComma {
29252 TokenComma::from_syntax_node(db, self.0.lookup(db))
29253 }
29254}
29255impl From<TokenCommaPtr> for SyntaxStablePtrId {
29256 fn from(ptr: TokenCommaPtr) -> Self {
29257 ptr.untyped()
29258 }
29259}
29260#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29261pub struct TokenCommaGreen(pub GreenId);
29262impl TokenCommaGreen {
29263 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29264 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29265 }
29266}
29267impl TypedSyntaxNode for TokenComma {
29268 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenComma);
29269 type StablePtr = TokenCommaPtr;
29270 type Green = TokenCommaGreen;
29271 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29272 TokenCommaGreen(
29273 Arc::new(GreenNode {
29274 kind: SyntaxKind::TokenMissing,
29275 details: GreenNodeDetails::Token("".into()),
29276 })
29277 .intern(db),
29278 )
29279 }
29280 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29281 match node.0.green.lookup_intern(db).details {
29282 GreenNodeDetails::Token(_) => Self { node },
29283 GreenNodeDetails::Node { .. } => {
29284 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenComma)
29285 }
29286 }
29287 }
29288 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29289 match node.0.green.lookup_intern(db).details {
29290 GreenNodeDetails::Token(_) => Some(Self { node }),
29291 GreenNodeDetails::Node { .. } => None,
29292 }
29293 }
29294 fn as_syntax_node(&self) -> SyntaxNode {
29295 self.node.clone()
29296 }
29297 fn stable_ptr(&self) -> Self::StablePtr {
29298 TokenCommaPtr(self.node.0.stable_ptr)
29299 }
29300}
29301impl From<&TokenComma> for SyntaxStablePtrId {
29302 fn from(node: &TokenComma) -> Self {
29303 node.stable_ptr().untyped()
29304 }
29305}
29306#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29307pub struct TerminalComma {
29308 node: SyntaxNode,
29309 children: Arc<[SyntaxNode]>,
29310}
29311impl Terminal for TerminalComma {
29312 const KIND: SyntaxKind = SyntaxKind::TerminalComma;
29313 type TokenType = TokenComma;
29314 fn new_green(
29315 db: &dyn SyntaxGroup,
29316 leading_trivia: TriviaGreen,
29317 token: <<TerminalComma as Terminal>::TokenType as TypedSyntaxNode>::Green,
29318 trailing_trivia: TriviaGreen,
29319 ) -> Self::Green {
29320 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29321 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29322 TerminalCommaGreen(
29323 Arc::new(GreenNode {
29324 kind: SyntaxKind::TerminalComma,
29325 details: GreenNodeDetails::Node { children, width },
29326 })
29327 .intern(db),
29328 )
29329 }
29330 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29331 self.token(db).text(db)
29332 }
29333}
29334impl TerminalComma {
29335 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29336 Trivia::from_syntax_node(db, self.children[0].clone())
29337 }
29338 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenComma {
29339 TokenComma::from_syntax_node(db, self.children[1].clone())
29340 }
29341 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29342 Trivia::from_syntax_node(db, self.children[2].clone())
29343 }
29344}
29345#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29346pub struct TerminalCommaPtr(pub SyntaxStablePtrId);
29347impl TerminalCommaPtr {}
29348impl TypedStablePtr for TerminalCommaPtr {
29349 type SyntaxNode = TerminalComma;
29350 fn untyped(&self) -> SyntaxStablePtrId {
29351 self.0
29352 }
29353 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalComma {
29354 TerminalComma::from_syntax_node(db, self.0.lookup(db))
29355 }
29356}
29357impl From<TerminalCommaPtr> for SyntaxStablePtrId {
29358 fn from(ptr: TerminalCommaPtr) -> Self {
29359 ptr.untyped()
29360 }
29361}
29362#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29363pub struct TerminalCommaGreen(pub GreenId);
29364impl TypedSyntaxNode for TerminalComma {
29365 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalComma);
29366 type StablePtr = TerminalCommaPtr;
29367 type Green = TerminalCommaGreen;
29368 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29369 TerminalCommaGreen(
29370 Arc::new(GreenNode {
29371 kind: SyntaxKind::TerminalComma,
29372 details: GreenNodeDetails::Node {
29373 children: vec![
29374 Trivia::missing(db).0,
29375 TokenComma::missing(db).0,
29376 Trivia::missing(db).0,
29377 ],
29378 width: TextWidth::default(),
29379 },
29380 })
29381 .intern(db),
29382 )
29383 }
29384 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29385 let kind = node.kind(db);
29386 assert_eq!(
29387 kind,
29388 SyntaxKind::TerminalComma,
29389 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29390 kind,
29391 SyntaxKind::TerminalComma
29392 );
29393 let children = db.get_children(node.clone());
29394 Self { node, children }
29395 }
29396 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29397 let kind = node.kind(db);
29398 if kind == SyntaxKind::TerminalComma {
29399 Some(Self::from_syntax_node(db, node))
29400 } else {
29401 None
29402 }
29403 }
29404 fn as_syntax_node(&self) -> SyntaxNode {
29405 self.node.clone()
29406 }
29407 fn stable_ptr(&self) -> Self::StablePtr {
29408 TerminalCommaPtr(self.node.0.stable_ptr)
29409 }
29410}
29411impl From<&TerminalComma> for SyntaxStablePtrId {
29412 fn from(node: &TerminalComma) -> Self {
29413 node.stable_ptr().untyped()
29414 }
29415}
29416#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29417pub struct TokenDiv {
29418 node: SyntaxNode,
29419}
29420impl Token for TokenDiv {
29421 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29422 TokenDivGreen(
29423 Arc::new(GreenNode {
29424 kind: SyntaxKind::TokenDiv,
29425 details: GreenNodeDetails::Token(text),
29426 })
29427 .intern(db),
29428 )
29429 }
29430 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29431 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29432 .clone()
29433 }
29434}
29435#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29436pub struct TokenDivPtr(pub SyntaxStablePtrId);
29437impl TypedStablePtr for TokenDivPtr {
29438 type SyntaxNode = TokenDiv;
29439 fn untyped(&self) -> SyntaxStablePtrId {
29440 self.0
29441 }
29442 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDiv {
29443 TokenDiv::from_syntax_node(db, self.0.lookup(db))
29444 }
29445}
29446impl From<TokenDivPtr> for SyntaxStablePtrId {
29447 fn from(ptr: TokenDivPtr) -> Self {
29448 ptr.untyped()
29449 }
29450}
29451#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29452pub struct TokenDivGreen(pub GreenId);
29453impl TokenDivGreen {
29454 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29455 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29456 }
29457}
29458impl TypedSyntaxNode for TokenDiv {
29459 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDiv);
29460 type StablePtr = TokenDivPtr;
29461 type Green = TokenDivGreen;
29462 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29463 TokenDivGreen(
29464 Arc::new(GreenNode {
29465 kind: SyntaxKind::TokenMissing,
29466 details: GreenNodeDetails::Token("".into()),
29467 })
29468 .intern(db),
29469 )
29470 }
29471 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29472 match node.0.green.lookup_intern(db).details {
29473 GreenNodeDetails::Token(_) => Self { node },
29474 GreenNodeDetails::Node { .. } => {
29475 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDiv)
29476 }
29477 }
29478 }
29479 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29480 match node.0.green.lookup_intern(db).details {
29481 GreenNodeDetails::Token(_) => Some(Self { node }),
29482 GreenNodeDetails::Node { .. } => None,
29483 }
29484 }
29485 fn as_syntax_node(&self) -> SyntaxNode {
29486 self.node.clone()
29487 }
29488 fn stable_ptr(&self) -> Self::StablePtr {
29489 TokenDivPtr(self.node.0.stable_ptr)
29490 }
29491}
29492impl From<&TokenDiv> for SyntaxStablePtrId {
29493 fn from(node: &TokenDiv) -> Self {
29494 node.stable_ptr().untyped()
29495 }
29496}
29497#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29498pub struct TerminalDiv {
29499 node: SyntaxNode,
29500 children: Arc<[SyntaxNode]>,
29501}
29502impl Terminal for TerminalDiv {
29503 const KIND: SyntaxKind = SyntaxKind::TerminalDiv;
29504 type TokenType = TokenDiv;
29505 fn new_green(
29506 db: &dyn SyntaxGroup,
29507 leading_trivia: TriviaGreen,
29508 token: <<TerminalDiv as Terminal>::TokenType as TypedSyntaxNode>::Green,
29509 trailing_trivia: TriviaGreen,
29510 ) -> Self::Green {
29511 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29512 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29513 TerminalDivGreen(
29514 Arc::new(GreenNode {
29515 kind: SyntaxKind::TerminalDiv,
29516 details: GreenNodeDetails::Node { children, width },
29517 })
29518 .intern(db),
29519 )
29520 }
29521 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29522 self.token(db).text(db)
29523 }
29524}
29525impl TerminalDiv {
29526 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29527 Trivia::from_syntax_node(db, self.children[0].clone())
29528 }
29529 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDiv {
29530 TokenDiv::from_syntax_node(db, self.children[1].clone())
29531 }
29532 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29533 Trivia::from_syntax_node(db, self.children[2].clone())
29534 }
29535}
29536#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29537pub struct TerminalDivPtr(pub SyntaxStablePtrId);
29538impl TerminalDivPtr {}
29539impl TypedStablePtr for TerminalDivPtr {
29540 type SyntaxNode = TerminalDiv;
29541 fn untyped(&self) -> SyntaxStablePtrId {
29542 self.0
29543 }
29544 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDiv {
29545 TerminalDiv::from_syntax_node(db, self.0.lookup(db))
29546 }
29547}
29548impl From<TerminalDivPtr> for SyntaxStablePtrId {
29549 fn from(ptr: TerminalDivPtr) -> Self {
29550 ptr.untyped()
29551 }
29552}
29553#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29554pub struct TerminalDivGreen(pub GreenId);
29555impl TypedSyntaxNode for TerminalDiv {
29556 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDiv);
29557 type StablePtr = TerminalDivPtr;
29558 type Green = TerminalDivGreen;
29559 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29560 TerminalDivGreen(
29561 Arc::new(GreenNode {
29562 kind: SyntaxKind::TerminalDiv,
29563 details: GreenNodeDetails::Node {
29564 children: vec![
29565 Trivia::missing(db).0,
29566 TokenDiv::missing(db).0,
29567 Trivia::missing(db).0,
29568 ],
29569 width: TextWidth::default(),
29570 },
29571 })
29572 .intern(db),
29573 )
29574 }
29575 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29576 let kind = node.kind(db);
29577 assert_eq!(
29578 kind,
29579 SyntaxKind::TerminalDiv,
29580 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29581 kind,
29582 SyntaxKind::TerminalDiv
29583 );
29584 let children = db.get_children(node.clone());
29585 Self { node, children }
29586 }
29587 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29588 let kind = node.kind(db);
29589 if kind == SyntaxKind::TerminalDiv { Some(Self::from_syntax_node(db, node)) } else { None }
29590 }
29591 fn as_syntax_node(&self) -> SyntaxNode {
29592 self.node.clone()
29593 }
29594 fn stable_ptr(&self) -> Self::StablePtr {
29595 TerminalDivPtr(self.node.0.stable_ptr)
29596 }
29597}
29598impl From<&TerminalDiv> for SyntaxStablePtrId {
29599 fn from(node: &TerminalDiv) -> Self {
29600 node.stable_ptr().untyped()
29601 }
29602}
29603#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29604pub struct TokenDivEq {
29605 node: SyntaxNode,
29606}
29607impl Token for TokenDivEq {
29608 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29609 TokenDivEqGreen(
29610 Arc::new(GreenNode {
29611 kind: SyntaxKind::TokenDivEq,
29612 details: GreenNodeDetails::Token(text),
29613 })
29614 .intern(db),
29615 )
29616 }
29617 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29618 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29619 .clone()
29620 }
29621}
29622#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29623pub struct TokenDivEqPtr(pub SyntaxStablePtrId);
29624impl TypedStablePtr for TokenDivEqPtr {
29625 type SyntaxNode = TokenDivEq;
29626 fn untyped(&self) -> SyntaxStablePtrId {
29627 self.0
29628 }
29629 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
29630 TokenDivEq::from_syntax_node(db, self.0.lookup(db))
29631 }
29632}
29633impl From<TokenDivEqPtr> for SyntaxStablePtrId {
29634 fn from(ptr: TokenDivEqPtr) -> Self {
29635 ptr.untyped()
29636 }
29637}
29638#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29639pub struct TokenDivEqGreen(pub GreenId);
29640impl TokenDivEqGreen {
29641 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29642 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29643 }
29644}
29645impl TypedSyntaxNode for TokenDivEq {
29646 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDivEq);
29647 type StablePtr = TokenDivEqPtr;
29648 type Green = TokenDivEqGreen;
29649 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29650 TokenDivEqGreen(
29651 Arc::new(GreenNode {
29652 kind: SyntaxKind::TokenMissing,
29653 details: GreenNodeDetails::Token("".into()),
29654 })
29655 .intern(db),
29656 )
29657 }
29658 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29659 match node.0.green.lookup_intern(db).details {
29660 GreenNodeDetails::Token(_) => Self { node },
29661 GreenNodeDetails::Node { .. } => {
29662 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDivEq)
29663 }
29664 }
29665 }
29666 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29667 match node.0.green.lookup_intern(db).details {
29668 GreenNodeDetails::Token(_) => Some(Self { node }),
29669 GreenNodeDetails::Node { .. } => None,
29670 }
29671 }
29672 fn as_syntax_node(&self) -> SyntaxNode {
29673 self.node.clone()
29674 }
29675 fn stable_ptr(&self) -> Self::StablePtr {
29676 TokenDivEqPtr(self.node.0.stable_ptr)
29677 }
29678}
29679impl From<&TokenDivEq> for SyntaxStablePtrId {
29680 fn from(node: &TokenDivEq) -> Self {
29681 node.stable_ptr().untyped()
29682 }
29683}
29684#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29685pub struct TerminalDivEq {
29686 node: SyntaxNode,
29687 children: Arc<[SyntaxNode]>,
29688}
29689impl Terminal for TerminalDivEq {
29690 const KIND: SyntaxKind = SyntaxKind::TerminalDivEq;
29691 type TokenType = TokenDivEq;
29692 fn new_green(
29693 db: &dyn SyntaxGroup,
29694 leading_trivia: TriviaGreen,
29695 token: <<TerminalDivEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
29696 trailing_trivia: TriviaGreen,
29697 ) -> Self::Green {
29698 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29699 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29700 TerminalDivEqGreen(
29701 Arc::new(GreenNode {
29702 kind: SyntaxKind::TerminalDivEq,
29703 details: GreenNodeDetails::Node { children, width },
29704 })
29705 .intern(db),
29706 )
29707 }
29708 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29709 self.token(db).text(db)
29710 }
29711}
29712impl TerminalDivEq {
29713 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29714 Trivia::from_syntax_node(db, self.children[0].clone())
29715 }
29716 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDivEq {
29717 TokenDivEq::from_syntax_node(db, self.children[1].clone())
29718 }
29719 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29720 Trivia::from_syntax_node(db, self.children[2].clone())
29721 }
29722}
29723#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29724pub struct TerminalDivEqPtr(pub SyntaxStablePtrId);
29725impl TerminalDivEqPtr {}
29726impl TypedStablePtr for TerminalDivEqPtr {
29727 type SyntaxNode = TerminalDivEq;
29728 fn untyped(&self) -> SyntaxStablePtrId {
29729 self.0
29730 }
29731 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDivEq {
29732 TerminalDivEq::from_syntax_node(db, self.0.lookup(db))
29733 }
29734}
29735impl From<TerminalDivEqPtr> for SyntaxStablePtrId {
29736 fn from(ptr: TerminalDivEqPtr) -> Self {
29737 ptr.untyped()
29738 }
29739}
29740#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29741pub struct TerminalDivEqGreen(pub GreenId);
29742impl TypedSyntaxNode for TerminalDivEq {
29743 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDivEq);
29744 type StablePtr = TerminalDivEqPtr;
29745 type Green = TerminalDivEqGreen;
29746 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29747 TerminalDivEqGreen(
29748 Arc::new(GreenNode {
29749 kind: SyntaxKind::TerminalDivEq,
29750 details: GreenNodeDetails::Node {
29751 children: vec![
29752 Trivia::missing(db).0,
29753 TokenDivEq::missing(db).0,
29754 Trivia::missing(db).0,
29755 ],
29756 width: TextWidth::default(),
29757 },
29758 })
29759 .intern(db),
29760 )
29761 }
29762 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29763 let kind = node.kind(db);
29764 assert_eq!(
29765 kind,
29766 SyntaxKind::TerminalDivEq,
29767 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29768 kind,
29769 SyntaxKind::TerminalDivEq
29770 );
29771 let children = db.get_children(node.clone());
29772 Self { node, children }
29773 }
29774 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29775 let kind = node.kind(db);
29776 if kind == SyntaxKind::TerminalDivEq {
29777 Some(Self::from_syntax_node(db, node))
29778 } else {
29779 None
29780 }
29781 }
29782 fn as_syntax_node(&self) -> SyntaxNode {
29783 self.node.clone()
29784 }
29785 fn stable_ptr(&self) -> Self::StablePtr {
29786 TerminalDivEqPtr(self.node.0.stable_ptr)
29787 }
29788}
29789impl From<&TerminalDivEq> for SyntaxStablePtrId {
29790 fn from(node: &TerminalDivEq) -> Self {
29791 node.stable_ptr().untyped()
29792 }
29793}
29794#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29795pub struct TokenDot {
29796 node: SyntaxNode,
29797}
29798impl Token for TokenDot {
29799 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29800 TokenDotGreen(
29801 Arc::new(GreenNode {
29802 kind: SyntaxKind::TokenDot,
29803 details: GreenNodeDetails::Token(text),
29804 })
29805 .intern(db),
29806 )
29807 }
29808 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29809 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29810 .clone()
29811 }
29812}
29813#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29814pub struct TokenDotPtr(pub SyntaxStablePtrId);
29815impl TypedStablePtr for TokenDotPtr {
29816 type SyntaxNode = TokenDot;
29817 fn untyped(&self) -> SyntaxStablePtrId {
29818 self.0
29819 }
29820 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDot {
29821 TokenDot::from_syntax_node(db, self.0.lookup(db))
29822 }
29823}
29824impl From<TokenDotPtr> for SyntaxStablePtrId {
29825 fn from(ptr: TokenDotPtr) -> Self {
29826 ptr.untyped()
29827 }
29828}
29829#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29830pub struct TokenDotGreen(pub GreenId);
29831impl TokenDotGreen {
29832 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29833 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
29834 }
29835}
29836impl TypedSyntaxNode for TokenDot {
29837 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDot);
29838 type StablePtr = TokenDotPtr;
29839 type Green = TokenDotGreen;
29840 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29841 TokenDotGreen(
29842 Arc::new(GreenNode {
29843 kind: SyntaxKind::TokenMissing,
29844 details: GreenNodeDetails::Token("".into()),
29845 })
29846 .intern(db),
29847 )
29848 }
29849 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29850 match node.0.green.lookup_intern(db).details {
29851 GreenNodeDetails::Token(_) => Self { node },
29852 GreenNodeDetails::Node { .. } => {
29853 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDot)
29854 }
29855 }
29856 }
29857 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29858 match node.0.green.lookup_intern(db).details {
29859 GreenNodeDetails::Token(_) => Some(Self { node }),
29860 GreenNodeDetails::Node { .. } => None,
29861 }
29862 }
29863 fn as_syntax_node(&self) -> SyntaxNode {
29864 self.node.clone()
29865 }
29866 fn stable_ptr(&self) -> Self::StablePtr {
29867 TokenDotPtr(self.node.0.stable_ptr)
29868 }
29869}
29870impl From<&TokenDot> for SyntaxStablePtrId {
29871 fn from(node: &TokenDot) -> Self {
29872 node.stable_ptr().untyped()
29873 }
29874}
29875#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29876pub struct TerminalDot {
29877 node: SyntaxNode,
29878 children: Arc<[SyntaxNode]>,
29879}
29880impl Terminal for TerminalDot {
29881 const KIND: SyntaxKind = SyntaxKind::TerminalDot;
29882 type TokenType = TokenDot;
29883 fn new_green(
29884 db: &dyn SyntaxGroup,
29885 leading_trivia: TriviaGreen,
29886 token: <<TerminalDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
29887 trailing_trivia: TriviaGreen,
29888 ) -> Self::Green {
29889 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
29890 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
29891 TerminalDotGreen(
29892 Arc::new(GreenNode {
29893 kind: SyntaxKind::TerminalDot,
29894 details: GreenNodeDetails::Node { children, width },
29895 })
29896 .intern(db),
29897 )
29898 }
29899 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29900 self.token(db).text(db)
29901 }
29902}
29903impl TerminalDot {
29904 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29905 Trivia::from_syntax_node(db, self.children[0].clone())
29906 }
29907 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDot {
29908 TokenDot::from_syntax_node(db, self.children[1].clone())
29909 }
29910 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
29911 Trivia::from_syntax_node(db, self.children[2].clone())
29912 }
29913}
29914#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29915pub struct TerminalDotPtr(pub SyntaxStablePtrId);
29916impl TerminalDotPtr {}
29917impl TypedStablePtr for TerminalDotPtr {
29918 type SyntaxNode = TerminalDot;
29919 fn untyped(&self) -> SyntaxStablePtrId {
29920 self.0
29921 }
29922 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDot {
29923 TerminalDot::from_syntax_node(db, self.0.lookup(db))
29924 }
29925}
29926impl From<TerminalDotPtr> for SyntaxStablePtrId {
29927 fn from(ptr: TerminalDotPtr) -> Self {
29928 ptr.untyped()
29929 }
29930}
29931#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
29932pub struct TerminalDotGreen(pub GreenId);
29933impl TypedSyntaxNode for TerminalDot {
29934 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDot);
29935 type StablePtr = TerminalDotPtr;
29936 type Green = TerminalDotGreen;
29937 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
29938 TerminalDotGreen(
29939 Arc::new(GreenNode {
29940 kind: SyntaxKind::TerminalDot,
29941 details: GreenNodeDetails::Node {
29942 children: vec![
29943 Trivia::missing(db).0,
29944 TokenDot::missing(db).0,
29945 Trivia::missing(db).0,
29946 ],
29947 width: TextWidth::default(),
29948 },
29949 })
29950 .intern(db),
29951 )
29952 }
29953 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
29954 let kind = node.kind(db);
29955 assert_eq!(
29956 kind,
29957 SyntaxKind::TerminalDot,
29958 "Unexpected SyntaxKind {:?}. Expected {:?}.",
29959 kind,
29960 SyntaxKind::TerminalDot
29961 );
29962 let children = db.get_children(node.clone());
29963 Self { node, children }
29964 }
29965 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
29966 let kind = node.kind(db);
29967 if kind == SyntaxKind::TerminalDot { Some(Self::from_syntax_node(db, node)) } else { None }
29968 }
29969 fn as_syntax_node(&self) -> SyntaxNode {
29970 self.node.clone()
29971 }
29972 fn stable_ptr(&self) -> Self::StablePtr {
29973 TerminalDotPtr(self.node.0.stable_ptr)
29974 }
29975}
29976impl From<&TerminalDot> for SyntaxStablePtrId {
29977 fn from(node: &TerminalDot) -> Self {
29978 node.stable_ptr().untyped()
29979 }
29980}
29981#[derive(Clone, Debug, Eq, Hash, PartialEq)]
29982pub struct TokenDotDot {
29983 node: SyntaxNode,
29984}
29985impl Token for TokenDotDot {
29986 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
29987 TokenDotDotGreen(
29988 Arc::new(GreenNode {
29989 kind: SyntaxKind::TokenDotDot,
29990 details: GreenNodeDetails::Token(text),
29991 })
29992 .intern(db),
29993 )
29994 }
29995 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
29996 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
29997 .clone()
29998 }
29999}
30000#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30001pub struct TokenDotDotPtr(pub SyntaxStablePtrId);
30002impl TypedStablePtr for TokenDotDotPtr {
30003 type SyntaxNode = TokenDotDot;
30004 fn untyped(&self) -> SyntaxStablePtrId {
30005 self.0
30006 }
30007 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
30008 TokenDotDot::from_syntax_node(db, self.0.lookup(db))
30009 }
30010}
30011impl From<TokenDotDotPtr> for SyntaxStablePtrId {
30012 fn from(ptr: TokenDotDotPtr) -> Self {
30013 ptr.untyped()
30014 }
30015}
30016#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30017pub struct TokenDotDotGreen(pub GreenId);
30018impl TokenDotDotGreen {
30019 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30020 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30021 }
30022}
30023impl TypedSyntaxNode for TokenDotDot {
30024 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDot);
30025 type StablePtr = TokenDotDotPtr;
30026 type Green = TokenDotDotGreen;
30027 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30028 TokenDotDotGreen(
30029 Arc::new(GreenNode {
30030 kind: SyntaxKind::TokenMissing,
30031 details: GreenNodeDetails::Token("".into()),
30032 })
30033 .intern(db),
30034 )
30035 }
30036 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30037 match node.0.green.lookup_intern(db).details {
30038 GreenNodeDetails::Token(_) => Self { node },
30039 GreenNodeDetails::Node { .. } => {
30040 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDot)
30041 }
30042 }
30043 }
30044 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30045 match node.0.green.lookup_intern(db).details {
30046 GreenNodeDetails::Token(_) => Some(Self { node }),
30047 GreenNodeDetails::Node { .. } => None,
30048 }
30049 }
30050 fn as_syntax_node(&self) -> SyntaxNode {
30051 self.node.clone()
30052 }
30053 fn stable_ptr(&self) -> Self::StablePtr {
30054 TokenDotDotPtr(self.node.0.stable_ptr)
30055 }
30056}
30057impl From<&TokenDotDot> for SyntaxStablePtrId {
30058 fn from(node: &TokenDotDot) -> Self {
30059 node.stable_ptr().untyped()
30060 }
30061}
30062#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30063pub struct TerminalDotDot {
30064 node: SyntaxNode,
30065 children: Arc<[SyntaxNode]>,
30066}
30067impl Terminal for TerminalDotDot {
30068 const KIND: SyntaxKind = SyntaxKind::TerminalDotDot;
30069 type TokenType = TokenDotDot;
30070 fn new_green(
30071 db: &dyn SyntaxGroup,
30072 leading_trivia: TriviaGreen,
30073 token: <<TerminalDotDot as Terminal>::TokenType as TypedSyntaxNode>::Green,
30074 trailing_trivia: TriviaGreen,
30075 ) -> Self::Green {
30076 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30077 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30078 TerminalDotDotGreen(
30079 Arc::new(GreenNode {
30080 kind: SyntaxKind::TerminalDotDot,
30081 details: GreenNodeDetails::Node { children, width },
30082 })
30083 .intern(db),
30084 )
30085 }
30086 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30087 self.token(db).text(db)
30088 }
30089}
30090impl TerminalDotDot {
30091 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30092 Trivia::from_syntax_node(db, self.children[0].clone())
30093 }
30094 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDot {
30095 TokenDotDot::from_syntax_node(db, self.children[1].clone())
30096 }
30097 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30098 Trivia::from_syntax_node(db, self.children[2].clone())
30099 }
30100}
30101#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30102pub struct TerminalDotDotPtr(pub SyntaxStablePtrId);
30103impl TerminalDotDotPtr {}
30104impl TypedStablePtr for TerminalDotDotPtr {
30105 type SyntaxNode = TerminalDotDot;
30106 fn untyped(&self) -> SyntaxStablePtrId {
30107 self.0
30108 }
30109 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDot {
30110 TerminalDotDot::from_syntax_node(db, self.0.lookup(db))
30111 }
30112}
30113impl From<TerminalDotDotPtr> for SyntaxStablePtrId {
30114 fn from(ptr: TerminalDotDotPtr) -> Self {
30115 ptr.untyped()
30116 }
30117}
30118#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30119pub struct TerminalDotDotGreen(pub GreenId);
30120impl TypedSyntaxNode for TerminalDotDot {
30121 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDot);
30122 type StablePtr = TerminalDotDotPtr;
30123 type Green = TerminalDotDotGreen;
30124 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30125 TerminalDotDotGreen(
30126 Arc::new(GreenNode {
30127 kind: SyntaxKind::TerminalDotDot,
30128 details: GreenNodeDetails::Node {
30129 children: vec![
30130 Trivia::missing(db).0,
30131 TokenDotDot::missing(db).0,
30132 Trivia::missing(db).0,
30133 ],
30134 width: TextWidth::default(),
30135 },
30136 })
30137 .intern(db),
30138 )
30139 }
30140 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30141 let kind = node.kind(db);
30142 assert_eq!(
30143 kind,
30144 SyntaxKind::TerminalDotDot,
30145 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30146 kind,
30147 SyntaxKind::TerminalDotDot
30148 );
30149 let children = db.get_children(node.clone());
30150 Self { node, children }
30151 }
30152 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30153 let kind = node.kind(db);
30154 if kind == SyntaxKind::TerminalDotDot {
30155 Some(Self::from_syntax_node(db, node))
30156 } else {
30157 None
30158 }
30159 }
30160 fn as_syntax_node(&self) -> SyntaxNode {
30161 self.node.clone()
30162 }
30163 fn stable_ptr(&self) -> Self::StablePtr {
30164 TerminalDotDotPtr(self.node.0.stable_ptr)
30165 }
30166}
30167impl From<&TerminalDotDot> for SyntaxStablePtrId {
30168 fn from(node: &TerminalDotDot) -> Self {
30169 node.stable_ptr().untyped()
30170 }
30171}
30172#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30173pub struct TokenDotDotEq {
30174 node: SyntaxNode,
30175}
30176impl Token for TokenDotDotEq {
30177 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30178 TokenDotDotEqGreen(
30179 Arc::new(GreenNode {
30180 kind: SyntaxKind::TokenDotDotEq,
30181 details: GreenNodeDetails::Token(text),
30182 })
30183 .intern(db),
30184 )
30185 }
30186 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30187 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30188 .clone()
30189 }
30190}
30191#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30192pub struct TokenDotDotEqPtr(pub SyntaxStablePtrId);
30193impl TypedStablePtr for TokenDotDotEqPtr {
30194 type SyntaxNode = TokenDotDotEq;
30195 fn untyped(&self) -> SyntaxStablePtrId {
30196 self.0
30197 }
30198 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
30199 TokenDotDotEq::from_syntax_node(db, self.0.lookup(db))
30200 }
30201}
30202impl From<TokenDotDotEqPtr> for SyntaxStablePtrId {
30203 fn from(ptr: TokenDotDotEqPtr) -> Self {
30204 ptr.untyped()
30205 }
30206}
30207#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30208pub struct TokenDotDotEqGreen(pub GreenId);
30209impl TokenDotDotEqGreen {
30210 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30211 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30212 }
30213}
30214impl TypedSyntaxNode for TokenDotDotEq {
30215 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenDotDotEq);
30216 type StablePtr = TokenDotDotEqPtr;
30217 type Green = TokenDotDotEqGreen;
30218 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30219 TokenDotDotEqGreen(
30220 Arc::new(GreenNode {
30221 kind: SyntaxKind::TokenMissing,
30222 details: GreenNodeDetails::Token("".into()),
30223 })
30224 .intern(db),
30225 )
30226 }
30227 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30228 match node.0.green.lookup_intern(db).details {
30229 GreenNodeDetails::Token(_) => Self { node },
30230 GreenNodeDetails::Node { .. } => {
30231 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenDotDotEq)
30232 }
30233 }
30234 }
30235 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30236 match node.0.green.lookup_intern(db).details {
30237 GreenNodeDetails::Token(_) => Some(Self { node }),
30238 GreenNodeDetails::Node { .. } => None,
30239 }
30240 }
30241 fn as_syntax_node(&self) -> SyntaxNode {
30242 self.node.clone()
30243 }
30244 fn stable_ptr(&self) -> Self::StablePtr {
30245 TokenDotDotEqPtr(self.node.0.stable_ptr)
30246 }
30247}
30248impl From<&TokenDotDotEq> for SyntaxStablePtrId {
30249 fn from(node: &TokenDotDotEq) -> Self {
30250 node.stable_ptr().untyped()
30251 }
30252}
30253#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30254pub struct TerminalDotDotEq {
30255 node: SyntaxNode,
30256 children: Arc<[SyntaxNode]>,
30257}
30258impl Terminal for TerminalDotDotEq {
30259 const KIND: SyntaxKind = SyntaxKind::TerminalDotDotEq;
30260 type TokenType = TokenDotDotEq;
30261 fn new_green(
30262 db: &dyn SyntaxGroup,
30263 leading_trivia: TriviaGreen,
30264 token: <<TerminalDotDotEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30265 trailing_trivia: TriviaGreen,
30266 ) -> Self::Green {
30267 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30268 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30269 TerminalDotDotEqGreen(
30270 Arc::new(GreenNode {
30271 kind: SyntaxKind::TerminalDotDotEq,
30272 details: GreenNodeDetails::Node { children, width },
30273 })
30274 .intern(db),
30275 )
30276 }
30277 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30278 self.token(db).text(db)
30279 }
30280}
30281impl TerminalDotDotEq {
30282 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30283 Trivia::from_syntax_node(db, self.children[0].clone())
30284 }
30285 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenDotDotEq {
30286 TokenDotDotEq::from_syntax_node(db, self.children[1].clone())
30287 }
30288 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30289 Trivia::from_syntax_node(db, self.children[2].clone())
30290 }
30291}
30292#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30293pub struct TerminalDotDotEqPtr(pub SyntaxStablePtrId);
30294impl TerminalDotDotEqPtr {}
30295impl TypedStablePtr for TerminalDotDotEqPtr {
30296 type SyntaxNode = TerminalDotDotEq;
30297 fn untyped(&self) -> SyntaxStablePtrId {
30298 self.0
30299 }
30300 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalDotDotEq {
30301 TerminalDotDotEq::from_syntax_node(db, self.0.lookup(db))
30302 }
30303}
30304impl From<TerminalDotDotEqPtr> for SyntaxStablePtrId {
30305 fn from(ptr: TerminalDotDotEqPtr) -> Self {
30306 ptr.untyped()
30307 }
30308}
30309#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30310pub struct TerminalDotDotEqGreen(pub GreenId);
30311impl TypedSyntaxNode for TerminalDotDotEq {
30312 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalDotDotEq);
30313 type StablePtr = TerminalDotDotEqPtr;
30314 type Green = TerminalDotDotEqGreen;
30315 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30316 TerminalDotDotEqGreen(
30317 Arc::new(GreenNode {
30318 kind: SyntaxKind::TerminalDotDotEq,
30319 details: GreenNodeDetails::Node {
30320 children: vec![
30321 Trivia::missing(db).0,
30322 TokenDotDotEq::missing(db).0,
30323 Trivia::missing(db).0,
30324 ],
30325 width: TextWidth::default(),
30326 },
30327 })
30328 .intern(db),
30329 )
30330 }
30331 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30332 let kind = node.kind(db);
30333 assert_eq!(
30334 kind,
30335 SyntaxKind::TerminalDotDotEq,
30336 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30337 kind,
30338 SyntaxKind::TerminalDotDotEq
30339 );
30340 let children = db.get_children(node.clone());
30341 Self { node, children }
30342 }
30343 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30344 let kind = node.kind(db);
30345 if kind == SyntaxKind::TerminalDotDotEq {
30346 Some(Self::from_syntax_node(db, node))
30347 } else {
30348 None
30349 }
30350 }
30351 fn as_syntax_node(&self) -> SyntaxNode {
30352 self.node.clone()
30353 }
30354 fn stable_ptr(&self) -> Self::StablePtr {
30355 TerminalDotDotEqPtr(self.node.0.stable_ptr)
30356 }
30357}
30358impl From<&TerminalDotDotEq> for SyntaxStablePtrId {
30359 fn from(node: &TerminalDotDotEq) -> Self {
30360 node.stable_ptr().untyped()
30361 }
30362}
30363#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30364pub struct TokenEndOfFile {
30365 node: SyntaxNode,
30366}
30367impl Token for TokenEndOfFile {
30368 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30369 TokenEndOfFileGreen(
30370 Arc::new(GreenNode {
30371 kind: SyntaxKind::TokenEndOfFile,
30372 details: GreenNodeDetails::Token(text),
30373 })
30374 .intern(db),
30375 )
30376 }
30377 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30378 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30379 .clone()
30380 }
30381}
30382#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30383pub struct TokenEndOfFilePtr(pub SyntaxStablePtrId);
30384impl TypedStablePtr for TokenEndOfFilePtr {
30385 type SyntaxNode = TokenEndOfFile;
30386 fn untyped(&self) -> SyntaxStablePtrId {
30387 self.0
30388 }
30389 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
30390 TokenEndOfFile::from_syntax_node(db, self.0.lookup(db))
30391 }
30392}
30393impl From<TokenEndOfFilePtr> for SyntaxStablePtrId {
30394 fn from(ptr: TokenEndOfFilePtr) -> Self {
30395 ptr.untyped()
30396 }
30397}
30398#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30399pub struct TokenEndOfFileGreen(pub GreenId);
30400impl TokenEndOfFileGreen {
30401 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30402 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30403 }
30404}
30405impl TypedSyntaxNode for TokenEndOfFile {
30406 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEndOfFile);
30407 type StablePtr = TokenEndOfFilePtr;
30408 type Green = TokenEndOfFileGreen;
30409 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30410 TokenEndOfFileGreen(
30411 Arc::new(GreenNode {
30412 kind: SyntaxKind::TokenMissing,
30413 details: GreenNodeDetails::Token("".into()),
30414 })
30415 .intern(db),
30416 )
30417 }
30418 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30419 match node.0.green.lookup_intern(db).details {
30420 GreenNodeDetails::Token(_) => Self { node },
30421 GreenNodeDetails::Node { .. } => {
30422 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEndOfFile)
30423 }
30424 }
30425 }
30426 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30427 match node.0.green.lookup_intern(db).details {
30428 GreenNodeDetails::Token(_) => Some(Self { node }),
30429 GreenNodeDetails::Node { .. } => None,
30430 }
30431 }
30432 fn as_syntax_node(&self) -> SyntaxNode {
30433 self.node.clone()
30434 }
30435 fn stable_ptr(&self) -> Self::StablePtr {
30436 TokenEndOfFilePtr(self.node.0.stable_ptr)
30437 }
30438}
30439impl From<&TokenEndOfFile> for SyntaxStablePtrId {
30440 fn from(node: &TokenEndOfFile) -> Self {
30441 node.stable_ptr().untyped()
30442 }
30443}
30444#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30445pub struct TerminalEndOfFile {
30446 node: SyntaxNode,
30447 children: Arc<[SyntaxNode]>,
30448}
30449impl Terminal for TerminalEndOfFile {
30450 const KIND: SyntaxKind = SyntaxKind::TerminalEndOfFile;
30451 type TokenType = TokenEndOfFile;
30452 fn new_green(
30453 db: &dyn SyntaxGroup,
30454 leading_trivia: TriviaGreen,
30455 token: <<TerminalEndOfFile as Terminal>::TokenType as TypedSyntaxNode>::Green,
30456 trailing_trivia: TriviaGreen,
30457 ) -> Self::Green {
30458 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30459 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30460 TerminalEndOfFileGreen(
30461 Arc::new(GreenNode {
30462 kind: SyntaxKind::TerminalEndOfFile,
30463 details: GreenNodeDetails::Node { children, width },
30464 })
30465 .intern(db),
30466 )
30467 }
30468 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30469 self.token(db).text(db)
30470 }
30471}
30472impl TerminalEndOfFile {
30473 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30474 Trivia::from_syntax_node(db, self.children[0].clone())
30475 }
30476 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEndOfFile {
30477 TokenEndOfFile::from_syntax_node(db, self.children[1].clone())
30478 }
30479 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30480 Trivia::from_syntax_node(db, self.children[2].clone())
30481 }
30482}
30483#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30484pub struct TerminalEndOfFilePtr(pub SyntaxStablePtrId);
30485impl TerminalEndOfFilePtr {}
30486impl TypedStablePtr for TerminalEndOfFilePtr {
30487 type SyntaxNode = TerminalEndOfFile;
30488 fn untyped(&self) -> SyntaxStablePtrId {
30489 self.0
30490 }
30491 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
30492 TerminalEndOfFile::from_syntax_node(db, self.0.lookup(db))
30493 }
30494}
30495impl From<TerminalEndOfFilePtr> for SyntaxStablePtrId {
30496 fn from(ptr: TerminalEndOfFilePtr) -> Self {
30497 ptr.untyped()
30498 }
30499}
30500#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30501pub struct TerminalEndOfFileGreen(pub GreenId);
30502impl TypedSyntaxNode for TerminalEndOfFile {
30503 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEndOfFile);
30504 type StablePtr = TerminalEndOfFilePtr;
30505 type Green = TerminalEndOfFileGreen;
30506 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30507 TerminalEndOfFileGreen(
30508 Arc::new(GreenNode {
30509 kind: SyntaxKind::TerminalEndOfFile,
30510 details: GreenNodeDetails::Node {
30511 children: vec![
30512 Trivia::missing(db).0,
30513 TokenEndOfFile::missing(db).0,
30514 Trivia::missing(db).0,
30515 ],
30516 width: TextWidth::default(),
30517 },
30518 })
30519 .intern(db),
30520 )
30521 }
30522 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30523 let kind = node.kind(db);
30524 assert_eq!(
30525 kind,
30526 SyntaxKind::TerminalEndOfFile,
30527 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30528 kind,
30529 SyntaxKind::TerminalEndOfFile
30530 );
30531 let children = db.get_children(node.clone());
30532 Self { node, children }
30533 }
30534 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30535 let kind = node.kind(db);
30536 if kind == SyntaxKind::TerminalEndOfFile {
30537 Some(Self::from_syntax_node(db, node))
30538 } else {
30539 None
30540 }
30541 }
30542 fn as_syntax_node(&self) -> SyntaxNode {
30543 self.node.clone()
30544 }
30545 fn stable_ptr(&self) -> Self::StablePtr {
30546 TerminalEndOfFilePtr(self.node.0.stable_ptr)
30547 }
30548}
30549impl From<&TerminalEndOfFile> for SyntaxStablePtrId {
30550 fn from(node: &TerminalEndOfFile) -> Self {
30551 node.stable_ptr().untyped()
30552 }
30553}
30554#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30555pub struct TokenEq {
30556 node: SyntaxNode,
30557}
30558impl Token for TokenEq {
30559 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30560 TokenEqGreen(
30561 Arc::new(GreenNode {
30562 kind: SyntaxKind::TokenEq,
30563 details: GreenNodeDetails::Token(text),
30564 })
30565 .intern(db),
30566 )
30567 }
30568 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30569 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30570 .clone()
30571 }
30572}
30573#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30574pub struct TokenEqPtr(pub SyntaxStablePtrId);
30575impl TypedStablePtr for TokenEqPtr {
30576 type SyntaxNode = TokenEq;
30577 fn untyped(&self) -> SyntaxStablePtrId {
30578 self.0
30579 }
30580 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEq {
30581 TokenEq::from_syntax_node(db, self.0.lookup(db))
30582 }
30583}
30584impl From<TokenEqPtr> for SyntaxStablePtrId {
30585 fn from(ptr: TokenEqPtr) -> Self {
30586 ptr.untyped()
30587 }
30588}
30589#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30590pub struct TokenEqGreen(pub GreenId);
30591impl TokenEqGreen {
30592 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30593 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30594 }
30595}
30596impl TypedSyntaxNode for TokenEq {
30597 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEq);
30598 type StablePtr = TokenEqPtr;
30599 type Green = TokenEqGreen;
30600 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30601 TokenEqGreen(
30602 Arc::new(GreenNode {
30603 kind: SyntaxKind::TokenMissing,
30604 details: GreenNodeDetails::Token("".into()),
30605 })
30606 .intern(db),
30607 )
30608 }
30609 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30610 match node.0.green.lookup_intern(db).details {
30611 GreenNodeDetails::Token(_) => Self { node },
30612 GreenNodeDetails::Node { .. } => {
30613 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEq)
30614 }
30615 }
30616 }
30617 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30618 match node.0.green.lookup_intern(db).details {
30619 GreenNodeDetails::Token(_) => Some(Self { node }),
30620 GreenNodeDetails::Node { .. } => None,
30621 }
30622 }
30623 fn as_syntax_node(&self) -> SyntaxNode {
30624 self.node.clone()
30625 }
30626 fn stable_ptr(&self) -> Self::StablePtr {
30627 TokenEqPtr(self.node.0.stable_ptr)
30628 }
30629}
30630impl From<&TokenEq> for SyntaxStablePtrId {
30631 fn from(node: &TokenEq) -> Self {
30632 node.stable_ptr().untyped()
30633 }
30634}
30635#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30636pub struct TerminalEq {
30637 node: SyntaxNode,
30638 children: Arc<[SyntaxNode]>,
30639}
30640impl Terminal for TerminalEq {
30641 const KIND: SyntaxKind = SyntaxKind::TerminalEq;
30642 type TokenType = TokenEq;
30643 fn new_green(
30644 db: &dyn SyntaxGroup,
30645 leading_trivia: TriviaGreen,
30646 token: <<TerminalEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30647 trailing_trivia: TriviaGreen,
30648 ) -> Self::Green {
30649 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30650 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30651 TerminalEqGreen(
30652 Arc::new(GreenNode {
30653 kind: SyntaxKind::TerminalEq,
30654 details: GreenNodeDetails::Node { children, width },
30655 })
30656 .intern(db),
30657 )
30658 }
30659 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30660 self.token(db).text(db)
30661 }
30662}
30663impl TerminalEq {
30664 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30665 Trivia::from_syntax_node(db, self.children[0].clone())
30666 }
30667 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEq {
30668 TokenEq::from_syntax_node(db, self.children[1].clone())
30669 }
30670 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30671 Trivia::from_syntax_node(db, self.children[2].clone())
30672 }
30673}
30674#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30675pub struct TerminalEqPtr(pub SyntaxStablePtrId);
30676impl TerminalEqPtr {}
30677impl TypedStablePtr for TerminalEqPtr {
30678 type SyntaxNode = TerminalEq;
30679 fn untyped(&self) -> SyntaxStablePtrId {
30680 self.0
30681 }
30682 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEq {
30683 TerminalEq::from_syntax_node(db, self.0.lookup(db))
30684 }
30685}
30686impl From<TerminalEqPtr> for SyntaxStablePtrId {
30687 fn from(ptr: TerminalEqPtr) -> Self {
30688 ptr.untyped()
30689 }
30690}
30691#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30692pub struct TerminalEqGreen(pub GreenId);
30693impl TypedSyntaxNode for TerminalEq {
30694 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEq);
30695 type StablePtr = TerminalEqPtr;
30696 type Green = TerminalEqGreen;
30697 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30698 TerminalEqGreen(
30699 Arc::new(GreenNode {
30700 kind: SyntaxKind::TerminalEq,
30701 details: GreenNodeDetails::Node {
30702 children: vec![
30703 Trivia::missing(db).0,
30704 TokenEq::missing(db).0,
30705 Trivia::missing(db).0,
30706 ],
30707 width: TextWidth::default(),
30708 },
30709 })
30710 .intern(db),
30711 )
30712 }
30713 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30714 let kind = node.kind(db);
30715 assert_eq!(
30716 kind,
30717 SyntaxKind::TerminalEq,
30718 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30719 kind,
30720 SyntaxKind::TerminalEq
30721 );
30722 let children = db.get_children(node.clone());
30723 Self { node, children }
30724 }
30725 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30726 let kind = node.kind(db);
30727 if kind == SyntaxKind::TerminalEq { Some(Self::from_syntax_node(db, node)) } else { None }
30728 }
30729 fn as_syntax_node(&self) -> SyntaxNode {
30730 self.node.clone()
30731 }
30732 fn stable_ptr(&self) -> Self::StablePtr {
30733 TerminalEqPtr(self.node.0.stable_ptr)
30734 }
30735}
30736impl From<&TerminalEq> for SyntaxStablePtrId {
30737 fn from(node: &TerminalEq) -> Self {
30738 node.stable_ptr().untyped()
30739 }
30740}
30741#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30742pub struct TokenEqEq {
30743 node: SyntaxNode,
30744}
30745impl Token for TokenEqEq {
30746 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30747 TokenEqEqGreen(
30748 Arc::new(GreenNode {
30749 kind: SyntaxKind::TokenEqEq,
30750 details: GreenNodeDetails::Token(text),
30751 })
30752 .intern(db),
30753 )
30754 }
30755 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30756 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30757 .clone()
30758 }
30759}
30760#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30761pub struct TokenEqEqPtr(pub SyntaxStablePtrId);
30762impl TypedStablePtr for TokenEqEqPtr {
30763 type SyntaxNode = TokenEqEq;
30764 fn untyped(&self) -> SyntaxStablePtrId {
30765 self.0
30766 }
30767 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
30768 TokenEqEq::from_syntax_node(db, self.0.lookup(db))
30769 }
30770}
30771impl From<TokenEqEqPtr> for SyntaxStablePtrId {
30772 fn from(ptr: TokenEqEqPtr) -> Self {
30773 ptr.untyped()
30774 }
30775}
30776#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30777pub struct TokenEqEqGreen(pub GreenId);
30778impl TokenEqEqGreen {
30779 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30780 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30781 }
30782}
30783impl TypedSyntaxNode for TokenEqEq {
30784 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEqEq);
30785 type StablePtr = TokenEqEqPtr;
30786 type Green = TokenEqEqGreen;
30787 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30788 TokenEqEqGreen(
30789 Arc::new(GreenNode {
30790 kind: SyntaxKind::TokenMissing,
30791 details: GreenNodeDetails::Token("".into()),
30792 })
30793 .intern(db),
30794 )
30795 }
30796 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30797 match node.0.green.lookup_intern(db).details {
30798 GreenNodeDetails::Token(_) => Self { node },
30799 GreenNodeDetails::Node { .. } => {
30800 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEqEq)
30801 }
30802 }
30803 }
30804 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30805 match node.0.green.lookup_intern(db).details {
30806 GreenNodeDetails::Token(_) => Some(Self { node }),
30807 GreenNodeDetails::Node { .. } => None,
30808 }
30809 }
30810 fn as_syntax_node(&self) -> SyntaxNode {
30811 self.node.clone()
30812 }
30813 fn stable_ptr(&self) -> Self::StablePtr {
30814 TokenEqEqPtr(self.node.0.stable_ptr)
30815 }
30816}
30817impl From<&TokenEqEq> for SyntaxStablePtrId {
30818 fn from(node: &TokenEqEq) -> Self {
30819 node.stable_ptr().untyped()
30820 }
30821}
30822#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30823pub struct TerminalEqEq {
30824 node: SyntaxNode,
30825 children: Arc<[SyntaxNode]>,
30826}
30827impl Terminal for TerminalEqEq {
30828 const KIND: SyntaxKind = SyntaxKind::TerminalEqEq;
30829 type TokenType = TokenEqEq;
30830 fn new_green(
30831 db: &dyn SyntaxGroup,
30832 leading_trivia: TriviaGreen,
30833 token: <<TerminalEqEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
30834 trailing_trivia: TriviaGreen,
30835 ) -> Self::Green {
30836 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
30837 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
30838 TerminalEqEqGreen(
30839 Arc::new(GreenNode {
30840 kind: SyntaxKind::TerminalEqEq,
30841 details: GreenNodeDetails::Node { children, width },
30842 })
30843 .intern(db),
30844 )
30845 }
30846 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30847 self.token(db).text(db)
30848 }
30849}
30850impl TerminalEqEq {
30851 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30852 Trivia::from_syntax_node(db, self.children[0].clone())
30853 }
30854 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEqEq {
30855 TokenEqEq::from_syntax_node(db, self.children[1].clone())
30856 }
30857 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
30858 Trivia::from_syntax_node(db, self.children[2].clone())
30859 }
30860}
30861#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30862pub struct TerminalEqEqPtr(pub SyntaxStablePtrId);
30863impl TerminalEqEqPtr {}
30864impl TypedStablePtr for TerminalEqEqPtr {
30865 type SyntaxNode = TerminalEqEq;
30866 fn untyped(&self) -> SyntaxStablePtrId {
30867 self.0
30868 }
30869 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEqEq {
30870 TerminalEqEq::from_syntax_node(db, self.0.lookup(db))
30871 }
30872}
30873impl From<TerminalEqEqPtr> for SyntaxStablePtrId {
30874 fn from(ptr: TerminalEqEqPtr) -> Self {
30875 ptr.untyped()
30876 }
30877}
30878#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30879pub struct TerminalEqEqGreen(pub GreenId);
30880impl TypedSyntaxNode for TerminalEqEq {
30881 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEqEq);
30882 type StablePtr = TerminalEqEqPtr;
30883 type Green = TerminalEqEqGreen;
30884 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30885 TerminalEqEqGreen(
30886 Arc::new(GreenNode {
30887 kind: SyntaxKind::TerminalEqEq,
30888 details: GreenNodeDetails::Node {
30889 children: vec![
30890 Trivia::missing(db).0,
30891 TokenEqEq::missing(db).0,
30892 Trivia::missing(db).0,
30893 ],
30894 width: TextWidth::default(),
30895 },
30896 })
30897 .intern(db),
30898 )
30899 }
30900 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30901 let kind = node.kind(db);
30902 assert_eq!(
30903 kind,
30904 SyntaxKind::TerminalEqEq,
30905 "Unexpected SyntaxKind {:?}. Expected {:?}.",
30906 kind,
30907 SyntaxKind::TerminalEqEq
30908 );
30909 let children = db.get_children(node.clone());
30910 Self { node, children }
30911 }
30912 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30913 let kind = node.kind(db);
30914 if kind == SyntaxKind::TerminalEqEq { Some(Self::from_syntax_node(db, node)) } else { None }
30915 }
30916 fn as_syntax_node(&self) -> SyntaxNode {
30917 self.node.clone()
30918 }
30919 fn stable_ptr(&self) -> Self::StablePtr {
30920 TerminalEqEqPtr(self.node.0.stable_ptr)
30921 }
30922}
30923impl From<&TerminalEqEq> for SyntaxStablePtrId {
30924 fn from(node: &TerminalEqEq) -> Self {
30925 node.stable_ptr().untyped()
30926 }
30927}
30928#[derive(Clone, Debug, Eq, Hash, PartialEq)]
30929pub struct TokenGE {
30930 node: SyntaxNode,
30931}
30932impl Token for TokenGE {
30933 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
30934 TokenGEGreen(
30935 Arc::new(GreenNode {
30936 kind: SyntaxKind::TokenGE,
30937 details: GreenNodeDetails::Token(text),
30938 })
30939 .intern(db),
30940 )
30941 }
30942 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30943 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
30944 .clone()
30945 }
30946}
30947#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30948pub struct TokenGEPtr(pub SyntaxStablePtrId);
30949impl TypedStablePtr for TokenGEPtr {
30950 type SyntaxNode = TokenGE;
30951 fn untyped(&self) -> SyntaxStablePtrId {
30952 self.0
30953 }
30954 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGE {
30955 TokenGE::from_syntax_node(db, self.0.lookup(db))
30956 }
30957}
30958impl From<TokenGEPtr> for SyntaxStablePtrId {
30959 fn from(ptr: TokenGEPtr) -> Self {
30960 ptr.untyped()
30961 }
30962}
30963#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
30964pub struct TokenGEGreen(pub GreenId);
30965impl TokenGEGreen {
30966 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
30967 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
30968 }
30969}
30970impl TypedSyntaxNode for TokenGE {
30971 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGE);
30972 type StablePtr = TokenGEPtr;
30973 type Green = TokenGEGreen;
30974 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
30975 TokenGEGreen(
30976 Arc::new(GreenNode {
30977 kind: SyntaxKind::TokenMissing,
30978 details: GreenNodeDetails::Token("".into()),
30979 })
30980 .intern(db),
30981 )
30982 }
30983 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
30984 match node.0.green.lookup_intern(db).details {
30985 GreenNodeDetails::Token(_) => Self { node },
30986 GreenNodeDetails::Node { .. } => {
30987 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGE)
30988 }
30989 }
30990 }
30991 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
30992 match node.0.green.lookup_intern(db).details {
30993 GreenNodeDetails::Token(_) => Some(Self { node }),
30994 GreenNodeDetails::Node { .. } => None,
30995 }
30996 }
30997 fn as_syntax_node(&self) -> SyntaxNode {
30998 self.node.clone()
30999 }
31000 fn stable_ptr(&self) -> Self::StablePtr {
31001 TokenGEPtr(self.node.0.stable_ptr)
31002 }
31003}
31004impl From<&TokenGE> for SyntaxStablePtrId {
31005 fn from(node: &TokenGE) -> Self {
31006 node.stable_ptr().untyped()
31007 }
31008}
31009#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31010pub struct TerminalGE {
31011 node: SyntaxNode,
31012 children: Arc<[SyntaxNode]>,
31013}
31014impl Terminal for TerminalGE {
31015 const KIND: SyntaxKind = SyntaxKind::TerminalGE;
31016 type TokenType = TokenGE;
31017 fn new_green(
31018 db: &dyn SyntaxGroup,
31019 leading_trivia: TriviaGreen,
31020 token: <<TerminalGE as Terminal>::TokenType as TypedSyntaxNode>::Green,
31021 trailing_trivia: TriviaGreen,
31022 ) -> Self::Green {
31023 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31024 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31025 TerminalGEGreen(
31026 Arc::new(GreenNode {
31027 kind: SyntaxKind::TerminalGE,
31028 details: GreenNodeDetails::Node { children, width },
31029 })
31030 .intern(db),
31031 )
31032 }
31033 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31034 self.token(db).text(db)
31035 }
31036}
31037impl TerminalGE {
31038 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31039 Trivia::from_syntax_node(db, self.children[0].clone())
31040 }
31041 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGE {
31042 TokenGE::from_syntax_node(db, self.children[1].clone())
31043 }
31044 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31045 Trivia::from_syntax_node(db, self.children[2].clone())
31046 }
31047}
31048#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31049pub struct TerminalGEPtr(pub SyntaxStablePtrId);
31050impl TerminalGEPtr {}
31051impl TypedStablePtr for TerminalGEPtr {
31052 type SyntaxNode = TerminalGE;
31053 fn untyped(&self) -> SyntaxStablePtrId {
31054 self.0
31055 }
31056 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGE {
31057 TerminalGE::from_syntax_node(db, self.0.lookup(db))
31058 }
31059}
31060impl From<TerminalGEPtr> for SyntaxStablePtrId {
31061 fn from(ptr: TerminalGEPtr) -> Self {
31062 ptr.untyped()
31063 }
31064}
31065#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31066pub struct TerminalGEGreen(pub GreenId);
31067impl TypedSyntaxNode for TerminalGE {
31068 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGE);
31069 type StablePtr = TerminalGEPtr;
31070 type Green = TerminalGEGreen;
31071 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31072 TerminalGEGreen(
31073 Arc::new(GreenNode {
31074 kind: SyntaxKind::TerminalGE,
31075 details: GreenNodeDetails::Node {
31076 children: vec![
31077 Trivia::missing(db).0,
31078 TokenGE::missing(db).0,
31079 Trivia::missing(db).0,
31080 ],
31081 width: TextWidth::default(),
31082 },
31083 })
31084 .intern(db),
31085 )
31086 }
31087 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31088 let kind = node.kind(db);
31089 assert_eq!(
31090 kind,
31091 SyntaxKind::TerminalGE,
31092 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31093 kind,
31094 SyntaxKind::TerminalGE
31095 );
31096 let children = db.get_children(node.clone());
31097 Self { node, children }
31098 }
31099 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31100 let kind = node.kind(db);
31101 if kind == SyntaxKind::TerminalGE { Some(Self::from_syntax_node(db, node)) } else { None }
31102 }
31103 fn as_syntax_node(&self) -> SyntaxNode {
31104 self.node.clone()
31105 }
31106 fn stable_ptr(&self) -> Self::StablePtr {
31107 TerminalGEPtr(self.node.0.stable_ptr)
31108 }
31109}
31110impl From<&TerminalGE> for SyntaxStablePtrId {
31111 fn from(node: &TerminalGE) -> Self {
31112 node.stable_ptr().untyped()
31113 }
31114}
31115#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31116pub struct TokenGT {
31117 node: SyntaxNode,
31118}
31119impl Token for TokenGT {
31120 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31121 TokenGTGreen(
31122 Arc::new(GreenNode {
31123 kind: SyntaxKind::TokenGT,
31124 details: GreenNodeDetails::Token(text),
31125 })
31126 .intern(db),
31127 )
31128 }
31129 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31130 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31131 .clone()
31132 }
31133}
31134#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31135pub struct TokenGTPtr(pub SyntaxStablePtrId);
31136impl TypedStablePtr for TokenGTPtr {
31137 type SyntaxNode = TokenGT;
31138 fn untyped(&self) -> SyntaxStablePtrId {
31139 self.0
31140 }
31141 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenGT {
31142 TokenGT::from_syntax_node(db, self.0.lookup(db))
31143 }
31144}
31145impl From<TokenGTPtr> for SyntaxStablePtrId {
31146 fn from(ptr: TokenGTPtr) -> Self {
31147 ptr.untyped()
31148 }
31149}
31150#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31151pub struct TokenGTGreen(pub GreenId);
31152impl TokenGTGreen {
31153 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31154 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31155 }
31156}
31157impl TypedSyntaxNode for TokenGT {
31158 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenGT);
31159 type StablePtr = TokenGTPtr;
31160 type Green = TokenGTGreen;
31161 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31162 TokenGTGreen(
31163 Arc::new(GreenNode {
31164 kind: SyntaxKind::TokenMissing,
31165 details: GreenNodeDetails::Token("".into()),
31166 })
31167 .intern(db),
31168 )
31169 }
31170 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31171 match node.0.green.lookup_intern(db).details {
31172 GreenNodeDetails::Token(_) => Self { node },
31173 GreenNodeDetails::Node { .. } => {
31174 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenGT)
31175 }
31176 }
31177 }
31178 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31179 match node.0.green.lookup_intern(db).details {
31180 GreenNodeDetails::Token(_) => Some(Self { node }),
31181 GreenNodeDetails::Node { .. } => None,
31182 }
31183 }
31184 fn as_syntax_node(&self) -> SyntaxNode {
31185 self.node.clone()
31186 }
31187 fn stable_ptr(&self) -> Self::StablePtr {
31188 TokenGTPtr(self.node.0.stable_ptr)
31189 }
31190}
31191impl From<&TokenGT> for SyntaxStablePtrId {
31192 fn from(node: &TokenGT) -> Self {
31193 node.stable_ptr().untyped()
31194 }
31195}
31196#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31197pub struct TerminalGT {
31198 node: SyntaxNode,
31199 children: Arc<[SyntaxNode]>,
31200}
31201impl Terminal for TerminalGT {
31202 const KIND: SyntaxKind = SyntaxKind::TerminalGT;
31203 type TokenType = TokenGT;
31204 fn new_green(
31205 db: &dyn SyntaxGroup,
31206 leading_trivia: TriviaGreen,
31207 token: <<TerminalGT as Terminal>::TokenType as TypedSyntaxNode>::Green,
31208 trailing_trivia: TriviaGreen,
31209 ) -> Self::Green {
31210 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31211 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31212 TerminalGTGreen(
31213 Arc::new(GreenNode {
31214 kind: SyntaxKind::TerminalGT,
31215 details: GreenNodeDetails::Node { children, width },
31216 })
31217 .intern(db),
31218 )
31219 }
31220 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31221 self.token(db).text(db)
31222 }
31223}
31224impl TerminalGT {
31225 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31226 Trivia::from_syntax_node(db, self.children[0].clone())
31227 }
31228 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenGT {
31229 TokenGT::from_syntax_node(db, self.children[1].clone())
31230 }
31231 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31232 Trivia::from_syntax_node(db, self.children[2].clone())
31233 }
31234}
31235#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31236pub struct TerminalGTPtr(pub SyntaxStablePtrId);
31237impl TerminalGTPtr {}
31238impl TypedStablePtr for TerminalGTPtr {
31239 type SyntaxNode = TerminalGT;
31240 fn untyped(&self) -> SyntaxStablePtrId {
31241 self.0
31242 }
31243 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalGT {
31244 TerminalGT::from_syntax_node(db, self.0.lookup(db))
31245 }
31246}
31247impl From<TerminalGTPtr> for SyntaxStablePtrId {
31248 fn from(ptr: TerminalGTPtr) -> Self {
31249 ptr.untyped()
31250 }
31251}
31252#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31253pub struct TerminalGTGreen(pub GreenId);
31254impl TypedSyntaxNode for TerminalGT {
31255 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalGT);
31256 type StablePtr = TerminalGTPtr;
31257 type Green = TerminalGTGreen;
31258 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31259 TerminalGTGreen(
31260 Arc::new(GreenNode {
31261 kind: SyntaxKind::TerminalGT,
31262 details: GreenNodeDetails::Node {
31263 children: vec![
31264 Trivia::missing(db).0,
31265 TokenGT::missing(db).0,
31266 Trivia::missing(db).0,
31267 ],
31268 width: TextWidth::default(),
31269 },
31270 })
31271 .intern(db),
31272 )
31273 }
31274 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31275 let kind = node.kind(db);
31276 assert_eq!(
31277 kind,
31278 SyntaxKind::TerminalGT,
31279 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31280 kind,
31281 SyntaxKind::TerminalGT
31282 );
31283 let children = db.get_children(node.clone());
31284 Self { node, children }
31285 }
31286 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31287 let kind = node.kind(db);
31288 if kind == SyntaxKind::TerminalGT { Some(Self::from_syntax_node(db, node)) } else { None }
31289 }
31290 fn as_syntax_node(&self) -> SyntaxNode {
31291 self.node.clone()
31292 }
31293 fn stable_ptr(&self) -> Self::StablePtr {
31294 TerminalGTPtr(self.node.0.stable_ptr)
31295 }
31296}
31297impl From<&TerminalGT> for SyntaxStablePtrId {
31298 fn from(node: &TerminalGT) -> Self {
31299 node.stable_ptr().untyped()
31300 }
31301}
31302#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31303pub struct TokenHash {
31304 node: SyntaxNode,
31305}
31306impl Token for TokenHash {
31307 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31308 TokenHashGreen(
31309 Arc::new(GreenNode {
31310 kind: SyntaxKind::TokenHash,
31311 details: GreenNodeDetails::Token(text),
31312 })
31313 .intern(db),
31314 )
31315 }
31316 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31317 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31318 .clone()
31319 }
31320}
31321#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31322pub struct TokenHashPtr(pub SyntaxStablePtrId);
31323impl TypedStablePtr for TokenHashPtr {
31324 type SyntaxNode = TokenHash;
31325 fn untyped(&self) -> SyntaxStablePtrId {
31326 self.0
31327 }
31328 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenHash {
31329 TokenHash::from_syntax_node(db, self.0.lookup(db))
31330 }
31331}
31332impl From<TokenHashPtr> for SyntaxStablePtrId {
31333 fn from(ptr: TokenHashPtr) -> Self {
31334 ptr.untyped()
31335 }
31336}
31337#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31338pub struct TokenHashGreen(pub GreenId);
31339impl TokenHashGreen {
31340 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31341 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31342 }
31343}
31344impl TypedSyntaxNode for TokenHash {
31345 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenHash);
31346 type StablePtr = TokenHashPtr;
31347 type Green = TokenHashGreen;
31348 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31349 TokenHashGreen(
31350 Arc::new(GreenNode {
31351 kind: SyntaxKind::TokenMissing,
31352 details: GreenNodeDetails::Token("".into()),
31353 })
31354 .intern(db),
31355 )
31356 }
31357 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31358 match node.0.green.lookup_intern(db).details {
31359 GreenNodeDetails::Token(_) => Self { node },
31360 GreenNodeDetails::Node { .. } => {
31361 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenHash)
31362 }
31363 }
31364 }
31365 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31366 match node.0.green.lookup_intern(db).details {
31367 GreenNodeDetails::Token(_) => Some(Self { node }),
31368 GreenNodeDetails::Node { .. } => None,
31369 }
31370 }
31371 fn as_syntax_node(&self) -> SyntaxNode {
31372 self.node.clone()
31373 }
31374 fn stable_ptr(&self) -> Self::StablePtr {
31375 TokenHashPtr(self.node.0.stable_ptr)
31376 }
31377}
31378impl From<&TokenHash> for SyntaxStablePtrId {
31379 fn from(node: &TokenHash) -> Self {
31380 node.stable_ptr().untyped()
31381 }
31382}
31383#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31384pub struct TerminalHash {
31385 node: SyntaxNode,
31386 children: Arc<[SyntaxNode]>,
31387}
31388impl Terminal for TerminalHash {
31389 const KIND: SyntaxKind = SyntaxKind::TerminalHash;
31390 type TokenType = TokenHash;
31391 fn new_green(
31392 db: &dyn SyntaxGroup,
31393 leading_trivia: TriviaGreen,
31394 token: <<TerminalHash as Terminal>::TokenType as TypedSyntaxNode>::Green,
31395 trailing_trivia: TriviaGreen,
31396 ) -> Self::Green {
31397 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31398 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31399 TerminalHashGreen(
31400 Arc::new(GreenNode {
31401 kind: SyntaxKind::TerminalHash,
31402 details: GreenNodeDetails::Node { children, width },
31403 })
31404 .intern(db),
31405 )
31406 }
31407 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31408 self.token(db).text(db)
31409 }
31410}
31411impl TerminalHash {
31412 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31413 Trivia::from_syntax_node(db, self.children[0].clone())
31414 }
31415 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenHash {
31416 TokenHash::from_syntax_node(db, self.children[1].clone())
31417 }
31418 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31419 Trivia::from_syntax_node(db, self.children[2].clone())
31420 }
31421}
31422#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31423pub struct TerminalHashPtr(pub SyntaxStablePtrId);
31424impl TerminalHashPtr {}
31425impl TypedStablePtr for TerminalHashPtr {
31426 type SyntaxNode = TerminalHash;
31427 fn untyped(&self) -> SyntaxStablePtrId {
31428 self.0
31429 }
31430 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalHash {
31431 TerminalHash::from_syntax_node(db, self.0.lookup(db))
31432 }
31433}
31434impl From<TerminalHashPtr> for SyntaxStablePtrId {
31435 fn from(ptr: TerminalHashPtr) -> Self {
31436 ptr.untyped()
31437 }
31438}
31439#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31440pub struct TerminalHashGreen(pub GreenId);
31441impl TypedSyntaxNode for TerminalHash {
31442 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalHash);
31443 type StablePtr = TerminalHashPtr;
31444 type Green = TerminalHashGreen;
31445 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31446 TerminalHashGreen(
31447 Arc::new(GreenNode {
31448 kind: SyntaxKind::TerminalHash,
31449 details: GreenNodeDetails::Node {
31450 children: vec![
31451 Trivia::missing(db).0,
31452 TokenHash::missing(db).0,
31453 Trivia::missing(db).0,
31454 ],
31455 width: TextWidth::default(),
31456 },
31457 })
31458 .intern(db),
31459 )
31460 }
31461 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31462 let kind = node.kind(db);
31463 assert_eq!(
31464 kind,
31465 SyntaxKind::TerminalHash,
31466 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31467 kind,
31468 SyntaxKind::TerminalHash
31469 );
31470 let children = db.get_children(node.clone());
31471 Self { node, children }
31472 }
31473 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31474 let kind = node.kind(db);
31475 if kind == SyntaxKind::TerminalHash { Some(Self::from_syntax_node(db, node)) } else { None }
31476 }
31477 fn as_syntax_node(&self) -> SyntaxNode {
31478 self.node.clone()
31479 }
31480 fn stable_ptr(&self) -> Self::StablePtr {
31481 TerminalHashPtr(self.node.0.stable_ptr)
31482 }
31483}
31484impl From<&TerminalHash> for SyntaxStablePtrId {
31485 fn from(node: &TerminalHash) -> Self {
31486 node.stable_ptr().untyped()
31487 }
31488}
31489#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31490pub struct TokenLBrace {
31491 node: SyntaxNode,
31492}
31493impl Token for TokenLBrace {
31494 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31495 TokenLBraceGreen(
31496 Arc::new(GreenNode {
31497 kind: SyntaxKind::TokenLBrace,
31498 details: GreenNodeDetails::Token(text),
31499 })
31500 .intern(db),
31501 )
31502 }
31503 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31504 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31505 .clone()
31506 }
31507}
31508#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31509pub struct TokenLBracePtr(pub SyntaxStablePtrId);
31510impl TypedStablePtr for TokenLBracePtr {
31511 type SyntaxNode = TokenLBrace;
31512 fn untyped(&self) -> SyntaxStablePtrId {
31513 self.0
31514 }
31515 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
31516 TokenLBrace::from_syntax_node(db, self.0.lookup(db))
31517 }
31518}
31519impl From<TokenLBracePtr> for SyntaxStablePtrId {
31520 fn from(ptr: TokenLBracePtr) -> Self {
31521 ptr.untyped()
31522 }
31523}
31524#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31525pub struct TokenLBraceGreen(pub GreenId);
31526impl TokenLBraceGreen {
31527 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31528 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31529 }
31530}
31531impl TypedSyntaxNode for TokenLBrace {
31532 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrace);
31533 type StablePtr = TokenLBracePtr;
31534 type Green = TokenLBraceGreen;
31535 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31536 TokenLBraceGreen(
31537 Arc::new(GreenNode {
31538 kind: SyntaxKind::TokenMissing,
31539 details: GreenNodeDetails::Token("".into()),
31540 })
31541 .intern(db),
31542 )
31543 }
31544 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31545 match node.0.green.lookup_intern(db).details {
31546 GreenNodeDetails::Token(_) => Self { node },
31547 GreenNodeDetails::Node { .. } => {
31548 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrace)
31549 }
31550 }
31551 }
31552 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31553 match node.0.green.lookup_intern(db).details {
31554 GreenNodeDetails::Token(_) => Some(Self { node }),
31555 GreenNodeDetails::Node { .. } => None,
31556 }
31557 }
31558 fn as_syntax_node(&self) -> SyntaxNode {
31559 self.node.clone()
31560 }
31561 fn stable_ptr(&self) -> Self::StablePtr {
31562 TokenLBracePtr(self.node.0.stable_ptr)
31563 }
31564}
31565impl From<&TokenLBrace> for SyntaxStablePtrId {
31566 fn from(node: &TokenLBrace) -> Self {
31567 node.stable_ptr().untyped()
31568 }
31569}
31570#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31571pub struct TerminalLBrace {
31572 node: SyntaxNode,
31573 children: Arc<[SyntaxNode]>,
31574}
31575impl Terminal for TerminalLBrace {
31576 const KIND: SyntaxKind = SyntaxKind::TerminalLBrace;
31577 type TokenType = TokenLBrace;
31578 fn new_green(
31579 db: &dyn SyntaxGroup,
31580 leading_trivia: TriviaGreen,
31581 token: <<TerminalLBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
31582 trailing_trivia: TriviaGreen,
31583 ) -> Self::Green {
31584 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31585 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31586 TerminalLBraceGreen(
31587 Arc::new(GreenNode {
31588 kind: SyntaxKind::TerminalLBrace,
31589 details: GreenNodeDetails::Node { children, width },
31590 })
31591 .intern(db),
31592 )
31593 }
31594 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31595 self.token(db).text(db)
31596 }
31597}
31598impl TerminalLBrace {
31599 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31600 Trivia::from_syntax_node(db, self.children[0].clone())
31601 }
31602 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrace {
31603 TokenLBrace::from_syntax_node(db, self.children[1].clone())
31604 }
31605 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31606 Trivia::from_syntax_node(db, self.children[2].clone())
31607 }
31608}
31609#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31610pub struct TerminalLBracePtr(pub SyntaxStablePtrId);
31611impl TerminalLBracePtr {}
31612impl TypedStablePtr for TerminalLBracePtr {
31613 type SyntaxNode = TerminalLBrace;
31614 fn untyped(&self) -> SyntaxStablePtrId {
31615 self.0
31616 }
31617 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrace {
31618 TerminalLBrace::from_syntax_node(db, self.0.lookup(db))
31619 }
31620}
31621impl From<TerminalLBracePtr> for SyntaxStablePtrId {
31622 fn from(ptr: TerminalLBracePtr) -> Self {
31623 ptr.untyped()
31624 }
31625}
31626#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31627pub struct TerminalLBraceGreen(pub GreenId);
31628impl TypedSyntaxNode for TerminalLBrace {
31629 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrace);
31630 type StablePtr = TerminalLBracePtr;
31631 type Green = TerminalLBraceGreen;
31632 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31633 TerminalLBraceGreen(
31634 Arc::new(GreenNode {
31635 kind: SyntaxKind::TerminalLBrace,
31636 details: GreenNodeDetails::Node {
31637 children: vec![
31638 Trivia::missing(db).0,
31639 TokenLBrace::missing(db).0,
31640 Trivia::missing(db).0,
31641 ],
31642 width: TextWidth::default(),
31643 },
31644 })
31645 .intern(db),
31646 )
31647 }
31648 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31649 let kind = node.kind(db);
31650 assert_eq!(
31651 kind,
31652 SyntaxKind::TerminalLBrace,
31653 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31654 kind,
31655 SyntaxKind::TerminalLBrace
31656 );
31657 let children = db.get_children(node.clone());
31658 Self { node, children }
31659 }
31660 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31661 let kind = node.kind(db);
31662 if kind == SyntaxKind::TerminalLBrace {
31663 Some(Self::from_syntax_node(db, node))
31664 } else {
31665 None
31666 }
31667 }
31668 fn as_syntax_node(&self) -> SyntaxNode {
31669 self.node.clone()
31670 }
31671 fn stable_ptr(&self) -> Self::StablePtr {
31672 TerminalLBracePtr(self.node.0.stable_ptr)
31673 }
31674}
31675impl From<&TerminalLBrace> for SyntaxStablePtrId {
31676 fn from(node: &TerminalLBrace) -> Self {
31677 node.stable_ptr().untyped()
31678 }
31679}
31680#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31681pub struct TokenLBrack {
31682 node: SyntaxNode,
31683}
31684impl Token for TokenLBrack {
31685 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31686 TokenLBrackGreen(
31687 Arc::new(GreenNode {
31688 kind: SyntaxKind::TokenLBrack,
31689 details: GreenNodeDetails::Token(text),
31690 })
31691 .intern(db),
31692 )
31693 }
31694 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31695 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31696 .clone()
31697 }
31698}
31699#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31700pub struct TokenLBrackPtr(pub SyntaxStablePtrId);
31701impl TypedStablePtr for TokenLBrackPtr {
31702 type SyntaxNode = TokenLBrack;
31703 fn untyped(&self) -> SyntaxStablePtrId {
31704 self.0
31705 }
31706 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
31707 TokenLBrack::from_syntax_node(db, self.0.lookup(db))
31708 }
31709}
31710impl From<TokenLBrackPtr> for SyntaxStablePtrId {
31711 fn from(ptr: TokenLBrackPtr) -> Self {
31712 ptr.untyped()
31713 }
31714}
31715#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31716pub struct TokenLBrackGreen(pub GreenId);
31717impl TokenLBrackGreen {
31718 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31719 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31720 }
31721}
31722impl TypedSyntaxNode for TokenLBrack {
31723 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLBrack);
31724 type StablePtr = TokenLBrackPtr;
31725 type Green = TokenLBrackGreen;
31726 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31727 TokenLBrackGreen(
31728 Arc::new(GreenNode {
31729 kind: SyntaxKind::TokenMissing,
31730 details: GreenNodeDetails::Token("".into()),
31731 })
31732 .intern(db),
31733 )
31734 }
31735 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31736 match node.0.green.lookup_intern(db).details {
31737 GreenNodeDetails::Token(_) => Self { node },
31738 GreenNodeDetails::Node { .. } => {
31739 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLBrack)
31740 }
31741 }
31742 }
31743 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31744 match node.0.green.lookup_intern(db).details {
31745 GreenNodeDetails::Token(_) => Some(Self { node }),
31746 GreenNodeDetails::Node { .. } => None,
31747 }
31748 }
31749 fn as_syntax_node(&self) -> SyntaxNode {
31750 self.node.clone()
31751 }
31752 fn stable_ptr(&self) -> Self::StablePtr {
31753 TokenLBrackPtr(self.node.0.stable_ptr)
31754 }
31755}
31756impl From<&TokenLBrack> for SyntaxStablePtrId {
31757 fn from(node: &TokenLBrack) -> Self {
31758 node.stable_ptr().untyped()
31759 }
31760}
31761#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31762pub struct TerminalLBrack {
31763 node: SyntaxNode,
31764 children: Arc<[SyntaxNode]>,
31765}
31766impl Terminal for TerminalLBrack {
31767 const KIND: SyntaxKind = SyntaxKind::TerminalLBrack;
31768 type TokenType = TokenLBrack;
31769 fn new_green(
31770 db: &dyn SyntaxGroup,
31771 leading_trivia: TriviaGreen,
31772 token: <<TerminalLBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
31773 trailing_trivia: TriviaGreen,
31774 ) -> Self::Green {
31775 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31776 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31777 TerminalLBrackGreen(
31778 Arc::new(GreenNode {
31779 kind: SyntaxKind::TerminalLBrack,
31780 details: GreenNodeDetails::Node { children, width },
31781 })
31782 .intern(db),
31783 )
31784 }
31785 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31786 self.token(db).text(db)
31787 }
31788}
31789impl TerminalLBrack {
31790 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31791 Trivia::from_syntax_node(db, self.children[0].clone())
31792 }
31793 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLBrack {
31794 TokenLBrack::from_syntax_node(db, self.children[1].clone())
31795 }
31796 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31797 Trivia::from_syntax_node(db, self.children[2].clone())
31798 }
31799}
31800#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31801pub struct TerminalLBrackPtr(pub SyntaxStablePtrId);
31802impl TerminalLBrackPtr {}
31803impl TypedStablePtr for TerminalLBrackPtr {
31804 type SyntaxNode = TerminalLBrack;
31805 fn untyped(&self) -> SyntaxStablePtrId {
31806 self.0
31807 }
31808 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLBrack {
31809 TerminalLBrack::from_syntax_node(db, self.0.lookup(db))
31810 }
31811}
31812impl From<TerminalLBrackPtr> for SyntaxStablePtrId {
31813 fn from(ptr: TerminalLBrackPtr) -> Self {
31814 ptr.untyped()
31815 }
31816}
31817#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31818pub struct TerminalLBrackGreen(pub GreenId);
31819impl TypedSyntaxNode for TerminalLBrack {
31820 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLBrack);
31821 type StablePtr = TerminalLBrackPtr;
31822 type Green = TerminalLBrackGreen;
31823 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31824 TerminalLBrackGreen(
31825 Arc::new(GreenNode {
31826 kind: SyntaxKind::TerminalLBrack,
31827 details: GreenNodeDetails::Node {
31828 children: vec![
31829 Trivia::missing(db).0,
31830 TokenLBrack::missing(db).0,
31831 Trivia::missing(db).0,
31832 ],
31833 width: TextWidth::default(),
31834 },
31835 })
31836 .intern(db),
31837 )
31838 }
31839 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31840 let kind = node.kind(db);
31841 assert_eq!(
31842 kind,
31843 SyntaxKind::TerminalLBrack,
31844 "Unexpected SyntaxKind {:?}. Expected {:?}.",
31845 kind,
31846 SyntaxKind::TerminalLBrack
31847 );
31848 let children = db.get_children(node.clone());
31849 Self { node, children }
31850 }
31851 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31852 let kind = node.kind(db);
31853 if kind == SyntaxKind::TerminalLBrack {
31854 Some(Self::from_syntax_node(db, node))
31855 } else {
31856 None
31857 }
31858 }
31859 fn as_syntax_node(&self) -> SyntaxNode {
31860 self.node.clone()
31861 }
31862 fn stable_ptr(&self) -> Self::StablePtr {
31863 TerminalLBrackPtr(self.node.0.stable_ptr)
31864 }
31865}
31866impl From<&TerminalLBrack> for SyntaxStablePtrId {
31867 fn from(node: &TerminalLBrack) -> Self {
31868 node.stable_ptr().untyped()
31869 }
31870}
31871#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31872pub struct TokenLE {
31873 node: SyntaxNode,
31874}
31875impl Token for TokenLE {
31876 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
31877 TokenLEGreen(
31878 Arc::new(GreenNode {
31879 kind: SyntaxKind::TokenLE,
31880 details: GreenNodeDetails::Token(text),
31881 })
31882 .intern(db),
31883 )
31884 }
31885 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31886 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
31887 .clone()
31888 }
31889}
31890#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31891pub struct TokenLEPtr(pub SyntaxStablePtrId);
31892impl TypedStablePtr for TokenLEPtr {
31893 type SyntaxNode = TokenLE;
31894 fn untyped(&self) -> SyntaxStablePtrId {
31895 self.0
31896 }
31897 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLE {
31898 TokenLE::from_syntax_node(db, self.0.lookup(db))
31899 }
31900}
31901impl From<TokenLEPtr> for SyntaxStablePtrId {
31902 fn from(ptr: TokenLEPtr) -> Self {
31903 ptr.untyped()
31904 }
31905}
31906#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31907pub struct TokenLEGreen(pub GreenId);
31908impl TokenLEGreen {
31909 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31910 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
31911 }
31912}
31913impl TypedSyntaxNode for TokenLE {
31914 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLE);
31915 type StablePtr = TokenLEPtr;
31916 type Green = TokenLEGreen;
31917 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
31918 TokenLEGreen(
31919 Arc::new(GreenNode {
31920 kind: SyntaxKind::TokenMissing,
31921 details: GreenNodeDetails::Token("".into()),
31922 })
31923 .intern(db),
31924 )
31925 }
31926 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
31927 match node.0.green.lookup_intern(db).details {
31928 GreenNodeDetails::Token(_) => Self { node },
31929 GreenNodeDetails::Node { .. } => {
31930 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLE)
31931 }
31932 }
31933 }
31934 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
31935 match node.0.green.lookup_intern(db).details {
31936 GreenNodeDetails::Token(_) => Some(Self { node }),
31937 GreenNodeDetails::Node { .. } => None,
31938 }
31939 }
31940 fn as_syntax_node(&self) -> SyntaxNode {
31941 self.node.clone()
31942 }
31943 fn stable_ptr(&self) -> Self::StablePtr {
31944 TokenLEPtr(self.node.0.stable_ptr)
31945 }
31946}
31947impl From<&TokenLE> for SyntaxStablePtrId {
31948 fn from(node: &TokenLE) -> Self {
31949 node.stable_ptr().untyped()
31950 }
31951}
31952#[derive(Clone, Debug, Eq, Hash, PartialEq)]
31953pub struct TerminalLE {
31954 node: SyntaxNode,
31955 children: Arc<[SyntaxNode]>,
31956}
31957impl Terminal for TerminalLE {
31958 const KIND: SyntaxKind = SyntaxKind::TerminalLE;
31959 type TokenType = TokenLE;
31960 fn new_green(
31961 db: &dyn SyntaxGroup,
31962 leading_trivia: TriviaGreen,
31963 token: <<TerminalLE as Terminal>::TokenType as TypedSyntaxNode>::Green,
31964 trailing_trivia: TriviaGreen,
31965 ) -> Self::Green {
31966 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
31967 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
31968 TerminalLEGreen(
31969 Arc::new(GreenNode {
31970 kind: SyntaxKind::TerminalLE,
31971 details: GreenNodeDetails::Node { children, width },
31972 })
31973 .intern(db),
31974 )
31975 }
31976 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
31977 self.token(db).text(db)
31978 }
31979}
31980impl TerminalLE {
31981 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31982 Trivia::from_syntax_node(db, self.children[0].clone())
31983 }
31984 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLE {
31985 TokenLE::from_syntax_node(db, self.children[1].clone())
31986 }
31987 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
31988 Trivia::from_syntax_node(db, self.children[2].clone())
31989 }
31990}
31991#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
31992pub struct TerminalLEPtr(pub SyntaxStablePtrId);
31993impl TerminalLEPtr {}
31994impl TypedStablePtr for TerminalLEPtr {
31995 type SyntaxNode = TerminalLE;
31996 fn untyped(&self) -> SyntaxStablePtrId {
31997 self.0
31998 }
31999 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLE {
32000 TerminalLE::from_syntax_node(db, self.0.lookup(db))
32001 }
32002}
32003impl From<TerminalLEPtr> for SyntaxStablePtrId {
32004 fn from(ptr: TerminalLEPtr) -> Self {
32005 ptr.untyped()
32006 }
32007}
32008#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32009pub struct TerminalLEGreen(pub GreenId);
32010impl TypedSyntaxNode for TerminalLE {
32011 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLE);
32012 type StablePtr = TerminalLEPtr;
32013 type Green = TerminalLEGreen;
32014 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32015 TerminalLEGreen(
32016 Arc::new(GreenNode {
32017 kind: SyntaxKind::TerminalLE,
32018 details: GreenNodeDetails::Node {
32019 children: vec![
32020 Trivia::missing(db).0,
32021 TokenLE::missing(db).0,
32022 Trivia::missing(db).0,
32023 ],
32024 width: TextWidth::default(),
32025 },
32026 })
32027 .intern(db),
32028 )
32029 }
32030 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32031 let kind = node.kind(db);
32032 assert_eq!(
32033 kind,
32034 SyntaxKind::TerminalLE,
32035 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32036 kind,
32037 SyntaxKind::TerminalLE
32038 );
32039 let children = db.get_children(node.clone());
32040 Self { node, children }
32041 }
32042 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32043 let kind = node.kind(db);
32044 if kind == SyntaxKind::TerminalLE { Some(Self::from_syntax_node(db, node)) } else { None }
32045 }
32046 fn as_syntax_node(&self) -> SyntaxNode {
32047 self.node.clone()
32048 }
32049 fn stable_ptr(&self) -> Self::StablePtr {
32050 TerminalLEPtr(self.node.0.stable_ptr)
32051 }
32052}
32053impl From<&TerminalLE> for SyntaxStablePtrId {
32054 fn from(node: &TerminalLE) -> Self {
32055 node.stable_ptr().untyped()
32056 }
32057}
32058#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32059pub struct TokenLParen {
32060 node: SyntaxNode,
32061}
32062impl Token for TokenLParen {
32063 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32064 TokenLParenGreen(
32065 Arc::new(GreenNode {
32066 kind: SyntaxKind::TokenLParen,
32067 details: GreenNodeDetails::Token(text),
32068 })
32069 .intern(db),
32070 )
32071 }
32072 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32073 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32074 .clone()
32075 }
32076}
32077#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32078pub struct TokenLParenPtr(pub SyntaxStablePtrId);
32079impl TypedStablePtr for TokenLParenPtr {
32080 type SyntaxNode = TokenLParen;
32081 fn untyped(&self) -> SyntaxStablePtrId {
32082 self.0
32083 }
32084 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLParen {
32085 TokenLParen::from_syntax_node(db, self.0.lookup(db))
32086 }
32087}
32088impl From<TokenLParenPtr> for SyntaxStablePtrId {
32089 fn from(ptr: TokenLParenPtr) -> Self {
32090 ptr.untyped()
32091 }
32092}
32093#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32094pub struct TokenLParenGreen(pub GreenId);
32095impl TokenLParenGreen {
32096 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32097 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32098 }
32099}
32100impl TypedSyntaxNode for TokenLParen {
32101 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLParen);
32102 type StablePtr = TokenLParenPtr;
32103 type Green = TokenLParenGreen;
32104 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32105 TokenLParenGreen(
32106 Arc::new(GreenNode {
32107 kind: SyntaxKind::TokenMissing,
32108 details: GreenNodeDetails::Token("".into()),
32109 })
32110 .intern(db),
32111 )
32112 }
32113 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32114 match node.0.green.lookup_intern(db).details {
32115 GreenNodeDetails::Token(_) => Self { node },
32116 GreenNodeDetails::Node { .. } => {
32117 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLParen)
32118 }
32119 }
32120 }
32121 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32122 match node.0.green.lookup_intern(db).details {
32123 GreenNodeDetails::Token(_) => Some(Self { node }),
32124 GreenNodeDetails::Node { .. } => None,
32125 }
32126 }
32127 fn as_syntax_node(&self) -> SyntaxNode {
32128 self.node.clone()
32129 }
32130 fn stable_ptr(&self) -> Self::StablePtr {
32131 TokenLParenPtr(self.node.0.stable_ptr)
32132 }
32133}
32134impl From<&TokenLParen> for SyntaxStablePtrId {
32135 fn from(node: &TokenLParen) -> Self {
32136 node.stable_ptr().untyped()
32137 }
32138}
32139#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32140pub struct TerminalLParen {
32141 node: SyntaxNode,
32142 children: Arc<[SyntaxNode]>,
32143}
32144impl Terminal for TerminalLParen {
32145 const KIND: SyntaxKind = SyntaxKind::TerminalLParen;
32146 type TokenType = TokenLParen;
32147 fn new_green(
32148 db: &dyn SyntaxGroup,
32149 leading_trivia: TriviaGreen,
32150 token: <<TerminalLParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
32151 trailing_trivia: TriviaGreen,
32152 ) -> Self::Green {
32153 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32154 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32155 TerminalLParenGreen(
32156 Arc::new(GreenNode {
32157 kind: SyntaxKind::TerminalLParen,
32158 details: GreenNodeDetails::Node { children, width },
32159 })
32160 .intern(db),
32161 )
32162 }
32163 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32164 self.token(db).text(db)
32165 }
32166}
32167impl TerminalLParen {
32168 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32169 Trivia::from_syntax_node(db, self.children[0].clone())
32170 }
32171 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLParen {
32172 TokenLParen::from_syntax_node(db, self.children[1].clone())
32173 }
32174 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32175 Trivia::from_syntax_node(db, self.children[2].clone())
32176 }
32177}
32178#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32179pub struct TerminalLParenPtr(pub SyntaxStablePtrId);
32180impl TerminalLParenPtr {}
32181impl TypedStablePtr for TerminalLParenPtr {
32182 type SyntaxNode = TerminalLParen;
32183 fn untyped(&self) -> SyntaxStablePtrId {
32184 self.0
32185 }
32186 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLParen {
32187 TerminalLParen::from_syntax_node(db, self.0.lookup(db))
32188 }
32189}
32190impl From<TerminalLParenPtr> for SyntaxStablePtrId {
32191 fn from(ptr: TerminalLParenPtr) -> Self {
32192 ptr.untyped()
32193 }
32194}
32195#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32196pub struct TerminalLParenGreen(pub GreenId);
32197impl TypedSyntaxNode for TerminalLParen {
32198 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLParen);
32199 type StablePtr = TerminalLParenPtr;
32200 type Green = TerminalLParenGreen;
32201 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32202 TerminalLParenGreen(
32203 Arc::new(GreenNode {
32204 kind: SyntaxKind::TerminalLParen,
32205 details: GreenNodeDetails::Node {
32206 children: vec![
32207 Trivia::missing(db).0,
32208 TokenLParen::missing(db).0,
32209 Trivia::missing(db).0,
32210 ],
32211 width: TextWidth::default(),
32212 },
32213 })
32214 .intern(db),
32215 )
32216 }
32217 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32218 let kind = node.kind(db);
32219 assert_eq!(
32220 kind,
32221 SyntaxKind::TerminalLParen,
32222 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32223 kind,
32224 SyntaxKind::TerminalLParen
32225 );
32226 let children = db.get_children(node.clone());
32227 Self { node, children }
32228 }
32229 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32230 let kind = node.kind(db);
32231 if kind == SyntaxKind::TerminalLParen {
32232 Some(Self::from_syntax_node(db, node))
32233 } else {
32234 None
32235 }
32236 }
32237 fn as_syntax_node(&self) -> SyntaxNode {
32238 self.node.clone()
32239 }
32240 fn stable_ptr(&self) -> Self::StablePtr {
32241 TerminalLParenPtr(self.node.0.stable_ptr)
32242 }
32243}
32244impl From<&TerminalLParen> for SyntaxStablePtrId {
32245 fn from(node: &TerminalLParen) -> Self {
32246 node.stable_ptr().untyped()
32247 }
32248}
32249#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32250pub struct TokenLT {
32251 node: SyntaxNode,
32252}
32253impl Token for TokenLT {
32254 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32255 TokenLTGreen(
32256 Arc::new(GreenNode {
32257 kind: SyntaxKind::TokenLT,
32258 details: GreenNodeDetails::Token(text),
32259 })
32260 .intern(db),
32261 )
32262 }
32263 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32264 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32265 .clone()
32266 }
32267}
32268#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32269pub struct TokenLTPtr(pub SyntaxStablePtrId);
32270impl TypedStablePtr for TokenLTPtr {
32271 type SyntaxNode = TokenLT;
32272 fn untyped(&self) -> SyntaxStablePtrId {
32273 self.0
32274 }
32275 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenLT {
32276 TokenLT::from_syntax_node(db, self.0.lookup(db))
32277 }
32278}
32279impl From<TokenLTPtr> for SyntaxStablePtrId {
32280 fn from(ptr: TokenLTPtr) -> Self {
32281 ptr.untyped()
32282 }
32283}
32284#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32285pub struct TokenLTGreen(pub GreenId);
32286impl TokenLTGreen {
32287 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32288 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32289 }
32290}
32291impl TypedSyntaxNode for TokenLT {
32292 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenLT);
32293 type StablePtr = TokenLTPtr;
32294 type Green = TokenLTGreen;
32295 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32296 TokenLTGreen(
32297 Arc::new(GreenNode {
32298 kind: SyntaxKind::TokenMissing,
32299 details: GreenNodeDetails::Token("".into()),
32300 })
32301 .intern(db),
32302 )
32303 }
32304 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32305 match node.0.green.lookup_intern(db).details {
32306 GreenNodeDetails::Token(_) => Self { node },
32307 GreenNodeDetails::Node { .. } => {
32308 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenLT)
32309 }
32310 }
32311 }
32312 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32313 match node.0.green.lookup_intern(db).details {
32314 GreenNodeDetails::Token(_) => Some(Self { node }),
32315 GreenNodeDetails::Node { .. } => None,
32316 }
32317 }
32318 fn as_syntax_node(&self) -> SyntaxNode {
32319 self.node.clone()
32320 }
32321 fn stable_ptr(&self) -> Self::StablePtr {
32322 TokenLTPtr(self.node.0.stable_ptr)
32323 }
32324}
32325impl From<&TokenLT> for SyntaxStablePtrId {
32326 fn from(node: &TokenLT) -> Self {
32327 node.stable_ptr().untyped()
32328 }
32329}
32330#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32331pub struct TerminalLT {
32332 node: SyntaxNode,
32333 children: Arc<[SyntaxNode]>,
32334}
32335impl Terminal for TerminalLT {
32336 const KIND: SyntaxKind = SyntaxKind::TerminalLT;
32337 type TokenType = TokenLT;
32338 fn new_green(
32339 db: &dyn SyntaxGroup,
32340 leading_trivia: TriviaGreen,
32341 token: <<TerminalLT as Terminal>::TokenType as TypedSyntaxNode>::Green,
32342 trailing_trivia: TriviaGreen,
32343 ) -> Self::Green {
32344 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32345 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32346 TerminalLTGreen(
32347 Arc::new(GreenNode {
32348 kind: SyntaxKind::TerminalLT,
32349 details: GreenNodeDetails::Node { children, width },
32350 })
32351 .intern(db),
32352 )
32353 }
32354 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32355 self.token(db).text(db)
32356 }
32357}
32358impl TerminalLT {
32359 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32360 Trivia::from_syntax_node(db, self.children[0].clone())
32361 }
32362 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenLT {
32363 TokenLT::from_syntax_node(db, self.children[1].clone())
32364 }
32365 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32366 Trivia::from_syntax_node(db, self.children[2].clone())
32367 }
32368}
32369#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32370pub struct TerminalLTPtr(pub SyntaxStablePtrId);
32371impl TerminalLTPtr {}
32372impl TypedStablePtr for TerminalLTPtr {
32373 type SyntaxNode = TerminalLT;
32374 fn untyped(&self) -> SyntaxStablePtrId {
32375 self.0
32376 }
32377 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalLT {
32378 TerminalLT::from_syntax_node(db, self.0.lookup(db))
32379 }
32380}
32381impl From<TerminalLTPtr> for SyntaxStablePtrId {
32382 fn from(ptr: TerminalLTPtr) -> Self {
32383 ptr.untyped()
32384 }
32385}
32386#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32387pub struct TerminalLTGreen(pub GreenId);
32388impl TypedSyntaxNode for TerminalLT {
32389 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalLT);
32390 type StablePtr = TerminalLTPtr;
32391 type Green = TerminalLTGreen;
32392 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32393 TerminalLTGreen(
32394 Arc::new(GreenNode {
32395 kind: SyntaxKind::TerminalLT,
32396 details: GreenNodeDetails::Node {
32397 children: vec![
32398 Trivia::missing(db).0,
32399 TokenLT::missing(db).0,
32400 Trivia::missing(db).0,
32401 ],
32402 width: TextWidth::default(),
32403 },
32404 })
32405 .intern(db),
32406 )
32407 }
32408 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32409 let kind = node.kind(db);
32410 assert_eq!(
32411 kind,
32412 SyntaxKind::TerminalLT,
32413 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32414 kind,
32415 SyntaxKind::TerminalLT
32416 );
32417 let children = db.get_children(node.clone());
32418 Self { node, children }
32419 }
32420 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32421 let kind = node.kind(db);
32422 if kind == SyntaxKind::TerminalLT { Some(Self::from_syntax_node(db, node)) } else { None }
32423 }
32424 fn as_syntax_node(&self) -> SyntaxNode {
32425 self.node.clone()
32426 }
32427 fn stable_ptr(&self) -> Self::StablePtr {
32428 TerminalLTPtr(self.node.0.stable_ptr)
32429 }
32430}
32431impl From<&TerminalLT> for SyntaxStablePtrId {
32432 fn from(node: &TerminalLT) -> Self {
32433 node.stable_ptr().untyped()
32434 }
32435}
32436#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32437pub struct TokenMatchArrow {
32438 node: SyntaxNode,
32439}
32440impl Token for TokenMatchArrow {
32441 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32442 TokenMatchArrowGreen(
32443 Arc::new(GreenNode {
32444 kind: SyntaxKind::TokenMatchArrow,
32445 details: GreenNodeDetails::Token(text),
32446 })
32447 .intern(db),
32448 )
32449 }
32450 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32451 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32452 .clone()
32453 }
32454}
32455#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32456pub struct TokenMatchArrowPtr(pub SyntaxStablePtrId);
32457impl TypedStablePtr for TokenMatchArrowPtr {
32458 type SyntaxNode = TokenMatchArrow;
32459 fn untyped(&self) -> SyntaxStablePtrId {
32460 self.0
32461 }
32462 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
32463 TokenMatchArrow::from_syntax_node(db, self.0.lookup(db))
32464 }
32465}
32466impl From<TokenMatchArrowPtr> for SyntaxStablePtrId {
32467 fn from(ptr: TokenMatchArrowPtr) -> Self {
32468 ptr.untyped()
32469 }
32470}
32471#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32472pub struct TokenMatchArrowGreen(pub GreenId);
32473impl TokenMatchArrowGreen {
32474 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32475 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32476 }
32477}
32478impl TypedSyntaxNode for TokenMatchArrow {
32479 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMatchArrow);
32480 type StablePtr = TokenMatchArrowPtr;
32481 type Green = TokenMatchArrowGreen;
32482 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32483 TokenMatchArrowGreen(
32484 Arc::new(GreenNode {
32485 kind: SyntaxKind::TokenMissing,
32486 details: GreenNodeDetails::Token("".into()),
32487 })
32488 .intern(db),
32489 )
32490 }
32491 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32492 match node.0.green.lookup_intern(db).details {
32493 GreenNodeDetails::Token(_) => Self { node },
32494 GreenNodeDetails::Node { .. } => {
32495 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMatchArrow)
32496 }
32497 }
32498 }
32499 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32500 match node.0.green.lookup_intern(db).details {
32501 GreenNodeDetails::Token(_) => Some(Self { node }),
32502 GreenNodeDetails::Node { .. } => None,
32503 }
32504 }
32505 fn as_syntax_node(&self) -> SyntaxNode {
32506 self.node.clone()
32507 }
32508 fn stable_ptr(&self) -> Self::StablePtr {
32509 TokenMatchArrowPtr(self.node.0.stable_ptr)
32510 }
32511}
32512impl From<&TokenMatchArrow> for SyntaxStablePtrId {
32513 fn from(node: &TokenMatchArrow) -> Self {
32514 node.stable_ptr().untyped()
32515 }
32516}
32517#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32518pub struct TerminalMatchArrow {
32519 node: SyntaxNode,
32520 children: Arc<[SyntaxNode]>,
32521}
32522impl Terminal for TerminalMatchArrow {
32523 const KIND: SyntaxKind = SyntaxKind::TerminalMatchArrow;
32524 type TokenType = TokenMatchArrow;
32525 fn new_green(
32526 db: &dyn SyntaxGroup,
32527 leading_trivia: TriviaGreen,
32528 token: <<TerminalMatchArrow as Terminal>::TokenType as TypedSyntaxNode>::Green,
32529 trailing_trivia: TriviaGreen,
32530 ) -> Self::Green {
32531 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32532 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32533 TerminalMatchArrowGreen(
32534 Arc::new(GreenNode {
32535 kind: SyntaxKind::TerminalMatchArrow,
32536 details: GreenNodeDetails::Node { children, width },
32537 })
32538 .intern(db),
32539 )
32540 }
32541 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32542 self.token(db).text(db)
32543 }
32544}
32545impl TerminalMatchArrow {
32546 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32547 Trivia::from_syntax_node(db, self.children[0].clone())
32548 }
32549 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMatchArrow {
32550 TokenMatchArrow::from_syntax_node(db, self.children[1].clone())
32551 }
32552 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32553 Trivia::from_syntax_node(db, self.children[2].clone())
32554 }
32555}
32556#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32557pub struct TerminalMatchArrowPtr(pub SyntaxStablePtrId);
32558impl TerminalMatchArrowPtr {}
32559impl TypedStablePtr for TerminalMatchArrowPtr {
32560 type SyntaxNode = TerminalMatchArrow;
32561 fn untyped(&self) -> SyntaxStablePtrId {
32562 self.0
32563 }
32564 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMatchArrow {
32565 TerminalMatchArrow::from_syntax_node(db, self.0.lookup(db))
32566 }
32567}
32568impl From<TerminalMatchArrowPtr> for SyntaxStablePtrId {
32569 fn from(ptr: TerminalMatchArrowPtr) -> Self {
32570 ptr.untyped()
32571 }
32572}
32573#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32574pub struct TerminalMatchArrowGreen(pub GreenId);
32575impl TypedSyntaxNode for TerminalMatchArrow {
32576 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMatchArrow);
32577 type StablePtr = TerminalMatchArrowPtr;
32578 type Green = TerminalMatchArrowGreen;
32579 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32580 TerminalMatchArrowGreen(
32581 Arc::new(GreenNode {
32582 kind: SyntaxKind::TerminalMatchArrow,
32583 details: GreenNodeDetails::Node {
32584 children: vec![
32585 Trivia::missing(db).0,
32586 TokenMatchArrow::missing(db).0,
32587 Trivia::missing(db).0,
32588 ],
32589 width: TextWidth::default(),
32590 },
32591 })
32592 .intern(db),
32593 )
32594 }
32595 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32596 let kind = node.kind(db);
32597 assert_eq!(
32598 kind,
32599 SyntaxKind::TerminalMatchArrow,
32600 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32601 kind,
32602 SyntaxKind::TerminalMatchArrow
32603 );
32604 let children = db.get_children(node.clone());
32605 Self { node, children }
32606 }
32607 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32608 let kind = node.kind(db);
32609 if kind == SyntaxKind::TerminalMatchArrow {
32610 Some(Self::from_syntax_node(db, node))
32611 } else {
32612 None
32613 }
32614 }
32615 fn as_syntax_node(&self) -> SyntaxNode {
32616 self.node.clone()
32617 }
32618 fn stable_ptr(&self) -> Self::StablePtr {
32619 TerminalMatchArrowPtr(self.node.0.stable_ptr)
32620 }
32621}
32622impl From<&TerminalMatchArrow> for SyntaxStablePtrId {
32623 fn from(node: &TerminalMatchArrow) -> Self {
32624 node.stable_ptr().untyped()
32625 }
32626}
32627#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32628pub struct TokenMinus {
32629 node: SyntaxNode,
32630}
32631impl Token for TokenMinus {
32632 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32633 TokenMinusGreen(
32634 Arc::new(GreenNode {
32635 kind: SyntaxKind::TokenMinus,
32636 details: GreenNodeDetails::Token(text),
32637 })
32638 .intern(db),
32639 )
32640 }
32641 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32642 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32643 .clone()
32644 }
32645}
32646#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32647pub struct TokenMinusPtr(pub SyntaxStablePtrId);
32648impl TypedStablePtr for TokenMinusPtr {
32649 type SyntaxNode = TokenMinus;
32650 fn untyped(&self) -> SyntaxStablePtrId {
32651 self.0
32652 }
32653 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinus {
32654 TokenMinus::from_syntax_node(db, self.0.lookup(db))
32655 }
32656}
32657impl From<TokenMinusPtr> for SyntaxStablePtrId {
32658 fn from(ptr: TokenMinusPtr) -> Self {
32659 ptr.untyped()
32660 }
32661}
32662#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32663pub struct TokenMinusGreen(pub GreenId);
32664impl TokenMinusGreen {
32665 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32666 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32667 }
32668}
32669impl TypedSyntaxNode for TokenMinus {
32670 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinus);
32671 type StablePtr = TokenMinusPtr;
32672 type Green = TokenMinusGreen;
32673 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32674 TokenMinusGreen(
32675 Arc::new(GreenNode {
32676 kind: SyntaxKind::TokenMissing,
32677 details: GreenNodeDetails::Token("".into()),
32678 })
32679 .intern(db),
32680 )
32681 }
32682 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32683 match node.0.green.lookup_intern(db).details {
32684 GreenNodeDetails::Token(_) => Self { node },
32685 GreenNodeDetails::Node { .. } => {
32686 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinus)
32687 }
32688 }
32689 }
32690 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32691 match node.0.green.lookup_intern(db).details {
32692 GreenNodeDetails::Token(_) => Some(Self { node }),
32693 GreenNodeDetails::Node { .. } => None,
32694 }
32695 }
32696 fn as_syntax_node(&self) -> SyntaxNode {
32697 self.node.clone()
32698 }
32699 fn stable_ptr(&self) -> Self::StablePtr {
32700 TokenMinusPtr(self.node.0.stable_ptr)
32701 }
32702}
32703impl From<&TokenMinus> for SyntaxStablePtrId {
32704 fn from(node: &TokenMinus) -> Self {
32705 node.stable_ptr().untyped()
32706 }
32707}
32708#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32709pub struct TerminalMinus {
32710 node: SyntaxNode,
32711 children: Arc<[SyntaxNode]>,
32712}
32713impl Terminal for TerminalMinus {
32714 const KIND: SyntaxKind = SyntaxKind::TerminalMinus;
32715 type TokenType = TokenMinus;
32716 fn new_green(
32717 db: &dyn SyntaxGroup,
32718 leading_trivia: TriviaGreen,
32719 token: <<TerminalMinus as Terminal>::TokenType as TypedSyntaxNode>::Green,
32720 trailing_trivia: TriviaGreen,
32721 ) -> Self::Green {
32722 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32723 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32724 TerminalMinusGreen(
32725 Arc::new(GreenNode {
32726 kind: SyntaxKind::TerminalMinus,
32727 details: GreenNodeDetails::Node { children, width },
32728 })
32729 .intern(db),
32730 )
32731 }
32732 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32733 self.token(db).text(db)
32734 }
32735}
32736impl TerminalMinus {
32737 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32738 Trivia::from_syntax_node(db, self.children[0].clone())
32739 }
32740 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinus {
32741 TokenMinus::from_syntax_node(db, self.children[1].clone())
32742 }
32743 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32744 Trivia::from_syntax_node(db, self.children[2].clone())
32745 }
32746}
32747#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32748pub struct TerminalMinusPtr(pub SyntaxStablePtrId);
32749impl TerminalMinusPtr {}
32750impl TypedStablePtr for TerminalMinusPtr {
32751 type SyntaxNode = TerminalMinus;
32752 fn untyped(&self) -> SyntaxStablePtrId {
32753 self.0
32754 }
32755 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinus {
32756 TerminalMinus::from_syntax_node(db, self.0.lookup(db))
32757 }
32758}
32759impl From<TerminalMinusPtr> for SyntaxStablePtrId {
32760 fn from(ptr: TerminalMinusPtr) -> Self {
32761 ptr.untyped()
32762 }
32763}
32764#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32765pub struct TerminalMinusGreen(pub GreenId);
32766impl TypedSyntaxNode for TerminalMinus {
32767 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinus);
32768 type StablePtr = TerminalMinusPtr;
32769 type Green = TerminalMinusGreen;
32770 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32771 TerminalMinusGreen(
32772 Arc::new(GreenNode {
32773 kind: SyntaxKind::TerminalMinus,
32774 details: GreenNodeDetails::Node {
32775 children: vec![
32776 Trivia::missing(db).0,
32777 TokenMinus::missing(db).0,
32778 Trivia::missing(db).0,
32779 ],
32780 width: TextWidth::default(),
32781 },
32782 })
32783 .intern(db),
32784 )
32785 }
32786 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32787 let kind = node.kind(db);
32788 assert_eq!(
32789 kind,
32790 SyntaxKind::TerminalMinus,
32791 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32792 kind,
32793 SyntaxKind::TerminalMinus
32794 );
32795 let children = db.get_children(node.clone());
32796 Self { node, children }
32797 }
32798 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32799 let kind = node.kind(db);
32800 if kind == SyntaxKind::TerminalMinus {
32801 Some(Self::from_syntax_node(db, node))
32802 } else {
32803 None
32804 }
32805 }
32806 fn as_syntax_node(&self) -> SyntaxNode {
32807 self.node.clone()
32808 }
32809 fn stable_ptr(&self) -> Self::StablePtr {
32810 TerminalMinusPtr(self.node.0.stable_ptr)
32811 }
32812}
32813impl From<&TerminalMinus> for SyntaxStablePtrId {
32814 fn from(node: &TerminalMinus) -> Self {
32815 node.stable_ptr().untyped()
32816 }
32817}
32818#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32819pub struct TokenMinusEq {
32820 node: SyntaxNode,
32821}
32822impl Token for TokenMinusEq {
32823 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
32824 TokenMinusEqGreen(
32825 Arc::new(GreenNode {
32826 kind: SyntaxKind::TokenMinusEq,
32827 details: GreenNodeDetails::Token(text),
32828 })
32829 .intern(db),
32830 )
32831 }
32832 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32833 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
32834 .clone()
32835 }
32836}
32837#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32838pub struct TokenMinusEqPtr(pub SyntaxStablePtrId);
32839impl TypedStablePtr for TokenMinusEqPtr {
32840 type SyntaxNode = TokenMinusEq;
32841 fn untyped(&self) -> SyntaxStablePtrId {
32842 self.0
32843 }
32844 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
32845 TokenMinusEq::from_syntax_node(db, self.0.lookup(db))
32846 }
32847}
32848impl From<TokenMinusEqPtr> for SyntaxStablePtrId {
32849 fn from(ptr: TokenMinusEqPtr) -> Self {
32850 ptr.untyped()
32851 }
32852}
32853#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32854pub struct TokenMinusEqGreen(pub GreenId);
32855impl TokenMinusEqGreen {
32856 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32857 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
32858 }
32859}
32860impl TypedSyntaxNode for TokenMinusEq {
32861 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMinusEq);
32862 type StablePtr = TokenMinusEqPtr;
32863 type Green = TokenMinusEqGreen;
32864 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32865 TokenMinusEqGreen(
32866 Arc::new(GreenNode {
32867 kind: SyntaxKind::TokenMissing,
32868 details: GreenNodeDetails::Token("".into()),
32869 })
32870 .intern(db),
32871 )
32872 }
32873 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32874 match node.0.green.lookup_intern(db).details {
32875 GreenNodeDetails::Token(_) => Self { node },
32876 GreenNodeDetails::Node { .. } => {
32877 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMinusEq)
32878 }
32879 }
32880 }
32881 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32882 match node.0.green.lookup_intern(db).details {
32883 GreenNodeDetails::Token(_) => Some(Self { node }),
32884 GreenNodeDetails::Node { .. } => None,
32885 }
32886 }
32887 fn as_syntax_node(&self) -> SyntaxNode {
32888 self.node.clone()
32889 }
32890 fn stable_ptr(&self) -> Self::StablePtr {
32891 TokenMinusEqPtr(self.node.0.stable_ptr)
32892 }
32893}
32894impl From<&TokenMinusEq> for SyntaxStablePtrId {
32895 fn from(node: &TokenMinusEq) -> Self {
32896 node.stable_ptr().untyped()
32897 }
32898}
32899#[derive(Clone, Debug, Eq, Hash, PartialEq)]
32900pub struct TerminalMinusEq {
32901 node: SyntaxNode,
32902 children: Arc<[SyntaxNode]>,
32903}
32904impl Terminal for TerminalMinusEq {
32905 const KIND: SyntaxKind = SyntaxKind::TerminalMinusEq;
32906 type TokenType = TokenMinusEq;
32907 fn new_green(
32908 db: &dyn SyntaxGroup,
32909 leading_trivia: TriviaGreen,
32910 token: <<TerminalMinusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
32911 trailing_trivia: TriviaGreen,
32912 ) -> Self::Green {
32913 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
32914 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
32915 TerminalMinusEqGreen(
32916 Arc::new(GreenNode {
32917 kind: SyntaxKind::TerminalMinusEq,
32918 details: GreenNodeDetails::Node { children, width },
32919 })
32920 .intern(db),
32921 )
32922 }
32923 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
32924 self.token(db).text(db)
32925 }
32926}
32927impl TerminalMinusEq {
32928 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32929 Trivia::from_syntax_node(db, self.children[0].clone())
32930 }
32931 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMinusEq {
32932 TokenMinusEq::from_syntax_node(db, self.children[1].clone())
32933 }
32934 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
32935 Trivia::from_syntax_node(db, self.children[2].clone())
32936 }
32937}
32938#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32939pub struct TerminalMinusEqPtr(pub SyntaxStablePtrId);
32940impl TerminalMinusEqPtr {}
32941impl TypedStablePtr for TerminalMinusEqPtr {
32942 type SyntaxNode = TerminalMinusEq;
32943 fn untyped(&self) -> SyntaxStablePtrId {
32944 self.0
32945 }
32946 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMinusEq {
32947 TerminalMinusEq::from_syntax_node(db, self.0.lookup(db))
32948 }
32949}
32950impl From<TerminalMinusEqPtr> for SyntaxStablePtrId {
32951 fn from(ptr: TerminalMinusEqPtr) -> Self {
32952 ptr.untyped()
32953 }
32954}
32955#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
32956pub struct TerminalMinusEqGreen(pub GreenId);
32957impl TypedSyntaxNode for TerminalMinusEq {
32958 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMinusEq);
32959 type StablePtr = TerminalMinusEqPtr;
32960 type Green = TerminalMinusEqGreen;
32961 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
32962 TerminalMinusEqGreen(
32963 Arc::new(GreenNode {
32964 kind: SyntaxKind::TerminalMinusEq,
32965 details: GreenNodeDetails::Node {
32966 children: vec![
32967 Trivia::missing(db).0,
32968 TokenMinusEq::missing(db).0,
32969 Trivia::missing(db).0,
32970 ],
32971 width: TextWidth::default(),
32972 },
32973 })
32974 .intern(db),
32975 )
32976 }
32977 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
32978 let kind = node.kind(db);
32979 assert_eq!(
32980 kind,
32981 SyntaxKind::TerminalMinusEq,
32982 "Unexpected SyntaxKind {:?}. Expected {:?}.",
32983 kind,
32984 SyntaxKind::TerminalMinusEq
32985 );
32986 let children = db.get_children(node.clone());
32987 Self { node, children }
32988 }
32989 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
32990 let kind = node.kind(db);
32991 if kind == SyntaxKind::TerminalMinusEq {
32992 Some(Self::from_syntax_node(db, node))
32993 } else {
32994 None
32995 }
32996 }
32997 fn as_syntax_node(&self) -> SyntaxNode {
32998 self.node.clone()
32999 }
33000 fn stable_ptr(&self) -> Self::StablePtr {
33001 TerminalMinusEqPtr(self.node.0.stable_ptr)
33002 }
33003}
33004impl From<&TerminalMinusEq> for SyntaxStablePtrId {
33005 fn from(node: &TerminalMinusEq) -> Self {
33006 node.stable_ptr().untyped()
33007 }
33008}
33009#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33010pub struct TokenMod {
33011 node: SyntaxNode,
33012}
33013impl Token for TokenMod {
33014 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33015 TokenModGreen(
33016 Arc::new(GreenNode {
33017 kind: SyntaxKind::TokenMod,
33018 details: GreenNodeDetails::Token(text),
33019 })
33020 .intern(db),
33021 )
33022 }
33023 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33024 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33025 .clone()
33026 }
33027}
33028#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33029pub struct TokenModPtr(pub SyntaxStablePtrId);
33030impl TypedStablePtr for TokenModPtr {
33031 type SyntaxNode = TokenMod;
33032 fn untyped(&self) -> SyntaxStablePtrId {
33033 self.0
33034 }
33035 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMod {
33036 TokenMod::from_syntax_node(db, self.0.lookup(db))
33037 }
33038}
33039impl From<TokenModPtr> for SyntaxStablePtrId {
33040 fn from(ptr: TokenModPtr) -> Self {
33041 ptr.untyped()
33042 }
33043}
33044#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33045pub struct TokenModGreen(pub GreenId);
33046impl TokenModGreen {
33047 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33048 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33049 }
33050}
33051impl TypedSyntaxNode for TokenMod {
33052 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMod);
33053 type StablePtr = TokenModPtr;
33054 type Green = TokenModGreen;
33055 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33056 TokenModGreen(
33057 Arc::new(GreenNode {
33058 kind: SyntaxKind::TokenMissing,
33059 details: GreenNodeDetails::Token("".into()),
33060 })
33061 .intern(db),
33062 )
33063 }
33064 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33065 match node.0.green.lookup_intern(db).details {
33066 GreenNodeDetails::Token(_) => Self { node },
33067 GreenNodeDetails::Node { .. } => {
33068 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMod)
33069 }
33070 }
33071 }
33072 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33073 match node.0.green.lookup_intern(db).details {
33074 GreenNodeDetails::Token(_) => Some(Self { node }),
33075 GreenNodeDetails::Node { .. } => None,
33076 }
33077 }
33078 fn as_syntax_node(&self) -> SyntaxNode {
33079 self.node.clone()
33080 }
33081 fn stable_ptr(&self) -> Self::StablePtr {
33082 TokenModPtr(self.node.0.stable_ptr)
33083 }
33084}
33085impl From<&TokenMod> for SyntaxStablePtrId {
33086 fn from(node: &TokenMod) -> Self {
33087 node.stable_ptr().untyped()
33088 }
33089}
33090#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33091pub struct TerminalMod {
33092 node: SyntaxNode,
33093 children: Arc<[SyntaxNode]>,
33094}
33095impl Terminal for TerminalMod {
33096 const KIND: SyntaxKind = SyntaxKind::TerminalMod;
33097 type TokenType = TokenMod;
33098 fn new_green(
33099 db: &dyn SyntaxGroup,
33100 leading_trivia: TriviaGreen,
33101 token: <<TerminalMod as Terminal>::TokenType as TypedSyntaxNode>::Green,
33102 trailing_trivia: TriviaGreen,
33103 ) -> Self::Green {
33104 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33105 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33106 TerminalModGreen(
33107 Arc::new(GreenNode {
33108 kind: SyntaxKind::TerminalMod,
33109 details: GreenNodeDetails::Node { children, width },
33110 })
33111 .intern(db),
33112 )
33113 }
33114 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33115 self.token(db).text(db)
33116 }
33117}
33118impl TerminalMod {
33119 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33120 Trivia::from_syntax_node(db, self.children[0].clone())
33121 }
33122 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMod {
33123 TokenMod::from_syntax_node(db, self.children[1].clone())
33124 }
33125 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33126 Trivia::from_syntax_node(db, self.children[2].clone())
33127 }
33128}
33129#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33130pub struct TerminalModPtr(pub SyntaxStablePtrId);
33131impl TerminalModPtr {}
33132impl TypedStablePtr for TerminalModPtr {
33133 type SyntaxNode = TerminalMod;
33134 fn untyped(&self) -> SyntaxStablePtrId {
33135 self.0
33136 }
33137 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMod {
33138 TerminalMod::from_syntax_node(db, self.0.lookup(db))
33139 }
33140}
33141impl From<TerminalModPtr> for SyntaxStablePtrId {
33142 fn from(ptr: TerminalModPtr) -> Self {
33143 ptr.untyped()
33144 }
33145}
33146#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33147pub struct TerminalModGreen(pub GreenId);
33148impl TypedSyntaxNode for TerminalMod {
33149 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMod);
33150 type StablePtr = TerminalModPtr;
33151 type Green = TerminalModGreen;
33152 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33153 TerminalModGreen(
33154 Arc::new(GreenNode {
33155 kind: SyntaxKind::TerminalMod,
33156 details: GreenNodeDetails::Node {
33157 children: vec![
33158 Trivia::missing(db).0,
33159 TokenMod::missing(db).0,
33160 Trivia::missing(db).0,
33161 ],
33162 width: TextWidth::default(),
33163 },
33164 })
33165 .intern(db),
33166 )
33167 }
33168 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33169 let kind = node.kind(db);
33170 assert_eq!(
33171 kind,
33172 SyntaxKind::TerminalMod,
33173 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33174 kind,
33175 SyntaxKind::TerminalMod
33176 );
33177 let children = db.get_children(node.clone());
33178 Self { node, children }
33179 }
33180 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33181 let kind = node.kind(db);
33182 if kind == SyntaxKind::TerminalMod { Some(Self::from_syntax_node(db, node)) } else { None }
33183 }
33184 fn as_syntax_node(&self) -> SyntaxNode {
33185 self.node.clone()
33186 }
33187 fn stable_ptr(&self) -> Self::StablePtr {
33188 TerminalModPtr(self.node.0.stable_ptr)
33189 }
33190}
33191impl From<&TerminalMod> for SyntaxStablePtrId {
33192 fn from(node: &TerminalMod) -> Self {
33193 node.stable_ptr().untyped()
33194 }
33195}
33196#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33197pub struct TokenModEq {
33198 node: SyntaxNode,
33199}
33200impl Token for TokenModEq {
33201 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33202 TokenModEqGreen(
33203 Arc::new(GreenNode {
33204 kind: SyntaxKind::TokenModEq,
33205 details: GreenNodeDetails::Token(text),
33206 })
33207 .intern(db),
33208 )
33209 }
33210 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33211 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33212 .clone()
33213 }
33214}
33215#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33216pub struct TokenModEqPtr(pub SyntaxStablePtrId);
33217impl TypedStablePtr for TokenModEqPtr {
33218 type SyntaxNode = TokenModEq;
33219 fn untyped(&self) -> SyntaxStablePtrId {
33220 self.0
33221 }
33222 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenModEq {
33223 TokenModEq::from_syntax_node(db, self.0.lookup(db))
33224 }
33225}
33226impl From<TokenModEqPtr> for SyntaxStablePtrId {
33227 fn from(ptr: TokenModEqPtr) -> Self {
33228 ptr.untyped()
33229 }
33230}
33231#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33232pub struct TokenModEqGreen(pub GreenId);
33233impl TokenModEqGreen {
33234 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33235 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33236 }
33237}
33238impl TypedSyntaxNode for TokenModEq {
33239 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenModEq);
33240 type StablePtr = TokenModEqPtr;
33241 type Green = TokenModEqGreen;
33242 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33243 TokenModEqGreen(
33244 Arc::new(GreenNode {
33245 kind: SyntaxKind::TokenMissing,
33246 details: GreenNodeDetails::Token("".into()),
33247 })
33248 .intern(db),
33249 )
33250 }
33251 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33252 match node.0.green.lookup_intern(db).details {
33253 GreenNodeDetails::Token(_) => Self { node },
33254 GreenNodeDetails::Node { .. } => {
33255 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenModEq)
33256 }
33257 }
33258 }
33259 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33260 match node.0.green.lookup_intern(db).details {
33261 GreenNodeDetails::Token(_) => Some(Self { node }),
33262 GreenNodeDetails::Node { .. } => None,
33263 }
33264 }
33265 fn as_syntax_node(&self) -> SyntaxNode {
33266 self.node.clone()
33267 }
33268 fn stable_ptr(&self) -> Self::StablePtr {
33269 TokenModEqPtr(self.node.0.stable_ptr)
33270 }
33271}
33272impl From<&TokenModEq> for SyntaxStablePtrId {
33273 fn from(node: &TokenModEq) -> Self {
33274 node.stable_ptr().untyped()
33275 }
33276}
33277#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33278pub struct TerminalModEq {
33279 node: SyntaxNode,
33280 children: Arc<[SyntaxNode]>,
33281}
33282impl Terminal for TerminalModEq {
33283 const KIND: SyntaxKind = SyntaxKind::TerminalModEq;
33284 type TokenType = TokenModEq;
33285 fn new_green(
33286 db: &dyn SyntaxGroup,
33287 leading_trivia: TriviaGreen,
33288 token: <<TerminalModEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33289 trailing_trivia: TriviaGreen,
33290 ) -> Self::Green {
33291 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33292 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33293 TerminalModEqGreen(
33294 Arc::new(GreenNode {
33295 kind: SyntaxKind::TerminalModEq,
33296 details: GreenNodeDetails::Node { children, width },
33297 })
33298 .intern(db),
33299 )
33300 }
33301 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33302 self.token(db).text(db)
33303 }
33304}
33305impl TerminalModEq {
33306 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33307 Trivia::from_syntax_node(db, self.children[0].clone())
33308 }
33309 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenModEq {
33310 TokenModEq::from_syntax_node(db, self.children[1].clone())
33311 }
33312 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33313 Trivia::from_syntax_node(db, self.children[2].clone())
33314 }
33315}
33316#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33317pub struct TerminalModEqPtr(pub SyntaxStablePtrId);
33318impl TerminalModEqPtr {}
33319impl TypedStablePtr for TerminalModEqPtr {
33320 type SyntaxNode = TerminalModEq;
33321 fn untyped(&self) -> SyntaxStablePtrId {
33322 self.0
33323 }
33324 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalModEq {
33325 TerminalModEq::from_syntax_node(db, self.0.lookup(db))
33326 }
33327}
33328impl From<TerminalModEqPtr> for SyntaxStablePtrId {
33329 fn from(ptr: TerminalModEqPtr) -> Self {
33330 ptr.untyped()
33331 }
33332}
33333#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33334pub struct TerminalModEqGreen(pub GreenId);
33335impl TypedSyntaxNode for TerminalModEq {
33336 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalModEq);
33337 type StablePtr = TerminalModEqPtr;
33338 type Green = TerminalModEqGreen;
33339 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33340 TerminalModEqGreen(
33341 Arc::new(GreenNode {
33342 kind: SyntaxKind::TerminalModEq,
33343 details: GreenNodeDetails::Node {
33344 children: vec![
33345 Trivia::missing(db).0,
33346 TokenModEq::missing(db).0,
33347 Trivia::missing(db).0,
33348 ],
33349 width: TextWidth::default(),
33350 },
33351 })
33352 .intern(db),
33353 )
33354 }
33355 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33356 let kind = node.kind(db);
33357 assert_eq!(
33358 kind,
33359 SyntaxKind::TerminalModEq,
33360 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33361 kind,
33362 SyntaxKind::TerminalModEq
33363 );
33364 let children = db.get_children(node.clone());
33365 Self { node, children }
33366 }
33367 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33368 let kind = node.kind(db);
33369 if kind == SyntaxKind::TerminalModEq {
33370 Some(Self::from_syntax_node(db, node))
33371 } else {
33372 None
33373 }
33374 }
33375 fn as_syntax_node(&self) -> SyntaxNode {
33376 self.node.clone()
33377 }
33378 fn stable_ptr(&self) -> Self::StablePtr {
33379 TerminalModEqPtr(self.node.0.stable_ptr)
33380 }
33381}
33382impl From<&TerminalModEq> for SyntaxStablePtrId {
33383 fn from(node: &TerminalModEq) -> Self {
33384 node.stable_ptr().untyped()
33385 }
33386}
33387#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33388pub struct TokenMul {
33389 node: SyntaxNode,
33390}
33391impl Token for TokenMul {
33392 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33393 TokenMulGreen(
33394 Arc::new(GreenNode {
33395 kind: SyntaxKind::TokenMul,
33396 details: GreenNodeDetails::Token(text),
33397 })
33398 .intern(db),
33399 )
33400 }
33401 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33402 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33403 .clone()
33404 }
33405}
33406#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33407pub struct TokenMulPtr(pub SyntaxStablePtrId);
33408impl TypedStablePtr for TokenMulPtr {
33409 type SyntaxNode = TokenMul;
33410 fn untyped(&self) -> SyntaxStablePtrId {
33411 self.0
33412 }
33413 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMul {
33414 TokenMul::from_syntax_node(db, self.0.lookup(db))
33415 }
33416}
33417impl From<TokenMulPtr> for SyntaxStablePtrId {
33418 fn from(ptr: TokenMulPtr) -> Self {
33419 ptr.untyped()
33420 }
33421}
33422#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33423pub struct TokenMulGreen(pub GreenId);
33424impl TokenMulGreen {
33425 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33426 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33427 }
33428}
33429impl TypedSyntaxNode for TokenMul {
33430 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMul);
33431 type StablePtr = TokenMulPtr;
33432 type Green = TokenMulGreen;
33433 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33434 TokenMulGreen(
33435 Arc::new(GreenNode {
33436 kind: SyntaxKind::TokenMissing,
33437 details: GreenNodeDetails::Token("".into()),
33438 })
33439 .intern(db),
33440 )
33441 }
33442 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33443 match node.0.green.lookup_intern(db).details {
33444 GreenNodeDetails::Token(_) => Self { node },
33445 GreenNodeDetails::Node { .. } => {
33446 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMul)
33447 }
33448 }
33449 }
33450 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33451 match node.0.green.lookup_intern(db).details {
33452 GreenNodeDetails::Token(_) => Some(Self { node }),
33453 GreenNodeDetails::Node { .. } => None,
33454 }
33455 }
33456 fn as_syntax_node(&self) -> SyntaxNode {
33457 self.node.clone()
33458 }
33459 fn stable_ptr(&self) -> Self::StablePtr {
33460 TokenMulPtr(self.node.0.stable_ptr)
33461 }
33462}
33463impl From<&TokenMul> for SyntaxStablePtrId {
33464 fn from(node: &TokenMul) -> Self {
33465 node.stable_ptr().untyped()
33466 }
33467}
33468#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33469pub struct TerminalMul {
33470 node: SyntaxNode,
33471 children: Arc<[SyntaxNode]>,
33472}
33473impl Terminal for TerminalMul {
33474 const KIND: SyntaxKind = SyntaxKind::TerminalMul;
33475 type TokenType = TokenMul;
33476 fn new_green(
33477 db: &dyn SyntaxGroup,
33478 leading_trivia: TriviaGreen,
33479 token: <<TerminalMul as Terminal>::TokenType as TypedSyntaxNode>::Green,
33480 trailing_trivia: TriviaGreen,
33481 ) -> Self::Green {
33482 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33483 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33484 TerminalMulGreen(
33485 Arc::new(GreenNode {
33486 kind: SyntaxKind::TerminalMul,
33487 details: GreenNodeDetails::Node { children, width },
33488 })
33489 .intern(db),
33490 )
33491 }
33492 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33493 self.token(db).text(db)
33494 }
33495}
33496impl TerminalMul {
33497 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33498 Trivia::from_syntax_node(db, self.children[0].clone())
33499 }
33500 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMul {
33501 TokenMul::from_syntax_node(db, self.children[1].clone())
33502 }
33503 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33504 Trivia::from_syntax_node(db, self.children[2].clone())
33505 }
33506}
33507#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33508pub struct TerminalMulPtr(pub SyntaxStablePtrId);
33509impl TerminalMulPtr {}
33510impl TypedStablePtr for TerminalMulPtr {
33511 type SyntaxNode = TerminalMul;
33512 fn untyped(&self) -> SyntaxStablePtrId {
33513 self.0
33514 }
33515 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMul {
33516 TerminalMul::from_syntax_node(db, self.0.lookup(db))
33517 }
33518}
33519impl From<TerminalMulPtr> for SyntaxStablePtrId {
33520 fn from(ptr: TerminalMulPtr) -> Self {
33521 ptr.untyped()
33522 }
33523}
33524#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33525pub struct TerminalMulGreen(pub GreenId);
33526impl TypedSyntaxNode for TerminalMul {
33527 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMul);
33528 type StablePtr = TerminalMulPtr;
33529 type Green = TerminalMulGreen;
33530 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33531 TerminalMulGreen(
33532 Arc::new(GreenNode {
33533 kind: SyntaxKind::TerminalMul,
33534 details: GreenNodeDetails::Node {
33535 children: vec![
33536 Trivia::missing(db).0,
33537 TokenMul::missing(db).0,
33538 Trivia::missing(db).0,
33539 ],
33540 width: TextWidth::default(),
33541 },
33542 })
33543 .intern(db),
33544 )
33545 }
33546 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33547 let kind = node.kind(db);
33548 assert_eq!(
33549 kind,
33550 SyntaxKind::TerminalMul,
33551 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33552 kind,
33553 SyntaxKind::TerminalMul
33554 );
33555 let children = db.get_children(node.clone());
33556 Self { node, children }
33557 }
33558 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33559 let kind = node.kind(db);
33560 if kind == SyntaxKind::TerminalMul { Some(Self::from_syntax_node(db, node)) } else { None }
33561 }
33562 fn as_syntax_node(&self) -> SyntaxNode {
33563 self.node.clone()
33564 }
33565 fn stable_ptr(&self) -> Self::StablePtr {
33566 TerminalMulPtr(self.node.0.stable_ptr)
33567 }
33568}
33569impl From<&TerminalMul> for SyntaxStablePtrId {
33570 fn from(node: &TerminalMul) -> Self {
33571 node.stable_ptr().untyped()
33572 }
33573}
33574#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33575pub struct TokenMulEq {
33576 node: SyntaxNode,
33577}
33578impl Token for TokenMulEq {
33579 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33580 TokenMulEqGreen(
33581 Arc::new(GreenNode {
33582 kind: SyntaxKind::TokenMulEq,
33583 details: GreenNodeDetails::Token(text),
33584 })
33585 .intern(db),
33586 )
33587 }
33588 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33589 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33590 .clone()
33591 }
33592}
33593#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33594pub struct TokenMulEqPtr(pub SyntaxStablePtrId);
33595impl TypedStablePtr for TokenMulEqPtr {
33596 type SyntaxNode = TokenMulEq;
33597 fn untyped(&self) -> SyntaxStablePtrId {
33598 self.0
33599 }
33600 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
33601 TokenMulEq::from_syntax_node(db, self.0.lookup(db))
33602 }
33603}
33604impl From<TokenMulEqPtr> for SyntaxStablePtrId {
33605 fn from(ptr: TokenMulEqPtr) -> Self {
33606 ptr.untyped()
33607 }
33608}
33609#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33610pub struct TokenMulEqGreen(pub GreenId);
33611impl TokenMulEqGreen {
33612 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33613 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33614 }
33615}
33616impl TypedSyntaxNode for TokenMulEq {
33617 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMulEq);
33618 type StablePtr = TokenMulEqPtr;
33619 type Green = TokenMulEqGreen;
33620 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33621 TokenMulEqGreen(
33622 Arc::new(GreenNode {
33623 kind: SyntaxKind::TokenMissing,
33624 details: GreenNodeDetails::Token("".into()),
33625 })
33626 .intern(db),
33627 )
33628 }
33629 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33630 match node.0.green.lookup_intern(db).details {
33631 GreenNodeDetails::Token(_) => Self { node },
33632 GreenNodeDetails::Node { .. } => {
33633 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMulEq)
33634 }
33635 }
33636 }
33637 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33638 match node.0.green.lookup_intern(db).details {
33639 GreenNodeDetails::Token(_) => Some(Self { node }),
33640 GreenNodeDetails::Node { .. } => None,
33641 }
33642 }
33643 fn as_syntax_node(&self) -> SyntaxNode {
33644 self.node.clone()
33645 }
33646 fn stable_ptr(&self) -> Self::StablePtr {
33647 TokenMulEqPtr(self.node.0.stable_ptr)
33648 }
33649}
33650impl From<&TokenMulEq> for SyntaxStablePtrId {
33651 fn from(node: &TokenMulEq) -> Self {
33652 node.stable_ptr().untyped()
33653 }
33654}
33655#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33656pub struct TerminalMulEq {
33657 node: SyntaxNode,
33658 children: Arc<[SyntaxNode]>,
33659}
33660impl Terminal for TerminalMulEq {
33661 const KIND: SyntaxKind = SyntaxKind::TerminalMulEq;
33662 type TokenType = TokenMulEq;
33663 fn new_green(
33664 db: &dyn SyntaxGroup,
33665 leading_trivia: TriviaGreen,
33666 token: <<TerminalMulEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33667 trailing_trivia: TriviaGreen,
33668 ) -> Self::Green {
33669 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33670 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33671 TerminalMulEqGreen(
33672 Arc::new(GreenNode {
33673 kind: SyntaxKind::TerminalMulEq,
33674 details: GreenNodeDetails::Node { children, width },
33675 })
33676 .intern(db),
33677 )
33678 }
33679 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33680 self.token(db).text(db)
33681 }
33682}
33683impl TerminalMulEq {
33684 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33685 Trivia::from_syntax_node(db, self.children[0].clone())
33686 }
33687 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenMulEq {
33688 TokenMulEq::from_syntax_node(db, self.children[1].clone())
33689 }
33690 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33691 Trivia::from_syntax_node(db, self.children[2].clone())
33692 }
33693}
33694#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33695pub struct TerminalMulEqPtr(pub SyntaxStablePtrId);
33696impl TerminalMulEqPtr {}
33697impl TypedStablePtr for TerminalMulEqPtr {
33698 type SyntaxNode = TerminalMulEq;
33699 fn untyped(&self) -> SyntaxStablePtrId {
33700 self.0
33701 }
33702 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalMulEq {
33703 TerminalMulEq::from_syntax_node(db, self.0.lookup(db))
33704 }
33705}
33706impl From<TerminalMulEqPtr> for SyntaxStablePtrId {
33707 fn from(ptr: TerminalMulEqPtr) -> Self {
33708 ptr.untyped()
33709 }
33710}
33711#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33712pub struct TerminalMulEqGreen(pub GreenId);
33713impl TypedSyntaxNode for TerminalMulEq {
33714 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalMulEq);
33715 type StablePtr = TerminalMulEqPtr;
33716 type Green = TerminalMulEqGreen;
33717 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33718 TerminalMulEqGreen(
33719 Arc::new(GreenNode {
33720 kind: SyntaxKind::TerminalMulEq,
33721 details: GreenNodeDetails::Node {
33722 children: vec![
33723 Trivia::missing(db).0,
33724 TokenMulEq::missing(db).0,
33725 Trivia::missing(db).0,
33726 ],
33727 width: TextWidth::default(),
33728 },
33729 })
33730 .intern(db),
33731 )
33732 }
33733 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33734 let kind = node.kind(db);
33735 assert_eq!(
33736 kind,
33737 SyntaxKind::TerminalMulEq,
33738 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33739 kind,
33740 SyntaxKind::TerminalMulEq
33741 );
33742 let children = db.get_children(node.clone());
33743 Self { node, children }
33744 }
33745 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33746 let kind = node.kind(db);
33747 if kind == SyntaxKind::TerminalMulEq {
33748 Some(Self::from_syntax_node(db, node))
33749 } else {
33750 None
33751 }
33752 }
33753 fn as_syntax_node(&self) -> SyntaxNode {
33754 self.node.clone()
33755 }
33756 fn stable_ptr(&self) -> Self::StablePtr {
33757 TerminalMulEqPtr(self.node.0.stable_ptr)
33758 }
33759}
33760impl From<&TerminalMulEq> for SyntaxStablePtrId {
33761 fn from(node: &TerminalMulEq) -> Self {
33762 node.stable_ptr().untyped()
33763 }
33764}
33765#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33766pub struct TokenNeq {
33767 node: SyntaxNode,
33768}
33769impl Token for TokenNeq {
33770 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33771 TokenNeqGreen(
33772 Arc::new(GreenNode {
33773 kind: SyntaxKind::TokenNeq,
33774 details: GreenNodeDetails::Token(text),
33775 })
33776 .intern(db),
33777 )
33778 }
33779 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33780 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33781 .clone()
33782 }
33783}
33784#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33785pub struct TokenNeqPtr(pub SyntaxStablePtrId);
33786impl TypedStablePtr for TokenNeqPtr {
33787 type SyntaxNode = TokenNeq;
33788 fn untyped(&self) -> SyntaxStablePtrId {
33789 self.0
33790 }
33791 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNeq {
33792 TokenNeq::from_syntax_node(db, self.0.lookup(db))
33793 }
33794}
33795impl From<TokenNeqPtr> for SyntaxStablePtrId {
33796 fn from(ptr: TokenNeqPtr) -> Self {
33797 ptr.untyped()
33798 }
33799}
33800#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33801pub struct TokenNeqGreen(pub GreenId);
33802impl TokenNeqGreen {
33803 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33804 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33805 }
33806}
33807impl TypedSyntaxNode for TokenNeq {
33808 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNeq);
33809 type StablePtr = TokenNeqPtr;
33810 type Green = TokenNeqGreen;
33811 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33812 TokenNeqGreen(
33813 Arc::new(GreenNode {
33814 kind: SyntaxKind::TokenMissing,
33815 details: GreenNodeDetails::Token("".into()),
33816 })
33817 .intern(db),
33818 )
33819 }
33820 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33821 match node.0.green.lookup_intern(db).details {
33822 GreenNodeDetails::Token(_) => Self { node },
33823 GreenNodeDetails::Node { .. } => {
33824 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNeq)
33825 }
33826 }
33827 }
33828 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33829 match node.0.green.lookup_intern(db).details {
33830 GreenNodeDetails::Token(_) => Some(Self { node }),
33831 GreenNodeDetails::Node { .. } => None,
33832 }
33833 }
33834 fn as_syntax_node(&self) -> SyntaxNode {
33835 self.node.clone()
33836 }
33837 fn stable_ptr(&self) -> Self::StablePtr {
33838 TokenNeqPtr(self.node.0.stable_ptr)
33839 }
33840}
33841impl From<&TokenNeq> for SyntaxStablePtrId {
33842 fn from(node: &TokenNeq) -> Self {
33843 node.stable_ptr().untyped()
33844 }
33845}
33846#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33847pub struct TerminalNeq {
33848 node: SyntaxNode,
33849 children: Arc<[SyntaxNode]>,
33850}
33851impl Terminal for TerminalNeq {
33852 const KIND: SyntaxKind = SyntaxKind::TerminalNeq;
33853 type TokenType = TokenNeq;
33854 fn new_green(
33855 db: &dyn SyntaxGroup,
33856 leading_trivia: TriviaGreen,
33857 token: <<TerminalNeq as Terminal>::TokenType as TypedSyntaxNode>::Green,
33858 trailing_trivia: TriviaGreen,
33859 ) -> Self::Green {
33860 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
33861 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
33862 TerminalNeqGreen(
33863 Arc::new(GreenNode {
33864 kind: SyntaxKind::TerminalNeq,
33865 details: GreenNodeDetails::Node { children, width },
33866 })
33867 .intern(db),
33868 )
33869 }
33870 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33871 self.token(db).text(db)
33872 }
33873}
33874impl TerminalNeq {
33875 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33876 Trivia::from_syntax_node(db, self.children[0].clone())
33877 }
33878 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNeq {
33879 TokenNeq::from_syntax_node(db, self.children[1].clone())
33880 }
33881 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
33882 Trivia::from_syntax_node(db, self.children[2].clone())
33883 }
33884}
33885#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33886pub struct TerminalNeqPtr(pub SyntaxStablePtrId);
33887impl TerminalNeqPtr {}
33888impl TypedStablePtr for TerminalNeqPtr {
33889 type SyntaxNode = TerminalNeq;
33890 fn untyped(&self) -> SyntaxStablePtrId {
33891 self.0
33892 }
33893 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNeq {
33894 TerminalNeq::from_syntax_node(db, self.0.lookup(db))
33895 }
33896}
33897impl From<TerminalNeqPtr> for SyntaxStablePtrId {
33898 fn from(ptr: TerminalNeqPtr) -> Self {
33899 ptr.untyped()
33900 }
33901}
33902#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33903pub struct TerminalNeqGreen(pub GreenId);
33904impl TypedSyntaxNode for TerminalNeq {
33905 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNeq);
33906 type StablePtr = TerminalNeqPtr;
33907 type Green = TerminalNeqGreen;
33908 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33909 TerminalNeqGreen(
33910 Arc::new(GreenNode {
33911 kind: SyntaxKind::TerminalNeq,
33912 details: GreenNodeDetails::Node {
33913 children: vec![
33914 Trivia::missing(db).0,
33915 TokenNeq::missing(db).0,
33916 Trivia::missing(db).0,
33917 ],
33918 width: TextWidth::default(),
33919 },
33920 })
33921 .intern(db),
33922 )
33923 }
33924 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
33925 let kind = node.kind(db);
33926 assert_eq!(
33927 kind,
33928 SyntaxKind::TerminalNeq,
33929 "Unexpected SyntaxKind {:?}. Expected {:?}.",
33930 kind,
33931 SyntaxKind::TerminalNeq
33932 );
33933 let children = db.get_children(node.clone());
33934 Self { node, children }
33935 }
33936 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
33937 let kind = node.kind(db);
33938 if kind == SyntaxKind::TerminalNeq { Some(Self::from_syntax_node(db, node)) } else { None }
33939 }
33940 fn as_syntax_node(&self) -> SyntaxNode {
33941 self.node.clone()
33942 }
33943 fn stable_ptr(&self) -> Self::StablePtr {
33944 TerminalNeqPtr(self.node.0.stable_ptr)
33945 }
33946}
33947impl From<&TerminalNeq> for SyntaxStablePtrId {
33948 fn from(node: &TerminalNeq) -> Self {
33949 node.stable_ptr().untyped()
33950 }
33951}
33952#[derive(Clone, Debug, Eq, Hash, PartialEq)]
33953pub struct TokenNot {
33954 node: SyntaxNode,
33955}
33956impl Token for TokenNot {
33957 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
33958 TokenNotGreen(
33959 Arc::new(GreenNode {
33960 kind: SyntaxKind::TokenNot,
33961 details: GreenNodeDetails::Token(text),
33962 })
33963 .intern(db),
33964 )
33965 }
33966 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33967 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
33968 .clone()
33969 }
33970}
33971#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33972pub struct TokenNotPtr(pub SyntaxStablePtrId);
33973impl TypedStablePtr for TokenNotPtr {
33974 type SyntaxNode = TokenNot;
33975 fn untyped(&self) -> SyntaxStablePtrId {
33976 self.0
33977 }
33978 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNot {
33979 TokenNot::from_syntax_node(db, self.0.lookup(db))
33980 }
33981}
33982impl From<TokenNotPtr> for SyntaxStablePtrId {
33983 fn from(ptr: TokenNotPtr) -> Self {
33984 ptr.untyped()
33985 }
33986}
33987#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
33988pub struct TokenNotGreen(pub GreenId);
33989impl TokenNotGreen {
33990 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
33991 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
33992 }
33993}
33994impl TypedSyntaxNode for TokenNot {
33995 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNot);
33996 type StablePtr = TokenNotPtr;
33997 type Green = TokenNotGreen;
33998 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
33999 TokenNotGreen(
34000 Arc::new(GreenNode {
34001 kind: SyntaxKind::TokenMissing,
34002 details: GreenNodeDetails::Token("".into()),
34003 })
34004 .intern(db),
34005 )
34006 }
34007 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34008 match node.0.green.lookup_intern(db).details {
34009 GreenNodeDetails::Token(_) => Self { node },
34010 GreenNodeDetails::Node { .. } => {
34011 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNot)
34012 }
34013 }
34014 }
34015 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34016 match node.0.green.lookup_intern(db).details {
34017 GreenNodeDetails::Token(_) => Some(Self { node }),
34018 GreenNodeDetails::Node { .. } => None,
34019 }
34020 }
34021 fn as_syntax_node(&self) -> SyntaxNode {
34022 self.node.clone()
34023 }
34024 fn stable_ptr(&self) -> Self::StablePtr {
34025 TokenNotPtr(self.node.0.stable_ptr)
34026 }
34027}
34028impl From<&TokenNot> for SyntaxStablePtrId {
34029 fn from(node: &TokenNot) -> Self {
34030 node.stable_ptr().untyped()
34031 }
34032}
34033#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34034pub struct TerminalNot {
34035 node: SyntaxNode,
34036 children: Arc<[SyntaxNode]>,
34037}
34038impl Terminal for TerminalNot {
34039 const KIND: SyntaxKind = SyntaxKind::TerminalNot;
34040 type TokenType = TokenNot;
34041 fn new_green(
34042 db: &dyn SyntaxGroup,
34043 leading_trivia: TriviaGreen,
34044 token: <<TerminalNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
34045 trailing_trivia: TriviaGreen,
34046 ) -> Self::Green {
34047 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34048 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34049 TerminalNotGreen(
34050 Arc::new(GreenNode {
34051 kind: SyntaxKind::TerminalNot,
34052 details: GreenNodeDetails::Node { children, width },
34053 })
34054 .intern(db),
34055 )
34056 }
34057 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34058 self.token(db).text(db)
34059 }
34060}
34061impl TerminalNot {
34062 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34063 Trivia::from_syntax_node(db, self.children[0].clone())
34064 }
34065 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenNot {
34066 TokenNot::from_syntax_node(db, self.children[1].clone())
34067 }
34068 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34069 Trivia::from_syntax_node(db, self.children[2].clone())
34070 }
34071}
34072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34073pub struct TerminalNotPtr(pub SyntaxStablePtrId);
34074impl TerminalNotPtr {}
34075impl TypedStablePtr for TerminalNotPtr {
34076 type SyntaxNode = TerminalNot;
34077 fn untyped(&self) -> SyntaxStablePtrId {
34078 self.0
34079 }
34080 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalNot {
34081 TerminalNot::from_syntax_node(db, self.0.lookup(db))
34082 }
34083}
34084impl From<TerminalNotPtr> for SyntaxStablePtrId {
34085 fn from(ptr: TerminalNotPtr) -> Self {
34086 ptr.untyped()
34087 }
34088}
34089#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34090pub struct TerminalNotGreen(pub GreenId);
34091impl TypedSyntaxNode for TerminalNot {
34092 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalNot);
34093 type StablePtr = TerminalNotPtr;
34094 type Green = TerminalNotGreen;
34095 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34096 TerminalNotGreen(
34097 Arc::new(GreenNode {
34098 kind: SyntaxKind::TerminalNot,
34099 details: GreenNodeDetails::Node {
34100 children: vec![
34101 Trivia::missing(db).0,
34102 TokenNot::missing(db).0,
34103 Trivia::missing(db).0,
34104 ],
34105 width: TextWidth::default(),
34106 },
34107 })
34108 .intern(db),
34109 )
34110 }
34111 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34112 let kind = node.kind(db);
34113 assert_eq!(
34114 kind,
34115 SyntaxKind::TerminalNot,
34116 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34117 kind,
34118 SyntaxKind::TerminalNot
34119 );
34120 let children = db.get_children(node.clone());
34121 Self { node, children }
34122 }
34123 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34124 let kind = node.kind(db);
34125 if kind == SyntaxKind::TerminalNot { Some(Self::from_syntax_node(db, node)) } else { None }
34126 }
34127 fn as_syntax_node(&self) -> SyntaxNode {
34128 self.node.clone()
34129 }
34130 fn stable_ptr(&self) -> Self::StablePtr {
34131 TerminalNotPtr(self.node.0.stable_ptr)
34132 }
34133}
34134impl From<&TerminalNot> for SyntaxStablePtrId {
34135 fn from(node: &TerminalNot) -> Self {
34136 node.stable_ptr().untyped()
34137 }
34138}
34139#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34140pub struct TokenBitNot {
34141 node: SyntaxNode,
34142}
34143impl Token for TokenBitNot {
34144 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34145 TokenBitNotGreen(
34146 Arc::new(GreenNode {
34147 kind: SyntaxKind::TokenBitNot,
34148 details: GreenNodeDetails::Token(text),
34149 })
34150 .intern(db),
34151 )
34152 }
34153 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34154 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34155 .clone()
34156 }
34157}
34158#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34159pub struct TokenBitNotPtr(pub SyntaxStablePtrId);
34160impl TypedStablePtr for TokenBitNotPtr {
34161 type SyntaxNode = TokenBitNot;
34162 fn untyped(&self) -> SyntaxStablePtrId {
34163 self.0
34164 }
34165 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
34166 TokenBitNot::from_syntax_node(db, self.0.lookup(db))
34167 }
34168}
34169impl From<TokenBitNotPtr> for SyntaxStablePtrId {
34170 fn from(ptr: TokenBitNotPtr) -> Self {
34171 ptr.untyped()
34172 }
34173}
34174#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34175pub struct TokenBitNotGreen(pub GreenId);
34176impl TokenBitNotGreen {
34177 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34178 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34179 }
34180}
34181impl TypedSyntaxNode for TokenBitNot {
34182 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenBitNot);
34183 type StablePtr = TokenBitNotPtr;
34184 type Green = TokenBitNotGreen;
34185 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34186 TokenBitNotGreen(
34187 Arc::new(GreenNode {
34188 kind: SyntaxKind::TokenMissing,
34189 details: GreenNodeDetails::Token("".into()),
34190 })
34191 .intern(db),
34192 )
34193 }
34194 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34195 match node.0.green.lookup_intern(db).details {
34196 GreenNodeDetails::Token(_) => Self { node },
34197 GreenNodeDetails::Node { .. } => {
34198 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenBitNot)
34199 }
34200 }
34201 }
34202 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34203 match node.0.green.lookup_intern(db).details {
34204 GreenNodeDetails::Token(_) => Some(Self { node }),
34205 GreenNodeDetails::Node { .. } => None,
34206 }
34207 }
34208 fn as_syntax_node(&self) -> SyntaxNode {
34209 self.node.clone()
34210 }
34211 fn stable_ptr(&self) -> Self::StablePtr {
34212 TokenBitNotPtr(self.node.0.stable_ptr)
34213 }
34214}
34215impl From<&TokenBitNot> for SyntaxStablePtrId {
34216 fn from(node: &TokenBitNot) -> Self {
34217 node.stable_ptr().untyped()
34218 }
34219}
34220#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34221pub struct TerminalBitNot {
34222 node: SyntaxNode,
34223 children: Arc<[SyntaxNode]>,
34224}
34225impl Terminal for TerminalBitNot {
34226 const KIND: SyntaxKind = SyntaxKind::TerminalBitNot;
34227 type TokenType = TokenBitNot;
34228 fn new_green(
34229 db: &dyn SyntaxGroup,
34230 leading_trivia: TriviaGreen,
34231 token: <<TerminalBitNot as Terminal>::TokenType as TypedSyntaxNode>::Green,
34232 trailing_trivia: TriviaGreen,
34233 ) -> Self::Green {
34234 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34235 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34236 TerminalBitNotGreen(
34237 Arc::new(GreenNode {
34238 kind: SyntaxKind::TerminalBitNot,
34239 details: GreenNodeDetails::Node { children, width },
34240 })
34241 .intern(db),
34242 )
34243 }
34244 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34245 self.token(db).text(db)
34246 }
34247}
34248impl TerminalBitNot {
34249 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34250 Trivia::from_syntax_node(db, self.children[0].clone())
34251 }
34252 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenBitNot {
34253 TokenBitNot::from_syntax_node(db, self.children[1].clone())
34254 }
34255 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34256 Trivia::from_syntax_node(db, self.children[2].clone())
34257 }
34258}
34259#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34260pub struct TerminalBitNotPtr(pub SyntaxStablePtrId);
34261impl TerminalBitNotPtr {}
34262impl TypedStablePtr for TerminalBitNotPtr {
34263 type SyntaxNode = TerminalBitNot;
34264 fn untyped(&self) -> SyntaxStablePtrId {
34265 self.0
34266 }
34267 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalBitNot {
34268 TerminalBitNot::from_syntax_node(db, self.0.lookup(db))
34269 }
34270}
34271impl From<TerminalBitNotPtr> for SyntaxStablePtrId {
34272 fn from(ptr: TerminalBitNotPtr) -> Self {
34273 ptr.untyped()
34274 }
34275}
34276#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34277pub struct TerminalBitNotGreen(pub GreenId);
34278impl TypedSyntaxNode for TerminalBitNot {
34279 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalBitNot);
34280 type StablePtr = TerminalBitNotPtr;
34281 type Green = TerminalBitNotGreen;
34282 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34283 TerminalBitNotGreen(
34284 Arc::new(GreenNode {
34285 kind: SyntaxKind::TerminalBitNot,
34286 details: GreenNodeDetails::Node {
34287 children: vec![
34288 Trivia::missing(db).0,
34289 TokenBitNot::missing(db).0,
34290 Trivia::missing(db).0,
34291 ],
34292 width: TextWidth::default(),
34293 },
34294 })
34295 .intern(db),
34296 )
34297 }
34298 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34299 let kind = node.kind(db);
34300 assert_eq!(
34301 kind,
34302 SyntaxKind::TerminalBitNot,
34303 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34304 kind,
34305 SyntaxKind::TerminalBitNot
34306 );
34307 let children = db.get_children(node.clone());
34308 Self { node, children }
34309 }
34310 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34311 let kind = node.kind(db);
34312 if kind == SyntaxKind::TerminalBitNot {
34313 Some(Self::from_syntax_node(db, node))
34314 } else {
34315 None
34316 }
34317 }
34318 fn as_syntax_node(&self) -> SyntaxNode {
34319 self.node.clone()
34320 }
34321 fn stable_ptr(&self) -> Self::StablePtr {
34322 TerminalBitNotPtr(self.node.0.stable_ptr)
34323 }
34324}
34325impl From<&TerminalBitNot> for SyntaxStablePtrId {
34326 fn from(node: &TerminalBitNot) -> Self {
34327 node.stable_ptr().untyped()
34328 }
34329}
34330#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34331pub struct TokenOr {
34332 node: SyntaxNode,
34333}
34334impl Token for TokenOr {
34335 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34336 TokenOrGreen(
34337 Arc::new(GreenNode {
34338 kind: SyntaxKind::TokenOr,
34339 details: GreenNodeDetails::Token(text),
34340 })
34341 .intern(db),
34342 )
34343 }
34344 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34345 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34346 .clone()
34347 }
34348}
34349#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34350pub struct TokenOrPtr(pub SyntaxStablePtrId);
34351impl TypedStablePtr for TokenOrPtr {
34352 type SyntaxNode = TokenOr;
34353 fn untyped(&self) -> SyntaxStablePtrId {
34354 self.0
34355 }
34356 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOr {
34357 TokenOr::from_syntax_node(db, self.0.lookup(db))
34358 }
34359}
34360impl From<TokenOrPtr> for SyntaxStablePtrId {
34361 fn from(ptr: TokenOrPtr) -> Self {
34362 ptr.untyped()
34363 }
34364}
34365#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34366pub struct TokenOrGreen(pub GreenId);
34367impl TokenOrGreen {
34368 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34369 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34370 }
34371}
34372impl TypedSyntaxNode for TokenOr {
34373 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOr);
34374 type StablePtr = TokenOrPtr;
34375 type Green = TokenOrGreen;
34376 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34377 TokenOrGreen(
34378 Arc::new(GreenNode {
34379 kind: SyntaxKind::TokenMissing,
34380 details: GreenNodeDetails::Token("".into()),
34381 })
34382 .intern(db),
34383 )
34384 }
34385 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34386 match node.0.green.lookup_intern(db).details {
34387 GreenNodeDetails::Token(_) => Self { node },
34388 GreenNodeDetails::Node { .. } => {
34389 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOr)
34390 }
34391 }
34392 }
34393 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34394 match node.0.green.lookup_intern(db).details {
34395 GreenNodeDetails::Token(_) => Some(Self { node }),
34396 GreenNodeDetails::Node { .. } => None,
34397 }
34398 }
34399 fn as_syntax_node(&self) -> SyntaxNode {
34400 self.node.clone()
34401 }
34402 fn stable_ptr(&self) -> Self::StablePtr {
34403 TokenOrPtr(self.node.0.stable_ptr)
34404 }
34405}
34406impl From<&TokenOr> for SyntaxStablePtrId {
34407 fn from(node: &TokenOr) -> Self {
34408 node.stable_ptr().untyped()
34409 }
34410}
34411#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34412pub struct TerminalOr {
34413 node: SyntaxNode,
34414 children: Arc<[SyntaxNode]>,
34415}
34416impl Terminal for TerminalOr {
34417 const KIND: SyntaxKind = SyntaxKind::TerminalOr;
34418 type TokenType = TokenOr;
34419 fn new_green(
34420 db: &dyn SyntaxGroup,
34421 leading_trivia: TriviaGreen,
34422 token: <<TerminalOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
34423 trailing_trivia: TriviaGreen,
34424 ) -> Self::Green {
34425 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34426 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34427 TerminalOrGreen(
34428 Arc::new(GreenNode {
34429 kind: SyntaxKind::TerminalOr,
34430 details: GreenNodeDetails::Node { children, width },
34431 })
34432 .intern(db),
34433 )
34434 }
34435 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34436 self.token(db).text(db)
34437 }
34438}
34439impl TerminalOr {
34440 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34441 Trivia::from_syntax_node(db, self.children[0].clone())
34442 }
34443 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOr {
34444 TokenOr::from_syntax_node(db, self.children[1].clone())
34445 }
34446 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34447 Trivia::from_syntax_node(db, self.children[2].clone())
34448 }
34449}
34450#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34451pub struct TerminalOrPtr(pub SyntaxStablePtrId);
34452impl TerminalOrPtr {}
34453impl TypedStablePtr for TerminalOrPtr {
34454 type SyntaxNode = TerminalOr;
34455 fn untyped(&self) -> SyntaxStablePtrId {
34456 self.0
34457 }
34458 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOr {
34459 TerminalOr::from_syntax_node(db, self.0.lookup(db))
34460 }
34461}
34462impl From<TerminalOrPtr> for SyntaxStablePtrId {
34463 fn from(ptr: TerminalOrPtr) -> Self {
34464 ptr.untyped()
34465 }
34466}
34467#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34468pub struct TerminalOrGreen(pub GreenId);
34469impl TypedSyntaxNode for TerminalOr {
34470 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOr);
34471 type StablePtr = TerminalOrPtr;
34472 type Green = TerminalOrGreen;
34473 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34474 TerminalOrGreen(
34475 Arc::new(GreenNode {
34476 kind: SyntaxKind::TerminalOr,
34477 details: GreenNodeDetails::Node {
34478 children: vec![
34479 Trivia::missing(db).0,
34480 TokenOr::missing(db).0,
34481 Trivia::missing(db).0,
34482 ],
34483 width: TextWidth::default(),
34484 },
34485 })
34486 .intern(db),
34487 )
34488 }
34489 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34490 let kind = node.kind(db);
34491 assert_eq!(
34492 kind,
34493 SyntaxKind::TerminalOr,
34494 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34495 kind,
34496 SyntaxKind::TerminalOr
34497 );
34498 let children = db.get_children(node.clone());
34499 Self { node, children }
34500 }
34501 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34502 let kind = node.kind(db);
34503 if kind == SyntaxKind::TerminalOr { Some(Self::from_syntax_node(db, node)) } else { None }
34504 }
34505 fn as_syntax_node(&self) -> SyntaxNode {
34506 self.node.clone()
34507 }
34508 fn stable_ptr(&self) -> Self::StablePtr {
34509 TerminalOrPtr(self.node.0.stable_ptr)
34510 }
34511}
34512impl From<&TerminalOr> for SyntaxStablePtrId {
34513 fn from(node: &TerminalOr) -> Self {
34514 node.stable_ptr().untyped()
34515 }
34516}
34517#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34518pub struct TokenOrOr {
34519 node: SyntaxNode,
34520}
34521impl Token for TokenOrOr {
34522 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34523 TokenOrOrGreen(
34524 Arc::new(GreenNode {
34525 kind: SyntaxKind::TokenOrOr,
34526 details: GreenNodeDetails::Token(text),
34527 })
34528 .intern(db),
34529 )
34530 }
34531 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34532 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34533 .clone()
34534 }
34535}
34536#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34537pub struct TokenOrOrPtr(pub SyntaxStablePtrId);
34538impl TypedStablePtr for TokenOrOrPtr {
34539 type SyntaxNode = TokenOrOr;
34540 fn untyped(&self) -> SyntaxStablePtrId {
34541 self.0
34542 }
34543 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
34544 TokenOrOr::from_syntax_node(db, self.0.lookup(db))
34545 }
34546}
34547impl From<TokenOrOrPtr> for SyntaxStablePtrId {
34548 fn from(ptr: TokenOrOrPtr) -> Self {
34549 ptr.untyped()
34550 }
34551}
34552#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34553pub struct TokenOrOrGreen(pub GreenId);
34554impl TokenOrOrGreen {
34555 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34556 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34557 }
34558}
34559impl TypedSyntaxNode for TokenOrOr {
34560 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenOrOr);
34561 type StablePtr = TokenOrOrPtr;
34562 type Green = TokenOrOrGreen;
34563 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34564 TokenOrOrGreen(
34565 Arc::new(GreenNode {
34566 kind: SyntaxKind::TokenMissing,
34567 details: GreenNodeDetails::Token("".into()),
34568 })
34569 .intern(db),
34570 )
34571 }
34572 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34573 match node.0.green.lookup_intern(db).details {
34574 GreenNodeDetails::Token(_) => Self { node },
34575 GreenNodeDetails::Node { .. } => {
34576 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenOrOr)
34577 }
34578 }
34579 }
34580 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34581 match node.0.green.lookup_intern(db).details {
34582 GreenNodeDetails::Token(_) => Some(Self { node }),
34583 GreenNodeDetails::Node { .. } => None,
34584 }
34585 }
34586 fn as_syntax_node(&self) -> SyntaxNode {
34587 self.node.clone()
34588 }
34589 fn stable_ptr(&self) -> Self::StablePtr {
34590 TokenOrOrPtr(self.node.0.stable_ptr)
34591 }
34592}
34593impl From<&TokenOrOr> for SyntaxStablePtrId {
34594 fn from(node: &TokenOrOr) -> Self {
34595 node.stable_ptr().untyped()
34596 }
34597}
34598#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34599pub struct TerminalOrOr {
34600 node: SyntaxNode,
34601 children: Arc<[SyntaxNode]>,
34602}
34603impl Terminal for TerminalOrOr {
34604 const KIND: SyntaxKind = SyntaxKind::TerminalOrOr;
34605 type TokenType = TokenOrOr;
34606 fn new_green(
34607 db: &dyn SyntaxGroup,
34608 leading_trivia: TriviaGreen,
34609 token: <<TerminalOrOr as Terminal>::TokenType as TypedSyntaxNode>::Green,
34610 trailing_trivia: TriviaGreen,
34611 ) -> Self::Green {
34612 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34613 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34614 TerminalOrOrGreen(
34615 Arc::new(GreenNode {
34616 kind: SyntaxKind::TerminalOrOr,
34617 details: GreenNodeDetails::Node { children, width },
34618 })
34619 .intern(db),
34620 )
34621 }
34622 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34623 self.token(db).text(db)
34624 }
34625}
34626impl TerminalOrOr {
34627 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34628 Trivia::from_syntax_node(db, self.children[0].clone())
34629 }
34630 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenOrOr {
34631 TokenOrOr::from_syntax_node(db, self.children[1].clone())
34632 }
34633 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34634 Trivia::from_syntax_node(db, self.children[2].clone())
34635 }
34636}
34637#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34638pub struct TerminalOrOrPtr(pub SyntaxStablePtrId);
34639impl TerminalOrOrPtr {}
34640impl TypedStablePtr for TerminalOrOrPtr {
34641 type SyntaxNode = TerminalOrOr;
34642 fn untyped(&self) -> SyntaxStablePtrId {
34643 self.0
34644 }
34645 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalOrOr {
34646 TerminalOrOr::from_syntax_node(db, self.0.lookup(db))
34647 }
34648}
34649impl From<TerminalOrOrPtr> for SyntaxStablePtrId {
34650 fn from(ptr: TerminalOrOrPtr) -> Self {
34651 ptr.untyped()
34652 }
34653}
34654#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34655pub struct TerminalOrOrGreen(pub GreenId);
34656impl TypedSyntaxNode for TerminalOrOr {
34657 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalOrOr);
34658 type StablePtr = TerminalOrOrPtr;
34659 type Green = TerminalOrOrGreen;
34660 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34661 TerminalOrOrGreen(
34662 Arc::new(GreenNode {
34663 kind: SyntaxKind::TerminalOrOr,
34664 details: GreenNodeDetails::Node {
34665 children: vec![
34666 Trivia::missing(db).0,
34667 TokenOrOr::missing(db).0,
34668 Trivia::missing(db).0,
34669 ],
34670 width: TextWidth::default(),
34671 },
34672 })
34673 .intern(db),
34674 )
34675 }
34676 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34677 let kind = node.kind(db);
34678 assert_eq!(
34679 kind,
34680 SyntaxKind::TerminalOrOr,
34681 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34682 kind,
34683 SyntaxKind::TerminalOrOr
34684 );
34685 let children = db.get_children(node.clone());
34686 Self { node, children }
34687 }
34688 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34689 let kind = node.kind(db);
34690 if kind == SyntaxKind::TerminalOrOr { Some(Self::from_syntax_node(db, node)) } else { None }
34691 }
34692 fn as_syntax_node(&self) -> SyntaxNode {
34693 self.node.clone()
34694 }
34695 fn stable_ptr(&self) -> Self::StablePtr {
34696 TerminalOrOrPtr(self.node.0.stable_ptr)
34697 }
34698}
34699impl From<&TerminalOrOr> for SyntaxStablePtrId {
34700 fn from(node: &TerminalOrOr) -> Self {
34701 node.stable_ptr().untyped()
34702 }
34703}
34704#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34705pub struct TokenPlus {
34706 node: SyntaxNode,
34707}
34708impl Token for TokenPlus {
34709 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34710 TokenPlusGreen(
34711 Arc::new(GreenNode {
34712 kind: SyntaxKind::TokenPlus,
34713 details: GreenNodeDetails::Token(text),
34714 })
34715 .intern(db),
34716 )
34717 }
34718 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34719 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34720 .clone()
34721 }
34722}
34723#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34724pub struct TokenPlusPtr(pub SyntaxStablePtrId);
34725impl TypedStablePtr for TokenPlusPtr {
34726 type SyntaxNode = TokenPlus;
34727 fn untyped(&self) -> SyntaxStablePtrId {
34728 self.0
34729 }
34730 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlus {
34731 TokenPlus::from_syntax_node(db, self.0.lookup(db))
34732 }
34733}
34734impl From<TokenPlusPtr> for SyntaxStablePtrId {
34735 fn from(ptr: TokenPlusPtr) -> Self {
34736 ptr.untyped()
34737 }
34738}
34739#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34740pub struct TokenPlusGreen(pub GreenId);
34741impl TokenPlusGreen {
34742 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34743 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34744 }
34745}
34746impl TypedSyntaxNode for TokenPlus {
34747 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlus);
34748 type StablePtr = TokenPlusPtr;
34749 type Green = TokenPlusGreen;
34750 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34751 TokenPlusGreen(
34752 Arc::new(GreenNode {
34753 kind: SyntaxKind::TokenMissing,
34754 details: GreenNodeDetails::Token("".into()),
34755 })
34756 .intern(db),
34757 )
34758 }
34759 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34760 match node.0.green.lookup_intern(db).details {
34761 GreenNodeDetails::Token(_) => Self { node },
34762 GreenNodeDetails::Node { .. } => {
34763 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlus)
34764 }
34765 }
34766 }
34767 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34768 match node.0.green.lookup_intern(db).details {
34769 GreenNodeDetails::Token(_) => Some(Self { node }),
34770 GreenNodeDetails::Node { .. } => None,
34771 }
34772 }
34773 fn as_syntax_node(&self) -> SyntaxNode {
34774 self.node.clone()
34775 }
34776 fn stable_ptr(&self) -> Self::StablePtr {
34777 TokenPlusPtr(self.node.0.stable_ptr)
34778 }
34779}
34780impl From<&TokenPlus> for SyntaxStablePtrId {
34781 fn from(node: &TokenPlus) -> Self {
34782 node.stable_ptr().untyped()
34783 }
34784}
34785#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34786pub struct TerminalPlus {
34787 node: SyntaxNode,
34788 children: Arc<[SyntaxNode]>,
34789}
34790impl Terminal for TerminalPlus {
34791 const KIND: SyntaxKind = SyntaxKind::TerminalPlus;
34792 type TokenType = TokenPlus;
34793 fn new_green(
34794 db: &dyn SyntaxGroup,
34795 leading_trivia: TriviaGreen,
34796 token: <<TerminalPlus as Terminal>::TokenType as TypedSyntaxNode>::Green,
34797 trailing_trivia: TriviaGreen,
34798 ) -> Self::Green {
34799 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34800 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34801 TerminalPlusGreen(
34802 Arc::new(GreenNode {
34803 kind: SyntaxKind::TerminalPlus,
34804 details: GreenNodeDetails::Node { children, width },
34805 })
34806 .intern(db),
34807 )
34808 }
34809 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34810 self.token(db).text(db)
34811 }
34812}
34813impl TerminalPlus {
34814 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34815 Trivia::from_syntax_node(db, self.children[0].clone())
34816 }
34817 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlus {
34818 TokenPlus::from_syntax_node(db, self.children[1].clone())
34819 }
34820 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
34821 Trivia::from_syntax_node(db, self.children[2].clone())
34822 }
34823}
34824#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34825pub struct TerminalPlusPtr(pub SyntaxStablePtrId);
34826impl TerminalPlusPtr {}
34827impl TypedStablePtr for TerminalPlusPtr {
34828 type SyntaxNode = TerminalPlus;
34829 fn untyped(&self) -> SyntaxStablePtrId {
34830 self.0
34831 }
34832 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlus {
34833 TerminalPlus::from_syntax_node(db, self.0.lookup(db))
34834 }
34835}
34836impl From<TerminalPlusPtr> for SyntaxStablePtrId {
34837 fn from(ptr: TerminalPlusPtr) -> Self {
34838 ptr.untyped()
34839 }
34840}
34841#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34842pub struct TerminalPlusGreen(pub GreenId);
34843impl TypedSyntaxNode for TerminalPlus {
34844 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlus);
34845 type StablePtr = TerminalPlusPtr;
34846 type Green = TerminalPlusGreen;
34847 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34848 TerminalPlusGreen(
34849 Arc::new(GreenNode {
34850 kind: SyntaxKind::TerminalPlus,
34851 details: GreenNodeDetails::Node {
34852 children: vec![
34853 Trivia::missing(db).0,
34854 TokenPlus::missing(db).0,
34855 Trivia::missing(db).0,
34856 ],
34857 width: TextWidth::default(),
34858 },
34859 })
34860 .intern(db),
34861 )
34862 }
34863 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34864 let kind = node.kind(db);
34865 assert_eq!(
34866 kind,
34867 SyntaxKind::TerminalPlus,
34868 "Unexpected SyntaxKind {:?}. Expected {:?}.",
34869 kind,
34870 SyntaxKind::TerminalPlus
34871 );
34872 let children = db.get_children(node.clone());
34873 Self { node, children }
34874 }
34875 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34876 let kind = node.kind(db);
34877 if kind == SyntaxKind::TerminalPlus { Some(Self::from_syntax_node(db, node)) } else { None }
34878 }
34879 fn as_syntax_node(&self) -> SyntaxNode {
34880 self.node.clone()
34881 }
34882 fn stable_ptr(&self) -> Self::StablePtr {
34883 TerminalPlusPtr(self.node.0.stable_ptr)
34884 }
34885}
34886impl From<&TerminalPlus> for SyntaxStablePtrId {
34887 fn from(node: &TerminalPlus) -> Self {
34888 node.stable_ptr().untyped()
34889 }
34890}
34891#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34892pub struct TokenPlusEq {
34893 node: SyntaxNode,
34894}
34895impl Token for TokenPlusEq {
34896 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
34897 TokenPlusEqGreen(
34898 Arc::new(GreenNode {
34899 kind: SyntaxKind::TokenPlusEq,
34900 details: GreenNodeDetails::Token(text),
34901 })
34902 .intern(db),
34903 )
34904 }
34905 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34906 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
34907 .clone()
34908 }
34909}
34910#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34911pub struct TokenPlusEqPtr(pub SyntaxStablePtrId);
34912impl TypedStablePtr for TokenPlusEqPtr {
34913 type SyntaxNode = TokenPlusEq;
34914 fn untyped(&self) -> SyntaxStablePtrId {
34915 self.0
34916 }
34917 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
34918 TokenPlusEq::from_syntax_node(db, self.0.lookup(db))
34919 }
34920}
34921impl From<TokenPlusEqPtr> for SyntaxStablePtrId {
34922 fn from(ptr: TokenPlusEqPtr) -> Self {
34923 ptr.untyped()
34924 }
34925}
34926#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
34927pub struct TokenPlusEqGreen(pub GreenId);
34928impl TokenPlusEqGreen {
34929 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34930 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
34931 }
34932}
34933impl TypedSyntaxNode for TokenPlusEq {
34934 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenPlusEq);
34935 type StablePtr = TokenPlusEqPtr;
34936 type Green = TokenPlusEqGreen;
34937 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
34938 TokenPlusEqGreen(
34939 Arc::new(GreenNode {
34940 kind: SyntaxKind::TokenMissing,
34941 details: GreenNodeDetails::Token("".into()),
34942 })
34943 .intern(db),
34944 )
34945 }
34946 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
34947 match node.0.green.lookup_intern(db).details {
34948 GreenNodeDetails::Token(_) => Self { node },
34949 GreenNodeDetails::Node { .. } => {
34950 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenPlusEq)
34951 }
34952 }
34953 }
34954 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
34955 match node.0.green.lookup_intern(db).details {
34956 GreenNodeDetails::Token(_) => Some(Self { node }),
34957 GreenNodeDetails::Node { .. } => None,
34958 }
34959 }
34960 fn as_syntax_node(&self) -> SyntaxNode {
34961 self.node.clone()
34962 }
34963 fn stable_ptr(&self) -> Self::StablePtr {
34964 TokenPlusEqPtr(self.node.0.stable_ptr)
34965 }
34966}
34967impl From<&TokenPlusEq> for SyntaxStablePtrId {
34968 fn from(node: &TokenPlusEq) -> Self {
34969 node.stable_ptr().untyped()
34970 }
34971}
34972#[derive(Clone, Debug, Eq, Hash, PartialEq)]
34973pub struct TerminalPlusEq {
34974 node: SyntaxNode,
34975 children: Arc<[SyntaxNode]>,
34976}
34977impl Terminal for TerminalPlusEq {
34978 const KIND: SyntaxKind = SyntaxKind::TerminalPlusEq;
34979 type TokenType = TokenPlusEq;
34980 fn new_green(
34981 db: &dyn SyntaxGroup,
34982 leading_trivia: TriviaGreen,
34983 token: <<TerminalPlusEq as Terminal>::TokenType as TypedSyntaxNode>::Green,
34984 trailing_trivia: TriviaGreen,
34985 ) -> Self::Green {
34986 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
34987 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
34988 TerminalPlusEqGreen(
34989 Arc::new(GreenNode {
34990 kind: SyntaxKind::TerminalPlusEq,
34991 details: GreenNodeDetails::Node { children, width },
34992 })
34993 .intern(db),
34994 )
34995 }
34996 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
34997 self.token(db).text(db)
34998 }
34999}
35000impl TerminalPlusEq {
35001 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35002 Trivia::from_syntax_node(db, self.children[0].clone())
35003 }
35004 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenPlusEq {
35005 TokenPlusEq::from_syntax_node(db, self.children[1].clone())
35006 }
35007 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35008 Trivia::from_syntax_node(db, self.children[2].clone())
35009 }
35010}
35011#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35012pub struct TerminalPlusEqPtr(pub SyntaxStablePtrId);
35013impl TerminalPlusEqPtr {}
35014impl TypedStablePtr for TerminalPlusEqPtr {
35015 type SyntaxNode = TerminalPlusEq;
35016 fn untyped(&self) -> SyntaxStablePtrId {
35017 self.0
35018 }
35019 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalPlusEq {
35020 TerminalPlusEq::from_syntax_node(db, self.0.lookup(db))
35021 }
35022}
35023impl From<TerminalPlusEqPtr> for SyntaxStablePtrId {
35024 fn from(ptr: TerminalPlusEqPtr) -> Self {
35025 ptr.untyped()
35026 }
35027}
35028#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35029pub struct TerminalPlusEqGreen(pub GreenId);
35030impl TypedSyntaxNode for TerminalPlusEq {
35031 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalPlusEq);
35032 type StablePtr = TerminalPlusEqPtr;
35033 type Green = TerminalPlusEqGreen;
35034 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35035 TerminalPlusEqGreen(
35036 Arc::new(GreenNode {
35037 kind: SyntaxKind::TerminalPlusEq,
35038 details: GreenNodeDetails::Node {
35039 children: vec![
35040 Trivia::missing(db).0,
35041 TokenPlusEq::missing(db).0,
35042 Trivia::missing(db).0,
35043 ],
35044 width: TextWidth::default(),
35045 },
35046 })
35047 .intern(db),
35048 )
35049 }
35050 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35051 let kind = node.kind(db);
35052 assert_eq!(
35053 kind,
35054 SyntaxKind::TerminalPlusEq,
35055 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35056 kind,
35057 SyntaxKind::TerminalPlusEq
35058 );
35059 let children = db.get_children(node.clone());
35060 Self { node, children }
35061 }
35062 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35063 let kind = node.kind(db);
35064 if kind == SyntaxKind::TerminalPlusEq {
35065 Some(Self::from_syntax_node(db, node))
35066 } else {
35067 None
35068 }
35069 }
35070 fn as_syntax_node(&self) -> SyntaxNode {
35071 self.node.clone()
35072 }
35073 fn stable_ptr(&self) -> Self::StablePtr {
35074 TerminalPlusEqPtr(self.node.0.stable_ptr)
35075 }
35076}
35077impl From<&TerminalPlusEq> for SyntaxStablePtrId {
35078 fn from(node: &TerminalPlusEq) -> Self {
35079 node.stable_ptr().untyped()
35080 }
35081}
35082#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35083pub struct TokenQuestionMark {
35084 node: SyntaxNode,
35085}
35086impl Token for TokenQuestionMark {
35087 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35088 TokenQuestionMarkGreen(
35089 Arc::new(GreenNode {
35090 kind: SyntaxKind::TokenQuestionMark,
35091 details: GreenNodeDetails::Token(text),
35092 })
35093 .intern(db),
35094 )
35095 }
35096 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35097 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35098 .clone()
35099 }
35100}
35101#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35102pub struct TokenQuestionMarkPtr(pub SyntaxStablePtrId);
35103impl TypedStablePtr for TokenQuestionMarkPtr {
35104 type SyntaxNode = TokenQuestionMark;
35105 fn untyped(&self) -> SyntaxStablePtrId {
35106 self.0
35107 }
35108 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
35109 TokenQuestionMark::from_syntax_node(db, self.0.lookup(db))
35110 }
35111}
35112impl From<TokenQuestionMarkPtr> for SyntaxStablePtrId {
35113 fn from(ptr: TokenQuestionMarkPtr) -> Self {
35114 ptr.untyped()
35115 }
35116}
35117#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35118pub struct TokenQuestionMarkGreen(pub GreenId);
35119impl TokenQuestionMarkGreen {
35120 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35121 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35122 }
35123}
35124impl TypedSyntaxNode for TokenQuestionMark {
35125 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenQuestionMark);
35126 type StablePtr = TokenQuestionMarkPtr;
35127 type Green = TokenQuestionMarkGreen;
35128 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35129 TokenQuestionMarkGreen(
35130 Arc::new(GreenNode {
35131 kind: SyntaxKind::TokenMissing,
35132 details: GreenNodeDetails::Token("".into()),
35133 })
35134 .intern(db),
35135 )
35136 }
35137 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35138 match node.0.green.lookup_intern(db).details {
35139 GreenNodeDetails::Token(_) => Self { node },
35140 GreenNodeDetails::Node { .. } => {
35141 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenQuestionMark)
35142 }
35143 }
35144 }
35145 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35146 match node.0.green.lookup_intern(db).details {
35147 GreenNodeDetails::Token(_) => Some(Self { node }),
35148 GreenNodeDetails::Node { .. } => None,
35149 }
35150 }
35151 fn as_syntax_node(&self) -> SyntaxNode {
35152 self.node.clone()
35153 }
35154 fn stable_ptr(&self) -> Self::StablePtr {
35155 TokenQuestionMarkPtr(self.node.0.stable_ptr)
35156 }
35157}
35158impl From<&TokenQuestionMark> for SyntaxStablePtrId {
35159 fn from(node: &TokenQuestionMark) -> Self {
35160 node.stable_ptr().untyped()
35161 }
35162}
35163#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35164pub struct TerminalQuestionMark {
35165 node: SyntaxNode,
35166 children: Arc<[SyntaxNode]>,
35167}
35168impl Terminal for TerminalQuestionMark {
35169 const KIND: SyntaxKind = SyntaxKind::TerminalQuestionMark;
35170 type TokenType = TokenQuestionMark;
35171 fn new_green(
35172 db: &dyn SyntaxGroup,
35173 leading_trivia: TriviaGreen,
35174 token: <<TerminalQuestionMark as Terminal>::TokenType as TypedSyntaxNode>::Green,
35175 trailing_trivia: TriviaGreen,
35176 ) -> Self::Green {
35177 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35178 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35179 TerminalQuestionMarkGreen(
35180 Arc::new(GreenNode {
35181 kind: SyntaxKind::TerminalQuestionMark,
35182 details: GreenNodeDetails::Node { children, width },
35183 })
35184 .intern(db),
35185 )
35186 }
35187 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35188 self.token(db).text(db)
35189 }
35190}
35191impl TerminalQuestionMark {
35192 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35193 Trivia::from_syntax_node(db, self.children[0].clone())
35194 }
35195 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenQuestionMark {
35196 TokenQuestionMark::from_syntax_node(db, self.children[1].clone())
35197 }
35198 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35199 Trivia::from_syntax_node(db, self.children[2].clone())
35200 }
35201}
35202#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35203pub struct TerminalQuestionMarkPtr(pub SyntaxStablePtrId);
35204impl TerminalQuestionMarkPtr {}
35205impl TypedStablePtr for TerminalQuestionMarkPtr {
35206 type SyntaxNode = TerminalQuestionMark;
35207 fn untyped(&self) -> SyntaxStablePtrId {
35208 self.0
35209 }
35210 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalQuestionMark {
35211 TerminalQuestionMark::from_syntax_node(db, self.0.lookup(db))
35212 }
35213}
35214impl From<TerminalQuestionMarkPtr> for SyntaxStablePtrId {
35215 fn from(ptr: TerminalQuestionMarkPtr) -> Self {
35216 ptr.untyped()
35217 }
35218}
35219#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35220pub struct TerminalQuestionMarkGreen(pub GreenId);
35221impl TypedSyntaxNode for TerminalQuestionMark {
35222 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalQuestionMark);
35223 type StablePtr = TerminalQuestionMarkPtr;
35224 type Green = TerminalQuestionMarkGreen;
35225 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35226 TerminalQuestionMarkGreen(
35227 Arc::new(GreenNode {
35228 kind: SyntaxKind::TerminalQuestionMark,
35229 details: GreenNodeDetails::Node {
35230 children: vec![
35231 Trivia::missing(db).0,
35232 TokenQuestionMark::missing(db).0,
35233 Trivia::missing(db).0,
35234 ],
35235 width: TextWidth::default(),
35236 },
35237 })
35238 .intern(db),
35239 )
35240 }
35241 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35242 let kind = node.kind(db);
35243 assert_eq!(
35244 kind,
35245 SyntaxKind::TerminalQuestionMark,
35246 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35247 kind,
35248 SyntaxKind::TerminalQuestionMark
35249 );
35250 let children = db.get_children(node.clone());
35251 Self { node, children }
35252 }
35253 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35254 let kind = node.kind(db);
35255 if kind == SyntaxKind::TerminalQuestionMark {
35256 Some(Self::from_syntax_node(db, node))
35257 } else {
35258 None
35259 }
35260 }
35261 fn as_syntax_node(&self) -> SyntaxNode {
35262 self.node.clone()
35263 }
35264 fn stable_ptr(&self) -> Self::StablePtr {
35265 TerminalQuestionMarkPtr(self.node.0.stable_ptr)
35266 }
35267}
35268impl From<&TerminalQuestionMark> for SyntaxStablePtrId {
35269 fn from(node: &TerminalQuestionMark) -> Self {
35270 node.stable_ptr().untyped()
35271 }
35272}
35273#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35274pub struct TokenRBrace {
35275 node: SyntaxNode,
35276}
35277impl Token for TokenRBrace {
35278 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35279 TokenRBraceGreen(
35280 Arc::new(GreenNode {
35281 kind: SyntaxKind::TokenRBrace,
35282 details: GreenNodeDetails::Token(text),
35283 })
35284 .intern(db),
35285 )
35286 }
35287 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35288 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35289 .clone()
35290 }
35291}
35292#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35293pub struct TokenRBracePtr(pub SyntaxStablePtrId);
35294impl TypedStablePtr for TokenRBracePtr {
35295 type SyntaxNode = TokenRBrace;
35296 fn untyped(&self) -> SyntaxStablePtrId {
35297 self.0
35298 }
35299 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
35300 TokenRBrace::from_syntax_node(db, self.0.lookup(db))
35301 }
35302}
35303impl From<TokenRBracePtr> for SyntaxStablePtrId {
35304 fn from(ptr: TokenRBracePtr) -> Self {
35305 ptr.untyped()
35306 }
35307}
35308#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35309pub struct TokenRBraceGreen(pub GreenId);
35310impl TokenRBraceGreen {
35311 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35312 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35313 }
35314}
35315impl TypedSyntaxNode for TokenRBrace {
35316 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrace);
35317 type StablePtr = TokenRBracePtr;
35318 type Green = TokenRBraceGreen;
35319 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35320 TokenRBraceGreen(
35321 Arc::new(GreenNode {
35322 kind: SyntaxKind::TokenMissing,
35323 details: GreenNodeDetails::Token("".into()),
35324 })
35325 .intern(db),
35326 )
35327 }
35328 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35329 match node.0.green.lookup_intern(db).details {
35330 GreenNodeDetails::Token(_) => Self { node },
35331 GreenNodeDetails::Node { .. } => {
35332 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrace)
35333 }
35334 }
35335 }
35336 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35337 match node.0.green.lookup_intern(db).details {
35338 GreenNodeDetails::Token(_) => Some(Self { node }),
35339 GreenNodeDetails::Node { .. } => None,
35340 }
35341 }
35342 fn as_syntax_node(&self) -> SyntaxNode {
35343 self.node.clone()
35344 }
35345 fn stable_ptr(&self) -> Self::StablePtr {
35346 TokenRBracePtr(self.node.0.stable_ptr)
35347 }
35348}
35349impl From<&TokenRBrace> for SyntaxStablePtrId {
35350 fn from(node: &TokenRBrace) -> Self {
35351 node.stable_ptr().untyped()
35352 }
35353}
35354#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35355pub struct TerminalRBrace {
35356 node: SyntaxNode,
35357 children: Arc<[SyntaxNode]>,
35358}
35359impl Terminal for TerminalRBrace {
35360 const KIND: SyntaxKind = SyntaxKind::TerminalRBrace;
35361 type TokenType = TokenRBrace;
35362 fn new_green(
35363 db: &dyn SyntaxGroup,
35364 leading_trivia: TriviaGreen,
35365 token: <<TerminalRBrace as Terminal>::TokenType as TypedSyntaxNode>::Green,
35366 trailing_trivia: TriviaGreen,
35367 ) -> Self::Green {
35368 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35369 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35370 TerminalRBraceGreen(
35371 Arc::new(GreenNode {
35372 kind: SyntaxKind::TerminalRBrace,
35373 details: GreenNodeDetails::Node { children, width },
35374 })
35375 .intern(db),
35376 )
35377 }
35378 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35379 self.token(db).text(db)
35380 }
35381}
35382impl TerminalRBrace {
35383 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35384 Trivia::from_syntax_node(db, self.children[0].clone())
35385 }
35386 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrace {
35387 TokenRBrace::from_syntax_node(db, self.children[1].clone())
35388 }
35389 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35390 Trivia::from_syntax_node(db, self.children[2].clone())
35391 }
35392}
35393#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35394pub struct TerminalRBracePtr(pub SyntaxStablePtrId);
35395impl TerminalRBracePtr {}
35396impl TypedStablePtr for TerminalRBracePtr {
35397 type SyntaxNode = TerminalRBrace;
35398 fn untyped(&self) -> SyntaxStablePtrId {
35399 self.0
35400 }
35401 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrace {
35402 TerminalRBrace::from_syntax_node(db, self.0.lookup(db))
35403 }
35404}
35405impl From<TerminalRBracePtr> for SyntaxStablePtrId {
35406 fn from(ptr: TerminalRBracePtr) -> Self {
35407 ptr.untyped()
35408 }
35409}
35410#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35411pub struct TerminalRBraceGreen(pub GreenId);
35412impl TypedSyntaxNode for TerminalRBrace {
35413 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrace);
35414 type StablePtr = TerminalRBracePtr;
35415 type Green = TerminalRBraceGreen;
35416 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35417 TerminalRBraceGreen(
35418 Arc::new(GreenNode {
35419 kind: SyntaxKind::TerminalRBrace,
35420 details: GreenNodeDetails::Node {
35421 children: vec![
35422 Trivia::missing(db).0,
35423 TokenRBrace::missing(db).0,
35424 Trivia::missing(db).0,
35425 ],
35426 width: TextWidth::default(),
35427 },
35428 })
35429 .intern(db),
35430 )
35431 }
35432 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35433 let kind = node.kind(db);
35434 assert_eq!(
35435 kind,
35436 SyntaxKind::TerminalRBrace,
35437 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35438 kind,
35439 SyntaxKind::TerminalRBrace
35440 );
35441 let children = db.get_children(node.clone());
35442 Self { node, children }
35443 }
35444 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35445 let kind = node.kind(db);
35446 if kind == SyntaxKind::TerminalRBrace {
35447 Some(Self::from_syntax_node(db, node))
35448 } else {
35449 None
35450 }
35451 }
35452 fn as_syntax_node(&self) -> SyntaxNode {
35453 self.node.clone()
35454 }
35455 fn stable_ptr(&self) -> Self::StablePtr {
35456 TerminalRBracePtr(self.node.0.stable_ptr)
35457 }
35458}
35459impl From<&TerminalRBrace> for SyntaxStablePtrId {
35460 fn from(node: &TerminalRBrace) -> Self {
35461 node.stable_ptr().untyped()
35462 }
35463}
35464#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35465pub struct TokenRBrack {
35466 node: SyntaxNode,
35467}
35468impl Token for TokenRBrack {
35469 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35470 TokenRBrackGreen(
35471 Arc::new(GreenNode {
35472 kind: SyntaxKind::TokenRBrack,
35473 details: GreenNodeDetails::Token(text),
35474 })
35475 .intern(db),
35476 )
35477 }
35478 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35479 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35480 .clone()
35481 }
35482}
35483#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35484pub struct TokenRBrackPtr(pub SyntaxStablePtrId);
35485impl TypedStablePtr for TokenRBrackPtr {
35486 type SyntaxNode = TokenRBrack;
35487 fn untyped(&self) -> SyntaxStablePtrId {
35488 self.0
35489 }
35490 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
35491 TokenRBrack::from_syntax_node(db, self.0.lookup(db))
35492 }
35493}
35494impl From<TokenRBrackPtr> for SyntaxStablePtrId {
35495 fn from(ptr: TokenRBrackPtr) -> Self {
35496 ptr.untyped()
35497 }
35498}
35499#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35500pub struct TokenRBrackGreen(pub GreenId);
35501impl TokenRBrackGreen {
35502 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35503 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35504 }
35505}
35506impl TypedSyntaxNode for TokenRBrack {
35507 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRBrack);
35508 type StablePtr = TokenRBrackPtr;
35509 type Green = TokenRBrackGreen;
35510 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35511 TokenRBrackGreen(
35512 Arc::new(GreenNode {
35513 kind: SyntaxKind::TokenMissing,
35514 details: GreenNodeDetails::Token("".into()),
35515 })
35516 .intern(db),
35517 )
35518 }
35519 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35520 match node.0.green.lookup_intern(db).details {
35521 GreenNodeDetails::Token(_) => Self { node },
35522 GreenNodeDetails::Node { .. } => {
35523 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRBrack)
35524 }
35525 }
35526 }
35527 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35528 match node.0.green.lookup_intern(db).details {
35529 GreenNodeDetails::Token(_) => Some(Self { node }),
35530 GreenNodeDetails::Node { .. } => None,
35531 }
35532 }
35533 fn as_syntax_node(&self) -> SyntaxNode {
35534 self.node.clone()
35535 }
35536 fn stable_ptr(&self) -> Self::StablePtr {
35537 TokenRBrackPtr(self.node.0.stable_ptr)
35538 }
35539}
35540impl From<&TokenRBrack> for SyntaxStablePtrId {
35541 fn from(node: &TokenRBrack) -> Self {
35542 node.stable_ptr().untyped()
35543 }
35544}
35545#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35546pub struct TerminalRBrack {
35547 node: SyntaxNode,
35548 children: Arc<[SyntaxNode]>,
35549}
35550impl Terminal for TerminalRBrack {
35551 const KIND: SyntaxKind = SyntaxKind::TerminalRBrack;
35552 type TokenType = TokenRBrack;
35553 fn new_green(
35554 db: &dyn SyntaxGroup,
35555 leading_trivia: TriviaGreen,
35556 token: <<TerminalRBrack as Terminal>::TokenType as TypedSyntaxNode>::Green,
35557 trailing_trivia: TriviaGreen,
35558 ) -> Self::Green {
35559 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35560 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35561 TerminalRBrackGreen(
35562 Arc::new(GreenNode {
35563 kind: SyntaxKind::TerminalRBrack,
35564 details: GreenNodeDetails::Node { children, width },
35565 })
35566 .intern(db),
35567 )
35568 }
35569 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35570 self.token(db).text(db)
35571 }
35572}
35573impl TerminalRBrack {
35574 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35575 Trivia::from_syntax_node(db, self.children[0].clone())
35576 }
35577 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRBrack {
35578 TokenRBrack::from_syntax_node(db, self.children[1].clone())
35579 }
35580 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35581 Trivia::from_syntax_node(db, self.children[2].clone())
35582 }
35583}
35584#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35585pub struct TerminalRBrackPtr(pub SyntaxStablePtrId);
35586impl TerminalRBrackPtr {}
35587impl TypedStablePtr for TerminalRBrackPtr {
35588 type SyntaxNode = TerminalRBrack;
35589 fn untyped(&self) -> SyntaxStablePtrId {
35590 self.0
35591 }
35592 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRBrack {
35593 TerminalRBrack::from_syntax_node(db, self.0.lookup(db))
35594 }
35595}
35596impl From<TerminalRBrackPtr> for SyntaxStablePtrId {
35597 fn from(ptr: TerminalRBrackPtr) -> Self {
35598 ptr.untyped()
35599 }
35600}
35601#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35602pub struct TerminalRBrackGreen(pub GreenId);
35603impl TypedSyntaxNode for TerminalRBrack {
35604 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRBrack);
35605 type StablePtr = TerminalRBrackPtr;
35606 type Green = TerminalRBrackGreen;
35607 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35608 TerminalRBrackGreen(
35609 Arc::new(GreenNode {
35610 kind: SyntaxKind::TerminalRBrack,
35611 details: GreenNodeDetails::Node {
35612 children: vec![
35613 Trivia::missing(db).0,
35614 TokenRBrack::missing(db).0,
35615 Trivia::missing(db).0,
35616 ],
35617 width: TextWidth::default(),
35618 },
35619 })
35620 .intern(db),
35621 )
35622 }
35623 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35624 let kind = node.kind(db);
35625 assert_eq!(
35626 kind,
35627 SyntaxKind::TerminalRBrack,
35628 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35629 kind,
35630 SyntaxKind::TerminalRBrack
35631 );
35632 let children = db.get_children(node.clone());
35633 Self { node, children }
35634 }
35635 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35636 let kind = node.kind(db);
35637 if kind == SyntaxKind::TerminalRBrack {
35638 Some(Self::from_syntax_node(db, node))
35639 } else {
35640 None
35641 }
35642 }
35643 fn as_syntax_node(&self) -> SyntaxNode {
35644 self.node.clone()
35645 }
35646 fn stable_ptr(&self) -> Self::StablePtr {
35647 TerminalRBrackPtr(self.node.0.stable_ptr)
35648 }
35649}
35650impl From<&TerminalRBrack> for SyntaxStablePtrId {
35651 fn from(node: &TerminalRBrack) -> Self {
35652 node.stable_ptr().untyped()
35653 }
35654}
35655#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35656pub struct TokenRParen {
35657 node: SyntaxNode,
35658}
35659impl Token for TokenRParen {
35660 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35661 TokenRParenGreen(
35662 Arc::new(GreenNode {
35663 kind: SyntaxKind::TokenRParen,
35664 details: GreenNodeDetails::Token(text),
35665 })
35666 .intern(db),
35667 )
35668 }
35669 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35670 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35671 .clone()
35672 }
35673}
35674#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35675pub struct TokenRParenPtr(pub SyntaxStablePtrId);
35676impl TypedStablePtr for TokenRParenPtr {
35677 type SyntaxNode = TokenRParen;
35678 fn untyped(&self) -> SyntaxStablePtrId {
35679 self.0
35680 }
35681 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenRParen {
35682 TokenRParen::from_syntax_node(db, self.0.lookup(db))
35683 }
35684}
35685impl From<TokenRParenPtr> for SyntaxStablePtrId {
35686 fn from(ptr: TokenRParenPtr) -> Self {
35687 ptr.untyped()
35688 }
35689}
35690#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35691pub struct TokenRParenGreen(pub GreenId);
35692impl TokenRParenGreen {
35693 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35694 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35695 }
35696}
35697impl TypedSyntaxNode for TokenRParen {
35698 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenRParen);
35699 type StablePtr = TokenRParenPtr;
35700 type Green = TokenRParenGreen;
35701 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35702 TokenRParenGreen(
35703 Arc::new(GreenNode {
35704 kind: SyntaxKind::TokenMissing,
35705 details: GreenNodeDetails::Token("".into()),
35706 })
35707 .intern(db),
35708 )
35709 }
35710 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35711 match node.0.green.lookup_intern(db).details {
35712 GreenNodeDetails::Token(_) => Self { node },
35713 GreenNodeDetails::Node { .. } => {
35714 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenRParen)
35715 }
35716 }
35717 }
35718 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35719 match node.0.green.lookup_intern(db).details {
35720 GreenNodeDetails::Token(_) => Some(Self { node }),
35721 GreenNodeDetails::Node { .. } => None,
35722 }
35723 }
35724 fn as_syntax_node(&self) -> SyntaxNode {
35725 self.node.clone()
35726 }
35727 fn stable_ptr(&self) -> Self::StablePtr {
35728 TokenRParenPtr(self.node.0.stable_ptr)
35729 }
35730}
35731impl From<&TokenRParen> for SyntaxStablePtrId {
35732 fn from(node: &TokenRParen) -> Self {
35733 node.stable_ptr().untyped()
35734 }
35735}
35736#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35737pub struct TerminalRParen {
35738 node: SyntaxNode,
35739 children: Arc<[SyntaxNode]>,
35740}
35741impl Terminal for TerminalRParen {
35742 const KIND: SyntaxKind = SyntaxKind::TerminalRParen;
35743 type TokenType = TokenRParen;
35744 fn new_green(
35745 db: &dyn SyntaxGroup,
35746 leading_trivia: TriviaGreen,
35747 token: <<TerminalRParen as Terminal>::TokenType as TypedSyntaxNode>::Green,
35748 trailing_trivia: TriviaGreen,
35749 ) -> Self::Green {
35750 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35751 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35752 TerminalRParenGreen(
35753 Arc::new(GreenNode {
35754 kind: SyntaxKind::TerminalRParen,
35755 details: GreenNodeDetails::Node { children, width },
35756 })
35757 .intern(db),
35758 )
35759 }
35760 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35761 self.token(db).text(db)
35762 }
35763}
35764impl TerminalRParen {
35765 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35766 Trivia::from_syntax_node(db, self.children[0].clone())
35767 }
35768 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenRParen {
35769 TokenRParen::from_syntax_node(db, self.children[1].clone())
35770 }
35771 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35772 Trivia::from_syntax_node(db, self.children[2].clone())
35773 }
35774}
35775#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35776pub struct TerminalRParenPtr(pub SyntaxStablePtrId);
35777impl TerminalRParenPtr {}
35778impl TypedStablePtr for TerminalRParenPtr {
35779 type SyntaxNode = TerminalRParen;
35780 fn untyped(&self) -> SyntaxStablePtrId {
35781 self.0
35782 }
35783 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalRParen {
35784 TerminalRParen::from_syntax_node(db, self.0.lookup(db))
35785 }
35786}
35787impl From<TerminalRParenPtr> for SyntaxStablePtrId {
35788 fn from(ptr: TerminalRParenPtr) -> Self {
35789 ptr.untyped()
35790 }
35791}
35792#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35793pub struct TerminalRParenGreen(pub GreenId);
35794impl TypedSyntaxNode for TerminalRParen {
35795 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalRParen);
35796 type StablePtr = TerminalRParenPtr;
35797 type Green = TerminalRParenGreen;
35798 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35799 TerminalRParenGreen(
35800 Arc::new(GreenNode {
35801 kind: SyntaxKind::TerminalRParen,
35802 details: GreenNodeDetails::Node {
35803 children: vec![
35804 Trivia::missing(db).0,
35805 TokenRParen::missing(db).0,
35806 Trivia::missing(db).0,
35807 ],
35808 width: TextWidth::default(),
35809 },
35810 })
35811 .intern(db),
35812 )
35813 }
35814 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35815 let kind = node.kind(db);
35816 assert_eq!(
35817 kind,
35818 SyntaxKind::TerminalRParen,
35819 "Unexpected SyntaxKind {:?}. Expected {:?}.",
35820 kind,
35821 SyntaxKind::TerminalRParen
35822 );
35823 let children = db.get_children(node.clone());
35824 Self { node, children }
35825 }
35826 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35827 let kind = node.kind(db);
35828 if kind == SyntaxKind::TerminalRParen {
35829 Some(Self::from_syntax_node(db, node))
35830 } else {
35831 None
35832 }
35833 }
35834 fn as_syntax_node(&self) -> SyntaxNode {
35835 self.node.clone()
35836 }
35837 fn stable_ptr(&self) -> Self::StablePtr {
35838 TerminalRParenPtr(self.node.0.stable_ptr)
35839 }
35840}
35841impl From<&TerminalRParen> for SyntaxStablePtrId {
35842 fn from(node: &TerminalRParen) -> Self {
35843 node.stable_ptr().untyped()
35844 }
35845}
35846#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35847pub struct TokenSemicolon {
35848 node: SyntaxNode,
35849}
35850impl Token for TokenSemicolon {
35851 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
35852 TokenSemicolonGreen(
35853 Arc::new(GreenNode {
35854 kind: SyntaxKind::TokenSemicolon,
35855 details: GreenNodeDetails::Token(text),
35856 })
35857 .intern(db),
35858 )
35859 }
35860 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35861 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
35862 .clone()
35863 }
35864}
35865#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35866pub struct TokenSemicolonPtr(pub SyntaxStablePtrId);
35867impl TypedStablePtr for TokenSemicolonPtr {
35868 type SyntaxNode = TokenSemicolon;
35869 fn untyped(&self) -> SyntaxStablePtrId {
35870 self.0
35871 }
35872 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
35873 TokenSemicolon::from_syntax_node(db, self.0.lookup(db))
35874 }
35875}
35876impl From<TokenSemicolonPtr> for SyntaxStablePtrId {
35877 fn from(ptr: TokenSemicolonPtr) -> Self {
35878 ptr.untyped()
35879 }
35880}
35881#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35882pub struct TokenSemicolonGreen(pub GreenId);
35883impl TokenSemicolonGreen {
35884 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35885 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
35886 }
35887}
35888impl TypedSyntaxNode for TokenSemicolon {
35889 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSemicolon);
35890 type StablePtr = TokenSemicolonPtr;
35891 type Green = TokenSemicolonGreen;
35892 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35893 TokenSemicolonGreen(
35894 Arc::new(GreenNode {
35895 kind: SyntaxKind::TokenMissing,
35896 details: GreenNodeDetails::Token("".into()),
35897 })
35898 .intern(db),
35899 )
35900 }
35901 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
35902 match node.0.green.lookup_intern(db).details {
35903 GreenNodeDetails::Token(_) => Self { node },
35904 GreenNodeDetails::Node { .. } => {
35905 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSemicolon)
35906 }
35907 }
35908 }
35909 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
35910 match node.0.green.lookup_intern(db).details {
35911 GreenNodeDetails::Token(_) => Some(Self { node }),
35912 GreenNodeDetails::Node { .. } => None,
35913 }
35914 }
35915 fn as_syntax_node(&self) -> SyntaxNode {
35916 self.node.clone()
35917 }
35918 fn stable_ptr(&self) -> Self::StablePtr {
35919 TokenSemicolonPtr(self.node.0.stable_ptr)
35920 }
35921}
35922impl From<&TokenSemicolon> for SyntaxStablePtrId {
35923 fn from(node: &TokenSemicolon) -> Self {
35924 node.stable_ptr().untyped()
35925 }
35926}
35927#[derive(Clone, Debug, Eq, Hash, PartialEq)]
35928pub struct TerminalSemicolon {
35929 node: SyntaxNode,
35930 children: Arc<[SyntaxNode]>,
35931}
35932impl Terminal for TerminalSemicolon {
35933 const KIND: SyntaxKind = SyntaxKind::TerminalSemicolon;
35934 type TokenType = TokenSemicolon;
35935 fn new_green(
35936 db: &dyn SyntaxGroup,
35937 leading_trivia: TriviaGreen,
35938 token: <<TerminalSemicolon as Terminal>::TokenType as TypedSyntaxNode>::Green,
35939 trailing_trivia: TriviaGreen,
35940 ) -> Self::Green {
35941 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
35942 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
35943 TerminalSemicolonGreen(
35944 Arc::new(GreenNode {
35945 kind: SyntaxKind::TerminalSemicolon,
35946 details: GreenNodeDetails::Node { children, width },
35947 })
35948 .intern(db),
35949 )
35950 }
35951 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
35952 self.token(db).text(db)
35953 }
35954}
35955impl TerminalSemicolon {
35956 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35957 Trivia::from_syntax_node(db, self.children[0].clone())
35958 }
35959 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenSemicolon {
35960 TokenSemicolon::from_syntax_node(db, self.children[1].clone())
35961 }
35962 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
35963 Trivia::from_syntax_node(db, self.children[2].clone())
35964 }
35965}
35966#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35967pub struct TerminalSemicolonPtr(pub SyntaxStablePtrId);
35968impl TerminalSemicolonPtr {}
35969impl TypedStablePtr for TerminalSemicolonPtr {
35970 type SyntaxNode = TerminalSemicolon;
35971 fn untyped(&self) -> SyntaxStablePtrId {
35972 self.0
35973 }
35974 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalSemicolon {
35975 TerminalSemicolon::from_syntax_node(db, self.0.lookup(db))
35976 }
35977}
35978impl From<TerminalSemicolonPtr> for SyntaxStablePtrId {
35979 fn from(ptr: TerminalSemicolonPtr) -> Self {
35980 ptr.untyped()
35981 }
35982}
35983#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
35984pub struct TerminalSemicolonGreen(pub GreenId);
35985impl TypedSyntaxNode for TerminalSemicolon {
35986 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalSemicolon);
35987 type StablePtr = TerminalSemicolonPtr;
35988 type Green = TerminalSemicolonGreen;
35989 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
35990 TerminalSemicolonGreen(
35991 Arc::new(GreenNode {
35992 kind: SyntaxKind::TerminalSemicolon,
35993 details: GreenNodeDetails::Node {
35994 children: vec![
35995 Trivia::missing(db).0,
35996 TokenSemicolon::missing(db).0,
35997 Trivia::missing(db).0,
35998 ],
35999 width: TextWidth::default(),
36000 },
36001 })
36002 .intern(db),
36003 )
36004 }
36005 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36006 let kind = node.kind(db);
36007 assert_eq!(
36008 kind,
36009 SyntaxKind::TerminalSemicolon,
36010 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36011 kind,
36012 SyntaxKind::TerminalSemicolon
36013 );
36014 let children = db.get_children(node.clone());
36015 Self { node, children }
36016 }
36017 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36018 let kind = node.kind(db);
36019 if kind == SyntaxKind::TerminalSemicolon {
36020 Some(Self::from_syntax_node(db, node))
36021 } else {
36022 None
36023 }
36024 }
36025 fn as_syntax_node(&self) -> SyntaxNode {
36026 self.node.clone()
36027 }
36028 fn stable_ptr(&self) -> Self::StablePtr {
36029 TerminalSemicolonPtr(self.node.0.stable_ptr)
36030 }
36031}
36032impl From<&TerminalSemicolon> for SyntaxStablePtrId {
36033 fn from(node: &TerminalSemicolon) -> Self {
36034 node.stable_ptr().untyped()
36035 }
36036}
36037#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36038pub struct TokenUnderscore {
36039 node: SyntaxNode,
36040}
36041impl Token for TokenUnderscore {
36042 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36043 TokenUnderscoreGreen(
36044 Arc::new(GreenNode {
36045 kind: SyntaxKind::TokenUnderscore,
36046 details: GreenNodeDetails::Token(text),
36047 })
36048 .intern(db),
36049 )
36050 }
36051 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36052 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36053 .clone()
36054 }
36055}
36056#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36057pub struct TokenUnderscorePtr(pub SyntaxStablePtrId);
36058impl TypedStablePtr for TokenUnderscorePtr {
36059 type SyntaxNode = TokenUnderscore;
36060 fn untyped(&self) -> SyntaxStablePtrId {
36061 self.0
36062 }
36063 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
36064 TokenUnderscore::from_syntax_node(db, self.0.lookup(db))
36065 }
36066}
36067impl From<TokenUnderscorePtr> for SyntaxStablePtrId {
36068 fn from(ptr: TokenUnderscorePtr) -> Self {
36069 ptr.untyped()
36070 }
36071}
36072#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36073pub struct TokenUnderscoreGreen(pub GreenId);
36074impl TokenUnderscoreGreen {
36075 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36076 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36077 }
36078}
36079impl TypedSyntaxNode for TokenUnderscore {
36080 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenUnderscore);
36081 type StablePtr = TokenUnderscorePtr;
36082 type Green = TokenUnderscoreGreen;
36083 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36084 TokenUnderscoreGreen(
36085 Arc::new(GreenNode {
36086 kind: SyntaxKind::TokenMissing,
36087 details: GreenNodeDetails::Token("".into()),
36088 })
36089 .intern(db),
36090 )
36091 }
36092 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36093 match node.0.green.lookup_intern(db).details {
36094 GreenNodeDetails::Token(_) => Self { node },
36095 GreenNodeDetails::Node { .. } => {
36096 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenUnderscore)
36097 }
36098 }
36099 }
36100 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36101 match node.0.green.lookup_intern(db).details {
36102 GreenNodeDetails::Token(_) => Some(Self { node }),
36103 GreenNodeDetails::Node { .. } => None,
36104 }
36105 }
36106 fn as_syntax_node(&self) -> SyntaxNode {
36107 self.node.clone()
36108 }
36109 fn stable_ptr(&self) -> Self::StablePtr {
36110 TokenUnderscorePtr(self.node.0.stable_ptr)
36111 }
36112}
36113impl From<&TokenUnderscore> for SyntaxStablePtrId {
36114 fn from(node: &TokenUnderscore) -> Self {
36115 node.stable_ptr().untyped()
36116 }
36117}
36118#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36119pub struct TerminalUnderscore {
36120 node: SyntaxNode,
36121 children: Arc<[SyntaxNode]>,
36122}
36123impl Terminal for TerminalUnderscore {
36124 const KIND: SyntaxKind = SyntaxKind::TerminalUnderscore;
36125 type TokenType = TokenUnderscore;
36126 fn new_green(
36127 db: &dyn SyntaxGroup,
36128 leading_trivia: TriviaGreen,
36129 token: <<TerminalUnderscore as Terminal>::TokenType as TypedSyntaxNode>::Green,
36130 trailing_trivia: TriviaGreen,
36131 ) -> Self::Green {
36132 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36133 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36134 TerminalUnderscoreGreen(
36135 Arc::new(GreenNode {
36136 kind: SyntaxKind::TerminalUnderscore,
36137 details: GreenNodeDetails::Node { children, width },
36138 })
36139 .intern(db),
36140 )
36141 }
36142 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36143 self.token(db).text(db)
36144 }
36145}
36146impl TerminalUnderscore {
36147 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36148 Trivia::from_syntax_node(db, self.children[0].clone())
36149 }
36150 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenUnderscore {
36151 TokenUnderscore::from_syntax_node(db, self.children[1].clone())
36152 }
36153 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36154 Trivia::from_syntax_node(db, self.children[2].clone())
36155 }
36156}
36157#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36158pub struct TerminalUnderscorePtr(pub SyntaxStablePtrId);
36159impl TerminalUnderscorePtr {}
36160impl TypedStablePtr for TerminalUnderscorePtr {
36161 type SyntaxNode = TerminalUnderscore;
36162 fn untyped(&self) -> SyntaxStablePtrId {
36163 self.0
36164 }
36165 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalUnderscore {
36166 TerminalUnderscore::from_syntax_node(db, self.0.lookup(db))
36167 }
36168}
36169impl From<TerminalUnderscorePtr> for SyntaxStablePtrId {
36170 fn from(ptr: TerminalUnderscorePtr) -> Self {
36171 ptr.untyped()
36172 }
36173}
36174#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36175pub struct TerminalUnderscoreGreen(pub GreenId);
36176impl TypedSyntaxNode for TerminalUnderscore {
36177 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalUnderscore);
36178 type StablePtr = TerminalUnderscorePtr;
36179 type Green = TerminalUnderscoreGreen;
36180 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36181 TerminalUnderscoreGreen(
36182 Arc::new(GreenNode {
36183 kind: SyntaxKind::TerminalUnderscore,
36184 details: GreenNodeDetails::Node {
36185 children: vec![
36186 Trivia::missing(db).0,
36187 TokenUnderscore::missing(db).0,
36188 Trivia::missing(db).0,
36189 ],
36190 width: TextWidth::default(),
36191 },
36192 })
36193 .intern(db),
36194 )
36195 }
36196 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36197 let kind = node.kind(db);
36198 assert_eq!(
36199 kind,
36200 SyntaxKind::TerminalUnderscore,
36201 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36202 kind,
36203 SyntaxKind::TerminalUnderscore
36204 );
36205 let children = db.get_children(node.clone());
36206 Self { node, children }
36207 }
36208 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36209 let kind = node.kind(db);
36210 if kind == SyntaxKind::TerminalUnderscore {
36211 Some(Self::from_syntax_node(db, node))
36212 } else {
36213 None
36214 }
36215 }
36216 fn as_syntax_node(&self) -> SyntaxNode {
36217 self.node.clone()
36218 }
36219 fn stable_ptr(&self) -> Self::StablePtr {
36220 TerminalUnderscorePtr(self.node.0.stable_ptr)
36221 }
36222}
36223impl From<&TerminalUnderscore> for SyntaxStablePtrId {
36224 fn from(node: &TerminalUnderscore) -> Self {
36225 node.stable_ptr().untyped()
36226 }
36227}
36228#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36229pub struct TokenXor {
36230 node: SyntaxNode,
36231}
36232impl Token for TokenXor {
36233 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36234 TokenXorGreen(
36235 Arc::new(GreenNode {
36236 kind: SyntaxKind::TokenXor,
36237 details: GreenNodeDetails::Token(text),
36238 })
36239 .intern(db),
36240 )
36241 }
36242 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36243 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36244 .clone()
36245 }
36246}
36247#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36248pub struct TokenXorPtr(pub SyntaxStablePtrId);
36249impl TypedStablePtr for TokenXorPtr {
36250 type SyntaxNode = TokenXor;
36251 fn untyped(&self) -> SyntaxStablePtrId {
36252 self.0
36253 }
36254 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenXor {
36255 TokenXor::from_syntax_node(db, self.0.lookup(db))
36256 }
36257}
36258impl From<TokenXorPtr> for SyntaxStablePtrId {
36259 fn from(ptr: TokenXorPtr) -> Self {
36260 ptr.untyped()
36261 }
36262}
36263#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36264pub struct TokenXorGreen(pub GreenId);
36265impl TokenXorGreen {
36266 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36267 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36268 }
36269}
36270impl TypedSyntaxNode for TokenXor {
36271 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenXor);
36272 type StablePtr = TokenXorPtr;
36273 type Green = TokenXorGreen;
36274 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36275 TokenXorGreen(
36276 Arc::new(GreenNode {
36277 kind: SyntaxKind::TokenMissing,
36278 details: GreenNodeDetails::Token("".into()),
36279 })
36280 .intern(db),
36281 )
36282 }
36283 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36284 match node.0.green.lookup_intern(db).details {
36285 GreenNodeDetails::Token(_) => Self { node },
36286 GreenNodeDetails::Node { .. } => {
36287 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenXor)
36288 }
36289 }
36290 }
36291 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36292 match node.0.green.lookup_intern(db).details {
36293 GreenNodeDetails::Token(_) => Some(Self { node }),
36294 GreenNodeDetails::Node { .. } => None,
36295 }
36296 }
36297 fn as_syntax_node(&self) -> SyntaxNode {
36298 self.node.clone()
36299 }
36300 fn stable_ptr(&self) -> Self::StablePtr {
36301 TokenXorPtr(self.node.0.stable_ptr)
36302 }
36303}
36304impl From<&TokenXor> for SyntaxStablePtrId {
36305 fn from(node: &TokenXor) -> Self {
36306 node.stable_ptr().untyped()
36307 }
36308}
36309#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36310pub struct TerminalXor {
36311 node: SyntaxNode,
36312 children: Arc<[SyntaxNode]>,
36313}
36314impl Terminal for TerminalXor {
36315 const KIND: SyntaxKind = SyntaxKind::TerminalXor;
36316 type TokenType = TokenXor;
36317 fn new_green(
36318 db: &dyn SyntaxGroup,
36319 leading_trivia: TriviaGreen,
36320 token: <<TerminalXor as Terminal>::TokenType as TypedSyntaxNode>::Green,
36321 trailing_trivia: TriviaGreen,
36322 ) -> Self::Green {
36323 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36324 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36325 TerminalXorGreen(
36326 Arc::new(GreenNode {
36327 kind: SyntaxKind::TerminalXor,
36328 details: GreenNodeDetails::Node { children, width },
36329 })
36330 .intern(db),
36331 )
36332 }
36333 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36334 self.token(db).text(db)
36335 }
36336}
36337impl TerminalXor {
36338 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36339 Trivia::from_syntax_node(db, self.children[0].clone())
36340 }
36341 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenXor {
36342 TokenXor::from_syntax_node(db, self.children[1].clone())
36343 }
36344 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36345 Trivia::from_syntax_node(db, self.children[2].clone())
36346 }
36347}
36348#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36349pub struct TerminalXorPtr(pub SyntaxStablePtrId);
36350impl TerminalXorPtr {}
36351impl TypedStablePtr for TerminalXorPtr {
36352 type SyntaxNode = TerminalXor;
36353 fn untyped(&self) -> SyntaxStablePtrId {
36354 self.0
36355 }
36356 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalXor {
36357 TerminalXor::from_syntax_node(db, self.0.lookup(db))
36358 }
36359}
36360impl From<TerminalXorPtr> for SyntaxStablePtrId {
36361 fn from(ptr: TerminalXorPtr) -> Self {
36362 ptr.untyped()
36363 }
36364}
36365#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36366pub struct TerminalXorGreen(pub GreenId);
36367impl TypedSyntaxNode for TerminalXor {
36368 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalXor);
36369 type StablePtr = TerminalXorPtr;
36370 type Green = TerminalXorGreen;
36371 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36372 TerminalXorGreen(
36373 Arc::new(GreenNode {
36374 kind: SyntaxKind::TerminalXor,
36375 details: GreenNodeDetails::Node {
36376 children: vec![
36377 Trivia::missing(db).0,
36378 TokenXor::missing(db).0,
36379 Trivia::missing(db).0,
36380 ],
36381 width: TextWidth::default(),
36382 },
36383 })
36384 .intern(db),
36385 )
36386 }
36387 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36388 let kind = node.kind(db);
36389 assert_eq!(
36390 kind,
36391 SyntaxKind::TerminalXor,
36392 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36393 kind,
36394 SyntaxKind::TerminalXor
36395 );
36396 let children = db.get_children(node.clone());
36397 Self { node, children }
36398 }
36399 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36400 let kind = node.kind(db);
36401 if kind == SyntaxKind::TerminalXor { Some(Self::from_syntax_node(db, node)) } else { None }
36402 }
36403 fn as_syntax_node(&self) -> SyntaxNode {
36404 self.node.clone()
36405 }
36406 fn stable_ptr(&self) -> Self::StablePtr {
36407 TerminalXorPtr(self.node.0.stable_ptr)
36408 }
36409}
36410impl From<&TerminalXor> for SyntaxStablePtrId {
36411 fn from(node: &TerminalXor) -> Self {
36412 node.stable_ptr().untyped()
36413 }
36414}
36415#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36416pub struct SyntaxFile {
36417 node: SyntaxNode,
36418 children: Arc<[SyntaxNode]>,
36419}
36420impl SyntaxFile {
36421 pub const INDEX_ITEMS: usize = 0;
36422 pub const INDEX_EOF: usize = 1;
36423 pub fn new_green(
36424 db: &dyn SyntaxGroup,
36425 items: ModuleItemListGreen,
36426 eof: TerminalEndOfFileGreen,
36427 ) -> SyntaxFileGreen {
36428 let children: Vec<GreenId> = vec![items.0, eof.0];
36429 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36430 SyntaxFileGreen(
36431 Arc::new(GreenNode {
36432 kind: SyntaxKind::SyntaxFile,
36433 details: GreenNodeDetails::Node { children, width },
36434 })
36435 .intern(db),
36436 )
36437 }
36438}
36439impl SyntaxFile {
36440 pub fn items(&self, db: &dyn SyntaxGroup) -> ModuleItemList {
36441 ModuleItemList::from_syntax_node(db, self.children[0].clone())
36442 }
36443 pub fn eof(&self, db: &dyn SyntaxGroup) -> TerminalEndOfFile {
36444 TerminalEndOfFile::from_syntax_node(db, self.children[1].clone())
36445 }
36446}
36447#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36448pub struct SyntaxFilePtr(pub SyntaxStablePtrId);
36449impl SyntaxFilePtr {}
36450impl TypedStablePtr for SyntaxFilePtr {
36451 type SyntaxNode = SyntaxFile;
36452 fn untyped(&self) -> SyntaxStablePtrId {
36453 self.0
36454 }
36455 fn lookup(&self, db: &dyn SyntaxGroup) -> SyntaxFile {
36456 SyntaxFile::from_syntax_node(db, self.0.lookup(db))
36457 }
36458}
36459impl From<SyntaxFilePtr> for SyntaxStablePtrId {
36460 fn from(ptr: SyntaxFilePtr) -> Self {
36461 ptr.untyped()
36462 }
36463}
36464#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36465pub struct SyntaxFileGreen(pub GreenId);
36466impl TypedSyntaxNode for SyntaxFile {
36467 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::SyntaxFile);
36468 type StablePtr = SyntaxFilePtr;
36469 type Green = SyntaxFileGreen;
36470 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36471 SyntaxFileGreen(
36472 Arc::new(GreenNode {
36473 kind: SyntaxKind::SyntaxFile,
36474 details: GreenNodeDetails::Node {
36475 children: vec![ModuleItemList::missing(db).0, TerminalEndOfFile::missing(db).0],
36476 width: TextWidth::default(),
36477 },
36478 })
36479 .intern(db),
36480 )
36481 }
36482 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36483 let kind = node.kind(db);
36484 assert_eq!(
36485 kind,
36486 SyntaxKind::SyntaxFile,
36487 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36488 kind,
36489 SyntaxKind::SyntaxFile
36490 );
36491 let children = db.get_children(node.clone());
36492 Self { node, children }
36493 }
36494 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36495 let kind = node.kind(db);
36496 if kind == SyntaxKind::SyntaxFile { Some(Self::from_syntax_node(db, node)) } else { None }
36497 }
36498 fn as_syntax_node(&self) -> SyntaxNode {
36499 self.node.clone()
36500 }
36501 fn stable_ptr(&self) -> Self::StablePtr {
36502 SyntaxFilePtr(self.node.0.stable_ptr)
36503 }
36504}
36505impl From<&SyntaxFile> for SyntaxStablePtrId {
36506 fn from(node: &SyntaxFile) -> Self {
36507 node.stable_ptr().untyped()
36508 }
36509}
36510#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36511pub struct TokenEmpty {
36512 node: SyntaxNode,
36513}
36514impl Token for TokenEmpty {
36515 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36516 TokenEmptyGreen(
36517 Arc::new(GreenNode {
36518 kind: SyntaxKind::TokenEmpty,
36519 details: GreenNodeDetails::Token(text),
36520 })
36521 .intern(db),
36522 )
36523 }
36524 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36525 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36526 .clone()
36527 }
36528}
36529#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36530pub struct TokenEmptyPtr(pub SyntaxStablePtrId);
36531impl TypedStablePtr for TokenEmptyPtr {
36532 type SyntaxNode = TokenEmpty;
36533 fn untyped(&self) -> SyntaxStablePtrId {
36534 self.0
36535 }
36536 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
36537 TokenEmpty::from_syntax_node(db, self.0.lookup(db))
36538 }
36539}
36540impl From<TokenEmptyPtr> for SyntaxStablePtrId {
36541 fn from(ptr: TokenEmptyPtr) -> Self {
36542 ptr.untyped()
36543 }
36544}
36545#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36546pub struct TokenEmptyGreen(pub GreenId);
36547impl TokenEmptyGreen {
36548 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36549 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36550 }
36551}
36552impl TypedSyntaxNode for TokenEmpty {
36553 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenEmpty);
36554 type StablePtr = TokenEmptyPtr;
36555 type Green = TokenEmptyGreen;
36556 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36557 TokenEmptyGreen(
36558 Arc::new(GreenNode {
36559 kind: SyntaxKind::TokenMissing,
36560 details: GreenNodeDetails::Token("".into()),
36561 })
36562 .intern(db),
36563 )
36564 }
36565 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36566 match node.0.green.lookup_intern(db).details {
36567 GreenNodeDetails::Token(_) => Self { node },
36568 GreenNodeDetails::Node { .. } => {
36569 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenEmpty)
36570 }
36571 }
36572 }
36573 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36574 match node.0.green.lookup_intern(db).details {
36575 GreenNodeDetails::Token(_) => Some(Self { node }),
36576 GreenNodeDetails::Node { .. } => None,
36577 }
36578 }
36579 fn as_syntax_node(&self) -> SyntaxNode {
36580 self.node.clone()
36581 }
36582 fn stable_ptr(&self) -> Self::StablePtr {
36583 TokenEmptyPtr(self.node.0.stable_ptr)
36584 }
36585}
36586impl From<&TokenEmpty> for SyntaxStablePtrId {
36587 fn from(node: &TokenEmpty) -> Self {
36588 node.stable_ptr().untyped()
36589 }
36590}
36591#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36592pub struct TerminalEmpty {
36593 node: SyntaxNode,
36594 children: Arc<[SyntaxNode]>,
36595}
36596impl Terminal for TerminalEmpty {
36597 const KIND: SyntaxKind = SyntaxKind::TerminalEmpty;
36598 type TokenType = TokenEmpty;
36599 fn new_green(
36600 db: &dyn SyntaxGroup,
36601 leading_trivia: TriviaGreen,
36602 token: <<TerminalEmpty as Terminal>::TokenType as TypedSyntaxNode>::Green,
36603 trailing_trivia: TriviaGreen,
36604 ) -> Self::Green {
36605 let children: Vec<GreenId> = vec![leading_trivia.0, token.0, trailing_trivia.0];
36606 let width = children.iter().copied().map(|id| id.lookup_intern(db).width()).sum();
36607 TerminalEmptyGreen(
36608 Arc::new(GreenNode {
36609 kind: SyntaxKind::TerminalEmpty,
36610 details: GreenNodeDetails::Node { children, width },
36611 })
36612 .intern(db),
36613 )
36614 }
36615 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36616 self.token(db).text(db)
36617 }
36618}
36619impl TerminalEmpty {
36620 pub fn leading_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36621 Trivia::from_syntax_node(db, self.children[0].clone())
36622 }
36623 pub fn token(&self, db: &dyn SyntaxGroup) -> TokenEmpty {
36624 TokenEmpty::from_syntax_node(db, self.children[1].clone())
36625 }
36626 pub fn trailing_trivia(&self, db: &dyn SyntaxGroup) -> Trivia {
36627 Trivia::from_syntax_node(db, self.children[2].clone())
36628 }
36629}
36630#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36631pub struct TerminalEmptyPtr(pub SyntaxStablePtrId);
36632impl TerminalEmptyPtr {}
36633impl TypedStablePtr for TerminalEmptyPtr {
36634 type SyntaxNode = TerminalEmpty;
36635 fn untyped(&self) -> SyntaxStablePtrId {
36636 self.0
36637 }
36638 fn lookup(&self, db: &dyn SyntaxGroup) -> TerminalEmpty {
36639 TerminalEmpty::from_syntax_node(db, self.0.lookup(db))
36640 }
36641}
36642impl From<TerminalEmptyPtr> for SyntaxStablePtrId {
36643 fn from(ptr: TerminalEmptyPtr) -> Self {
36644 ptr.untyped()
36645 }
36646}
36647#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36648pub struct TerminalEmptyGreen(pub GreenId);
36649impl TypedSyntaxNode for TerminalEmpty {
36650 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TerminalEmpty);
36651 type StablePtr = TerminalEmptyPtr;
36652 type Green = TerminalEmptyGreen;
36653 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36654 TerminalEmptyGreen(
36655 Arc::new(GreenNode {
36656 kind: SyntaxKind::TerminalEmpty,
36657 details: GreenNodeDetails::Node {
36658 children: vec![
36659 Trivia::missing(db).0,
36660 TokenEmpty::missing(db).0,
36661 Trivia::missing(db).0,
36662 ],
36663 width: TextWidth::default(),
36664 },
36665 })
36666 .intern(db),
36667 )
36668 }
36669 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36670 let kind = node.kind(db);
36671 assert_eq!(
36672 kind,
36673 SyntaxKind::TerminalEmpty,
36674 "Unexpected SyntaxKind {:?}. Expected {:?}.",
36675 kind,
36676 SyntaxKind::TerminalEmpty
36677 );
36678 let children = db.get_children(node.clone());
36679 Self { node, children }
36680 }
36681 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36682 let kind = node.kind(db);
36683 if kind == SyntaxKind::TerminalEmpty {
36684 Some(Self::from_syntax_node(db, node))
36685 } else {
36686 None
36687 }
36688 }
36689 fn as_syntax_node(&self) -> SyntaxNode {
36690 self.node.clone()
36691 }
36692 fn stable_ptr(&self) -> Self::StablePtr {
36693 TerminalEmptyPtr(self.node.0.stable_ptr)
36694 }
36695}
36696impl From<&TerminalEmpty> for SyntaxStablePtrId {
36697 fn from(node: &TerminalEmpty) -> Self {
36698 node.stable_ptr().untyped()
36699 }
36700}
36701#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36702pub struct TokenSingleLineComment {
36703 node: SyntaxNode,
36704}
36705impl Token for TokenSingleLineComment {
36706 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36707 TokenSingleLineCommentGreen(
36708 Arc::new(GreenNode {
36709 kind: SyntaxKind::TokenSingleLineComment,
36710 details: GreenNodeDetails::Token(text),
36711 })
36712 .intern(db),
36713 )
36714 }
36715 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36716 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36717 .clone()
36718 }
36719}
36720#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36721pub struct TokenSingleLineCommentPtr(pub SyntaxStablePtrId);
36722impl TypedStablePtr for TokenSingleLineCommentPtr {
36723 type SyntaxNode = TokenSingleLineComment;
36724 fn untyped(&self) -> SyntaxStablePtrId {
36725 self.0
36726 }
36727 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineComment {
36728 TokenSingleLineComment::from_syntax_node(db, self.0.lookup(db))
36729 }
36730}
36731impl From<TokenSingleLineCommentPtr> for SyntaxStablePtrId {
36732 fn from(ptr: TokenSingleLineCommentPtr) -> Self {
36733 ptr.untyped()
36734 }
36735}
36736#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36737pub struct TokenSingleLineCommentGreen(pub GreenId);
36738impl TokenSingleLineCommentGreen {
36739 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36740 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36741 }
36742}
36743impl TypedSyntaxNode for TokenSingleLineComment {
36744 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineComment);
36745 type StablePtr = TokenSingleLineCommentPtr;
36746 type Green = TokenSingleLineCommentGreen;
36747 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36748 TokenSingleLineCommentGreen(
36749 Arc::new(GreenNode {
36750 kind: SyntaxKind::TokenMissing,
36751 details: GreenNodeDetails::Token("".into()),
36752 })
36753 .intern(db),
36754 )
36755 }
36756 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36757 match node.0.green.lookup_intern(db).details {
36758 GreenNodeDetails::Token(_) => Self { node },
36759 GreenNodeDetails::Node { .. } => panic!(
36760 "Expected a token {:?}, not an internal node",
36761 SyntaxKind::TokenSingleLineComment
36762 ),
36763 }
36764 }
36765 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36766 match node.0.green.lookup_intern(db).details {
36767 GreenNodeDetails::Token(_) => Some(Self { node }),
36768 GreenNodeDetails::Node { .. } => None,
36769 }
36770 }
36771 fn as_syntax_node(&self) -> SyntaxNode {
36772 self.node.clone()
36773 }
36774 fn stable_ptr(&self) -> Self::StablePtr {
36775 TokenSingleLineCommentPtr(self.node.0.stable_ptr)
36776 }
36777}
36778impl From<&TokenSingleLineComment> for SyntaxStablePtrId {
36779 fn from(node: &TokenSingleLineComment) -> Self {
36780 node.stable_ptr().untyped()
36781 }
36782}
36783#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36784pub struct TokenSingleLineInnerComment {
36785 node: SyntaxNode,
36786}
36787impl Token for TokenSingleLineInnerComment {
36788 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36789 TokenSingleLineInnerCommentGreen(
36790 Arc::new(GreenNode {
36791 kind: SyntaxKind::TokenSingleLineInnerComment,
36792 details: GreenNodeDetails::Token(text),
36793 })
36794 .intern(db),
36795 )
36796 }
36797 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36798 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36799 .clone()
36800 }
36801}
36802#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36803pub struct TokenSingleLineInnerCommentPtr(pub SyntaxStablePtrId);
36804impl TypedStablePtr for TokenSingleLineInnerCommentPtr {
36805 type SyntaxNode = TokenSingleLineInnerComment;
36806 fn untyped(&self) -> SyntaxStablePtrId {
36807 self.0
36808 }
36809 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineInnerComment {
36810 TokenSingleLineInnerComment::from_syntax_node(db, self.0.lookup(db))
36811 }
36812}
36813impl From<TokenSingleLineInnerCommentPtr> for SyntaxStablePtrId {
36814 fn from(ptr: TokenSingleLineInnerCommentPtr) -> Self {
36815 ptr.untyped()
36816 }
36817}
36818#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36819pub struct TokenSingleLineInnerCommentGreen(pub GreenId);
36820impl TokenSingleLineInnerCommentGreen {
36821 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36822 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36823 }
36824}
36825impl TypedSyntaxNode for TokenSingleLineInnerComment {
36826 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineInnerComment);
36827 type StablePtr = TokenSingleLineInnerCommentPtr;
36828 type Green = TokenSingleLineInnerCommentGreen;
36829 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36830 TokenSingleLineInnerCommentGreen(
36831 Arc::new(GreenNode {
36832 kind: SyntaxKind::TokenMissing,
36833 details: GreenNodeDetails::Token("".into()),
36834 })
36835 .intern(db),
36836 )
36837 }
36838 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36839 match node.0.green.lookup_intern(db).details {
36840 GreenNodeDetails::Token(_) => Self { node },
36841 GreenNodeDetails::Node { .. } => panic!(
36842 "Expected a token {:?}, not an internal node",
36843 SyntaxKind::TokenSingleLineInnerComment
36844 ),
36845 }
36846 }
36847 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36848 match node.0.green.lookup_intern(db).details {
36849 GreenNodeDetails::Token(_) => Some(Self { node }),
36850 GreenNodeDetails::Node { .. } => None,
36851 }
36852 }
36853 fn as_syntax_node(&self) -> SyntaxNode {
36854 self.node.clone()
36855 }
36856 fn stable_ptr(&self) -> Self::StablePtr {
36857 TokenSingleLineInnerCommentPtr(self.node.0.stable_ptr)
36858 }
36859}
36860impl From<&TokenSingleLineInnerComment> for SyntaxStablePtrId {
36861 fn from(node: &TokenSingleLineInnerComment) -> Self {
36862 node.stable_ptr().untyped()
36863 }
36864}
36865#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36866pub struct TokenSingleLineDocComment {
36867 node: SyntaxNode,
36868}
36869impl Token for TokenSingleLineDocComment {
36870 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36871 TokenSingleLineDocCommentGreen(
36872 Arc::new(GreenNode {
36873 kind: SyntaxKind::TokenSingleLineDocComment,
36874 details: GreenNodeDetails::Token(text),
36875 })
36876 .intern(db),
36877 )
36878 }
36879 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36880 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36881 .clone()
36882 }
36883}
36884#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36885pub struct TokenSingleLineDocCommentPtr(pub SyntaxStablePtrId);
36886impl TypedStablePtr for TokenSingleLineDocCommentPtr {
36887 type SyntaxNode = TokenSingleLineDocComment;
36888 fn untyped(&self) -> SyntaxStablePtrId {
36889 self.0
36890 }
36891 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSingleLineDocComment {
36892 TokenSingleLineDocComment::from_syntax_node(db, self.0.lookup(db))
36893 }
36894}
36895impl From<TokenSingleLineDocCommentPtr> for SyntaxStablePtrId {
36896 fn from(ptr: TokenSingleLineDocCommentPtr) -> Self {
36897 ptr.untyped()
36898 }
36899}
36900#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36901pub struct TokenSingleLineDocCommentGreen(pub GreenId);
36902impl TokenSingleLineDocCommentGreen {
36903 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36904 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36905 }
36906}
36907impl TypedSyntaxNode for TokenSingleLineDocComment {
36908 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSingleLineDocComment);
36909 type StablePtr = TokenSingleLineDocCommentPtr;
36910 type Green = TokenSingleLineDocCommentGreen;
36911 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36912 TokenSingleLineDocCommentGreen(
36913 Arc::new(GreenNode {
36914 kind: SyntaxKind::TokenMissing,
36915 details: GreenNodeDetails::Token("".into()),
36916 })
36917 .intern(db),
36918 )
36919 }
36920 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
36921 match node.0.green.lookup_intern(db).details {
36922 GreenNodeDetails::Token(_) => Self { node },
36923 GreenNodeDetails::Node { .. } => panic!(
36924 "Expected a token {:?}, not an internal node",
36925 SyntaxKind::TokenSingleLineDocComment
36926 ),
36927 }
36928 }
36929 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
36930 match node.0.green.lookup_intern(db).details {
36931 GreenNodeDetails::Token(_) => Some(Self { node }),
36932 GreenNodeDetails::Node { .. } => None,
36933 }
36934 }
36935 fn as_syntax_node(&self) -> SyntaxNode {
36936 self.node.clone()
36937 }
36938 fn stable_ptr(&self) -> Self::StablePtr {
36939 TokenSingleLineDocCommentPtr(self.node.0.stable_ptr)
36940 }
36941}
36942impl From<&TokenSingleLineDocComment> for SyntaxStablePtrId {
36943 fn from(node: &TokenSingleLineDocComment) -> Self {
36944 node.stable_ptr().untyped()
36945 }
36946}
36947#[derive(Clone, Debug, Eq, Hash, PartialEq)]
36948pub struct TokenWhitespace {
36949 node: SyntaxNode,
36950}
36951impl Token for TokenWhitespace {
36952 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
36953 TokenWhitespaceGreen(
36954 Arc::new(GreenNode {
36955 kind: SyntaxKind::TokenWhitespace,
36956 details: GreenNodeDetails::Token(text),
36957 })
36958 .intern(db),
36959 )
36960 }
36961 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36962 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
36963 .clone()
36964 }
36965}
36966#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36967pub struct TokenWhitespacePtr(pub SyntaxStablePtrId);
36968impl TypedStablePtr for TokenWhitespacePtr {
36969 type SyntaxNode = TokenWhitespace;
36970 fn untyped(&self) -> SyntaxStablePtrId {
36971 self.0
36972 }
36973 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenWhitespace {
36974 TokenWhitespace::from_syntax_node(db, self.0.lookup(db))
36975 }
36976}
36977impl From<TokenWhitespacePtr> for SyntaxStablePtrId {
36978 fn from(ptr: TokenWhitespacePtr) -> Self {
36979 ptr.untyped()
36980 }
36981}
36982#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
36983pub struct TokenWhitespaceGreen(pub GreenId);
36984impl TokenWhitespaceGreen {
36985 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
36986 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
36987 }
36988}
36989impl TypedSyntaxNode for TokenWhitespace {
36990 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenWhitespace);
36991 type StablePtr = TokenWhitespacePtr;
36992 type Green = TokenWhitespaceGreen;
36993 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
36994 TokenWhitespaceGreen(
36995 Arc::new(GreenNode {
36996 kind: SyntaxKind::TokenMissing,
36997 details: GreenNodeDetails::Token("".into()),
36998 })
36999 .intern(db),
37000 )
37001 }
37002 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37003 match node.0.green.lookup_intern(db).details {
37004 GreenNodeDetails::Token(_) => Self { node },
37005 GreenNodeDetails::Node { .. } => {
37006 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenWhitespace)
37007 }
37008 }
37009 }
37010 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37011 match node.0.green.lookup_intern(db).details {
37012 GreenNodeDetails::Token(_) => Some(Self { node }),
37013 GreenNodeDetails::Node { .. } => None,
37014 }
37015 }
37016 fn as_syntax_node(&self) -> SyntaxNode {
37017 self.node.clone()
37018 }
37019 fn stable_ptr(&self) -> Self::StablePtr {
37020 TokenWhitespacePtr(self.node.0.stable_ptr)
37021 }
37022}
37023impl From<&TokenWhitespace> for SyntaxStablePtrId {
37024 fn from(node: &TokenWhitespace) -> Self {
37025 node.stable_ptr().untyped()
37026 }
37027}
37028#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37029pub struct TokenNewline {
37030 node: SyntaxNode,
37031}
37032impl Token for TokenNewline {
37033 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37034 TokenNewlineGreen(
37035 Arc::new(GreenNode {
37036 kind: SyntaxKind::TokenNewline,
37037 details: GreenNodeDetails::Token(text),
37038 })
37039 .intern(db),
37040 )
37041 }
37042 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37043 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37044 .clone()
37045 }
37046}
37047#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37048pub struct TokenNewlinePtr(pub SyntaxStablePtrId);
37049impl TypedStablePtr for TokenNewlinePtr {
37050 type SyntaxNode = TokenNewline;
37051 fn untyped(&self) -> SyntaxStablePtrId {
37052 self.0
37053 }
37054 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNewline {
37055 TokenNewline::from_syntax_node(db, self.0.lookup(db))
37056 }
37057}
37058impl From<TokenNewlinePtr> for SyntaxStablePtrId {
37059 fn from(ptr: TokenNewlinePtr) -> Self {
37060 ptr.untyped()
37061 }
37062}
37063#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37064pub struct TokenNewlineGreen(pub GreenId);
37065impl TokenNewlineGreen {
37066 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37067 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37068 }
37069}
37070impl TypedSyntaxNode for TokenNewline {
37071 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenNewline);
37072 type StablePtr = TokenNewlinePtr;
37073 type Green = TokenNewlineGreen;
37074 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37075 TokenNewlineGreen(
37076 Arc::new(GreenNode {
37077 kind: SyntaxKind::TokenMissing,
37078 details: GreenNodeDetails::Token("".into()),
37079 })
37080 .intern(db),
37081 )
37082 }
37083 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37084 match node.0.green.lookup_intern(db).details {
37085 GreenNodeDetails::Token(_) => Self { node },
37086 GreenNodeDetails::Node { .. } => {
37087 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenNewline)
37088 }
37089 }
37090 }
37091 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37092 match node.0.green.lookup_intern(db).details {
37093 GreenNodeDetails::Token(_) => Some(Self { node }),
37094 GreenNodeDetails::Node { .. } => None,
37095 }
37096 }
37097 fn as_syntax_node(&self) -> SyntaxNode {
37098 self.node.clone()
37099 }
37100 fn stable_ptr(&self) -> Self::StablePtr {
37101 TokenNewlinePtr(self.node.0.stable_ptr)
37102 }
37103}
37104impl From<&TokenNewline> for SyntaxStablePtrId {
37105 fn from(node: &TokenNewline) -> Self {
37106 node.stable_ptr().untyped()
37107 }
37108}
37109#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37110pub struct TokenMissing {
37111 node: SyntaxNode,
37112}
37113impl Token for TokenMissing {
37114 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37115 TokenMissingGreen(
37116 Arc::new(GreenNode {
37117 kind: SyntaxKind::TokenMissing,
37118 details: GreenNodeDetails::Token(text),
37119 })
37120 .intern(db),
37121 )
37122 }
37123 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37124 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37125 .clone()
37126 }
37127}
37128#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37129pub struct TokenMissingPtr(pub SyntaxStablePtrId);
37130impl TypedStablePtr for TokenMissingPtr {
37131 type SyntaxNode = TokenMissing;
37132 fn untyped(&self) -> SyntaxStablePtrId {
37133 self.0
37134 }
37135 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenMissing {
37136 TokenMissing::from_syntax_node(db, self.0.lookup(db))
37137 }
37138}
37139impl From<TokenMissingPtr> for SyntaxStablePtrId {
37140 fn from(ptr: TokenMissingPtr) -> Self {
37141 ptr.untyped()
37142 }
37143}
37144#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37145pub struct TokenMissingGreen(pub GreenId);
37146impl TokenMissingGreen {
37147 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37148 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37149 }
37150}
37151impl TypedSyntaxNode for TokenMissing {
37152 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenMissing);
37153 type StablePtr = TokenMissingPtr;
37154 type Green = TokenMissingGreen;
37155 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37156 TokenMissingGreen(
37157 Arc::new(GreenNode {
37158 kind: SyntaxKind::TokenMissing,
37159 details: GreenNodeDetails::Token("".into()),
37160 })
37161 .intern(db),
37162 )
37163 }
37164 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37165 match node.0.green.lookup_intern(db).details {
37166 GreenNodeDetails::Token(_) => Self { node },
37167 GreenNodeDetails::Node { .. } => {
37168 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenMissing)
37169 }
37170 }
37171 }
37172 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37173 match node.0.green.lookup_intern(db).details {
37174 GreenNodeDetails::Token(_) => Some(Self { node }),
37175 GreenNodeDetails::Node { .. } => None,
37176 }
37177 }
37178 fn as_syntax_node(&self) -> SyntaxNode {
37179 self.node.clone()
37180 }
37181 fn stable_ptr(&self) -> Self::StablePtr {
37182 TokenMissingPtr(self.node.0.stable_ptr)
37183 }
37184}
37185impl From<&TokenMissing> for SyntaxStablePtrId {
37186 fn from(node: &TokenMissing) -> Self {
37187 node.stable_ptr().untyped()
37188 }
37189}
37190#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37191pub struct TokenSkipped {
37192 node: SyntaxNode,
37193}
37194impl Token for TokenSkipped {
37195 fn new_green(db: &dyn SyntaxGroup, text: SmolStr) -> Self::Green {
37196 TokenSkippedGreen(
37197 Arc::new(GreenNode {
37198 kind: SyntaxKind::TokenSkipped,
37199 details: GreenNodeDetails::Token(text),
37200 })
37201 .intern(db),
37202 )
37203 }
37204 fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37205 extract_matches!(&self.node.0.green.lookup_intern(db).details, GreenNodeDetails::Token)
37206 .clone()
37207 }
37208}
37209#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37210pub struct TokenSkippedPtr(pub SyntaxStablePtrId);
37211impl TypedStablePtr for TokenSkippedPtr {
37212 type SyntaxNode = TokenSkipped;
37213 fn untyped(&self) -> SyntaxStablePtrId {
37214 self.0
37215 }
37216 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenSkipped {
37217 TokenSkipped::from_syntax_node(db, self.0.lookup(db))
37218 }
37219}
37220impl From<TokenSkippedPtr> for SyntaxStablePtrId {
37221 fn from(ptr: TokenSkippedPtr) -> Self {
37222 ptr.untyped()
37223 }
37224}
37225#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37226pub struct TokenSkippedGreen(pub GreenId);
37227impl TokenSkippedGreen {
37228 pub fn text(&self, db: &dyn SyntaxGroup) -> SmolStr {
37229 extract_matches!(&self.0.lookup_intern(db).details, GreenNodeDetails::Token).clone()
37230 }
37231}
37232impl TypedSyntaxNode for TokenSkipped {
37233 const OPTIONAL_KIND: Option<SyntaxKind> = Some(SyntaxKind::TokenSkipped);
37234 type StablePtr = TokenSkippedPtr;
37235 type Green = TokenSkippedGreen;
37236 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
37237 TokenSkippedGreen(
37238 Arc::new(GreenNode {
37239 kind: SyntaxKind::TokenMissing,
37240 details: GreenNodeDetails::Token("".into()),
37241 })
37242 .intern(db),
37243 )
37244 }
37245 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
37246 match node.0.green.lookup_intern(db).details {
37247 GreenNodeDetails::Token(_) => Self { node },
37248 GreenNodeDetails::Node { .. } => {
37249 panic!("Expected a token {:?}, not an internal node", SyntaxKind::TokenSkipped)
37250 }
37251 }
37252 }
37253 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
37254 match node.0.green.lookup_intern(db).details {
37255 GreenNodeDetails::Token(_) => Some(Self { node }),
37256 GreenNodeDetails::Node { .. } => None,
37257 }
37258 }
37259 fn as_syntax_node(&self) -> SyntaxNode {
37260 self.node.clone()
37261 }
37262 fn stable_ptr(&self) -> Self::StablePtr {
37263 TokenSkippedPtr(self.node.0.stable_ptr)
37264 }
37265}
37266impl From<&TokenSkipped> for SyntaxStablePtrId {
37267 fn from(node: &TokenSkipped) -> Self {
37268 node.stable_ptr().untyped()
37269 }
37270}
37271#[derive(Clone, Debug, Eq, Hash, PartialEq)]
37272pub enum TokenNode {
37273 TerminalIdentifier(TerminalIdentifier),
37274 TerminalLiteralNumber(TerminalLiteralNumber),
37275 TerminalShortString(TerminalShortString),
37276 TerminalString(TerminalString),
37277 TerminalAs(TerminalAs),
37278 TerminalConst(TerminalConst),
37279 TerminalElse(TerminalElse),
37280 TerminalEnum(TerminalEnum),
37281 TerminalExtern(TerminalExtern),
37282 TerminalFalse(TerminalFalse),
37283 TerminalFunction(TerminalFunction),
37284 TerminalIf(TerminalIf),
37285 TerminalWhile(TerminalWhile),
37286 TerminalFor(TerminalFor),
37287 TerminalLoop(TerminalLoop),
37288 TerminalImpl(TerminalImpl),
37289 TerminalImplicits(TerminalImplicits),
37290 TerminalLet(TerminalLet),
37291 TerminalMatch(TerminalMatch),
37292 TerminalModule(TerminalModule),
37293 TerminalMut(TerminalMut),
37294 TerminalNoPanic(TerminalNoPanic),
37295 TerminalOf(TerminalOf),
37296 TerminalRef(TerminalRef),
37297 TerminalContinue(TerminalContinue),
37298 TerminalReturn(TerminalReturn),
37299 TerminalBreak(TerminalBreak),
37300 TerminalStruct(TerminalStruct),
37301 TerminalTrait(TerminalTrait),
37302 TerminalTrue(TerminalTrue),
37303 TerminalType(TerminalType),
37304 TerminalUse(TerminalUse),
37305 TerminalPub(TerminalPub),
37306 TerminalAnd(TerminalAnd),
37307 TerminalAndAnd(TerminalAndAnd),
37308 TerminalArrow(TerminalArrow),
37309 TerminalAt(TerminalAt),
37310 TerminalBadCharacters(TerminalBadCharacters),
37311 TerminalColon(TerminalColon),
37312 TerminalColonColon(TerminalColonColon),
37313 TerminalComma(TerminalComma),
37314 TerminalDiv(TerminalDiv),
37315 TerminalDivEq(TerminalDivEq),
37316 TerminalDot(TerminalDot),
37317 TerminalDotDot(TerminalDotDot),
37318 TerminalDotDotEq(TerminalDotDotEq),
37319 TerminalEndOfFile(TerminalEndOfFile),
37320 TerminalEq(TerminalEq),
37321 TerminalEqEq(TerminalEqEq),
37322 TerminalGE(TerminalGE),
37323 TerminalGT(TerminalGT),
37324 TerminalHash(TerminalHash),
37325 TerminalLBrace(TerminalLBrace),
37326 TerminalLBrack(TerminalLBrack),
37327 TerminalLE(TerminalLE),
37328 TerminalLParen(TerminalLParen),
37329 TerminalLT(TerminalLT),
37330 TerminalMatchArrow(TerminalMatchArrow),
37331 TerminalMinus(TerminalMinus),
37332 TerminalMinusEq(TerminalMinusEq),
37333 TerminalMod(TerminalMod),
37334 TerminalModEq(TerminalModEq),
37335 TerminalMul(TerminalMul),
37336 TerminalMulEq(TerminalMulEq),
37337 TerminalNeq(TerminalNeq),
37338 TerminalNot(TerminalNot),
37339 TerminalBitNot(TerminalBitNot),
37340 TerminalOr(TerminalOr),
37341 TerminalOrOr(TerminalOrOr),
37342 TerminalPlus(TerminalPlus),
37343 TerminalPlusEq(TerminalPlusEq),
37344 TerminalQuestionMark(TerminalQuestionMark),
37345 TerminalRBrace(TerminalRBrace),
37346 TerminalRBrack(TerminalRBrack),
37347 TerminalRParen(TerminalRParen),
37348 TerminalSemicolon(TerminalSemicolon),
37349 TerminalUnderscore(TerminalUnderscore),
37350 TerminalXor(TerminalXor),
37351 TerminalEmpty(TerminalEmpty),
37352}
37353#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
37354pub struct TokenNodePtr(pub SyntaxStablePtrId);
37355impl TypedStablePtr for TokenNodePtr {
37356 type SyntaxNode = TokenNode;
37357 fn untyped(&self) -> SyntaxStablePtrId {
37358 self.0
37359 }
37360 fn lookup(&self, db: &dyn SyntaxGroup) -> TokenNode {
37361 TokenNode::from_syntax_node(db, self.0.lookup(db))
37362 }
37363}
37364impl From<TokenNodePtr> for SyntaxStablePtrId {
37365 fn from(ptr: TokenNodePtr) -> Self {
37366 ptr.untyped()
37367 }
37368}
37369impl From<TerminalIdentifierPtr> for TokenNodePtr {
37370 fn from(value: TerminalIdentifierPtr) -> Self {
37371 Self(value.0)
37372 }
37373}
37374impl From<TerminalLiteralNumberPtr> for TokenNodePtr {
37375 fn from(value: TerminalLiteralNumberPtr) -> Self {
37376 Self(value.0)
37377 }
37378}
37379impl From<TerminalShortStringPtr> for TokenNodePtr {
37380 fn from(value: TerminalShortStringPtr) -> Self {
37381 Self(value.0)
37382 }
37383}
37384impl From<TerminalStringPtr> for TokenNodePtr {
37385 fn from(value: TerminalStringPtr) -> Self {
37386 Self(value.0)
37387 }
37388}
37389impl From<TerminalAsPtr> for TokenNodePtr {
37390 fn from(value: TerminalAsPtr) -> Self {
37391 Self(value.0)
37392 }
37393}
37394impl From<TerminalConstPtr> for TokenNodePtr {
37395 fn from(value: TerminalConstPtr) -> Self {
37396 Self(value.0)
37397 }
37398}
37399impl From<TerminalElsePtr> for TokenNodePtr {
37400 fn from(value: TerminalElsePtr) -> Self {
37401 Self(value.0)
37402 }
37403}
37404impl From<TerminalEnumPtr> for TokenNodePtr {
37405 fn from(value: TerminalEnumPtr) -> Self {
37406 Self(value.0)
37407 }
37408}
37409impl From<TerminalExternPtr> for TokenNodePtr {
37410 fn from(value: TerminalExternPtr) -> Self {
37411 Self(value.0)
37412 }
37413}
37414impl From<TerminalFalsePtr> for TokenNodePtr {
37415 fn from(value: TerminalFalsePtr) -> Self {
37416 Self(value.0)
37417 }
37418}
37419impl From<TerminalFunctionPtr> for TokenNodePtr {
37420 fn from(value: TerminalFunctionPtr) -> Self {
37421 Self(value.0)
37422 }
37423}
37424impl From<TerminalIfPtr> for TokenNodePtr {
37425 fn from(value: TerminalIfPtr) -> Self {
37426 Self(value.0)
37427 }
37428}
37429impl From<TerminalWhilePtr> for TokenNodePtr {
37430 fn from(value: TerminalWhilePtr) -> Self {
37431 Self(value.0)
37432 }
37433}
37434impl From<TerminalForPtr> for TokenNodePtr {
37435 fn from(value: TerminalForPtr) -> Self {
37436 Self(value.0)
37437 }
37438}
37439impl From<TerminalLoopPtr> for TokenNodePtr {
37440 fn from(value: TerminalLoopPtr) -> Self {
37441 Self(value.0)
37442 }
37443}
37444impl From<TerminalImplPtr> for TokenNodePtr {
37445 fn from(value: TerminalImplPtr) -> Self {
37446 Self(value.0)
37447 }
37448}
37449impl From<TerminalImplicitsPtr> for TokenNodePtr {
37450 fn from(value: TerminalImplicitsPtr) -> Self {
37451 Self(value.0)
37452 }
37453}
37454impl From<TerminalLetPtr> for TokenNodePtr {
37455 fn from(value: TerminalLetPtr) -> Self {
37456 Self(value.0)
37457 }
37458}
37459impl From<TerminalMatchPtr> for TokenNodePtr {
37460 fn from(value: TerminalMatchPtr) -> Self {
37461 Self(value.0)
37462 }
37463}
37464impl From<TerminalModulePtr> for TokenNodePtr {
37465 fn from(value: TerminalModulePtr) -> Self {
37466 Self(value.0)
37467 }
37468}
37469impl From<TerminalMutPtr> for TokenNodePtr {
37470 fn from(value: TerminalMutPtr) -> Self {
37471 Self(value.0)
37472 }
37473}
37474impl From<TerminalNoPanicPtr> for TokenNodePtr {
37475 fn from(value: TerminalNoPanicPtr) -> Self {
37476 Self(value.0)
37477 }
37478}
37479impl From<TerminalOfPtr> for TokenNodePtr {
37480 fn from(value: TerminalOfPtr) -> Self {
37481 Self(value.0)
37482 }
37483}
37484impl From<TerminalRefPtr> for TokenNodePtr {
37485 fn from(value: TerminalRefPtr) -> Self {
37486 Self(value.0)
37487 }
37488}
37489impl From<TerminalContinuePtr> for TokenNodePtr {
37490 fn from(value: TerminalContinuePtr) -> Self {
37491 Self(value.0)
37492 }
37493}
37494impl From<TerminalReturnPtr> for TokenNodePtr {
37495 fn from(value: TerminalReturnPtr) -> Self {
37496 Self(value.0)
37497 }
37498}
37499impl From<TerminalBreakPtr> for TokenNodePtr {
37500 fn from(value: TerminalBreakPtr) -> Self {
37501 Self(value.0)
37502 }
37503}
37504impl From<TerminalStructPtr> for TokenNodePtr {
37505 fn from(value: TerminalStructPtr) -> Self {
37506 Self(value.0)
37507 }
37508}
37509impl From<TerminalTraitPtr> for TokenNodePtr {
37510 fn from(value: TerminalTraitPtr) -> Self {
37511 Self(value.0)
37512 }
37513}
37514impl From<TerminalTruePtr> for TokenNodePtr {
37515 fn from(value: TerminalTruePtr) -> Self {
37516 Self(value.0)
37517 }
37518}
37519impl From<TerminalTypePtr> for TokenNodePtr {
37520 fn from(value: TerminalTypePtr) -> Self {
37521 Self(value.0)
37522 }
37523}
37524impl From<TerminalUsePtr> for TokenNodePtr {
37525 fn from(value: TerminalUsePtr) -> Self {
37526 Self(value.0)
37527 }
37528}
37529impl From<TerminalPubPtr> for TokenNodePtr {
37530 fn from(value: TerminalPubPtr) -> Self {
37531 Self(value.0)
37532 }
37533}
37534impl From<TerminalAndPtr> for TokenNodePtr {
37535 fn from(value: TerminalAndPtr) -> Self {
37536 Self(value.0)
37537 }
37538}
37539impl From<TerminalAndAndPtr> for TokenNodePtr {
37540 fn from(value: TerminalAndAndPtr) -> Self {
37541 Self(value.0)
37542 }
37543}
37544impl From<TerminalArrowPtr> for TokenNodePtr {
37545 fn from(value: TerminalArrowPtr) -> Self {
37546 Self(value.0)
37547 }
37548}
37549impl From<TerminalAtPtr> for TokenNodePtr {
37550 fn from(value: TerminalAtPtr) -> Self {
37551 Self(value.0)
37552 }
37553}
37554impl From<TerminalBadCharactersPtr> for TokenNodePtr {
37555 fn from(value: TerminalBadCharactersPtr) -> Self {
37556 Self(value.0)
37557 }
37558}
37559impl From<TerminalColonPtr> for TokenNodePtr {
37560 fn from(value: TerminalColonPtr) -> Self {
37561 Self(value.0)
37562 }
37563}
37564impl From<TerminalColonColonPtr> for TokenNodePtr {
37565 fn from(value: TerminalColonColonPtr) -> Self {
37566 Self(value.0)
37567 }
37568}
37569impl From<TerminalCommaPtr> for TokenNodePtr {
37570 fn from(value: TerminalCommaPtr) -> Self {
37571 Self(value.0)
37572 }
37573}
37574impl From<TerminalDivPtr> for TokenNodePtr {
37575 fn from(value: TerminalDivPtr) -> Self {
37576 Self(value.0)
37577 }
37578}
37579impl From<TerminalDivEqPtr> for TokenNodePtr {
37580 fn from(value: TerminalDivEqPtr) -> Self {
37581 Self(value.0)
37582 }
37583}
37584impl From<TerminalDotPtr> for TokenNodePtr {
37585 fn from(value: TerminalDotPtr) -> Self {
37586 Self(value.0)
37587 }
37588}
37589impl From<TerminalDotDotPtr> for TokenNodePtr {
37590 fn from(value: TerminalDotDotPtr) -> Self {
37591 Self(value.0)
37592 }
37593}
37594impl From<TerminalDotDotEqPtr> for TokenNodePtr {
37595 fn from(value: TerminalDotDotEqPtr) -> Self {
37596 Self(value.0)
37597 }
37598}
37599impl From<TerminalEndOfFilePtr> for TokenNodePtr {
37600 fn from(value: TerminalEndOfFilePtr) -> Self {
37601 Self(value.0)
37602 }
37603}
37604impl From<TerminalEqPtr> for TokenNodePtr {
37605 fn from(value: TerminalEqPtr) -> Self {
37606 Self(value.0)
37607 }
37608}
37609impl From<TerminalEqEqPtr> for TokenNodePtr {
37610 fn from(value: TerminalEqEqPtr) -> Self {
37611 Self(value.0)
37612 }
37613}
37614impl From<TerminalGEPtr> for TokenNodePtr {
37615 fn from(value: TerminalGEPtr) -> Self {
37616 Self(value.0)
37617 }
37618}
37619impl From<TerminalGTPtr> for TokenNodePtr {
37620 fn from(value: TerminalGTPtr) -> Self {
37621 Self(value.0)
37622 }
37623}
37624impl From<TerminalHashPtr> for TokenNodePtr {
37625 fn from(value: TerminalHashPtr) -> Self {
37626 Self(value.0)
37627 }
37628}
37629impl From<TerminalLBracePtr> for TokenNodePtr {
37630 fn from(value: TerminalLBracePtr) -> Self {
37631 Self(value.0)
37632 }
37633}
37634impl From<TerminalLBrackPtr> for TokenNodePtr {
37635 fn from(value: TerminalLBrackPtr) -> Self {
37636 Self(value.0)
37637 }
37638}
37639impl From<TerminalLEPtr> for TokenNodePtr {
37640 fn from(value: TerminalLEPtr) -> Self {
37641 Self(value.0)
37642 }
37643}
37644impl From<TerminalLParenPtr> for TokenNodePtr {
37645 fn from(value: TerminalLParenPtr) -> Self {
37646 Self(value.0)
37647 }
37648}
37649impl From<TerminalLTPtr> for TokenNodePtr {
37650 fn from(value: TerminalLTPtr) -> Self {
37651 Self(value.0)
37652 }
37653}
37654impl From<TerminalMatchArrowPtr> for TokenNodePtr {
37655 fn from(value: TerminalMatchArrowPtr) -> Self {
37656 Self(value.0)
37657 }
37658}
37659impl From<TerminalMinusPtr> for TokenNodePtr {
37660 fn from(value: TerminalMinusPtr) -> Self {
37661 Self(value.0)
37662 }
37663}
37664impl From<TerminalMinusEqPtr> for TokenNodePtr {
37665 fn from(value: TerminalMinusEqPtr) -> Self {
37666 Self(value.0)
37667 }
37668}
37669impl From<TerminalModPtr> for TokenNodePtr {
37670 fn from(value: TerminalModPtr) -> Self {
37671 Self(value.0)
37672 }
37673}
37674impl From<TerminalModEqPtr> for TokenNodePtr {
37675 fn from(value: TerminalModEqPtr) -> Self {
37676 Self(value.0)
37677 }
37678}
37679impl From<TerminalMulPtr> for TokenNodePtr {
37680 fn from(value: TerminalMulPtr) -> Self {
37681 Self(value.0)
37682 }
37683}
37684impl From<TerminalMulEqPtr> for TokenNodePtr {
37685 fn from(value: TerminalMulEqPtr) -> Self {
37686 Self(value.0)
37687 }
37688}
37689impl From<TerminalNeqPtr> for TokenNodePtr {
37690 fn from(value: TerminalNeqPtr) -> Self {
37691 Self(value.0)
37692 }
37693}
37694impl From<TerminalNotPtr> for TokenNodePtr {
37695 fn from(value: TerminalNotPtr) -> Self {
37696 Self(value.0)
37697 }
37698}
37699impl From<TerminalBitNotPtr> for TokenNodePtr {
37700 fn from(value: TerminalBitNotPtr) -> Self {
37701 Self(value.0)
37702 }
37703}
37704impl From<TerminalOrPtr> for TokenNodePtr {
37705 fn from(value: TerminalOrPtr) -> Self {
37706 Self(value.0)
37707 }
37708}
37709impl From<TerminalOrOrPtr> for TokenNodePtr {
37710 fn from(value: TerminalOrOrPtr) -> Self {
37711 Self(value.0)
37712 }
37713}
37714impl From<TerminalPlusPtr> for TokenNodePtr {
37715 fn from(value: TerminalPlusPtr) -> Self {
37716 Self(value.0)
37717 }
37718}
37719impl From<TerminalPlusEqPtr> for TokenNodePtr {
37720 fn from(value: TerminalPlusEqPtr) -> Self {
37721 Self(value.0)
37722 }
37723}
37724impl From<TerminalQuestionMarkPtr> for TokenNodePtr {
37725 fn from(value: TerminalQuestionMarkPtr) -> Self {
37726 Self(value.0)
37727 }
37728}
37729impl From<TerminalRBracePtr> for TokenNodePtr {
37730 fn from(value: TerminalRBracePtr) -> Self {
37731 Self(value.0)
37732 }
37733}
37734impl From<TerminalRBrackPtr> for TokenNodePtr {
37735 fn from(value: TerminalRBrackPtr) -> Self {
37736 Self(value.0)
37737 }
37738}
37739impl From<TerminalRParenPtr> for TokenNodePtr {
37740 fn from(value: TerminalRParenPtr) -> Self {
37741 Self(value.0)
37742 }
37743}
37744impl From<TerminalSemicolonPtr> for TokenNodePtr {
37745 fn from(value: TerminalSemicolonPtr) -> Self {
37746 Self(value.0)
37747 }
37748}
37749impl From<TerminalUnderscorePtr> for TokenNodePtr {
37750 fn from(value: TerminalUnderscorePtr) -> Self {
37751 Self(value.0)
37752 }
37753}
37754impl From<TerminalXorPtr> for TokenNodePtr {
37755 fn from(value: TerminalXorPtr) -> Self {
37756 Self(value.0)
37757 }
37758}
37759impl From<TerminalEmptyPtr> for TokenNodePtr {
37760 fn from(value: TerminalEmptyPtr) -> Self {
37761 Self(value.0)
37762 }
37763}
37764impl From<TerminalIdentifierGreen> for TokenNodeGreen {
37765 fn from(value: TerminalIdentifierGreen) -> Self {
37766 Self(value.0)
37767 }
37768}
37769impl From<TerminalLiteralNumberGreen> for TokenNodeGreen {
37770 fn from(value: TerminalLiteralNumberGreen) -> Self {
37771 Self(value.0)
37772 }
37773}
37774impl From<TerminalShortStringGreen> for TokenNodeGreen {
37775 fn from(value: TerminalShortStringGreen) -> Self {
37776 Self(value.0)
37777 }
37778}
37779impl From<TerminalStringGreen> for TokenNodeGreen {
37780 fn from(value: TerminalStringGreen) -> Self {
37781 Self(value.0)
37782 }
37783}
37784impl From<TerminalAsGreen> for TokenNodeGreen {
37785 fn from(value: TerminalAsGreen) -> Self {
37786 Self(value.0)
37787 }
37788}
37789impl From<TerminalConstGreen> for TokenNodeGreen {
37790 fn from(value: TerminalConstGreen) -> Self {
37791 Self(value.0)
37792 }
37793}
37794impl From<TerminalElseGreen> for TokenNodeGreen {
37795 fn from(value: TerminalElseGreen) -> Self {
37796 Self(value.0)
37797 }
37798}
37799impl From<TerminalEnumGreen> for TokenNodeGreen {
37800 fn from(value: TerminalEnumGreen) -> Self {
37801 Self(value.0)
37802 }
37803}
37804impl From<TerminalExternGreen> for TokenNodeGreen {
37805 fn from(value: TerminalExternGreen) -> Self {
37806 Self(value.0)
37807 }
37808}
37809impl From<TerminalFalseGreen> for TokenNodeGreen {
37810 fn from(value: TerminalFalseGreen) -> Self {
37811 Self(value.0)
37812 }
37813}
37814impl From<TerminalFunctionGreen> for TokenNodeGreen {
37815 fn from(value: TerminalFunctionGreen) -> Self {
37816 Self(value.0)
37817 }
37818}
37819impl From<TerminalIfGreen> for TokenNodeGreen {
37820 fn from(value: TerminalIfGreen) -> Self {
37821 Self(value.0)
37822 }
37823}
37824impl From<TerminalWhileGreen> for TokenNodeGreen {
37825 fn from(value: TerminalWhileGreen) -> Self {
37826 Self(value.0)
37827 }
37828}
37829impl From<TerminalForGreen> for TokenNodeGreen {
37830 fn from(value: TerminalForGreen) -> Self {
37831 Self(value.0)
37832 }
37833}
37834impl From<TerminalLoopGreen> for TokenNodeGreen {
37835 fn from(value: TerminalLoopGreen) -> Self {
37836 Self(value.0)
37837 }
37838}
37839impl From<TerminalImplGreen> for TokenNodeGreen {
37840 fn from(value: TerminalImplGreen) -> Self {
37841 Self(value.0)
37842 }
37843}
37844impl From<TerminalImplicitsGreen> for TokenNodeGreen {
37845 fn from(value: TerminalImplicitsGreen) -> Self {
37846 Self(value.0)
37847 }
37848}
37849impl From<TerminalLetGreen> for TokenNodeGreen {
37850 fn from(value: TerminalLetGreen) -> Self {
37851 Self(value.0)
37852 }
37853}
37854impl From<TerminalMatchGreen> for TokenNodeGreen {
37855 fn from(value: TerminalMatchGreen) -> Self {
37856 Self(value.0)
37857 }
37858}
37859impl From<TerminalModuleGreen> for TokenNodeGreen {
37860 fn from(value: TerminalModuleGreen) -> Self {
37861 Self(value.0)
37862 }
37863}
37864impl From<TerminalMutGreen> for TokenNodeGreen {
37865 fn from(value: TerminalMutGreen) -> Self {
37866 Self(value.0)
37867 }
37868}
37869impl From<TerminalNoPanicGreen> for TokenNodeGreen {
37870 fn from(value: TerminalNoPanicGreen) -> Self {
37871 Self(value.0)
37872 }
37873}
37874impl From<TerminalOfGreen> for TokenNodeGreen {
37875 fn from(value: TerminalOfGreen) -> Self {
37876 Self(value.0)
37877 }
37878}
37879impl From<TerminalRefGreen> for TokenNodeGreen {
37880 fn from(value: TerminalRefGreen) -> Self {
37881 Self(value.0)
37882 }
37883}
37884impl From<TerminalContinueGreen> for TokenNodeGreen {
37885 fn from(value: TerminalContinueGreen) -> Self {
37886 Self(value.0)
37887 }
37888}
37889impl From<TerminalReturnGreen> for TokenNodeGreen {
37890 fn from(value: TerminalReturnGreen) -> Self {
37891 Self(value.0)
37892 }
37893}
37894impl From<TerminalBreakGreen> for TokenNodeGreen {
37895 fn from(value: TerminalBreakGreen) -> Self {
37896 Self(value.0)
37897 }
37898}
37899impl From<TerminalStructGreen> for TokenNodeGreen {
37900 fn from(value: TerminalStructGreen) -> Self {
37901 Self(value.0)
37902 }
37903}
37904impl From<TerminalTraitGreen> for TokenNodeGreen {
37905 fn from(value: TerminalTraitGreen) -> Self {
37906 Self(value.0)
37907 }
37908}
37909impl From<TerminalTrueGreen> for TokenNodeGreen {
37910 fn from(value: TerminalTrueGreen) -> Self {
37911 Self(value.0)
37912 }
37913}
37914impl From<TerminalTypeGreen> for TokenNodeGreen {
37915 fn from(value: TerminalTypeGreen) -> Self {
37916 Self(value.0)
37917 }
37918}
37919impl From<TerminalUseGreen> for TokenNodeGreen {
37920 fn from(value: TerminalUseGreen) -> Self {
37921 Self(value.0)
37922 }
37923}
37924impl From<TerminalPubGreen> for TokenNodeGreen {
37925 fn from(value: TerminalPubGreen) -> Self {
37926 Self(value.0)
37927 }
37928}
37929impl From<TerminalAndGreen> for TokenNodeGreen {
37930 fn from(value: TerminalAndGreen) -> Self {
37931 Self(value.0)
37932 }
37933}
37934impl From<TerminalAndAndGreen> for TokenNodeGreen {
37935 fn from(value: TerminalAndAndGreen) -> Self {
37936 Self(value.0)
37937 }
37938}
37939impl From<TerminalArrowGreen> for TokenNodeGreen {
37940 fn from(value: TerminalArrowGreen) -> Self {
37941 Self(value.0)
37942 }
37943}
37944impl From<TerminalAtGreen> for TokenNodeGreen {
37945 fn from(value: TerminalAtGreen) -> Self {
37946 Self(value.0)
37947 }
37948}
37949impl From<TerminalBadCharactersGreen> for TokenNodeGreen {
37950 fn from(value: TerminalBadCharactersGreen) -> Self {
37951 Self(value.0)
37952 }
37953}
37954impl From<TerminalColonGreen> for TokenNodeGreen {
37955 fn from(value: TerminalColonGreen) -> Self {
37956 Self(value.0)
37957 }
37958}
37959impl From<TerminalColonColonGreen> for TokenNodeGreen {
37960 fn from(value: TerminalColonColonGreen) -> Self {
37961 Self(value.0)
37962 }
37963}
37964impl From<TerminalCommaGreen> for TokenNodeGreen {
37965 fn from(value: TerminalCommaGreen) -> Self {
37966 Self(value.0)
37967 }
37968}
37969impl From<TerminalDivGreen> for TokenNodeGreen {
37970 fn from(value: TerminalDivGreen) -> Self {
37971 Self(value.0)
37972 }
37973}
37974impl From<TerminalDivEqGreen> for TokenNodeGreen {
37975 fn from(value: TerminalDivEqGreen) -> Self {
37976 Self(value.0)
37977 }
37978}
37979impl From<TerminalDotGreen> for TokenNodeGreen {
37980 fn from(value: TerminalDotGreen) -> Self {
37981 Self(value.0)
37982 }
37983}
37984impl From<TerminalDotDotGreen> for TokenNodeGreen {
37985 fn from(value: TerminalDotDotGreen) -> Self {
37986 Self(value.0)
37987 }
37988}
37989impl From<TerminalDotDotEqGreen> for TokenNodeGreen {
37990 fn from(value: TerminalDotDotEqGreen) -> Self {
37991 Self(value.0)
37992 }
37993}
37994impl From<TerminalEndOfFileGreen> for TokenNodeGreen {
37995 fn from(value: TerminalEndOfFileGreen) -> Self {
37996 Self(value.0)
37997 }
37998}
37999impl From<TerminalEqGreen> for TokenNodeGreen {
38000 fn from(value: TerminalEqGreen) -> Self {
38001 Self(value.0)
38002 }
38003}
38004impl From<TerminalEqEqGreen> for TokenNodeGreen {
38005 fn from(value: TerminalEqEqGreen) -> Self {
38006 Self(value.0)
38007 }
38008}
38009impl From<TerminalGEGreen> for TokenNodeGreen {
38010 fn from(value: TerminalGEGreen) -> Self {
38011 Self(value.0)
38012 }
38013}
38014impl From<TerminalGTGreen> for TokenNodeGreen {
38015 fn from(value: TerminalGTGreen) -> Self {
38016 Self(value.0)
38017 }
38018}
38019impl From<TerminalHashGreen> for TokenNodeGreen {
38020 fn from(value: TerminalHashGreen) -> Self {
38021 Self(value.0)
38022 }
38023}
38024impl From<TerminalLBraceGreen> for TokenNodeGreen {
38025 fn from(value: TerminalLBraceGreen) -> Self {
38026 Self(value.0)
38027 }
38028}
38029impl From<TerminalLBrackGreen> for TokenNodeGreen {
38030 fn from(value: TerminalLBrackGreen) -> Self {
38031 Self(value.0)
38032 }
38033}
38034impl From<TerminalLEGreen> for TokenNodeGreen {
38035 fn from(value: TerminalLEGreen) -> Self {
38036 Self(value.0)
38037 }
38038}
38039impl From<TerminalLParenGreen> for TokenNodeGreen {
38040 fn from(value: TerminalLParenGreen) -> Self {
38041 Self(value.0)
38042 }
38043}
38044impl From<TerminalLTGreen> for TokenNodeGreen {
38045 fn from(value: TerminalLTGreen) -> Self {
38046 Self(value.0)
38047 }
38048}
38049impl From<TerminalMatchArrowGreen> for TokenNodeGreen {
38050 fn from(value: TerminalMatchArrowGreen) -> Self {
38051 Self(value.0)
38052 }
38053}
38054impl From<TerminalMinusGreen> for TokenNodeGreen {
38055 fn from(value: TerminalMinusGreen) -> Self {
38056 Self(value.0)
38057 }
38058}
38059impl From<TerminalMinusEqGreen> for TokenNodeGreen {
38060 fn from(value: TerminalMinusEqGreen) -> Self {
38061 Self(value.0)
38062 }
38063}
38064impl From<TerminalModGreen> for TokenNodeGreen {
38065 fn from(value: TerminalModGreen) -> Self {
38066 Self(value.0)
38067 }
38068}
38069impl From<TerminalModEqGreen> for TokenNodeGreen {
38070 fn from(value: TerminalModEqGreen) -> Self {
38071 Self(value.0)
38072 }
38073}
38074impl From<TerminalMulGreen> for TokenNodeGreen {
38075 fn from(value: TerminalMulGreen) -> Self {
38076 Self(value.0)
38077 }
38078}
38079impl From<TerminalMulEqGreen> for TokenNodeGreen {
38080 fn from(value: TerminalMulEqGreen) -> Self {
38081 Self(value.0)
38082 }
38083}
38084impl From<TerminalNeqGreen> for TokenNodeGreen {
38085 fn from(value: TerminalNeqGreen) -> Self {
38086 Self(value.0)
38087 }
38088}
38089impl From<TerminalNotGreen> for TokenNodeGreen {
38090 fn from(value: TerminalNotGreen) -> Self {
38091 Self(value.0)
38092 }
38093}
38094impl From<TerminalBitNotGreen> for TokenNodeGreen {
38095 fn from(value: TerminalBitNotGreen) -> Self {
38096 Self(value.0)
38097 }
38098}
38099impl From<TerminalOrGreen> for TokenNodeGreen {
38100 fn from(value: TerminalOrGreen) -> Self {
38101 Self(value.0)
38102 }
38103}
38104impl From<TerminalOrOrGreen> for TokenNodeGreen {
38105 fn from(value: TerminalOrOrGreen) -> Self {
38106 Self(value.0)
38107 }
38108}
38109impl From<TerminalPlusGreen> for TokenNodeGreen {
38110 fn from(value: TerminalPlusGreen) -> Self {
38111 Self(value.0)
38112 }
38113}
38114impl From<TerminalPlusEqGreen> for TokenNodeGreen {
38115 fn from(value: TerminalPlusEqGreen) -> Self {
38116 Self(value.0)
38117 }
38118}
38119impl From<TerminalQuestionMarkGreen> for TokenNodeGreen {
38120 fn from(value: TerminalQuestionMarkGreen) -> Self {
38121 Self(value.0)
38122 }
38123}
38124impl From<TerminalRBraceGreen> for TokenNodeGreen {
38125 fn from(value: TerminalRBraceGreen) -> Self {
38126 Self(value.0)
38127 }
38128}
38129impl From<TerminalRBrackGreen> for TokenNodeGreen {
38130 fn from(value: TerminalRBrackGreen) -> Self {
38131 Self(value.0)
38132 }
38133}
38134impl From<TerminalRParenGreen> for TokenNodeGreen {
38135 fn from(value: TerminalRParenGreen) -> Self {
38136 Self(value.0)
38137 }
38138}
38139impl From<TerminalSemicolonGreen> for TokenNodeGreen {
38140 fn from(value: TerminalSemicolonGreen) -> Self {
38141 Self(value.0)
38142 }
38143}
38144impl From<TerminalUnderscoreGreen> for TokenNodeGreen {
38145 fn from(value: TerminalUnderscoreGreen) -> Self {
38146 Self(value.0)
38147 }
38148}
38149impl From<TerminalXorGreen> for TokenNodeGreen {
38150 fn from(value: TerminalXorGreen) -> Self {
38151 Self(value.0)
38152 }
38153}
38154impl From<TerminalEmptyGreen> for TokenNodeGreen {
38155 fn from(value: TerminalEmptyGreen) -> Self {
38156 Self(value.0)
38157 }
38158}
38159#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
38160pub struct TokenNodeGreen(pub GreenId);
38161impl TypedSyntaxNode for TokenNode {
38162 const OPTIONAL_KIND: Option<SyntaxKind> = None;
38163 type StablePtr = TokenNodePtr;
38164 type Green = TokenNodeGreen;
38165 fn missing(db: &dyn SyntaxGroup) -> Self::Green {
38166 panic!("No missing variant.");
38167 }
38168 fn from_syntax_node(db: &dyn SyntaxGroup, node: SyntaxNode) -> Self {
38169 let kind = node.kind(db);
38170 match kind {
38171 SyntaxKind::TerminalIdentifier => {
38172 TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node))
38173 }
38174 SyntaxKind::TerminalLiteralNumber => {
38175 TokenNode::TerminalLiteralNumber(TerminalLiteralNumber::from_syntax_node(db, node))
38176 }
38177 SyntaxKind::TerminalShortString => {
38178 TokenNode::TerminalShortString(TerminalShortString::from_syntax_node(db, node))
38179 }
38180 SyntaxKind::TerminalString => {
38181 TokenNode::TerminalString(TerminalString::from_syntax_node(db, node))
38182 }
38183 SyntaxKind::TerminalAs => TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)),
38184 SyntaxKind::TerminalConst => {
38185 TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node))
38186 }
38187 SyntaxKind::TerminalElse => {
38188 TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node))
38189 }
38190 SyntaxKind::TerminalEnum => {
38191 TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node))
38192 }
38193 SyntaxKind::TerminalExtern => {
38194 TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node))
38195 }
38196 SyntaxKind::TerminalFalse => {
38197 TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node))
38198 }
38199 SyntaxKind::TerminalFunction => {
38200 TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node))
38201 }
38202 SyntaxKind::TerminalIf => TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)),
38203 SyntaxKind::TerminalWhile => {
38204 TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node))
38205 }
38206 SyntaxKind::TerminalFor => {
38207 TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node))
38208 }
38209 SyntaxKind::TerminalLoop => {
38210 TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node))
38211 }
38212 SyntaxKind::TerminalImpl => {
38213 TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node))
38214 }
38215 SyntaxKind::TerminalImplicits => {
38216 TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node))
38217 }
38218 SyntaxKind::TerminalLet => {
38219 TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node))
38220 }
38221 SyntaxKind::TerminalMatch => {
38222 TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node))
38223 }
38224 SyntaxKind::TerminalModule => {
38225 TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node))
38226 }
38227 SyntaxKind::TerminalMut => {
38228 TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node))
38229 }
38230 SyntaxKind::TerminalNoPanic => {
38231 TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node))
38232 }
38233 SyntaxKind::TerminalOf => TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)),
38234 SyntaxKind::TerminalRef => {
38235 TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node))
38236 }
38237 SyntaxKind::TerminalContinue => {
38238 TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node))
38239 }
38240 SyntaxKind::TerminalReturn => {
38241 TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node))
38242 }
38243 SyntaxKind::TerminalBreak => {
38244 TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node))
38245 }
38246 SyntaxKind::TerminalStruct => {
38247 TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node))
38248 }
38249 SyntaxKind::TerminalTrait => {
38250 TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node))
38251 }
38252 SyntaxKind::TerminalTrue => {
38253 TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node))
38254 }
38255 SyntaxKind::TerminalType => {
38256 TokenNode::TerminalType(TerminalType::from_syntax_node(db, node))
38257 }
38258 SyntaxKind::TerminalUse => {
38259 TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node))
38260 }
38261 SyntaxKind::TerminalPub => {
38262 TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node))
38263 }
38264 SyntaxKind::TerminalAnd => {
38265 TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node))
38266 }
38267 SyntaxKind::TerminalAndAnd => {
38268 TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node))
38269 }
38270 SyntaxKind::TerminalArrow => {
38271 TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node))
38272 }
38273 SyntaxKind::TerminalAt => TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)),
38274 SyntaxKind::TerminalBadCharacters => {
38275 TokenNode::TerminalBadCharacters(TerminalBadCharacters::from_syntax_node(db, node))
38276 }
38277 SyntaxKind::TerminalColon => {
38278 TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node))
38279 }
38280 SyntaxKind::TerminalColonColon => {
38281 TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node))
38282 }
38283 SyntaxKind::TerminalComma => {
38284 TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node))
38285 }
38286 SyntaxKind::TerminalDiv => {
38287 TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node))
38288 }
38289 SyntaxKind::TerminalDivEq => {
38290 TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node))
38291 }
38292 SyntaxKind::TerminalDot => {
38293 TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node))
38294 }
38295 SyntaxKind::TerminalDotDot => {
38296 TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node))
38297 }
38298 SyntaxKind::TerminalDotDotEq => {
38299 TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node))
38300 }
38301 SyntaxKind::TerminalEndOfFile => {
38302 TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node))
38303 }
38304 SyntaxKind::TerminalEq => TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)),
38305 SyntaxKind::TerminalEqEq => {
38306 TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node))
38307 }
38308 SyntaxKind::TerminalGE => TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)),
38309 SyntaxKind::TerminalGT => TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)),
38310 SyntaxKind::TerminalHash => {
38311 TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node))
38312 }
38313 SyntaxKind::TerminalLBrace => {
38314 TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node))
38315 }
38316 SyntaxKind::TerminalLBrack => {
38317 TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node))
38318 }
38319 SyntaxKind::TerminalLE => TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)),
38320 SyntaxKind::TerminalLParen => {
38321 TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node))
38322 }
38323 SyntaxKind::TerminalLT => TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)),
38324 SyntaxKind::TerminalMatchArrow => {
38325 TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node))
38326 }
38327 SyntaxKind::TerminalMinus => {
38328 TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node))
38329 }
38330 SyntaxKind::TerminalMinusEq => {
38331 TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node))
38332 }
38333 SyntaxKind::TerminalMod => {
38334 TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node))
38335 }
38336 SyntaxKind::TerminalModEq => {
38337 TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node))
38338 }
38339 SyntaxKind::TerminalMul => {
38340 TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node))
38341 }
38342 SyntaxKind::TerminalMulEq => {
38343 TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node))
38344 }
38345 SyntaxKind::TerminalNeq => {
38346 TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node))
38347 }
38348 SyntaxKind::TerminalNot => {
38349 TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node))
38350 }
38351 SyntaxKind::TerminalBitNot => {
38352 TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node))
38353 }
38354 SyntaxKind::TerminalOr => TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)),
38355 SyntaxKind::TerminalOrOr => {
38356 TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node))
38357 }
38358 SyntaxKind::TerminalPlus => {
38359 TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node))
38360 }
38361 SyntaxKind::TerminalPlusEq => {
38362 TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node))
38363 }
38364 SyntaxKind::TerminalQuestionMark => {
38365 TokenNode::TerminalQuestionMark(TerminalQuestionMark::from_syntax_node(db, node))
38366 }
38367 SyntaxKind::TerminalRBrace => {
38368 TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node))
38369 }
38370 SyntaxKind::TerminalRBrack => {
38371 TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node))
38372 }
38373 SyntaxKind::TerminalRParen => {
38374 TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node))
38375 }
38376 SyntaxKind::TerminalSemicolon => {
38377 TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node))
38378 }
38379 SyntaxKind::TerminalUnderscore => {
38380 TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node))
38381 }
38382 SyntaxKind::TerminalXor => {
38383 TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node))
38384 }
38385 SyntaxKind::TerminalEmpty => {
38386 TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node))
38387 }
38388 _ => panic!("Unexpected syntax kind {:?} when constructing {}.", kind, "TokenNode"),
38389 }
38390 }
38391 fn cast(db: &dyn SyntaxGroup, node: SyntaxNode) -> Option<Self> {
38392 let kind = node.kind(db);
38393 match kind {
38394 SyntaxKind::TerminalIdentifier => {
38395 Some(TokenNode::TerminalIdentifier(TerminalIdentifier::from_syntax_node(db, node)))
38396 }
38397 SyntaxKind::TerminalLiteralNumber => Some(TokenNode::TerminalLiteralNumber(
38398 TerminalLiteralNumber::from_syntax_node(db, node),
38399 )),
38400 SyntaxKind::TerminalShortString => Some(TokenNode::TerminalShortString(
38401 TerminalShortString::from_syntax_node(db, node),
38402 )),
38403 SyntaxKind::TerminalString => {
38404 Some(TokenNode::TerminalString(TerminalString::from_syntax_node(db, node)))
38405 }
38406 SyntaxKind::TerminalAs => {
38407 Some(TokenNode::TerminalAs(TerminalAs::from_syntax_node(db, node)))
38408 }
38409 SyntaxKind::TerminalConst => {
38410 Some(TokenNode::TerminalConst(TerminalConst::from_syntax_node(db, node)))
38411 }
38412 SyntaxKind::TerminalElse => {
38413 Some(TokenNode::TerminalElse(TerminalElse::from_syntax_node(db, node)))
38414 }
38415 SyntaxKind::TerminalEnum => {
38416 Some(TokenNode::TerminalEnum(TerminalEnum::from_syntax_node(db, node)))
38417 }
38418 SyntaxKind::TerminalExtern => {
38419 Some(TokenNode::TerminalExtern(TerminalExtern::from_syntax_node(db, node)))
38420 }
38421 SyntaxKind::TerminalFalse => {
38422 Some(TokenNode::TerminalFalse(TerminalFalse::from_syntax_node(db, node)))
38423 }
38424 SyntaxKind::TerminalFunction => {
38425 Some(TokenNode::TerminalFunction(TerminalFunction::from_syntax_node(db, node)))
38426 }
38427 SyntaxKind::TerminalIf => {
38428 Some(TokenNode::TerminalIf(TerminalIf::from_syntax_node(db, node)))
38429 }
38430 SyntaxKind::TerminalWhile => {
38431 Some(TokenNode::TerminalWhile(TerminalWhile::from_syntax_node(db, node)))
38432 }
38433 SyntaxKind::TerminalFor => {
38434 Some(TokenNode::TerminalFor(TerminalFor::from_syntax_node(db, node)))
38435 }
38436 SyntaxKind::TerminalLoop => {
38437 Some(TokenNode::TerminalLoop(TerminalLoop::from_syntax_node(db, node)))
38438 }
38439 SyntaxKind::TerminalImpl => {
38440 Some(TokenNode::TerminalImpl(TerminalImpl::from_syntax_node(db, node)))
38441 }
38442 SyntaxKind::TerminalImplicits => {
38443 Some(TokenNode::TerminalImplicits(TerminalImplicits::from_syntax_node(db, node)))
38444 }
38445 SyntaxKind::TerminalLet => {
38446 Some(TokenNode::TerminalLet(TerminalLet::from_syntax_node(db, node)))
38447 }
38448 SyntaxKind::TerminalMatch => {
38449 Some(TokenNode::TerminalMatch(TerminalMatch::from_syntax_node(db, node)))
38450 }
38451 SyntaxKind::TerminalModule => {
38452 Some(TokenNode::TerminalModule(TerminalModule::from_syntax_node(db, node)))
38453 }
38454 SyntaxKind::TerminalMut => {
38455 Some(TokenNode::TerminalMut(TerminalMut::from_syntax_node(db, node)))
38456 }
38457 SyntaxKind::TerminalNoPanic => {
38458 Some(TokenNode::TerminalNoPanic(TerminalNoPanic::from_syntax_node(db, node)))
38459 }
38460 SyntaxKind::TerminalOf => {
38461 Some(TokenNode::TerminalOf(TerminalOf::from_syntax_node(db, node)))
38462 }
38463 SyntaxKind::TerminalRef => {
38464 Some(TokenNode::TerminalRef(TerminalRef::from_syntax_node(db, node)))
38465 }
38466 SyntaxKind::TerminalContinue => {
38467 Some(TokenNode::TerminalContinue(TerminalContinue::from_syntax_node(db, node)))
38468 }
38469 SyntaxKind::TerminalReturn => {
38470 Some(TokenNode::TerminalReturn(TerminalReturn::from_syntax_node(db, node)))
38471 }
38472 SyntaxKind::TerminalBreak => {
38473 Some(TokenNode::TerminalBreak(TerminalBreak::from_syntax_node(db, node)))
38474 }
38475 SyntaxKind::TerminalStruct => {
38476 Some(TokenNode::TerminalStruct(TerminalStruct::from_syntax_node(db, node)))
38477 }
38478 SyntaxKind::TerminalTrait => {
38479 Some(TokenNode::TerminalTrait(TerminalTrait::from_syntax_node(db, node)))
38480 }
38481 SyntaxKind::TerminalTrue => {
38482 Some(TokenNode::TerminalTrue(TerminalTrue::from_syntax_node(db, node)))
38483 }
38484 SyntaxKind::TerminalType => {
38485 Some(TokenNode::TerminalType(TerminalType::from_syntax_node(db, node)))
38486 }
38487 SyntaxKind::TerminalUse => {
38488 Some(TokenNode::TerminalUse(TerminalUse::from_syntax_node(db, node)))
38489 }
38490 SyntaxKind::TerminalPub => {
38491 Some(TokenNode::TerminalPub(TerminalPub::from_syntax_node(db, node)))
38492 }
38493 SyntaxKind::TerminalAnd => {
38494 Some(TokenNode::TerminalAnd(TerminalAnd::from_syntax_node(db, node)))
38495 }
38496 SyntaxKind::TerminalAndAnd => {
38497 Some(TokenNode::TerminalAndAnd(TerminalAndAnd::from_syntax_node(db, node)))
38498 }
38499 SyntaxKind::TerminalArrow => {
38500 Some(TokenNode::TerminalArrow(TerminalArrow::from_syntax_node(db, node)))
38501 }
38502 SyntaxKind::TerminalAt => {
38503 Some(TokenNode::TerminalAt(TerminalAt::from_syntax_node(db, node)))
38504 }
38505 SyntaxKind::TerminalBadCharacters => Some(TokenNode::TerminalBadCharacters(
38506 TerminalBadCharacters::from_syntax_node(db, node),
38507 )),
38508 SyntaxKind::TerminalColon => {
38509 Some(TokenNode::TerminalColon(TerminalColon::from_syntax_node(db, node)))
38510 }
38511 SyntaxKind::TerminalColonColon => {
38512 Some(TokenNode::TerminalColonColon(TerminalColonColon::from_syntax_node(db, node)))
38513 }
38514 SyntaxKind::TerminalComma => {
38515 Some(TokenNode::TerminalComma(TerminalComma::from_syntax_node(db, node)))
38516 }
38517 SyntaxKind::TerminalDiv => {
38518 Some(TokenNode::TerminalDiv(TerminalDiv::from_syntax_node(db, node)))
38519 }
38520 SyntaxKind::TerminalDivEq => {
38521 Some(TokenNode::TerminalDivEq(TerminalDivEq::from_syntax_node(db, node)))
38522 }
38523 SyntaxKind::TerminalDot => {
38524 Some(TokenNode::TerminalDot(TerminalDot::from_syntax_node(db, node)))
38525 }
38526 SyntaxKind::TerminalDotDot => {
38527 Some(TokenNode::TerminalDotDot(TerminalDotDot::from_syntax_node(db, node)))
38528 }
38529 SyntaxKind::TerminalDotDotEq => {
38530 Some(TokenNode::TerminalDotDotEq(TerminalDotDotEq::from_syntax_node(db, node)))
38531 }
38532 SyntaxKind::TerminalEndOfFile => {
38533 Some(TokenNode::TerminalEndOfFile(TerminalEndOfFile::from_syntax_node(db, node)))
38534 }
38535 SyntaxKind::TerminalEq => {
38536 Some(TokenNode::TerminalEq(TerminalEq::from_syntax_node(db, node)))
38537 }
38538 SyntaxKind::TerminalEqEq => {
38539 Some(TokenNode::TerminalEqEq(TerminalEqEq::from_syntax_node(db, node)))
38540 }
38541 SyntaxKind::TerminalGE => {
38542 Some(TokenNode::TerminalGE(TerminalGE::from_syntax_node(db, node)))
38543 }
38544 SyntaxKind::TerminalGT => {
38545 Some(TokenNode::TerminalGT(TerminalGT::from_syntax_node(db, node)))
38546 }
38547 SyntaxKind::TerminalHash => {
38548 Some(TokenNode::TerminalHash(TerminalHash::from_syntax_node(db, node)))
38549 }
38550 SyntaxKind::TerminalLBrace => {
38551 Some(TokenNode::TerminalLBrace(TerminalLBrace::from_syntax_node(db, node)))
38552 }
38553 SyntaxKind::TerminalLBrack => {
38554 Some(TokenNode::TerminalLBrack(TerminalLBrack::from_syntax_node(db, node)))
38555 }
38556 SyntaxKind::TerminalLE => {
38557 Some(TokenNode::TerminalLE(TerminalLE::from_syntax_node(db, node)))
38558 }
38559 SyntaxKind::TerminalLParen => {
38560 Some(TokenNode::TerminalLParen(TerminalLParen::from_syntax_node(db, node)))
38561 }
38562 SyntaxKind::TerminalLT => {
38563 Some(TokenNode::TerminalLT(TerminalLT::from_syntax_node(db, node)))
38564 }
38565 SyntaxKind::TerminalMatchArrow => {
38566 Some(TokenNode::TerminalMatchArrow(TerminalMatchArrow::from_syntax_node(db, node)))
38567 }
38568 SyntaxKind::TerminalMinus => {
38569 Some(TokenNode::TerminalMinus(TerminalMinus::from_syntax_node(db, node)))
38570 }
38571 SyntaxKind::TerminalMinusEq => {
38572 Some(TokenNode::TerminalMinusEq(TerminalMinusEq::from_syntax_node(db, node)))
38573 }
38574 SyntaxKind::TerminalMod => {
38575 Some(TokenNode::TerminalMod(TerminalMod::from_syntax_node(db, node)))
38576 }
38577 SyntaxKind::TerminalModEq => {
38578 Some(TokenNode::TerminalModEq(TerminalModEq::from_syntax_node(db, node)))
38579 }
38580 SyntaxKind::TerminalMul => {
38581 Some(TokenNode::TerminalMul(TerminalMul::from_syntax_node(db, node)))
38582 }
38583 SyntaxKind::TerminalMulEq => {
38584 Some(TokenNode::TerminalMulEq(TerminalMulEq::from_syntax_node(db, node)))
38585 }
38586 SyntaxKind::TerminalNeq => {
38587 Some(TokenNode::TerminalNeq(TerminalNeq::from_syntax_node(db, node)))
38588 }
38589 SyntaxKind::TerminalNot => {
38590 Some(TokenNode::TerminalNot(TerminalNot::from_syntax_node(db, node)))
38591 }
38592 SyntaxKind::TerminalBitNot => {
38593 Some(TokenNode::TerminalBitNot(TerminalBitNot::from_syntax_node(db, node)))
38594 }
38595 SyntaxKind::TerminalOr => {
38596 Some(TokenNode::TerminalOr(TerminalOr::from_syntax_node(db, node)))
38597 }
38598 SyntaxKind::TerminalOrOr => {
38599 Some(TokenNode::TerminalOrOr(TerminalOrOr::from_syntax_node(db, node)))
38600 }
38601 SyntaxKind::TerminalPlus => {
38602 Some(TokenNode::TerminalPlus(TerminalPlus::from_syntax_node(db, node)))
38603 }
38604 SyntaxKind::TerminalPlusEq => {
38605 Some(TokenNode::TerminalPlusEq(TerminalPlusEq::from_syntax_node(db, node)))
38606 }
38607 SyntaxKind::TerminalQuestionMark => Some(TokenNode::TerminalQuestionMark(
38608 TerminalQuestionMark::from_syntax_node(db, node),
38609 )),
38610 SyntaxKind::TerminalRBrace => {
38611 Some(TokenNode::TerminalRBrace(TerminalRBrace::from_syntax_node(db, node)))
38612 }
38613 SyntaxKind::TerminalRBrack => {
38614 Some(TokenNode::TerminalRBrack(TerminalRBrack::from_syntax_node(db, node)))
38615 }
38616 SyntaxKind::TerminalRParen => {
38617 Some(TokenNode::TerminalRParen(TerminalRParen::from_syntax_node(db, node)))
38618 }
38619 SyntaxKind::TerminalSemicolon => {
38620 Some(TokenNode::TerminalSemicolon(TerminalSemicolon::from_syntax_node(db, node)))
38621 }
38622 SyntaxKind::TerminalUnderscore => {
38623 Some(TokenNode::TerminalUnderscore(TerminalUnderscore::from_syntax_node(db, node)))
38624 }
38625 SyntaxKind::TerminalXor => {
38626 Some(TokenNode::TerminalXor(TerminalXor::from_syntax_node(db, node)))
38627 }
38628 SyntaxKind::TerminalEmpty => {
38629 Some(TokenNode::TerminalEmpty(TerminalEmpty::from_syntax_node(db, node)))
38630 }
38631 _ => None,
38632 }
38633 }
38634 fn as_syntax_node(&self) -> SyntaxNode {
38635 match self {
38636 TokenNode::TerminalIdentifier(x) => x.as_syntax_node(),
38637 TokenNode::TerminalLiteralNumber(x) => x.as_syntax_node(),
38638 TokenNode::TerminalShortString(x) => x.as_syntax_node(),
38639 TokenNode::TerminalString(x) => x.as_syntax_node(),
38640 TokenNode::TerminalAs(x) => x.as_syntax_node(),
38641 TokenNode::TerminalConst(x) => x.as_syntax_node(),
38642 TokenNode::TerminalElse(x) => x.as_syntax_node(),
38643 TokenNode::TerminalEnum(x) => x.as_syntax_node(),
38644 TokenNode::TerminalExtern(x) => x.as_syntax_node(),
38645 TokenNode::TerminalFalse(x) => x.as_syntax_node(),
38646 TokenNode::TerminalFunction(x) => x.as_syntax_node(),
38647 TokenNode::TerminalIf(x) => x.as_syntax_node(),
38648 TokenNode::TerminalWhile(x) => x.as_syntax_node(),
38649 TokenNode::TerminalFor(x) => x.as_syntax_node(),
38650 TokenNode::TerminalLoop(x) => x.as_syntax_node(),
38651 TokenNode::TerminalImpl(x) => x.as_syntax_node(),
38652 TokenNode::TerminalImplicits(x) => x.as_syntax_node(),
38653 TokenNode::TerminalLet(x) => x.as_syntax_node(),
38654 TokenNode::TerminalMatch(x) => x.as_syntax_node(),
38655 TokenNode::TerminalModule(x) => x.as_syntax_node(),
38656 TokenNode::TerminalMut(x) => x.as_syntax_node(),
38657 TokenNode::TerminalNoPanic(x) => x.as_syntax_node(),
38658 TokenNode::TerminalOf(x) => x.as_syntax_node(),
38659 TokenNode::TerminalRef(x) => x.as_syntax_node(),
38660 TokenNode::TerminalContinue(x) => x.as_syntax_node(),
38661 TokenNode::TerminalReturn(x) => x.as_syntax_node(),
38662 TokenNode::TerminalBreak(x) => x.as_syntax_node(),
38663 TokenNode::TerminalStruct(x) => x.as_syntax_node(),
38664 TokenNode::TerminalTrait(x) => x.as_syntax_node(),
38665 TokenNode::TerminalTrue(x) => x.as_syntax_node(),
38666 TokenNode::TerminalType(x) => x.as_syntax_node(),
38667 TokenNode::TerminalUse(x) => x.as_syntax_node(),
38668 TokenNode::TerminalPub(x) => x.as_syntax_node(),
38669 TokenNode::TerminalAnd(x) => x.as_syntax_node(),
38670 TokenNode::TerminalAndAnd(x) => x.as_syntax_node(),
38671 TokenNode::TerminalArrow(x) => x.as_syntax_node(),
38672 TokenNode::TerminalAt(x) => x.as_syntax_node(),
38673 TokenNode::TerminalBadCharacters(x) => x.as_syntax_node(),
38674 TokenNode::TerminalColon(x) => x.as_syntax_node(),
38675 TokenNode::TerminalColonColon(x) => x.as_syntax_node(),
38676 TokenNode::TerminalComma(x) => x.as_syntax_node(),
38677 TokenNode::TerminalDiv(x) => x.as_syntax_node(),
38678 TokenNode::TerminalDivEq(x) => x.as_syntax_node(),
38679 TokenNode::TerminalDot(x) => x.as_syntax_node(),
38680 TokenNode::TerminalDotDot(x) => x.as_syntax_node(),
38681 TokenNode::TerminalDotDotEq(x) => x.as_syntax_node(),
38682 TokenNode::TerminalEndOfFile(x) => x.as_syntax_node(),
38683 TokenNode::TerminalEq(x) => x.as_syntax_node(),
38684 TokenNode::TerminalEqEq(x) => x.as_syntax_node(),
38685 TokenNode::TerminalGE(x) => x.as_syntax_node(),
38686 TokenNode::TerminalGT(x) => x.as_syntax_node(),
38687 TokenNode::TerminalHash(x) => x.as_syntax_node(),
38688 TokenNode::TerminalLBrace(x) => x.as_syntax_node(),
38689 TokenNode::TerminalLBrack(x) => x.as_syntax_node(),
38690 TokenNode::TerminalLE(x) => x.as_syntax_node(),
38691 TokenNode::TerminalLParen(x) => x.as_syntax_node(),
38692 TokenNode::TerminalLT(x) => x.as_syntax_node(),
38693 TokenNode::TerminalMatchArrow(x) => x.as_syntax_node(),
38694 TokenNode::TerminalMinus(x) => x.as_syntax_node(),
38695 TokenNode::TerminalMinusEq(x) => x.as_syntax_node(),
38696 TokenNode::TerminalMod(x) => x.as_syntax_node(),
38697 TokenNode::TerminalModEq(x) => x.as_syntax_node(),
38698 TokenNode::TerminalMul(x) => x.as_syntax_node(),
38699 TokenNode::TerminalMulEq(x) => x.as_syntax_node(),
38700 TokenNode::TerminalNeq(x) => x.as_syntax_node(),
38701 TokenNode::TerminalNot(x) => x.as_syntax_node(),
38702 TokenNode::TerminalBitNot(x) => x.as_syntax_node(),
38703 TokenNode::TerminalOr(x) => x.as_syntax_node(),
38704 TokenNode::TerminalOrOr(x) => x.as_syntax_node(),
38705 TokenNode::TerminalPlus(x) => x.as_syntax_node(),
38706 TokenNode::TerminalPlusEq(x) => x.as_syntax_node(),
38707 TokenNode::TerminalQuestionMark(x) => x.as_syntax_node(),
38708 TokenNode::TerminalRBrace(x) => x.as_syntax_node(),
38709 TokenNode::TerminalRBrack(x) => x.as_syntax_node(),
38710 TokenNode::TerminalRParen(x) => x.as_syntax_node(),
38711 TokenNode::TerminalSemicolon(x) => x.as_syntax_node(),
38712 TokenNode::TerminalUnderscore(x) => x.as_syntax_node(),
38713 TokenNode::TerminalXor(x) => x.as_syntax_node(),
38714 TokenNode::TerminalEmpty(x) => x.as_syntax_node(),
38715 }
38716 }
38717 fn stable_ptr(&self) -> Self::StablePtr {
38718 TokenNodePtr(self.as_syntax_node().0.stable_ptr)
38719 }
38720}
38721impl From<&TokenNode> for SyntaxStablePtrId {
38722 fn from(node: &TokenNode) -> Self {
38723 node.stable_ptr().untyped()
38724 }
38725}
38726impl TokenNode {
38727 pub fn is_variant(kind: SyntaxKind) -> bool {
38729 matches!(
38730 kind,
38731 SyntaxKind::TerminalIdentifier
38732 | SyntaxKind::TerminalLiteralNumber
38733 | SyntaxKind::TerminalShortString
38734 | SyntaxKind::TerminalString
38735 | SyntaxKind::TerminalAs
38736 | SyntaxKind::TerminalConst
38737 | SyntaxKind::TerminalElse
38738 | SyntaxKind::TerminalEnum
38739 | SyntaxKind::TerminalExtern
38740 | SyntaxKind::TerminalFalse
38741 | SyntaxKind::TerminalFunction
38742 | SyntaxKind::TerminalIf
38743 | SyntaxKind::TerminalWhile
38744 | SyntaxKind::TerminalFor
38745 | SyntaxKind::TerminalLoop
38746 | SyntaxKind::TerminalImpl
38747 | SyntaxKind::TerminalImplicits
38748 | SyntaxKind::TerminalLet
38749 | SyntaxKind::TerminalMatch
38750 | SyntaxKind::TerminalModule
38751 | SyntaxKind::TerminalMut
38752 | SyntaxKind::TerminalNoPanic
38753 | SyntaxKind::TerminalOf
38754 | SyntaxKind::TerminalRef
38755 | SyntaxKind::TerminalContinue
38756 | SyntaxKind::TerminalReturn
38757 | SyntaxKind::TerminalBreak
38758 | SyntaxKind::TerminalStruct
38759 | SyntaxKind::TerminalTrait
38760 | SyntaxKind::TerminalTrue
38761 | SyntaxKind::TerminalType
38762 | SyntaxKind::TerminalUse
38763 | SyntaxKind::TerminalPub
38764 | SyntaxKind::TerminalAnd
38765 | SyntaxKind::TerminalAndAnd
38766 | SyntaxKind::TerminalArrow
38767 | SyntaxKind::TerminalAt
38768 | SyntaxKind::TerminalBadCharacters
38769 | SyntaxKind::TerminalColon
38770 | SyntaxKind::TerminalColonColon
38771 | SyntaxKind::TerminalComma
38772 | SyntaxKind::TerminalDiv
38773 | SyntaxKind::TerminalDivEq
38774 | SyntaxKind::TerminalDot
38775 | SyntaxKind::TerminalDotDot
38776 | SyntaxKind::TerminalDotDotEq
38777 | SyntaxKind::TerminalEndOfFile
38778 | SyntaxKind::TerminalEq
38779 | SyntaxKind::TerminalEqEq
38780 | SyntaxKind::TerminalGE
38781 | SyntaxKind::TerminalGT
38782 | SyntaxKind::TerminalHash
38783 | SyntaxKind::TerminalLBrace
38784 | SyntaxKind::TerminalLBrack
38785 | SyntaxKind::TerminalLE
38786 | SyntaxKind::TerminalLParen
38787 | SyntaxKind::TerminalLT
38788 | SyntaxKind::TerminalMatchArrow
38789 | SyntaxKind::TerminalMinus
38790 | SyntaxKind::TerminalMinusEq
38791 | SyntaxKind::TerminalMod
38792 | SyntaxKind::TerminalModEq
38793 | SyntaxKind::TerminalMul
38794 | SyntaxKind::TerminalMulEq
38795 | SyntaxKind::TerminalNeq
38796 | SyntaxKind::TerminalNot
38797 | SyntaxKind::TerminalBitNot
38798 | SyntaxKind::TerminalOr
38799 | SyntaxKind::TerminalOrOr
38800 | SyntaxKind::TerminalPlus
38801 | SyntaxKind::TerminalPlusEq
38802 | SyntaxKind::TerminalQuestionMark
38803 | SyntaxKind::TerminalRBrace
38804 | SyntaxKind::TerminalRBrack
38805 | SyntaxKind::TerminalRParen
38806 | SyntaxKind::TerminalSemicolon
38807 | SyntaxKind::TerminalUnderscore
38808 | SyntaxKind::TerminalXor
38809 | SyntaxKind::TerminalEmpty
38810 )
38811 }
38812}